Compare commits

..

No commits in common. "main" and "v0.4" have entirely different histories.

178 changed files with 3386 additions and 3122 deletions

2
.htaccess Normal file → Executable file
View file

@ -1 +1 @@
ErrorDocument 404 /AEOSTRUNK/index.php?redirect ErrorDocument 404 /index.php?redirect

1571
admin/base.php Normal file → Executable file

File diff suppressed because it is too large Load diff

153
admin/index.php Normal file → Executable file
View file

@ -1,10 +1,14 @@
<?php <?php
ob_start();
session_start(); session_start();
// Inclusion des librairie // Inclusion des librairie
require_once ('../lib/aeos.lib.php'); require_once ('../lib/aeos.lib.php');
require_once ('../lib/config.lib.php'); require_once ('../lib/config.lib.php');
require_once ('../lib/var.lib.php'); require_once ('../lib/var.lib.php');
$password = AEOS_PASSWORD;
$login = AEOS_LOGIN;
$email = AEOS_MAIL;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -14,100 +18,83 @@ require_once ('../lib/var.lib.php');
<title><?php echo AEOS_NAME; ?></title> <title><?php echo AEOS_NAME; ?></title>
<meta name="description" content="<?php echo AEOS_DESC; ?>" /> <meta name="description" content="<?php echo AEOS_DESC; ?>" />
<link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" /> <link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../themes/system/css/fontello.css" /> <script type="text/javascript" src="owEditor/owEditor.js"></script>
<script type="text/javascript" src="pell/pell.min.js"></script>
<link rel="icon" type="image/png" href="../themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" /> <link rel="icon" type="image/png" href="../themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" />
<?php echo checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 0, $subdir)["Data"]; ?>
</head> </head>
<?php if(!isset($_SESSION['_LOGIN'])){ ?> <?php if(!isset($_SESSION['_LOGIN']) || !isset($_SESSION['_PASSWORD'])){ ?>
<body> <body>
<div id="Administration"> <div id="Layout"></div>
<h1> <div id="Administration">
<img src="../themes/system/images/aeos_logo_A_blanc.png" alt=" <?php echo $lang["login_SecurePanel"]; ?>" /> <h1><img src="../themes/system/images/logo_black.png" alt="Logo AEOS" /></h1>
</h1> <h6>
<?php <img src="../themes/system/images/icones/logout.png" alt="Logout" class="icon" />
switch(@$_['o']) Administration - AEOS
{ </h6>
case 'lostPassword':
if (isset($_['email'])) <?php
if (@$_GET['action']=="mdpperdu")
{
if(isset($_POST['login']) && isset($_POST['email']))
{ {
// User exists ? Email matches ? if(($login == $_POST['login']) && (strtolower($email) == strtolower($_POST['email'])))
if(isset($config['configuration']['users'][$_['login']]) && strtolower($config['configuration']['users'][$_['login']]['email']['#text']) == strtolower($_['email']))
{ {
$generatedPassword = generateEasyPassword(12); $mdp = generer_mdp(12);
$generatedPassword = password_hash($generatedPassword,PASSWORD_DEFAULT); sendMail(AEOS_NAME, $email, "Récupération de mot de passe", "Ce mail provient de ".AEOS_NAME.".\nVous avez fait une demande de nouveau mot de passe.\n\nVoici votre nouveau mot de passe: ".$mdp);
sendMail(AEOS_NAME, $config['configuration']['users'][$_['login']]['email']['#text'], $lang['mail_passwordBack'], $lang['mail_newPassword']." ".$generatedPassword); ecriture_xml('../data/config.xml', 'mdp_admin', md5($mdp));
ecriture_xml('../data/config.xml', array('configuration/users/'.$_['login'].'/password'=>$generatedPassword)); echo "<p><span class='valide'>Un email vous a été envoyé.</span></p>";
?><div class='notification valide'><p><i class="icon-emo-happy"></i> <?php echo $lang['mailSentToYou']; ?></p></div><?php }
else
{
echo "<p><span class='erreur'>Login ou email incorrect.</span></p>";
} }
else { ?><div class='notification error'><p><i class="icon-emo-unhappy"></i> <?php echo $lang['wrongLoginEmail']; ?></p></div><?php }
} }
?>
<div class="form">
<form class="login-form" action="index.php?o=lostPassword" method="POST">
<input type="text" name="login" placeholder="<?php echo $lang["login_Username"]; ?>"/>
<input type="email" name="email" placeholder="<?php echo $lang["mailAddress"]; ?>"/>
<button><?php echo $lang["login_sendNewPassword"]; ?></button>
<p class="message">
<a href="index.php"><?php echo $lang["cancel"]; ?></a>
</p>
</form>
</div>
<?php
break;
default:
?> ?>
<div class="form"> <form action="index.php?action=mdpperdu" method="POST">
<form class="login-form" action="index.php" method="POST"> <p>Login<br /><input type="text" name="login" class="input_text" value="" /></p>
<input type="text" name="login" placeholder="<?php echo $lang["login_Username"]; ?>"/> <p>Email<br /><input type="text" name="email" class="input_text" value="" /></p>
<input type="password" name="password" placeholder="<?php echo $lang["login_Password"]; ?>"/> <p><input type="submit" value="Renvoyer un mot de passe" class="input_button" /></p>
<button><i class="icon-login"></i><?php echo $lang["login_Connexion"]; ?></button> </form>
<p class="message"> <p><a href="index.php" class="link">Retour</a></p>
<a href="index.php?o=lostPassword"><?php echo $lang["login_ForgotPassword"]; ?></a> <?php
</p> }
</form> else
</div> {
if(isset($_POST['login']) && isset($_POST['mdp']))
<?php
if(isset($_['login']) && isset($_['password']))
{ {
// User exists ? Password matches ? if(($login == $_POST['login']) && ($password == md5($_POST['mdp'])))
if(isset($config['configuration']['users'][$_['login']]) && password_verify($_['password'], $config['configuration']['users'][$_['login']]['password']['#text']))
{ {
$_SESSION['_LOGIN'] = $_['login']; $_SESSION['_LOGIN'] = $login;
//$_SESSION['_PASSWORD'] = $_['password']; $_SESSION['_PASSWORD'] = $password;
header('Location: index.php'); $n = lecture_xml(URL_CHECK_UPDATE);
if($n['notifications']['update']['#text']!=UPDATE)
{
$_SESSION['_NOTIFICATIONS']=TRUE;
copy(URL_CHECK_UPDATE, 'notifications.xml');
}
else
{
$_SESSION['_NOTIFICATIONS']=FALSE;
}
if($_SESSION['_NOTIFICATIONS']) ecriture_xml('../data/config.xml', 'update', $n['notifications']['update']['#text']);
header('Location: index.php');
}
else
{
echo "<p><span class='erreur'>Login ou mot de passe incorrect.</span></p>";
} }
else { ?><div class='notification error'><p><i class="icon-emo-unhappy"></i> <?php echo $lang['wrongLoginPassword']; ?></p></div><?php }
} }
} ?>
?> <form action="index.php" method="POST">
<p>LOGIN<br /><input type="text" name="login" class="input_text" value="" /></p>
<p>MOT DE PASSE<br /><input type="password" name="mdp" class="input_text" value="" /></p>
<div id="Footer"> <p><input type="submit" value="Connexion" class="input_button" /></p>
<img src="../themes/system/images/logo_a4_300.png" width="250" alt="Logo" /> <p><a href="index.php?action=mdpperdu" class="link">Mot de passe perdu ?</a></p>
<p> </form>
AEOS v<?php echo AEOS_VERSION; ?> - <?php echo $lang["footer_version_loved"]; ?> <?php
</p> }
<hr /> ?>
<h5><?php echo AEOS_BRANCH; ?>/version_<?php echo AEOS_UPDATE; ?>.zip</h5>
<p class="copyright"><?php echo $lang["login_msg_Layus"]; ?></p>
</div> </div>
</body>
</div> <?php } else {require_once('base.php');} ?>
</body>
<?php } else
{
$returned = checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 1, $subdir);
if($returned['OB'])
{
ob_start();
include_once('base.php');
$eyecatcher = ob_get_clean();
echo insertPlugins($eyecatcher, $returned);
}
else require_once('base.php');
} ?>
</html> </html>
<?php ob_end_flush(); ?>

27
admin/notifications.xml Executable file
View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<notifications>
<message>
<type>normal</type>
<contenu>De nouveaux commentaires 06</contenu>
<lien>http://google.fr</lien>
</message>
<message>
<type>apply</type>
<contenu>De nouveaux commentaires 06</contenu>
<lien>http://google.fr</lien>
</message>
<message>
<type>update</type>
<contenu>De nouveaux commentaires 06</contenu>
<lien>http://google.fr</lien>
</message>
<message>
<type>bug</type>
<contenu>De nouveaux commentaires 06</contenu>
<lien>http://google.fr</lien>
</message>
<update>06-07-2013</update>
</notifications>

BIN
admin/owEditor/loader.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
admin/owEditor/owEditor.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

80
admin/owEditor/owEditor.js Executable file
View file

@ -0,0 +1,80 @@
function __(a){return a}function $BK(a){"string"==typeof a&&(a=document.getElementById(a));return a&&!a.appendTo?bkExtend(a,bkElement.prototype):a}function bkClass(){}var bkExtend=function(){var a=arguments;1==a.length&&(a=[this,a[0]]);for(var b in a[1])a[0][b]=a[1][b];return a[0]};bkClass.prototype.construct=function(){};
bkClass.extend=function(a){var b=function(){if(arguments[0]!==bkClass)return this.construct.apply(this,arguments)},c=new this(bkClass);bkExtend(c,a);b.prototype=c;b.extend=this.extend;return b};
var bkElement=bkClass.extend({construct:function(a,b){"string"==typeof a&&(a=(b||document).createElement(a));return a=$BK(a)},appendTo:function(a){a.appendChild(this);return this},appendBefore:function(a){a.parentNode.insertBefore(this,a);return this},addEvent:function(a,b){bkLib.addEvent(this,a,b);return this},setContent:function(a){this.innerHTML=a;return this},pos:function(){var a=curtop=0;obj=this;if(obj.offsetParent){do a+=obj.offsetLeft,curtop+=obj.offsetTop;while(obj=obj.offsetParent)}var b=
window.opera?0:parseInt(this.getStyle("border-width")||this.style.border)||0;return[a+b,curtop+b+this.offsetHeight]},noSelect:function(){bkLib.noSelect(this);return this},parentTag:function(a){var b=this;do{if(b&&b.nodeName&&b.nodeName.toUpperCase()==a)return b;b=b.parentNode}while(b);return!1},hasClass:function(a){return this.className.match(RegExp("(\\s|^)owEdit-"+a+"(\\s|$)"))},addClass:function(a){this.hasClass(a)||(this.className+=" owEdit-"+a);return this},removeClass:function(a){this.hasClass(a)&&
(this.className=this.className.replace(RegExp("(\\s|^)owEdit-"+a+"(\\s|$)")," "));return this},setStyle:function(a){var b=this.style,c;for(c in a)switch(c){case "float":b.cssFloat=b.styleFloat=a[c];break;case "opacity":b.opacity=a[c];b.filter="alpha(opacity="+Math.round(100*a[c])+")";break;case "className":this.className=a[c];break;default:b[c]=a[c]}return this},getStyle:function(a,b){var c=b?b:document.defaultView;if(1==this.nodeType)return c&&c.getComputedStyle?c.getComputedStyle(this,null).getPropertyValue(a):
this.currentStyle[bkLib.camelize(a)]},remove:function(){this.parentNode.removeChild(this);return this},setAttributes:function(a){for(var b in a)this[b]=a[b];return this}}),bkLib={isMSIE:-1!=navigator.appVersion.indexOf("MSIE"),addEvent:function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)},toArray:function(a){for(var b=a.length,c=Array(b);b--;)c[b]=a[b];return c},noSelect:function(a){a.setAttribute&&("input"!=a.nodeName.toLowerCase()&&"textarea"!=a.nodeName.toLowerCase())&&
a.setAttribute("unselectable","on");for(var b=0;b<a.childNodes.length;b++)bkLib.noSelect(a.childNodes[b])},camelize:function(a){return a.replace(/\-(.)/g,function(a,c){return c.toUpperCase()})},inArray:function(a,b){return null!=bkLib.search(a,b)},search:function(a,b){for(var c=0;c<a.length;c++)if(a[c]==b)return c;return null},cancelEvent:function(a){a=a||window.event;a.preventDefault&&a.stopPropagation&&(a.preventDefault(),a.stopPropagation());return!1},domLoad:[],domLoaded:function(){if(!arguments.callee.done)for(arguments.callee.done=
!0,i=0;i<bkLib.domLoad.length;i++)bkLib.domLoad[i]()},onDomLoaded:function(a){this.domLoad.push(a);document.addEventListener?document.addEventListener("DOMContentLoaded",bkLib.domLoaded,null):bkLib.isMSIE&&(document.write("<style>.owEdit-main p { margin: 0; }</style><script id=__ie_onload defer "+("https:"==location.protocol?"src='javascript:void(0)'":"src=//0")+">\x3c/script>"),$BK("__ie_onload").onreadystatechange=function(){"complete"==this.readyState&&bkLib.domLoaded()});window.onload=bkLib.domLoaded}},
bkEvent={addEvent:function(a,b){b&&(this.eventList=this.eventList||{},this.eventList[a]=this.eventList[a]||[],this.eventList[a].push(b));return this},fireEvent:function(){var a=bkLib.toArray(arguments),b=a.shift();if(this.eventList&&this.eventList[b])for(var c=0;c<this.eventList[b].length;c++)this.eventList[b][c].apply(this,a)}};Function.prototype.closure=function(){var a=this,b=bkLib.toArray(arguments),c=b.shift();return function(){if("undefined"!=typeof bkLib)return a.apply(c,b.concat(bkLib.toArray(arguments)))}};
Function.prototype.closureListener=function(){var a=this,b=bkLib.toArray(arguments),c=b.shift();return function(d){d=d||window.event;return a.apply(c,[d,d.target?d.target:d.srcElement].concat(b))}};
var owEditorConfig=bkClass.extend({buttons:{bold:{name:__("Gras"),command:"Bold",tags:["B","STRONG"],css:{"font-weight":"bold"},key:"b"},italic:{name:__("Italique"),command:"Italic",tags:["EM","I"],css:{"font-style":"italic"},key:"i"},underline:{name:__("Souligner"),command:"Underline",tags:["U"],css:{"text-decoration":"underline"},key:"u"},left:{name:__("Alignement \u00e0 gauche"),command:"justifyleft",noActive:!0},center:{name:__("Centrer"),command:"justifycenter",noActive:!0},right:{name:__("Alignement \u00e0 droite"),
command:"justifyright",noActive:!0},justify:{name:__("Alignement justifi\u00e9"),command:"justifyfull",noActive:!0},ol:{name:__("Liste num\u00e9rot\u00e9e"),command:"insertorderedlist",tags:["OL"]},ul:{name:__("Liste simple"),command:"insertunorderedlist",tags:["UL"]},subscript:{name:__("Mettre en exposant"),command:"subscript",tags:["SUB"]},superscript:{name:__("Mettre en indice"),command:"superscript",tags:["SUP"]},strikethrough:{name:__("Rayer"),command:"strikeThrough",css:{"text-decoration":"line-through"}},
removeformat:{name:__("Retirer le formatage"),command:"removeformat",noActive:!0},indent:{name:__("Indenter"),command:"indent",noActive:!0},outdent:{name:__("Retirer l'indentation"),command:"outdent",noActive:!0},hr:{name:__("Ligne horizontale"),command:"insertHorizontalRule",noActive:!0}},iconsPath:"owEditor/owEditor.gif",buttonList:"save bold italic underline left center right justify ol ul fontSize fontFamily fontFormat indent outdent image upload link unlink forecolor bgcolor".split(" "),iconList:{xhtml:1,
bgcolor:2,forecolor:3,bold:4,center:5,hr:6,indent:7,italic:8,justify:9,left:10,ol:11,outdent:12,removeformat:13,right:14,save:25,strikethrough:16,subscript:17,superscript:18,ul:19,underline:20,image:21,link:22,unlink:23,close:24,arrow:26,upload:27}}),owEditors={owPlugins:[],editors:[],registerPlugin:function(a,b){this.owPlugins.push({p:a,o:b})},allTextAreas:function(a){for(var b=document.getElementsByTagName("textarea"),c=0;c<b.length;c++)owEditors.editors.push((new owEditor(a)).panelInstance(b[c]));
return owEditors.editors},findEditor:function(a){for(var b=owEditors.editors,c=0;c<b.length;c++)if(b[c].instanceById(a))return b[c].instanceById(a)}},owEditor=bkClass.extend({construct:function(a){this.options=new owEditorConfig;bkExtend(this.options,a);this.owInstances=[];this.loadedPlugins=[];a=owEditors.owPlugins;for(var b=0;b<a.length;b++)this.loadedPlugins.push(new a[b].p(this,a[b].o));owEditors.editors.push(this);bkLib.addEvent(document.body,"mousedown",this.selectCheck.closureListener(this))},
panelInstance:function(a,b){a=this.checkReplace($BK(a));var c=(new bkElement("DIV")).setStyle({width:(parseInt(a.getStyle("width"))||a.clientWidth)+"px"}).appendBefore(a);this.setPanel(c);return this.addInstance(a,b)},checkReplace:function(a){var b=owEditors.findEditor(a);b&&(b.removeInstance(a),b.removePanel());return a},addInstance:function(a,b){a=this.checkReplace($BK(a));var c=a.contentEditable||window.opera?new owEditorInstance(a,b,this):new owEditorIFrameInstance(a,b,this);this.owInstances.push(c);
return this},removeInstance:function(a){a=$BK(a);for(var b=this.owInstances,c=0;c<b.length;c++)b[c].e==a&&(b[c].remove(),this.owInstances.splice(c,1))},removePanel:function(a){this.owPanel&&(this.owPanel.remove(),this.owPanel=null)},instanceById:function(a){a=$BK(a);for(var b=this.owInstances,c=0;c<b.length;c++)if(b[c].e==a)return b[c]},setPanel:function(a){this.owPanel=new owEditorPanel($BK(a),this.options,this);this.fireEvent("panel",this.owPanel);return this},owCommand:function(a,b){this.selectedInstance&&
this.selectedInstance.owCommand(a,b)},getIcon:function(a,b){var c=this.options.iconList[a],d=b.iconFiles?b.iconFiles[a]:"";return{backgroundImage:"url('"+(c?this.options.iconsPath:d)+"')",backgroundPosition:(c?-18*(c-1):0)+"px 0px"}},selectCheck:function(a,b){do if(b.className&&-1!=b.className.indexOf("owEdit"))return!1;while(b=b.parentNode);this.fireEvent("blur",this.selectedInstance,b);this.lastSelectedInstance=this.selectedInstance;this.selectedInstance=null;return!1}}),owEditor=owEditor.extend(bkEvent),
owEditorInstance=bkClass.extend({isSelected:!1,construct:function(a,b,c){this.ne=c;this.elm=this.e=a;this.options=b||{};newX=parseInt(a.getStyle("width"))||a.clientWidth;newY=parseInt(a.getStyle("height"))||a.clientHeight;this.initialHeight=newY-8;if((c="textarea"==a.nodeName.toLowerCase())||this.options.hasPanel){b=bkLib.isMSIE&&!("undefined"!=typeof document.body.style.maxHeight&&"CSS1Compat"==document.compatMode);var d={width:newX+"px",backgroundColor:"#fff",borderTop:0,overflowY:"auto",overflowX:"hidden"};
d[b?"height":"maxHeight"]=this.ne.options.maxHeight?this.ne.options.maxHeight+"px":null;this.editorContain=(new bkElement("DIV")).setStyle(d).appendBefore(a);d=(new bkElement("DIV")).setStyle({margin:"4px",minHeight:newY+"px"}).addClass("main").appendTo(this.editorContain);d.setAttribute("id","owEdit-main");a.setStyle({display:"none"});d.innerHTML=a.innerHTML;c&&(d.setContent(a.value),this.copyElm=a,(a=a.parentTag("FORM"))&&bkLib.addEvent(a,"submit",this.saveContent.closure(this)));d.setStyle(b?{height:newY+
"px"}:{overflow:"hidden"});this.elm=d}this.ne.addEvent("blur",this.blur.closure(this));this.init();this.blur()},init:function(){this.elm.setAttribute("contentEditable","true");""==this.getContent()&&this.setContent("<br />");this.instanceDoc=document.defaultView;this.elm.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keypress",this.keyDown.closureListener(this)).addEvent("focus",this.selected.closure(this)).addEvent("blur",this.blur.closure(this)).addEvent("keyup",this.selected.closure(this));
this.ne.fireEvent("add",this)},remove:function(){this.saveContent();if(this.copyElm||this.options.hasPanel)this.editorContain.remove(),this.e.setStyle({display:"block"}),this.ne.removePanel();this.disable();this.ne.fireEvent("remove",this)},disable:function(){this.elm.setAttribute("contentEditable","false")},getSel:function(){return window.getSelection?window.getSelection():document.selection},getRng:function(){var a=this.getSel();return a?0<a.rangeCount?a.getRangeAt(0):a.createRange():null},selRng:function(a,
b){window.getSelection?(b.removeAllRanges(),b.addRange(a)):a.select()},selElm:function(){var a=this.getRng();if(a.startContainer){var b=a.startContainer;if(1==a.cloneContents().childNodes.length)for(var c=0;c<b.childNodes.length;c++){var d=b.childNodes[c].ownerDocument.createRange();d.selectNode(b.childNodes[c]);if(1!=a.compareBoundaryPoints(Range.START_TO_START,d)&&-1!=a.compareBoundaryPoints(Range.END_TO_END,d))return $BK(b.childNodes[c])}return $BK(b)}return $BK("Control"==this.getSel().type?a.item(0):
a.parentElement())},saveRng:function(){this.savedRange=this.getRng();this.savedSel=this.getSel()},restoreRng:function(){this.savedRange&&this.selRng(this.savedRange,this.savedSel)},keyDown:function(a,b){a.ctrlKey&&this.ne.fireEvent("key",this,a)},selected:function(a,b){b||(b=this.selElm());if(!a.ctrlKey){var c=this.ne.selectedInstance;c!=this&&(c&&this.ne.fireEvent("blur",c,b),this.ne.selectedInstance=this,this.ne.fireEvent("focus",c,b));this.ne.fireEvent("selected",c,b);this.isFocused=!0;this.elm.addClass("selected")}return!1},
blur:function(){this.isFocused=!1;this.elm.removeClass("selected")},saveContent:function(){if(this.copyElm||this.options.hasPanel)this.ne.fireEvent("save",this),this.copyElm?this.copyElm.value=this.getContent():this.e.innerHTML=this.getContent()},getElm:function(){return this.elm},getContent:function(){this.content=this.getElm().innerHTML;this.ne.fireEvent("get",this);return"<br />"==this.content||"<br />"==this.content?"":this.content},setContent:function(a){this.content=a;this.ne.fireEvent("set",
this);this.elm.innerHTML=this.content},owCommand:function(a,b){document.execCommand(a,!1,b)}}),owEditorIFrameInstance=owEditorInstance.extend({savedStyles:[],init:function(){var a=this.elm.innerHTML.replace(/^\s+|\s+$/g,"");this.elm.innerHTML="";a?a:a="<br />";this.initialContent=a;this.elmFrame=(new bkElement("iframe")).setAttributes({src:"javascript:;",frameBorder:0,allowTransparency:"true",scrolling:"no"}).setStyle({height:"100px"}).addClass("frame").appendTo(this.elm);this.copyElm&&this.elmFrame.setStyle({width:this.elm.offsetWidth-
4+"px"});a=["font-size","font-family","font-weight","color"];for(itm in a)this.savedStyles[bkLib.camelize(itm)]=this.elm.getStyle(itm);setTimeout(this.initFrame.closure(this),50)},disable:function(){this.elm.innerHTML=this.getContent()},initFrame:function(){var a=$BK(this.elmFrame.contentWindow.document);a.designMode="on";a.open();var b=this.ne.options.externalCSS;a.write("<html><head>"+(b?'<link href="'+b+'" rel="stylesheet" type="text/css" />':"")+'</head><body id="owEditContent" style="margin: 0 !important; background-color: transparent !important;">'+
this.initialContent+"</body></html>");a.close();this.frameDoc=a;this.frameWin=$BK(this.elmFrame.contentWindow);this.frameContent=$BK(this.frameWin.document.body).setStyle(this.savedStyles);this.instanceDoc=this.frameWin.document.defaultView;this.heightUpdate();this.frameDoc.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keyup",this.heightUpdate.closureListener(this)).addEvent("keydown",this.keyDown.closureListener(this)).addEvent("keyup",this.selected.closure(this));this.ne.fireEvent("add",
this)},getElm:function(){return this.frameContent},setContent:function(a){this.content=a;this.ne.fireEvent("set",this);this.frameContent.innerHTML=this.content;this.heightUpdate()},getSel:function(){return this.frameWin?this.frameWin.getSelection():this.frameDoc.selection},heightUpdate:function(){this.elmFrame.style.height=Math.max(this.frameContent.offsetHeight,this.initialHeight)+"px"},owCommand:function(a,b){this.frameDoc.execCommand(a,!1,b);setTimeout(this.heightUpdate.closure(this),100)}}),owEditorPanel=
bkClass.extend({construct:function(a,b,c){this.elm=a;this.options=b;this.ne=c;this.panelButtons=[];this.buttonList=bkExtend([],this.ne.options.buttonList);this.panelContain=(new bkElement("DIV")).setStyle({overflow:"hidden"}).addClass("panelContain");this.panelElm=(new bkElement("DIV")).setStyle({margin:"2px",marginTop:"0px",zoom:1,overflow:"hidden"}).addClass("panel").appendTo(this.panelContain);this.panelContain.appendTo(a);b=this.ne.options;c=b.buttons;for(button in c)this.addButton(button,b,!0);
this.reorder();a.noSelect()},addButton:function(a,b,c){c=b.buttons[a];c=c.type?eval("(typeof("+c.type+') == "undefined") ? null : '+c.type+";"):owEditorButton;var d=bkLib.inArray(this.buttonList,a);c&&(d||this.ne.options.fullPanel)&&(this.panelButtons.push(new c(this.panelElm,a,b,this.ne)),d||this.buttonList.push(a))},findButton:function(a){for(var b=0;b<this.panelButtons.length;b++)if(this.panelButtons[b].name==a)return this.panelButtons[b]},reorder:function(){for(var a=this.buttonList,b=0;b<a.length;b++){var c=
this.findButton(a[b]);c&&this.panelElm.appendChild(c.margin)}},remove:function(){this.elm.remove()}}),owEditorButton=bkClass.extend({construct:function(a,b,c,d){this.options=c.buttons[b];this.name=b;this.ne=d;this.elm=a;this.margin=(new bkElement("DIV")).setStyle({"float":"left",marginTop:"2px"}).appendTo(a);this.contain=(new bkElement("DIV")).setStyle({width:"20px",height:"20px"}).addClass("buttonContain").appendTo(this.margin);this.border=(new bkElement("DIV")).setStyle({backgroundColor:"#fff",
border:"1px solid #efefef"}).appendTo(this.contain);this.button=(new bkElement("DIV")).setStyle({width:"18px",height:"18px",overflow:"hidden",zoom:1,cursor:"pointer"}).addClass("button").setStyle(this.ne.getIcon(b,c)).appendTo(this.border);this.button.addEvent("mouseover",this.hoverOn.closure(this)).addEvent("mouseout",this.hoverOff.closure(this)).addEvent("mousedown",this.mouseClick.closure(this)).noSelect();window.opera||(this.button.onmousedown=this.button.onclick=bkLib.cancelEvent);d.addEvent("selected",
this.enable.closure(this)).addEvent("blur",this.disable.closure(this)).addEvent("key",this.key.closure(this));this.disable();this.init()},init:function(){},hide:function(){this.contain.setStyle({display:"none"})},updateState:function(){this.isDisabled?this.setBg():this.isHover?this.setBg("hover"):this.isActive?this.setBg("active"):this.setBg()},setBg:function(a){switch(a){case "hover":var b={border:"1px solid #666",backgroundColor:"#ddd"};break;case "active":b={border:"1px solid #666",backgroundColor:"#ccc"};
break;default:b={border:"1px solid #efefef",backgroundColor:"#efefef"}}this.border.setStyle(b).addClass("button-"+a)},checkNodes:function(a){var b=a;do if(this.options.tags&&bkLib.inArray(this.options.tags,b.nodeName))return this.activate(),!0;while(b=b.parentNode&&"owEdit"!=b.className);for(b=$BK(a);3==b.nodeType;)b=$BK(b.parentNode);if(this.options.css)for(itm in this.options.css)if(b.getStyle(itm,this.ne.selectedInstance.instanceDoc)==this.options.css[itm])return this.activate(),!0;this.deactivate();
return!1},activate:function(){this.isDisabled||(this.isActive=!0,this.updateState(),this.ne.fireEvent("buttonActivate",this))},deactivate:function(){this.isActive=!1;this.updateState();this.isDisabled||this.ne.fireEvent("buttonDeactivate",this)},enable:function(a,b){this.isDisabled=!1;this.contain.setStyle({opacity:1}).addClass("buttonEnabled");this.updateState();this.checkNodes(b)},disable:function(a,b){this.isDisabled=!0;this.contain.setStyle({opacity:0.6}).removeClass("buttonEnabled");this.updateState()},
toggleActive:function(){this.isActive?this.deactivate():this.activate()},hoverOn:function(){this.isDisabled||(this.isHover=!0,this.updateState(),this.ne.fireEvent("buttonOver",this))},hoverOff:function(){this.isHover=!1;this.updateState();this.ne.fireEvent("buttonOut",this)},mouseClick:function(){this.options.command&&(this.ne.owCommand(this.options.command,this.options.commandArgs),this.options.noActive||this.toggleActive());this.ne.fireEvent("buttonClick",this)},key:function(a,b){this.options.key&&
(b.ctrlKey&&String.fromCharCode(b.keyCode||b.charCode).toLowerCase()==this.options.key)&&(this.mouseClick(),b.preventDefault&&b.preventDefault())}}),owPlugin=bkClass.extend({construct:function(a,b){this.options=b;this.ne=a;this.ne.addEvent("panel",this.loadPanel.closure(this));this.init()},loadPanel:function(a){var b=this.options.buttons,c;for(c in b)a.addButton(c,this.options);a.reorder()},init:function(){}}),owPaneOptions={},owEditorPane=bkClass.extend({construct:function(a,b,c,d){this.ne=b;this.elm=
a;this.pos=a.pos();this.contain=(new bkElement("div")).setStyle({zIndex:"99999",overflow:"hidden",position:"absolute",left:this.pos[0]+"px",top:this.pos[1]+"px"});this.pane=(new bkElement("div")).setStyle({fontSize:"12px",border:"1px solid #ccc",overflow:"hidden",padding:"4px",textAlign:"left",backgroundColor:"#ffffc9"}).addClass("pane").setStyle(c).appendTo(this.contain);d&&!d.options.noClose&&(this.close=(new bkElement("div")).setStyle({"float":"right",height:"16px",width:"16px",cursor:"pointer"}).setStyle(this.ne.getIcon("close",
owPaneOptions)).addEvent("mousedown",d.removePane.closure(this)).appendTo(this.pane));this.contain.noSelect().appendTo(document.body);this.position();this.init()},init:function(){},position:function(){if(this.ne.owPanel){var a=this.ne.owPanel.elm,a=a.pos()[0]+parseInt(a.getStyle("width"))-(parseInt(this.pane.getStyle("width"))+8);a<this.pos[0]&&this.contain.setStyle({left:a+"px"})}},toggle:function(){this.isVisible=!this.isVisible;this.contain.setStyle({display:this.isVisible?"block":"none"})},remove:function(){this.contain&&
(this.contain.remove(),this.contain=null)},append:function(a){a.appendTo(this.pane)},setContent:function(a){this.pane.setContent(a)}}),owEditorAdvancedButton=owEditorButton.extend({init:function(){this.ne.addEvent("selected",this.removePane.closure(this)).addEvent("blur",this.removePane.closure(this))},mouseClick:function(){this.isDisabled||(this.pane&&this.pane.pane?this.removePane():(this.pane=new owEditorPane(this.contain,this.ne,{width:this.width||"270px",backgroundColor:"#fff"},this),this.addPane(),
this.ne.selectedInstance.saveRng()))},addForm:function(a,b){this.form=(new bkElement("form")).addEvent("submit",this.submit.closureListener(this));this.pane.append(this.form);this.inputs={};for(itm in a){var c=a[itm],d="";b&&(d=b.getAttribute(itm));d||(d=c.value||"");var f=a[itm].type;if("title"==f)(new bkElement("div")).setContent(c.txt).setStyle({fontSize:"14px",fontWeight:"bold",padding:"0px",margin:"2px 0"}).appendTo(this.form);else{var e=(new bkElement("div")).setStyle({overflow:"hidden",clear:"both"}).appendTo(this.form);
c.txt&&(new bkElement("label")).setAttributes({"for":itm}).setContent(c.txt).setStyle({margin:"2px 4px",fontSize:"13px",width:"50px",lineHeight:"20px",textAlign:"right","float":"left"}).appendTo(e);switch(f){case "text":this.inputs[itm]=(new bkElement("input")).setAttributes({id:itm,value:d,type:"text"}).setStyle({margin:"2px 0",fontSize:"13px","float":"left",height:"20px",border:"1px solid #ccc",overflow:"hidden"}).setStyle(c.style).appendTo(e);break;case "select":this.inputs[itm]=(new bkElement("select")).setAttributes({id:itm}).setStyle({border:"1px solid #ccc",
"float":"left",margin:"2px 0"}).appendTo(e);for(opt in c.options)(new bkElement("option")).setAttributes({value:opt,selected:opt==d?"selected":""}).setContent(c.options[opt]).appendTo(this.inputs[itm]);break;case "content":this.inputs[itm]=(new bkElement("textarea")).setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left"}).setStyle(c.style).appendTo(e),this.inputs[itm].value=d}}}(new bkElement("input")).setAttributes({type:"submit"}).setStyle({backgroundColor:"#efefef",border:"1px solid #ccc",
margin:"3px 0","float":"left",clear:"both"}).appendTo(this.form);this.form.onsubmit=bkLib.cancelEvent},submit:function(){},findElm:function(a,b,c){a=this.ne.selectedInstance.getElm().getElementsByTagName(a);for(var d=0;d<a.length;d++)if(a[d].getAttribute(b)==c)return $BK(a[d])},removePane:function(){this.pane&&(this.pane.remove(),this.pane=null,this.ne.selectedInstance.restoreRng())}}),owButtonTips=bkClass.extend({construct:function(a){this.ne=a;a.addEvent("buttonOver",this.show.closure(this)).addEvent("buttonOut",
this.hide.closure(this))},show:function(a){this.timer=setTimeout(this.create.closure(this,a),400)},create:function(a){this.timer=null;this.pane||(this.pane=new owEditorPane(a.button,this.ne,{fontSize:"12px",marginTop:"5px"}),this.pane.setContent(a.options.name))},hide:function(a){this.timer&&clearTimeout(this.timer);this.pane&&(this.pane=this.pane.remove())}});owEditors.registerPlugin(owButtonTips);
var owSelectOptions={buttons:{fontSize:{name:__("Taille"),type:"owEditorFontSizeSelect",command:"fontsize"},fontFamily:{name:__("Famille"),type:"owEditorFontFamilySelect",command:"fontname"},fontFormat:{name:__("Format"),type:"owEditorFontFormatSelect",command:"formatBlock"}}},owEditorSelect=bkClass.extend({construct:function(a,b,c,d){this.options=c.buttons[b];this.elm=a;this.ne=d;this.name=b;this.selOptions=[];this.margin=(new bkElement("div")).setStyle({"float":"left",margin:"2px 1px 0 1px"}).appendTo(this.elm);
this.contain=(new bkElement("div")).setStyle({width:"90px",height:"20px",cursor:"pointer",overflow:"hidden"}).addClass("selectContain").addEvent("click",this.toggle.closure(this)).appendTo(this.margin);this.items=(new bkElement("div")).setStyle({overflow:"hidden",zoom:1,border:"1px solid #ccc",paddingLeft:"3px",backgroundColor:"#fff"}).appendTo(this.contain);this.control=(new bkElement("div")).setStyle({overflow:"hidden","float":"right",height:"18px",width:"16px"}).addClass("selectControl").setStyle(this.ne.getIcon("arrow",
c)).appendTo(this.items);this.txt=(new bkElement("div")).setStyle({overflow:"hidden","float":"left",width:"66px",height:"14px",marginTop:"1px",fontFamily:"sans-serif",textAlign:"center",fontSize:"12px"}).addClass("selectTxt").appendTo(this.items);window.opera||(this.contain.onmousedown=this.control.onmousedown=this.txt.onmousedown=bkLib.cancelEvent);this.margin.noSelect();this.ne.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this));this.disable();this.init()},
disable:function(){this.isDisabled=!0;this.close();this.contain.setStyle({opacity:0.6})},enable:function(a){this.isDisabled=!1;this.close();this.contain.setStyle({opacity:1})},setDisplay:function(a){this.txt.setContent(a)},toggle:function(){this.isDisabled||(this.pane?this.close():this.open())},open:function(){this.pane=new owEditorPane(this.items,this.ne,{width:"88px",padding:"0px",borderTop:0,borderLeft:"1px solid #ccc",borderRight:"1px solid #ccc",borderBottom:"0px",backgroundColor:"#fff"});for(var a=
0;a<this.selOptions.length;a++){var b=this.selOptions[a],c=(new bkElement("div")).setStyle({overflow:"hidden",borderBottom:"1px solid #ccc",width:"88px",textAlign:"left",overflow:"hidden",cursor:"pointer"}),d=(new bkElement("div")).setStyle({padding:"0px 4px"}).setContent(b[1]).appendTo(c).noSelect();d.addEvent("click",this.update.closure(this,b[0])).addEvent("mouseover",this.over.closure(this,d)).addEvent("mouseout",this.out.closure(this,d)).setAttributes("id",b[0]);this.pane.append(c);window.opera||
(d.onmousedown=bkLib.cancelEvent)}},close:function(){this.pane&&(this.pane=this.pane.remove())},over:function(a){a.setStyle({backgroundColor:"#ccc"})},out:function(a){a.setStyle({backgroundColor:"#fff"})},add:function(a,b){this.selOptions.push([a,b])},update:function(a){this.ne.owCommand(this.options.command,a);this.close()}}),owEditorFontSizeSelect=owEditorSelect.extend({sel:{1:"1 (8pt)",2:"2 (10pt)",3:"3 (12pt)",4:"4 (14pt)",5:"5 (18pt)",6:"6 (24pt)"},init:function(){this.setDisplay("Taille...");
for(itm in this.sel)this.add(itm,'<font size="'+itm+'">'+this.sel[itm]+"</font>")}}),owEditorFontFamilySelect=owEditorSelect.extend({sel:{arial:"Arial","comic sans ms":"Comic Sans","courier new":"Courier New",georgia:"Georgia",helvetica:"Helvetica",impact:"Impact","times new roman":"Times","trebuchet ms":"Trebuchet",verdana:"Verdana"},init:function(){this.setDisplay("Famille...");for(itm in this.sel)this.add(itm,'<font face="'+itm+'">'+this.sel[itm]+"</font>")}}),owEditorFontFormatSelect=owEditorSelect.extend({sel:{p:"Paragraph",
pre:"Pre",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1"},init:function(){this.setDisplay("Format...");for(itm in this.sel){var a=itm.toUpperCase();this.add("<"+a+">","<"+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+"</"+a+">")}}});owEditors.registerPlugin(owPlugin,owSelectOptions);
var owLinkOptions={buttons:{link:{name:"Ajouter un lien",type:"owLinkButton",tags:["A"]},unlink:{name:"Retirer un lien",command:"unlink",noActive:!0}}},owLinkButton=owEditorAdvancedButton.extend({addPane:function(){this.ln=this.ne.selectedInstance.selElm().parentTag("A");this.addForm({"":{type:"title",txt:"Add/Edit Link"},href:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},title:{type:"text",txt:"Title"},target:{type:"select",txt:"Open In",options:{"":"Current Window",_blank:"New Window"},
style:{width:"100px"}}},this.ln)},submit:function(a){a=this.inputs.href.value;if("http://"==a||""==a)return alert("You must enter a URL to Create a Link"),!1;this.removePane();this.ln||(this.ne.owCommand("createlink","javascript:owTemp();"),this.ln=this.findElm("A","href","javascript:owTemp();"));this.ln&&this.ln.setAttributes({href:this.inputs.href.value,title:this.inputs.title.value,target:this.inputs.target.options[this.inputs.target.selectedIndex].value})}});
owEditors.registerPlugin(owPlugin,owLinkOptions);
var owColorOptions={buttons:{forecolor:{name:__("Changer couleur du texte"),type:"owEditorColorButton",noClose:!0},bgcolor:{name:__("Changer couleur du fond de texte"),type:"owEditorBgColorButton",noClose:!0}}},owEditorColorButton=owEditorAdvancedButton.extend({addPane:function(){var a={0:"00",1:"33",2:"66",3:"99",4:"CC",5:"FF"},b=(new bkElement("DIV")).setStyle({width:"270px"}),c;for(c in a)for(var d in a)for(var f in a){var e="#"+a[c]+a[f]+a[d],g=(new bkElement("DIV")).setStyle({cursor:"pointer",
height:"15px","float":"left"}).appendTo(b),l=(new bkElement("DIV")).setStyle({border:"2px solid "+e}).appendTo(g),e=(new bkElement("DIV")).setStyle({backgroundColor:e,overflow:"hidden",width:"11px",height:"11px"}).addEvent("click",this.colorSelect.closure(this,e)).addEvent("mouseover",this.on.closure(this,l)).addEvent("mouseout",this.off.closure(this,l,e)).appendTo(l);window.opera||(g.onmousedown=e.onmousedown=bkLib.cancelEvent)}this.pane.append(b.noSelect())},colorSelect:function(a){this.ne.owCommand("foreColor",
a);this.removePane()},on:function(a){a.setStyle({border:"2px solid #000"})},off:function(a,b){a.setStyle({border:"2px solid "+b})}}),owEditorBgColorButton=owEditorColorButton.extend({colorSelect:function(a){this.ne.owCommand("hiliteColor",a);this.removePane()}});owEditors.registerPlugin(owPlugin,owColorOptions);
var owImageOptions={buttons:{image:{name:"Ajouter une image",type:"owImageButton",tags:["IMG"]}}},owImageButton=owEditorAdvancedButton.extend({addPane:function(){this.im=this.ne.selectedInstance.selElm().parentTag("IMG");this.addForm({"":{type:"title",txt:"Ajouter/Editer une image"},src:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},alt:{type:"text",txt:"Desc.",style:{width:"100px"}},align:{type:"select",txt:"Align.",options:{none:"Basique",left:"Gauche",right:"Droite"}}},this.im)},
submit:function(a){a=this.inputs.src.value;if(""==a||"http://"==a)return alert("You must enter a Image URL to insert"),!1;this.removePane();this.im||(this.ne.owCommand("insertImage","javascript:owImTemp();"),this.im=this.findElm("IMG","src","javascript:owImTemp();"));this.im&&this.im.setAttributes({src:this.inputs.src.value,alt:this.inputs.alt.value,align:this.inputs.align.value})}});owEditors.registerPlugin(owPlugin,owImageOptions);
var owSaveOptions={buttons:{save:{name:__("Sauvegarder le contenu"),type:"owEditorSaveButton"}}},owEditorSaveButton=owEditorButton.extend({init:function(){this.ne.options.onSave||this.margin.setStyle({display:"none"})},mouseClick:function(){var a=this.ne.options.onSave,b=this.ne.selectedInstance;a(b.getContent(),b.elm.id,b)}});owEditors.registerPlugin(owPlugin,owSaveOptions);
var owUploadOptions={buttons:{upload:{name:"Uploader une image",type:"owUploadButton"}}},owUploadButton=owEditorAdvancedButton.extend({owURI:"owEditor/upload.php",addPane:function(){this.im=this.ne.selectedInstance.selElm().parentTag("IMG");this.myID=Math.round(Math.random()*Math.pow(10,15));this.requestInterval=1E3;this.uri=this.ne.options.uploadURI||this.owURI;owUploadButton.lastPlugin=this;this.myFrame=(new bkElement("iframe")).setAttributes({height:"100px",frameBorder:0,scrolling:"no"}).setStyle({border:0}).appendTo(this.pane.pane);
this.progressWrapper=(new bkElement("div")).setStyle({display:"none",height:"20px",border:"1px solid #ccc"}).appendTo(this.pane.pane);this.progress=(new bkElement("div")).setStyle({width:"0%",height:"20px",backgroundColor:"#ccc"}).setContent("&nbsp").appendTo(this.progressWrapper);setTimeout(this.addForm.closure(this),50)},addForm:function(){var a=this.myDoc=this.myFrame.contentWindow.document;a.open();a.write("<html><body>");a.write('<form method="post" action="'+this.uri+"?id="+this.myID+'" enctype="multipart/form-data">');
a.write('<input type="hidden" name="APC_UPLOAD_PROGRESS" value="'+this.myID+'" />');a.write('<div style="font-size: 14px; font-weight: bold; padding-top: 5px;">Inserer une image</div>');a.write('<input name="owImage" type="file" style="margin-top: 10px;" />');a.write("</form>");a.write("</body></html>");a.close();this.myBody=a.body;this.myForm=$BK(this.myBody.getElementsByTagName("form")[0]);this.myInput=$BK(this.myBody.getElementsByTagName("input")[1]).addEvent("change",this.startUpload.closure(this));
this.myStatus=(new bkElement("div",this.myDoc)).setStyle({textAlign:"center",fontSize:"14px"}).appendTo(this.myBody)},startUpload:function(){this.myForm.setStyle({display:"none"});this.myStatus.setContent('<img src="owEditor/loader.gif" style="float: right; margin-right: 40px;" /><strong>Upload en cours...</strong><br />Patientez...');this.myForm.submit();setTimeout(this.makeRequest.closure(this),this.requestInterval)},makeRequest:function(){if(this.pane&&this.pane.pane){owUploadButton.lastPlugin=
this;var a=(new bkElement("script")).setAttributes({type:"text/javascript",src:this.uri+"?check="+this.myID+"&rand="+Math.round(Math.random()*Math.pow(10,15))}).addEvent("load",function(){a.parentNode.removeChild(a)}).appendTo(document.getElementsByTagName("head")[0]);this.requestInterval&&setTimeout(this.makeRequest.closure(this),this.requestInterval)}},setProgress:function(a){this.progressWrapper.setStyle({display:"block"});this.progress.setStyle({width:a+"%"})},update:function(a){if(!1==a)this.progressWrapper.setStyle({display:"none"});
else if(a.url){this.setProgress(100);this.requestInterval=!1;this.im||(this.ne.selectedInstance.restoreRng(),this.ne.owCommand("insertImage","javascript:owImTemp();"),this.im=this.findElm("IMG","src","javascript:owImTemp();"));var b=parseInt(this.ne.selectedInstance.elm.getStyle("width"));this.im&&this.im.setAttributes({src:a.url,width:b&&a.width?Math.min(b,a.width):""});this.removePane()}else if(a.error)this.requestInterval=!1,this.setProgress(100),alert("There was an error uploading your image ("+
a.error+")."),this.removePane();else if(a.noprogress){if(this.progressWrapper.setStyle({display:"none"}),-1==this.uri.indexOf("http:")||-1!=this.uri.indexOf(window.location.host))this.requestInterval=!1}else this.setProgress(Math.round(75*(a.current/a.total))),a.interval&&(this.requestInterval=a.interval)}});owUploadButton.statusCb=function(a){owUploadButton.lastPlugin.update(a)};owEditors.registerPlugin(owPlugin,owUploadOptions);
var owXHTML=bkClass.extend({stripAttributes:["_moz_dirty","_moz_resizing","_extended"],noShort:["style","title","script","textarea","a"],cssReplace:{"font-weight:bold;":"strong","font-style:italic;":"em"},sizes:{1:"xx-small",2:"x-small",3:"small",4:"medium",5:"large",6:"x-large"},construct:function(a){this.ne=a;this.ne.options.xhtml&&a.addEvent("get",this.cleanup.closure(this))},cleanup:function(a){var b=a.getElm(),b=this.toXHTML(b);a.content=b},toXHTML:function(a,b,c){var d=c="",f="",e=a.nodeType,
g=a.nodeName.toLowerCase(),l=a.hasChildNodes&&a.hasChildNodes(),n=[];switch(e){case 1:var p=a.attributes;switch(g){case "b":g="strong";break;case "i":g="em";break;case "font":g="span"}if(b){for(e=0;e<p.length;e++){var k=p[e],m=k.nodeName.toLowerCase(),h=k.nodeValue;if(k.specified&&h&&!bkLib.inArray(this.stripAttributes,m)&&"function"!=typeof h){switch(m){case "style":k=h.replace(/ /g,"");for(itm in this.cssReplace)-1!=k.indexOf(itm)&&(n.push(this.cssReplace[itm]),k=k.replace(itm,""));f+=k;h="";break;
case "class":h=h.replace("Apple-style-span","");break;case "size":f+="font-size:"+this.sizes[h]+";",h=""}h&&(d+=" "+m+'="'+h+'"')}}f&&(d+=' style="'+f+'"');for(e=0;e<n.length;e++)c+="<"+n[e]+">";""==d&&"span"==g&&(b=!1);b&&(c+="<"+g,"br /"!=g&&(c+=d))}if(l||bkLib.inArray(this.noShort,m))for(b&&(c+=">"),e=0;e<a.childNodes.length;e++)(m=this.toXHTML(a.childNodes[e],!0,!0))&&(c+=m);else b&&(c+=" />");b&&l&&(c+="</"+g+">");for(e=0;e<n.length;e++)c+="</"+n[e]+">";break;case 3:c+=a.nodeValue}return c}});
owEditors.registerPlugin(owXHTML);
var owBBCode=bkClass.extend({construct:function(a){this.ne=a;if(this.ne.options.bbCode)for(itm in a.addEvent("get",this.bbGet.closure(this)),a.addEvent("set",this.bbSet.closure(this)),a=this.ne.loadedPlugins,a)a[itm].toXHTML&&(this.xhtml=a[itm])},bbGet:function(a){var b=this.xhtml.toXHTML(a.getElm());a.content=this.toBBCode(b)},bbSet:function(a){a.content=this.fromBBCode(a.content)},toBBCode:function(a){function b(b,d){a=a.replace(b,d)}b(/\n/gi,"");b(/<strong>(.*?)<\/strong>/gi,"[b]$1[/b]");b(/<em>(.*?)<\/em>/gi,
"[i]$1[/i]");b(/<span.*?style="text-decoration:underline;">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<ul>(.*?)<\/ul>/gi,"[list]$1[/list]");b(/<li>(.*?)<\/li>/gi,"[*]$1[]");b(/<ol>(.*?)<\/ol>/gi,"[list=1]$1[/list]");b(/<img.*?src="(.*?)".*?>/gi,"[img]$1[/img]");b(/<a.*?href="(.*?)".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<br.*?>/gi,"\n");b(/<.*?>.*?<\/.*?>/gi,"");return a},fromBBCode:function(a){function b(b,d){a=a.replace(b,d)}b(/\[b\](.*?)\[\/b\]/gi,"<strong>$1</strong>");b(/\[i\](.*?)\[\/i\]/gi,"<em>$1</em>");
b(/\[u\](.*?)\[\/u\]/gi,'<span style="text-decoration:underline;">$1</span>');b(/\[list\](.*?)\[\/list\]/gi,"<ul>$1</ul>");b(/\[list=1\](.*?)\[\/list\]/gi,"<ol>$1</ol>");b(/\[\*\](.*?)\[\/\*\]/gi,"<li>$1</li>");b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[url=(.*?)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\n/gi,"<br />");return a}});owEditors.registerPlugin(owBBCode);
var owEditor=owEditor.extend({floatingPanel:function(){this.floating=(new bkElement("DIV")).setStyle({position:"absolute",top:"-1000px"}).appendTo(document.body);this.addEvent("focus",this.reposition.closure(this)).addEvent("blur",this.hide.closure(this));this.setPanel(this.floating)},reposition:function(){var a=this.selectedInstance.e;this.floating.setStyle({width:(parseInt(a.getStyle("width"))||a.clientWidth)+"px"});var b=a.offsetTop-this.floating.offsetHeight;0>b&&(b=a.offsetTop+a.offsetHeight);
this.floating.setStyle({top:b+"px",left:a.offsetLeft+"px",display:"block"})},hide:function(){this.floating.setStyle({top:"-1000px"})}}),owCodeOptions={buttons:{xhtml:{name:"Modifier le code source HTML",type:"owCodeButton"}}},owCodeButton=owEditorAdvancedButton.extend({width:"350px",addPane:function(){this.addForm({"":{type:"title",txt:"Edit HTML"},code:{type:"content",value:this.ne.selectedInstance.getContent(),style:{width:"340px",height:"200px"}}})},submit:function(a){this.ne.selectedInstance.setContent(this.inputs.code.value);
this.removePane()}});owEditors.registerPlugin(owPlugin,owCodeOptions);

162
admin/owEditor/upload.php Executable file
View file

@ -0,0 +1,162 @@
<?php
define('OWUPLOAD_PATH', "../../data/images");
define('OWUPLOAD_URI', "../../data/images");
$owupload_allowed_extensions = array('jpg','jpeg','png','gif','bmp');
$rfc1867 = function_exists('apc_fetch') && ini_get('apc.rfc1867');
$id = $_POST['APC_UPLOAD_PROGRESS'];
if(empty($id)) $id = $_GET['id'];
if($_SERVER['REQUEST_METHOD']=='POST')
{
$file = $_FILES['owImage'];
$image = $file['tmp_name'];
$max_upload_size = ini_max_upload_size();
$ext = strtolower(substr(strrchr($file['name'], '.'), 1));
@$size = getimagesize($image);
$filename = $id.'.'.$ext;
$path = OWUPLOAD_PATH.'/'.$filename;
if(!move_uploaded_file($image, $path)) {
owupload_error('Impossible de déplacer le fichier.');
}
if($rfc1867) {
$status = apc_fetch('upload_'.$id);
}
if(!$status) {
$status = array();
}
$status['done'] = 1;
$status['width'] = $size[0];
$status['url'] = owupload_file_uri($filename);
if($rfc1867) {
apc_store('upload_'.$id, $status);
}
owupload_output($status, $rfc1867);
exit;
}
else if(isset($_GET['check']))
{
$check = $_GET['check'];
if($rfc1867) {
$status = apc_fetch('upload_'.$check);
if($status['total'] > 500000 && $status['current']/$status['total'] < 0.9 ) { // Large file and we are < 90% complete
$status['interval'] = 3000;
} else if($status['total'] > 200000 && $status['current']/$status['total'] < 0.8 ) { // Is this a largeish file and we are < 80% complete
$status['interval'] = 2000;
} else {
$status['interval'] = 1000;
}
owupload_output($status);
} else {
$status = array();
$status['noprogress'] = true;
foreach($owupload_allowed_extensions as $e) {
if(file_exists(OWUPLOAD_PATH.'/'.$check.'.'.$e)) {
$ext = $e;
break;
}
}
if($ext) {
$status['url'] = owupload_file_uri($check.'.'.$ext);
}
owupload_output($status);
}
}
// Display error
function owupload_error($msg)
{
echo owupload_output(array('error' => $msg));
}
function owupload_output($status, $showLoadingMsg = false)
{
$script = '
try
{
'.(($_SERVER['REQUEST_METHOD']=='POST') ? 'top.' : '').'owUploadButton.statusCb('.json_encode($status).');
} catch(e) { alert(e.message); }
';
if($_SERVER['REQUEST_METHOD']=='POST')
{
echo '<script>'.$script.'</script>';
}
else
{
echo $script;
}
if($_SERVER['REQUEST_METHOD']=='POST' && $showLoadingMsg)
{
echo
<<<END
<html><body>
<div id="uploadingMessage" style="text-align: center; font-size: 14px;">
<img src="owEditor/loader.gif" style="float: right; margin-right: 40px;" />
<strong>Upload en cours...</strong><br />
</div>
</body></html>
END;
}
exit;
}
function owupload_file_uri($filename)
{
$path = $_SERVER['PHP_SELF'];
$file = basename ($path);
if($_SERVER['SERVER_PORT']!=80) $base = str_replace($file,"", $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['SCRIPT_NAME']);
else $base = str_replace($file,"", $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);
$base = str_replace('/admin/owEditor/','', $base);
//$folder = "http://".$base."/data/images"; // => 127*/.../*images
$folder = "../../data/images"; // => 127*/.../*images
return $folder.'/'.$filename;
}
function ini_max_upload_size()
{
$post_size = ini_get('post_max_size');
$upload_size = ini_get('upload_max_filesize');
if(!$post_size) $post_size = '8M';
if(!$upload_size) $upload_size = '2M';
return min( ini_bytes_from_string($post_size), ini_bytes_from_string($upload_size) );
}
function ini_bytes_from_string($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
function bytes_to_readable( $bytes )
{
if ($bytes<=0)
return '0 Byte';
$convention=1000; //[1000->10^x|1024->2^x]
$s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
$e=floor(log($bytes,$convention));
return round($bytes/pow($convention,$e),2).' '.$s[$e];
}
?>

266
admin/pell/pell.min.js vendored
View file

@ -1,266 +0,0 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.pell = factory());
}(this, function () { 'use strict';
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var addEventListener = function addEventListener(parent, type, listener) {
return parent.addEventListener(type, listener);
};
var appendChild = function appendChild(parent, child) {
return parent.appendChild(child);
};
var createElement = function createElement(tag) {
return document.createElement(tag);
};
var defaultParagraphSeparatorString = 'defaultParagraphSeparator';
var exec = function exec(command) {
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
return document.execCommand(command, false, value);
};
var formatBlock = 'formatBlock';
var queryCommandState = function queryCommandState(command) {
return document.queryCommandState(command);
};
var queryCommandValue = function queryCommandValue(command) {
return document.queryCommandValue(command);
};
var bold = {
icon: '<b>B</b>',
result: function result() {
return exec('bold');
},
state: function state() {
return queryCommandState('bold');
},
title: 'Bold'
};
var code = {
icon: '&lt;/&gt;',
result: function result() {
return exec(formatBlock, '<pre>');
},
title: 'Code'
};
var heading1 = {
icon: '<b>H<sub>1</sub></b>',
result: function result() {
return exec(formatBlock, '<h1>');
},
title: 'Heading 1'
};
var heading2 = {
icon: '<b>H<sub>2</sub></b>',
result: function result() {
return exec(formatBlock, '<h2>');
},
title: 'Heading 2'
};
var image = {
icon: '&#128247;',
result: function result() {
var url = window.prompt('Enter the image URL');
if (url) exec('insertImage', url);
},
title: 'Image'
};
var italic = {
icon: '<i>I</i>',
result: function result() {
return exec('italic');
},
state: function state() {
return queryCommandState('italic');
},
title: 'Italic'
};
var line = {
icon: '&#8213;',
result: function result() {
return exec('insertHorizontalRule');
},
title: 'Horizontal Line'
};
var link = {
icon: '&#128279;',
result: function result() {
var url = window.prompt('Enter the link URL');
if (url) exec('createLink', url);
},
title: 'Link'
};
var olist = {
icon: '&#35;',
result: function result() {
return exec('insertOrderedList');
},
title: 'Ordered List'
};
var paragraph = {
icon: '&#182;',
result: function result() {
return exec(formatBlock, '<p>');
},
title: 'Paragraph'
};
var quote = {
icon: '&#8220; &#8221;',
result: function result() {
return exec(formatBlock, '<blockquote>');
},
title: 'Quote'
};
var strikethrough = {
icon: '<strike>S</strike>',
result: function result() {
return exec('strikeThrough');
},
state: function state() {
return queryCommandState('strikeThrough');
},
title: 'Strike-through'
};
var ulist = {
icon: '&#8226;',
result: function result() {
return exec('insertUnorderedList');
},
title: 'Unordered List'
};
var underline = {
icon: '<u>U</u>',
result: function result() {
return exec('underline');
},
state: function state() {
return queryCommandState('underline');
},
title: 'Underline'
};
var defaultActions = {
bold: bold,
code: code,
heading1: heading1,
heading2: heading2,
image: image,
italic: italic,
line: line,
link: link,
olist: olist,
paragraph: paragraph,
quote: quote,
strikethrough: strikethrough,
ulist: ulist,
underline: underline
};
var defaultClasses = {
actionbar: 'pell-actionbar',
button: 'pell-button',
content: 'pell-content',
selected: 'pell-button-selected'
};
var init = function init(settings) {
var actions = settings.actions ? settings.actions.map(function (action) {
if (typeof action === 'string') return defaultActions[action];else if (defaultActions[action.name]) return _objectSpread({}, defaultActions[action.name], action);
return action;
}) : Object.keys(defaultActions).map(function (action) {
return defaultActions[action];
});
var classes = _objectSpread({}, defaultClasses, settings.classes);
var defaultParagraphSeparator = settings[defaultParagraphSeparatorString] || 'div';
var actionbar = createElement('div');
actionbar.className = classes.actionbar;
appendChild(settings.element, actionbar);
var content = settings.element.content = createElement('div');
content.contentEditable = true;
content.className = classes.content;
content.className = classes.content;
content.id = "pell-id";
content.oninput = function (_ref) {
var firstChild = _ref.target.firstChild;
if (firstChild && firstChild.nodeType === 3) exec(formatBlock, "<".concat(defaultParagraphSeparator, ">"));else if (content.innerHTML === '<br>') content.innerHTML = '';
settings.onChange(content.innerHTML);
};
content.onkeydown = function (event) {
if (event.key === 'Enter' && queryCommandValue(formatBlock) === 'blockquote') {
setTimeout(function () {
return exec(formatBlock, "<".concat(defaultParagraphSeparator, ">"));
}, 0);
}
};
appendChild(settings.element, content);
actions.forEach(function (action) {
var button = createElement('button');
button.className = classes.button;
button.innerHTML = action.icon;
button.title = action.title;
button.setAttribute('type', 'button');
button.onclick = function () {
return action.result() && content.focus();
};
if (action.state) {
var handler = function handler() {
return button.classList[action.state() ? 'add' : 'remove'](classes.selected);
};
addEventListener(content, 'keyup', handler);
addEventListener(content, 'mouseup', handler);
addEventListener(button, 'click', handler);
}
appendChild(actionbar, button);
});
if (settings.styleWithCSS) exec('styleWithCSS');
exec(defaultParagraphSeparatorString, defaultParagraphSeparator);
return settings.element;
};
var pell = {
init: init
};
return pell;
}));

2
core/.htaccess Executable file
View file

@ -0,0 +1,2 @@
Options -Indexes
deny from all

8
core/base.php Normal file → Executable file
View file

@ -1,5 +1,5 @@
<?php <?php
$contenu = lecture_xml(DATA_PAGES.$lecture_pages[$id].'.xml'); $contenu = lecture_xml($DATA_PAGES.$lecture_pages[$id].'.xml');
if(file_exists("modules/".$contenu['page']['type']['#text']."/base.php")==FALSE || $contenu['page']['etat']['#text']==0) if(file_exists("modules/".$contenu['page']['type']['#text']."/base.php")==FALSE || $contenu['page']['etat']['#text']==0)
echo "<span class='erreur'>Impossible d'accéder à la page demandée.</span>"; echo "<span class='erreur'>Impossible d'accéder à la page demandée.</span>";
else include_once("modules/".$contenu['page']['type']['#text']."/base.php"); else include_once("modules/".$contenu['page']['type']['#text']."/base.php");
@ -10,16 +10,16 @@
<div id="DeadZone"></div> <div id="DeadZone"></div>
<div id="LifeZone"> <div id="LifeZone">
<h1>Moteur généré par AEOS - CMS</h1> <h1>Moteur généré par AEOS - CMS</h1>
<p><img src="themes/system/images/logo_aeos.png" alt="Logo" /></p> <p><img src="themes/system/images/logo_black.png" alt="Logo" /></p>
<p> <p>
<?php echo "AEOS v".AEOS_VERSION; ?> <?php echo "AEOS v".AEOS_VERSION; ?>
</p> </p>
<p> <p>
Copyright © 2004 - <?php echo date('Y'); ?> NNS Production. Tous droits réservés. Copyright © 2004 - <?php echo date('Y'); ?> NNS Production. Tous droits rérvés.
</p> </p>
<p> <p>
<a href="<?php echo AEOS_REAL_URL; ?>">AEOS</a> est un logiciel libre sous licence GNU/GPL. <a href="<?php echo AEOS_REAL_URL; ?>">AEOS</a> est un logiciel libre sous licence GNU/GPL.
</p> </p>
</div><?php </div><?php
} }
?> ?>

8
core/footer.php Normal file → Executable file
View file

@ -1,6 +1,6 @@
<a href='<?php echo AEOS_REAL_URL; ?>' title='AEOS est un logiciel libre sous licence GNU/GPL.'>AEOS</a> v<?php echo AEOS_VERSION; ?> - <?php echo $lang["footer_version_loved"]; ?><br /> <?php
define('EXEC_END_TIME', microtime(true));
?>
<a href='<?php echo AEOS_REAL_URL; ?>' title='AEOS est un logiciel libre sous licence GNU/GPL.'>AEOS</a> v<?php echo AEOS_VERSION; ?> (<?php echo round(EXEC_END_TIME-EXEC_START_TIME, 3); ?>)<br />
<?php echo AEOS_FOOTER; ?><br /> <?php echo AEOS_FOOTER; ?><br />
<span style="font-size:10px;"><a href="<?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"../":"admin/"; ?>"><?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"Retour au site":"Administration"; ?></a> - <a href="#">Haut de page</a></span> <span style="font-size:10px;"><a href="<?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"../":"admin/"; ?>"><?php echo preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])?"Retour au site":"Administration"; ?></a> - <a href="#">Haut de page</a></span>
<?php echo checkFiles($subdir.AEOS_MODULE.'/'.AEOS_THEME, 2, $subdir)["Data"];
?>

0
core/index.html Normal file → Executable file
View file

9
core/menu.php Normal file → Executable file
View file

@ -3,17 +3,14 @@
$list=listing_ordre(); $list=listing_ordre();
foreach ($list as &$pages) foreach ($list as &$pages)
{ {
$page = lecture_xml(DATA_PAGES.$pages); $page = lecture_xml($DATA_PAGES.$pages);
if ($page['page']['etat']['#text']==1) if ($page['page']['etat']['#text']==1)
{ {
echo "<li><a href='"; echo "<li><a href='".AEOS_REW.$page['page']['id']['#text']."-".valideURL($page['page']['nom']['#text'])."' title='".$page['page']['nom']['#text']."'>";
echo (AEOS_REWMODE)?AEOS_REWKEY.$page['page']['id']['#text']."-".valideURL($page['page']['nom']['#text']):"?id=".$page['page']['id']['#text'];
echo "' title='".$page['page']['nom']['#text']."'>";
if ($page['page']['id']['#text']==$id){echo "<b>"; } if ($page['page']['id']['#text']==$id){echo "<b>"; }
echo $page['page']['nom']['#text']; echo $page['page']['nom']['#text'];
if ($page['page']['id']['#text']==$id){echo "</b>"; } if ($page['page']['id']['#text']==$id){echo "</b>"; }
echo "</a></li>"; echo "</a></li>";
} }
} }
?> ?>

19
core/menu.php~ Executable file
View file

@ -0,0 +1,19 @@
<?php
// Listings des pages + menu
$list=listing_ordre();
$j=1;
foreach ($list as &$pages)
{
$page = lecture_xml($DATA_PAGES.$pages);
if ($page['page']['etat']['#text']==1)
{
echo "<li class='Each".$j."'><a href='".AEOS_REW.$page['page']['id']['#text']."-".valideURL($page['page']['nom']['#text'])."' title='".$page['page']['nom']['#text']."'>";
if ($page['page']['id']['#text']==$id){echo "<b>"; }
echo $page['page']['nom']['#text'];
if ($page['page']['id']['#text']==$id){echo "</b>"; }
echo "</a></li>";
}
$j++;
}
unset($j);
?>

8
credits.txt Normal file → Executable file
View file

@ -1,7 +1,5 @@
Crédits: Crédits:
[NNS Production] Développement & Design [NNS Production] Développement & Design
[Brian Kirchoff] Original nicEditor [Brian Kirchoff] Original nicEditor
[holger1] Fonction PHP XML2ARRAY [holger1] Fonction PHP XML2ARRAY
[nullivex] Fonction PHP ARRAY2XML
[patrickblackjr] Changelog design

10
data/.htaccess Normal file → Executable file
View file

@ -1,4 +1,6 @@
<FilesMatch ".(xml)$"> Options -Indexes
order allow,deny Deny from all
deny from all
</FilesMatch> <FilesMatch "\.(gif|jpe?g|png|ttf|woff|svg|eot)$">
Allow from all
</FilesMatch>

29
data/config.xml Executable file
View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<nom_site>AEOS</nom_site>
<description_site>Version Stable d'AEOS.</description_site>
<lang>fr</lang>
<login_admin>admin</login_admin>
<email_admin>admin@admin.fr</email_admin>
<mdp_admin>21232f297a57a5a743894a0e4a801fc3</mdp_admin>
<accueil>1</accueil>
<theme>main</theme>
<contentd>0</contentd>
<version>0.4 [CALVARIUM]</version>
<maintenance>off</maintenance>
<debug>TRUE</debug>
<message>Site en maintenance</message>
<footer>
<![CDATA[
Copyright © 2013 NNS Production<br /><br />
AEOS est un logiciel libre sous licence GNU/GPL v3<br />
Toutes suggestions, patchs ou commentaires sont les bienvenues
]]>
</footer>
<update></update>
<urlrewriting>1</urlrewriting>
<urlrewriting_key/>
</configuration>

BIN
data/fonts/headline.eot Executable file

Binary file not shown.

121
data/fonts/headline.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 41 KiB

BIN
data/fonts/headline.ttf Executable file

Binary file not shown.

BIN
data/fonts/headline.woff Executable file

Binary file not shown.

BIN
data/fonts/simplesnails.eot Executable file

Binary file not shown.

220
data/fonts/simplesnails.svg Executable file
View file

@ -0,0 +1,220 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="simplesnails_ver_4.0_regular" horiz-adv-x="1331" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="437" />
<glyph horiz-adv-x="2048" />
<glyph horiz-adv-x="2048" />
<glyph unicode="&#xd;" horiz-adv-x="508" />
<glyph unicode=" " horiz-adv-x="437" />
<glyph unicode="&#x09;" horiz-adv-x="437" />
<glyph unicode="&#xa0;" horiz-adv-x="437" />
<glyph unicode="!" horiz-adv-x="357" d="M114 24l2 21q83 116 100 115l20 -1q20 -5 19 -22q-5 -69 -112 -135l-10 1q-20 1 -19 21zM203 399q14 169 46.5 351.5t98.5 425.5t176.5 333t11.5 -101q-216 -645 -237 -813t-42 -198t-35 -29h-10q0 11 -9 31z" />
<glyph unicode="&#x22;" horiz-adv-x="767" d="M285 1121q-51 62 27 425l43 115q27 70 68 62q14 -16 24 -21l-4 -9q-84 -360 -105 -548q-17 -26 -53 -24zM476 1121q-51 62 27 425l43 115q27 70 68 62q14 -16 24 -21l-4 -9q-84 -360 -105 -548q-17 -26 -53 -24z" />
<glyph unicode="#" horiz-adv-x="1297" d="M23 213l12 105q164 -26 195 29q51 58 64 146l18 70q0 78 -142 56q-52 0 -52 26v26q29 48 230 90q70 85 112 290l52 30l30 -43q-39 -141 -78 -261l111 -8h13q143 -43 213 286l60 35q48 9 13 -87l-52 -142l-17 -74q16 -70 284 -13v-39q-19 -50 -91 -64l-65 -13h-116 q-47 0 -107 -233v-39q-15 -70 72 -52h116l104 22l-8 -57q-87 -58 -333 -73q-26 -171 -73 -317l-99 -19l56 172q48 190 -65 143h-65q-108 39 -122 -204q-29 -111 -69 -125l-47 5l13 129l29 212zM377 359q14 -26 125 -30.5t139 286.5v13q0 18 -39 39l-96 -9 q-109 -39 -129 -260v-39z" />
<glyph unicode="$" horiz-adv-x="1014" d="M-30 363q29 136 121 137q-21 -239 79 -318.5t176 -53.5q62 27 70 205t36 395q-93 56 -199.5 180t-29.5 299t333 176q28 190 62 223t35 -17.5t-16 -215.5q57 -2 121 -56t71.5 -110.5t-32.5 -74t-86 18.5q-6 105 -80 122q-44 -193 -76 -495q202 -160 214 -340.5 t-100.5 -295t-205.5 -126.5q-49 -259 -63 -288t-34 2t3 280q-199 6 -304 108t-95 245zM297.5 1110q-8.5 -76 34 -146.5t98 -112.5t90.5 341q25 101 -47.5 94.5t-119.5 -53.5t-55.5 -123zM495 214.5q-8 -65.5 33.5 -67.5t102 69.5t58.5 187.5t-142 270q-14 -47 -27 -154.5 t-15 -173.5t-10 -131.5z" />
<glyph unicode="%" horiz-adv-x="1007" d="M52 9q141 222 278 526t237.5 477t150.5 300q-1 16 -267 -4q-29 -146 -80 -205q-102 -156 -207 -134q-32 9 -35 62q-14 297 191 467q113 -101 184 -107.5t185 15.5t260 150q18 12 42 13q1 -21 12 -21q-165 -195 -287.5 -419.5t-256.5 -520.5t-133 -314l2 -32 q32 -42 190 -19q51 153 148 275q98 133 212 85q76 -27 79 -91l-14 -140q-54 -223 -208 -335q-62 -50 -115 -52q-85 0 -89 81q18 74 15 128q-287 -20 -345 -142.5t-91 -115.5q-55 3 -56 31zM213 1157q-6 -62 43 -50q96 101 104 218v10q-1 22 -23 21l-21 -1q-32 -1 -103 -198z M639 162q21 -43 38 -42l32 1q134 108 151 290l-3 64q-1 21 -22 20l-32 -2q-90 -20 -163 -279z" />
<glyph unicode="&#x26;" horiz-adv-x="1251" d="M134 67q8 94 226 264q-76 111 -57 245t193 171t220 -85t-222 -317q38 -56 91 -122q39 4 142.5 114t230.5 278l45 9q-198 -287 -328 -398q-24 -24 -29 -56q58 -81 179 -54q56 -24 34.5 -68.5t-100 -44.5t-160.5 93l-59 -3q-237 -172 -325.5 -146t-80.5 120zM259.5 120.5 q-28.5 -78.5 52 -74.5t187.5 107q-42 52 -93 113q-118 -67 -146.5 -145.5zM404.5 589q-32.5 -78 62.5 -184q142 86 152 181t-86 88t-128.5 -85z" />
<glyph unicode="'" horiz-adv-x="434" d="M182.5 1183.5q13.5 68.5 32 144.5t31 138t29 110.5t56.5 70.5q70 -91 30 -174t-68 -152.5t-60 -135t-48 -68t-2.5 66z" />
<glyph unicode="(" horiz-adv-x="689" d="M40.5 90q-31.5 323 58.5 640.5t213.5 515t235.5 308.5t125 86.5t-90.5 -147.5t-231.5 -412t-167 -620t3.5 -560t146.5 -411q-4 -81 -133 98t-160.5 502z" />
<glyph unicode=")" horiz-adv-x="605" d="M-192 -561q-6 39 53 85.5t191 200.5t241 413.5t137.5 539.5t-16 512t-77 309t-48 139t38.5 28t159.5 -305.5t80 -628t-134 -594.5t-222 -376t-255.5 -250t-148 -73z" />
<glyph unicode="*" horiz-adv-x="818" d="M115.5 1160.5q-12.5 13.5 4.5 38t143 35.5t126 14.5t-32 85.5t-48 112.5t-10 59t41 20t69 -109.5t41.5 -104.5t15 -3.5t79 98t106.5 93.5t2.5 -48t-88.5 -111.5t-56 -80t14.5 -11t86 2.5t100.5 -1t26.5 -19.5t-75.5 -27t-119 -31v-7q96 -171 93 -194t-32 -19t-93.5 101 t-77 90.5t-46.5 -59t-60 -108.5t-49.5 -70t-39 3.5t1.5 49t67.5 115t50.5 87.5t-8 7.5t-59.5 3t-106.5 -13t-67.5 1z" />
<glyph unicode="+" horiz-adv-x="874" d="M60 454q30 62 249 59q46 262 127 276q55 0 44 -59l-27 -114l-12 -87q18 -1 262 -6q-46 -75 -155 -78.5t-128 -13.5l-27 -144l-16 -98q-10 -92 -55.5 -42t-39.5 135l16 148q-72 -3 -72 3l-65 -6h-46q-55 0 -55 27z" />
<glyph unicode="," horiz-adv-x="373" d="M-66 -275q-29 24 21 64t104.5 110.5t68.5 147.5l3 53q-9 29 -13 61.5t15.5 58t74.5 21.5q70 -35 24 -148.5t-128 -213.5q-67 -87 -170 -154z" />
<glyph unicode="-" horiz-adv-x="804" d="M138 385.5q68 42.5 156 46t123 2.5t66 -1q194 16 158 -9t-107 -50q-86 -3 -171.5 -6.5t-189 -14t-35.5 32z" />
<glyph unicode="." horiz-adv-x="445" d="M118 58q48 137 82 137h27q20 0 41 -41v-27q-10 -137 -82 -137q-36 0 -68 68z" />
<glyph unicode="/" horiz-adv-x="328" d="M-27 -128q-58 -13 39.5 276t175.5 468q363 1077 394 947q5 -141 -54 -224q-8 -85 -125 -423l-241 -602q-131 -429 -189 -442z" />
<glyph unicode="0" horiz-adv-x="677" d="M-127 488q184 835 568 987q140 -7 160 -120q33 -219 -36 -591q-94 -390 -228 -571q-52 -123 -171 -182t-227.5 31t-65.5 446zM20 227q39 -165 113 -129.5t160 178.5q113 164 168 440q50 196 58.5 340t-1.5 207.5t-38 96.5t-96 26q-163 -72 -286 -518q-107 -348 -78 -641z " />
<glyph unicode="1" horiz-adv-x="597" d="M-120 502q13 41 53.5 82t110.5 121q172 197 356 626q35 82 83 101.5t96 7.5q-116 -275 -156 -422t-70.5 -265.5t-58 -302.5t-45.5 -340.5t-49 -153.5t-47 29t-12 123t14 166.5t39.5 196t65.5 284.5l35 125l-68 -69q-148 -186 -206.5 -242.5t-106 -82t-34.5 15.5z" />
<glyph unicode="2" horiz-adv-x="970" d="M-163.5 189q70.5 176 188 300.5t163.5 53.5t105 -213q170 186 300 404.5t135.5 377t-108.5 195.5t-215 -63t-99 -184q-8 -81 -52.5 -69.5t-3.5 137t168.5 216.5t275 55t159 -214.5t-119.5 -405t-396 -551.5q112 -162 270 -172.5t289 185.5q77 -4 -41 -132.5 t-234.5 -133.5t-209 35.5t-173.5 142.5q-213 -194 -342.5 -167t-59 203zM-70 123q-18 -130 125.5 -16.5t130.5 145.5t-58 118.5t-112.5 -15.5t-85.5 -232z" />
<glyph unicode="3" horiz-adv-x="726" d="M-167 108.5q-20 98.5 51 179t123.5 65.5t54 -62.5t-58 -80t-61.5 -75t70 -41t172.5 72t182.5 193t105 270t-8 196.5t-72.5 54.5t-94.5 -31.5t-72 -76t-62.5 -47.5t-32.5 53.5t125 147q223 252 226 317t-20 79t-49 10t-48.5 -30.5t-58.5 -18.5l-10 25q78 126 155.5 139.5 t124.5 -17.5t51 -90t-16.5 -107.5t-80.5 -114t-83 -103.5q128 -47 155 -182t-52.5 -339t-242 -348t-308 -140t-165.5 102.5z" />
<glyph unicode="4" horiz-adv-x="775" d="M-172.5 509q5.5 22 85 130.5t176.5 239.5q161 210 257 460q25 90 135 117q91 -64 -323 -632q-88 -128 -110 -169q-4 -50 78 -29q104 23 173.5 55.5t116.5 117.5q98 270 157 431q66 190 162 236t-41 -205l-119 -253l-35 -114q-76 -193 44 -126l91 41l111 63l-16 -66 q-95 -76 -167 -111q-82 -35 -123 -76q-48 -204 -59.5 -303t-18.5 -172t-47 -163q-97 -50 -89 57t62 378q57 206 1.5 178t-215 -75t-175.5 -58t-46 -17.5t-50.5 18.5t-15 47z" />
<glyph unicode="5" horiz-adv-x="792" d="M-194 123q-14 141 133 238h33q0 -21 11 -21q-44 -84 -44 -109v-44q30 -87 79 -103h83q119 5 258 214q83 119 109 286q26 335 -170 306q-50 0 -145 -96t-112 -11q23 108 92 327q80 280 259 290l242 7q245 22 280 36l45 1l23 -30l-32 -39q-227 -44 -575 -94 q-171 -136 -150 -295l138 40q195 -47 194 -236l5 -107q10 -144 -81 -355q-72 -111 -143 -172q-157 -176 -358 -176q-143 0 -174 143z" />
<glyph unicode="6" horiz-adv-x="718" d="M-122 182q-23 391 278 925q189 331 408 327q144 -31 84 -258q-120 -106 -61 108l-34 39l-53 9q-212 -32 -427 -644q-54 -133 -90 -396q136 260 292.5 400t258.5 158q58 -23 60 -124q-69 -279 -206 -462q-50 -104 -172 -207q-114 -77 -218.5 -56.5t-119.5 181.5zM34 214 q3 -87 103 -93q133 58 237 225q103 206 111 312l3 49q1 19 -18 20l-20 1q-53 3 -195 -156q-215 -243 -221 -358z" />
<glyph unicode="7" horiz-adv-x="699" d="M4 1445q225 -6 387 3t224 17t161 8q13 -105 -115 -278t-240 -388t-181.5 -394t-75 -311.5t-81.5 -115.5q-54 48 -44.5 135.5t54.5 232t239.5 474.5t252 431t-201.5 92t-282 -9t-62.5 13t-34.5 90z" />
<glyph unicode="8" horiz-adv-x="654" d="M-166.5 214q24.5 158 262.5 393q88 84 107 138q-54 111 -88 298q0 316 291 423l42 -9q39 22 85 24l11 1q96 4 101 -109q-60 -332 -311 -585q10 -64 99 -343q6 -195 -77 -307.5t-200.5 -147.5t-232 15.5t-90 208.5zM-33 188q10 -109 85 -114q119 -29 214 130 q49 109 43 193q-43 275 -123 198q-205 -212 -219 -407zM265 1121.5q-6 -85.5 1.5 -137.5t13.5 -83.5t47 -11.5q222 251 214 437q-2 58 -46 62q-90 -4 -157 -92.5t-73 -174z" />
<glyph unicode="9" horiz-adv-x="721" d="M-216 138.5q0 79.5 50.5 103t86.5 3.5t35 -89.5t62 -85.5q245 -4 398 453q81 270 102 451l-13 86q-2 14 -23 27q-24 -68 -200 -274q-47 -46 -136 -74q-86 9 -78 75q13 240 146 411q207 221 275 221q42 31 115 -24q22 44 95 90q26 2 54 -46q3 -19 -114 -366 q-73 -435 -133 -603q-119 -285 -265 -395.5t-248 -116t-155.5 34t-53.5 119zM165 891q24 -25 41 -24l10 2q240 202 300 392q-20 71 -46 68l-61 -6q-125 -11 -234 -337z" />
<glyph unicode=":" horiz-adv-x="437" d="M116 98q3 60 112 110q29 -1 51 -56q-43 -118 -95 -130q-27 2 -68 76zM170 463l1 35q60 78 121 75q53 -2 60 -75q-76 -103 -150 -100q-35 17 -32 65z" />
<glyph unicode=";" horiz-adv-x="469" d="M-36.5 -291q29.5 24 81 79.5t74.5 109.5t24 107t2.5 76t27 47t70.5 15q57 -32 20 -135.5t-109 -187.5q-103 -123 -186 -151q-34 16 -4.5 40zM215 286q19 124 61.5 121t46.5 -67.5t-61 -105.5l-26 2q-18 1 -21 50z" />
<glyph unicode="&#x3c;" horiz-adv-x="959" d="M140 492.5q57 61.5 207 138.5q75 45 344 193l24 8l8 -23q-4 -33 -222 -165l-233 -149q-7 -63 168 -197q176 -111 207.5 -244t-79 -38t-263.5 224q-81 62 -159 111q-59 80 -2 141.5z" />
<glyph unicode="=" horiz-adv-x="1143" d="M243 229q0 10 51 40q100 18 159.5 17.5t99.5 -0.5t196 -11q193 -48 -445 -89q-61 11 -61 43zM301 444q0 10 51 39q100 18 159.5 18h99.5t196 -12q193 -47 -446 -88q-60 11 -60 43z" />
<glyph unicode="&#x3e;" horiz-adv-x="938" d="M131 29q4 33 222 185l192 149q7 63 -168 197q-178 94 -206.5 225t80 36.5t225.5 -180t195 -134.5q59 -80 2 -141.5t-172.5 -139.5t-337.5 -212l-24 -8z" />
<glyph unicode="?" horiz-adv-x="648" d="M206 -2v27q0 74 69 109h54v-55q0 -18 -82 -81h-41zM223 1161.5q28 166.5 233 273.5t339 1t92.5 -295t-263 -364t-259.5 -286.5t-69.5 -121t-9 139t141.5 208.5q254 231 315.5 371.5t-11.5 227t-209 42.5t-207 -258q21 -124 -50 -114.5t-43 176z" />
<glyph unicode="@" horiz-adv-x="1700" d="M227 607q33 190 119.5 331t187 227.5t221 144t260.5 56.5t245.5 -84t129.5 -234t-37.5 -314t-181.5 -267q-121 -91 -224 -71t-49 228q-83 -128 -126 -168.5t-94.5 -61t-103 -7.5t-68.5 57t3.5 143t101.5 204t164.5 146.5t153.5 37.5q165 3 175 -42q-85 -131 -119.5 -284 t24 -169.5t139.5 54.5q85 73 125.5 182.5t30.5 250t-75 213.5t-162.5 89.5t-213.5 -18t-217.5 -118t-181 -212t-109.5 -269t-4.5 -282.5t150 -224.5t284.5 -59.5t284 110t188 170.5t71.5 56t-66.5 -119t-170.5 -165t-213.5 -115t-239 -32.5q-165 2 -265 93t-135 212t-2 311z M631 596q-5 -71 22 -83l27 -3q96 37 160 144.5t66.5 172t-61 51.5t-127.5 -92t-87 -190z" />
<glyph unicode="A" d="M-129 101q19 74 70 74q5 0 10 -1q57 -8 57 -80v-10q0 -70 93 -70q7 0 15 1q112 6 271 196q98 151 149 296l-80 -15q-66 -29 -87 -29q-9 0 -9 6q0 7 16 25q56 60 148 86q74 12 128 164q89 190 140 295.5t117 204t160 148.5q89 47 127 46h5q38 -3 38 -22l-87 -215l-86 -273 l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130t-92 -104q-15 -55 -15 -122q0 -37 5 -78q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-21 -7 -41 -7q-99 0 -135 196q-4 27 -4 68q0 79 14 209q-18 30 -155 30 q-24 0 -51 -1q-62 -34 -116.5 -141t-154.5 -230q-102 -123 -246 -167q-66 -20 -118 -21q-63 -1 -108 29q-65 43 -65 103q0 15 4 32zM704 629q15 -35 62 -35h5l104 13q23 3 49.5 131t66.5 266q37 127 37 166v6q-2 20 -15 20q-9 0 -25 -12q-36 -26 -73 -86.5t-81 -139 t-64.5 -158.5t-65.5 -162v-9z" />
<glyph unicode="B" horiz-adv-x="1192" d="M-100 77q15 56 75 56h4q60 -2 60 -58v-10q0 -46 45 -46q10 1 22 3q70 12 131 68.5t104.5 157.5t66.5 304t111 490q81 186 174 328q15 22 15 35q0 20 -33 19q-10 0 -23 -2q-84 -12 -200 -93t-161 -243q-3 -97 -81 -97h-9q-26 11 -26 50v11q4 83 102 193q136 161 273 207 q133 44 194 44h4q62 -2 125 -24.5t105 -94.5q36 -62 36 -161q0 -17 -1 -34q-17 -132 -108 -229q-71 -71 -125 -106q151 -75 201 -245q22 -74 22 -147q0 -95 -37 -189q-65 -168 -184 -240q123 47 187.5 93t172.5 167l15 -33q-191 -313 -548 -313h-16q-107 7 -157 50 q-38 33 -38 61q0 9 4 17q16 34 38 33t38 -18.5t29 -36.5q11 -16 65 -16h18q70 3 153 70t123 225q15 60 15 115q0 92 -41 172q-66 129 -150 132q-29 10 -52 10q-78 0 -95 -115q-88 -436 -195.5 -556.5t-235.5 -130.5q-27 -2 -51 -3q-89 0 -127 32q-37 30 -38 71q0 13 4 27z M604 925v-8q0 -50 45 -53q101 17 170 115.5t82 234.5v10q0 137 -76 137q-7 0 -14 -1q-109 -43 -206 -415z" />
<glyph unicode="C" horiz-adv-x="1305" d="M-166 65q-1 8 0 16q0 85 64 123q19 11 33 12q26 0 26 -46q-1 -14 -3 -33q-3 -22 -2 -41q0 -78 47 -116q56 -45 148 -45q5 1 9 1q98 2 197.5 55t99.5 94q-27 47 -27 155q0 42 4 94q14 183 134 462q-15 -3 -35 -3q-48 0 -123 17q-127 63 -127 187v15q8 135 185 308 q180 152 378 173q53 0 102 -18l5 -32q2 -9 2 -16q0 -52 -91 -52q-31 0 -73 6h-5q-121 0 -196 -47q-76 -48 -120 -100t-68 -98q-20 -37 -20 -101q0 -16 1 -33q41 -102 123 -102q16 0 34 4q5 -1 10 -1q66 0 166 158q234 301 362 346q93 48 154 47h13q84 -25 84 -78 q0 -8 -2 -16v-13q0 -178 -368 -424q-133 -51 -208 -106q-125 -104 -177 -308q-30 -118 -30 -203q0 -60 16 -104q37 -101 124 -101h6q92 3 165.5 53.5t134 144t84.5 218.5q6 30 6 53q0 75 -60 83h-9q-103 0 -242 -195q-27 -61 -44 -87.5t-46 -9.5q94 304 288 406q42 21 82 21 q32 0 63 -14q65 -38 65 -145v-10q0 -110 -63.5 -246t-165.5 -241.5t-201 -129.5q17 -6 40 -9q15 -2 29 -2q59 1 124 29q81 36 150.5 96t164.5 172l19 -37q-238 -346 -516 -346q-25 0 -51 3q-73 3 -161 61l-28 29q-208 -124 -355 -132q-20 -1 -39 -1q-120 -1 -194 47 q-86 54 -92 153zM721 907l76 26l84 44q99 39 213 134q128 140 138 202q2 11 1 19q0 28 -21 28q-8 0 -20 -4q-150 -31 -341 -249q-57 -71 -130 -200z" />
<glyph unicode="D" horiz-adv-x="1034" d="M3 927q4 70 87 194q89 131 186 197q98 67 190 104q90 36 204 36h6q313 -9 360 -342q15 -86 15 -169q-1 -115 -29 -223q-48 -186 -154.5 -343t-206.5 -235.5t-214 -118.5q28 -12 47 -20q24 -9 54 -9q42 0 95 19q90 33 192 118l137 149l15 -33q-189 -310 -459 -310h-17 q-114 11 -155 56h-3q-65 0 -232 -99h-29q-80 3 -80 56q0 5 1 12q30 83 213 141q47 26 95 76q89 157 135 508.5t134 496t88 161.5q0 15 -25 21q-12 3 -31 3q-22 0 -55 -4q-61 -7 -179 -67q-118 -62 -200 -170q-67 -89 -67 -145q0 -12 3 -23q-25 -101 -87 -101h-7 q-27 12 -27 53v11zM414 158q-1 -15 27 -31q196 32 354.5 296t159.5 512q0 225 -82 319q-44 50 -85 51q-35 0 -68 -38q-81 -103 -112 -360.5t-74 -435.5t-120 -304v-9z" />
<glyph unicode="E" horiz-adv-x="1069" d="M-13 165q-5 30 -5 58q0 331 655 507q-44 20 -75 79l-95 -17q-71 -12 -134 -12q-54 0 -101 9q-142 27 -171 168q-1 10 -1 20q0 227 300 398q136 65 208 77q54 9 109 9q17 0 35 -1q72 -4 122 -40q32 22 146 24h4q110 0 160 -102l15 -51l2 -22q0 -167 -324 -357l-171 -71 q22 -47 72 -55q8 -1 16 -1q44 0 106 34q44 24 58 24q6 0 6 -4q0 -1 -2 -5q-10 -26 -35 -48.5t-99 -58t-344 -138.5q-250 -131 -301 -248q-22 -51 -23 -96q0 -59 38 -105q66 -84 199 -91l110 8q249 55 334 236q13 44 13 76q0 81 -86 81h-8q-149 -54 -272 -158q-41 1 -42 17 l-1 20q240 231 378 231q10 0 19 -1l20 1h10q83 0 102 -114v-10q3 -254 -330 -421q6 -4 6 -8q0 -25 -232 -51q-324 5 -391 209zM190 978q47 -93 206 -94q20 0 41 2q117 40 116 136q37 162 127 275l77 79q-37 10 -78 10q-92 0 -204 -48q-286 -121 -287 -333q1 -13 2 -27z M504 27q225 71 310.5 99.5t216.5 192.5l15 -27q-126 -290 -382 -290q-74 0 -160 25zM645 1007q-1 -7 -1 -13q0 -54 47 -53q30 0 79 22q126 50 202 115q74 65 92 118q7 22 8 44q0 30 -14 58q-24 49 -101 50q-186 -22 -283 -253z" />
<glyph unicode="F" horiz-adv-x="907" d="M-108 145q24 60 87 61l21 -40q-9 -30 -9 -53q0 -41 28 -61q25 -18 54 -19q22 0 47 11q57 25 100 88t86.5 229.5t79 441t67.5 370.5q32 95 45 137q1 4 1 8q0 18 -34 18q-25 0 -73 -10q-120 -26 -258 -214l-32 12q72 130 164 194t206 90q105 24 174 25q6 -1 12 -1 q72 -2 136 -10q47 -6 114 -7q24 0 51 1q102 3 275 75l10 1v-20q-54 -77 -192 -117q-94 -27 -190 -27q-46 0 -93 6q-14 2 -27 2q-124 0 -175 -164q-57 -180 -64 -336q-1 -46 85 -54q21 -2 45 -1q69 1 157 17q116 22 280 89l11 -20q-77 -65 -162.5 -106.5t-167.5 -58 t-179 -27.5t-129 -174.5t-82.5 -277.5t-127.5 -182t-177 -74q-9 -1 -17 -1q-87 0 -127 57q-29 40 -29 79q0 22 9 43z" />
<glyph unicode="G" horiz-adv-x="1325" d="M64 791q29 225 343 469q233 155 431 176h11q87 0 101 -44q5 -14 5 -26q0 -39 -63 -39q-44 0 -118 19l-73 -2q-180 -64 -353 -223q-193 -191 -198 -379q16 -117 153 -117q56 0 133 20q65 159 242 382q207 226 294 280.5t142.5 69t109.5 19.5q6 1 13 1q46 0 85 -33 q44 -38 49 -109v-14q0 -66 -43 -157q-49 -101 -208 -237.5t-307 -198.5t-211 -80t-96 -78q-62 -113 -62 -216q0 -63 24 -123q41 -70 130 -70q48 0 111 21q141 67 206 136t103 136q55 89 69 156l72 120q54 -3 54 -58q0 -10 -2 -22q-13 -82 -109 -339q0 13 -12 13 q-40 0 -203 -129q-194 -153 -320 -157q-7 -1 -14 -1q-116 0 -177 71q-56 65 -56 189q0 19 1 40q17 173 68 261q-109 3 -149 15q-180 29 -180 205q0 25 4 53zM223 -664q-22 64 -22 111q0 95 90 122l60 -10q38 -33 38 -69q0 -30 -28 -61q-5 -23 -5 -43q0 -66 58 -92 q32 -14 68 -14q48 0 102 24q95 42 187 177q90 143 169 441q20 210 19 220l-1 11l-10 -1q-18 -2 -43 -11l243 250q3 -10 -81 -421q-101 -371 -213 -525q-166 -235 -433 -235h-20q-118 14 -178 126zM569 657l90 21l179 78q171 75 306 230q111 129 111 229q0 21 -5 41l-51 23 q-172 -30 -346 -209.5t-284 -412.5zM1032 19l30 105q3 1 7 3q85 28 216 192l15 -27q-96 -221 -268 -273z" />
<glyph unicode="H" horiz-adv-x="1424" d="M82 1019q26 136 200 244q127 79 309 78q68 0 143 -10l84 70l39 -30q-115 -414 -132 -599q88 56 130 87t111.5 196.5t131 259.5t132.5 168q72 73 146 99q47 16 88 17q23 0 44 -5q59 -14 78 -97q3 -168 -198 -337q-107 -96 -155.5 -137.5t-185.5 -155.5q-107 -77 -122 -348 q-3 -57 -3 -106q0 -183 44 -249q49 -73 118 -73q10 -1 22 1q84 12 198 123q75 91 109 137l10 -20v-11q-95 -204 -269 -308q-49 -19 -93 -19q-25 0 -47 6q-131 25 -181 170q-24 81 -24 191q0 175 61 424q-92 -60 -171 -130q-34 -222 -129.5 -435t-245.5 -284q-48 -23 -87 -23 q-80 0 -115 101q-2 15 -2 30q0 193 268 479q94 88 155.5 146t87 175.5t44.5 214.5t19 169q-34 39 -152 51q-14 1 -28 1q-106 0 -219 -80q-125 -89 -125 -221v-6q46 -29 50 -74v-8q0 -39 -34 -59q-14 -8 -29 -8q-25 0 -55 22q-30 23 -30 88q0 36 10 85zM222 130q0 -6 -1 -12 q0 -92 56 -96h8q55 0 105 52q54 56 97.5 152.5t73.5 227.5q14 60 14 89t-14 29q-3 0 -6 -1q-90 -55 -209.5 -196t-123.5 -245zM1036 989q0 -11 11 -11q22 0 89 48q100 72 170 128.5t114 110.5t58 83q14 28 22 60q3 14 4 26q0 18 -6 32q-10 24 -43 32q-12 3 -24 2 q-21 0 -41 -8q-129 -42 -284 -330q-70 -139 -70 -173z" />
<glyph unicode="I" horiz-adv-x="1104" d="M-243 -60q60 114 349 203l157 3q104 75 132 418q29 212 61 368t101 318v39q-1 15 -30 29l-70 -1q-129 15 -147 16q-4 1 -9 1q-38 0 -103 -90q-25 -11 -43 -11q-22 0 -33 16l13 28l45 31q88 101 87 153h40q1 -32 355 -55l154 9l101 21q150 43 191 78l22 12l19 -10 q2 -55 -126 -126q-184 -71 -262 -71h-11l-49 -26q-101 -119 -169 -575q-28 -220 -47 -317q-18 -92 -18 -156v-7l2 -59q1 -75 139 -105q20 -2 39 -2q180 0 345 166q65 68 84 68q8 0 9 -12q0 -7 -3 -18q-147 -276 -563 -322q-233 66 -341 74q-42 3 -78 3q-58 -1 -104 -9 q-74 -14 -228 -111l-11 20v9z" />
<glyph unicode="J" horiz-adv-x="883" d="M-9 112q-9 31 -9 56q0 37 20 60q25 30 55 30q10 0 21 -3q37 -11 37 -56q0 -7 -1 -15q-1 -9 -1 -18q0 -46 28 -84q25 -33 76 -33q18 0 39 4q81 15 141 150t84 323.5t54.5 362.5t84.5 383l8 59q-9 19 -10 29h-9q-140 -1 -250 -15t-221 -92l-18 -41l-25 -10l-22 11l-7 32 l19 41q134 161 477 167q66 6 118 6q40 0 71 -3q58 -7 153 -7h47q170 3 309 94l9 -18l-7 -14q-1 -40 -174 -107q-122 -28 -186.5 -33t-105 -35t-71 -109.5t-78.5 -327t-81 -483.5t-138 -337l-26 -29q24 -8 53 -8q53 0 123 29l105 64l137 149l15 -33q-160 -278 -514 -293 q-15 -1 -29 -1q-114 0 -191 37q-87 40 -110 118z" />
<glyph unicode="K" horiz-adv-x="1407" d="M-122 204q14 107 62 173l34 -30q-23 -62 -23 -133v-11q2 -77 68 -127q44 -33 112 -32q34 0 75 8q121 25 225 150.5t163 299t90 366.5q28 214 36 292q3 31 3 57q0 39 -7 67q-54 51 -173 69q-22 3 -44 3q-95 0 -181 -64q-106 -79 -122 -210q9 -31 10 -55q0 -39 -27 -56 q-21 -13 -39 -13t-34 14q-23 21 -22 58q0 12 2 27q19 133 138.5 242.5t255.5 131.5q40 7 82 6q98 0 204 -36q59 55 88 55h4q28 -4 46 -50q-4 -45 -32.5 -98.5t-41.5 -174t-21 -175t-13.5 -102t18.5 -42.5q116 5 222 187t197 308.5t201 164.5q45 16 73 16q41 0 48 -33 q1 -7 1 -13q0 -36 -47 -36q-7 0 -17 1q-6 1 -12 1q-70 0 -156 -88q-93 -94 -187 -311q-101 -187 -200 -284q90 -107 104 -236.5t34 -259.5t77 -129q58 0 205 206q23 10 31 -2q1 -49 -96 -174q-86 -120 -145 -138q-19 -6 -37 -5q-38 0 -72 25q-50 37 -71 132.5t-29 289 t-104 227.5h-26q-68 -37 -115.5 -194t-174 -318t-308.5 -189q-46 -7 -86 -6q-117 0 -178 60q-70 69 -70 156q0 16 2 32z" />
<glyph unicode="L" horiz-adv-x="1060" d="M-15 -3q37 70 116 104.5t130.5 48t119.5 29.5q155 64 179 146q36 106 54 201q4 19 4 32q0 37 -26 37q-14 0 -35 -10q-58 -15 -126 -15q-82 0 -180 21q-189 68 -211 239q-2 334 440 555q117 46 178 46q54 1 64 -35q4 -14 5 -26q0 -53 -84 -68q-18 6 -42 6q-80 0 -224 -69 q-161 -107 -213 -227q-27 -64 -28 -128q0 -56 21 -112q75 -110 226 -116l113 6q162 56 219 298q121 451 363 523h14q149 0 149 -161q-10 -204 -232 -455q-127 -147 -214 -182q-48 -47 -80 -152q-24 -108 -37.5 -155t-62.5 -176q19 -70 64 -98q25 -15 58 -15q28 0 64 11 q137 41 264 216h10q0 -19 8 -19q-75 -180 -243 -273q-69 -26 -127 -26q-35 0 -65 10q-82 24 -163 40q-50 10 -92 10q-28 0 -52 -4q-62 -10 -177 -56q-59 -69 -101 -69h-7q-42 6 -41 63v5zM753 808q0 -16 15 -16q19 0 64 28q111 80 212 222q73 128 73 228v13q-4 86 -61 86 q-12 1 -26 -3q-82 -22 -140 -130q-57 -106 -95 -244q-42 -150 -42 -184z" />
<glyph unicode="M" horiz-adv-x="1400" d="M-158 162q22 74 78 82q8 1 15 0q26 0 26 -19q1 -10 -5 -24q-12 -28 -13 -58q0 -23 8 -46q17 -53 61 -63q10 -2 20 -3q38 0 90 28q68 35 116 132.5t92.5 238.5t90 321t102.5 305t180 269q104 104 200 145l13 -31q-106 -66 -150 -227q-36 -144 -62 -314t-60 -406 q-22 -156 -22 -209q0 -26 5 -26q17 0 55 63q36 60 70.5 141t94 253t161.5 348.5t199 268.5q97 93 213 133q58 20 90 20t39 -20q-85 -41 -168.5 -144t-165.5 -279t-142 -439q-44 -191 -43 -306q0 -43 6 -75q17 -91 80 -92q18 1 40 9q98 34 256 261q22 5 18 -27 q-190 -349 -351 -370q-7 -1 -14 -1q-87 -1 -118 83q-20 55 -20 143q0 56 8 125q21 178 87 396.5t130 377.5q-37 -20 -136 -207q-58 -123 -122 -289t-91.5 -251.5t-87 -181t-116.5 -143t-85 -71.5q-19 -16 -43 -16q-11 0 -23 3q57 149 83 319t61 405q34 235 48 316q5 31 6 45 q0 12 -4 13q-3 0 -10 -10q-22 -33 -43.5 -95t-56.5 -178l-49 -151q-47 -175 -91.5 -308t-103.5 -214q-60 -82 -134 -126q-60 -35 -128 -35q-18 1 -34 3q-88 10 -129 72q-28 41 -28 88q0 23 7 48z" />
<glyph unicode="N" horiz-adv-x="956" d="M-198 146q16 82 68 82q35 -7 39 -56v-19q-2 -14 -2 -26q0 -95 88 -106q76 1 148 73.5t116 263t102.5 462t237.5 494.5q122 113 155 114l9 1l1 -18q-102 -113 -132 -323q-22 -561 -71 -767l-21 -121l25 1q67 100 101.5 193.5t89 396.5t139 481.5t239.5 208.5q38 7 68 8 q94 -1 114 -71q5 -17 5 -34q0 -77 -95 -162h-3q-21 0 -21 15q0 13 14 35q18 27 18 53q0 23 -14 45q-15 25 -51 25q-33 -1 -83 -21q-105 -42 -180.5 -290.5t-113.5 -473.5t-96 -365t-154 -208h5q45 0 125 34q113 56 242 213l15 -33q-160 -278 -514 -293l-55 1 q-74 14 -77.5 52t34 41t59.5 15.5t55.5 100.5t52.5 288q19 129 34 282v102q3 43 3 70q0 48 -10 48q-9 0 -25 -34q-46 -96 -82.5 -257.5t-60 -285.5t-63.5 -212.5t-99 -133.5q-70 -77 -176 -88q-15 -2 -30 -2q-85 -1 -133 55q-44 50 -44 111q0 17 4 35z" />
<glyph unicode="O" horiz-adv-x="913" d="M68 488q22 280 168 607q207 334 354 334h19l27 -22l29 33q38 11 70 11q45 0 77 -23q54 -39 88 -167q14 -103 14 -205q0 -92 -12 -182q-24 -190 -53 -289.5t-97 -246.5q-138 -250 -312 -330q-38 -40 -100 -40q-44 0 -101 20q-67 22 -124 117q-52 78 -52 258q0 57 5 125z M178 306q22 -136 74 -174q39 -28 91 -28q18 0 37 3q125 11 215.5 126t147.5 272t77 352q10 98 10 177q0 80 -10 140q-20 122 -64 154q-27 20 -55 19q-17 -1 -37 -9q-48 -22 -113.5 -125.5t-92.5 -299.5q-18 -131 -18 -207q0 -38 4 -62q6 -30 6 -51q0 -29 -12 -37 q-3 -2 -5 -1q-17 -1 -37 77q-18 69 -18 168q0 30 2 63q7 141 37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-38 -198 -38 -325q0 -51 6 -91zM213 26l177 52q28 -24 72 -38q11 -4 25 -3q45 0 126 34l105 64l137 149l15 -33q-160 -278 -514 -293l-100 15z" />
<glyph unicode="P" horiz-adv-x="871" d="M-55 45v6q1 86 59 104q14 4 23 4q32 0 32 -41v-10v-9q1 -58 61 -72q12 -3 23 -3q53 0 106 56q64 68 88.5 165t40 216t50 342.5t143.5 497.5l37 55q1 3 1 6q0 15 -25 15q-12 0 -30 -4q-60 -12 -151 -62t-148 -112.5t-107 -145t-50 -164.5t30.5 -109.5t30.5 -37t-11 -34.5 q-12 -25 -52 -27h-2q-39 0 -63 57q-19 45 -19 97q0 15 2 31q8 69 49 157t110.5 174.5t215.5 180.5q145 95 343 104h21q181 0 251 -152q40 -86 40 -178q0 -81 -30 -166q-64 -184 -177 -302t-270 -190q-77 -38 -122 -214q-100 -314 -358 -321q-9 -1 -18 -1q-82 0 -124 87z M520 771q-6 -62 -6 -103q0 -62 13 -78q5 -6 16 -6q35 0 133 67q128 87 200 243q50 108 50 213q0 47 -10 93q-32 150 -187 157q-77 -46 -136 -239t-73 -347z" />
<glyph unicode="Q" horiz-adv-x="1023" d="M99 462q16 248 102 491.5t181 312.5q28 20 40 20q10 0 10 -13q0 -28 -42 -112q-88 -175 -130.5 -351.5t-51.5 -325.5q-1 -31 -1 -60q0 -109 25 -183q32 -94 86 -123q35 -20 80 -20q23 0 48 5q111 18 187.5 104.5t148 256t106.5 402.5q19 132 19 229q0 75 -11 129 q-27 126 -88 152q-26 11 -55 11q-37 0 -80 -19q-75 -34 -160 -230q-81 -186 -81 -500v-34q5 -337 139 -495t255 -172q30 -3 57 -3q87 0 159 34q93 44 139 90q22 23 30 23q6 0 6 -9q0 -7 -3 -18q-13 -51 -132 -122q-105 -64 -250 -64h-35q-167 9 -288.5 149t-158.5 277 q-30 114 -30 253q0 29 2 59q7 175 51 349t138.5 324.5t212.5 190.5q47 15 85 15q60 0 101 -37q69 -60 88 -230q7 -55 7 -119q0 -131 -27 -299q-40 -248 -152.5 -460.5t-245.5 -307.5q-107 -77 -203 -77q-23 0 -45 4q-115 23 -182 139q-54 93 -54 273q0 43 3 91z" />
<glyph unicode="R" horiz-adv-x="1244" d="M-65 35q-2 16 -2 29q0 79 55 85h10q55 1 68 -63q12 -58 70 -59q12 0 25 3q129 31 220 293q52 302 118 696q41 143 105 251l54 82q1 5 1 8q0 17 -24 17q-25 0 -74 -17q-109 -38 -204.5 -150t-102.5 -232q-5 -86 -34 -86q-12 0 -26 13q-22 19 -21 58q1 56 45 153 q76 165 226 264t244 116q66 12 135 12q28 0 57 -2q139 -17 216 -151q45 -79 46 -179q0 -69 -22 -148q-54 -193 -343 -400q59 -128 64 -203t35 -230q22 -83 86 -83q40 0 97 32l132 139l9 -17v-19q-162 -256 -268 -256h-2h-4q-76 0 -120 84q-46 86 -59 282.5t-133 294.5 q-2 7 -2 13q0 41 84 41q20 0 45 -2q104 52 179 150q76 98 92 228q5 41 6 76q0 76 -25 128q-35 74 -115 98q-19 5 -36 6q-56 0 -94 -59q-101 -109 -161 -392q-28 -160 -60 -421.5t-164 -425.5q-116 -145 -250 -145q-18 0 -36 3q-10 -1 -19 -1q-82 0 -123 86z" />
<glyph unicode="S" horiz-adv-x="834" d="M-78 233q8 110 104 185q84 67 163 67q10 0 19 -1l-3 -27q-113 -31 -159 -101q-37 -56 -36 -117q0 -15 2 -30q11 -78 78 -113q48 -25 110 -26q24 0 50 4q92 14 201.5 149.5t136.5 378.5q0 66 -35 88h-18q-126 -65 -281 -65h-18q-211 35 -226 248q6 211 226 390 q149 153 352 188h26q119 0 141 -75q1 -7 1 -14q0 -42 -34 -48q-39 -8 -56 20q-14 23 -107 22h-40q-130 -6 -255 -131t-138 -247q-2 -23 -2 -45q0 -89 44 -137q56 -58 141 -70q21 -3 43 -3q70 0 157 29q115 39 140 183q28 146 85 270q56 123 134 203q74 75 152 76q6 0 10 -1 q72 -4 71 -103q0 -14 -1 -31q-12 -129 -100 -269t-254 -310q-42 -221 -92.5 -370.5t-165.5 -258.5q-46 -64 -127 -111q-21 -34 -117 -60q-12 -1 -24 -1q-134 0 -216 74q-83 73 -82 171q-1 10 0 19zM169 -24l163 125l45 17q47 -20 81 -22h6q32 0 70 14q42 16 109 62 q67 44 112 102q28 35 37 36q6 0 6 -12q0 -37 -25 -68q-167 -245 -518 -262h-7q-30 0 -79 8zM761 955q2 -20 14 -20q31 1 129 131q117 158 117 234q-1 12 -3 22q-10 36 -36 37q-28 1 -75 -41q-90 -80 -146 -363z" />
<glyph unicode="T" horiz-adv-x="1299" d="M-162 106q20 56 65 64q9 2 16 2q33 0 51 -32q9 -16 10 -38q0 -35 -22 -86q54 -106 180 -114q17 -1 34 -1q105 -1 194 45q103 52 138 110q-52 46 -62 228q11 225 81 428l18 48h-10q-154 8 -222 61q-74 41 -132 123q-44 63 -44 133q-1 57 29 119q66 138 266 176 q66 11 129 11q79 0 152 -17q106 -20 178 -60q110 103 195 141q49 22 100 22q38 0 76 -12q87 -27 87 -108v-7q-4 -88 -107 -146q-96 -54 -190 -54h-12q-100 4 -151 12q-9 -15 -19 -32q-92 -143 -154 -273q156 19 211 73q67 66 105 66q18 0 30 -15q7 -9 7 -19q0 -43 -122 -112 q-107 -60 -268 -76q-55 -127 -82 -254q-27 -133 -27 -213q0 -49 10 -78q37 -105 113 -122q22 -5 45 -5q54 0 110 29q79 41 149 147q53 81 71 169l7 68q0 112 -54 125q-13 5 -28 5q-101 0 -237 -248q-28 -89 -49 -89q-18 0 -29 66q86 272 276 376l72 28l44 -1l44 -21 q53 -56 61 -120q4 -29 4 -59q0 -93 -38 -190q-96 -244 -320 -356q-21 -7 -42 -12q15 -2 32 -2q53 1 119 23q86 30 178 103l136 149l16 -33q-193 -316 -498 -316h-8l-68 11l-116 55q-13 2 -27 5q-113 -101 -201 -144q-88 -42 -186 -46h-15q-90 0 -169 42q-86 44 -118 118 q-20 45 -20 84q0 25 8 46zM227 1087q0 -81 57 -143l75 -58l98 -41l117 -5q84 191 207 348q-71 54 -185 94q-54 19 -107 20q-60 0 -119 -24q-143 -54 -143 -191zM962 1261q79 -21 140 -20q68 -1 113 25q62 36 62 75q0 14 -8 29q-22 38 -73 38q-22 0 -50 -8q-92 -24 -184 -139 z" />
<glyph unicode="U" horiz-adv-x="1106" d="M-43 1087q177 270 305 320q51 20 89 20q57 0 79 -45q13 -26 13 -83q-1 -107 -47 -317q-72 -324 -124 -593q-29 -131 -29 -207q1 -100 51 -106q8 -1 15 0q83 0 184 91q111 100 230 308q46 150 173 646q65 301 170 337h10q8 -20 8 -43q0 -42 -26 -94q-40 -80 -105.5 -360.5 t-110 -477.5t-52.5 -263q-2 -17 -2 -32q0 -40 16 -58q7 -8 21 -8q31 0 95 37q80 73 159 169h21v-29l-110 -156q-107 -139 -186 -145q-14 -4 -27 -4q-68 0 -110 97l34 235q-102 -138 -186 -226.5t-202 -134.5q-29 -10 -56 -10q-32 0 -61 14q-76 31 -76 173q0 27 3 57 q71 402 129 626.5t76 370.5q3 25 4 45q0 80 -51 79q-10 0 -23 -3q-96 -22 -262 -260q-41 -12 -39 30z" />
<glyph unicode="V" horiz-adv-x="885" d="M-34 1287q25 76 191 131l139 15l145 -22q113 7 153 77l54 -4q-90 -186 -129.5 -360t-62 -371.5t-36.5 -282t-28 -144.5q-4 -19 -4 -32q0 -23 14 -23q3 0 6 1l10 1q119 63 187 199t98.5 274t100 356t176.5 361q182 260 417 260q26 0 53 -3q120 -51 120 -93q0 -9 -6 -17 q-13 -21 -37 -21q-33 0 -87 37q-42 11 -83 11q-53 -1 -105 -19q-93 -34 -183.5 -158.5t-138.5 -228.5t-94.5 -258.5t-86.5 -313.5t-139 -317.5t-296 -314.5q19 -10 45 -20t58 -10q39 -1 87 15q86 28 197 123l136 149l16 -33q-189 -310 -460 -310h-17q-138 15 -148 26t-28 -1 q-19 -14 -52 -24q-16 -5 -30 -5t-28 6q-12 5 -13 23q0 19 15 52q75 61 135 171t88.5 323t55 351t65.5 315l27 103l-41 12q-137 42 -247 42q-109 -15 -166 -67l-21 -1q-21 -1 -22 20z" />
<glyph unicode="W" horiz-adv-x="1392" d="M-15 1264q25 76 192 130l139 14l145 -23q92 24 121 69q43 -4 54 -4q-59 -179 -82 -342l-19 -144q-12 -151 -13 -183t-25 -235q-16 -143 -16 -201v-12l1 -23q4 -20 22 -19h10q128 56 301 504q159 331 237 331q12 0 21 -7q0 -11 10 -10q-85 -148 -92 -304l-8 -141v-9 q0 -123 -25 -311l-35 -135l83 63l104 146q88 180 184 631q88 281 197 423q150 247 385 247q17 0 34 -1q137 -46 137 -88q0 -10 -8 -20q-16 -20 -42 -21q-40 0 -103 48l-63 -10q-227 -52 -339 -297q-104 -177 -137 -349q-44 -178 -92 -379q-58 -217 -213 -466l-72 -85 q-56 -45 -120 -99l-91 29q114 325 114 521q0 66 -13 117l-22 9l-42 -2q-43 -98 -94 -198q-184 -331 -498 -505l-21 -1h-2q-20 0 -49 18l22 71q129 89 163 286q37 116 48 266l39 188l13 131l6 57q1 95 24 213l27 103l-41 12q-137 43 -247 43q-108 -14 -166 -65l-21 -1 q-21 -1 -22 20zM788 53q28 -23 87 -46q14 -5 34 -5q69 0 216 59l92 74l136 149l16 -33q-189 -310 -460 -310h-17l-103 21z" />
<glyph unicode="X" horiz-adv-x="1263" d="M-168 44v6q0 62 58 62q21 0 49 -8q38 -64 103 -64q58 0 136 50q168 106 313 334t143 310q-17 252 -29 329q7 29 7 69v18v29v6q0 129 -138 178l-59 74q133 -35 169 -35h2h9q83 2 127 23q48 -15 49 -47q-44 -209 -43 -244l1 -19q19 -154 52 -153l39 1q456 629 637 629h7h1 l49 -47q1 -56 -230 -113q-270 -332 -382 -472q-107 -134 -106 -230v-8q40 -173 94 -530q17 -75 70 -75q26 0 60 18l161 136l30 21q19 -3 20 -19q-172 -245 -324 -279q-8 -1 -16 -1q-92 0 -108 107q-11 135 -37 241l-21 106l-13 47q-15 47 -34 47h-10q-107 -176 -221 -309 t-243 -203q-128 -70 -248 -73h-8q-113 -1 -116 88zM31 1332l67 48q83 64 207 65q120 0 278 -60q10 -5 19 -11l-20 -81l-18 18q-105 56 -194 56q-111 0 -199 -85q-17 -61 -64 -61q-13 0 -27 4q-54 16 -53 71q0 17 4 36z" />
<glyph unicode="Y" horiz-adv-x="1028" d="M-90 1184q22 80 110.5 146t174.5 75l108 -16q31 -7 59 -7q76 0 134 50q38 -13 39 -28q-83 -443 -186 -776q-17 -58 -17 -93q0 -12 2 -21q6 -33 47 -33h7q46 3 211 178q32 30 92 108q42 33 125 224q-2 63 156 167q134 338 223 347l35 -35q-107 -228 -183 -529 q-44 -272 -110.5 -455t-143 -293t-213.5 -170q-86 -46 -277 -60q-91 17 -129 59q-28 31 -28 71q0 15 4 32q20 75 70 75q32 0 77 -32q49 -107 145 -108h4q125 0 228 132q106 134 154.5 322t77.5 375l-1 18q-2 50 -30 57l-11 -1q-33 -1 -84 -157q-47 -60 -114 -145 q-234 -272 -320 -291l-47 -11h-5q-92 0 -92 114v16q24 127 104 383q17 83 38 168q25 123 48 223l-6 61l-144 16q-215 -38 -215 -193q0 -24 5 -51q-20 -49 -50 -49q-3 0 -6 1q-33 4 -60 30q-16 15 -16 46q0 25 10 60zM300 15l187 35q54 -6 94 -15q7 -1 15 -1q43 0 132 37 q120 64 242 213l15 -33q-160 -278 -514 -293l-128 4z" />
<glyph unicode="Z" horiz-adv-x="994" d="M-82 11v10q0 115 217 217q183 121 627 984v40q0 64 -285 64h-43q-92 0 -187 -89h-10v29q101 168 256 168q267 -44 288 -44l79 29q26 0 157 68h29v-39q-68 -36 -282 -413q-35 -48 -278 -495q-185 -225 -193 -292q0 -41 162 -102q124 -47 209 -47q26 1 48 5q96 18 250 201 l12 -15q-88 -220 -376 -300h-20q-25 0 -414 91h-19q-103 -10 -188 -99q-39 15 -39 29z" />
<glyph unicode="[" horiz-adv-x="1604" d="M115 -847l5 73q268 917 366 2245q-4 285 3 410q85 287 317 412q58 -189 984 -188l325 -1l-81 -77q-159 -41 -1183 -7l-127 -74q-72 -90 -104 -447l-16 -238q-232 -1439 -250 -1742l-11 -145q-23 -214 545 -196q119 -8 280 3l481 6l47 -100q-524 -43 -1426 -39 q-164 -29 -155 105z" />
<glyph unicode="\" horiz-adv-x="687" d="M-24 1563q30 130 393 -947q79 -179 176 -468t39.5 -276t-189.5 442l-241 602q-116 338 -124 423q-60 83 -54 224z" />
<glyph unicode="]" horiz-adv-x="1482" d="M-483 -908l81 77q159 31 1097 21l127 14q72 90 104 447l17 238q232 1439 249 1742l11 175q23 214 -334 206q-120 8 -455 7l-368 5l-47 89q434 7 1277 19q164 29 155 -105l-5 -73q-268 -947 -366 -2275q4 -285 -3 -410q-85 -287 -317 -412q-58 255 -898 214z" />
<glyph unicode="^" horiz-adv-x="987" d="M153 1193.5q0 8.5 93.5 129t188.5 228t145 107.5q51 0 126 -99t151.5 -211.5t57 -138t-49.5 6.5t-100 115t-117 144.5t-85.5 54t-126 -103t-160.5 -170.5t-98 -73t-25 10.5z" />
<glyph unicode="_" horiz-adv-x="1192" d="M102.5 -144.5q-14.5 30.5 34.5 57.5t208 28.5t331.5 -5.5t193 -19t19.5 -37q0 -25 -97 -28t-274 -10.5t-289 -12t-126.5 26z" />
<glyph unicode="`" horiz-adv-x="1682" d="M-1524 -908l124 70l226 25l225 -3q402 8 3124 -2l23 -55l-117 -56q-852 11 -1997 0zM-844 2113q3512 -5 3953 0l-92 -72l-230 -26q-608 0 -1730 1l-1669 -2l-192 36z" />
<glyph unicode="a" horiz-adv-x="692" d="M-130 68q-1 16 -1 33q0 60 17 121q24 67 72 153q96 153 250 249q118 73 189 73q22 0 40 -7l72 4l22 -45v-6q0 -50 -57 -180q-43 -137 -58 -182l-14 -93q-5 -29 -5 -48q0 -46 27 -47q3 0 7 1l38 21q40 32 176 180q22 -1 28 -33q-166 -259 -265 -259h-3q-17 -4 -32 -4 q-83 0 -82 118v17l34 174q-155 -196 -277 -273q-44 -32 -112 -32q-14 0 -29 1l-28 29zM-12 225q-5 -27 -5 -46q0 -44 28 -43q19 0 50 19q105 75 163 148q69 69 128 220q-27 42 -68 42q-32 0 -72 -25q-53 -29 -122 -126q-77 -104 -102 -189z" />
<glyph unicode="b" horiz-adv-x="556" d="M-244 53q-10 5 -10 15q0 20 43 60l104 142q58 107 139 231l38 -85q-104 -138 -106 -156q-142 -182 -208 -207zM-32 68q-14 50 -14 111.5t14 133.5q15 69 53 253q60 266 103 420.5t122 325.5q80 171 176 226q58 33 101 33q29 -1 51 -15q56 -36 58 -108q0 -6 -1 -12 q1 -69 -25 -162q-28 -101 -67.5 -184t-89 -175t-87 -150.5t-223.5 -335.5q-57 -137 -70 -247q-3 -23 -3 -43q0 -73 39 -95q11 -6 23 -7q43 0 103 81q27 16 39 16q8 0 8 -8q0 -15 -28 -57q-64 -97 -160 -99h-3q-92 -1 -119 98zM41 -23q149 59 244.5 112.5t231.5 213.5l14 -27 q-188 -294 -411 -311q-7 -1 -14 -1q-33 0 -65 13zM143 686q-3 -22 -3 -37q0 -31 14 -30q9 0 22 11q47 39 158 203.5t191 384.5q44 122 44 189q0 53 -28 69q-13 7 -27 7q-56 0 -132 -115q-94 -144 -159 -365t-80 -317zM180 61q89 80 138 231q-1 61 -13 136q-6 48 -6 86 q0 156 100 168q39 0 57 -69q7 -25 7 -57q-1 -56 -21 -133q-32 -121 -107 -248q-67 -101 -142 -164z" />
<glyph unicode="c" horiz-adv-x="467" d="M-83 208q18 129 97 261.5t168 188.5q65 41 118 40q19 0 37 -6q66 -20 70 -90v-11q-1 -61 -47 -74q-8 -2 -15 -2q-36 1 -40 59q-3 48 -30 48q-13 0 -31 -11q-187 -130 -206 -410q0 -114 79 -114q11 0 24 2q120 29 324 285l21 -18q-192 -308 -330 -363q-36 -18 -79 -18 q-27 0 -58 7q-69 23 -91 92q-15 46 -15 90q0 22 4 44z" />
<glyph unicode="d" horiz-adv-x="757" d="M-137 33q-9 23 -9 58q0 39 12 95q23 104 96 205.5t150 164.5q78 64 149 82q38 10 68 10q25 0 44 -8q41 -16 62 -50l16 49q31 112 99.5 400t121.5 442q37 95 79 95q4 0 8 -1q20 -4 20 -37q0 -44 -36 -139q-95 -322 -144.5 -563t-78 -379t-55.5 -344q2 -34 21 -34 q20 0 57 36l69 64q56 71 129 167l16 -31q-118 -241 -273 -345l-48 -10q-85 26 -85 128v12q27 175 27 243q0 44 -11 44q-4 0 -9 -5q17 51 17 86q1 28 -11 46q-22 35 -70 35q-6 0 -13 -1q-58 -5 -136 -72.5t-128 -166.5q-39 -78 -39 -132q0 -15 2 -27q12 -53 57 -54q5 0 11 2 q54 8 126 68t186 223q35 63 48 62q8 0 9 -23q0 -14 -3 -35q-99 -181 -217.5 -293.5t-178.5 -128.5q-32 -9 -58 -9q-22 0 -40 7q-38 14 -57 64z" />
<glyph unicode="e" horiz-adv-x="468" d="M-80 126q-3 23 -3 48q-1 66 25 136q34 96 110 202t176 158q63 33 108 32q26 0 46 -11q49 -27 48 -87v-12q-5 -68 -61 -128.5t-166 -114t-140.5 -85t-32.5 -67.5v-10q0 -31 8 -59q10 -33 45 -52q15 -8 36 -9q27 1 64 15q65 24 134 105l78 88q33 21 44 1 q-179 -257 -300 -293q-39 -11 -72 -11q-49 0 -81 26q-54 40 -66 128zM44 326q188 97 246 165q48 57 48 94q0 7 -2 13q-7 23 -33 24q-18 0 -45 -11q-67 -27 -126.5 -109.5t-87.5 -175.5z" />
<glyph unicode="f" horiz-adv-x="387" d="M-287 34q75 66 117.5 115.5t89 122t73 148t59.5 176.5t100 203q8 1 21 11l45 -2q8 -13 8 -31q0 -27 -20 -65q-33 -61 -63.5 -149t-107.5 -476l3 -23q5 -15 17 -13q149 78 366 378q22 37 35 45q6 3 6 -4q0 -9 -10 -36q-17 -46 -87.5 -151t-138 -186.5t-115.5 -128.5l3 -26 q12 -33 24 -132q2 -24 2 -59q0 -106 -26 -311q-76 -338 -131 -405q-82 -117 -178 -138q-60 4 -71 80q-3 22 -3 52q0 186 114 705l19 124l-1 7q-3 25 -13 36q-2 15 -2 29q0 84 74 155q20 73 18 86q-16 5 -24 4q-29 -21 -50.5 -47t-69.5 -64q-40 -31 -72 -31q-5 0 -11 1z M-164 -948q5 -40 30 -40h6q54 7 127 206q52 197 63 376q5 69 5 122q0 86 -11 131q-19 73 -44 73t-50.5 -96.5t-59.5 -232.5t-53 -315q-14 -136 -14 -195q0 -18 1 -29z" />
<glyph unicode="g" horiz-adv-x="695" d="M-278 -944q-3 21 -3 45q0 110 68 253q82 173 173.5 283t169.5 193q73 79 197 209q10 59 25 137q-150 -208 -286 -208q-8 0 -15 1q-143 12 -153 185q-1 14 -1 27q0 160 107 320q116 174 232 199q47 9 83 9q55 0 87 -23q52 -37 64 -76q4 -12 8 -12q9 0 20 50q15 77 68 80h2 q27 0 27 -40q0 -32 -18 -91q-41 -134 -90 -340l4 -38q1 -11 21 -21q68 28 238 235l-4 -58l-41 -76q-44 -77 -243 -269l-44 -52q-75 -396 -161 -613t-207 -347q-103 -112 -188 -112q-14 0 -27 4q-95 21 -113 146zM-150 -925q17 -47 57 -47q21 0 49 13q79 38 150 185 t121.5 341t82.5 380q-56 -59 -132.5 -149t-175 -239.5t-138.5 -280.5q-25 -79 -25 -137q0 -38 11 -66zM18 315q-7 -45 -7 -81q0 -72 31 -107q33 -35 79 -35q22 0 47 8q78 24 133 109.5t75 206.5q4 26 4 49q0 85 -58 133q-27 23 -59 23q-53 0 -118 -65q-103 -105 -127 -241z " />
<glyph unicode="h" horiz-adv-x="691" d="M-244 53q-10 5 -10 15q0 20 43 60l104 142q44 67 101 172q12 58 31 144q49 202 94 366t128 342t175 238q56 36 100 36q27 0 49 -14q54 -36 54 -112v-8q-3 -82 -25.5 -171.5t-61.5 -172.5t-88.5 -175t-86.5 -150q-34 -53 -230 -311q-10 -14 -21 -29q-25 -85 -39 -146 l85 125q197 284 296 285q4 0 7 -1q57 -14 57 -90q0 -14 -2 -31l-18 -61q-28 -107 -80 -300q-13 -42 -13 -67q1 -24 13 -31q24 -14 49 3t72.5 68t101.5 134q24 32 39 32q10 0 16 -12q-97 -184 -176 -265q-78 -82 -136 -83h-4q-56 0 -74 31q-17 27 -16 63v13q4 44 26 124 t42 157q35 101 35 145q0 34 -21 35q-8 0 -18 -5q-49 -18 -138.5 -145.5t-158.5 -299.5l-38 -84q-46 -43 -72 -43q-35 0 -34 78l19 95l21 97q-134 -169 -197 -193zM144 639q-1 -9 -2 -16q0 -17 9 -17q11 0 35 30q52 60 153 211.5t168 349.5q41 119 41 184q0 44 -18 64 q-13 14 -29 14q-43 0 -107 -95q-90 -131 -166 -396t-84 -329z" />
<glyph unicode="i" horiz-adv-x="443" d="M-144 177q89 113 151 212l43 40q7 2 13 2q13 0 13 -13q0 -21 -35 -77l-76 -95q-69 -81 -95 -81q-10 0 -14 12zM-18 357h6q93 142 208 313l24 13q36 -1 36 -53v-8q-81 -153 -120 -394l-15 -85l-2 -42q2 -23 31 -27q44 4 158 126l80 95l7 -28q-94 -192 -227 -277 q-34 -14 -65 -14q-19 0 -38 5q-60 21 -60 94q0 20 5 45q4 60 55 263zM208 868q7 30 136 112l48 -30q5 -58 -147 -124q-22 9 -35 8z" />
<glyph unicode="j" horiz-adv-x="267" d="M-547 -916q-1 12 -1 24q0 120 71 295q78 193 403 609q14 82 28 168q-3 -4 -7 -7q-57 -70 -182 -112q-16 9 -11 29q130 79 210 239q19 40 26.5 63.5t12.5 49.5q32 159 75.5 220t77.5 80q9 4 16 4q21 0 29 -44q-108 -315 -125 -394t-38 -194q113 134 218 232q43 56 54 56 q3 0 3 -5q0 -10 -13 -39q-21 -43 -54.5 -83.5t-67.5 -87.5t-63.5 -84t-58.5 -73.5t-32 -53.5t-42.5 -218t-74.5 -375.5t-107 -294t-152 -152.5q-43 -19 -79 -19q-30 0 -55 13q-53 29 -61 154zM-464 -948q17 -64 55 -64h7q44 6 88 63.5t92 221t130 612.5 q-100 -112 -205.5 -308.5t-144.5 -324.5q-27 -89 -27 -150q0 -28 5 -50zM146 991q-2 17 72 85l34 3h1q8 0 36 -31q4 -48 -82 -109l-34 -2h-3q-19 0 -21 21z" />
<glyph unicode="k" horiz-adv-x="761" d="M-244 53q-10 5 -10 15q0 20 43 60l104 142q58 107 139 231l38 -85q-104 -138 -106 -156q-142 -182 -208 -207zM-81 54l40 209l2 21q10 40 54 261l130 -24l-11 -41l-10 -40q110 11 305 227q63 29 85 29q58 -19 66 -47v-19q-68 -140 -258 -319q56 -88 80 -153 q25 -64 57 -72q4 -1 9 -2q31 0 83 44q60 50 135 131q26 35 36 35q8 0 8 -18q0 -11 -3 -28q-177 -271 -288 -271q-11 0 -21 3q-66 6 -108 134t-68.5 143t-60.5 9.5t-90.5 -40.5t-92.5 -250q-28 -24 -46 -24q-33 0 -34 81q0 10 1 21zM-21 414q7 14 15 28q12 58 31 144 q49 202 94 366t128 342t175 238q56 36 100 36q27 0 49 -14q54 -36 55 -112q0 -4 -1 -8q-3 -82 -25.5 -171.5t-61.5 -172.5t-88.5 -175t-86.5 -150q-34 -53 -230 -311q-10 -14 -21 -29q-9 -31 -17 -59zM25 219l1 -1v1h-1zM144 639q-1 -9 -2 -16q0 -17 9 -17q11 0 35 30 q52 60 153 211.5t169 349.5q40 118 40 183q0 45 -19 65q-12 14 -28 14q-41 0 -107 -95q-90 -131 -166 -396t-84 -329zM269 422q0 -14 37 -37h10l132 141v19q0 19 -19 19h-19q-31 0 -141 -142z" />
<glyph unicode="l" horiz-adv-x="461" d="M-244 53q-10 5 -10 15q0 20 43 60l104 142q58 107 139 231l38 -85q-104 -138 -106 -156q-142 -182 -208 -207zM-40 149l8 164q14 65 52 231l80 -150q-27 -105 -27 -185v-21l9 -75q23 -41 64 -41q38 0 91 35q77 59 199 234l10 1q12 -1 10 -20q-80 -205 -261 -321l-81 -27 h-8q-121 0 -143 173zM-21 414q7 14 15 28q12 58 31 144q49 202 94 366t128 342t175 238q56 36 100 36q27 0 49 -14q54 -36 55 -112q0 -4 -1 -8q-3 -82 -25.5 -171.5t-61.5 -172.5t-88.5 -175t-86.5 -150q-34 -53 -230 -311q-10 -14 -21 -29q-9 -31 -17 -59zM144 639 q-1 -9 -2 -16q0 -17 9 -17q11 0 35 30q52 60 153 211.5t169 349.5q40 118 40 183q0 45 -19 65q-12 14 -28 14q-41 0 -107 -95q-90 -131 -166 -396t-84 -329z" />
<glyph unicode="m" horiz-adv-x="1126" d="M-170 126l1 30q40 84 227 300q107 125 190 165l55 -9q8 -22 8 -50q0 -63 -40 -158q123 186 243 257l42 3q72 -28 72 -137q0 -34 -7 -75q-15 -47 -109 -349q-30 -104 -72 -114q-6 -1 -12 -1q-28 0 -27 40v10q29 220 91 392l5 58q-18 23 -38 21l-41 -12 q-149 -162 -198 -279t-58 -169q-40 -67 -72 -67q-19 0 -34 25q8 75 55 256l29 112q18 52 18 75q0 19 -12 18q-19 0 -70 -50q-4 -23 -142 -201l-72 -89zM462 192l144 212q197 284 296 284h7q67 -15 67 -93q0 -13 -2 -28l-18 -61q-28 -107 -80 -300q-16 -52 -16 -78 q0 -28 17 -28q3 0 8 1l-10 -93l-60 -19q-73 4 -78 80l6 75q43 152 67 250q32 88 32 127q0 31 -21 32q-8 0 -19 -5l-52 -37q-98 -86 -245 -354zM848 -2l32 104q101 56 192 199q16 0 40 20h19q-83 -189 -240 -305q-23 -11 -43 -18z" />
<glyph unicode="n" horiz-adv-x="830" d="M-141 180q81 127 306 438q73 44 102 44q41 -28 44 -97l-4 -82l-8 -63l-18 -78l-107 -336q-16 -32 -47 -32q-16 0 -35 8l-11 46l66 285l23 83q10 37 10 59q0 31 -21 31q-12 0 -32 -10q-192 -296 -265 -296h-3zM162 192l144 212q197 284 296 284h7q67 -15 67 -93 q0 -13 -2 -28l-18 -61q-28 -107 -80 -300q-16 -52 -16 -78q0 -28 17 -28q3 0 8 1l-10 -93l-60 -19q-73 4 -78 80l6 75q43 152 67 250q32 88 32 127q0 31 -21 32q-8 0 -19 -5l-52 -37q-98 -86 -245 -354zM548 -2l32 104q101 56 192 199q16 0 40 20h19q-83 -189 -240 -305 q-23 -11 -43 -18z" />
<glyph unicode="o" horiz-adv-x="509" d="M-77 112q-11 38 -11 83q0 89 42 204q63 174 208 261q26 40 76 62q32 14 65 14q21 0 41 -5q56 -13 80 -91q10 -29 10 -71q0 -69 -26 -171q-42 -164 -167 -300q-89 -100 -173 -107q-113 7 -145 121zM13 4q149 59 244.5 113t231.5 214l14 -27q-188 -294 -411 -311 q-7 -1 -14 -1q-33 0 -65 12zM25 272q-7 -44 -7 -78q0 -94 54 -108q11 -3 22 -3q61 0 124 88q74 103 92 225q8 57 8 101q0 48 -10 77q-20 56 -72 58q-1 0 -3 1q-52 0 -116 -96q-66 -98 -92 -265z" />
<glyph unicode="p" horiz-adv-x="555" d="M-227 -822q7 93 30 286q46 315 59 391.5t39 219.5q86 401 122 532q137 122 251 126h13q124 0 164 -109q21 -51 21 -104q0 -42 -13 -84q-53 -193 -273 -343q-24 -24 -195 -123q-77 -343 -95 -552q-16 -187 -16 -282v-20q2 -95 16 -196l-14 -20q-79 4 -98 94 q-13 66 -13 133q0 25 2 51zM16 93l63 16q139 32 258 304l5 84q-3 119 -76 130l-42 -1q-137 -16 -208 -533zM29 15q88 53 162.5 69t151 62.5t161.5 125.5l14 -27q-170 -234 -421 -234q-33 0 -68 4z" />
<glyph unicode="q" horiz-adv-x="622" d="M-138 45q-1 18 -1 36q0 168 124 333q138 182 261 252q79 45 127 45q27 0 44 -14l16 -44q70 101 111 103q7 -41 20 -40q-115 -315 -212 -790q-34 -219 -46.5 -345t-21.5 -291t-9 -265.5t-31 -114.5q-5 -3 -11 -3q-23 0 -37 49q-19 60 -25 136q-1 12 -1 30q0 101 29 406 q34 360 141 755q-71 -121 -261 -270q-75 -48 -135 -48h-4q-62 2 -78 80zM-31 151q0 -58 47 -58q13 0 31 5q78 22 164 120.5t129 218.5q15 41 15 68q0 52 -54 53h-2l-164 -84q-83 -86 -124 -166q-42 -82 -42 -157zM334 19l30 105q3 1 7 3q85 28 216 192l15 -27 q-96 -221 -268 -273z" />
<glyph unicode="r" horiz-adv-x="728" d="M-135 180l63 104q46 68 127 223q60 340 235 340q8 0 16 -1l-40 -58q-41 -59 -41 -102v-6q0 -53 88 -70q93 -18 121 -53q14 -18 13 -53q0 -34 -13 -84q-27 -102 -52 -240q0 -3 -1 -6q0 -64 36 -64q7 0 16 3q97 29 260 206l12 -10l4 -24q-124 -185 -247 -269 q-41 -29 -85 -29q-15 0 -30 3q-61 23 -61 113q0 91 34 210q19 70 19 111q0 27 -9 41q-22 35 -88 51q-16 4 -30 4q-44 0 -72 -39q-110 -159 -156 -217.5t-79.5 -85.5t-39.5 2z" />
<glyph unicode="s" horiz-adv-x="569" d="M-291 74q152 106 331 350q48 57 152 217q65 126 160 177q18 5 31 5q30 0 28 -29q-84 -114 -87 -187q-1 -9 -1 -18q0 -48 32 -127q53 -90 53 -183q0 -42 -10 -84q-34 -136 -185 -194q-44 -8 -80 -8q-62 -1 -99 23q-59 36 -59 87t30 77q18 15 40 15q14 -1 30 -7 q27 -11 26 -50q0 -22 -7 -52q10 -34 44 -34q7 0 16 2q48 9 87 60t49 142q2 20 3 38q0 68 -30 122q-31 56 -62 56q-7 0 -15 -3q-40 -17 -219.5 -219t-230.5 -210q-30 -12 -30 14q0 8 3 20zM185 4q55 59 137 99t218 200l14 -27q-138 -260 -369 -272z" />
<glyph unicode="t" horiz-adv-x="445" d="M-178 144q9 14 34 46.5t80.5 114.5t146.5 257l-23 19h-56l-54 7q-40 11 -40 29q0 15 30 36q107 0 148.5 12.5t78.5 156.5q55 223 90 318l35 60q18 11 31 11q19 0 27 -24q4 -10 4 -24q0 -41 -31 -112l-58 -184q-22 -71 -22 -119q0 -14 2 -26q29 -25 64 -42q104 -6 159 -6 q64 0 64 8l27 -7l1 -9q-3 -27 -142 -47l-74 -20l-64 -9q-70 -11 -108 -165q-49 -173 -48 -258v-18q3 -48 35 -48q23 0 62 26q64 33 222 230h9l5 -38q-150 -220 -223 -277q-54 -56 -127 -59q-99 4 -99 125q0 25 4 56q10 88 51 247q-77 -139 -149 -221q-63 -72 -82 -72 q-2 0 -4 1q-9 7 -9 15q0 5 3 10z" />
<glyph unicode="u" horiz-adv-x="836" d="M-128 207q41 53 71 98t231 348q54 29 83 29q27 0 34 -25q-64 -225 -89 -308.5t-44 -199.5l6 -38l17 -7q72 9 235 223l133 310l70 81q15 5 25 5q29 0 29 -37v-6q-130 -371 -144 -452l-10 -61v-6q0 -63 40 -70q118 55 217 210q16 0 40 20h19q-83 -189 -240 -305 q-54 -27 -93 -27q-86 0 -97 133l20 116q-70 -127 -181 -209q-74 -52 -122 -52q-7 -1 -13 1q-50 8 -66 68q-3 12 -3 28q0 69 51 228l19 92q3 13 3 20q0 9 -5 9q-16 0 -83 -92l-136 -172h-9q-25 0 -25 14q0 12 17 34z" />
<glyph unicode="v" horiz-adv-x="653" d="M-113 216q162 244 208.5 296t73.5 63t49.5 -4.5t22.5 -69t-36 -175.5q-36 -124 -46 -186q-3 -17 -3 -30q0 -34 20 -39q3 -1 6 -1q28 0 78 44q58 50 102 128q46 80 72 166q17 56 17 92q1 20 -5 35q-14 41 -21 87q-1 9 -1 18q0 40 20 84q22 50 60 49q4 -1 10 -1 q44 -6 58 -69q3 -12 3 -28q0 -73 -51 -245q-78 -234 -200 -370q7 3 29 9.5t92 60t170 173.5l14 -27q-175 -268 -379 -306q-35 -6 -68 -6q-15 0 -30 1q-48 3 -77 35q-22 24 -22 72q0 15 2 31q9 71 41 173q31 96 31 120q1 25 -37 -6q-36 -30 -173 -195q-28 -24 -30 21z" />
<glyph unicode="w" horiz-adv-x="976" d="M-130 176q13 34 47 87.5t85.5 127.5t95.5 123.5t71 60.5t49 -5q18 -12 19 -59q1 -11 -1 -25q-6 -70 -34 -176.5t-40 -150.5q-12 -43 4 -47q1 0 3 -1q16 0 50 43q37 46 111 178t98 180.5t59 61.5q4 2 8 2q21 0 21 -49q0 -13 -2 -29q-8 -88 -8 -183v-15q0 -85 16 -142 q14 -50 35 -50q5 0 11 4q29 16 76.5 97t81.5 183q24 72 25 113q-1 17 -5 30q-14 41 -20 87q-1 9 -1 18q0 40 20 84q22 50 60 49q3 -1 9 -1q44 -6 59 -69q3 -12 3 -28q0 -73 -51 -245q-83 -246 -200 -403q-34 -39 -63 -52l-12 -6l-16 1q-123 26 -123 284v24q1 11 1 19 q0 32 -9 32q-7 0 -21 -21q-34 -54 -97.5 -165t-121.5 -145q-32 -18 -56 -18q-19 0 -33 12q-21 19 -21 55q1 17 5 37q14 64 42.5 179t30 143.5t-37.5 -9t-184 -213.5q-42 -34 -42 -18q0 3 3 10zM558 -1q56 37 65.5 47t43 20t103.5 63.5t170 173.5l14 -27q-188 -294 -379 -306 q-13 -1 -22 -1q-20 0 -19 6q0 8 24 24z" />
<glyph unicode="x" horiz-adv-x="552" d="M-393 -59q69 57 152.5 142.5t241.5 282.5h9l57 -2q-187 -219 -295 -316.5t-165 -106.5zM-274 41q155 171 280 340.5t226 260.5q100 92 152 118q38 20 59 20q7 0 12 -2q19 -9 -27 -42.5t-163 -151.5t-508 -541q-40 -34 -47 -34q-2 0 -2 2q0 5 18 30zM4 690q6 134 75 148 q6 -147 34.5 -353.5t76.5 -295.5q39 -71 90 -71q12 0 26 4q66 22 170 151q54 67 71 67q3 0 5 -2t2 -6q0 -24 -67 -122q-77 -113 -149 -159q-46 -29 -92 -29q-26 0 -51 9q-71 26 -115 120.5t-63 249.5q-15 120 -15 228q1 31 2 61z" />
<glyph unicode="y" horiz-adv-x="757" d="M-195 -922v19q0 144 101 327q109 196 422 545q130 151 146 282l-3 25q-3 26 -32 7l-33 -38q-33 -51 -83 -112q-119 -176 -213 -176q-10 0 -20 2q-58 12 -58 107v10q62 250 93 344q-1 5 -4 5q-13 0 -66 -77q-67 -98 -210 -230l-31 22l82 104q98 118 329 453h7q50 0 50 -65 q0 -21 -5 -47q-66 -212 -112 -405q-11 -47 -11 -74q0 -36 20 -36q4 0 10 2q47 16 118 103h2q24 28 54 66v3q163 258 278 465q20 18 38 18q25 0 46 -32q-58 -185 -103 -334l-37 -186q69 77 169 191q16 2 38 24l9 2q-76 -153 -238 -330l-6 -32q-23 -58 -38 -147 q-45 -312 -140.5 -547.5t-217.5 -339.5q-105 -88 -201 -88q-17 0 -33 2q-110 18 -117 168zM-104 -790q-6 -40 -6 -71q0 -103 64 -123q13 -3 26 -3q76 0 172 123q114 145 188 405t100 433q-177 -166 -347.5 -381t-196.5 -383z" />
<glyph unicode="z" horiz-adv-x="614" d="M-351 -989q1 412 519 903q17 10 17 35q0 35 -32 98l-69 44q-45 0 -150 -54v11q0 11 -11 11q0 23 183 225q171 278 171 312q-77 32 -128 32l-97 -11v22q97 96 182 96q106 -32 140 -32q35 0 97 43h32v-32q-76 -111 -215 -258q-107 -172 -107 -212t35 -55t86 -78l31 -70 q94 87 139.5 136t90.5 97q38 41 38 24q0 -3 -1 -8q-126 -242 -254 -375q-25 -273 -110 -470t-150 -280.5t-148 -165.5q-88 -80 -180 -92q-15 -2 -28 -2q-61 0 -75 47zM-237 -923q4 -67 36 -67q12 0 28 9q91 42 197 218q153 278 185 600l-72 -39q-285 -263 -358 -595z" />
<glyph unicode="{" horiz-adv-x="1127" d="M-2 -464l4 60q232 756 317 1851q-4 235 3 338q73 237 274 340q50 -210 851 -164l281 -8l-70 -64q-137 -34 -1023 -22l-110 -28q-63 -74 -91 -368l-14 -197q-200 -1187 -216 -1437l-9 -119q-20 -176 471 -162q103 -6 243 3l416 5l41 -82q-454 -44 -1234 -32 q-142 -24 -134 86zM1185 -514l70 63q137 26 948 1l110 28q63 74 91 368l14 197q200 1187 216 1437l9 143q20 177 -289 171q-104 6 -394 -3l-318 -5l-41 82q376 6 1106 24q141 24 133 -86l-4 -61q-232 -780 -316 -1875q3 -235 -3 -338q-74 -237 -274 -340q-50 210 -778 177z " />
<glyph unicode="|" horiz-adv-x="663" d="M187 -272q-35 72 54 1024q42 759 69 778.5t55.5 31t63.5 -59.5q-60 -110 -81 -469q-21 -189 -36 -586q-39 -205 -22 -433q10 -221 -65 -308z" />
<glyph unicode="}" horiz-adv-x="914" d="M90 157q3 26 39.5 63.5t98.5 58.5q62 22 138.5 -1.5t116.5 -30.5t75 4.5t75.5 59t56.5 48t-2 -44t-48.5 -81.5t-82 -60t-115.5 -14t-102.5 28t-80 18.5t-75 -11.5t-65.5 -37t-29 0zM121 440.5q-3 11.5 26 45t95 61.5q67 29 146 2.5t119 -33.5t83 5.5t75.5 59t48.5 47 t-1.5 -44t-52.5 -90.5t-88.5 -67t-111.5 -5t-96.5 35t-83 23t-83.5 -16.5t-56 -27t-20 5z" />
<glyph unicode="~" horiz-adv-x="906" d="M105 430.5q-2 19.5 34 65t112 75.5q77 30 160 -31.5t126 -82t91.5 -11t90 75t59 62.5t-7.5 -69.5t-69.5 -114t-112 -53t-131 34t-108.5 69t-88 29t-79.5 -28t-55.5 -34t-21 13z" />
<glyph horiz-adv-x="2795" d="M678.5 853q14.5 156 183.5 261q71 48 174 37q104 -22 179 -151l47 -92l140 159q173 169 385 257l185 22q110 -22 142 -124t-90 -302q-118 -198 -409 -431q-448 -364 -594 -536q-10 -45 -94 156t-173.5 394.5t-75 349.5z" />
<glyph unicode="&#xa1;" horiz-adv-x="347" d="M89 132q216 645 237 813t42 198t35 29h10q0 -11 9 -31q-14 -169 -46.5 -351.5t-98.5 -425.5t-176.5 -333t-11.5 101zM370 1403q5 69 112 135l10 -1q20 -1 19 -21l-2 -21q-83 -116 -100 -115l-20 1q-20 5 -19 22z" />
<glyph unicode="&#xa2;" horiz-adv-x="742" d="M8.5 140.5q-19.5 94.5 14.5 229t130.5 227t225.5 120.5q82 314 99 307.5t7 -93t-31 -216.5q107 -16 145 -69t18 -67t-43.5 9t-61 37.5t-62.5 -22t-69 -312.5q-45 -204 3 -206t107.5 31t126.5 82t17 -13.5t-123 -116t-120.5 -74.5t-56 -74.5t-25 -130t-39 -94.5t-29 13.5 t1 101t16.5 151.5q-80 -4 -156 40.5t-95.5 139zM108.5 264q-7.5 -136 72.5 -171t94 31q18 184 62 372q52 158 -19 123t-136.5 -127t-73 -228z" />
<glyph unicode="&#xa3;" horiz-adv-x="902" d="M-118 18.5q1 30.5 87 75.5t174.5 121t131.5 392q-279 16 -274.5 40t141 36t161.5 73.5t45 171.5t60.5 205.5t126 178t159 100.5t105 4.5t19.5 -39.5t-61.5 -29t-101.5 -28.5t-92.5 -75.5t-70 -122t-44 -151.5t-20.5 -146.5t-2 -88.5t75 -31t164.5 -5.5t95.5 -21.5 t-63.5 -38t-177.5 -12t-137 -73.5t-34 -122t-23.5 -125t25 -134.5t133.5 -74.5t170.5 14t131 74t42.5 3.5t-103.5 -106t-172.5 -84.5t-204.5 28t-218.5 35.5t-149 -39t-76.5 -32t-21.5 27z" />
<glyph unicode="&#xa4;" horiz-adv-x="655" d="M21 23q0 17 88 121q-50 138 26 251q-87 102 -100 158q0 37 44 45q25 -15 58 -54l70 -55q66 38 128 38t102 -25l126 116q33 0 24 -45q-1 -23 -41.5 -65t-40.5 -58q51 -68 46.5 -157t-46.5 -149q86 -97 86 -119q0 -33 -32 -49q-24 0 -112 106q-15 14 -55.5 -11.5t-102 -24 t-122.5 31.5l-88 -94q-28 -18 -48 -9t-10 48zM190 221.5q18 -71.5 105.5 -79t131 44.5t36.5 111.5t-44.5 88.5t-104.5 21t-104.5 -61.5t-19.5 -125z" />
<glyph unicode="&#xa5;" horiz-adv-x="897" d="M24 1423q60 31 128.5 -60.5t164.5 -228t152 -246.5q22 -63 60 12l223 287q197 264 300.5 299t-14.5 -91.5t-398 -513.5l-76 -104q-18 -50 55.5 -58t203.5 -13q170 -34 -56.5 -42.5t-238 -37t-18.5 -103.5q33 -5 268 -20q166 -33 -281 -54q-20 -206 -44 -333.5t-75 -160.5 l-29 17q-25 47 -2.5 177t42.5 296q-107 -4 -227 -7q-67 11 -67 38q0 9 58 33q153 14 230 13q19 0 25 37.5t0 88.5q-85 -3 -200 -6q-68 10 -68 38q0 8 58 33q154 13 193.5 23.5t-29.5 119t-141 234.5t-197 333z" />
<glyph unicode="&#xa7;" horiz-adv-x="1201" d="M13.5 283.5q29.5 51.5 88 72t97.5 -15.5q-100 -103 -36 -185.5t182 -106.5t225 5.5t150.5 116t-40.5 160t-232 114.5t-267.5 121t-88.5 227.5t232 186.5q-33 -3 -97.5 58.5t-45.5 169t128 181t246.5 73.5t238.5 -44.5t135.5 -95.5t25.5 -86.5t-46 -29t-61.5 47t-68.5 69 t-115.5 49t-171.5 0.5t-153.5 -85t-26 -138t151.5 -130t262 -121.5t183 -174.5t-15.5 -193.5t-142.5 -93.5q122 -77 125.5 -186t-96.5 -190.5t-226.5 -100t-225 -1.5t-190 67.5t-123 129t-2 130zM245.5 824q-71.5 -105 39 -184t261.5 -111t227 27.5t19 159.5t-266 156 q-209 57 -280.5 -48z" />
<glyph unicode="&#xa9;" horiz-adv-x="1743" d="M227.5 674.5q13.5 233.5 150 417t295.5 257t325 66t284.5 -96t184 -241t26.5 -454t-310 -503.5q-137 -94 -248.5 -113t-209 -13t-221 71t-207 220.5t-70 389zM375 798.5q-36 -245.5 26 -400.5q62 -154 166.5 -229t269.5 -81.5t328 109.5t230 381t-27.5 485t-328.5 260 t-431 -119.5t-233 -405zM580 755.5q24 116.5 103 201t168 116.5t185.5 13.5t137.5 -87.5t3 -85.5t-66.5 31t-95.5 61t-146 -20t-138.5 -128t-49.5 -209.5t85.5 -158t152.5 -29t146.5 81t89.5 4q0 -57 -93.5 -123t-197 -68t-177 51t-102.5 143t-5 206.5z" />
<glyph unicode="&#xab;" horiz-adv-x="1335" d="M112 486.5q67 51.5 193 126.5q63 44 289 188l20 8l6 -22q-3 -33 -186 -161q-196 -155 -225.5 -175t75.5 -101q247 -242 271.5 -335t-68.5 -0.5t-191 185.5t-174.5 164t-9.5 122.5zM427 486.5q67 51.5 193 126.5q63 44 289 188l20 8l6 -22q-3 -33 -186 -161 q-196 -155 -225.5 -175t75.5 -101q247 -242 271.5 -335t-68.5 -0.5t-191 185.5t-174.5 164t-9.5 122.5z" />
<glyph unicode="&#xad;" horiz-adv-x="804" d="M138 385.5q68 42.5 156 46t123 2.5t66 -1q194 16 158 -9t-107 -50q-86 -3 -171.5 -6.5t-189 -14t-35.5 32z" />
<glyph unicode="&#xae;" horiz-adv-x="1148" d="M175 1190q7 118 75.5 210.5t148.5 129.5t164 33t149.5 -50t94.5 -143.5t4 -235.5t-140 -220q-73 -48 -136.5 -57.5t-109.5 -5.5t-109.5 36.5t-105.5 108.5t-35 194zM248 1245.5q-19 -130.5 8 -201.5q27 -70 82 -107t143.5 -40.5t173 59t115 192t-17 242t-167.5 130 t-219 -63t-118 -211zM352.5 1048q-2.5 43 17.5 169.5t69 143.5q0 20 36 39.5t61 26.5q64 0 86 -33q39 -45 -10 -130q-58 -73 -106 -96q-10 0 -17 -33q0 -19 130 -50q43 -3 43 -23t-73 -34q-68 14 -101 32.5t-59 24.5q-21 0 -41 -73l-13 -7q-20 0 -22.5 43zM443 1198l10 -7 q30 0 46.5 9t51.5 50t35 78t-54 39q-50 -2 -70 -31t-19 -138z" />
<glyph unicode="&#xb0;" horiz-adv-x="532" d="M212.5 1449.5q-22.5 69.5 24 140t104 89t93 17t74.5 -23t57 -70.5t-12 -126.5t-117 -117.5q-63 -30 -122 -11q-79 33 -101.5 102.5zM284 1509q-18 -83 33 -112.5t103 7t64 97.5t-1.5 96.5t-50.5 50.5t-83.5 -20.5t-64.5 -118.5z" />
<glyph unicode="&#xb1;" horiz-adv-x="874" d="M-55 208v6q65 59 101 59h327q56 0 65 -29q-18 -44 -246 -51h-232q-15 0 -15 15zM-13 555q60 73 229 66q44 241 115 241h9q44 0 33 -56l-30 -179q17 -1 182 5q36 -28 36 -32l17 -7q-35 -57 -224 -51q-13 0 -27 -19l-30 -128q-2 -98 -45 -87q-67 0 -62 82l16 151 q-60 -12 -60 -6l-62 -6h-44q-53 0 -53 26z" />
<glyph unicode="&#xb2;" horiz-adv-x="469" d="M175 1253q-5 39 69 198q99 65 143 -36l65 68q51 78 124 202q30 63 42 112q7 97 -86 88q-127 -32 -106 -158q-40 -22 -56 -24q-15 -2 -23 32q-2 80 160 187q59 24 106 22q87 -18 86 -105q-10 -68 -66 -177q-35 -78 -222 -273q119 -113 273 -69q65 -21 -57 -41l-148 -10 q-127 39 -138 38l-25 -3q-72 -72 -89 -74q-34 -4 -52 23z" />
<glyph unicode="&#xb3;" horiz-adv-x="451" d="M126 1257q-7 30 55 106l58 18l21 -17l11 -36l-64 -43q-8 -45 67 -26l35 7q152 73 214 230q10 14 13 73l-6 35q13 30 -53 58l-57 -3q-67 -47 -86 -88l-60 -18l-10 36q12 23 84 76q132 135 121 181l-4 17q-1 7 -25 10l-28 -5q-26 -30 -53 -31l-10 10q69 80 143 91 q68 -5 80 -55l2 -10q-16 -48 -58 -84t-42 -59q105 -4 127 -62q23 -38 22 -94l-10 -53q-32 -98 -174 -225q-99 -66 -189 -92q-111 0 -123 48z" />
<glyph unicode="&#xb5;" horiz-adv-x="2596" />
<glyph unicode="&#xb6;" d="M135.5 1084q3.5 179 127.5 263t264.5 99t309 13t282.5 -2.5t144.5 -2t15.5 -38.5t-40.5 -50t-106.5 -14q-142 -829 -220 -1277q-6 -118 -51 -123t-35 65.5t44.5 299t181.5 1030.5l-143 -1l-77 -421l-87 -511q-72 -453 -96 -465t-53 -2t4 207.5t106 621.5 q-231 -22 -402.5 53.5t-168 254.5z" />
<glyph unicode="&#xb9;" horiz-adv-x="386" d="M-538.5 -959q-15.5 110 28 219t105 182.5t106.5 112t-17.5 -56.5t-85.5 -149t-37 -155.5t8 -152.5t83 -51q49 -1 126 81q92 158 125 360q37 229 57.5 404.5t65.5 383.5q6 30 -119 -52l-33 -26q-58 -44 -87 -55v34q256 316 289.5 379.5t96 146.5t92 92.5t46.5 -32.5 q-159 -270 -220 -633q148 89 237 228q16 0 40 20h19q-83 -189 -240 -305q-20 -14 -71 -37q-5 -39 -8 -78q-48 -472 -122 -689q-60 -174 -155 -246l-2 -4q-101 -71 -217 -52q-95 21 -110.5 131zM230 1032q-2 18 77 91l36 3q9 1 40 -33q4 -52 -88 -117l-36 -2q-24 -2 -26 22z " />
<glyph unicode="&#xbb;" horiz-adv-x="1160" d="M236 -9q3 32 186 161q196 154 225.5 174t-75.5 102q-247 241 -271.5 334t68.5 0.5t191.5 -185.5t174.5 -164t9.5 -122.5t-192.5 -126.5q-63 -44 -289 -188l-20 -7zM551 -9q3 32 186 161q196 154 225.5 174t-75.5 102q-257 221 -286.5 314t68.5 5.5t201.5 -175.5 t179.5 -159t9.5 -122.5t-192.5 -126.5q-63 -44 -289 -188l-20 -7z" />
<glyph unicode="&#xbc;" horiz-adv-x="1693" d="M165 1320l8 58l84 78l63 56q137 160 332 505q13 61 64.5 72t47.5 -93q-118 -161 -200 -390q-79 -191 -150 -403q-25 -127 18 -141l-13 -80q-72 -50 -130 7l5 72l54 182q86 187 114 298l40 96l-45 -38l-121 -142l-90 -128l-28 -15zM217.5 302.5q-58.5 0.5 100 256.5 t274.5 411q591 954 591 822q-26 -137 -102 -203q-27 -80 -215 -379l-367 -525q-223 -383 -281.5 -382.5zM595 371q9 35 88 161l76 -21q-3 -32 37 -9q199 13 254 122q93 234 146 348l59 130q151 106 30 -144l-97 -185l-31 -90q-70 -136 26 -84l72 33l88 50l-13 -53l-75 -59 l-57 -28q-65 -27 -89 -48q-64 -224 -77 -393q48 -140 -81 -129q-34 11 -36 41q-11 71 44 277q100 228 -33 175l-91 -30q-142 -56 -202 -88q-13 0 -38 24zM679 513q32 59 110 149q138 192 174 287l40 75q20 71 96 69q88 -15 -245 -448q-70 -80 -95 -124q-2 -11 -2 -20z" />
<glyph unicode="&#xbd;" horiz-adv-x="1693" d="M165 1320l8 58l84 78l63 56q137 160 332 505q13 61 64.5 72t47.5 -93q-118 -161 -200 -390q-79 -191 -150 -403q-25 -127 18 -141l-13 -80q-72 -50 -130 7l5 72l54 182q86 187 114 298l40 96l-45 -38l-121 -142l-90 -128l-28 -15zM217.5 302.5q-58.5 0.5 100 256.5 t274.5 411q591 954 591 822q-26 -137 -102 -203q-27 -80 -215 -379l-367 -525q-223 -383 -281.5 -382.5zM465 67q8 64 165 293q153 69 172 -110l110 85q95 107 237 281q62 90 97 164q45 153 -78 172q-176 -5 -198 -214q-59 -22 -81 -19q-19 2 -17 60q28 129 278 241 q85 18 145 -2q91 -42 57 -181q-39 -105 -153 -260q-76 -112 -376 -377q138 -186 353 -172q76 -57 -89 -45l-196 38q-175 70 -191 72l-33 5q-121 -90 -143 -88q-46 6 -59 57z" />
<glyph unicode="&#xbe;" horiz-adv-x="1693" d="M-9 1089l1 8q4 55 101 160l69 9l16 -37l-3 -68l-85 -47q-28 -74 60 -71l41 -3q191 66 320 309q16 20 43 121l8 63q25 46 -34 119l-62 18q-90 -54 -127 -116l-71 -8l4 67q22 33 120 96q195 179 202 262l2 32q1 11 -22 26l-32 3q-40 -41 -69 -32l-7 21q106 109 189 99 q70 -37 63 -127l-1 -17q-37 -77 -96 -121.5t-69 -85.5q110 -47 110 -155q10 -75 -14 -170l-32 -88q-73 -155 -275 -316q-131 -73 -238 -82q-119 44 -112 131zM217.5 302.5q-58.5 0.5 100 256.5t274.5 411q591 954 591 822q-26 -137 -102 -203q-27 -80 -214 -379l-368 -525 q-223 -383 -281.5 -382.5zM595 371q9 35 88 161l76 -21q-3 -32 37 -9q200 13 255 122q92 234 145 348l60 130q150 106 29 -144l-96 -185l-32 -90q-69 -136 26 -84l72 33l88 50l-12 -53l-76 -59l-57 -28q-65 -27 -89 -48q-64 -224 -77 -393q48 -140 -81 -129q-34 11 -36 41 q-11 71 44 277q100 228 -33 175l-91 -30q-142 -56 -202 -88q-13 0 -38 24zM679 513q32 59 110 149q138 192 174 287l40 75q20 71 96 69q88 -15 -245 -448q-70 -80 -95 -124q-2 -11 -2 -20z" />
<glyph unicode="&#xbf;" horiz-adv-x="776" d="M119.5 346q41.5 189 263 364t259.5 286.5t69.5 121t9 -139t-141.5 -208.5q-254 -231 -315.5 -371.5t11.5 -227t209 -42.5t207 258q-21 124 50 114.5t43 -176t-233 -273.5t-339 -1t-92.5 295zM678 1353v55q0 18 82 81h41v-27q0 -74 -69 -109h-54z" />
<glyph unicode="&#xc0;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM1015 1785q13 23 45 16q83 -52 168 -87l262 -135q-6 -44 -208 2q-248 92 -235 138q-24 24 -32 66z" />
<glyph unicode="&#xc1;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM868 1441l190 167q124 107 188 190q29 15 48 -3q3 -19 -14 -71q-8 -70 -215 -226q-179 -97 -197 -57z" />
<glyph unicode="&#xc2;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM767.5 1468q6.5 34 66.5 47q127 23 279 194l46 32l30 -6q114 -214 219 -284l-13 -16l-33 -11q-44 6 -99 50.5t-96.5 85.5t-238.5 -126q-68 -34 -95 -34.5t-49.5 17t-16 51.5z" />
<glyph unicode="&#xc3;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM858.5 1555q-3.5 29 21 64.5t73 62t97 26t105.5 -30.5t100 -32.5t77 23t58.5 61t33.5 9.5t-23.5 -74t-73.5 -75.5t-98 -22.5q-56 6 -89 26.5t-66.5 24t-67.5 -21t-61 -52.5 t-55 -22.5t-31.5 34.5z" />
<glyph unicode="&#xc4;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM898 1665q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM1210 1661q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xc5;" d="M-129 101q21 81 80 73t56.5 -86.5t109 -72.5t270.5 196q98 151 149 296l-80 -15q-135 -58 -79.5 2t147.5 86q74 12 128 164q89 190 140 295.5t117 204t160 148t132 46.5t38 -22l-87 -215l-86 -273l-55 -276q0 -15 39 -47q136 0 235 56v-19q-127 -112 -195 -130 t-91.5 -103.5t-10.5 -200.5q15 -61 51 -88q28 -3 58 0q99 51 246 262h9q0 -10 10 -10q-178 -341 -312 -369q-1 -1 -3 -2q-133 -45 -176 189q-11 79 10 277q-21 35 -206 29q-62 -34 -116.5 -141t-155 -230t-245 -167.5t-226.5 9t-61 134.5zM704 629q16 -37 67 -35l104 13 q23 3 49.5 131t66.5 266t36.5 172.5t-39 8t-73 -87t-81.5 -139t-64.5 -158.5t-65.5 -162v-9zM1018.5 1579.5q-18.5 57.5 20 116t86 73.5t76.5 13.5t61.5 -19t47 -58t-10 -104.5t-96.5 -97q-52 -25 -101 -10q-65 28 -83.5 85.5zM1077 1629q-15 -69 27.5 -93t85.5 6t53 80 t-1.5 79.5t-42 42t-68.5 -16.5t-54 -98z" />
<glyph unicode="&#xc6;" horiz-adv-x="1482" />
<glyph unicode="&#xc7;" horiz-adv-x="2540" />
<glyph unicode="&#xc8;" horiz-adv-x="1069" d="M-13 165q-61 374 650 565q-44 20 -75 79l-95 -17q-133 -22 -235 -3q-142 27 -171 168q-14 240 299 418q137 64 208.5 76.5t143.5 8.5t122 -40q32 22 145.5 24t164.5 -102l15 -51q23 -177 -322 -379l-171 -71q21 -47 71.5 -54.5t123 32.5t62 14.5t-35.5 -48t-99 -58 t-344 -138.5q-250 -131 -301 -248t14.5 -200.5t199.5 -91.5l110 8q249 55 334 236q49 162 -81 157q-149 -54 -272 -158q-41 1 -42 17l-1 20q257 248 397 230l20 1q92 7 112 -114v-10q3 -254 -330 -421q44 -29 -226 -59q-324 5 -391 209zM190 978q53 -105 247 -92 q117 40 116 136q37 162 127 275l77 79q-119 31 -282 -38q-304 -129 -285 -360zM504 27q225 71 310.5 99.5t216.5 192.5l15 -27q-163 -374 -542 -265zM598 1818q15 22 48 12q80 -56 166 -96l285 -138q11 -32 -12 -42.5t-72 -10.5q-45 19 -75 26l-6 2q-47 12 -102 21 q-222 118 -204 161q-22 25 -28 65zM645 1007q-9 -105 125 -44q126 50 201.5 115t93 118t-6.5 102t-101 50q-186 -22 -283 -253z" />
<glyph unicode="&#xc9;" horiz-adv-x="1069" d="M-13 165q-61 374 650 565q-44 20 -75 79l-95 -17q-133 -22 -235 -3q-142 27 -171 168q-14 240 299 418q137 64 208.5 76.5t143.5 8.5t122 -40q32 22 145.5 24t164.5 -102l15 -51q23 -177 -322 -379l-171 -71q21 -47 71.5 -54.5t123 32.5t62 14.5t-35.5 -48t-99 -58 t-344 -138.5q-250 -131 -301 -248t14.5 -200.5t199.5 -91.5l110 8q249 55 334 236q49 162 -81 157q-149 -54 -272 -158q-41 1 -42 17l-1 20q257 248 397 230l20 1q92 7 112 -114v-10q3 -254 -330 -421q44 -29 -226 -59q-324 5 -391 209zM190 978q53 -105 247 -92 q117 40 116 136q37 162 127 275l77 79q-119 31 -282 -38q-304 -129 -285 -360zM504 27q225 71 310.5 99.5t216.5 192.5l15 -27q-163 -374 -542 -265zM645 1007q-9 -105 125 -44q126 50 201.5 115t93 118t-6.5 102t-101 50q-186 -22 -283 -253zM785 1595l265 173 q81 51 153 117q31 13 49 -6q0 -41 -19 -69q23 -40 -182 -185q-54 -15 -99 -34l-5 -2q-30 -11 -72 -36q-48 -6 -72 1.5t-18 40.5z" />
<glyph unicode="&#xca;" horiz-adv-x="1069" d="M-13 165q-61 374 650 565q-44 20 -75 79l-95 -17q-133 -22 -235 -3q-142 27 -171 168q-14 240 299 418q137 64 208.5 76.5t143.5 8.5t122 -40q32 22 145.5 24t164.5 -102l15 -51q23 -177 -322 -379l-171 -71q21 -47 71.5 -54.5t123 32.5t62 14.5t-35.5 -48t-99 -58 t-344 -138.5q-250 -131 -301 -248t14.5 -200.5t199.5 -91.5l110 8q249 55 334 236q49 162 -81 157q-149 -54 -272 -158q-41 1 -42 17l-1 20q257 248 397 230l20 1q92 7 112 -114v-10q3 -254 -330 -421q44 -29 -226 -59q-324 5 -391 209zM190 978q53 -105 247 -92 q117 40 116 136q37 162 127 275l77 79q-119 31 -282 -38q-304 -129 -285 -360zM504 27q225 71 310.5 99.5t216.5 192.5l15 -27q-163 -374 -542 -265zM545 1532l26 42l66 30q153 82 310 224l52 32l33 -6l150 -214l93 -70l-15 -25l-64 3l-72 34l-65 64q-70 121 -283 -51 l-97 -54l-95 -38zM645 1007q-9 -105 125 -44q126 50 201.5 115t93 118t-6.5 102t-101 50q-186 -22 -283 -253z" />
<glyph unicode="&#xcb;" horiz-adv-x="1069" d="M-13 165q-61 374 650 565q-44 20 -75 79l-95 -17q-133 -22 -235 -3q-142 27 -171 168q-14 240 299 418q137 64 208.5 76.5t143.5 8.5t122 -40q32 22 145.5 24t164.5 -102l15 -51q23 -177 -322 -379l-171 -71q21 -47 71.5 -54.5t123 32.5t62 14.5t-35.5 -48t-99 -58 t-344 -138.5q-250 -131 -301 -248t14.5 -200.5t199.5 -91.5l110 8q249 55 334 236q49 162 -81 157q-149 -54 -272 -158q-41 1 -42 17l-1 20q257 248 397 230l20 1q92 7 112 -114v-10q3 -254 -330 -421q44 -29 -226 -59q-324 5 -391 209zM190 978q53 -105 247 -92 q117 40 116 136q37 162 127 275l77 79q-119 31 -282 -38q-304 -129 -285 -360zM504 27q225 71 310.5 99.5t216.5 192.5l15 -27q-163 -374 -542 -265zM538 1671q-9 44 50 63q99 -43 109 -105q-7 -32 -46 -39l-30 -5q-75 35 -83 86zM645 1007q-9 -105 125 -44 q126 50 201.5 115t93 118t-6.5 102t-101 50q-186 -22 -283 -253zM849 1686q-4 23 37 52q105 -14 125 -55q3 -22 -51 -70q-50 -8 -111 73z" />
<glyph unicode="&#xcc;" horiz-adv-x="1104" d="M-243 -60q60 114 349 203l157 3q104 75 132 418q29 212 61 368t101 318v39q-1 15 -30 29l-70 -1q-129 15 -147 16q-39 12 -112 -89q-56 -24 -76 5l13 28l45 31q88 101 87 153h40q1 -32 355 -55l154 9l101 21q150 43 191 78l22 12l19 -10q2 -55 -126 -126 q-198 -77 -273 -71l-49 -26q-101 -119 -169 -575q-28 -220 -47 -317t-18 -163l2 -59q1 -75 139 -105q202 -20 384 164q108 113 90 38q-147 -276 -563 -322q-233 65 -340.5 73.5t-182 -5t-228.5 -111.5l-11 20v9zM497 1860q12 25 45 21q90 -47 180 -76l280 -118 q-2 -46 -214 -15q-262 75 -252 123q-27 23 -39 65z" />
<glyph unicode="&#xcd;" horiz-adv-x="1104" d="M-243 -60q60 114 349 203l157 3q104 75 132 418q29 212 61 368t101 318v39q-1 15 -30 29l-70 -1q-129 15 -147 16q-39 12 -112 -89q-56 -24 -76 5l13 28l45 31q88 101 87 153h40q1 -32 355 -55l154 9l101 21q150 43 191 78l22 12l19 -10q2 -55 -126 -126 q-198 -77 -273 -71l-49 -26q-101 -119 -169 -575q-28 -220 -47 -317t-18 -163l2 -59q1 -75 139 -105q202 -20 384 164q108 113 90 38q-147 -276 -563 -322q-233 65 -340.5 73.5t-182 -5t-228.5 -111.5l-11 20v9zM648 1589l176 272q129 314 138 99l-36 -110 q-85 -160 -119 -196l-6 -2q-21 -25 -51 -65q-42 -27 -67.5 -30t-34.5 32z" />
<glyph unicode="&#xce;" horiz-adv-x="1104" d="M-243 -60q60 114 349 203l157 3q104 75 132 418q29 212 61 368t101 318v39q-1 15 -30 29l-70 -1q-129 15 -147 16q-39 12 -112 -89q-56 -24 -76 5l13 28l45 31q88 101 87 153h40q1 -32 355 -55l154 9l101 21q150 43 191 78l22 12l19 -10q2 -55 -126 -126 q-198 -77 -273 -71l-49 -26q-101 -119 -169 -575q-28 -220 -47 -317t-18 -163l2 -59q1 -75 139 -105q202 -20 384 164q108 113 90 38q-147 -276 -563 -322q-233 65 -340.5 73.5t-182 -5t-228.5 -111.5l-11 20v9zM389.5 1681.5q10.5 17.5 65.5 41.5q126 68 255 185l43 26 l27 -5l123 -176q57 -66 50.5 -76.5t-32.5 -9t-66 37.5l-53 53q-58 100 -233 -42l-80 -44q-78 -32 -94 -20t-5.5 29.5z" />
<glyph unicode="&#xcf;" horiz-adv-x="1104" d="M-243 -60q60 114 349 203l157 3q104 75 132 418q29 212 61 368t101 318v39q-1 15 -30 29l-70 -1q-129 15 -147 16q-39 12 -112 -89q-56 -24 -76 5l13 28l45 31q88 101 87 153h40q1 -32 355 -55l154 9l101 21q150 43 191 78l22 12l19 -10q2 -55 -126 -126 q-198 -77 -273 -71l-49 -26q-101 -119 -169 -575q-28 -220 -47 -317t-18 -163l2 -59q1 -75 139 -105q202 -20 384 164q108 113 90 38q-147 -276 -563 -322q-233 65 -340.5 73.5t-182 -5t-228.5 -111.5l-11 20v9zM424 1695q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36 l-30 -3q-73 39 -78 90zM736 1691q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xd1;" horiz-adv-x="956" d="M-198 146.5q16 81.5 68 81.5q35 -7 39 -56v-19q-13 -120 86 -132q76 1 148 73.5t116 263t102.5 462t237.5 494.5q122 113 155 114l9 1l1 -18q-102 -113 -132 -323q-22 -561 -71 -767l-21 -121l25 1q67 100 101.5 193.5t89 396.5t139 481.5t239.5 208.5t181.5 -62.5 t-89.5 -196.5q-43 -2 -10 49.5t4 98.5t-134 4.5t-180.5 -291t-113.5 -473.5t-96 -365t-154 -208q45 -2 130 34q113 56 242 213l15 -33q-160 -278 -514 -293l-55 1q-74 14 -77.5 52t34 41t59.5 15.5t55.5 100.5t52.5 288q19 129 34 282v102q14 181 -31.5 84.5t-82.5 -258 t-60.5 -285.5t-63.5 -212.5t-99 -133.5q-70 -77 -176 -88t-162.5 53.5t-40.5 146zM711.5 1642q4.5 20 29 50t63.5 56t80 31t100 -27t96 -34.5t66.5 23t50.5 61t29 9.5t-23 -75t-69.5 -77.5t-87.5 -22.5q-49 7 -74 26t-37 21t-34.5 4t-53 -16.5t-60.5 -36t-55 -15t-20.5 22.5 z" />
<glyph unicode="&#xd2;" horiz-adv-x="913" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5q-138 -250 -312 -330q-64 -68 -201 -20q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25 q125 11 215.5 126t147.5 272t77 352t0 316.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM213 26l177 52q29 -23 72.5 -37.5t150.5 30.5l105 64 l137 149l15 -33q-160 -278 -514 -293l-100 15zM513 1824q14 25 49 18q89 -56 181 -94l284 -146q-7 -48 -225 2q-268 99 -254 149q-26 26 -35 71z" />
<glyph unicode="&#xd3;" horiz-adv-x="913" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5q-138 -250 -312 -330q-64 -68 -201 -20q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25 q125 11 215.5 126t147.5 272t77 352t0 316.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM213 26l177 52q29 -23 72.5 -37.5t150.5 30.5l105 64 l137 149l15 -33q-160 -278 -514 -293l-100 15zM598 1573l175 183q114 117 171 205q27 18 48 2q5 -19 -8 -72q-2 -71 -195 -244q-170 -112 -191 -74z" />
<glyph unicode="&#xd4;" horiz-adv-x="913" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5q-138 -250 -312 -330q-64 -68 -201 -20q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25 q125 11 215.5 126t147.5 272t77 352t0 316.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM213 26l177 52q29 -23 72.5 -37.5t150.5 30.5l105 64 l137 149l15 -33q-160 -278 -514 -293l-100 15zM311 1522l26 42l66 30q153 82 310 224l52 32l33 -6l150 -214l93 -70l-15 -25l-64 3l-72 34l-65 64q-70 121 -283 -51l-97 -54l-95 -38z" />
<glyph unicode="&#xd5;" horiz-adv-x="913" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5q-138 -250 -312 -330q-64 -68 -201 -20q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25 q125 11 215.5 126t147.5 272t77 352t0 316.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM213 26l177 52q29 -23 72.5 -37.5t150.5 30.5l105 64 l137 149l15 -33q-160 -278 -514 -293l-100 15zM573.5 1655q-3.5 29 21 64.5t73 62t97 26t105.5 -30.5t100 -32.5t77 23t58.5 61t33.5 9.5t-23.5 -74t-73.5 -75.5t-98 -22.5q-56 6 -89 26.5t-66.5 24t-67.5 -21t-61 -52.5t-55 -22.5t-31.5 34.5z" />
<glyph unicode="&#xd6;" horiz-adv-x="913" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5q-138 -250 -312 -330q-64 -68 -201 -20q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25 q125 11 215.5 126t147.5 272t77 352t0 316.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM213 26l177 52q29 -23 72.5 -37.5t150.5 30.5l105 64 l137 149l15 -33q-160 -278 -514 -293l-100 15zM444 1725q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM756 1721q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xd8;" horiz-adv-x="913" d="M-96 -157q-59 3 187 348t370 497q713 1024 708 891q-32 -138 -112 -201q-31 -80 -309 -459l-394 -515q-391 -564 -450 -561zM68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t87.5 -167q27 -197 2.5 -387t-53.5 -289.5t-97 -246.5 q-138 -250 -270.5 -324t-242.5 -26q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 74.5 -174.5t127.5 -25q125 11 215.5 126t147.5 272t77 352t-8 320.5t-64.5 154t-82 32t-99 -20t-107 -72t-128.5 -188t-121 -361.5q-54 -279 -32 -415.5z" />
<glyph unicode="&#xd9;" horiz-adv-x="1106" d="M-43 1087q177 270 305.5 320t167 -25t-33 -399.5t-124.5 -593.5q-67 -303 21.5 -312.5t199.5 90.5t230 308q46 150 173 646q65 301 170 337h10q22 -57 -18 -137t-105.5 -360.5t-110 -477.5t-52.5 -263t14.5 -90.5t115.5 29.5q80 73 159 169h21v-29l-110 -156 q-107 -139 -186 -145q-87 -22 -137 93l34 235q-102 -138 -186 -226.5t-202 -134.5q-63 -22 -117 4q-90 37 -73 230q71 402 129 626.5t76.5 370t-70.5 121.5q-96 -22 -262 -260q-41 -12 -39 30zM588 1929q15 27 53 19q96 -61 196 -102l306 -158q-7 -51 -243 2 q-290 109 -274 162q-29 28 -38 77z" />
<glyph unicode="&#xda;" horiz-adv-x="1106" d="M-43 1087q177 270 305.5 320t167 -25t-33 -399.5t-124.5 -593.5q-67 -303 21.5 -312.5t199.5 90.5t230 308q46 150 173 646q65 301 170 337h10q22 -57 -18 -137t-105.5 -360.5t-110 -477.5t-52.5 -263t14.5 -90.5t115.5 29.5q80 73 159 169h21v-29l-110 -156 q-107 -139 -186 -145q-87 -22 -137 93l34 235q-102 -138 -186 -226.5t-202 -134.5q-63 -22 -117 4q-90 37 -73 230q71 402 129 626.5t76.5 370t-70.5 121.5q-96 -22 -262 -260q-41 -12 -39 30zM618 1627l184 193q120 123 180 215q28 19 50 3q6 -20 -8 -76q-2 -75 -205 -257 q-179 -117 -201 -78z" />
<glyph unicode="&#xdb;" horiz-adv-x="1106" d="M-43 1087q177 270 305.5 320t167 -25t-33 -399.5t-124.5 -593.5q-67 -303 21.5 -312.5t199.5 90.5t230 308q46 150 173 646q65 301 170 337h10q22 -57 -18 -137t-105.5 -360.5t-110 -477.5t-52.5 -263t14.5 -90.5t115.5 29.5q80 73 159 169h21v-29l-110 -156 q-107 -139 -186 -145q-87 -22 -137 93l34 235q-102 -138 -186 -226.5t-202 -134.5q-63 -22 -117 4q-90 37 -73 230q71 402 129 626.5t76.5 370t-70.5 121.5q-96 -22 -262 -260q-41 -12 -39 30zM452.5 1681.5q10.5 17.5 65.5 41.5q126 68 255 185l43 26l27 -5l123 -176 q57 -66 50.5 -76.5t-32.5 -9t-66 37.5l-53 53q-58 100 -233 -42l-80 -44q-78 -32 -94 -20t-5.5 29.5z" />
<glyph unicode="&#xdc;" horiz-adv-x="1106" d="M-43 1087q177 270 305.5 320t167 -25t-33 -399.5t-124.5 -593.5q-67 -303 21.5 -312.5t199.5 90.5t230 308q46 150 173 646q65 301 170 337h10q22 -57 -18 -137t-105.5 -360.5t-110 -477.5t-52.5 -263t14.5 -90.5t115.5 29.5q80 73 159 169h21v-29l-110 -156 q-107 -139 -186 -145q-87 -22 -137 93l34 235q-102 -138 -186 -226.5t-202 -134.5q-63 -22 -117 4q-90 37 -73 230q71 402 129 626.5t76.5 370t-70.5 121.5q-96 -22 -262 -260q-41 -12 -39 30zM528 1715q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90z M840 1711q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xdd;" horiz-adv-x="1028" d="M-90 1184.5q22 79.5 110.5 145.5t174.5 75l108 -16q113 -26 193 43q38 -13 39 -28q-83 -443 -186 -776q-23 -77 -15.5 -113.5t54 -33.5t211.5 178q32 30 92 108q42 33 125 224q-2 63 156 167q134 338 223 347l35 -35q-107 -228 -183 -529q-44 -272 -110.5 -455t-143 -293 t-213.5 -170q-86 -46 -277 -60q-91 17 -129.5 59.5t-23.5 102.5q33 124 147 43q49 -107 145 -108q127 -2 232.5 132t154 322t77.5 375l-1 18q-2 50 -30 57l-11 -1q-33 -1 -84 -157q-47 -60 -114 -145q-234 -272 -320 -291l-47 -11q-104 -3 -97 130q24 127 104 383 q17 83 38 168q25 123 48 223l-6 61l-144 16q-249 -44 -210 -244q-22 -53 -55.5 -48.5t-61 31t-5.5 106zM300 15l187 35q54 -6 94 -15t147 36q120 64 242 213l15 -33q-160 -278 -514 -293l-128 4zM719 1633l190 167q124 107 188 190q29 15 48 -3q3 -19 -14 -71 q-8 -70 -215 -226q-179 -97 -197 -57z" />
<glyph unicode="&#xdf;" horiz-adv-x="646" d="M-469.5 -975q95.5 161 170 357.5t316.5 1190.5l-65 -44q-124 -86 -81.5 -16t131.5 115q34 8 59 142t81.5 352.5t187.5 327t289 48.5t95.5 -275.5t-315 -413.5t-315.5 -407.5t-202 -714.5t-293 -664t-58.5 2zM77.5 267q33.5 70 94 71t59.5 -64t-39 -130t71.5 -54.5 t180 168t-6.5 304t-313 51.5l-8 41q278 124 390.5 -15t81 -299.5t-135.5 -241t-214 -76.5t-152 89.5t-8.5 155.5zM157 764q-14 -80 183 100.5t264 340t-36 205.5t-192 -43.5t-125 -205t-58 -216.5t-36 -181z" />
<glyph unicode="&#xe0;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM205 1060q27 57 95 11.5t188 -87.5l216 -63q10 -21 -12 -27t-64 -3t-79 1l2 6q-53 0 -118 22q-170 28 -213 98z" />
<glyph unicode="&#xe1;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM320 862l132 183q68 107 94 185t82 49l14 -43q10 -81 -107 -207q-38 -58 -79 -91l5 -3q-31 -22 -62 -50t-52 -37t-27 14z" />
<glyph unicode="&#xe2;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM110 794l11 53l52 18q111 20 243 168l40 28l26 -5l117 -186l73 -61l-11 -14l-29 -9l-47 14l-89 71q-48 101 -241 -77l-59 -29l-47 -1z" />
<glyph unicode="&#xe3;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM185.5 894q-3.5 29 21 64.5t73 62t97 26t105.5 -30.5t100 -32.5t77 23t58.5 61t33.5 9.5t-23.5 -74t-73.5 -75.5t-98 -22.5q-56 6 -89 26.5t-66.5 24 t-67.5 -21t-61 -52.5t-55 -22.5t-31.5 34.5z" />
<glyph unicode="&#xe4;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM144 956q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM456 952q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z " />
<glyph unicode="&#xe5;" horiz-adv-x="692" d="M-130 68q-6 77 16 154q24 67 72 153q96 154 250.5 249.5t228.5 65.5l72 4l22 -45q4 -48 -57 -186q-43 -137 -58 -182l-14 -93q-18 -103 29 -94l38 21q40 32 176 180q22 -1 28 -33q-169 -263 -268 -259q-121 -26 -114 131l34 174q-155 -196 -277 -273q-53 -39 -141 -31 l-28 29zM-12 225q-25 -132 73 -70q105 75 163 148q69 69 128 220q-48 75 -140 17q-53 -29 -122 -126q-77 -104 -102 -189zM233.5 901.5q-18.5 57.5 20 116t86 73.5t76.5 13.5t61.5 -19t47 -58t-10 -104.5t-96.5 -97q-52 -25 -101 -10q-65 28 -83.5 85.5zM292 951 q-15 -69 27.5 -93t85.5 6t53 80t-1.5 79.5t-42 42t-68.5 -16.5t-54 -98z" />
<glyph unicode="&#xe6;" horiz-adv-x="3112" />
<glyph unicode="&#xe7;" horiz-adv-x="467" d="M-83 208q18 129 97 261.5t168 188t155 35t70 -91t-46.5 -84.5t-55.5 56.5t-61 37.5q-187 -130 -206 -410q0 -131 103 -112q120 29 324 285l21 -18q-192 -308 -330 -363q-59 -30 -137 -11q-69 23 -91 92t-11 134zM2 -114.5q25 27.5 46.5 -6t60.5 -36t74 17.5t30 59.5 t-82 64.5t-46 38.5t67 -2t90.5 -46.5t45.5 -92t-95.5 -86t-151 18t-39.5 70.5z" />
<glyph unicode="&#xe8;" horiz-adv-x="468" d="M-79.5 126.5q-12.5 87.5 22 184t110 202t175.5 157t153.5 21.5t48.5 -98.5t-61 -129t-166 -114t-140.5 -85t-32 -67.5t8 -69t44.5 -52t100 5.5t134 105.5l78 88q33 21 44 1q-179 -257 -300 -293q-100 -27 -153 14.5t-65.5 129zM44 326q189 97 246.5 165t46 107.5 t-78.5 12.5t-126.5 -109.5t-87.5 -175.5zM174.5 1041.5q-8.5 33.5 13.5 50.5t85.5 -24t144 -74.5t255.5 -71.5q10 -21 -37.5 -26t-117 3t-163 34.5t-133 50.5t-48 57.5z" />
<glyph unicode="&#xe9;" horiz-adv-x="468" d="M-79.5 126.5q-12.5 87.5 22 184t110 202t175.5 157t153.5 21.5t48.5 -98.5t-61 -129t-166 -114t-140.5 -85t-32 -67.5t8 -69t44.5 -52t100 5.5t134 105.5l78 88q33 21 44 1q-179 -257 -300 -293q-100 -27 -153 14.5t-65.5 129zM44 326q189 97 246.5 165t46 107.5 t-78.5 12.5t-126.5 -109.5t-87.5 -175.5zM258 841l132 183q68 107 94 175.5t66.5 57.5t27.5 -78t-82.5 -156t-104 -118.5t-60 -49t-46.5 -28.5t-27 14z" />
<glyph unicode="&#xea;" horiz-adv-x="468" d="M-79.5 126.5q-12.5 87.5 22 184t110 202t175.5 157t153.5 21.5t48.5 -98.5t-61 -129t-166 -114t-140.5 -85t-32 -67.5t8 -69t44.5 -52t100 5.5t134 105.5l78 88q33 21 44 1q-179 -257 -300 -293q-100 -27 -153 14.5t-65.5 129zM22 817q7 23 59 41q115 48 172.5 102.5 t82.5 77.5t44.5 -7.5t62.5 -97.5t88.5 -95.5t36.5 -44.5t-43.5 -4.5t-79 47t-74 66.5t-120.5 -38.5t-120.5 -84t-53 -16t-43 14.5t-12.5 39zM44 326q189 97 246.5 165t46 107.5t-78.5 12.5t-126.5 -109.5t-87.5 -175.5z" />
<glyph unicode="&#xeb;" horiz-adv-x="468" d="M-79.5 126.5q-12.5 87.5 22 184t110 202t175.5 157t153.5 21.5t48.5 -98.5t-61 -129t-166 -114t-140.5 -85t-32 -67.5t8 -69t44.5 -52t100 5.5t134 105.5l78 88q33 21 44 1q-179 -257 -300 -293q-100 -27 -153 14.5t-65.5 129zM44 326q189 97 246.5 165t46 107.5 t-78.5 12.5t-126.5 -109.5t-87.5 -175.5zM104 953q-9 44 50 63q99 -44 109 -105q-7 -33 -47 -39l-30 -5q-75 35 -82 86zM415 966q-4 24 37 52q105 -14 125 -55q3 -23 -52 -70q-49 -8 -110 73z" />
<glyph unicode="&#xec;" horiz-adv-x="443" d="M-144 177q89 113 151 212l43 40q56 16 -9 -88l-76 -95q-96 -113 -109 -69zM-18 357h6q93 142 208 313l24 13q39 -1 36 -61q-81 -153 -120 -394l-15 -85l-2 -42q2 -23 31 -27q44 4 158 126l80 95l7 -28q-94 -192 -227 -277q-54 -23 -103 -9q-76 27 -55 139q4 60 55 263z M198 838q7 30 136 112l48 -30q5 -58 -147 -124q-22 9 -35 8zM322 1240q27 57 95 11.5t188 -87.5l216 -63q10 -21 -12 -27t-64 -3t-79 1l2 6q-53 0 -118 22q-170 28 -213 98z" />
<glyph unicode="&#xed;" horiz-adv-x="443" d="M-144 177q89 113 151 212l43 40q56 16 -9 -88l-76 -95q-96 -113 -109 -69zM-18 357h6q93 142 208 313l24 13q39 -1 36 -61q-81 -153 -120 -394l-15 -85l-2 -42q2 -23 31 -27q44 4 158 126l80 95l7 -28q-94 -192 -227 -277q-54 -23 -103 -9q-76 27 -55 139q4 60 55 263z M208 868q7 30 136 112l48 -30q5 -58 -147 -124q-22 9 -35 8zM351 978l134 211q37 54 68.5 106.5t52.5 42.5l14 -34q31 -51 -71 -177q-34 -55 -71 -89l4 -2q-27 -22 -56 -45.5t-48.5 -32.5t-26.5 20z" />
<glyph unicode="&#xee;" horiz-adv-x="443" d="M-144 177q89 113 151 212l43 40q56 16 -9 -88l-76 -95q-96 -113 -109 -69zM-18 357h6q93 142 208 313l24 13q39 -1 36 -61q-81 -153 -120 -394l-15 -85l-2 -42q2 -23 31 -27q44 4 158 126l80 95l7 -28q-94 -192 -227 -277q-54 -23 -103 -9q-76 27 -55 139q4 60 55 263z M37.5 802q7.5 12 45.5 29q87 47 177 128l30 18l19 -3l86 -123q39 -46 34.5 -53t-22.5 -6t-45 26l-38 37q-40 69 -162 -29l-55 -31q-55 -22 -66 -13.5t-3.5 20.5z" />
<glyph unicode="&#xef;" horiz-adv-x="443" d="M-144 177q89 113 151 212l43 40q56 16 -9 -88l-76 -95q-96 -113 -109 -69zM-18 357h6q93 142 208 313l24 13q39 -1 36 -61q-81 -153 -120 -394l-15 -85l-2 -42q2 -23 31 -27q44 4 158 126l80 95l7 -28q-94 -192 -227 -277q-54 -23 -103 -9q-76 27 -55 139q4 60 55 263z M30 951q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM342 947q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xf1;" horiz-adv-x="830" d="M-141 180q81 127 306 438q73 44 102 44q41 -28 44 -97l-4 -82l-8 -63l-18 -78l-107 -336q-24 -49 -82 -24l-11 46l66 285l23 83q34 121 -43 80q-196 -303 -268 -296zM162 192l144 212q204 295 303 284q78 -17 65 -121l-18 -61q-28 -107 -80 -300q-35 -117 9 -105l-10 -93 l-60 -19q-73 4 -78 80l6 75q43 152 67 250q67 187 -8 154l-52 -37q-98 -86 -245 -354zM202.5 858q4.5 20 29 50t63.5 56t80 31t100 -27t96 -34.5t66.5 23t50.5 61t29 9.5t-23 -75t-69.5 -77.5t-87.5 -22.5q-49 7 -74 26t-37 21t-34.5 4t-53 -16.5t-60.5 -36t-55 -15 t-20.5 22.5zM548 -2l32 104q101 56 192 199q16 0 40 20h19q-83 -189 -240 -305q-23 -11 -43 -18z" />
<glyph unicode="&#xf2;" horiz-adv-x="509" d="M-77 111.5q-32 113.5 31 287.5t208 261q25 40 75.5 62t106 9t81 -91t-17 -242.5t-166.5 -299.5q-89 -100 -173 -107q-113 7 -145 120.5zM13 5q149 59 244.5 112.5t231.5 213.5l14 -27q-188 -294 -411 -311q-41 -3 -79 12zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5 t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265zM205 1060q27 57 95 11.5t188 -87.5l216 -63q10 -21 -12 -27t-64 -3t-79 1l2 6q-53 0 -118 22q-170 28 -213 98z" />
<glyph unicode="&#xf3;" horiz-adv-x="509" d="M-77 111.5q-32 113.5 31 287.5t208 261q25 40 75.5 62t106 9t81 -91t-17 -242.5t-166.5 -299.5q-89 -100 -173 -107q-113 7 -145 120.5zM13 5q149 59 244.5 112.5t231.5 213.5l14 -27q-188 -294 -411 -311q-41 -3 -79 12zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5 t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265zM280 852l132 183q68 107 94 185t82 49l14 -43q10 -81 -107 -207q-38 -58 -79 -91l5 -3q-31 -22 -62 -50t-52 -37t-27 14z" />
<glyph unicode="&#xf4;" horiz-adv-x="516" d="M-77 111.5q-32 113.5 31 287.5t208 261q25 40 75.5 62t106 9t81 -91t-16.5 -242q-40 -153 -149 -280q95 54 230 213l14 -27q-188 -294 -411 -311h-12l-12 -2q-113 7 -145 120.5zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265 zM32 808l11 50l48 16q104 19 227 158l38 26l24 -5l110 -174l68 -57l-10 -13l-27 -9l-44 13l-84 67q-44 95 -225 -72l-55 -27l-44 -1z" />
<glyph unicode="&#xf5;" horiz-adv-x="509" d="M-77 111.5q-32 113.5 31 287.5t208 261q25 40 75.5 62t106 9t81 -91t-17 -242.5t-166.5 -299.5q-89 -100 -173 -107q-113 7 -145 120.5zM13 5q149 59 244.5 112.5t231.5 213.5l14 -27q-188 -294 -411 -311q-41 -3 -79 12zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5 t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265zM145.5 914q-3.5 29 21 64.5t73 62t97 26t105.5 -30.5t100 -32.5t77 23t58.5 61t33.5 9.5t-23.5 -74t-73.5 -75.5t-98 -22.5q-56 6 -89 26.5t-66.5 24t-67.5 -21t-61 -52.5t-55 -22.5t-31.5 34.5z" />
<glyph unicode="&#xf6;" horiz-adv-x="509" d="M-77 111.5q-32 113.5 31 287.5t208 261q25 40 75.5 62t106 9t81 -91t-17 -242.5t-166.5 -299.5q-89 -100 -173 -107q-113 7 -145 120.5zM13 5q149 59 244.5 112.5t231.5 213.5l14 -27q-188 -294 -411 -311q-41 -3 -79 12zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5 t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265zM93 951q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM405 947q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xf7;" horiz-adv-x="836" d="M133.5 384.5q72.5 45.5 167 49.5t131.5 3t71 -1q207 17 168.5 -10t-114.5 -54q-92 -3 -183.5 -6.5t-202 -15t-38 34zM288 181q2 49 92 90q23 -1 41 -46q-35 -96 -77 -106q-22 2 -56 62zM352 578l1 29q50 66 101 63q44 -2 50 -63q-63 -86 -125 -83q-30 14 -27 54z" />
<glyph unicode="&#xf8;" horiz-adv-x="509" d="M-209.5 -147q-52.5 9 104.5 204t210 261q511 643 503 548q-28 -98 -88 -141q-24 -56 -200 -251l-301 -357q-176 -273 -228.5 -264zM-82.5 115.5q-26.5 109.5 36.5 283.5t208 261q25 40 75.5 62t106 9t81 -91t-17 -242.5t-108.5 -256.5t-124.5 -125t-144.5 -21.5 t-112.5 121zM25 272q-26 -167 46.5 -186t146.5 85t91.5 225.5t-2 177.5t-72 58.5t-118.5 -95.5t-92 -265z" />
<glyph unicode="&#xf9;" horiz-adv-x="836" d="M-128 207q41 53 71 98t231 348q104 55 117 4q-64 -225 -89 -308.5t-44 -199.5l6 -38l17 -7q72 9 235 223l133 310l70 81q57 20 54 -38q-130 -371 -144 -452l-10 -61q-2 -69 40 -76q118 55 217 210q16 0 40 20h19q-83 -189 -240 -305q-174 -86 -190 106l20 116 q-70 -127 -181 -209q-85 -59 -135 -50.5t-66 67t48 256.5l19 92q20 81 -85 -63l-136 -172q-58 -5 -17 48zM332 1092q27 57 95 11.5t188 -87.5l216 -63q10 -21 -12 -27t-64 -3t-79 1l2 6q-53 0 -118 22q-170 28 -213 98z" />
<glyph unicode="&#xfa;" horiz-adv-x="836" d="M-128 207q41 53 71 98t231 348q104 55 117 4q-64 -225 -89 -308.5t-44 -199.5l6 -38l17 -7q72 9 235 223l133 310l70 81q57 20 54 -38q-130 -371 -144 -452l-10 -61q-2 -69 40 -76q118 55 217 210q16 0 40 20h19q-83 -189 -240 -305q-174 -86 -190 106l20 116 q-70 -127 -181 -209q-85 -59 -135 -50.5t-66 67t48 256.5l19 92q20 81 -85 -63l-136 -172q-58 -5 -17 48zM425 852l132 183q68 107 94 185t82 49l14 -43q10 -81 -107 -207q-38 -58 -79 -91l5 -3q-31 -22 -62 -50t-52 -37t-27 14z" />
<glyph unicode="&#xfb;" horiz-adv-x="838" d="M-110 190q95 181 294 463q104 55 117 4q-64 -225 -89 -308.5t-44 -199.5l6 -38l17 -7q72 9 235 223l133 310l70 81q57 20 54 -38q-130 -371 -144 -452l-10 -61q-2 -69 40 -76q118 55 217 210q16 0 40 20h19q-83 -189 -240 -305q-174 -86 -190 106l20 116 q-70 -127 -181 -209q-85 -59 -135 -50.5t-66 67t48 256.5l24 107q15 66 -60 -44l-121 -149zM225.5 903.5q8.5 13.5 51.5 33.5q98 52 192 147l34 20l21 -3l96 -138q44 -62 39.5 -70t-25 -7t-51.5 40l-42 41q-45 78 -175 -36l-62 -35q-61 -24 -74 -15t-4.5 22.5z" />
<glyph unicode="&#xfc;" horiz-adv-x="838" d="M-110 190q95 181 294 463q104 55 117 4q-64 -225 -89 -308.5t-44 -199.5l6 -38l17 -7q72 9 235 223l133 310l70 81q57 20 54 -38q-130 -371 -144 -452l-10 -61q-2 -69 40 -76q118 55 217 210q16 0 40 20h19q-83 -189 -240 -305q-174 -86 -190 106l20 116 q-70 -127 -181 -209q-85 -59 -135 -50.5t-66 67t48 256.5l24 107q15 66 -60 -44l-121 -149zM209 951q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM521 947q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#xfd;" horiz-adv-x="757" d="M-195 -921.5q-7 150.5 101.5 346t421.5 544.5q130 151 146 282l-3 25q-3 26 -32 7l-33 -38q-33 -51 -83 -112q-132 -195 -233 -174q-61 13 -58 117q62 250 93 344q-3 25 -70 -72.5t-210 -229.5l-31 22l82 104q98 118 329 453q73 6 52 -112q-66 -212 -112 -405 q-29 -124 18.5 -108t118.5 103h2q24 28 54 66v3q163 258 278 465q47 41 84 -14q-58 -185 -103 -334l-37 -186q69 77 169 191q16 2 38 24l9 2q-76 -153 -238 -330l-6 -32q-23 -58 -38 -147q-45 -312 -140.5 -547.5t-218 -339t-233 -86t-117.5 168zM-104 -790 q-26 -168 58.5 -193.5t198 119.5t187.5 405t100 433q-177 -166 -347.5 -381t-196.5 -383zM470 924l140 177q73 103 102.5 179.5t84.5 45.5l12 -44q6 -81 -117 -202q-40 -56 -83 -87l5 -2q-32 -21 -64.5 -47.5t-54 -34.5t-25.5 15z" />
<glyph unicode="&#xff;" horiz-adv-x="757" d="M-195 -921.5q-7 150.5 101.5 346t421.5 544.5q130 151 146 282l-3 25q-3 26 -32 7l-33 -38q-33 -51 -83 -112q-132 -195 -233 -174q-61 13 -58 117q62 250 93 344q-3 25 -70 -72.5t-210 -229.5l-31 22l82 104q98 118 329 453q73 6 52 -112q-66 -212 -112 -405 q-29 -124 18.5 -108t118.5 103h2q24 28 54 66v3q163 258 278 465q47 41 84 -14q-58 -185 -103 -334l-37 -186q69 77 169 191q16 2 38 24l9 2q-76 -153 -238 -330l-6 -32q-23 -58 -38 -147q-45 -312 -140.5 -547.5t-218 -339t-233 -86t-117.5 168zM-104 -790 q-26 -168 58.5 -193.5t198 119.5t187.5 405t100 433q-177 -166 -347.5 -381t-196.5 -383zM229 951q-6 45 54 60q96 -49 103 -111q-9 -32 -49 -36l-30 -3q-73 39 -78 90zM541 947q-3 24 40 50q104 -20 121 -62q2 -23 -55 -67q-50 -5 -106 79z" />
<glyph unicode="&#x152;" horiz-adv-x="1866" d="M68 487.5q22 279.5 168 607.5q207 334 354 334h19l27 -22l29 33q93 27 147.5 -12t85 -91t42 -188.5t2.5 -311t-51.5 -309t-115.5 -237.5q-94 -187 -246.5 -269t-289.5 -34q-67 22 -124 117q-69 103 -47 382.5zM178 306.5q22 -136.5 80.5 -186.5t154.5 -34t196.5 135 t157.5 308t65 356t-12 288.5t-64.5 154t-92 11t-113 -125.5t-92.5 -300t-13.5 -269.5t-6 -87t-42.5 76t-16 230.5t37.5 232t35 133.5t-21 18.5t-45.5 -101q-130 -202 -176 -424q-54 -279 -32 -415.5zM733 180q-26 359 685 550q-44 20 -75 79l-95 -17q-133 -22 -235 -3 q-142 27 -171 168q-14 240 299 418q137 64 208.5 76.5t143.5 8.5t122 -40q32 22 145.5 24t164.5 -102l15 -51q23 -177 -322 -379l-171 -71q21 -47 71.5 -54.5t123 32.5t62 14.5t-35.5 -48t-99 -58t-344 -138.5q-250 -131 -309 -248t7 -202t215 -90l110 8q249 55 334 236 q49 162 -81 157q-149 -54 -272 -158q-41 1 -42 17l-1 20q257 248 397 230l20 1q92 7 112 -114v-10q3 -254 -330 -421q44 -29 -226 -59q-364 1 -426 224zM971 978q53 -105 247 -92q117 40 116 136q37 162 127 275l77 79q-119 31 -282 -38q-304 -129 -285 -360zM1285 27 q225 71 310.5 99.5t216.5 192.5l15 -27q-163 -374 -542 -265zM1426 1007q-9 -105 125 -44q126 50 201.5 115t93 118t-6.5 102t-101 50q-186 -22 -283 -253z" />
<glyph unicode="&#x153;" horiz-adv-x="818" d="M-85 91.5q-32 113.5 28.5 287t171.5 258.5q32 32 101.5 57t125 12t82 -78.5t-16 -230t-149.5 -309.5q-99 -118 -205 -114t-138 117.5zM5 244q-25 -147 41.5 -181t156 89t107 244.5t-2 177.5t-72 58.5t-128.5 -119.5t-102 -269zM269.5 117.5q-12.5 78.5 22 184t110 211 t175.5 157t153.5 21.5t48.5 -98.5t-61 -129t-166 -114t-140.5 -85t-32 -67.5t8 -69t44.5 -52t100 5.5t134 105.5l78 88q33 21 44 1q-179 -257 -300 -293q-100 -27 -153 14.5t-65.5 120zM393 326q189 97 246.5 165t46 107.5t-78.5 12.5t-126.5 -109.5t-87.5 -175.5z" />
<glyph unicode="&#x2000;" horiz-adv-x="1146" />
<glyph unicode="&#x2001;" horiz-adv-x="2293" />
<glyph unicode="&#x2002;" horiz-adv-x="1146" />
<glyph unicode="&#x2003;" horiz-adv-x="2293" />
<glyph unicode="&#x2004;" horiz-adv-x="764" />
<glyph unicode="&#x2005;" horiz-adv-x="573" />
<glyph unicode="&#x2006;" horiz-adv-x="382" />
<glyph unicode="&#x2007;" horiz-adv-x="382" />
<glyph unicode="&#x2008;" horiz-adv-x="286" />
<glyph unicode="&#x2009;" horiz-adv-x="458" />
<glyph unicode="&#x200a;" horiz-adv-x="127" />
<glyph unicode="&#x2010;" horiz-adv-x="804" d="M138 385.5q68 42.5 156 46t123 2.5t66 -1q194 16 158 -9t-107 -50q-86 -3 -171.5 -6.5t-189 -14t-35.5 32z" />
<glyph unicode="&#x2011;" horiz-adv-x="804" d="M138 385.5q68 42.5 156 46t123 2.5t66 -1q194 16 158 -9t-107 -50q-86 -3 -171.5 -6.5t-189 -14t-35.5 32z" />
<glyph unicode="&#x2012;" horiz-adv-x="804" d="M138 385.5q68 42.5 156 46t123 2.5t66 -1q194 16 158 -9t-107 -50q-86 -3 -171.5 -6.5t-189 -14t-35.5 32z" />
<glyph unicode="&#x2013;" horiz-adv-x="1291" d="M163 385.5q130 42.5 298 46t235 2.5t126 -1q371 16 302 -9t-204 -50q-165 -3 -328.5 -6.5t-361 -14t-67.5 32z" />
<glyph unicode="&#x2014;" horiz-adv-x="2315" d="M214 385.5q260 42.5 596.5 46t470.5 2.5t252 -1q742 16 604.5 -9t-409.5 -50q-329 -3 -655.5 -6.5t-722.5 -14t-136 32z" />
<glyph unicode="&#x2018;" horiz-adv-x="609" d="M360 1062q-33 44 14 383l32 97q41 65 65.5 54.5t33.5 -15.5l-3 -8q-70 -245 -94 -490q-16 -23 -48 -21z" />
<glyph unicode="&#x2019;" horiz-adv-x="625" d="M308 1111q80 236 100 490v8q11 2 37.5 3t41.5 -74q-3 -102 -48 -251t-84 -188t-47 12z" />
<glyph unicode="&#x201c;" horiz-adv-x="741" d="M374.5 1324.5q5.5 155.5 34.5 253.5q39 67 64 57t34 -15l-3 -8q-62 -247 -62 -495q-25 -47 -49 2.5t-18.5 205zM531 1099q-33 44 14 383l32 97q41 65 65.5 54.5t33.5 -15.5l-3 -8q-70 -245 -94 -490q-16 -23 -48 -21z" />
<glyph unicode="&#x201d;" horiz-adv-x="758" d="M393 1149q56 240 69 494v9q10 1 36.5 3.5t44.5 -72.5l-1 -102q-65 -336 -110 -367q-31 8 -39 35zM529 1153q81 236 101 490v8q10 2 36.5 3t42.5 -74q-4 -102 -49 -251t-83.5 -188t-47.5 12z" />
<glyph unicode="&#x2026;" horiz-adv-x="0" />
<glyph unicode="&#x202f;" horiz-adv-x="458" />
<glyph unicode="&#x205f;" horiz-adv-x="573" />
<glyph unicode="&#x20ac;" horiz-adv-x="1083" d="M-7 758v20q0 46 234 66q90 32 99 68t52.5 149.5t138.5 230.5q127 140 272 157q104 -14 105 -99q-23 -87 -120 -76q-22 121 -119 38.5t-169 -240.5l-46 -105q-75 -148 219 -100q45 0 45 -33q-8 -45 -58 -45l-75 -10q-191 8 -217 -99q-11 0 -13 -32q-41 -84 197 -48 q36 -19 36 -25v-20q0 -17 -254 -63l-26 -32q-48 -279 61.5 -337t240.5 4t204.5 137.5t114.5 139t55.5 36.5t-93.5 -166t-236 -214t-257 -70q-119 4 -182 114.5t-22 337.5q0 35 -42 52h-72l-68 7q-141 80 48.5 76t202.5 128v19q0 10 -20 20h-13q-223 -18 -223 14z" />
<glyph unicode="&#x2122;" horiz-adv-x="875" d="M204.5 1603.5q-4.5 6.5 5 29t357.5 32.5q12 0 30 -29t44.5 -84t35.5 -55t54.5 85t60.5 95.5t29 8t25 -24.5q-4 -42 -7 -156.5t-13.5 -154.5t-32.5 -43t-9.5 131t10.5 144.5t-8.5 10.5t-50.5 -67t-60.5 -67.5t-51.5 62.5t-41.5 63t-6.5 -85q0 -74 -1 -169q-8 -20 -28 -21 t-20.5 71.5t7.5 212.5q-3 38 -18 38q-116 -3 -115 -34q-12 -122 -10.5 -208t-27 -87t-24 42.5t6.5 144t0 115.5t-39.5 13t-67 -11t-34 -2.5z" />
<glyph unicode="&#xe000;" horiz-adv-x="840" d="M0 0v840h840v-840h-840z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 98 KiB

BIN
data/fonts/simplesnails.ttf Executable file

Binary file not shown.

BIN
data/fonts/simplesnails.woff Executable file

Binary file not shown.

1
data/images/.htaccess Executable file
View file

@ -0,0 +1 @@
Allow from all

BIN
data/images/1.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
data/images/2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
data/images/3.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
data/images/4.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

0
data/images/index.html Executable file
View file

0
data/index.html Normal file → Executable file
View file

25
data/pages/1#Accueil.xml Executable file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>1</id>
<nom>Accueil</nom>
<contenu>
<![CDATA[
<b>AEOS</b> est un CMS pensé pour être le plus <span class="Green">rapide</span> et le plus <span class="Green">simple</span> possible. <br /><br />
La sauvegarde et la lecture de donnée est très simple. Fonctionnant <span class="Blue">sans base de donnée SQL</span> - grâce au XML - <b>AEOS</b> se voit très pratique pour une installation sur des hébergements web basique.<br /><br />
Son côté <span class="Orange">modulable</span> vous permet d'installer un thème, un module ou un composant facilement et rapidement. <br /><br />
Pensé pour être le plus rapide possible - et respectant les conventions du <span class="Red">W3C</span> - nous n'avons en aucun cas négligé la sécurité. Toutes vos informations seront protégées grâce aux fonctionnalités <b>Calcium</b>.<br /><br />
Le tout est sous licence GNU/GPL V3 et est donc gratuit !<br /><br />
<span class="Sign">L'équipe NNS Production.</span>
]]>
</contenu>
<type>owSimple</type>
<ordre>1</ordre>
<etat>1</etat>
</page>

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>1</id>
<nom>Accueil</nom>
<contenu><![CDATA[
<p><b>Lorem ipsum</b> dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.</p>
<p>Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.</p>
<p>Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet.</p>
]]></contenu>
<type>owSimple</type>
<ordre>1</ordre>
<etat>1</etat>
</page>

9
data/pages/2#Blog.xml Executable file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>2</id>
<nom>Blog</nom>
<contenu><![CDATA[ Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première page.Voici votre première<br> ]]></contenu>
<type>owSimple</type>
<ordre>2</ordre>
<etat>1</etat>
</page>

9
data/pages/3#Forum.xml Executable file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>3</id>
<nom>Forum</nom>
<contenu><![CDATA[ Voici votre première page.]]></contenu>
<type>owSimple</type>
<ordre>3</ordre>
<etat>1</etat>
</page>

9
data/pages/4#Ressources.xml Executable file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>4</id>
<nom>Ressources</nom>
<contenu><![CDATA[ Voici votre première page.]]></contenu>
<type>owSimple</type>
<ordre>4</ordre>
<etat>1</etat>
</page>

9
data/pages/5#Documentation.xml Executable file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<page>
<id>5</id>
<nom>Documentation</nom>
<contenu><![CDATA[ Voici votre première page.]]></contenu>
<type>owSimple</type>
<ordre>5</ordre>
<etat>1</etat>
</page>

36
index.php Normal file → Executable file
View file

@ -1,20 +1,25 @@
<?php <?php
ob_start();
// Inclusion des librairies // Inclusion des librairies
require_once ('lib/aeos.lib.php'); require ('lib/aeos.lib.php');
require ('lib/config.lib.php');
require ('lib/var.lib.php');
//Check Install //Check Install
checkInstall(); checkInstall();
require_once ('lib/config.lib.php');
require_once ('lib/var.lib.php');
// URL Rewriting // URL Rewriting
if(isset($_GET['redirect'])) if(isset($_GET['redirect']))
{ {
if (preg_match("#".AEOS_REWKEY."([0-9-]+)-([^0-9](?:.+))#isU", $_SERVER['REDIRECT_URL'], $redirect)) if (preg_match("#".AEOS_REW."([0-9-]+)-([^0-9](?:.+))#isU", $_SERVER['REDIRECT_URL'], $redirect))
{ {
header("Status: 200 OK", false, 200); header("Status: 200 OK", false, 200);
$redirect=abs($redirect[1]); $redirect=abs($redirect[1]);
require ('lib/config.lib.php');
require ('lib/var.lib.php');
} }
else header('Location: '.AEOS_REWKEY.HOME_PAGE.'-E404.html'); else header('Location: '.AEOS_REW.HOME_PAGE.'-E404.html');
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -24,25 +29,12 @@ if(isset($_GET['redirect']))
<title><?php echo AEOS_NAME." | ".AEOS_TITLE; ?></title> <title><?php echo AEOS_NAME." | ".AEOS_TITLE; ?></title>
<meta name="description" content="<?php echo AEOS_DESC; ?>" /> <meta name="description" content="<?php echo AEOS_DESC; ?>" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo AEOS_THEME; ?>/styles.css" /> <link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo AEOS_THEME; ?>/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/system/css/fontello.css" />
<link rel="icon" type="image/png" href="themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" /> <link rel="icon" type="image/png" href="themes/<?php echo AEOS_THEME; ?>/images/favicon_aeos.ico" />
<?php echo checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 0)["Data"]; ?>
</head>
<?php <?php
// Maintenance ou non // Maintenance ou non
if (AEOS_MAINTENANCE==1){require_once('themes/'.AEOS_THEME.'/maintenance.php');} if (AEOS_MAINTENANCE=="on"){require_once('themes/'.AEOS_THEME.'/maintenance.php');}
else else {require_once('themes/'.AEOS_THEME.'/base.php');}
{ ob_end_flush();
$returned = checkFiles(AEOS_MODULE.'/'.AEOS_THEME, 1);
if($returned['OB'])
{
ob_start();
include_once('themes/'.AEOS_THEME.'/base.php');
$eyecatcher = ob_get_clean();
echo insertPlugins($eyecatcher, $returned);
}
else require_once('themes/'.AEOS_THEME.'/base.php');
}
?> ?>

23
install/base.xml Executable file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<nom_site>AEOS | Version Stable </nom_site>
<description_site>Version Stable d'AEOS.</description_site>
<lang>fr</lang>
<login_admin>admin</login_admin>
<email_admin>admin@admin.fr</email_admin>
<mdp_admin>21232f297a57a5a743894a0e4a801fc3</mdp_admin>
<accueil>1</accueil>
<theme>defaut</theme>
<contentd>0</contentd>
<version>0.4 [CALVARIUM]</version>
<maintenance>off</maintenance>
<debug>FALSE</debug>
<message>Site en maintenance</message>
<footer>© 2004 - 2013 NNS Production</footer>
<update>10-07-2013</update>
<urlrewriting>1</urlrewriting>
<urlrewriting_key/>
</configuration>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<nom_site>test</nom_site>
<description_site>test</description_site>
<lang>fr_FR</lang>
<lang_available>
<langs>
<code>fr_FR</code>
<name>Français</name>
</langs>
<langs>
<code>en_US</code>
<name>English</name>
</langs>
</lang_available>
<users>
<admin>
<id>1</id>
<firstname>???</firstname>
<lastname>???</lastname>
<email>test@test.test</email>
<language></language>
<password>$2y$10$w9qL6OSzztNBUBKLm1jUhezMNb6y3J1M/d.ksKs0T4XL1HzCMfFN2</password>
<avatar></avatar>
<role>Admin</role>
</admin>
</users>
<accueil>1</accueil>
<theme>defaut</theme>
<contentd>0</contentd>
<version>0.5</version>
<codename>CALVARIUM</codename>
<branch>stable</branch>
<update>06072013</update>
<maintenanceMode>FALSE</maintenanceMode>
<maintenanceMessage>Le site est actuellement en maintenance ! :)</maintenanceMessage>
<debugMode>FALSE</debugMode>
<footer>© 2004 - 2020 NNS Production</footer>
<urlrewriting>FALSE</urlrewriting>
<urlrewriting_key>page-</urlrewriting_key>
</configuration>

81
install/index.php Normal file → Executable file
View file

@ -2,9 +2,6 @@
ob_start(); ob_start();
if (file_exists("../data/config.xml")){header('Location: ../index.php');} if (file_exists("../data/config.xml")){header('Location: ../index.php');}
require_once ('../lib/aeos.lib.php'); require_once ('../lib/aeos.lib.php');
$config = lecture_xml("config.xml");
if (!isset($_POST['lang'])) $langs="fr_FR"; else $langs=$_POST['lang'];
require_once('lang/'.$langs.'/index.php');
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -12,18 +9,24 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>AEOS | Installation</title> <title>AEOS | Installation</title>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" /> <link rel="stylesheet" type="text/css" media="screen" href="../themes/system/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="install.css" />
<link rel="icon" type="image/png" href="../themes/defaut/images/favicon_aeos.ico" /> <link rel="icon" type="image/png" href="../themes/defaut/images/favicon_aeos.ico" />
</head> </head>
<body> <body>
<div id="Layout"></div> <div id="Layout"></div>
<div id="Administration"> <div id="Administration">
<h1><img src="../themes/system/images/aeos_logo_A_blanc.png" alt="Logo AEOS" /></h1> <h1><img src="../themes/system/images/logo_black.png" alt="Logo AEOS" /></h1>
<h6>
<img src="../themes/system/images/icones/logout.png" alt="Logout" class="icon" />
Installation - AEOS
</h6>
<!--
<div id="Menu"> <div id="Menu">
<ul> <ul>
<?php <?php
if (!isset($_POST['lang'])) $langs="fr"; else $langs=$_POST['lang'];
require_once('lang/'.$langs.'/index.php');
$menuArray=array($lang['L_Inst_Etape'], $lang['L_Inst_Etape1'], $lang['L_Inst_Etape2'], $lang['L_Inst_Etape3'], $lang['L_Inst_Etape4']); $menuArray=array($lang['L_Inst_Etape'], $lang['L_Inst_Etape1'], $lang['L_Inst_Etape2'], $lang['L_Inst_Etape3'], $lang['L_Inst_Etape4']);
$l=0; $l=0;
foreach ($menuArray as $menu) foreach ($menuArray as $menu)
@ -36,39 +39,38 @@
?> ?>
</ul> </ul>
</div> </div>
-->
<div class="form">
<h6><?php echo $lang['L_Install']; ?> - AEOS</h6>
<?php <?php
!isset($_GET['etape'])?$etape=0:$etape=$_GET['etape']; !isset($_GET['etape'])?$etape=0:$etape=$_GET['etape'];
$PHPVersion = phpversion(); $PHPVersion = phpversion();
$PHPv = explode (".", $PHPVersion); $PHPv = explode (".", $PHPVersion);
$install_conf = lecture_xml("base.xml");
switch ($etape) switch ($etape)
{ {
// Prérequis ------------------------------------------------------------------------------------------------------------------------- // Prérequis -------------------------------------------------------------------------------------------------------------------------
case 0: case 0:
?> ?>
<form class="language" method="POST" action="index.php?etape=0"> <form method="POST" action="index.php?etape=0">
<p> <p>
<div class="select_basic">
<select name="lang" class="input_select" onchange="this.form.submit();"> <select name="lang" class="input_select" onchange="this.form.submit();">
<option value="basic">-</option>
<?php <?php
$list = listing_dossier("lang/"); $list = listing_dossier("lang/");
foreach ($list as $pages) foreach ($list as $pages)
{ {
$lg = lecture_xml('lang/'.$pages.'/lang.xml'); ?> $lg = lecture_xml('lang/'.$pages.'/lang.xml'); ?>
<option value="<?php echo $pages; ?>" <?php if($pages==$langs){echo "selected";}?>> <option value="<?php echo $pages; ?>" <?php if($pages==@$_POST['lang']){echo "selected";}?>>
<?php echo $lg['lang']['title']['#text'];?> <?php echo $lg['lang']['title']['#text'];?>
</option><?php </option><?php
} ?> } ?>
</select> </select>
</div>
</p> </p>
</form> </form>
<form method="POST" action="index.php?etape=1"> <form method="POST" action="index.php?etape=1">
<h4><?php echo $lang['L_Inst_bienvenue']."<br />".$lang['L_Inst_instruction']; ?></h4> <h3>AEOS v<?php echo $install_conf['configuration']['version']['#text'];?></h3>
<h4><?php echo $lang['L_Inst_bienvenue']; ?></h4>
<h5><?php echo $lang['L_Inst_instruction']; ?></h5>
<p><?php echo $lang['L_Inst_prerequis']; ?></p> <p><?php echo $lang['L_Inst_prerequis']; ?></p>
<table class="Full"> <table class="Full">
<tr> <tr>
@ -109,9 +111,9 @@
} }
else else
{ ?> { ?>
<button><?php echo $lang['L_Mot_suivant']; ?></button><?php <input type="submit" value="<?php echo $lang['L_Mot_suivant']; ?>" class="input_button" /><?php
} ?> } ?>
<input type="hidden" name="lang" value="<?php echo $langs; ?>" /> <input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
</p> </p>
</form> </form>
<?php <?php
@ -128,7 +130,8 @@
<p><input class="input_text" name="description" /></p> <p><input class="input_text" name="description" /></p>
<p> <p>
<button><?php echo $lang['L_Mot_suivant']; ?></button> <input type="button" value="<?php echo $lang['L_Mot_precedent']; ?>" onclick="javascript:history.back();" class="input_button" />
<input type="submit" value="<?php echo $lang['L_Mot_suivant']; ?>" class="input_button" />
<input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" /> <input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
</p> </p>
</form> </form>
@ -140,10 +143,8 @@
?> ?>
<form method="POST" action="index.php?etape=3"> <form method="POST" action="index.php?etape=3">
<h3><?php echo $lang['L_Inst_confadmin']; ?></h3> <h3><?php echo $lang['L_Inst_confadmin']; ?></h3>
<!--
<p><?php echo $lang['L_Mot_identifiant']; ?></p> <p><?php echo $lang['L_Mot_identifiant']; ?></p>
<p><input type="text" class="input_text" name="login_admin" /></p> <p><input type="text" class="input_text" name="login_admin" /></p>
-->
<p><?php echo $lang['L_Mot_motdepasse']; ?></p> <p><?php echo $lang['L_Mot_motdepasse']; ?></p>
<p><input type="password" class="input_text" name="mdp_admin" /></p> <p><input type="password" class="input_text" name="mdp_admin" /></p>
<p><?php echo $lang['L_Mot_confmotdepasse']; ?></p> <p><?php echo $lang['L_Mot_confmotdepasse']; ?></p>
@ -154,19 +155,16 @@
<?php <?php
if(!isset($_GET['erreur'])) if(!isset($_GET['erreur']))
{ {
ecriture_xml('base.xml', 'nom_site', $_POST['titre']);
ecriture_xml('base.xml', 'description_site', $_POST['description']);
ecriture_xml('config.xml', array('configuration/nom_site'=>$_POST['titre'], ecriture_xml('base.xml', 'lang', $_POST['lang']);
'configuration/description_site'=>$_POST['description'],
'configuration/lang'=>$langs));
} }
if (@$_GET['erreur']==1) echo "<span class='erreur'>".$lang['L_Inst_Msg_motdepasse']."</span><br />"; if (@$_GET['erreur']==1) echo "<span class='erreur'>".$lang['L_Inst_Msg_motdepasse']."</span><br />";
elseif (@$_GET['erreur']==2) echo "<span class='erreur'>".$lang['L_Inst_Msg_mauvaisemail']."</span><br />"; elseif (@$_GET['erreur']==2) echo "<span class='erreur'>".$lang['L_Inst_Msg_mauvaisemail']."</span><br />";
?> ?>
<p><button><?php echo $lang['L_Mot_suivant']; ?></button></p> <p><input type="button" value="<?php echo $lang['L_Mot_precedent']; ?>" onclick="javascript:history.back();" class="input_button" /></p>
<input type="hidden" name="lang" value="<?php echo $langs; ?>" /> <p><input type="submit" value="<?php echo $lang['L_Mot_suivant']; ?>" class="input_button" /></p>
<input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
</form> </form>
<?php <?php
break; break;
@ -190,10 +188,9 @@
{ {
if(!isset($_GET['erreur'])) if(!isset($_GET['erreur']))
{ {
ecriture_xml('config.xml', array( ecriture_xml('base.xml', 'login_admin', $_POST['login_admin']);
'configuration/users/admin/password'=>password_hash($_POST['mdp_admin'],PASSWORD_DEFAULT), ecriture_xml('base.xml', 'mdp_admin', md5($_POST['mdp_admin']));
'configuration/users/admin/email'=>$_POST['email_admin'] ecriture_xml('base.xml', 'email_admin', $_POST['email_admin']);
));
} }
} }
$licence = @file_get_contents('http://www.gnu.org/licenses/gpl.txt'); ?> $licence = @file_get_contents('http://www.gnu.org/licenses/gpl.txt'); ?>
@ -202,9 +199,9 @@
<input type="checkbox" name="conditions" /> <input type="checkbox" name="conditions" />
<?php echo $lang['L_Inst_accepte']; ?> <?php echo $lang['L_Inst_accepte']; ?>
</p> </p>
<p><input type="button" value="<?php echo $lang['L_Mot_precedent']; ?>" onclick="javascript:history.back();" class="input_button" /></p>
<p><button><?php echo $lang['L_Mot_suivant']; ?></button></p> <p><input type="submit" value="<?php echo $lang['L_Mot_suivant']; ?>" class="input_button" /></p>
<input type="hidden" name="lang" value="<?php echo $langs; ?>" /> <p><input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" /></p>
</form> </form>
<?php <?php
@ -218,7 +215,7 @@
} ?> } ?>
<form method="POST" action="../index.php"> <form method="POST" action="../index.php">
<h3><?php echo $lang['L_Mot_finalisation']; ?></h3> <h3><?php echo $lang['L_Mot_finalisation']; ?></h3>
<p>AEOS v<?php echo $config['configuration']['version']['#text'];?></p> <p>AEOS v<?php echo $install_conf['configuration']['version']['#text'];?></p>
<h4><?php echo $lang['L_Inst_succes']; ?></h4> <h4><?php echo $lang['L_Inst_succes']; ?></h4>
<p><?php echo $lang['L_Inst_effacerinstall']; ?></p> <p><?php echo $lang['L_Inst_effacerinstall']; ?></p>
<h5><?php echo $lang['L_Inst_admineffacer']; ?></h5> <h5><?php echo $lang['L_Inst_admineffacer']; ?></h5>
@ -229,20 +226,10 @@
<input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" /> <input type="hidden" name="lang" value="<?php if(!@isset($_POST['lang'])){echo "fr";}else{echo $_POST['lang'];} ?>" />
</p> </p>
</form> </form>
<?php copy("config.xml", "../data/config.xml"); ?> <?php copy("base.xml", "../data/config.xml"); ?>
<?php <?php
break; break;
} ?> } ?>
</div>
<div id="Footer">
<img src="../themes/system/images/logo_a4_300.png" width="250" alt="Logo" />
<p>
AEOS v<?php echo $config['configuration']['version']['#text']; ?>
</p>
<hr />
<h5><?php echo $config['configuration']['branch']['#text']; ?>/version_<?php echo $config['configuration']['update']['#text']; ?>.zip</h5>
<p class="copyright"><?php echo $lang["login_msg_Layus"]; ?></p>
</div>
</div> </div>
</div> </div>
</body> </body>

66
install/install.css Executable file
View file

@ -0,0 +1,66 @@
/* Install.css */
#Administration
{
width:350px;
position:absolute;
top:30%;
left:50%;
margin:-175px 0 0 -175px;
}
#Administration a {color:#FFFFFF;}
#Administration h6 {margin:3px 0 20px 0;}
#Administration p {margin:0 0 5px 0; padding:0 8px 0 8px;}
#Administration h1, #Administration h6, #Administration p, #Administration h3, #Administration h4, #Administration h5 {font-size:12px; text-align:center; color:#EAEAEC; font-weight:bold; text-shadow:1px 1px 0 #606062;}
#Administration h3 {font-size:15px; margin:0 0 10px 0;}
#Administration h4 {font-size:12px; margin:0 0 10px 0;}
#Administration h5 {font-size:12px; font-weight:200; margin:0 0 20px 0;}
#Administration input {min-width:200px;}
#Administration input[type="checkbox"] {min-width:5px; margin:0 5px 0 0;}
#Administration .input_button, #Administration .input_text, #Administration .input_select {width:235px; height:35px; min-width:0%;}
#Administration .input_button {margin:15px 0 0 0;}
#Administration textarea.input_text {height:180px;}
table.Full {width:240px; margin:0 0 0 57px;}
#Layout
{
width:350px;
height:100%;
position:absolute;
top:0;
left:50%;
margin:0 0 0 -175px;
background:url(../themes/system/images/sidemenu.png);
border-right:1px solid #4E4F50;
border-left:1px solid #4E4F50;
}
#Menu
{
width:150px;
position:absolute;
margin:0 0 0 -150px;
top:25%;
}
#Menu ul li
{
list-style-type:none;
height:35px;
border-top:5px solid #FFFFFF;
border-bottom:5px solid #FFFFFF;
border-left:5px solid #FFFFFF;
padding:17px 10px 0 0;
margin:15px 0 15px 0;
box-shadow: -3px 3px 5px #888888;
text-align:right;
}
#Menu ul li.Actif
{
color:#FFFFFF;
background:url(../themes/system/images/sidemenu.png);
margin:0 -1px 0 0;
font-weight:bold;
font-size:16px;
text-align:left;
padding:17px 0 0 10px;
}

View file

View file

53
install/lang/fr/index.php Executable file
View file

@ -0,0 +1,53 @@
<?php
// Fichier langue, en français.
$lang = array(
'L_lang' => "Français",
// Installation
'L_Inst_Etape' => "Prérequis",
'L_Inst_Etape1' => "Configuration",
'L_Inst_Etape2' => "Administration",
'L_Inst_Etape3' => "Licence",
'L_Inst_Etape4' => "Terminée !",
'L_Inst_intro' => "Préface d'installation",
'L_Inst_bienvenue' => "Bienvenue sur l'assistant d'installation d'AEOS !",
'L_Inst_instruction' => "Veuillez suivre les étapes et valider avec le bouton 'suivant'.",
'L_Inst_prerequis' => "Prérequis: ", //espace
'L_Inst_versionphp' => "Version de PHP: ", //espace
'L_Inst_repdata' => "Répertoire 'data' accessible en écriture: ", //espace
'L_Inst_confgen' => "Configuration générale",
'L_Inst_sitenom' => "Titre",
'L_Inst_descnom' => "Description",
'L_Inst_confadmin' => "Configuration du compte Administrateur",
'L_Inst_licence' => "Licence publique générale GNU",
'L_Inst_accepte' => "Oui j'ai lu et j'accepte les termes et conditions d'utilisation",
'L_Inst_succes' => "installé avec succés !",
'L_Inst_effacerinstall' => "N'oubliez pas d'effacer le dossier INSTALL de votre serveur !",
'L_Inst_admineffacer' => "(Possibilité de l'effacer via l'administration du site)",
'L_Inst_accessite' => "Accés au site",
// Installation -> Message d'erreur
'L_Inst_Msg_versionphp' => "Vous ne disposez pas de la version 5 de PHP.",
'L_Inst_Msg_erreur' => "ERREUR",
'L_Inst_Msg_repdata' => "Le dossier DATA n'a pas les droits appropriés. Il est en ", //espace
'L_Inst_Msg_motdepasse' => "Les deux mots de passe ne sont pas identiques !",
'L_Inst_Msg_mauvaisemail' => "Votre adresse email n'est pas conforme.",
'L_Inst_Msg_condition' => "Veuillez accepter les conditions !",
// Mot
'L_Mot_etape' => "Etape",
'L_Mot_preface' => "Préface",
'L_Mot_finalisation' => "Finalisation",
'L_Mot_remerciements' => "Remerciements",
'L_Mot_identifiant' => "Identifiant",
'L_Mot_motdepasse' => "Mot de passe",
'L_Mot_confmotdepasse' => "Confirmer mot de passe",
'L_Mot_mail' => "Mail",
'L_Mot_suivant' => "Suivant",
'L_Mot_precedent' => "Précédent",
);
?>

View file

View file

@ -1,59 +0,0 @@
<?php
// Fichier langue, en français.
$lang = array(
'L_lang' => "Français",
// Installation
'L_Install' => "Installation du CMS",
'L_Inst_Etape' => "Prérequis",
'L_Inst_Etape1' => "Configuration",
'L_Inst_Etape2' => "Administration",
'L_Inst_Etape3' => "Licence",
'L_Inst_Etape4' => "Terminée !",
'L_Inst_intro' => "Préface d'installation",
'L_Inst_bienvenue' => "Bienvenue sur l'assistant d'installation",
'L_Inst_instruction' => "Merci de suivre les étapes suivantes",
'L_Inst_prerequis' => "Prérequis: ", //espace
'L_Inst_versionphp' => "Version de PHP: ", //espace
'L_Inst_repdata' => "Répertoire 'data' accessible en écriture: ", //espace
'L_Inst_OK' => "OK",
'L_Inst_confgen' => "Configuration générale",
'L_Inst_sitenom' => "Titre du site",
'L_Inst_descnom' => "Description du site",
'L_Inst_confadmin' => "Configuration du compte Administrateur",
'L_Inst_roleAdmin' => "Administrateur",
'L_Inst_licence' => "Licence publique générale GNU",
'L_Inst_accepte' => "Oui j'ai lu et j'accepte les termes et conditions d'utilisation",
'L_Inst_succes' => "installé avec succés !",
'L_Inst_effacerinstall' => "N'oubliez pas d'effacer le dossier INSTALL de votre serveur !",
'L_Inst_admineffacer' => "(Possibilité de l'effacer via l'administration du site)",
'L_Inst_accessite' => "Accés au site",
// Installation -> Message d'erreur
'L_Inst_Msg_versionphp' => "Vous ne disposez pas de la version 5 de PHP.",
'L_Inst_Msg_erreur' => "ERREUR",
'L_Inst_Msg_repdata' => "Le dossier DATA n'a pas les droits appropriés. Il est en ", //espace
'L_Inst_Msg_motdepasse' => "Les deux mots de passe ne sont pas identiques !",
'L_Inst_Msg_mauvaisemail' => "Votre adresse email n'est pas conforme.",
'L_Inst_Msg_condition' => "Veuillez accepter les conditions !",
// Mot
'L_Mot_etape' => "Etape",
'L_Mot_preface' => "Préface",
'L_Mot_finalisation' => "Finalisation",
'L_Mot_remerciements' => "Remerciements",
'L_Mot_identifiant' => "Identifiant",
'L_Mot_motdepasse' => "Mot de passe",
'L_Mot_confmotdepasse' => "Confirmer mot de passe",
'L_Mot_mail' => "Email",
'L_Mot_suivant' => "Suivant",
'L_Mot_precedent' => "Précédent",
'login_msg_Layus' => "Vous entrez dans une zone d'accès sécurisée qui ne doit être utilisée uniquement par les personnes autorisées.",
);
?>

View file

@ -1,162 +0,0 @@
<?php
$lang = array(
"language" =>"English",
//=== Basic
"footer_version_loved" =>"<i class='icon-code'></i> with <i class='icon-heart'></i> by NNS Production",
//=== Login
"login_Administration" =>"Administration",
"login_SecurePanel" =>"Safety panel",
"login_Username" =>"Username",
"login_Password" =>"Password",
"login_Connexion" =>"Login",
"login_ForgotPassword" =>"Forgot your password?",
"login_Version" =>"version",
"login_msg_Layus" =>"You are entering a secure access area that should only be used by authorized persons.",
"login_sendNewPassword" =>"Send a new password",
//=== Administration
"admin_Dashboard" =>"Dashboard",
"admin_msg_installFolderDeleted" =>"The installation folder and its contents were successfully deleted!",
"admin_msg_installFolderStill" =>"The AEOS installation folder is still online. This folder is now useless and may cause a security risk for your site.",
"admin_input_DeleteFolder" =>"Delete the folder",
"admin_title_welcome" =>"Welcome to your administration area!",
"admin_text_welcome_1" =>"It is from the menus on your left that you will be able to manage your site. From here, you will be able to manage your pages, your modules, your components, your themes, but also to modify the settings. Don't forget to put your site on maintenance before modifying essential things.",
"admin_text_welcome_2" =>"Good luck to you! :)",
"admin_Pages" =>"Pages",
"admin_addPage" =>"Add a page",
"admin_Addons" =>"Modules",
"admin_addAddon" =>"Add a module",
"admin_Plugins" =>"Components",
"admin_addPlugin" =>"Add a component",
"admin_Themes" =>"Themes",
"admin_addTheme" =>"Add a theme",
"admin_Settings" =>"Settings",
"admin_General" =>"General",
"admin_Connexion" =>"Login",
"admin_Maintenance" =>"Maintenance",
"admin_System" =>"System",
"admin_Trashbin" =>"Trash",
"admin_EmptyTrashbin" =>"Empty the bin",
"admin_Logout" =>"Logout",
"admin_input_activated" =>"Activated",
"admin_input_desactivated" =>"Disabled",
"admin_input_standby" =>"Inaccessible",
"admin_updateAvailable" =>"New version available!",
//=== Pages
"admin_page_home" =>"Home page",
"admin_page_pageManagement" =>"Page management",
"admin_page_display" =>"Updated display",
"admin_page_order" =>"Updated order",
"admin_page_cantDeleteHome" =>"You cannot delete the home page.",
"admin_page_confirmDelete" =>"Do you really want to put this page in the recycle bin?",
"admin_page_confimedDelete" =>"The page ".@$tempTrash[1]." has been moved to the trash folder",
//=== Addons
"admin_addons_addonsManagement" =>"Module management",
"admin_addons_fileMustBeZip" =>"The module must be a .zip file",
"admin_addons_alreadyInstalled" =>"Module already installed.",
"admin_addons_installed" =>"Module successfully installed.",
"admin_addons_deleted" =>"Module successfully removed.",
"admin_addons_confirmDelete" =>"Do you really want to remove this module?",
//=== Plugins
"admin_plugins_addonsManagement" =>"Component management",
"admin_plugins_fileMustBeZip" =>"The component must be a .zip file",
"admin_plugins_alreadyInstalled" =>"Component already installed.",
"admin_plugins_installed" =>"Component successfully installed.",
"admin_plugins_deleted" =>"Component successfully removed.",
"admin_plugins_confirmDelete" =>"Do you really want to remove this component?",
"admin_plugins_empty" =>"No component currently installed",
"admin_plugins_display" =>"Successfully modified component",
//=== Themes
"admin_themes_themesManagement" =>"Theme management",
"admin_themes_fileMustBeZip" =>"The theme must be a .zip file",
"admin_themes_deleted" =>"Theme successfully deleted.",
"admin_themes_confirmDelete" =>"Do you really want to delete this theme?",
"admin_themes_changed" =>"Theme successfully modified.",
"admin_themes_alreadyInstalled" =>"Theme already installed.",
"admin_themes_installed" =>"Theme successfully installed.",
//=== Settings
"admin_settings_commonSettings" =>"General Settings",
"admin_settings_siteTitle" =>"Title of the site",
"admin_settings_siteDescription" =>"Description of the site",
"admin_settings_siteFooter" =>"Bottom of the page",
"admin_settings_maintenance" =>"Maintenance",
"admin_settings_maintenanceExplain" =>"Do you want to put the site on maintenance?",
"admin_settings_welcome_title" =>"The settings page...",
"admin_settings_welcomte_text" =>"This is the heart of your site. From the GENERAL, CONNECTION, MAINTENANCE and SYSTEM pages, you can administer the key and technical elements.",
//=== Connexion
"admin_settings_connexionProfil" =>"Profile",
"admin_settings_connexionProfilPicture" =>"Profile picture",
"admin_settings_connexionChangePicture" =>"Change photo",
"admin_settings_connexionOptions" =>"Connection option",
//=== System
"admin_settings_systemSystem" =>"System requirements",
"admin_settings_systemLanguage" =>"Language of the site :",
"admin_settings_systemURLRewriting" =>"Enable URL rewriting",
"admin_settings_systemURLRewritingKey" =>"URL rewrite prefix",
"admin_settings_systemURLRewritingInfo" =>"This option makes URLs easier to read.&#xA;Example:&#xA;domain.com/Page-1-Page Name",
"admin_settings_systemDebugMode" =>"Activating Developer Mode",
"admin_settings_systemDebugModeInfo" =>"This option displays PHP errors and adds new .&#xA;functions for the developer.",
//=== Trash
"admin_settings_trashEmpty" =>"Empty the recycle bin",
"admin_settings_trashHad" =>"Recycle bin management",
"admin_settings_trashRestore" =>"Restore the page",
"admin_settings_trashDelete" =>"Permanently delete the page",
"admin_settings_trashDeleteConfirm" =>"Do you really want to permanently delete this page?",
"admin_settings_trashDeleteOK" =>"File successfully deleted",
"admin_settings_trashInfo" =>"Erased on",
"admin_settings_trashNoFile" =>"The basket is currently empty",
"admin_settings_trashEmptyConfirm" =>"The trash has been emptied properly",
"admin_settings_trashEmptyDeleteConfirm" =>"Do you really want to permanently empty the trash?",
//=== Samples
"text_add" =>"Add",
"text_yes" =>"Yes",
"text_no" =>"No",
"text_version" =>"Version",
"text_author" =>"Author(s)",
"text_choose_file" =>"Choose a file",
"text_install" =>"Install",
"text_errorOccurred" =>"A mistake has been made.",
"admin_fileNotZip" =>"This file is not a zip file.",
"update" =>"Update",
"updateSuccessfull" =>"Successful update.",
"mailAddress" =>"Email address",
"cancel" =>"Cancel",
"mailSentToYou" =>"An email containing a new password has been sent to you.",
"wrongLoginEmail" =>"Incorrect login or email.",
"wrongLoginPassword" =>"Incorrect login or password.",
"firstName" =>"First name",
"lastName" =>"Name",
"language" =>"Language",
//=== Mails
"mail_passwordBack" =>"Password recovery",
"mail_newPassword" =>"This e-mail is from ".@AEOS_NAME." You've requested a new password. \Here's your new password:",
//=== Debug
"debug_Title" =>"Lorem ipsum dolores.",
"debug_Text" =>"Ex his quidam aeternitati se commendari posse per statuas aestimantes eas ardenter adfectant quasi plus praemii de figmentis aereis sensu carentibus adepturi, quam ex conscientia honeste recteque factorum, easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo, cum consiliis armisque regem superasset Antiochum. quam autem sit pulchrum exigua haec spernentem et minima ad ascensus verae gloriae tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato monstravit. qui interrogatus quam ob rem inter multos... statuam non haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam quod est gravius cur inpetraverim mussitare.",
);
?>

View file

@ -1,162 +0,0 @@
<?php
$lang = array(
"language" =>"Français",
//=== Basic
"footer_version_loved" =>"<i class='icon-code'></i> with <i class='icon-heart'></i> by NNS Production",
//=== Login
"login_Administration" =>"Administration",
"login_SecurePanel" =>"Panneau de sécurité",
"login_Username" =>"Nom d'utilisateur",
"login_Password" =>"Mot de passe",
"login_Connexion" =>"Connexion",
"login_ForgotPassword" =>"Mot de passe oublié ?",
"login_Version" =>"version",
"login_msg_Layus" =>"Vous entrez dans une zone d'accès sécurisée qui ne doit être utilisée uniquement par les personnes autorisées.",
"login_sendNewPassword" =>"Envoyer un nouveau mot de passe",
//=== Administration
"admin_Dashboard" =>"Dashboard",
"admin_msg_installFolderDeleted" =>"Le dossier d'installation ainsi que son contenu ont été effacés avec succés!",
"admin_msg_installFolderStill" =>"Le dossier d'installation d'AEOS est encore en ligne. Ce dossier est dorénavant inutile et peut causer un risque pour la sécurité de votre site.",
"admin_input_DeleteFolder" =>"Effacer le dossier",
"admin_title_welcome" =>"Bienvenue dans votre espace d'administration !",
"admin_text_welcome_1" =>"C'est à partir des menus sur votre gauche que vous pourrez gérer votre site. À partir d'ici, vous serez dans la possibilité de gérer vos pages, vos modules, vos composants, vos thèmes, mais aussi modifier les réglages. N'oubliez pas de mettre votre site en maintenance avant de modifier des choses essentielles.",
"admin_text_welcome_2" =>"Bonne chance à vous ! :)",
"admin_Pages" =>"Pages",
"admin_addPage" =>"Ajouter une page",
"admin_Addons" =>"Modules",
"admin_addAddon" =>"Ajouter un module",
"admin_Plugins" =>"Composants",
"admin_addPlugin" =>"Ajouter un composant",
"admin_Themes" =>"Thèmes",
"admin_addTheme" =>"Ajouter un thème",
"admin_Settings" =>"Réglages",
"admin_General" =>"Général",
"admin_Connexion" =>"Connexion",
"admin_Maintenance" =>"Maintenance",
"admin_System" =>"Système",
"admin_Trashbin" =>"Corbeille",
"admin_EmptyTrashbin" =>"Vider la corbeille",
"admin_Logout" =>"Déconnexion",
"admin_input_activated" =>"Activé(e)",
"admin_input_desactivated" =>"Désactivé(e)",
"admin_input_standby" =>"Inaccessible",
"admin_updateAvailable" =>"Nouvelle version disponible !",
//=== Pages
"admin_page_home" =>"Page d'accueil",
"admin_page_pageManagement" =>"Gestion des pages",
"admin_page_display" =>"Affichage mis à jour",
"admin_page_order" =>"Ordre mis à jour",
"admin_page_cantDeleteHome" =>"Vous ne pouvez pas supprimer la page d'accueil.",
"admin_page_confirmDelete" =>"Voulez-vous vraiment mettre cette page dans la corbeille ?",
"admin_page_confimedDelete" =>"La page ".@$tempCorbeille[1]." a été déplacé dans le dossier corbeille",
//=== Addons
"admin_addons_addonsManagement" =>"Gestion des modules",
"admin_addons_fileMustBeZip" =>"Le module doit être un fichier .zip",
"admin_addons_alreadyInstalled" =>"Module déjà installé.",
"admin_addons_installed" =>"Module installé avec succès.",
"admin_addons_deleted" =>"Module supprimé avec succés.",
"admin_addons_confirmDelete" =>"Voulez-vous vraiment supprimer ce module ?",
//=== Plugins
"admin_plugins_addonsManagement" =>"Gestion des composants",
"admin_plugins_fileMustBeZip" =>"Le composant doit être un fichier .zip",
"admin_plugins_alreadyInstalled" =>"Composant déjà installé.",
"admin_plugins_installed" =>"Composant installé avec succès.",
"admin_plugins_deleted" =>"Composant supprimé avec succés.",
"admin_plugins_confirmDelete" =>"Voulez-vous vraiment supprimer ce composant ?",
"admin_plugins_empty" =>"Aucun composant installé actuellement",
"admin_plugins_display" =>"Composant modifié avec succès",
//=== Themes
"admin_themes_themesManagement" =>"Gestions des thèmes",
"admin_themes_fileMustBeZip" =>"Le thème doit être un fichier .zip",
"admin_themes_deleted" =>"Thème supprimé avec succés.",
"admin_themes_confirmDelete" =>"Voulez-vous vraiment supprimer ce thème ?",
"admin_themes_changed" =>"Thème modifié avec succés.",
"admin_themes_alreadyInstalled" =>"Thème déjà installé.",
"admin_themes_installed" =>"Thème installé avec succès.",
//=== Settings
"admin_settings_commonSettings" =>"Réglages Généraux",
"admin_settings_siteTitle" =>"Titre du site",
"admin_settings_siteDescription" =>"Description du site",
"admin_settings_siteFooter" =>"Bas de page",
"admin_settings_maintenance" =>"Maintenance",
"admin_settings_maintenanceExplain" =>"Voulez-vous mettre le site en maintenance ?",
"admin_settings_welcome_title" =>"La page de réglages...",
"admin_settings_welcomte_text" =>"C'est ici le coeur même de votre site. A partir des pages GÉNÉRAL, CONNEXION, MAINTENANCE et SYSTEME, vous pouvez administrer les éléments clés et techniques.",
//=== Connexion
"admin_settings_connexionProfil" =>"Profil",
"admin_settings_connexionProfilPicture" =>"Photo de profil",
"admin_settings_connexionChangePicture" =>"Changer la photo",
"admin_settings_connexionOptions" =>"Option de connexion",
//=== System
"admin_settings_systemSystem" =>"Configuration système",
"admin_settings_systemLanguage" =>"Langue du site :",
"admin_settings_systemURLRewriting" =>"Activer la réécriture d'URL",
"admin_settings_systemURLRewritingKey" =>"Préfixe de la réécriture d'URL",
"admin_settings_systemURLRewritingInfo" =>"Cette option permet de rendre les URL plus facile à lire.&#xA;Exemple :&#xA;domaine.com/Page-1-Nom-de-la-Page",
"admin_settings_systemDebugMode" =>"Activation du mode Développeur",
"admin_settings_systemDebugModeInfo" =>"Cette option permet de d'afficher les erreurs PHP et ajoute de nouvelles fonctions.&#xA;Destiné au développeur.",
//=== Trash
"admin_settings_trashEmpty" =>"Vider la corbeille",
"admin_settings_trashHad" =>"Gestion de la corbeille",
"admin_settings_trashRestore" =>"Restaurer la page",
"admin_settings_trashDelete" =>"Supprimer définitivement la page",
"admin_settings_trashDeleteConfirm" =>"Voulez-vous vraiment supprimer définitivement cette page ?",
"admin_settings_trashDeleteOK" =>"Fichier effacé avec succès",
"admin_settings_trashInfo" =>"Effacé(e) le",
"admin_settings_trashNoFile" =>"La corbeille est vide actuellement",
"admin_settings_trashEmptyConfirm" =>"La corbeille a été vidée correctement",
"admin_settings_trashEmptyDeleteConfirm" =>"Voulez-vous vraiment vider définitivement la corbeille ?",
//=== Samples
"text_add" =>"Ajouter",
"text_yes" =>"Oui",
"text_no" =>"Non",
"text_version" =>"Version",
"text_author" =>"Auteur(s)",
"text_choose_file" =>"Choisir un fichier",
"text_install" =>"Installer",
"text_errorOccurred" =>"Une erreur est survenue.",
"admin_fileNotZip" =>"Ce fichier n'est pas un fichier zip.",
"update" =>"Mettre à jour",
"updateSuccessfull" =>"Mise à jour réussie.",
"mailAddress" =>"Adresse email",
"cancel" =>"Annuler",
"mailSentToYou" =>"Un email contenant un nouveau mot de passe vous a été envoyé.",
"wrongLoginEmail" =>"Login ou email incorrect.",
"wrongLoginPassword" =>"Login ou mot de passe incorrect.",
"firstName" =>"Prénom",
"lastName" =>"Nom",
"language" =>"Langue",
//=== Mails
"mail_passwordBack" =>"Récupération de mot de passe",
"mail_newPassword" =>"Ce mail provient de ".@AEOS_NAME." .\n Vous avez fait une demande de nouveau mot de passe. \n\nVoici votre nouveau mot de passe:",
//=== Debug
"debug_Title" =>"Lorem ipsum dolores",
"debug_Text" =>"Ex his quidam aeternitati se commendari posse per statuas aestimantes eas ardenter adfectant quasi plus praemii de figmentis aereis sensu carentibus adepturi, quam ex conscientia honeste recteque factorum, easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo, cum consiliis armisque regem superasset Antiochum. quam autem sit pulchrum exigua haec spernentem et minima ad ascensus verae gloriae tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato monstravit. qui interrogatus quam ob rem inter multos... statuam non haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam quod est gravius cur inpetraverim mussitare.",
);
?>

6
lib/.htaccess Executable file
View file

@ -0,0 +1,6 @@
Options -Indexes
deny from all
<Files "rew.lib.php">
Allow from all
</Files>

624
lib/aeos.lib.php Normal file → Executable file
View file

@ -2,148 +2,23 @@
// Listings des fonctions (librairie) utilisées sur AEOS // Listings des fonctions (librairie) utilisées sur AEOS
// ***************************************************** // *****************************************************
//=== Parse Array and translate into XML file [LIB]
class Array2XML {
private static $xml = null;
private static $encoding = 'UTF-8';
public static function init($version = '1.0', $encoding = 'UTF-8', $format_output = true)
{
self::$xml = new DomDocument($version, $encoding);
self::$xml->formatOutput = $format_output;
self::$encoding = $encoding;
}
public static function &createXML($arr=array(), $node_name='NodeNameDefault')
{
$xml = self::getXMLRoot();
if (count($arr) > 1)
{
$xml->appendChild(self::convert($node_name, $arr));
}
else
{
@$root_element = array_pop(array_keys($arr));
$xml->insertBefore(self::convert($root_element, $arr[$root_element]));
}
self::$xml = null;
return $xml;
}
private static function &convert($node_name, $arr=array())
{
$xml = self::getXMLRoot();
$node = $xml->createElement($node_name);
if(is_array($arr))
{
if(isset($arr['@src']))
{
foreach($arr['@src'] as $key => $value)
{
if(!self::isValidTagName($key))
{
throw new Exception('[Array2XML] Illegal character in attribute name. attribute: '.$key.' in node: '.$node_name);
}
$node->setAttribute($key, self::bool2str($value));
}
unset($arr['@src']);
}
if(isset($arr['#text']))
{
foreach($arr as $key => $value)
{
if(@$key[0]=="@") $node->setAttribute(substr($key, 1), $value);
}
if(isset($arr['@cdata']))
{
$node->setAttribute('cdata', $arr['@cdata']);
$node->appendChild($xml->createCDATASection(self::bool2str($arr['#text'])));
}
else
{
$node->appendChild($xml->createTextNode(self::bool2str($arr['#text'])));
}
unset($arr['#text']);
return $node;
}
}
if(is_array($arr))
{
foreach($arr as $key=>$value)
{
if(!self::isValidTagName($key))
{
throw new Exception('[Array2XML] Illegal character in tag name. tag: '.$key.' in node: '.$node_name);
}
if(is_array($value) && is_numeric(key($value)))
{
foreach($value as $k=>$v)
{
$node->appendChild(self::convert($key, $v));
}
}
else
{
$node->appendChild(self::convert($key, $value));
}
unset($arr[$key]);
}
}
if(!is_array($arr))
{
$node->appendChild($xml->createTextNode(self::bool2str($arr)));
}
return $node;
}
private static function getXMLRoot()
{
if(empty(self::$xml))
{
self::init();
}
return self::$xml;
}
private static function bool2str($v)
{
$v = $v === true ? 'true' : $v;
$v = $v === false ? 'false' : $v;
return $v;
}
private static function isValidTagName($tag)
{
$pattern = '/^[a-z_]+[a-z0-9\:\-\.\_]*[^:]*$/i';
return preg_match($pattern, $tag, $matches) && $matches[0] == $tag;
}
}
/* Class qui permet la lecture des fichiers XML */ /* Class qui permet la lecture des fichiers XML */
class Xml2Array class Xml2Array
{ {
private $xml_dom; private $xml_dom;
private $xml_array; private $xml_array;
private $xml; private $xml;
public function __construct($xml = '') {$this->xml = $xml;} public function __construct($xml = '') {$this->xml = $xml;}
public function setXml($xml) public function setXml($xml)
{ {
if(!empty($xml)) if(!empty($xml))
{ {
$this->xml = $xml; $this->xml = $xml;
} }
} }
public function get_array() public function get_array()
{ {
if($this->get_dom() === false){return false;} if($this->get_dom() === false){return false;}
@ -152,21 +27,21 @@ class Xml2Array
$this->xml_array[$root_element->tagName] = $this->node_2_array($root_element); $this->xml_array[$root_element->tagName] = $this->node_2_array($root_element);
return $this->xml_array; return $this->xml_array;
} }
private function node_2_array($dom_element) private function node_2_array($dom_element)
{ {
if($dom_element->nodeType != XML_ELEMENT_NODE){return false;} if($dom_element->nodeType != XML_ELEMENT_NODE){return false;}
$children = $dom_element->childNodes; $children = $dom_element->childNodes;
foreach($children as $child) foreach($children as $child)
{ {
if($child->nodeType != XML_ELEMENT_NODE){continue;} if($child->nodeType != XML_ELEMENT_NODE){continue;}
$prefix = ($child->prefix) ? $child->prefix.':' : ''; $prefix = ($child->prefix) ? $child->prefix.':' : '';
if(!is_array(@$result[$prefix.$child->nodeName])) if(!is_array(@$result[$prefix.$child->nodeName]))
{ {
$subnode = false; $subnode = false;
foreach($children as $test_node) foreach($children as $test_node)
{ {
if($child->nodeName == $test_node->nodeName && !$child->isSameNode($test_node)) if($child->nodeName == $test_node->nodeName && !$child->isSameNode($test_node))
@ -180,23 +55,23 @@ class Xml2Array
{ {
$subnode = true; $subnode = true;
} }
if ($subnode) if ($subnode)
{ {
$result[$prefix.$child->nodeName][] = $this->node_2_array($child); $result[$prefix.$child->nodeName][] = $this->node_2_array($child);
} }
else else
{ {
$result[$prefix.$child->nodeName] = $this->node_2_array($child); $result[$prefix.$child->nodeName] = $this->node_2_array($child);
} }
} }
if (!is_array(@$result)) if (!is_array(@$result))
{ {
if (function_exists('html_entity_decode')) $result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue)); if (function_exists('html_entity_decode')) $result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue));
else $result['#text'] = htmlentities($dom_element->nodeValue); else $result['#text'] = htmlentities($dom_element->nodeValue);
} }
if ($dom_element->hasAttributes()) if ($dom_element->hasAttributes())
{ {
foreach ($dom_element->attributes as $attrib) foreach ($dom_element->attributes as $attrib)
@ -206,10 +81,10 @@ class Xml2Array
else $result["@".$prefix.$attrib->nodeName] = htmlentities($attrib->nodeValue); else $result["@".$prefix.$attrib->nodeName] = htmlentities($attrib->nodeValue);
} }
} }
return $result; return $result;
} }
private function get_dom() private function get_dom()
{ {
if(empty($this->xml)) if(empty($this->xml))
@ -217,25 +92,25 @@ class Xml2Array
echo '<span class="erreur">Aucun fichier XML trouvé.</span>'; echo '<span class="erreur">Aucun fichier XML trouvé.</span>';
return false; return false;
} }
$this->xml_dom = @DOMDocument::load($this->xml); $this->xml_dom = @DOMDocument::load($this->xml);
if($this->xml_dom) if($this->xml_dom)
{ {
return $this->xml_dom; return $this->xml_dom;
} }
echo '<span class="erreur">Données XML invalide</span>'; echo '<span class="erreur">Données XML invalide</span>';
//header('Location: '.$AEOS_REW.HOME_PAGE.'-E404.html');
} }
} }
// Renvoi le XML en ARRAY // Renvoi le XML en ARRAY
function lecture_xml($config, $isAdmin = FALSE) function lecture_xml($config)
{ {
$converter = new Xml2Array(); $converter = new Xml2Array();
$converter->setXml($config); $converter->setXml($config);
$xml_array = $converter->get_array(); $xml_array = $converter->get_array();
if($isAdmin) unset($xml_array['configuration']['users']); //if not admin
return $xml_array; return $xml_array;
} }
@ -244,7 +119,7 @@ function listing_dossier($folder)
{ {
$dossier = opendir($folder); $dossier = opendir($folder);
$i=0; $i=0;
while ($Fichier = readdir($dossier)) while ($Fichier = readdir($dossier))
{ {
if ($Fichier != "." && $Fichier != ".." && $Fichier != ".htaccess" && substr($Fichier, 0, 1) != '.') if ($Fichier != "." && $Fichier != ".." && $Fichier != ".htaccess" && substr($Fichier, 0, 1) != '.')
{ {
@ -252,14 +127,9 @@ function listing_dossier($folder)
$i++; $i++;
} }
} }
@natsort($array);
return $array;
closedir($dossier); closedir($dossier);
if(isset($array))
{
@natsort($array);
return $array;
}
else return FALSE;
} }
// Renvoi le listing du dossier PAGE en triant par ordre // Renvoi le listing du dossier PAGE en triant par ordre
@ -267,11 +137,11 @@ function listing_ordre($o = NULL)
{ {
$a = array(); $a = array();
$l = listing_dossier(DATA_PAGES); $l = listing_dossier(DATA_PAGES);
foreach ($l as &$p) foreach ($l as &$p)
{ {
$m = lecture_xml(DATA_PAGES.$p); $m = lecture_xml(DATA_PAGES.$p);
$a[$m['page']['ordre']['#text']] = $p; $a[$m['page']['ordre']['#text']] = $p;
} }
switch($o) switch($o)
{ {
case 1: krsort($a); break; case 1: krsort($a); break;
@ -282,48 +152,53 @@ function listing_ordre($o = NULL)
} }
// Enregistre une donnée dans un XML - Chemin, OldElement, NewElement // Enregistre une donnée dans un XML - Chemin, OldElement, NewElement
function ecriture_xml($a, $e) /*
function ecriture_xml($a, $b, $c)
{ {
$arrayXML = lecture_xml($a); $dom = new DomDocument;
$arrayKEY = $e; $dom->load($a);
$d = false; $xml = $dom->getElementsByTagName($b);
//echo $xml->item(0)->nodeValue;
foreach($arrayKEY as $arrayOptions => $arrayValues) { $titre = $xml->item(0);
$tmp = &$arrayXML; $titre->nodeValue = stripslashes(utf8_encode($c));
//echo $dom->saveXML();
$dom->save($a);
}
*/
foreach(explode('/', $arrayOptions) as $key) function ecriture_xml($a, $b, $c, $d=FALSE)
{
$dom = new DomDocument('1.0','UTF-8');
$dom->load($a);
$b = explode("/", $b);
$i = 0;
foreach($b as $element)
{
$crt = "dom".$i;
$prec = ($i == 0)? "dom" : "dom".($i-1);
if(substr($element, -1) == "]")
{ {
if(strpos($key, "#CDATA")) $d = explode("[", $element);
{ $e = $d[0];
$d = true; $f = intval(substr($d[1], 0, -1));
$key = explode("#CDATA", $key); $$crt = $$prec->getElementsByTagName($e)->item($f);
$key = $key[0];
}
$tmp =& $tmp[$key];
} }
else
if($d)
{ {
$tmp["@cdata"] = $arrayValues; $$crt = $$prec->getElementsByTagName($element)->item(0);
//$tmp["#text"] = "<![CDATA[".$arrayValues."]]>";
} }
else $tmp["#text"] = $arrayValues; $i++;
}
$rep = $$crt->nodeValue = stripslashes($c);
//$tmp["#text"] = $arrayValues; if($d)
{
$ocrt = $$crt;
$ncrt=$$crt->parentNode->appendChild($dom->createElement($element));
} $cdata=$dom->createCDATASection(stripslashes($c));
$ncrt->appendChild($cdata);
$savedXML = Array2XML::createXML($arrayXML); $$crt->parentNode->replaceChild($ncrt, $ocrt);
$savedXML->save($a); }
$dom->save($a);
} }
// Renvoi une donnée en STRING // Renvoi une donnée en STRING
@ -335,69 +210,9 @@ function donnee_xml($a, $b)
return $xml->item(0)->nodeValue; return $xml->item(0)->nodeValue;
} }
// Renvoi STRING
// Nettoie le nom d'un fichier
// Thanks to Magento script
function cleanName($a) function cleanName($a)
{ {
$array = array( $b = array('"', '/', ',', '\\', '*', '?', '<', '>', '|', ':');
'&amp;' => 'and', '@' => 'at', '©' => 'c', '®' => 'r', 'À' => 'a',
'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'Å' => 'a', 'Æ' => 'ae','Ç' => 'c',
'È' => 'e', 'É' => 'e', 'Ë' => 'e', 'Ì' => 'i', 'Í' => 'i', 'Î' => 'i',
'Ï' => 'i', 'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Õ' => 'o', 'Ö' => 'o',
'Ø' => 'o', 'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'Ý' => 'y',
'ß' => 'ss','à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', 'å' => 'a',
'æ' => 'ae','ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e',
'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ò' => 'o', 'ó' => 'o',
'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u',
'û' => 'u', 'ü' => 'u', 'ý' => 'y', 'þ' => 'p', 'ÿ' => 'y', 'Ā' => 'a',
'ā' => 'a', 'Ă' => 'a', 'ă' => 'a', 'Ą' => 'a', 'ą' => 'a', 'Ć' => 'c',
'ć' => 'c', 'Ĉ' => 'c', 'ĉ' => 'c', 'Ċ' => 'c', 'ċ' => 'c', 'Č' => 'c',
'č' => 'c', 'Ď' => 'd', 'ď' => 'd', 'Đ' => 'd', 'đ' => 'd', 'Ē' => 'e',
'ē' => 'e', 'Ĕ' => 'e', 'ĕ' => 'e', 'Ė' => 'e', 'ė' => 'e', 'Ę' => 'e',
'ę' => 'e', 'Ě' => 'e', 'ě' => 'e', 'Ĝ' => 'g', 'ĝ' => 'g', 'Ğ' => 'g',
'ğ' => 'g', 'Ġ' => 'g', 'ġ' => 'g', 'Ģ' => 'g', 'ģ' => 'g', 'Ĥ' => 'h',
'ĥ' => 'h', 'Ħ' => 'h', 'ħ' => 'h', 'Ĩ' => 'i', 'ĩ' => 'i', 'Ī' => 'i',
'ī' => 'i', 'Ĭ' => 'i', 'ĭ' => 'i', 'Į' => 'i', 'į' => 'i', 'İ' => 'i',
'ı' => 'i', 'IJ' => 'ij','ij' => 'ij','Ĵ' => 'j', 'ĵ' => 'j', 'Ķ' => 'k',
'ķ' => 'k', 'ĸ' => 'k', 'Ĺ' => 'l', 'ĺ' => 'l', 'Ļ' => 'l', 'ļ' => 'l',
'Ľ' => 'l', 'ľ' => 'l', 'Ŀ' => 'l', 'ŀ' => 'l', 'Ł' => 'l', 'ł' => 'l',
'Ń' => 'n', 'ń' => 'n', 'Ņ' => 'n', 'ņ' => 'n', 'Ň' => 'n', 'ň' => 'n',
'ʼn' => 'n', 'Ŋ' => 'n', 'ŋ' => 'n', 'Ō' => 'o', 'ō' => 'o', 'Ŏ' => 'o',
'ŏ' => 'o', 'Ő' => 'o', 'ő' => 'o', 'Œ' => 'oe','œ' => 'oe','Ŕ' => 'r',
'ŕ' => 'r', 'Ŗ' => 'r', 'ŗ' => 'r', 'Ř' => 'r', 'ř' => 'r', 'Ś' => 's',
'ś' => 's', 'Ŝ' => 's', 'ŝ' => 's', 'Ş' => 's', 'ş' => 's', 'Š' => 's',
'š' => 's', 'Ţ' => 't', 'ţ' => 't', 'Ť' => 't', 'ť' => 't', 'Ŧ' => 't',
'ŧ' => 't', 'Ũ' => 'u', 'ũ' => 'u', 'Ū' => 'u', 'ū' => 'u', 'Ŭ' => 'u',
'ŭ' => 'u', 'Ů' => 'u', 'ů' => 'u', 'Ű' => 'u', 'ű' => 'u', 'Ų' => 'u',
'ų' => 'u', 'Ŵ' => 'w', 'ŵ' => 'w', 'Ŷ' => 'y', 'ŷ' => 'y', 'Ÿ' => 'y',
'Ź' => 'z', 'ź' => 'z', 'Ż' => 'z', 'ż' => 'z', 'Ž' => 'z', 'ž' => 'z',
'ſ' => 'z', 'Ə' => 'e', 'ƒ' => 'f', 'Ơ' => 'o', 'ơ' => 'o', 'Ư' => 'u',
'ư' => 'u', 'Ǎ' => 'a', 'ǎ' => 'a', 'Ǐ' => 'i', 'ǐ' => 'i', 'Ǒ' => 'o',
'ǒ' => 'o', 'Ǔ' => 'u', 'ǔ' => 'u', 'Ǖ' => 'u', 'ǖ' => 'u', 'Ǘ' => 'u',
'ǘ' => 'u', 'Ǚ' => 'u', 'ǚ' => 'u', 'Ǜ' => 'u', 'ǜ' => 'u', 'Ǻ' => 'a',
'ǻ' => 'a', 'Ǽ' => 'ae','ǽ' => 'ae','Ǿ' => 'o', 'ǿ' => 'o', 'ə' => 'e',
'Ё' => 'jo','Є' => 'e', 'І' => 'i', 'Ї' => 'i', 'А' => 'a', 'Б' => 'b',
'В' => 'v', 'Г' => 'g', 'Д' => 'd', 'Е' => 'e', 'Ж' => 'zh','З' => 'z',
'И' => 'i', 'Й' => 'j', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n',
'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u',
'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch','Ш' => 'sh','Щ' => 'sch',
'Ъ' => '-', 'Ы' => 'y', 'Ь' => '-', 'Э' => 'je','Ю' => 'ju','Я' => 'ja',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e',
'ж' => 'zh','з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l',
'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',
'ш' => 'sh','щ' => 'sch','ъ' => '-','ы' => 'y', 'ь' => '-', 'э' => 'je',
'ю' => 'ju','я' => 'ja','ё' => 'jo','є' => 'e', 'і' => 'i', 'ї' => 'i',
'Ґ' => 'g', 'ґ' => 'g', 'א' => 'a', 'ב' => 'b', 'ג' => 'g', 'ד' => 'd',
'ה' => 'h', 'ו' => 'v', 'ז' => 'z', 'ח' => 'h', 'ט' => 't', 'י' => 'i',
'ך' => 'k', 'כ' => 'k', 'ל' => 'l', 'ם' => 'm', 'מ' => 'm', 'ן' => 'n',
'נ' => 'n', 'ס' => 's', 'ע' => 'e', 'ף' => 'p', 'פ' => 'p', 'ץ' => 'C',
'צ' => 'c', 'ק' => 'q', 'ר' => 'r', 'ש' => 'w', 'ת' => 't', '™' => 'tm',
);
$a = strtr($a, $array);
$a = preg_replace('/[^a-z0-9\._-]+/i', '-', strtolower($a));
$b = array('\'', '"', '/', ',', '\\', '*', '?', '<', '>', '|', ':');
$c = str_replace($b, "", $a); $c = str_replace($b, "", $a);
return utf8_decode($c); return utf8_decode($c);
} }
@ -412,7 +227,6 @@ function upload_unzip($fichier, $dossier, $page)
if ($type=="application/zip" || $type=="application/x-zip-compressed" || $type=="multipart/x-zip" || $type=="application/x-compressed" || $type=="application/octet-stream") if ($type=="application/zip" || $type=="application/x-zip-compressed" || $type=="multipart/x-zip" || $type=="application/x-compressed" || $type=="application/octet-stream")
{ {
$target_path = $dossier.$filename; $target_path = $dossier.$filename;
//echo $target_path;
if(move_uploaded_file($source, $target_path)) if(move_uploaded_file($source, $target_path))
{ {
$nom = basename($filename, ".zip"); $nom = basename($filename, ".zip");
@ -425,7 +239,7 @@ function upload_unzip($fichier, $dossier, $page)
{ {
$zip = new ZipArchive(); $zip = new ZipArchive();
$x = $zip->open($target_path); $x = $zip->open($target_path);
if ($x === true) if ($x === true)
{ {
$zip->extractTo($dossier.$nom); $zip->extractTo($dossier.$nom);
$zip->close(); $zip->close();
@ -437,7 +251,7 @@ function upload_unzip($fichier, $dossier, $page)
// //
$e = 0; //echo "<span class='valide'>Votre ".$page." a bien &eacute;t&eacute; install&eacute;.</span>"; $e = 0; //echo "<span class='valide'>Votre ".$page." a bien &eacute;t&eacute; install&eacute;.</span>";
} }
} }
else {$e=1; else {$e=1;
//echo "<span class='erreur'>Une erreur est survenue. Veuillez recommencer.</span>"; //echo "<span class='erreur'>Une erreur est survenue. Veuillez recommencer.</span>";
} }
@ -456,12 +270,12 @@ function br2nl($replace) {
//Merci à holger1 de php.net //Merci à holger1 de php.net
// Supprime un dossier // Supprime un dossier
function removeFolder($dir) { function removeFolder($dir) {
if (is_dir($dir)) if (is_dir($dir))
{ {
$objects = scandir($dir); $objects = scandir($dir);
foreach ($objects as $object) foreach ($objects as $object)
{ {
if ($object != "." && $object != "..") if ($object != "." && $object != "..")
{ {
if (filetype($dir."/".$object) == "dir") removeFolder($dir."/".$object); else unlink($dir."/".$object); if (filetype($dir."/".$object) == "dir") removeFolder($dir."/".$object); else unlink($dir."/".$object);
} }
@ -469,9 +283,9 @@ function removeFolder($dir) {
reset($objects); reset($objects);
rmdir($dir); rmdir($dir);
} }
} }
// Vide un dossier // Vide un dossier
function clearFolder($folder) function clearFolder($folder)
{ {
$dossier=opendir($folder); $dossier=opendir($folder);
@ -485,18 +299,19 @@ function clearFolder($folder)
} }
closedir($dossier); closedir($dossier);
} }
//=== Generate a simple password // Génère un mot de passe de $nbr caractères
//=== IN: Number of character [INT FORMAT] function generer_mdp($nbr)
//=== OUT: Generated password [STRING FORMAT]
//=== VAR: $N number of characters wanted
function generateEasyPassword($N)
{ {
$S = ""; $str = "";
$C = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
srand((double)microtime()*1000); srand((double)microtime()*1000);
for($i=0; $i<$N; $i++) {$S .= $C[rand()%strlen($C)];}
return $S; for($i=0; $i<$nbr; $i++) {
$str .= $chaine[rand()%strlen($chaine)];
}
return $str;
} }
// Envoi un mail // Envoi un mail
@ -511,13 +326,13 @@ function sendMail($expediteur, $destinataire, $titre, $messageHTML, $name = null
mail($destinataire, $titre, $messageHTML, $entete); mail($destinataire, $titre, $messageHTML, $entete);
} }
// Retourne un boolean // Retourne un boolean
// Vérifie si une adresse est belle et bien au format mail. // Vérifie si une adresse est belle et bien au format mail.
function checkMail($adresse) function checkMail($adresse)
{ {
$Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#'; $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($Syntaxe,$adresse)) return true; if(preg_match($Syntaxe,$adresse)) return true;
else return false; else return false;
} }
// Retourne STRING // Retourne STRING
@ -526,13 +341,13 @@ function getBaseScript()
{ {
$fullPath = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $fullPath = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$file = basename ($fullPath); $file = basename ($fullPath);
$dir = dirname($fullPath); $dir = dirname($fullPath);
return $dir; return $dir;
} }
// Retourne STRING // Retourne STRING
// Transforme une chaine en URL valide // Transforme une chaine en URL valide
function valideURL($s) function valideURL($s)
{ {
$p = array("?","!","@","#","%","&amp;","*","(",")","[","]","=","+"," ",";",":","'",".","_", "&"); $p = array("?","!","@","#","%","&amp;","*","(",")","[","]","=","+"," ",";",":","'",".","_", "&");
$s = str_replace($p, "-", $s); $s = str_replace($p, "-", $s);
@ -553,33 +368,40 @@ function getValueArray($a, $b, $c)
return $v[$k[$b]+$c]; return $v[$k[$b]+$c];
} }
// Retourne BOOLEAN function showTooltip($a, $b)
// Retourne si il y a une nouvelle version - ou pas.
// Fonction non...fonctionnelle !
function checkVersion()
{ {
$v = file_get_contents(AEOS_REAL_URL.'/demo/data/config.xml'); $r='<a href="#" class="tooltip">';
if($v['configuration']['update']['#text']==AEOS_VERSION) return FALSE; $r.=$a;
else return TRUE; $r.='<span>';
$r.='<img class="tooltipi" src="../themes/system/images/icones/tooltip.png" />';
$r.=$b;
$r.='</span>';
$r.='</a>';
return $r;
} }
// Retourne BOOLEAN
// Retourne si il y a une nouvelle version - ou pas.
function checkVersion()
{
$v = lecture_xml(AEOS_REAL_URL.'/demo/data/config.xml');
if($v['configuration']['version']['#text']==AEOS_VERSION) return FALSE;
else return TRUE;
}
// Retourne STRING // Retourne STRING
// Retourne STRING sécurisé // Retourne STRING sécurisé
function CA20($a) function CA20($a)
{ {
//XSS //XSS
$a = strip_tags($a); strip_tags($a);
$a = htmlspecialchars($a, ENT_QUOTES); $a = htmlspecialchars($a, ENT_QUOTES);
//SQL Injection //SQL Injection
$a = htmlentities($a, ENT_QUOTES); $a = htmlentities($a, ENT_QUOTES);
$a = stripslashes($a); if(get_magic_quotes_gpc()===1){$a = stripslashes($a);}
//Remove tabs
//$a = trim(preg_replace('/\t+/', '', $a));
return $a; return $a;
} }
@ -588,222 +410,12 @@ function checkInstall()
global $subdir; global $subdir;
$config = $subdir."data/config.xml"; $config = $subdir."data/config.xml";
$install = $subdir."install/index.php"; $install = $subdir."install/index.php";
if (!file_exists($config)) if (!file_exists($config))
{ {
if (!file_exists($install)) die("Fichier config.xml et script d'installation introuvable"); if (!file_exists($install)) die("Fichier config.xml et script d'installation introuvable");
else header('Location: '.$install); else header('Location: '.$install);
} }
return TRUE; return TRUE;
} }
// Retourne STRING
// Renvoi la valeur LANGUAGE du navigateur web sous forme "fr"
function detectLang()
{
if(isset($_['lang'])) $l = $_['lang'];
else
{
$l = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$l = strtolower(substr(chop($l[0]),0,2));
switch ($l)
{
case 'fr': $l = "fr_FR"; break;
case 'en': $l = "en_US"; break;
default: $l = "fr_FR"; break;
}
}
return $l;
}
// Retourne BOOLEAN
// Vérifie si un champs est vide
function checkEmptyField($a)
{
if (empty($a) || $a=="") return TRUE;
else return FALSE;
}
// Retourne BOOLEAN
// Vérifie si un fichier lang.php est disponible pour le module $a
function checkMultilangModuleAvailable($a)
{
if(isset($a)) if($a==1) return TRUE;
else return FALSE;
}
//Retourne STRING
// Change un paramètre dans l'URL via STRING_QUERY
function changeParameterRequestURL($a, $b)
{
parse_str($a, $d);
foreach($b as $k => $v)
{
$d[$k] = $v;
}
$d = http_build_query($d);
return $d;
}
// Retourne HTML
// Affiche une notification
function showNotification($a, $b, $c = false)
{
$r = "<div class='notification ".$b."'><p>";
if($c) $r.="<i class='".$c."'></i> ";
$r.= $a."</p></div>";
return $r;
}
//=== Ajoute les fichiers necessaires (modules/plugins) dans les endroits appropriés (JS en bas de page et le reste dans le head)
function checkFiles($b, $f, $s = FALSE, $g = FALSE)
{
$b = explode('/', $b);
$d = listing_dossier($s.'plugins');
if(!$d) $d=Array();
$toInclude = array(
"Modules" =>
Array(
"modules",
Array(
$b[0]
),
),
"Themes" =>
Array(
"themes",
Array(
$b[1]
),
),
"Plugins" =>
Array(
"plugins",
$d,
),
);
// if admin, do not load MODULES/THEMES
if($s) unset($toInclude['Modules']);
if($s) unset($toInclude['Themes']);
$return = '';
$returnedPosition = Array();
$returnedOB = Array();
foreach($toInclude as $k => $v)
{
foreach($v[1] as $v1k => $v1v)
{
$a = lecture_xml($s.$v[0].'/'.$v1v.'/config.xml');
// if only one file
if(!isset($a['configuration']['fichiers']['fichier'][0]) && isset($a['configuration']['fichiers']['fichier']))
{
$tmp = $a['configuration']['fichiers']['fichier'];
unset($a['configuration']['fichiers']['fichier']);
$a['configuration']['fichiers']['fichier'][0] = $tmp;
}
$nbr = @count($a['configuration']['fichiers']['fichier']);
$activation = @$a['configuration']['activation']['#text'];
// if admin and plugin not activate
if(($s && @$a['configuration']['edition']['admin']['#text']=="TRUE") || !$s)
{
if((!isset($activation) || $activation==1) && $nbr>0)
{
$c = '<!-- '.$k.'/'.$v1v.' -->'."\r\n\t";
if(isset($a['configuration']['fichiers']))
{
for($i=0; $i<$nbr; $i++)
{
$src = $a['configuration']['fichiers']['fichier'][$i]['#text'];
$type = $a['configuration']['fichiers']['fichier'][$i]['@type'];
$script = $a['configuration']['fichiers']['fichier'][$i]['@script'];
if($f==0)
{
switch($type)
{
case 'css':
if($script=="interne") $c .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$s.$v[0].'/'.$v1v.'/css/'.$src.'" />'."\r\n\t";
else if($script=="externe") $c .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$src.'" />'."\r\n\t";
else if($script=="code") $c .= '<style type="text/css">'.$src.'</style>'."\r\n\t";
break;
}
}
elseif($f==1)
{
switch($type)
{
case 'php':
if($script=="interne")
{
ob_start();
include($s.$v[0].'/'.$v1v.'/inc/'.$src);
$returnedPosition[] = $a['configuration']['edition']['position']['#text'];
$returnedOB[] = ob_get_clean();
}
break;
}
}
elseif($f==2)
{
switch($type)
{
case 'js':
if($script=="interne") $c .= '<script src="'.$s.$v[0].'/'.$v1v.'/js/'.$src.'"></script>'."\r\n\t";
else if($script=="externe") $c .= '<script src="'.$src.'"></script>'."\r\n\t";
else if($script=="code") $c .= '<script type="text/javascript">'.$src.'</script>'."\r\n\t";
break;
}
}
}
}
$return .= $c;
}
}
}
}
return Array("Data" => $return, "OB" => @$returnedOB, "Position" => @$returnedPosition);
}
// Generate all HTML and modify in order to add PHP file via plugins
function insertPlugins($e, $r)
{
// DOM
$dom = new DOMDocument();
$domRedefined = new DOMDocument;
@$dom->loadHtml(utf8_decode($e));
// Remove the DOCTYPE and HTML tag previously generated
$body = $dom->getElementsByTagName('html')->item(0);
foreach ($body->childNodes as $child){
$domRedefined->appendChild($domRedefined->importNode($child, true));
}
for($i=0; $i<count($r['OB']);$i++)
{
$a = 'var'.$i;
// Find Position to insert
$$a = $dom->getElementById($r["Position"][$i]);
// Prepare the HTML to insert
$f = $domRedefined->createDocumentFragment();
$f->appendXML($r["OB"][$i]);
$$a = $domRedefined->getElementById($r["Position"][$i]);
$$a->parentNode->insertBefore($f, $$a);
}
return $domRedefined->saveHTML();
}
?> ?>

30
lib/config.lib.php Normal file → Executable file
View file

@ -1,22 +1,21 @@
<?php <?php
/* *************************************************** /* ***************************************************
Listings des variables les plus utilis<EFBFBD>es sous AEOS. Listings des variables les plus utilisées sous AEOS.
****************************************************/ ****************************************************/
header("Content-Type: text/html; charset=UTF-8"); header("Content-Type: text/html; charset=UTF-8");
date_default_timezone_set("Europe/Paris");
//Check Admin //Check Admin
if (preg_match("/admin/", $_SERVER['SCRIPT_FILENAME']) || preg_match("/install/", $_SERVER['SCRIPT_FILENAME'])) if (preg_match("/admin/", $_SERVER['SCRIPT_FILENAME']) || preg_match("/install/", $_SERVER['SCRIPT_FILENAME']))
{ {
$isAdmin = true;
$subdir = "../"; $subdir = "../";
//Sécurisation
foreach ($_GET as $a => $b){$_[$a] = $b;} foreach ($_GET as $a => $b){$_[$a] = $b;}
foreach ($_POST as $a => $b){$_[$a] = $b;} foreach ($_POST as $a => $b){$_[$a] = $b;}
} }
else else
{ {
$isAdmin = false;
$subdir = ""; $subdir = "";
//Sécurisation
foreach ($_GET as $a => $b){$_[$a] = CA20($b);} foreach ($_GET as $a => $b){$_[$a] = CA20($b);}
foreach ($_POST as $a => $b){$_[$a] = CA20($b);} foreach ($_POST as $a => $b){$_[$a] = CA20($b);}
} }
@ -41,25 +40,14 @@ for($i=0; $i<$nbPages; ++$i)
$ordre_pages[$lecture_tmp['page']['ordre']['#text']] = $listing_pages[$i]; $ordre_pages[$lecture_tmp['page']['ordre']['#text']] = $listing_pages[$i];
} }
// Lecture des utilisateurs si Admin
if($isAdmin) $config = lecture_xml($subdir.'data/config.xml');
else $config = lecture_xml($subdir.'data/config.xml', TRUE);
// Lecture des fichiers de bases // Lecture des fichiers de bases
$config = lecture_xml($subdir.'data/config.xml');
$data_pages = $subdir.'data/pages/';
if (isset($redirect)) $id=$redirect; else if(empty($_GET['id'])) $id=$config['configuration']['accueil']['#text']; else $id = $_GET['id']; if (isset($redirect)) $id=$redirect; else if(empty($_GET['id'])) $id=$config['configuration']['accueil']['#text']; else $id = $_GET['id'];
$page = lecture_xml($subdir.'data/pages/'.$lecture_pages[$id].'.xml'); $page = lecture_xml($subdir.'data/pages/'.$lecture_pages[$id].'.xml');
// Lecture des fichiers optionnels des modules
$configModule = lecture_xml($subdir.'modules/'.$page['page']['type']['#text'].'/config.xml');
// Langue
require_once($subdir.'lang/'.detectLang().".php");
//require_once($subdir.'lang/'.AEOS_LANG.".php");
// Admin // Admin
$admin_url = ''; if (isset($_['pid'])) $pid=$_['pid']; else $pid = 1;
if (isset($_['tab'])) $tab=$_['tab']; else $tab = "dashboard"; if (isset($_['sid'])) $sid=$_['sid']; else $sid = 1;
$admin_url .= 'tab='.$tab; ?>
if (isset($_['opt'])) {$opt=$_['opt']; $admin_url .= '&opt='.$opt;} else $opt = NULL;
?>

30
lib/debug.lib.php Normal file → Executable file
View file

@ -3,25 +3,15 @@
// ***************************************************** // *****************************************************
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('log_errors', 1); ini_set('log_errors', 1);
// Retourne STRING
//=== Show an array with pre tag // Retourne sous forme d'arbre l'Array
//=== IN: A for what to show [ARRAY FORMAT] if (!function_exists("view"))
//=== OUT: None [ECHO] {
function view($a) function view($a)
{ {
print_r("<pre>"); print_r('<pre>');
print_r($a); print_r($a);
print_r("</pre>"); print_r('</pre>');
} }
function debug() {
$trace = debug_backtrace();
$rootPath = dirname(dirname(__FILE__));
$file = str_replace($rootPath, '', $trace[0]['file']);
$line = $trace[0]['line'];
$var = $trace[0]['args'][0];
$lineInfo = sprintf('<div><strong>%s</strong> (line <strong>%s</strong>)</div>', $file, $line);
$debugInfo = sprintf('<pre>%s</pre>', print_r($var, true));
print_r($lineInfo.$debugInfo);
} }
?> ?>

0
lib/index.html Normal file → Executable file
View file

53
lib/var.lib.php Normal file → Executable file
View file

@ -1,63 +1,46 @@
<?php <?php
/* /*
Fichier libraire contenant toutes les constantes et/ou variables Fichier libraire contenant toutes les constantes et/ou variables
permettant de g<EFBFBD>rer AEOS. permettant de gérer AEOS.
*/ */
define('EXEC_START_TIME', microtime(true));
define('SECURITY', FALSE); define('SECURITY', FALSE);
// Variables utilis<69>es fr<66>quemments // Variables utilisées fréquemments
define('AEOS_NAME', $config['configuration']['nom_site']['#text']); define('AEOS_NAME', $config['configuration']['nom_site']['#text']);
define('AEOS_DESC', $config['configuration']['description_site']['#text']); define('AEOS_DESC', $config['configuration']['description_site']['#text']);
define('AEOS_THEME', $config['configuration']['theme']['#text']); define('AEOS_THEME', $config['configuration']['theme']['#text']);
define('AEOS_MODULE', $configModule['configuration']['dossier']['#text']); define('AEOS_MAINTENANCE', $config['configuration']['maintenance']['#text']);
define('AEOS_MAINTENANCE', $config['configuration']['maintenanceMode']['#text']==='TRUE'?TRUE:FALSE); define('AEOS_MAINTMSG', $config['configuration']['message']['#text']);
define('AEOS_MAINTMSG', $config['configuration']['maintenanceMessage']['#text']);
define('AEOS_FOOTER', $config['configuration']['footer']['#text']); define('AEOS_FOOTER', $config['configuration']['footer']['#text']);
// Permet le référencement // Permet le référencement
define('AEOS_TITLE', $page['page']['nom']['#text']); define('AEOS_TITLE', $page['page']['nom']['#text']);
// Information administration // Information administration
if($isAdmin && isset($_SESSION['_LOGIN'])) define('AEOS_PASSWORD', $config['configuration']['mdp_admin']['#text']);
{ define('AEOS_LOGIN', $config['configuration']['login_admin']['#text']);
//define('AEOS_PASSWORD', $_SESSION['password']); define('AEOS_MAIL', $config['configuration']['email_admin']['#text']);
define('AEOS_LOGIN', $_SESSION['_LOGIN']);
define('AEOS_MAIL', $config['configuration']['users'][$_SESSION['_LOGIN']]['email']['#text']);
if(!isset($config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']) || $config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']=="")
define('AEOS_AVATAR', "themes/system/images/avatar.png");
else
define('AEOS_AVATAR', $config['configuration']['users'][$_SESSION['_LOGIN']]['avatar']['#text']);
define('AEOS_FIRSTNAME', $config['configuration']['users'][$_SESSION['_LOGIN']]['firstname']['#text']);
define('AEOS_LASTNAME', $config['configuration']['users'][$_SESSION['_LOGIN']]['lastname']['#text']);
define('AEOS_ROLE', $config['configuration']['users'][$_SESSION['_LOGIN']]['role']['#text']);
define('AEOS_USER_LANG', $config['configuration']['users'][$_SESSION['_LOGIN']]['language']['#text']);
define('AEOS_LANG', $config['configuration']['lang']['#text']);
}
// Variable d'URL Rewriting // Variable d'URL Rewriting
define('AEOS_URL', $_SERVER['SERVER_NAME']); define('AEOS_URL', $_SERVER['SERVER_NAME']);
//define('AEOS_LANG', $config['configuration']['lang']['#text']); define('AEOS_LANG', $config['configuration']['lang']['#text']);
define('AEOS_VERSION', $config['configuration']['version']['#text']); define('AEOS_VERSION', $config['configuration']['version']['#text']);
define('AEOS_BRANCH', $config['configuration']['branch']['#text']);
define('AEOS_CODENAME', $config['configuration']['codename']['#text']);
define('AEOS_UPDATE', $config['configuration']['update']['#text']);
define('AEOS_PATH', dirname($_SERVER["REQUEST_URI"])); define('AEOS_PATH', dirname($_SERVER["REQUEST_URI"]));
define('AEOS_REWMODE', $config['configuration']['urlrewriting']['#text']==='TRUE'?TRUE:FALSE); define('AEOS_REW', $config['configuration']['urlrewriting_key']['#text']);
define('AEOS_REWKEY', $config['configuration']['urlrewriting_key']['#text']);
define('HOME_PAGE', $config['configuration']['accueil']['#text']); define('HOME_PAGE', $config['configuration']['accueil']['#text']);
define('DATA_PAGES', $subdir.'data/pages/'); define('DATA_PAGES', $subdir.'data/pages/');
define('DATA_TRASH', $subdir.'data/corbeille/');
define('LAST_KEY', max(array_keys($lecture_pages))+1); define('LAST_KEY', max(array_keys($lecture_pages))+1);
define('LAST_ORDER', max(array_keys($ordre_pages))+1); define('LAST_ORDER', max(array_keys($ordre_pages))+1);
define('DEBUG_MODE', $config['configuration']['debugMode']['#text']==='TRUE'?TRUE:FALSE); define('DEBUG_MODE', $config['configuration']['debug']['#text']==='TRUE'?TRUE:FALSE);
('DEBUG_MODE')?include($subdir.'lib/debug.lib.php'):FALSE; ('DEBUG_MODE')?include($subdir.'lib/debug.lib.php'):FALSE;
define('AEOS_REAL_URL', 'https://nnsprod.com/aeos'); define('UPDATE', $config['configuration']['update']['#text']);
define('AEOS_REAL_URL', 'http://nnsprod.com/aeos');
define('URL_CHECK_UPDATE', AEOS_REAL_URL.'/update/notifications.xml'); define('URL_CHECK_UPDATE', AEOS_REAL_URL.'/update/notifications.xml');
//Admin //Admin
//define('ADMIN_REQUEST_URL', 'index.php?'.$_SERVER["QUERY_STRING"]); define('ADMIN_REQUEST_URL', 'index.php?pid='.$pid.'&sid='.$sid);
define('ADMIN_REQUEST_URL', 'index.php?'.$admin_url);
$DATA_PAGES = $data_pages;
unset($page); unset($page);
?> ?>

22
lib/wysiwyg.lib.php Normal file → Executable file
View file

@ -1,24 +1,6 @@
<?php <?php
// Script owEditor/pell // Script owEditor
if (isset($_['input']))
{
$currentContent=stripslashes($_['input']);
}
else
{
$currentContent=@$page['page']['contenu']['#text'];
}
?> ?>
<script type="text/javascript"> <script type="text/javascript">
var editor = window.pell.init({ new owEditor({fullPanel : true, maxHeight : 230, maxWidth : 700}).panelInstance('input');
element: document.getElementById('editor'),
defaultParagraphSeparator: 'p',
onChange: function (html) {
document.getElementById('html-output').textContent = html
},
})
document.getElementById("pell-id").innerHTML = `<?php echo $currentContent; ?>`;
</script> </script>

2
modules/.htaccess Executable file
View file

@ -0,0 +1,2 @@
Options -Indexes
deny from all

2
modules/owSimple/base.php Normal file → Executable file
View file

@ -4,4 +4,4 @@ Fichier BASE du module Simple.
************************************* */ ************************************* */
echo $contenu['page']['contenu']['#text']; echo $contenu['page']['contenu']['#text'];
?> ?>

12
modules/owSimple/base.xml Normal file → Executable file
View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<page> <page>
<id /> <id>0</id>
<nom /> <nom>nom</nom>
<contenu /> <contenu>contenu</contenu>
<type>owSimple</type> <type>owSimple</type>
<ordre /> <ordre>0</ordre>
<etat /> <etat>0</etat>
</page> </page>

7
modules/owSimple/config.xml Normal file → Executable file
View file

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<nom>owSimple</nom> <nom>owSimple</nom>
<dossier>owSimple</dossier> <dossier>owsimple</dossier>
<description>Module d'écriture de page simple.</description> <description>Ajouter une page de texte simple.</description>
<version>1.3</version> <version>1.2</version>
<multilang>1</multilang>
<auteurs>NNS Production</auteurs> <auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email> <email>contact@nekonosekai.com</email>
</configuration> </configuration>

98
modules/owSimple/edition.php Normal file → Executable file
View file

@ -2,77 +2,67 @@
/* ************************************* /* *************************************
Titre: Module Simple Titre: Module Simple
Auteur: NNS Production Auteur: NNS Production
Version: 1.60 Version: 1.2
----------- Changelog ------------------ ----------- Changelog ------------------
14/08/2011 - Modification d'une variable défectueuse. 14/08/2011 - Modification d'une variable défectueuse.
05/06/2013 - Changement de la structure pour plus de lisibilité 05/06/2013 - Changement de la structure pour plus de lisibilité
03/10/2018 - Réécriture complète du module
13/07/1010 - Réécriture complète du module et changement du WYSIWYG
************************************* */ ************************************* */
if(checkMultilangModuleAvailable(donnee_xml($subdir."modules/".basename(__DIR__)."/config.xml", 'multilang'))) require_once($subdir.'modules/'.basename(__DIR__).'/lang/'.detectLang().".php");
if (@$_['Send']==1) if (@$_['Send']==1)
{ {
if(checkEmptyField($_['titre'])) if (empty($_['titre']) || $_['titre']=="") echo "<div class='update_valide'><span class='erreur'>Merci d'indiquer un nom de page.</span></div>";
{
echo showNotification($lang_owSimple['_incorrectTitle'], 'error', 'icon-emo-unhappy');
}
else else
{ {
switch($_['act']) switch($_['action'])
{ {
case 'new':
$xml_file = LAST_KEY.'#'.cleanName($_['titre'].'.xml'); case 'ajouter':
$xml_file = cleanName(LAST_KEY.'#'.str_replace("\'", " ", $_['titre']).'.xml');
copy('../modules/'.$_['type'].'/base.xml', '../data/pages/'.$xml_file); copy('../modules/'.$_['type'].'/base.xml', '../data/pages/'.$xml_file);
$input = str_replace("&nbsp;", "", preg_replace("<<br>>", "<br />", $_['input'])); ecriture_xml('../data/pages/'.$xml_file, 'nom', $_['titre']);
(@$_['affichage']=="on")?$display=1:$display=0; $input = preg_replace("<<br>>", "<br />", $_['input']);
ecriture_xml('../data/pages/'.$xml_file, array('page/ordre'=>LAST_ORDER, 'page/id'=>LAST_KEY, 'page/nom'=>$_['titre'], 'page/affichage'=>$display, 'page/contenu#CDATA'=>$input)); $input = str_replace("&nbsp;", "", $_['input']);
//$header = changeParameterRequestURL($_SERVER['QUERY_STRING'], array('act'=>'edit', 'id'=>LAST_KEY)); ecriture_xml('../data/pages/'.$xml_file, 'contenu', $input, TRUE);
//header('Location: index.php?'.$header); ecriture_xml('../data/pages/'.$xml_file, 'id', LAST_KEY);
ecriture_xml('../data/pages/'.$xml_file, 'ordre', LAST_ORDER);
(@$_['affichage']=="on")?ecriture_xml('../data/pages/'.$xml_file, 'etat', 1):ecriture_xml('../data/pages/'.$xml_file, 'etat', 0);
break; break;
case 'edit': case 'modifier':
$xml_file = $_['id'].'#'.cleanName($_['titre'].'.xml'); $xml_file = cleanName($_['id'].'#'.str_replace("\'", " ", $_['titre']).'.xml');
rename('../data/pages/'.$lecture_pages[$_['id']].'.xml', '../data/pages/'.$xml_file); rename('../data/pages/'.$lecture_pages[$_['id']].'.xml', '../data/pages/'.$xml_file);
//$input = str_replace("&nbsp;", "", preg_replace("<<br>>", "<br />", $_['input'])); ecriture_xml('../data/pages/'.$xml_file, 'nom', $_['titre']);
$input = $_['input']; $input = preg_replace("<<br>>", "<br />", $_['input']);
ecriture_xml('../data/pages/'.$xml_file, array('page/nom'=>$_['titre'], 'page/contenu#CDATA'=>$input)); $input = str_replace("&nbsp;", "", $_['input']);
ecriture_xml('../data/pages/'.$xml_file, 'contenu', $input, TRUE);
break; break;
} }
echo showNotification($lang_owSimple['_pageSaved'], 'valide', 'icon-emo-happy');
} }
echo "<div class='update_valide'><span class='valide'>Page sauvegardée</span></div>";
} }
if(!isset($_['Send']) || $_['act']=='edit') if($_['action']=='modifier') { ?><h3>Edition de la page <i><?php echo $page['page']['nom']['#text']; ?></i></h3><?php } ?>
{ <form action="<?php echo ADMIN_REQUEST_URL; ?>&amp;action=<?php echo $_['action']; if($_['action']=="modifier"){echo "&amp;id=".$lecture_pages[$_['id']];}?>" method="POST">
if($_['act']=='edit'){ ?><h3><?php echo $lang_owSimple['_editPage']; ?></h3><?php } <h4>Nom de la page</h4>
else { ?><h3><?php echo $lang_owSimple['_addPage']; ?></h3><?php } ?> <input type="text" name="titre" class="input_text" value="<?php if(isset($_['titre'])){ echo stripslashes($_['titre']); } else { echo @$page['page']['nom']['#text']; } ?>" />
<div id="Module">
<form action="<?php echo ADMIN_REQUEST_URL."&amp;act=".$_['act']; if($_['act']=="edit"){echo "&amp;id=".$lecture_pages[$_['id']];}?>" method="POST"> <h4>Contenu de la page</h4>
<input type="text" placeholder="<?php echo $lang_owSimple['_fillTitle']; ?>" name="titre" class="field_basic" value="<?php if(isset($_['titre'])){ echo stripslashes($_['titre']); } else { echo @$page['page']['nom']['#text']; } ?>" /> <div class="owEditor">
<textarea id="input" name="input" >
<div class="owEditor"> <?php if(isset($_['input'])){ echo stripslashes($_['input']); } else { echo @$page['page']['contenu']['#text']; } ?>
<div id="editor" class="pell" ></div> </textarea>
<textarea name="input" id="html-output"></textarea>
</div><br />
<input type="submit" value="<?php echo $lang_owSimple['_save']; ?>" class="input_basic" />
<a href="index.php?tab=pages">
<input type="button" value="<?php echo $lang_owSimple['_cancel']; ?>" class="input_basic" />
</a>
<input type="hidden" name="type" value="<?php echo @$_['type']; ?>" />
<input type="hidden" name="Send" value="1" />
<input type="hidden" name="sid" value="1" />
<?php include('../lib/wysiwyg.lib.php'); ?>
</form>
</div> </div>
<div id="Options" class="Bloc">
<p> <input type="submit" value="Sauvegarder" class="input_button" />
<?php echo $lang_owSimple['_noMoreOption']; ?> <a href="index.php?pid=<?php echo $_['pid']; ?>">
</p> <input type="button" value="Annuler" class="input_button" />
</div><?php </a>
} ?>
<input type="hidden" name="type" value="<?php echo @$_['type']; ?>" />
<input type="hidden" name="Send" value="1" />
<input type="hidden" name="sid" value="1" />
<?php include('../lib/wysiwyg.lib.php'); ?>
</form>

View file

@ -1,14 +0,0 @@
<?php
$lang_owSimple = array(
"language" => "Français",
"_incorrectTitle" => "Merci d'indiquer un nom de page.",
"_pageSaved" => "Page sauvegardée",
"_editPage" => "Modification de la page",
"_addPage" => "Ajouter une nouvelle page",
"_fillTitle" => "Saisissez un titre pour cette page",
"_cancel" => "Annuler",
"_save" => "Sauvegarder",
"_noMoreOption" => "Aucune option supplémentaire disponible sur ce module.",
);
?>

View file

@ -1,14 +0,0 @@
<?php
$lang_owSimple = array(
"language" => "Français",
"_incorrectTitle" => "Merci d'indiquer un nom de page.",
"_pageSaved" => "Page sauvegardée",
"_editPage" => "Modification de la page",
"_addPage" => "Ajouter une nouvelle page",
"_fillTitle" => "Saisissez un titre pour cette page",
"_cancel" => "Annuler",
"_save" => "Sauvegarder",
"_noMoreOption" => "Aucune option supplémentaire disponible sur ce module.",
);
?>

186
readme.md
View file

@ -1,186 +0,0 @@
<div align="center">
# AEOS
### Un CMS léger, portable et sans base de données
![Version](https://img.shields.io/badge/version-0.6-2f81f7?style=for-the-badge)
![Statut](https://img.shields.io/badge/statut-développement_actif-2ea44f?style=for-the-badge)
![PHP](https://img.shields.io/badge/PHP-777BB4?style=for-the-badge&logo=php&logoColor=white)
![XML](https://img.shields.io/badge/XML-ff6600?style=for-the-badge&logo=xml&logoColor=white)
![Git](https://img.shields.io/badge/versioning-Git-F05032?style=for-the-badge&logo=git&logoColor=white)
![Base de données](https://img.shields.io/badge/base_de_données-aucune-8b5cf6?style=for-the-badge)
![Licence](https://img.shields.io/badge/licence-GNU_GPL-f0b429?style=for-the-badge)
**AEOS est un CMS libre, léger, multilingue et portable, conçu pour fonctionner simplement sur un hébergement PHP sans base de données.**
</div>
---
## 📖 À propos
**AEOS** est un système de gestion de contenu écrit en PHP dont les données et la configuration sont enregistrées dans des fichiers XML.
Le projet privilégie une installation simple, une architecture lisible et une grande portabilité : un site AEOS peut être copié d'un hébergement à un autre sans migration de base de données ni procédure de déploiement complexe.
AEOS reste volontairement compact. Son objectif n'est pas de rivaliser avec les vastes écosystèmes des CMS généralistes, mais de proposer un moteur **autonome, compréhensible et extensible**, permettant de créer et administrer un site sans dépendances superflues.
---
## ✨ Fonctionnalités
- gestion des pages et des contenus depuis une interface d'administration ;
- stockage des contenus et de la configuration au format XML ;
- fonctionnement sans serveur de base de données ;
- prise en charge de plusieurs langues avec langue par défaut et mécanisme de repli ;
- détection automatique de la langue du navigateur ;
- système de thèmes, modules et plugins ;
- réécriture et routage des URL configurables ;
- mode maintenance et mode débogage ;
- corbeille pour les contenus supprimés ;
- filtrage centralisé des données entrantes ;
- en-têtes de sécurité et encodage UTF-8 ;
- moteur de recherche intégré aux contenus de type FAQ.
> Certaines fonctionnalités peuvent différer ou être absentes dans les anciennes versions conservées dans le dépôt.
---
## 🧭 Philosophie
AEOS repose sur quelques principes simples :
- **Portable** — les fichiers d'un site peuvent être déplacés sans exporter ni importer une base de données.
- **Léger** — le moteur limite les dépendances et conserve une architecture compacte.
- **Lisible** — le code, les fichiers de configuration et les contenus restent accessibles et compréhensibles.
- **Modulaire** — les fonctionnalités et la présentation sont séparées entre modules, plugins et thèmes.
- **Autonome** — AEOS est pensé pour rester exploitable sur des hébergements PHP classiques, y compris les offres les plus modestes.
---
## 🧰 Prérequis
AEOS nécessite :
- un serveur web compatible avec PHP ;
- PHP avec la prise en charge de XML ;
- les droits d'écriture nécessaires dans les répertoires de données utilisés par AEOS ;
- la réécriture d'URL du serveur web si cette fonctionnalité est activée.
Les versions exactes de PHP prises en charge peuvent varier selon la version d'AEOS utilisée.
---
## 🚀 Installation
1. Téléchargez la version souhaitée d'AEOS.
2. Copiez son contenu dans le répertoire public de votre hébergement.
3. Ouvrez le site dans un navigateur.
4. Suivez l'assistant présent dans le répertoire `install`.
5. Vérifiez les droits d'écriture demandés pendant l'installation.
Comme AEOS n'utilise pas de base de données, aucune création de base, importation SQL ou configuration d'un serveur MySQL/MariaDB n'est nécessaire.
---
## 🗂️ Structure du projet
```text
admin/ Interface d'administration
core/ Cœur et fonctionnement interne d'AEOS
data/ Configuration et contenus XML
install/ Assistant d'installation
lang/ Traductions générales
lib/ Bibliothèques du moteur
modules/ Types de contenus et fonctionnalités
plugins/ Extensions complémentaires
themes/ Présentation du site
```
Les modules et les thèmes disposent de leur propre configuration et peuvent inclure leurs fichiers d'édition, leurs ressources internes et leurs traductions.
---
## 🌍 Multilingue
AEOS peut sélectionner une langue à partir :
1. de la langue explicitement demandée ;
2. de la langue détectée dans le navigateur ;
3. de la langue par défaut configurée pour le site ;
4. d'une langue disponible utilisée comme solution de repli.
La configuration, les pages, les modules et les thèmes peuvent ainsi proposer leurs contenus dans plusieurs langues sans dupliquer l'ensemble du site.
---
## 🛡️ Sécurité
AEOS centralise le traitement des entrées publiques afin que les paramètres reçus ne soient pas employés directement par la logique applicative.
Le moteur applique également des en-têtes de sécurité et peut restreindre l'accès direct à certains fichiers selon la configuration du serveur web.
La protection des fichiers XML dépend néanmoins du serveur utilisé. Une configuration adaptée doit être mise en place sur Apache, Nginx ou tout autre serveur afin d'empêcher leur consultation directe depuis le Web.
---
## 🕰️ Historique des versions
AEOS est un projet ancien dont plusieurs étapes du développement ont été conservées et restaurées dans ce dépôt.
| Version | État |
| :--- | :--- |
| `v0.1a` | Première version alpha archivée |
| `v0.1.1a` | Version historique |
| `v0.2` | Version historique |
| `v0.3` | Version historique |
| `v0.4` | Version historique |
| `v0.5` | Version historique |
| `v0.6` | Version actuelle |
Les différentes versions sont conservées sous forme de **tags Git**, permettant de consulter précisément l'état du projet à chaque étape de son développement.
La branche **`main`** représente la base de développement actuelle.
Les anciennes versions sont publiées à des fins de **conservation, de documentation et de suivi de l'évolution du projet**. Elles ne sont pas nécessairement adaptées à une utilisation en production.
---
## 🧪 État du développement
Le développement actuel se poursuit sur la branche **`main`**, avec la version **0.6** comme base de travail.
Les travaux portent notamment sur :
- l'amélioration du système multilingue ;
- la recherche et la gestion des contenus ;
- la portabilité ;
- la sécurité des fichiers de données ;
- la modernisation et l'optimisation progressive du moteur.
L'objectif reste de faire évoluer AEOS sans sacrifier ce qui constitue son identité : **un moteur simple, léger, lisible et indépendant d'une base de données**.
---
## 🤝 Contribution
Les rapports de bugs, propositions d'amélioration et contributions sont les bienvenus via les tickets et demandes de fusion du dépôt.
Lors d'une contribution, merci de respecter l'architecture existante, l'ordre de chargement du cœur et les mécanismes internes de sécurisation des entrées.
---
## ⚖️ Licence
AEOS est un logiciel libre distribué sous licence **GNU General Public License**.
Consultez le fichier `LICENSE` du dépôt pour connaître les conditions complètes de redistribution et de modification.
---
<div align="center">
**AEOS** — *Simple. Portable. Sans base de données.*
</div>

8
themes/defaut/base.php Normal file → Executable file
View file

@ -3,17 +3,19 @@
<div id="General"> <div id="General">
<div id="Header"> <div id="Header">
<h1><?php echo AEOS_NAME; ?></h1> <h1><?php echo AEOS_NAME; ?></h1>
<h2><?php echo AEOS_DESC; ?></h2> <p><?php echo AEOS_DESC; ?></p>
<ul class="Menu"> <ul class="Menu">
<?php require_once('core/menu.php'); ?> <?php require_once('core/menu.php'); ?>
</ul> </ul>
</div> </div>
<div id="Corps"> <div id="Corps">
<p>
<?php require_once('core/base.php'); ?> <?php require_once('core/base.php'); ?>
</p>
</div> </div>
<div id="Footer"> <div id="Footer">
<p> <p>
<?php require_once('core/footer.php'); ?> <?php require_once('core/footer.php'); ?>

0
themes/defaut/config.xml Normal file → Executable file
View file

0
themes/defaut/edition.php Normal file → Executable file
View file

0
themes/defaut/images/favicon_aeos.ico Normal file → Executable file
View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

BIN
themes/defaut/images/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

26
themes/defaut/maintenance.php Normal file → Executable file
View file

@ -1,24 +1,12 @@
<?php (SECURITY)?die():FALSE; ?> <?php (SECURITY)?die():FALSE; ?>
<!-- Maintenance --> <!-- Maintenance -->
<body> <body>
<div id="General"> <div id="content">
<div id="Header"> <div id="center">
<h1><?php echo AEOS_NAME; ?></h1> <!-- Affichage du message en cas de maintenance -->
<h2><?php echo AEOS_DESC; ?></h2> <p><?php echo AEOS_MAINTMSG; ?></p>
</div> </div>
<div id="left"></div>
<div id="Corps"> </div>
<!-- Affichage du message en cas de maintenance -->
<p><?php echo AEOS_MAINTMSG; ?></p>
</div>
<div id="Footer">
<p>
<?php require_once('core/footer.php'); ?>
</p>
</div>
</div>
</body> </body>
</html> </html>

0
themes/defaut/modification.xml Normal file → Executable file
View file

87
themes/defaut/styles.css Normal file → Executable file
View file

@ -1,37 +1,86 @@
@import url(https://fonts.googleapis.com/css?family=Roboto:300);
* {margin:0; padding:0;} * {margin:0; padding:0;}
a {color:#4f97ea; text-decoration:none;}
body,html body,html
{ {
font-family: "Roboto", sans-serif; font-family: Arial, sans-serif;
font-size: 12px; font-size: 12px;
color: #666; color: #666;
background:#ecf0f1;
} }
#General {width:100%;}
#Header {width:100%; margin:0 auto 0; border-bottom: 5px solid #D8D8D8; background: #4f97ea;} #Header
#Header h1, #Header h2 {width:60%; margin:0 auto 0; color: #fff; font-weight: normal;} {
#Header h1 {padding:20px 0 0 0;} overflow: hidden;
#Header h2 {font-size:inherit; padding:0 0 20px 0;} margin-bottom: 15px;
border-bottom: 5px solid #D8D8D8;
background: #3cbae3; /* Old browsers */
background: -moz-linear-gradient(top, #3cbae3 0%, #1389cb 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3cbae3), color-stop(100%,#1389cb)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #3cbae3 0%,#1389cb 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #3cbae3 0%,#1389cb 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #3cbae3 0%,#1389cb 100%); /* IE10+ */
background: linear-gradient(to bottom, #3cbae3 0%,#1389cb 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3cbae3', endColorstr='#1389cb',GradientType=0 ); /* IE6-9 */
}
#Header h1{width: 960px; color: #fff; font-weight: normal; margin: 30px auto 5px auto;}
#Header p {width: 960px; color: #fff; margin: 5px auto 15px auto;}
ul.Menu {width:60%; margin: 0 auto 0; list-style-type: none; background: rgba(255, 255, 255, 0.3); overflow: hidden;} ul.Menu
ul.Menu li a {color: #fff; padding: 10px; display: block;} {
width: 960px;
margin: 0 auto;
list-style-type: none;
background: rgba(255, 255, 255, 0.3);
overflow: hidden;
}
ul.Menu li a
{
color: #fff;
text-decoration: none;
padding: 10px;
display: block;
}
ul.Menu li{float: left;margin-right: 5px;} ul.Menu li{float: left;margin-right: 5px;}
ul.Menu li a:hover{color: #4b537a;} ul.Menu li a:hover{color: #4b537a;}
#Corps {width:60%; margin: 0 auto 30px; background: #FFFFFF; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);} #Corps
#Corps p:first-child {padding-top:15px;} {
#Corps p {padding:0 15px 0 15px; margin-bottom:15px;} width: 960px;
#Corps p:last-child {padding-bottom:15px;} margin: 0 auto 0;
margin-bottom: 30px;
overflow: hidden;
}
#Footer{clear: both; text-align: center;} #Footer{clear: both; text-align: center;}
#Footer a {color:#33AFDE; text-decoration:none;}
#DeadZone {position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: black; z-index:1001; -moz-opacity: 0.5; opacity:.50; filter: alpha(opacity=50); overflow:hidden;} #DeadZone
#LifeZone {position: absolute; top: 25%; left: 50%; width: 350px; height: 295px; padding: 16px; border: 3px solid #1367BB; background-color: white; z-index:1002; margin:0 0 0 -175px;} {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: black;
z-index:1001;
-moz-opacity: 0.5;
opacity:.50;
filter: alpha(opacity=50);
overflow:hidden;
}
#LifeZone
{
position: absolute;
top: 25%;
left: 50%;
width: 350px;
height: 295px;
padding: 16px;
border: 3px solid #1367BB;
background-color: white;
z-index:1002;
margin:0 0 0 -175px;
}
#LifeZone h1 {font-size:23px; color:#1367BB; margin:0 0 30px 0;} #LifeZone h1 {font-size:23px; color:#1367BB; margin:0 0 30px 0;}
#LifeZone p {text-align:center; line-height:14px;} #LifeZone p {text-align:center; line-height:14px;}
#LifeZone img {margin:0 0 20px 0;} #LifeZone img {margin:0 0 20px 0;}
#LifeZone a {color:#1367BB; text-decoration:none;} #LifeZone a {color:#1367BB; text-decoration:none;}

161
themes/main/base.php Executable file
View file

@ -0,0 +1,161 @@
<?php (SECURITY)?die():FALSE; ?>
<script type="text/javascript" src="themes/main/script/script.js"></script>
</head>
<body>
<div id="General">
<div id="Header">
<h1>
<a href="#">
<span class="Bracket1"><</span>
<span class="Title"><?php echo AEOS_NAME; ?> </span>
<span class="Bracket2">/></span>
-- Version <?php echo AEOS_VERSION; ?>
</a>
</h1>
<ul class="Menu">
<?php require_once('core/menu.php'); ?>
</ul>
</div>
<div id="SurHeader">
<div id="Presentation">
<p>
<?php require_once('core/base.php'); ?>
</p>
</div>
<?php
if($_['id']==1)
{
?>
<div id="Gallery">
<div id="Slider">
<ul>
<li><img src="data/images/1.jpg" width="560" height="320" alt="Image One" /></li>
<li><img src="data/images/2.jpg" width="560" height="320" alt="Image Two" /></li>
<li><img src="data/images/3.jpg" width="560" height="320" alt="Image Three" /></li>
<li><img src="data/images/4.jpg" width="560" height="320" alt="Image Four" /></li>
</ul>
</div>
<div class="sliderbutton" id="slideleft" ></div>
<div class="sliderbutton" id="slideright" ></div>
<ul id="pagination" class="pagination">
<li onclick="slideshow.pos(0)"></li>
<li onclick="slideshow.pos(1)"></li>
<li onclick="slideshow.pos(2)"></li>
<li onclick="slideshow.pos(3)"></li>
</ul>
<script type="text/javascript">
var slideshow=new TINY.slider.slide('slideshow',{
id:'Slider',
auto:4,
resume:false,
vertical:false,
navid:'pagination',
activeclass:'current',
position:0,
rewind:false,
elastic:false,
left:'slideleft',
right:'slideright'
});
</script>
</div>
<?php
}
?>
</div>
<div id="Corps">
<ul class="Colonne1">
<li>Léger et Rapide</li>
<li>
Technologies PHP5 / XML<br />
Poids : ~ 120ko
</li>
<li>Modulable</li>
<li>
Gestion de thèmes, modules <br />
et composants.
</li>
<li>Base de Donnée XML</li>
<li>
Profitez de toute la puissance <br />
du XML !
</li>
</ul>
<ul class="Colonne2">
<li>Sécurisé</li>
<li>
Elaboré avec le plus de <br />
précaution en terme de sécurité
</li>
<li>Support</li>
<li>
Une équipe et une <br />
communauté à votre écoute
</li>
<li>Compatible W3C</li>
<li>
Produit respectant les<br />
conventions du W3C
</li>
</ul>
<ul class="Download">
<li><a href="#">Soutenez-nous !</a></li>
<li><a href="#"><h2>DEMO</h2></a></li>
<li><a href="#"><h2>TELECHARGEMENT</h2></a></li>
<li>Dernière version Stable 0.4</li>
<li><a href="#">Release Notes</a> (2013-02-07)</li>
<li>« Pas plus simple »</li>
<li>#Dev3</li>
</ul>
</div>
<div id="Promotion">
<h5>
Compatible avec
<br />
<img src="themes/main/images/ico_iphone.png" alt="iDevices" /> <span class="DarkGrey">iDevices</span> et <span class="Green">Android</span> <img src="themes/main/images/ico_android.png" alt="Android" />
</h5>
<div>
<img src="themes/main/images/promotion.jpg" alt="Promotion" />
</div>
</div>
<div id="Distribution">
<a href="#">NNS</a>
<img src="themes/main/images/little_heart.png" alt="LOVES" />
<a href="#">PRODUCTION</a>
</div>
<div id="Footer">
<div id="SubFooter">
<h6>
<a href="#">< /></a><br />
<img src="themes/main/images/staff.png" alt="The Team" />
</h6>
<ul>
<li><a href="#">AEOS</a></li>
<li><a href="#">Fonctionnalités</a></li>
<li><a href="#">Nouveautés</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Forum</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Téléchargement</a></li>
</ul>
<p>
<a href="#"><img src="themes/main/images/ico_twitter.png" alt="Twitter" /></a>
<a href="#"><img src="themes/main/images/ico_facebook.png" alt="Facebook" /></a>
<a href="#"><img src="themes/main/images/ico_google.png" alt="Google+" /></a>
<a href="#"><img src="themes/main/images/ico_rss.png" alt="Flux RSS" /></a>
<br /><br />
<?php require_once('core/footer.php'); ?>
</p>
</div>
</div>
</div>
</body>
</html>

108
themes/main/base.php~ Executable file
View file

@ -0,0 +1,108 @@
<?php (SECURITY)?die():FALSE; ?>
<script type="text/javascript" src="themes/main/script/script.js"></script>
</head>
<body>
<div id="General">
<div id="Header">
<h1>
<span class="Bracket1"><</span>
<?php echo AEOS_NAME; ?>
<span class="Bracket2">/></span>
</h1>
<p>-- <?php echo AEOS_DESC; ?></p>
<ul class="Menu">
<?php require_once('core/menu.php'); ?>
</ul>
</div>
<div id="SurHeader">
<p>
<?php require_once('core/base.php'); ?>
</p>
<div id="Gallery">
<div class="sliderbutton" id="slideleft" ></div>
<div id="Slider">
<ul>
<li><img src="data/images/1.jpg" width="560" height="260" alt="Image One" /></li>
<li><img src="data/images/2.jpg" width="560" height="260" alt="Image Two" /></li>
<li><img src="data/images/3.jpg" width="560" height="260" alt="Image Three" /></li>
<li><img src="data/images/4.jpg" width="560" height="260" alt="Image Four" /></li>
</ul>
</div>
<div class="sliderbutton" id="slideright" ></div>
<ul id="pagination" class="pagination">
<li onclick="slideshow.pos(0)"></li>
<li onclick="slideshow.pos(1)"></li>
<li onclick="slideshow.pos(2)"></li>
<li onclick="slideshow.pos(3)"></li>
</ul>
<script type="text/javascript">
var slideshow=new TINY.slider.slide('slideshow',{
id:'Slider',
auto:4,
resume:false,
vertical:false,
navid:'pagination',
activeclass:'current',
position:0,
rewind:false,
elastic:true,
left:'slideleft',
right:'slideright'
});
</script>
</div>
</div>
<div id="Corps">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<div id="Promotion">
<h5></h5>
<img src="" alt="" />
</div>
<div id="Distribution">
</div>
<div id="Footer">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<p>
<?php require_once('core/footer.php'); ?>
</p>
</div>
</div>
</body>
</html>

10
themes/main/config.xml Executable file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<id>3</id>
<nom>AEOS - Main</nom>
<dossier>main</dossier>
<description>Thème de base d'AEOS Officiel</description>
<version>1.0.0</version>
<auteurs>NNS Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

4
themes/main/edition.php Executable file
View file

@ -0,0 +1,4 @@
<?php
(SECURITY)?die():FALSE;
echo "<span class='erreur'>Aucune modification possible sur ce thème.</span>";
?>

BIN
themes/main/images/background.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
themes/main/images/bg.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
themes/main/images/ico_bio.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

BIN
themes/main/images/ico_com.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
themes/main/images/ico_gift.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

BIN
themes/main/images/ico_google.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
themes/main/images/ico_graph.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
themes/main/images/ico_iphone.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
themes/main/images/ico_lego.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

BIN
themes/main/images/ico_rss.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
themes/main/images/ico_secu.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
themes/main/images/icons.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
themes/main/images/left.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Before After
Before After

BIN
themes/main/images/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
themes/main/images/logo_git.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Some files were not shown because too many files have changed in this diff Show more