Merge with 6.0.3

This commit is contained in:
Shannon Deminick
2013-03-11 21:56:47 +06:00
101 changed files with 2140 additions and 662 deletions

View File

@@ -1222,6 +1222,40 @@ namespace Umbraco.Core.Configuration
//}
}
private static MacroErrorBehaviour? _macroErrorBehaviour;
/// <summary>
/// This configuration setting defines how to handle macro errors:
/// - Inline - Show error within macro as text (default and current Umbraco 'normal' behavior)
/// - Silent - Suppress error and hide macro
/// - Throw - Throw an exception and invoke the global error handler (if one is defined, if not you'll get a YSOD)
/// </summary>
/// <value>MacroErrorBehaviour enum defining how to handle macro errors.</value>
public static MacroErrorBehaviour MacroErrorBehaviour
{
get
{
if (_macroErrorBehaviour == null)
{
try
{
var behaviour = MacroErrorBehaviour.Inline;
var value = GetKey("/settings/content/MacroErrors");
if (value != null)
{
Enum<MacroErrorBehaviour>.TryParse(value, true, out behaviour);
}
_macroErrorBehaviour = behaviour;
}
catch (Exception ex)
{
LogHelper.Error<UmbracoSettings>("Could not load /settings/content/MacroErrors from umbracosettings.config", ex);
_macroErrorBehaviour = MacroErrorBehaviour.Inline;
}
}
return _macroErrorBehaviour.Value;
}
}
/// <summary>
/// Configuration regarding webservices

View File

@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
@@ -10,6 +8,7 @@ using Umbraco.Core.Persistence.Mappers;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSix;
using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSixZeroOne;
using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Persistence.UnitOfWork;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Publishing;
@@ -68,18 +67,17 @@ namespace Umbraco.Core
//create the ApplicationContext
ApplicationContext = ApplicationContext.Current = new ApplicationContext(dbContext, serviceContext);
//initialize the DatabaseContext
dbContext.Initialize();
InitializeApplicationEventsResolver();
InitializeResolvers();
//initialize the DatabaseContext
dbContext.Initialize();
//now we need to call the initialize methods
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x => x.OnApplicationInitialized(UmbracoApplication, ApplicationContext));
_isInitialized = true;
return this;
@@ -184,6 +182,12 @@ namespace Umbraco.Core
RepositoryResolver.Current = new RepositoryResolver(
new RepositoryFactory());
SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver(
PluginManager.Current.ResolveSqlSyntaxProviders())
{
CanResolveBeforeFrozen = true
};
CacheRefreshersResolver.Current = new CacheRefreshersResolver(
() => PluginManager.Current.ResolveCacheRefreshers());

View File

@@ -337,22 +337,23 @@ namespace Umbraco.Core
internal void Initialize(string providerName)
{
if (providerName.StartsWith("MySql"))
{
SyntaxConfig.SqlSyntaxProvider = MySqlSyntax.Provider;
}
else if (providerName.Contains("SqlServerCe"))
{
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
else
{
SyntaxConfig.SqlSyntaxProvider = SqlServerSyntax.Provider;
}
_providerName = providerName;
try
{
SqlSyntaxContext.SqlSyntaxProvider =
SqlSyntaxProvidersResolver.Current.GetByProviderNameOrDefault(providerName);
_configured = true;
}
catch (Exception e)
{
_configured = false;
LogHelper.Info<DatabaseContext>("Initialization of the DatabaseContext failed with following error: " + e.Message);
LogHelper.Info<DatabaseContext>(e.StackTrace);
}
}
internal DatabaseSchemaResult ValidateDatabaseSchema()
{
@@ -388,7 +389,7 @@ namespace Umbraco.Core
var message = string.Empty;
var database = new UmbracoDatabase(_connectionString, ProviderName);
var supportsCaseInsensitiveQueries = SyntaxConfig.SqlSyntaxProvider.SupportsCaseInsensitiveQueries(database);
var supportsCaseInsensitiveQueries = SqlSyntaxContext.SqlSyntaxProvider.SupportsCaseInsensitiveQueries(database);
if (supportsCaseInsensitiveQueries == false)
{
message = "<p>&nbsp;</p><p>The database you're trying to use does not support case insensitive queries. <br />We currently do not support these types of databases.</p>" +
@@ -411,7 +412,7 @@ namespace Umbraco.Core
}
else
{
if (SyntaxConfig.SqlSyntaxProvider == MySqlSyntaxProvider.Instance)
if (SqlSyntaxContext.SqlSyntaxProvider.GetType() == typeof(MySqlSyntaxProvider))
{
message = "<p>&nbsp;</p><p>Congratulations, the database step ran successfully!</p>" +
"<p>Note: You're using MySQL and the database instance you're connecting to seems to support case insensitive queries.</p>" +

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Umbraco.Core.Events
{
// Provides information on the macro that caused an error
public class MacroErrorEventArgs : System.EventArgs
{
/// <summary>
/// Name of the faulting macro.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Alias of the faulting macro.
/// </summary>
public string Alias { get; set; }
/// <summary>
/// Filename, file path, fully qualified class name, or other key used by the macro engine to do it's processing of the faulting macro.
/// </summary>
public string ItemKey { get; set; }
/// <summary>
/// Exception raised.
/// </summary>
public Exception Exception { get; set; }
/// <summary>
/// Gets or sets the desired behaviour when a matching macro causes an error. See
/// <see cref="MacroErrorBehaviour"/> for definitions. By setting this in your event
/// you can override the default behaviour defined in UmbracoSettings.config.
/// </summary>
/// <value>Macro error behaviour enum.</value>
public MacroErrorBehaviour Behaviour { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace Umbraco.Core
{
public enum MacroErrorBehaviour
{
/// <summary>
/// Default umbraco behavior - show an inline error within the
/// macro but allow the page to continue rendering.
/// </summary>
Inline,
/// <summary>
/// Silently eat the error and do not display the offending macro.
/// </summary>
Silent,
/// <summary>
/// Throw an exception which can be caught by the global error handler
/// defined in Application_OnError. If no such error handler is defined
/// then you'll see the Yellow Screen Of Death (YSOD) error page.
/// </summary>
Throw
}
}

View File

@@ -30,8 +30,8 @@ namespace Umbraco.Core.Persistence.Mappers
string columnName = columnAttribute.Name;
string columnMap = string.Format("{0}.{1}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(columnName));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(columnName));
return columnMap;
}
}

View File

@@ -103,7 +103,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
}
//Check tables in configured database against tables in schema
var tablesInDatabase = SyntaxConfig.SqlSyntaxProvider.GetTablesInSchema(_database).ToList();
var tablesInDatabase = SqlSyntaxContext.SqlSyntaxProvider.GetTablesInSchema(_database).ToList();
var tablesInSchema = result.TableDefinitions.Select(x => x.Name).ToList();
//Add valid and invalid table differences to the result object
var validTableDifferences = tablesInDatabase.Intersect(tablesInSchema);
@@ -120,7 +120,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
}
//Check columns in configured database against columns in schema
var columnsInDatabase = SyntaxConfig.SqlSyntaxProvider.GetColumnsInSchema(_database);
var columnsInDatabase = SqlSyntaxContext.SqlSyntaxProvider.GetColumnsInSchema(_database);
var columnsPerTableInDatabase = columnsInDatabase.Select(x => string.Concat(x.TableName, ",", x.ColumnName)).ToList();
var columnsPerTableInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => string.Concat(y.TableName, ",", y.Name))).ToList();
//Add valid and invalid column differences to the result object
@@ -137,11 +137,11 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
//MySql doesn't conform to the "normal" naming of constraints, so there is currently no point in doing these checks.
//NOTE: At a later point we do other checks for MySql, but ideally it should be necessary to do special checks for different providers.
if (SyntaxConfig.SqlSyntaxProvider is MySqlSyntaxProvider)
if (SqlSyntaxContext.SqlSyntaxProvider is MySqlSyntaxProvider)
return result;
//Check constraints in configured database against constraints in schema
var constraintsInDatabase = SyntaxConfig.SqlSyntaxProvider.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList();
var constraintsInDatabase = SqlSyntaxContext.SqlSyntaxProvider.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList();
var foreignKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.StartsWith("FK_")).Select(x => x.Item3).ToList();
var primaryKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.StartsWith("PK_")).Select(x => x.Item3).ToList();
var indexesInDatabase = constraintsInDatabase.Where(x => x.Item3.StartsWith("IX_")).Select(x => x.Item3).ToList();

View File

@@ -114,7 +114,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
sb.AppendLine(" ");
}
if (SyntaxConfig.SqlSyntaxProvider is MySqlSyntaxProvider)
if (SqlSyntaxContext.SqlSyntaxProvider is MySqlSyntaxProvider)
{
sb.AppendLine("Please note that the constraints could not be validated because the current dataprovider is MySql.");
}

View File

@@ -21,9 +21,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions
public override string ToString()
{
return string.Format(SyntaxConfig.SqlSyntaxProvider.AlterColumn,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(Column.Name));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.AlterColumn,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(Column.Name));
}
}
}

View File

@@ -22,9 +22,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions
{
//NOTE Should probably investigate if Deleting a Default Constraint is different from deleting a 'regular' constraint
return string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteConstraint,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(ConstraintName));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteConstraint,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(ConstraintName));
}
}
}

View File

@@ -17,7 +17,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions
{
var constraintType = (Constraint.IsPrimaryKeyConstraint) ? "PRIMARY KEY" : "UNIQUE";
if (Constraint.IsPrimaryKeyConstraint && SyntaxConfig.SqlSyntaxProvider.SupportsClustered())
if (Constraint.IsPrimaryKeyConstraint && SqlSyntaxContext.SqlSyntaxProvider.SupportsClustered())
constraintType += " CLUSTERED";
if (Constraint.IsNonUniqueConstraint)
@@ -27,12 +27,12 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions
for (int i = 0; i < Constraint.Columns.Count; i++)
{
columns[i] = SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(Constraint.Columns.ElementAt(i));
columns[i] = SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(Constraint.Columns.ElementAt(i));
}
return string.Format(SyntaxConfig.SqlSyntaxProvider.CreateConstraint,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(Constraint.TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(Constraint.ConstraintName),
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.CreateConstraint,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(Constraint.TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(Constraint.ConstraintName),
constraintType,
string.Join(", ", columns));
}

View File

@@ -24,7 +24,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions
{
var table = new TableDefinition{Name = TableName, SchemaName = SchemaName, Columns = Columns};
return string.Format(SyntaxConfig.SqlSyntaxProvider.Format(table));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.Format(table));
}
}
}

View File

@@ -31,9 +31,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
foreach (string columnName in ColumnNames)
{
if (ColumnNames.First() != columnName) sb.AppendLine(";");
sb.AppendFormat(SyntaxConfig.SqlSyntaxProvider.DropColumn,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(columnName));
sb.AppendFormat(SqlSyntaxContext.SqlSyntaxProvider.DropColumn,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(columnName));
}
return sb.ToString();

View File

@@ -14,9 +14,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
public override string ToString()
{
return string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteConstraint,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(Constraint.TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(Constraint.ConstraintName));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteConstraint,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(Constraint.TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(Constraint.ConstraintName));
}
}
}

View File

@@ -32,7 +32,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
if (IsAllRows)
{
deleteItems.Add(string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteData, SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName), "1 = 1"));
deleteItems.Add(string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteData, SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName), "1 = 1"));
}
else
{
@@ -42,13 +42,13 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
foreach (KeyValuePair<string, object> item in row)
{
whereClauses.Add(string.Format("{0} {1} {2}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
item.Value == null ? "IS" : "=",
SyntaxConfig.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
}
deleteItems.Add(string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteData,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName),
deleteItems.Add(string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteData,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName),
String.Join(" AND ", whereClauses.ToArray())));
}
}

View File

@@ -22,7 +22,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
if (IsExpressionSupported() == false)
return string.Empty;
return string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteDefaultConstraint,
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteDefaultConstraint,
TableName,
ColumnName);
}

View File

@@ -33,10 +33,10 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
if (string.IsNullOrEmpty(ForeignKey.Name))
ForeignKey.Name = string.Format("{0}_ibfk_1", ForeignKey.ForeignTable.ToLower());
return string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteConstraint,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(ForeignKey.ForeignTable),
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteConstraint,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(ForeignKey.ForeignTable),
"FOREIGN KEY ",
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(ForeignKey.Name));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(ForeignKey.Name));
}
if (string.IsNullOrEmpty(ForeignKey.Name))
@@ -44,9 +44,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
ForeignKey.Name = string.Format("FK_{0}_{1}", ForeignKey.ForeignTable, ForeignKey.PrimaryTable);
}
return string.Format(SyntaxConfig.SqlSyntaxProvider.DeleteConstraint,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(ForeignKey.ForeignTable),
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(ForeignKey.Name));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DeleteConstraint,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(ForeignKey.ForeignTable),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(ForeignKey.Name));
}
}
}

View File

@@ -19,9 +19,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
public override string ToString()
{
return string.Format(SyntaxConfig.SqlSyntaxProvider.DropIndex,
SyntaxConfig.SqlSyntaxProvider.GetQuotedName(Index.Name),
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(Index.TableName));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DropIndex,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedName(Index.Name),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(Index.TableName));
}
}
}

View File

@@ -17,8 +17,8 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions
public override string ToString()
{
return string.Format(SyntaxConfig.SqlSyntaxProvider.DropTable,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.DropTable,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName));
}
}
}

View File

@@ -28,9 +28,9 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions
if (string.IsNullOrEmpty(Column.TableName))
Column.TableName = TableName;
return string.Format(SyntaxConfig.SqlSyntaxProvider.AddColumn,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(Column.TableName),
SyntaxConfig.SqlSyntaxProvider.Format(Column));
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.AddColumn,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(Column.TableName),
SqlSyntaxContext.SqlSyntaxProvider.Format(Column));
}
}
}

View File

@@ -23,7 +23,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions
if (IsExpressionSupported() == false)
return string.Empty;
return SyntaxConfig.SqlSyntaxProvider.Format(ForeignKey);
return SqlSyntaxContext.SqlSyntaxProvider.Format(ForeignKey);
}
}
}

View File

@@ -19,7 +19,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions
public override string ToString()
{
return SyntaxConfig.SqlSyntaxProvider.Format(Index);
return SqlSyntaxContext.SqlSyntaxProvider.Format(Index);
}
}
}

View File

@@ -52,7 +52,7 @@ SELECT CONCAT(
if (IsExpressionSupported() == false)
return string.Empty;
return SyntaxConfig.SqlSyntaxProvider.FormatColumnRename(TableName, OldName, NewName);
return SqlSyntaxContext.SqlSyntaxProvider.FormatColumnRename(TableName, OldName, NewName);
}
}
}

View File

@@ -22,7 +22,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions
if (IsExpressionSupported() == false)
return string.Empty;
return SyntaxConfig.SqlSyntaxProvider.FormatTableRename(OldName, NewName);
return SqlSyntaxContext.SqlSyntaxProvider.FormatTableRename(OldName, NewName);
}
}
}

View File

@@ -31,8 +31,8 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions
foreach (var item in Set)
{
updateItems.Add(string.Format("{0} = {1}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
SyntaxConfig.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
}
if (IsAllRows)
@@ -44,13 +44,13 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions
foreach (var item in Where)
{
whereClauses.Add(string.Format("{0} {1} {2}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(item.Key),
item.Value == null ? "IS" : "=",
SyntaxConfig.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedValue(item.Value.ToString())));
}
}
return string.Format(SyntaxConfig.SqlSyntaxProvider.UpdateData,
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(TableName),
return string.Format(SqlSyntaxContext.SqlSyntaxProvider.UpdateData,
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(TableName),
string.Join(", ", updateItems.ToArray()),
string.Join(" AND ", whereClauses.ToArray()));
}

View File

@@ -33,10 +33,10 @@ namespace Umbraco.Core.Persistence
var tableDefinition = DefinitionFactory.GetTableDefinition(modelType);
var tableName = tableDefinition.Name;
string createSql = SyntaxConfig.SqlSyntaxProvider.Format(tableDefinition);
string createPrimaryKeySql = SyntaxConfig.SqlSyntaxProvider.FormatPrimaryKey(tableDefinition);
var foreignSql = SyntaxConfig.SqlSyntaxProvider.Format(tableDefinition.ForeignKeys);
var indexSql = SyntaxConfig.SqlSyntaxProvider.Format(tableDefinition.Indexes);
string createSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition);
string createPrimaryKeySql = SqlSyntaxContext.SqlSyntaxProvider.FormatPrimaryKey(tableDefinition);
var foreignSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition.ForeignKeys);
var indexSql = SqlSyntaxContext.SqlSyntaxProvider.Format(tableDefinition.Indexes);
var tableExist = db.TableExist(tableName);
if (overwrite && tableExist)
@@ -65,18 +65,18 @@ namespace Umbraco.Core.Persistence
var e = new TableCreationEventArgs();
//Turn on identity insert if db provider is not mysql
if (SyntaxConfig.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity))
db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} ON ", SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName))));
if (SqlSyntaxContext.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity))
db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} ON ", SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName))));
//Call the NewTable-event to trigger the insert of base/default data
NewTable(tableName, db, e);
//Turn off identity insert if db provider is not mysql
if (SyntaxConfig.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity))
db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} OFF;", SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName))));
if (SqlSyntaxContext.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity))
db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} OFF;", SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName))));
//Special case for MySql
if (SyntaxConfig.SqlSyntaxProvider is MySqlSyntaxProvider && tableName.Equals("umbracoUser"))
if (SqlSyntaxContext.SqlSyntaxProvider is MySqlSyntaxProvider && tableName.Equals("umbracoUser"))
{
db.Update<UserDto>("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" });
}
@@ -120,18 +120,18 @@ namespace Umbraco.Core.Persistence
public static void DropTable(this Database db, string tableName)
{
var sql = new Sql(string.Format("DROP TABLE {0}", SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName)));
var sql = new Sql(string.Format("DROP TABLE {0}", SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName)));
db.Execute(sql);
}
public static bool TableExist(this Database db, string tableName)
{
return SyntaxConfig.SqlSyntaxProvider.DoesTableExist(db, tableName);
return SqlSyntaxContext.SqlSyntaxProvider.DoesTableExist(db, tableName);
}
public static bool TableExist(this UmbracoDatabase db, string tableName)
{
return SyntaxConfig.SqlSyntaxProvider.DoesTableExist(db, tableName);
return SqlSyntaxContext.SqlSyntaxProvider.DoesTableExist(db, tableName);
}
public static void CreateDatabaseSchema(this Database db)

View File

@@ -17,7 +17,7 @@ namespace Umbraco.Core.Persistence
var tableNameAttribute = type.FirstAttribute<TableNameAttribute>();
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
return sql.From(SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName));
return sql.From(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName));
}
public static Sql Where<T>(this Sql sql, Expression<Func<T, bool>> predicate)
@@ -38,8 +38,8 @@ namespace Umbraco.Core.Persistence
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
var syntax = string.Format("{0}.{1}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(columnName));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(columnName));
return sql.OrderBy(syntax);
}
@@ -54,8 +54,8 @@ namespace Umbraco.Core.Persistence
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
var syntax = string.Format("{0}.{1} DESC",
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(columnName));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(columnName));
return sql.OrderBy(syntax);
}
@@ -65,7 +65,7 @@ namespace Umbraco.Core.Persistence
var column = ExpressionHelper.FindProperty(columnMember) as PropertyInfo;
var columnName = column.FirstAttribute<ColumnAttribute>().Name;
return sql.GroupBy(SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(columnName));
return sql.GroupBy(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(columnName));
}
public static Sql.SqlJoinClause InnerJoin<T>(this Sql sql)
@@ -74,7 +74,7 @@ namespace Umbraco.Core.Persistence
var tableNameAttribute = type.FirstAttribute<TableNameAttribute>();
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
return sql.InnerJoin(SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName));
return sql.InnerJoin(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName));
}
public static Sql.SqlJoinClause LeftJoin<T>(this Sql sql)
@@ -83,7 +83,7 @@ namespace Umbraco.Core.Persistence
var tableNameAttribute = type.FirstAttribute<TableNameAttribute>();
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
return sql.LeftJoin(SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName));
return sql.LeftJoin(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName));
}
public static Sql.SqlJoinClause LeftOuterJoin<T>(this Sql sql)
@@ -92,7 +92,7 @@ namespace Umbraco.Core.Persistence
var tableNameAttribute = type.FirstAttribute<TableNameAttribute>();
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
return sql.LeftOuterJoin(SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName));
return sql.LeftOuterJoin(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName));
}
public static Sql.SqlJoinClause RightJoin<T>(this Sql sql)
@@ -101,7 +101,7 @@ namespace Umbraco.Core.Persistence
var tableNameAttribute = type.FirstAttribute<TableNameAttribute>();
string tableName = tableNameAttribute == null ? string.Empty : tableNameAttribute.Value;
return sql.RightJoin(SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName));
return sql.RightJoin(SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(tableName));
}
public static Sql On<TLeft, TRight>(this Sql.SqlJoinClause sql, Expression<Func<TLeft, object>> leftMember,
@@ -118,10 +118,10 @@ namespace Umbraco.Core.Persistence
var rightColumnName = right.FirstAttribute<ColumnAttribute>().Name;
string onClause = string.Format("{0}.{1} = {2}.{3}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(leftTableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(leftColumnName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(rightTableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(rightColumnName));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(leftTableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(leftColumnName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(rightTableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(rightColumnName));
return sql.On(onClause);
}
}

View File

@@ -487,8 +487,8 @@ namespace Umbraco.Core.Persistence.Querying
{
var column = pocoData.Columns.FirstOrDefault(x => x.Value.PropertyInfo.Name == name);
return string.Format("{0}.{1}",
SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(pocoData.TableInfo.TableName),
SyntaxConfig.SqlSyntaxProvider.GetQuotedColumnName(column.Value.ColumnName));
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedTableName(pocoData.TableInfo.TableName),
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(column.Value.ColumnName));
}
protected string RemoveQuote(string exp)

View File

@@ -4,7 +4,7 @@ using System.Data;
namespace Umbraco.Core.Persistence.SqlSyntax
{
internal class DbTypes<TSyntax>
public class DbTypes<TSyntax>
where TSyntax : ISqlSyntaxProvider
{
public DbType DbType;

View File

@@ -7,21 +7,20 @@ using Umbraco.Core.Persistence.DatabaseModelDefinitions;
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// Static class that provides simple access to the MySql SqlSyntax Providers singleton
/// Static class that provides simple access to the MySql SqlSyntax Provider
/// </summary>
internal static class MySqlSyntax
{
public static ISqlSyntaxProvider Provider { get { return MySqlSyntaxProvider.Instance; } }
public static ISqlSyntaxProvider Provider { get { return new MySqlSyntaxProvider(); } }
}
/// <summary>
/// Represents an SqlSyntaxProvider for MySql
/// </summary>
internal class MySqlSyntaxProvider : SqlSyntaxProviderBase<MySqlSyntaxProvider>
[SqlSyntaxProviderAttribute("MySql.Data.MySqlClient")]
public class MySqlSyntaxProvider : SqlSyntaxProviderBase<MySqlSyntaxProvider>
{
public static MySqlSyntaxProvider Instance = new MySqlSyntaxProvider();
private MySqlSyntaxProvider()
public MySqlSyntaxProvider()
{
DefaultStringLength = 255;
StringLengthColumnDefinitionFormat = StringLengthUnicodeColumnDefinitionFormat;

View File

@@ -1,28 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Umbraco.Core.Persistence.DatabaseAnnotations;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// Static class that provides simple access to the Sql CE SqlSyntax Providers singleton
/// Static class that provides simple access to the Sql CE SqlSyntax Provider
/// </summary>
internal static class SqlCeSyntax
{
public static ISqlSyntaxProvider Provider { get { return SqlCeSyntaxProvider.Instance; } }
public static ISqlSyntaxProvider Provider { get { return new SqlCeSyntaxProvider(); } }
}
/// <summary>
/// Represents an SqlSyntaxProvider for Sql Ce
/// </summary>
internal class SqlCeSyntaxProvider : SqlSyntaxProviderBase<SqlCeSyntaxProvider>
[SqlSyntaxProviderAttribute("System.Data.SqlServerCe.4.0")]
public class SqlCeSyntaxProvider : SqlSyntaxProviderBase<SqlCeSyntaxProvider>
{
public static SqlCeSyntaxProvider Instance = new SqlCeSyntaxProvider();
private SqlCeSyntaxProvider()
public SqlCeSyntaxProvider()
{
StringLengthColumnDefinitionFormat = StringLengthUnicodeColumnDefinitionFormat;
StringColumnDefinition = string.Format(StringLengthColumnDefinitionFormat, DefaultStringLength);

View File

@@ -6,21 +6,20 @@ using Umbraco.Core.Persistence.DatabaseModelDefinitions;
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// Static class that provides simple access to the Sql Server SqlSyntax Providers singleton
/// Static class that provides simple access to the Sql Server SqlSyntax Provider
/// </summary>
internal static class SqlServerSyntax
{
public static ISqlSyntaxProvider Provider { get { return SqlServerSyntaxProvider.Instance; } }
public static ISqlSyntaxProvider Provider { get { return new SqlServerSyntaxProvider(); } }
}
/// <summary>
/// Represents an SqlSyntaxProvider for Sql Server
/// </summary>
internal class SqlServerSyntaxProvider : SqlSyntaxProviderBase<SqlServerSyntaxProvider>
[SqlSyntaxProviderAttribute("System.Data.SqlClient")]
public class SqlServerSyntaxProvider : SqlSyntaxProviderBase<SqlServerSyntaxProvider>
{
public static SqlServerSyntaxProvider Instance = new SqlServerSyntaxProvider();
private SqlServerSyntaxProvider()
public SqlServerSyntaxProvider()
{
StringLengthColumnDefinitionFormat = StringLengthUnicodeColumnDefinitionFormat;
StringColumnDefinition = string.Format(StringLengthColumnDefinitionFormat, DefaultStringLength);

View File

@@ -3,9 +3,9 @@
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// Singleton to handle the configuration of an SqlSyntaxProvider
/// Singleton to handle the configuration of a SqlSyntaxProvider
/// </summary>
internal static class SyntaxConfig
public static class SqlSyntaxContext
{
private static ISqlSyntaxProvider _sqlSyntaxProvider;
@@ -16,7 +16,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
if(_sqlSyntaxProvider == null)
{
throw new ArgumentNullException("SqlSyntaxProvider",
"You must set the singleton 'Umbraco.Core.Persistence.SqlSyntax.SyntaxConfig' to use an sql syntax provider");
"You must set the singleton 'Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxContext' to use an sql syntax provider");
}
return _sqlSyntaxProvider;
}

View File

@@ -0,0 +1,21 @@
using System;
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// Attribute for implementations of an ISqlSyntaxProvider
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class SqlSyntaxProviderAttribute : Attribute
{
public SqlSyntaxProviderAttribute(string providerName)
{
ProviderName = providerName;
}
/// <summary>
/// Gets or sets the ProviderName that corresponds to the sql syntax in a provider.
/// </summary>
public string ProviderName { get; set; }
}
}

View File

@@ -15,7 +15,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
/// All Sql Syntax provider implementations should derive from this abstract class.
/// </remarks>
/// <typeparam name="TSyntax"></typeparam>
internal abstract class SqlSyntaxProviderBase<TSyntax> : ISqlSyntaxProvider
public abstract class SqlSyntaxProviderBase<TSyntax> : ISqlSyntaxProvider
where TSyntax : ISqlSyntaxProvider
{
protected SqlSyntaxProviderBase()

View File

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.ObjectResolution;
namespace Umbraco.Core.Persistence.SqlSyntax
{
/// <summary>
/// A resolver to return all ISqlSyntaxProvider objects
/// </summary>
internal sealed class SqlSyntaxProvidersResolver : ManyObjectsResolverBase<SqlSyntaxProvidersResolver, ISqlSyntaxProvider>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="syntaxProviders"></param>
internal SqlSyntaxProvidersResolver(IEnumerable<Type> syntaxProviders)
: base(syntaxProviders)
{
}
/// <summary>
/// Gets the <see cref="ISqlSyntaxProvider"/> implementations.
/// </summary>
public IEnumerable<ISqlSyntaxProvider> SqlSyntaxProviders
{
get
{
return Values;
}
}
/// <summary>
/// Gets a <see cref="ISqlSyntaxProvider"/> by its attributed provider.
/// </summary>
/// <param name="providerName">ProviderName from the ConnectionString settings</param>
/// <returns><see cref="ISqlSyntaxProvider"/> that corresponds to the attributed provider or the default Sql Server Syntax Provider.</returns>
public ISqlSyntaxProvider GetByProviderNameOrDefault(string providerName)
{
var provider =
Values.FirstOrDefault(
x =>
x.GetType()
.FirstAttribute<SqlSyntaxProviderAttribute>()
.ProviderName.ToLowerInvariant()
.Equals(providerName.ToLowerInvariant()));
if (provider != null)
return provider;
return Values.First(x => x.GetType() == typeof (SqlServerSyntaxProvider));
}
}
}

View File

@@ -12,6 +12,7 @@ using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.PropertyEditors;
using umbraco.interfaces;
using File = System.IO.File;
@@ -503,6 +504,15 @@ namespace Umbraco.Core
return ResolveTypes<IMigration>();
}
/// <summary>
/// Returns all SqlSyntaxProviders with the SqlSyntaxProviderAttribute
/// </summary>
/// <returns></returns>
internal IEnumerable<Type> ResolveSqlSyntaxProviders()
{
return ResolveTypesWithAttribute<ISqlSyntaxProvider, SqlSyntaxProviderAttribute>();
}
/// <summary>
/// Gets/sets which assemblies to scan when type finding, generally used for unit testing, if not explicitly set
/// this will search all assemblies known to have plugins and exclude ones known to not have them.

View File

@@ -147,8 +147,10 @@
<Compile Include="Models\ContentBase.cs" />
<Compile Include="Models\ContentExtensions.cs" />
<Compile Include="Enum.cs" />
<Compile Include="Events\MacroErrorEventArgs.cs" />
<Compile Include="HashCodeCombiner.cs" />
<Compile Include="IO\FileSystemWrapper.cs" />
<Compile Include="MacroErrorBehaviour.cs" />
<Compile Include="Media\IImageUrlProvider.cs" />
<Compile Include="Models\ContentTypeBase.cs" />
<Compile Include="Models\ContentTypeCompositionBase.cs" />
@@ -476,8 +478,10 @@
<Compile Include="Persistence\SqlSyntax\MySqlSyntaxProvider.cs" />
<Compile Include="Persistence\SqlSyntax\SqlCeSyntaxProvider.cs" />
<Compile Include="Persistence\SqlSyntax\SqlServerSyntaxProvider.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProviderAttribute.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProviderBase.cs" />
<Compile Include="Persistence\SqlSyntax\SyntaxConfig.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxContext.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProvidersResolver.cs" />
<Compile Include="Persistence\TransactionType.cs" />
<Compile Include="Persistence\UmbracoDatabase.cs" />
<Compile Include="Persistence\UnitOfWork\FileUnitOfWork.cs" />

View File

@@ -6,6 +6,7 @@ using System.Web;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Persistence.SqlSyntax;
using umbraco.interfaces;
namespace Umbraco.Tests.BootManagers
@@ -28,6 +29,7 @@ namespace Umbraco.Tests.BootManagers
_testApp = null;
ApplicationEventsResolver.Reset();
SqlSyntaxProvidersResolver.Reset();
}
/// <summary>
@@ -67,6 +69,12 @@ namespace Umbraco.Tests.BootManagers
protected override void InitializeResolvers()
{
//Do nothing as we don't want to initialize all resolvers in this test
//We only include this resolver to not cause trouble for the database context
SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver(
PluginManager.Current.ResolveSqlSyntaxProviders())
{
CanResolveBeforeFrozen = true
};
}
}

View File

@@ -14,7 +14,7 @@ namespace Umbraco.Tests.Migrations
[SetUp]
public void SetUp()
{
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
[Test]

View File

@@ -31,7 +31,7 @@ namespace Umbraco.Tests.Migrations
Resolution.Freeze();
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
[Test]

View File

@@ -38,7 +38,7 @@ namespace Umbraco.Tests.Migrations
Resolution.Freeze();
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
[Test]

View File

@@ -49,7 +49,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
DatabaseSpecificSetUp();
SyntaxConfig.SqlSyntaxProvider = GetSyntaxProvider();
SqlSyntaxContext.SqlSyntaxProvider = GetSyntaxProvider();
}
[Test]
@@ -91,7 +91,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
public virtual void TearDown()
{
PluginManager.Current = null;
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
MigrationResolver.Reset();
TestHelper.CleanContentDirectories();

View File

@@ -72,13 +72,13 @@ namespace Umbraco.Tests.Migrations.Upgrades
var engine = new SqlCeEngine(settings.ConnectionString);
engine.CreateDatabase();
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
[TearDown]
public virtual void TearDown()
{
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
Resolution.Reset();
TestHelper.CleanContentDirectories();

View File

@@ -72,7 +72,7 @@ namespace Umbraco.Tests.Persistence
var engine = new SqlCeEngine(settings.ConnectionString);
engine.CreateDatabase();
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
//Create the umbraco database
_dbContext.Database.CreateDatabaseSchema(false);

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Trashed_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentMapper().Map("Trashed");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Published_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentMapper().Map("Published");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Version_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentMapper().Map("Version");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentTypeMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Name_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentTypeMapper().Map("Name");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Thumbnail_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentTypeMapper().Map("Thumbnail");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Description_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new ContentTypeMapper().Map("Description");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DataTypeDefinitionMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Key_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DataTypeDefinitionMapper().Map("Key");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_DatabaseType_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DataTypeDefinitionMapper().Map("DatabaseType");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_ControlId_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DataTypeDefinitionMapper().Map("ControlId");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Key_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryMapper().Map("Key");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_ItemKey_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryMapper().Map("ItemKey");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Key_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryTranslationMapper().Map("Key");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Language_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryTranslationMapper().Map("Language");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Value_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new DictionaryTranslationMapper().Map("Value");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new LanguageMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_IsoCode_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new LanguageMapper().Map("IsoCode");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_CultureName_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new LanguageMapper().Map("CultureName");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new MediaMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Trashed_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new MediaMapper().Map("Trashed");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_UpdateDate_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new MediaMapper().Map("UpdateDate");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Version_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new MediaMapper().Map("Version");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyGroupMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_ParentId_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyGroupMapper().Map("ParentId");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_SortOrder_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyGroupMapper().Map("SortOrder");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Name_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyGroupMapper().Map("Name");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Alias_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("Alias");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_DataTypeDefinitionId_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("DataTypeDefinitionId");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_SortOrder_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("SortOrder");
@@ -63,7 +63,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_DataTypeControlId_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("DataTypeId");
@@ -76,7 +76,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_DataTypeDatabaseType_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new PropertyTypeMapper().Map("DataTypeDatabaseType");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_ChildId_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationMapper().Map("ChildId");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Datetime_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationMapper().Map("CreateDate");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Comment_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationMapper().Map("Comment");
@@ -63,7 +63,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_RelationType_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationMapper().Map("RelationTypeId");

View File

@@ -11,7 +11,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Id_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationTypeMapper().Map("Id");
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_Alias_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationTypeMapper().Map("Alias");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_ChildObjectType_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationTypeMapper().Map("ChildObjectType");
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Mappers
public void Can_Map_IsBidirectional_Property()
{
// Arrange
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
// Act
string column = new RelationTypeMapper().Map("IsBidirectional");

View File

@@ -22,7 +22,7 @@ namespace Umbraco.Tests.Persistence
public override ISqlSyntaxProvider SyntaxProvider
{
get { return MySqlSyntaxProvider.Instance; }
get { return MySqlSyntax.Provider; }
}
#endregion

View File

@@ -38,7 +38,7 @@ namespace Umbraco.Tests.Persistence
//assign the service context
new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy())) { IsReady = true };
SyntaxConfig.SqlSyntaxProvider = MySqlSyntaxProvider.Instance;
SqlSyntaxContext.SqlSyntaxProvider = MySqlSyntax.Provider;
_database = new Database("Server = 169.254.120.3; Database = testdb; Uid = umbraco; Pwd = umbraco",
"MySql.Data.MySqlClient");

View File

@@ -51,7 +51,7 @@ namespace Umbraco.Tests.Persistence
//assign the service context
new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy())) { IsReady = true };
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
_database = new Database("Datasource=|DataDirectory|test.sdf",
"System.Data.SqlServerCe.4.0");
@@ -62,7 +62,7 @@ namespace Umbraco.Tests.Persistence
{
AppDomain.CurrentDomain.SetData("DataDirectory", null);
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
//reset the app context
ApplicationContext.Current = null;

View File

@@ -38,7 +38,7 @@ namespace Umbraco.Tests.Persistence
//assign the service context
new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy())) { IsReady = true };
SyntaxConfig.SqlSyntaxProvider = SqlServerSyntaxProvider.Instance;
SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider;
_database = new Database(@"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco",
"System.Data.SqlClient");
@@ -49,7 +49,7 @@ namespace Umbraco.Tests.Persistence
{
AppDomain.CurrentDomain.SetData("DataDirectory", null);
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
//reset the app context
ApplicationContext.Current = null;

View File

@@ -12,7 +12,7 @@ namespace Umbraco.Tests.Persistence.SyntaxProvider
[SetUp]
public void SetUp()
{
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
}
[Test]
@@ -21,10 +21,10 @@ namespace Umbraco.Tests.Persistence.SyntaxProvider
var type = typeof (NodeDto);
var definition = DefinitionFactory.GetTableDefinition(type);
string create = SyntaxConfig.SqlSyntaxProvider.Format(definition);
string primaryKey = SyntaxConfig.SqlSyntaxProvider.FormatPrimaryKey(definition);
var indexes = SyntaxConfig.SqlSyntaxProvider.Format(definition.Indexes);
var keys = SyntaxConfig.SqlSyntaxProvider.Format(definition.ForeignKeys);
string create = SqlSyntaxContext.SqlSyntaxProvider.Format(definition);
string primaryKey = SqlSyntaxContext.SqlSyntaxProvider.FormatPrimaryKey(definition);
var indexes = SqlSyntaxContext.SqlSyntaxProvider.Format(definition.Indexes);
var keys = SqlSyntaxContext.SqlSyntaxProvider.Format(definition.ForeignKeys);
Console.WriteLine(create);
Console.WriteLine(primaryKey);
@@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.SyntaxProvider
[TearDown]
public void TearDown()
{
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
}
}
}

View File

@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data.SqlServerCe;
using System.IO;
@@ -64,6 +66,9 @@ namespace Umbraco.Tests.TestHelpers
RepositoryResolver.Current = new RepositoryResolver(
new RepositoryFactory());
SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver(
new List<Type>{ typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true};
//Get the connectionstring settings from config
var settings = ConfigurationManager.ConnectionStrings[Core.Configuration.GlobalSettings.UmbracoConnectionName];
ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf");
@@ -106,7 +111,7 @@ namespace Umbraco.Tests.TestHelpers
//reset the app context
ApplicationContext.ApplicationCache.ClearAllCache();
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
//legacy API database connection close - because a unit test using PetaPoco db-layer can trigger the usage of SqlHelper we need to ensure that a possible connection is closed.
SqlCeContextGuardian.CloseBackgroundConnection();
@@ -114,6 +119,7 @@ namespace Umbraco.Tests.TestHelpers
ApplicationContext.Current = null;
RepositoryResolver.Reset();
SqlSyntaxProvidersResolver.Reset();
Resolution.Reset();
TestHelper.CleanContentDirectories();

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Data.SqlServerCe;
using System.IO;
using NUnit.Framework;
@@ -55,6 +56,9 @@ namespace Umbraco.Tests.TestHelpers
RepositoryResolver.Current = new RepositoryResolver(
new RepositoryFactory());
SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver(
new List<Type> { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true };
Resolution.Freeze();
ApplicationContext.Current = new ApplicationContext(
//assign the db context
@@ -62,7 +66,7 @@ namespace Umbraco.Tests.TestHelpers
//assign the service context
new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy())) { IsReady = true };
SyntaxConfig.SqlSyntaxProvider = SyntaxProvider;
SqlSyntaxContext.SqlSyntaxProvider = SyntaxProvider;
//Create the umbraco database
_database = new Database(ConnectionString, ProviderName);

View File

@@ -9,7 +9,7 @@ namespace Umbraco.Tests.TestHelpers
[SetUp]
public virtual void Initialize()
{
SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance;
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
SetUp();
}
@@ -20,7 +20,7 @@ namespace Umbraco.Tests.TestHelpers
[TearDown]
public virtual void TearDown()
{
SyntaxConfig.SqlSyntaxProvider = null;
SqlSyntaxContext.SqlSyntaxProvider = null;
}
}
}

View File

@@ -0,0 +1,274 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
<section name="microsoft.scripting" type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="umbraco.presentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
<section name="clientDependency" type="ClientDependency.Core.Config.ClientDependencySection, ClientDependency.Core" requirePermission="false" />
<section name="Examine" type="Examine.Config.ExamineSettings, Examine" requirePermission="false" />
<section name="ExamineLuceneIndexSets" type="UmbracoExamine.Config.ExamineLuceneIndexes, UmbracoExamine" requirePermission="false" />
<section name="FileSystemProviders" type="Umbraco.Core.Configuration.FileSystemProvidersSection, Umbraco.Core" requirePermission="false" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
<section name="BaseRestExtensions" type="Umbraco.Web.BaseRest.Configuration.BaseRestSection, umbraco" requirePermission="false" />
<sectionGroup name="umbraco">
<section name="infrastructure" type="Umbraco.Core.Configuration.InfrastructureSettings.Infrastructure, Umbraco.Core" requirePermission="false" />
</sectionGroup>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<urlrewritingnet configSource="config\UrlRewriting.config" />
<microsoft.scripting configSource="config\scripting.config" />
<clientDependency configSource="config\ClientDependency.config" />
<Examine configSource="config\ExamineSettings.config" />
<ExamineLuceneIndexSets configSource="config\ExamineIndex.config" />
<FileSystemProviders configSource="config\FileSystemProviders.config" />
<log4net configSource="config\log4net.config" />
<BaseRestExtensions configSource="config\BaseRestExtensions.config" />
<appSettings>
<add key="umbracoConfigurationStatus" value="4.11.1" />
<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/VSEnterpriseHelper.axd" />
<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />
<add key="umbracoContentXML" value="~/App_Data/umbraco.config" />
<add key="umbracoStorageDirectory" value="~/App_Data" />
<add key="umbracoPath" value="~/umbraco" />
<add key="umbracoEnableStat" value="false" />
<add key="umbracoHideTopLevelNodeFromPath" value="true" />
<add key="umbracoEditXhtmlMode" value="true" />
<add key="umbracoUseDirectoryUrls" value="false" />
<add key="umbracoDebugMode" value="true" />
<add key="umbracoTimeOutInMinutes" value="20" />
<add key="umbracoVersionCheckPeriod" value="7" />
<add key="umbracoDisableXsltExtensions" value="true" />
<add key="umbracoDefaultUILanguage" value="en" />
<add key="umbracoProfileUrl" value="profiler" />
<add key="umbracoUseSSL" value="false" />
<add key="umbracoUseMediumTrust" value="false" />
<!-- Set this to true to enable storing the xml cache locally to the IIS server even if the app files are stored centrally on a SAN/NAS Alex Norcliffe 2010 02 for 4.1 -->
<add key="umbracoContentXMLUseLocalTemp" value="false" />
<add key="webpages:Enabled" value="false" />
<add key="enableSimpleMembership" value="false" />
<add key="autoFormsAuthentication" value="false" />
<add key="log4net.Config" value="config\log4net.config" />
</appSettings>
<connectionStrings>
<add name="umbracoDbDSN" connectionString="server=.\sqlexpress;database=dev-4.9.0;user id=dev;password=dev" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<umbraco>
<infrastructure>
<repositories>
<repository interfaceShortTypeName="IContentRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.ContentRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.RuntimeCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IContentTypeRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.ContentTypeRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.InMemoryCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IDataTypeDefinitionRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.DataTypeDefinitionRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IDictionaryRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.DictionaryRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.InMemoryCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="ILanguageRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.LanguageRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.InMemoryCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IMacroRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.MacroRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.InMemoryCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IMediaRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.MediaRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.RuntimeCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IMediaTypeRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.MediaTypeRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.InMemoryCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IRelationRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.RelationRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IRelationTypeRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.RelationTypeRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IScriptRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.ScriptRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="IStylesheetRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.StylesheetRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
<repository interfaceShortTypeName="ITemplateRepository" repositoryFullTypeName="Umbraco.Core.Persistence.Repositories.TemplateRepository, Umbraco.Core" cacheProviderFullTypeName="Umbraco.Core.Persistence.Caching.NullCacheProvider, Umbraco.Core" />
</repositories>
<publishingStrategy type="Umbraco.Web.Publishing.PublishingStrategy, Umbraco.Web" />
</infrastructure>
</umbraco>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
<system.net>
<mailSettings>
<smtp>
<network host="127.0.0.1" userName="username" password="password" />
</smtp>
</mailSettings>
</system.net>
<system.web>
<customErrors mode="RemoteOnly" />
<trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
<xhtmlConformance mode="Strict" />
<httpRuntime requestValidationMode="2.0" />
<pages enableEventValidation="false">
<!-- ASPNETAJAX -->
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="umbraco" namespace="umbraco.presentation.templateControls" assembly="umbraco" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
</pages>
<httpModules>
<!-- URL REWRTIER -->
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
<!-- UMBRACO -->
<add name=" UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" />
<!-- ASPNETAJAX -->
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<!-- CLIENT DEPENDENCY -->
<add name="ClientDependencyModule" type="ClientDependency.Core.Module.ClientDependencyModule, ClientDependency.Core" />
</httpModules>
<httpHandlers>
<remove verb="*" path="*.asmx" />
<!-- ASPNETAJAX -->
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<add verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<!-- UMBRACO CHANNELS -->
<add verb="*" path="umbraco/channels.aspx" type="umbraco.presentation.channels.api, umbraco" />
<add verb="*" path="umbraco/channels/word.aspx" type="umbraco.presentation.channels.wordApi, umbraco" />
<!-- CLIENT DEPENDENCY -->
<add verb="*" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core " />
<!-- SPELL CHECKER -->
<add verb="GET,HEAD,POST" path="GoogleSpellChecker.ashx" type="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker.GoogleSpellChecker,umbraco" />
</httpHandlers>
<compilation defaultLanguage="c#" debug="true" batch="false" targetFramework="4.0">
<assemblies>
<!-- ASP.NET 4.0 Assemblies -->
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
<buildProviders>
<add extension=".cshtml" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
<add extension=".vbhtml" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
<add extension=".razor" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
</buildProviders>
</compilation>
<authentication mode="Forms">
<forms name="yourAuthCookie" loginUrl="login.aspx" protection="All" path="/" />
</authentication>
<authorization>
<allow users="?" />
</authorization>
<!-- Membership Provider -->
<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="UmbracoMembershipProvider" type="umbraco.providers.members.UmbracoMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" passwordFormat="Hashed" />
<add name="UsersMembershipProvider" type="umbraco.providers.UsersMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" />
</providers>
</membership>
<!-- added by NH to support membership providers in access layer -->
<roleManager enabled="true" defaultProvider="UmbracoRoleProvider">
<providers>
<clear/>
<add name="UmbracoRoleProvider" type="umbraco.providers.members.UmbracoRoleProvider" />
</providers>
</roleManager>
<!-- Sitemap provider-->
<siteMap defaultProvider="UmbracoSiteMapProvider" enabled="true">
<providers>
<clear/>
<add name="UmbracoSiteMapProvider" type="umbraco.presentation.nodeFactory.UmbracoSiteMapProvider" defaultDescriptionAlias="description" securityTrimmingEnabled="true" />
</providers>
</siteMap>
<trust level="Medium" originUrl=".*"/>
</system.web>
<!-- ASPNETAJAX -->
<system.web.extensions>
<scripting>
<scriptResourceHandler enableCompression="true" enableCaching="true" />
</scripting>
</system.web.extensions>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRewriteModule" />
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
<remove name="UmbracoModule" />
<add name=" UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" />
<remove name="ScriptModule" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<remove name="ClientDependencyModule" />
<add name="ClientDependencyModule" type="ClientDependency.Core.Module.ClientDependencyModule, ClientDependency.Core" />
<!-- Needed for login/membership to work on homepage (as per http://stackoverflow.com/questions/218057/httpcontext-current-session-is-null-when-routing-requests) -->
<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</modules>
<handlers accessPolicy="Read, Write, Script, Execute">
<remove name="WebServiceHandlerFactory-Integrated" />
<remove name="ScriptHandlerFactory" />
<remove name="ScriptHandlerFactoryAppServices" />
<remove name="ScriptResource" />
<remove name="Channels" />
<remove name="Channels_Word" />
<remove name="ClientDependency" />
<remove name="SpellChecker" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" name="Channels" preCondition="integratedMode" path="umbraco/channels.aspx" type="umbraco.presentation.channels.api, umbraco" />
<add verb="*" name="Channels_Word" preCondition="integratedMode" path="umbraco/channels/word.aspx" type="umbraco.presentation.channels.wordApi, umbraco" />
<add verb="*" name="ClientDependency" preCondition="integratedMode" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core " />
<add verb="GET,HEAD,POST" preCondition="integratedMode" name="SpellChecker" path="GoogleSpellChecker.ashx" type="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker.GoogleSpellChecker,umbraco" />
</handlers>
<!-- Adobe AIR mime type -->
<staticContent>
<remove fileExtension=".air" />
<mimeMap fileExtension=".air" mimeType="application/vnd.adobe.air-application-installer-package+zip" />
</staticContent>
</system.webServer>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v4.0" />
<providerOption name="WarnAsError" value="false" />
</compiler>
</compilers>
</system.codedom>
<runtime>
<!-- Old asp.net ajax assembly bindings -->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.web.webPages.razor>
<host factoryType="umbraco.MacroEngines.RazorUmbracoFactory, umbraco.MacroEngines" />
<pages pageBaseType="umbraco.MacroEngines.DynamicNodeContext">
<namespaces>
<add namespace="Microsoft.Web.Helpers" />
<add namespace="umbraco" />
<add namespace="Examine" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>

BIN
src/Umbraco.Web.UI/bin.zip Normal file

Binary file not shown.

View File

@@ -86,6 +86,14 @@
<!-- Setting this to true can increase render time for pages with a large number of links -->
<!-- If running Umbraco in virtual directory this *must* be set to true! -->
<ResolveUrlsFromTextString>false</ResolveUrlsFromTextString>
<!-- How Umbraco should handle errors during macro execution. Can be one of the following values:
- inline - show an inline error within the macro but allow the page to continue rendering. Historial Umbraco behaviour.
- silent - Silently suppress the error and do not render the offending macro.
- throw - Throw an exception which can be caught by the global error handler defined in Application_OnError. If no such
error handler is defined then you'll see the Yellow Screen Of Death (YSOD) error page.
Note the error can also be handled by the umbraco.macro.Error event, where you can log/alarm with your own code and change the behaviour per event. -->
<MacroErrors>inline</MacroErrors>
</content>
<security>

View File

@@ -81,6 +81,13 @@
<!-- In seconds. 0 will disable cache -->
<UmbracoLibraryCacheDuration>1800</UmbracoLibraryCacheDuration>
<!-- How Umbraco should handle errors during macro execution. Can be one of the following values:
- inline - show an inline error within the macro but allow the page to continue rendering. Historial Umbraco behaviour.
- silent - Silently suppress the error and do not render the offending macro.
- throw - Throw an exception which can be caught by the global error handler defined in Application_OnError. If no such
error handler is defined then you'll see the Yellow Screen Of Death (YSOD) error page.
Note the error can also be handled by the umbraco.macro.Error event, where you can log/alarm with your own code and change the behaviour per event. -->
<MacroErrors>inline</MacroErrors>
</content>
<security>

View File

@@ -0,0 +1,20 @@
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on November 13, 2010 */
@font-face {
font-family: 'Museo700';
src: url('museo700-regular-webfont.eot');
src: url('museo700-regular-webfont.woff') format('woff'), url('museo700-regular-webfont.ttf') format('truetype'),url('museo700-regular-webfont.svgz#webfont2nqRdrT9') format('svg'), url('museo700-regular-webfont.svg#webfont2nqRdrT9') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Museo300';
src: url('museo300-regular-webfont.eot');
src: url('museo300-regular-webfont.woff') format('woff'), url('museo300-regular-webfont.svgz#webfontMsAuFuwO') format('svg'), url('museo300-regular-webfont.svg#webfontMsAuFuwO') format('svg');
font-weight: normal;
font-style: normal;
}

View File

@@ -0,0 +1,253 @@
<?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>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : Copyright c 2008 by Jos Buivengaexljbris All rights reserved
Designer : Jos Buivenga
Foundry : Jos Buivenga
Foundry URL : httpwwwjosbuivengademonnl
</metadata>
<defs>
<font id="webfontMsAuFuwO" horiz-adv-x="1241" >
<font-face units-per-em="2048" ascent="1536" descent="-512" />
<missing-glyph horiz-adv-x="557" />
<glyph unicode=" " horiz-adv-x="557" />
<glyph unicode="&#x09;" horiz-adv-x="557" />
<glyph unicode="&#xa0;" horiz-adv-x="557" />
<glyph unicode="!" horiz-adv-x="608" d="M238 377l-7 1063h144l-6 -1063h-131zM227 0v158h158v-158h-158z" />
<glyph unicode="&#x22;" horiz-adv-x="638" d="M383 1114v346h121v-346h-121zM135 1114v346h121v-346h-121z" />
<glyph unicode="#" horiz-adv-x="1460" d="M305 0l70 399h-291l20 115h289l72 401h-289l19 115h290l72 410h125l-72 -410h355l71 410h125l-71 -410h286l-20 -115h-287l-70 -401h285l-18 -115h-287l-70 -399h-125l70 399h-354l-70 -399h-125zM520 514h352l72 401h-354z" />
<glyph unicode="$" horiz-adv-x="1089" d="M94 246l107 86q4 -8 14 -23.5t44 -54.5t72 -67.5t101.5 -53t132.5 -24.5q127 0 206 73.5t79 182.5q0 72 -39 128t-101.5 94t-138.5 72l-152 74q-77 39 -139.5 86t-101.5 120t-39 167q0 135 100.5 233.5t266.5 118.5v195h117v-191q129 -12 232 -71.5t103 -173.5v-103h-135 v68q0 63 -70.5 106t-170.5 43q-135 0 -215 -64.5t-80 -158.5q0 -80 52 -140.5t132 -96t171 -81t171 -91.5t132 -131t52 -197q0 -150 -103 -262.5t-271 -128.5v-191h-117v191q-80 8 -151.5 38.5t-116.5 67.5t-80 74t-49 61z" />
<glyph unicode="%" horiz-adv-x="1521" d="M414 895q-119 0 -203 83t-84 202q0 117 84 200.5t202.5 83.5t203.5 -84t85 -200q0 -119 -83.5 -202t-204.5 -83zM139 0l1098 1440h145l-1095 -1440h-148zM413.5 1010q69.5 0 119 49t49.5 121q0 70 -49.5 120t-119 50t-117.5 -50.5t-48 -119.5q0 -72 48 -121t117.5 -49z M819 258q0 119 84 203t203 84t204 -84t85 -203q0 -117 -85 -200t-204 -83t-203 83t-84 200zM942 260q0 -72 47 -121t117 -49t119 49t49 121q0 70 -49 120t-119 50t-117 -50t-47 -120z" />
<glyph unicode="&#x26;" horiz-adv-x="1277" d="M94 401q0 127 68.5 233.5t191.5 141.5v4q-8 2 -21.5 8.5t-47 31t-60 57t-48 92t-21.5 131.5q0 162 115.5 263t310.5 101q35 0 76.5 -5t66.5 -11l25 -6l-41 -117q-68 14 -119 14q-125 0 -206 -68.5t-81 -178.5q0 -43 11.5 -82t41 -83t96 -70t160.5 -26h299v199h142v-199 h190v-126h-190v-211q0 -252 -126 -385.5t-347 -133.5q-213 0 -349.5 122t-136.5 304zM240 406q0 -127 92 -212t247.5 -85t243.5 95t88 294v207h-295q-184 0 -280 -80t-96 -219z" />
<glyph unicode="'" horiz-adv-x="391" d="M135 1114v346h121v-346h-121z" />
<glyph unicode="(" horiz-adv-x="632" d="M174 680q0 461 221 815h131q-223 -377 -223 -805q0 -473 236 -885h-129q-236 386 -236 875z" />
<glyph unicode=")" horiz-adv-x="632" d="M94 -195q236 412 236 885q0 428 -224 805h132q221 -360 221 -815q0 -489 -236 -875h-129z" />
<glyph unicode="*" horiz-adv-x="976" d="M311 690l-108 78l192 246v4l-301 86l41 129l295 -109l-12 316h139l-14 -316l299 107l41 -125l-303 -88v-4l192 -246l-106 -80l-177 260h-4z" />
<glyph unicode="+" d="M86 522v119h473v522h125v-522h471v-119h-471v-522h-125v522h-473z" />
<glyph unicode="," horiz-adv-x="440" d="M164 168h149l-149 -367h-117z" />
<glyph unicode="-" horiz-adv-x="884" d="M152 518v127h581v-127h-581z" />
<glyph unicode="." horiz-adv-x="440" d="M141 0v164h158v-164h-158z" />
<glyph unicode="/" horiz-adv-x="665" d="M6 -86l520 1606h129l-518 -1606h-131z" />
<glyph unicode="0" horiz-adv-x="1232" d="M616 -25q-496 0 -495 746q0 743 495 743q180 0 295 -102t159 -262t44 -379q0 -746 -498 -746zM616.5 109q350.5 0 350.5 612q0 610 -350.5 610t-350.5 -610q0 -612 350.5 -612z" />
<glyph unicode="1" horiz-adv-x="974" d="M131 0v127h322v1057l2 80h-4q-14 -31 -72 -86l-154 -154l-90 92l326 324h135v-1313h315v-127h-780z" />
<glyph unicode="2" horiz-adv-x="1155" d="M86 141q0 147 79 257t190 176l224 129q112 62 190.5 150.5t78.5 205.5t-81 193.5t-214 76.5q-106 0 -181 -47t-75 -108v-68h-135v106q0 66 40 116t102.5 79t128 43t124.5 14q201 0 319.5 -115.5t118.5 -287.5q0 -139 -78.5 -245.5t-190.5 -174.5l-223 -130 q-112 -62 -191 -148.5t-79 -194.5q0 -41 48 -41h602q45 0 45 45v96h133v-143q0 -66 -30 -95.5t-95 -29.5h-721q-72 0 -100.5 32.5t-28.5 108.5z" />
<glyph unicode="3" horiz-adv-x="1081" d="M53 176l86 107q6 -6 17.5 -18.5t49.5 -42t79 -52.5t104.5 -41t126.5 -18q131 0 228.5 88t97.5 223q0 139 -102.5 221t-247.5 82h-101l-33 84l355 426q35 47 73 80v4q-41 -6 -116 -6h-375q-45 0 -45 -45v-97h-133v144q0 68 27.5 96.5t93.5 28.5h731v-94l-424 -498 q74 -4 146.5 -27.5t142 -71t112.5 -131t43 -194.5q0 -184 -136 -316.5t-339 -132.5q-80 0 -156.5 20.5t-129 50.5t-94.5 59.5t-60 50.5z" />
<glyph unicode="4" horiz-adv-x="1150" d="M31 397v95l700 948h154v-916h229v-127h-229v-397h-144v397h-710zM743 524v588l7 139h-5q-35 -59 -73 -110l-400 -529l-75 -90v-4q57 6 118 6h428z" />
<glyph unicode="5" horiz-adv-x="1165" d="M111 180l90 101q4 -6 13 -18.5t40 -41t65.5 -51.5t93 -41t122.5 -18q154 0 256 96t102 239q0 147 -107.5 242.5t-265.5 95.5q-72 0 -141.5 -19.5t-102.5 -39.5l-32 -20l-74 30l61 580q6 68 34 96.5t91 28.5h473q66 0 94.5 -30t28.5 -95v-144h-133v97q0 45 -45 45h-364 q-39 0 -45 -45l-37 -326l-13 -82h4q90 53 218 53q217 0 360 -136t143 -333q0 -195 -144 -332t-361 -137q-80 0 -154 21.5t-121 51.5t-83 59.5t-50 52.5z" />
<glyph unicode="6" horiz-adv-x="1146" d="M608 -25q-231 0 -375.5 185.5t-144.5 472.5q0 113 22.5 227.5t72.5 224t122 193.5t179.5 135t236.5 51q70 0 136.5 -15t96.5 -30l31 -14l-53 -125q-90 51 -209 51q-143 0 -250.5 -89t-162 -219t-68.5 -284h4q49 82 149.5 128t216.5 46q197 0 323 -128t126 -328 q0 -219 -129 -350.5t-324 -131.5zM242 541q0 -154 106.5 -293t257.5 -139q143 0 226 97t83 249q0 150 -89 240.5t-236 90.5q-139 0 -243.5 -77.5t-104.5 -167.5z" />
<glyph unicode="7" horiz-adv-x="1048" d="M162 0l626 1180l80 133v4q-37 -4 -108 -4h-518q-45 0 -45 -45v-97h-136v144q0 66 29 95.5t94 29.5h850v-99l-712 -1341h-160z" />
<glyph unicode="8" horiz-adv-x="1167" d="M96 406q0 70 27 135t64.5 108t74.5 76t64 47l26 14v5l-21 11q-13 7 -47 33.5t-59.5 58.5t-47 84t-21.5 109q0 158 116.5 267.5t317.5 109.5t320.5 -106.5t119.5 -276.5q0 -61 -19.5 -120.5t-48 -100.5t-57 -72.5t-49.5 -46.5l-18 -16v-4q113 -57 172 -134t59 -196 q0 -170 -140.5 -293t-342.5 -123q-201 0 -345.5 117t-144.5 314zM575 825q104 -39 130 -39q45 0 113.5 94.5t68.5 196.5q0 115 -83 184.5t-214 69.5q-133 0 -212 -69.5t-79 -174.5q0 -102 68.5 -156.5t207.5 -105.5zM244 412q0 -135 101 -219t241 -84q133 0 234.5 80.5 t101.5 203.5q0 102 -68 158.5t-207 112.5q-135 57 -168 57q-55 0 -145 -95t-90 -214z" />
<glyph unicode="9" horiz-adv-x="1146" d="M162 35l53 125q90 -51 209 -51q143 0 251.5 90t163 220t66.5 283h-4q-49 -82 -150.5 -129t-215.5 -47q-197 0 -322 128t-125 329q0 219 128 350t323 131q231 0 375.5 -185t144.5 -472q0 -143 -38 -285.5t-110.5 -267.5t-198.5 -202t-286 -77q-70 0 -136.5 14.5 t-96.5 30.5zM557 653q139 0 243.5 78t104.5 168q0 154 -106.5 293t-257.5 139q-143 0 -226.5 -97t-83.5 -249q0 -150 89.5 -241t236.5 -91z" />
<glyph unicode=":" horiz-adv-x="579" d="M211 866v164h158v-164h-158zM211 0v164h158v-164h-158z" />
<glyph unicode=";" horiz-adv-x="579" d="M211 866v164h158v-164h-158zM111 -199l98 367h149l-131 -367h-116z" />
<glyph unicode="&#x3c;" d="M141 530v103l926 414v-138l-752 -325v-4l752 -326v-137z" />
<glyph unicode="=" d="M143 700v119h955v-119h-955zM143 344v119h955v-119h-955z" />
<glyph unicode="&#x3e;" d="M158 117v137l751 326v4l-751 325v138l925 -414v-103z" />
<glyph unicode="?" horiz-adv-x="882" d="M313 377v92q0 90 37 164t89 125l106 99q53 48 90 109.5t37 131.5q0 100 -76 167.5t-193 67.5q-135 -2 -247 -88l-76 105q14 12 40.5 31.5t112.5 52t177 32.5q176 0 292.5 -102t116.5 -260q0 -94 -38 -170t-92 -126l-107 -97q-53 -47 -91 -109.5t-38 -136.5v-88h-140z M305 0v158h158v-158h-158z" />
<glyph unicode="@" horiz-adv-x="1513" d="M84 495.5q0 313.5 214 532.5t515 219q258 0 380 -110.5t122 -276.5v-645h145v-115h-551q-174 0 -291.5 116t-117.5 277.5t116.5 277.5t292.5 116h267q-4 102 -92.5 170.5t-260.5 68.5q-250 0 -423 -185t-173 -445q0 -264 173 -445.5t434 -181.5v-123q-317 0 -533.5 218 t-216.5 531.5zM643 495.5q0 -116.5 81 -198.5t198 -82h254v563h-250q-121 0 -202 -83t-81 -199.5z" />
<glyph unicode="A" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186z" />
<glyph unicode="B" d="M215 125v1188h-133v127h612q172 0 280.5 -98.5t108.5 -264.5q0 -223 -184 -313v-4q111 -31 176.5 -128t65.5 -229q0 -186 -122 -294.5t-308 -108.5h-371q-66 0 -95.5 29.5t-29.5 95.5zM358 815h334q109 0 176.5 69.5t67.5 182.5q0 111 -66.5 178.5t-179.5 67.5h-332v-498 zM358 172q0 -45 45 -45h308q131 0 205.5 76t74.5 205t-77.5 206.5t-204.5 77.5h-351v-520z" />
<glyph unicode="C" horiz-adv-x="1421" d="M78 731q0 311 203.5 522t506.5 211q82 0 171.5 -17t174.5 -52t139 -96.5t54 -139.5v-119h-135v80q0 94 -129 151.5t-270 57.5q-242 0 -404 -169t-162 -429t164 -440t408 -180q250 0 438 170l33 32l82 -104q-8 -10 -23.5 -25.5t-69 -55.5t-114 -70.5t-154.5 -56.5 t-194 -26q-313 0 -516 218.5t-203 537.5z" />
<glyph unicode="D" horiz-adv-x="1464" d="M219 125v1188h-133v127h578q330 0 526 -191.5t196 -527.5q0 -340 -196.5 -530.5t-525.5 -190.5h-320q-66 0 -95.5 29.5t-29.5 95.5zM362 172q0 -45 46 -45h241q270 0 429 154.5t159 439.5q0 283 -158.5 437.5t-429.5 154.5h-287v-1141z" />
<glyph unicode="E" horiz-adv-x="1142" d="M219 125v1188h-133v127h823q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-492v-525h541v-126h-541v-490q0 -45 46 -45h505q45 0 45 45v96h134v-143q0 -66 -30 -95.5t-95 -29.5h-623q-66 0 -95.5 29.5t-29.5 95.5z" />
<glyph unicode="F" horiz-adv-x="1021" d="M219 0v1313h-133v127h766q66 0 94.5 -30t28.5 -95v-144h-133v97q0 45 -45 45h-435v-541h523v-127h-523v-645h-143z" />
<glyph unicode="G" horiz-adv-x="1495" d="M80 723q0 311 207 526t512 215q285 0 475 -151l29 -25l-84 -106q-18 16 -52 40.5t-143 65.5t-223 41q-244 0 -408 -173t-164 -433q0 -264 162 -438t408 -174q80 0 155.5 21.5t128 52t92 62.5t58.5 52l20 23v178q0 45 -45 45h-88v127h144q66 0 95.5 -30t29.5 -95v-547 h-132v109l3 61h-5q-6 -8 -19 -21.5t-58 -46t-96.5 -58.5t-132.5 -47.5t-165 -21.5q-297 0 -500.5 213t-203.5 535z" />
<glyph unicode="H" horiz-adv-x="1550" d="M219 0v1268q0 45 -45 45h-88v127h152q66 0 95 -30t29 -95v-531h828v531q0 66 28.5 95.5t94.5 29.5h153v-127h-88q-45 0 -45 -45v-1268h-143v657h-828v-657h-143z" />
<glyph unicode="I" horiz-adv-x="600" d="M94 0v127h135v1186h-135v127h412v-127h-137v-1186h137v-127h-412z" />
<glyph unicode="J" horiz-adv-x="1034" d="M49 403v58h144v-49q0 -158 76.5 -229.5t187.5 -71.5q109 0 184.5 71.5t75.5 225.5v860q0 45 -45 45h-357v127h420q66 0 95.5 -30t29.5 -95v-912q0 -217 -118.5 -322.5t-286.5 -105.5t-287 106.5t-119 321.5z" />
<glyph unicode="K" horiz-adv-x="1208" d="M219 0v1268q0 45 -45 45h-88v127h152q66 0 95 -30t29 -95v-500h173q90 0 120 51l349 574h163l-370 -604q-37 -59 -74 -80v-4q35 -12 70 -82l249 -496q14 -31 37 -39t68 -8h41v-127h-76q-90 0 -127 19.5t-72 89.5l-262 526q-25 53 -131 53h-158v-688h-143z" />
<glyph unicode="L" horiz-adv-x="1085" d="M219 125v1143q0 45 -45 45h-88v127h152q66 0 95 -30t29 -95v-1143q0 -45 46 -45h477q45 0 45 45v96h135v-143q0 -66 -29.5 -95.5t-95.5 -29.5h-596q-66 0 -95.5 29.5t-29.5 95.5z" />
<glyph unicode="M" horiz-adv-x="1730" d="M45 0v127h76q43 0 45 45l100 1268h146l381 -838l71 -170h4q37 96 70 170l381 838h145l101 -1268q2 -45 45 -45h78v-127h-140q-66 0 -93.5 28.5t-31.5 96.5l-67 874l-6 201h-4q-39 -127 -74 -201l-342 -731h-129l-340 731l-76 205h-4q0 -127 -6 -205l-68 -874 q-4 -68 -31.5 -96.5t-93.5 -28.5h-137z" />
<glyph unicode="N" horiz-adv-x="1556" d="M86 0v127h88q45 0 45 45v1268h131l735 -1026l117 -189h4q-10 113 -10 189v901q0 66 29.5 95.5t95.5 29.5h152v-127h-89q-45 0 -45 -45v-1268h-131l-735 1026l-119 186h-4q12 -111 12 -186v-901q0 -66 -29.5 -95.5t-94.5 -29.5h-152z" />
<glyph unicode="O" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427z" />
<glyph unicode="P" horiz-adv-x="1185" d="M219 0v1313h-133v127h608q195 0 320 -119t125 -315q0 -199 -125 -320t-320 -121h-332v-565h-143zM362 692h314q143 0 229 84t86 230q0 143 -85 225t-228 82h-316v-621z" />
<glyph unicode="Q" horiz-adv-x="1619" d="M78 729q0 309 212 522t517 213q311 0 524 -213t213 -522q0 -283 -180 -496l176 -176l-88 -92l-176 178q-197 -168 -469 -168q-305 0 -517 219.5t-212 534.5zM227 729q0 -260 168 -439t412 -179q205 0 356 120l13 11l-172 174l88 92l170 -176q133 170 133 397 q0 254 -169 426t-419 172q-246 0 -413 -172t-167 -426z" />
<glyph unicode="R" horiz-adv-x="1239" d="M219 0v1313h-133v127h610q182 0 298 -111.5t116 -298.5q0 -158 -82 -259t-197 -126v-4q29 -16 50 -57l206 -410q14 -31 37 -39t66 -8h29v-127h-64q-90 0 -127 19.5t-72 89.5l-206 411q-29 55 -56.5 70.5t-89.5 15.5h-242v-606h-143zM362 733h320q129 0 204 79t75 214 q0 133 -75 210t-202 77h-322v-580z" />
<glyph unicode="S" horiz-adv-x="1060" d="M76 180l88 105q6 -6 17.5 -18.5t48 -43t77.5 -53.5t103.5 -42t126.5 -19q121 0 202.5 71.5t81.5 184.5q0 98 -72.5 167.5t-177.5 116.5l-210 97q-105 50 -177.5 138.5t-72.5 211.5q0 154 122.5 261t317.5 107q82 0 165 -20.5t153.5 -79.5t70.5 -147v-103h-135v68 q0 63 -75 106t-177 43q-135 0 -215 -67.5t-80 -163.5q0 -59 30.5 -107.5t81 -80t114 -64.5t130 -59.5t130 -65.5t113.5 -83t81 -112.5t31 -154.5q0 -168 -120 -283t-317 -115q-82 0 -159.5 21.5t-128.5 51.5t-91 59.5t-59 52.5z" />
<glyph unicode="T" horiz-adv-x="1269" d="M563 0v1313h-356q-45 0 -45 -45v-97h-131v152q0 66 25.5 91.5t90.5 25.5h975q66 0 91.5 -25.5t25.5 -91.5v-152h-133v97q0 45 -45 45h-354v-1313h-144z" />
<glyph unicode="U" horiz-adv-x="1468" d="M203 494v774q0 45 -45 45h-88v127h151q66 0 95.5 -30t29.5 -95v-815q0 -180 105.5 -284.5t281.5 -104.5q178 0 283.5 105.5t105.5 287.5v811q0 66 30 95.5t95 29.5h152v-127h-88q-45 0 -45 -45v-774q0 -233 -146.5 -376t-384 -143t-385 143t-147.5 376z" />
<glyph unicode="V" horiz-adv-x="1337" d="M592 0l-473 1268q-16 45 -74 45h-20v127h63q78 0 109.5 -22.5t58.5 -96.5l354 -969l56 -186h4q29 113 55 186l354 969q27 74 59.5 96.5t110.5 22.5h62v-127h-19q-57 0 -73 -45l-474 -1268h-153z" />
<glyph unicode="W" horiz-adv-x="1935" d="M465 0l-330 1268q-12 45 -76 45h-24v127h63q82 0 119 -23.5t55 -95.5l250 -993l31 -154h4q18 80 39 154l317 1106h142l288 -1106l33 -154h4q14 80 33 154l250 993q18 72 55 95.5t119 23.5h64v-127h-23q-63 0 -76 -45l-332 -1268h-170l-268 1001l-47 213h-4 q-25 -119 -51 -210l-295 -1004h-170z" />
<glyph unicode="X" horiz-adv-x="1167" d="M31 0l458 752l-311 508q-33 53 -102 53h-43v127h76q78 0 116.5 -22.5t81.5 -92.5l185 -309l92 -164h4q43 90 88 164l184 309q43 70 82 92.5t117 22.5h76v-127h-43q-70 0 -103 -53l-313 -508l461 -752h-164l-299 496l-92 157h-4q-41 -86 -86 -159l-297 -494h-164z" />
<glyph unicode="Y" horiz-adv-x="1212" d="M535 0v627l-385 633q-33 53 -97 53h-33v127h56q76 0 113.5 -20.5t82.5 -94.5l244 -407l88 -162h4q43 86 88 162l244 407q45 74 83 94.5t114 20.5h55v-127h-33q-63 0 -94 -53l-387 -633v-627h-143z" />
<glyph unicode="Z" horiz-adv-x="1177" d="M39 0v100l772 1082l50 65q26 33 40 49l14 17v4q-35 -4 -104 -4h-573q-45 0 -45 -45v-97h-134v144q0 66 30 95.5t95 29.5h908v-101l-770 -1081l-52 -65l-41 -50l-14 -16v-4q35 4 107 4h620q45 0 45 45v96h133v-143q0 -66 -29.5 -95.5t-95.5 -29.5h-956z" />
<glyph unicode="[" horiz-adv-x="620" d="M207 -70v1440q0 66 29.5 95.5t95.5 29.5h151v-115h-102q-45 0 -45 -45v-1370q0 -45 45 -45h102v-115h-151q-66 0 -95.5 29.5t-29.5 95.5z" />
<glyph unicode="\" horiz-adv-x="649" d="M530 -86l-520 1606h131l518 -1606h-129z" />
<glyph unicode="]" horiz-adv-x="620" d="M137 -80h103q45 0 45 45v1370q0 45 -45 45h-103v115h152q66 0 95.5 -29.5t29.5 -95.5v-1440q0 -66 -30 -95.5t-95 -29.5h-152v115z" />
<glyph unicode="^" d="M150 512l405 928h96l406 -928h-133l-320 758l-319 -758h-135z" />
<glyph unicode="_" horiz-adv-x="1077" d="M10 0h1057v-119h-1057v119z" />
<glyph unicode="`" horiz-adv-x="737" d="M369 1540l-179 244h156l143 -244h-120z" />
<glyph unicode="a" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97z" />
<glyph unicode="b" horiz-adv-x="1196" d="M172 0v1274q0 45 -45 45h-86v121h145q66 0 95.5 -30t29.5 -95v-373l-4 -84h4l12 22q7 13 35.5 47t65.5 59.5t100.5 47t137.5 21.5q205 0 326.5 -149.5t121.5 -391.5t-130 -390.5t-335 -148.5q-203 0 -315 162l-23 37h-4q4 -35 4 -84v-90h-135zM307 512q0 -168 86 -291 t242 -123q141 0 236.5 113t95.5 303q0 186 -91.5 300t-234.5 114q-141 0 -237.5 -104.5t-96.5 -311.5z" />
<glyph unicode="c" horiz-adv-x="1081" d="M82 514q0 236 155.5 388.5t387.5 152.5q49 0 107.5 -11.5t118.5 -34t100 -68.5t40 -105v-93h-131v60q0 59 -79 93t-156 34q-170 0 -285 -116t-115 -300t118 -298t286 -114q186 0 317 131l15 15l65 -105l-16.5 -17t-49 -41t-81.5 -51.5t-113 -40t-143 -18.5 q-233 0 -387 150.5t-154 388.5z" />
<glyph unicode="d" horiz-adv-x="1204" d="M86 516q0 242 129 390.5t334 148.5q207 0 315 -158l21 -35h4q-4 35 -4 78v334q0 45 -45 45h-86v121h145q66 0 95.5 -30t29.5 -95v-1149q0 -45 45 -45h86v-121h-143q-123 0 -123 115l4 65h-4l-11 -22q-7 -14 -36 -49t-66 -62t-101.5 -49.5t-139.5 -22.5q-205 0 -327 149.5 t-122 391.5zM555 100q141 0 237.5 104.5t96.5 311.5q0 170 -86 292t-242 122q-141 0 -236.5 -112.5t-95.5 -301t90.5 -302.5t235.5 -114z" />
<glyph unicode="e" horiz-adv-x="1122" d="M82 514q0 246 146.5 393.5t361.5 147.5q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-791q2 -188 118 -299t282 -111q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-231 0 -385 151.5t-154 387.5zM233 621h646q-6 154 -88 235.5t-203 81.5 q-133 0 -231.5 -83.5t-123.5 -233.5z" />
<glyph unicode="f" horiz-adv-x="624" d="M180 0v913h-129v117h129v37q0 119 38 202t98.5 118.5t112.5 49t106 13.5l63 -4v-125q-18 4 -49 4q-37 0 -70 -9t-72.5 -32.5t-63.5 -80t-24 -136.5v-37h263v-117h-263v-913h-139z" />
<glyph unicode="g" horiz-adv-x="1185" d="M86 534.5q0 233.5 121 377t325 143.5q78 0 141.5 -18.5t99.5 -44t60.5 -51.5t32.5 -44l8 -18h5v39q0 113 116 112h144v-121h-84q-45 0 -45 -45v-839q0 -229 -142.5 -342t-353.5 -113q-176 0 -336 82l53 117q127 -72 279 -72q162 0 261 80t99 243v91l2 73h-4 q-96 -178 -323 -178q-207 0 -333 147.5t-126 381zM565 131q137 0 222 95.5t85 308.5q0 393 -325 393q-150 0 -234 -103.5t-84 -288t92 -295t244 -110.5z" />
<glyph unicode="h" horiz-adv-x="1239" d="M172 0v1274q0 45 -45 45h-86v121h145q66 0 95.5 -29t29.5 -92v-436l-4 -84h4q37 92 144.5 174t263.5 82q186 0 266 -100.5t80 -299.5v-489q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5v493q0 70 -7.5 118t-30 94.5t-69.5 70t-119 23.5q-131 0 -234.5 -82 t-137.5 -211q-16 -55 -17 -137v-494h-139z" />
<glyph unicode="i" horiz-adv-x="514" d="M184 1264v176h135v-176h-135zM188 125v739q0 45 -45 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5z" />
<glyph unicode="j" horiz-adv-x="548" d="M233 1264v176h134v-176h-134zM-43 -295q18 -2 45 -2q37 0 72 9t74.5 34t63.5 82t24 139v897q0 45 -46 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-944q0 -121 -38 -203t-99.5 -117.5t-113.5 -49t-108 -13.5l-59 6v121z" />
<glyph unicode="k" horiz-adv-x="1019" d="M172 0v1274q0 45 -45 45h-86v121h145q68 0 96.5 -27t28.5 -92v-684h107q78 0 117 49l264 344h170l-297 -377q-23 -29 -42.5 -47t-27.5 -22l-8 -4v-5q31 -14 63 -75l187 -334q14 -27 33.5 -36t60.5 -9h55v-121h-96q-78 0 -110.5 19.5t-67.5 82.5l-205 369q-25 45 -108 45 h-95v-516h-139z" />
<glyph unicode="l" horiz-adv-x="501" d="M176 125v1149q0 45 -45 45h-86v121h145q66 0 95.5 -30t29.5 -95v-1149q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5z" />
<glyph unicode="m" horiz-adv-x="1906" d="M178 0v864q0 45 -45 45h-86v121h143q125 0 125 -115v-47l-4 -73h4q39 106 146.5 183t226.5 77q272 0 320 -258h4q43 109 147.5 183.5t231.5 74.5q182 0 262 -100.5t80 -299.5v-489q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5v496q0 145 -47 226t-176 81 q-113 0 -203 -86t-123 -205q-18 -57 -18 -150v-487h-139v621q0 68 -7.5 114.5t-28 95t-66.5 73t-115 24.5q-121 0 -211 -88t-125 -215q-16 -57 -17 -138v-487h-139z" />
<glyph unicode="n" horiz-adv-x="1245" d="M178 0v864q0 45 -45 45h-86v121h143q125 0 125 -115v-47l-4 -73h4q37 94 142.5 177t267.5 83q186 0 266 -100.5t80 -299.5v-489q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5v493q0 145 -44 225.5t-179 80.5q-131 0 -235.5 -81t-139.5 -210q-16 -57 -17 -139 v-494h-139z" />
<glyph unicode="o" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291z" />
<glyph unicode="p" horiz-adv-x="1202" d="M178 -410v1274q0 45 -45 45h-86v121h141q123 0 123 -108l-2 -70h4l12 21q7 13 35.5 49t64.5 63t101.5 48.5t141.5 21.5q205 0 326.5 -149.5t121.5 -391.5t-129 -390.5t-332 -148.5q-70 0 -131 20.5t-97 49.5t-62.5 56.5t-36.5 48.5l-11 20h-4q4 -37 4 -90v-490h-139z M313 512q0 -168 87 -291t241 -123q141 0 236.5 113t95.5 303q0 188 -90 301t-236 113q-141 0 -237.5 -104.5t-96.5 -311.5z" />
<glyph unicode="q" horiz-adv-x="1204" d="M88 516q0 242 129 390.5t334 148.5q70 0 131 -20.5t98 -50.5t63.5 -58.5t37.5 -48.5l10 -21h4q-2 29 -2 68q0 106 123 106h141v-121h-86q-45 0 -45 -45v-1274h-139v494l4 90h-4l-11 -21q-7 -13 -36 -47t-66 -61t-100.5 -48.5t-136.5 -21.5q-205 0 -327 149.5t-122 391.5z M557 100q141 0 237.5 104.5t96.5 311.5q0 170 -86 292t-242 122q-141 0 -237.5 -112.5t-96.5 -301t91.5 -302.5t236.5 -114z" />
<glyph unicode="r" horiz-adv-x="741" d="M178 0v864q0 45 -45 45h-86v121h143q125 0 125 -117v-69l-4 -78h4q39 123 124 198.5t202 75.5l55 -6v-137q-25 4 -51 4q-106 0 -185 -73.5t-114 -192.5q-29 -92 -29 -201v-434h-139z" />
<glyph unicode="s" horiz-adv-x="901" d="M59 156l80 96q4 -6 13.5 -16.5t40 -38t64.5 -48t88 -37t112 -16.5q92 0 154.5 43t62.5 121q0 61 -59.5 106.5t-144.5 78t-170 69.5t-144.5 103.5t-59.5 158.5q0 135 102.5 207t264.5 72q45 0 94 -9.5t100.5 -29t85 -58t33.5 -90.5v-88h-131v49q0 51 -57.5 78t-120.5 27 q-229 0 -229 -150q0 -63 59 -108t144 -77t170 -68.5t144.5 -104.5t59.5 -162q0 -127 -102.5 -208t-257.5 -81q-227 0 -373 154z" />
<glyph unicode="t" horiz-adv-x="686" d="M190 375v538h-135v117h138v285h137v-285h258v-117h-258v-524q0 -70 17.5 -121t42 -79.5t57 -45t59 -21.5t55.5 -5l47 4v-125q-25 -4 -59 -4q-43 0 -84 6t-93.5 29.5t-90 62.5t-64.5 113t-27 172z" />
<glyph unicode="u" horiz-adv-x="1234" d="M174 375v489q0 45 -45 45h-86v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-4q-39 -94 -144.5 -177.5t-257.5 -83.5q-180 0 -263 98.5t-83 301.5z " />
<glyph unicode="v" horiz-adv-x="1060" d="M455 0l-336 862q-18 47 -72 47h-18v121h55q74 0 105.5 -21.5t58.5 -90.5l248 -644l34 -120h5q16 70 34 120l248 644q27 70 58.5 91t103.5 21h53v-121h-18q-55 0 -72 -47l-336 -862h-151z" />
<glyph unicode="w" horiz-adv-x="1708" d="M414 0l-295 862q-16 47 -72 47h-27v121h72q76 0 107.5 -21.5t54.5 -93.5l211 -653l31 -110h4q16 61 32 110l252 764h140l252 -764l32 -110h4q12 59 29 110l213 653q23 72 54.5 93.5t107.5 21.5h72v-121h-29q-55 0 -72 -47l-295 -862h-153l-252 733l-31 111h-4 q-14 -59 -33 -111l-250 -733h-155z" />
<glyph unicode="x" horiz-adv-x="976" d="M39 0l358 537l-223 329q-31 43 -94 43h-43v121h76q78 0 111.5 -20.5t80.5 -91.5l148 -230l34 -61h5l32 61l150 230q47 72 80.5 92t111.5 20h74v-121h-41q-70 0 -96 -41l-223 -331l360 -537h-164l-252 383l-32 57h-5q-16 -29 -34 -57l-252 -383h-162z" />
<glyph unicode="y" horiz-adv-x="1103" d="M82 -227q0 -4 18.5 -21.5t57.5 -37t78 -19.5q121 0 190 168l61 141l-362 858q-20 47 -72 47h-20v121h63q70 0 99.5 -21.5t58.5 -90.5l264 -644l37 -110h4q14 59 35 110l254 644q27 70 57.5 91t102.5 21h63v-121h-20q-53 0 -72 -47l-444 -1077q-41 -100 -118 -157.5 t-177 -57.5q-133 0 -220 94l-4 6z" />
<glyph unicode="z" horiz-adv-x="1021" d="M80 0v90l579 723l82 94v4q-35 -4 -102 -4h-377q-45 0 -45 -45v-80h-131v123q0 66 29.5 95.5t95.5 29.5h715v-92l-578 -721l-86 -94v-4q37 4 105 4h426q45 0 45 45v80h131v-123q0 -66 -30 -95.5t-95 -29.5h-764z" />
<glyph unicode="{" horiz-adv-x="667" d="M242 170v195q0 59 -18.5 105t-43 69.5t-50.5 38t-44 16.5l-18 4v127q6 0 18 3t42 18.5t53.5 38t42 69.5t18.5 107v167q0 96 24.5 168t58 109t80 58.5t78 26.5t64.5 5h31v-115h-19q-27 0 -52.5 -7t-60 -30.5t-55 -79t-20.5 -139.5v-200q0 -55 -16.5 -103.5t-41 -76 t-49 -47t-41.5 -25.5l-16 -8v-5q6 -2 17.5 -7t40 -24.5t50 -46t39 -74.5t17.5 -108v-225q0 -82 21.5 -138t55 -79t59 -31t52.5 -8h19v-115q-12 -2 -31 -2q-33 0 -64.5 5.5t-78 28t-80 59t-58 108.5t-24.5 168z" />
<glyph unicode="|" horiz-adv-x="583" d="M227 -322v1936h129v-1936h-129z" />
<glyph unicode="}" horiz-adv-x="667" d="M90 -82h21q25 0 50 8t59 31t55.5 79t21.5 138v225q0 59 16.5 107.5t41 75t49 46t40.5 25.5l17 6v5q-6 2 -17.5 7t-40 26.5t-50 48t-39 74.5t-17.5 104v200q0 84 -20.5 139.5t-55.5 79t-59.5 30.5t-50.5 7h-21v115h33q31 0 62.5 -5t77.5 -27.5t80 -58.5t58.5 -107.5 t24.5 -168.5v-167q0 -174 137 -226l37 -10v-127q-6 0 -18.5 -3t-42 -18.5t-53 -38t-42 -68.5t-18.5 -105v-195q0 -96 -24.5 -168t-58.5 -108.5t-80 -59t-77.5 -28t-62.5 -5.5l-33 2v115z" />
<glyph unicode="~" d="M137 428q0 162 69.5 239.5t190.5 77.5q61 0 110.5 -21.5t81.5 -52.5l61 -64q30 -32 69 -53.5t86 -21.5q82 0 113.5 63.5t31.5 141.5h121q0 -162 -69.5 -239.5t-190.5 -77.5q-76 0 -134.5 33.5t-89 72.5t-78.5 73t-106 34q-82 0 -113.5 -63.5t-31.5 -141.5h-121z" />
<glyph unicode="&#xa1;" horiz-adv-x="608" d="M223 872v158h158v-158h-158zM231 -410l7 1063h131l6 -1063h-144z" />
<glyph unicode="&#xa2;" horiz-adv-x="1116" d="M524 -80v227q-195 23 -303 182.5t-108 391t108.5 390.5t302.5 181v228h117v-228q248 -29 367 -303l-131 -49q-94 221 -287 221q-162 0 -247 -123t-85 -317q0 -197 84 -318.5t248 -121.5q193 0 287 221l131 -51q-125 -281 -367 -304v-227h-117z" />
<glyph unicode="&#xa3;" horiz-adv-x="1191" d="M111 0v127h129v541h-93v112h93v305q0 162 119.5 270.5t302.5 108.5q178 0 313 -110l8 -6l-88 -103q-98 86 -233 86q-129 0 -204 -72.5t-75 -181.5v-297h391v-112h-391v-541h539q45 0 45 45v96h133v-143q0 -66 -30 -95.5t-95 -29.5h-864z" />
<glyph unicode="&#xa5;" horiz-adv-x="1243" d="M219 436v107h332v84l-59 94h-281v104h215v4l-268 439q-27 45 -99 45h-24v127h49q78 0 119 -21.5t84 -93.5l243 -407l88 -160h5q43 84 88 160l245 407q41 72 83 93.5t120 21.5h47v-127h-24q-72 0 -99 -45l-266 -439v-4h205v-104h-272l-56 -94v-84h328v-107h-328v-436h-143 v436h-332z" />
<glyph unicode="&#xa7;" horiz-adv-x="849" d="M297 174l-139 889q-8 33 -8 72q0 143 97 236t255 93q137 -2 237 -86l-71 -96q-70 59 -166 59t-161 -58t-65 -161q0 -33 9 -63l135 -885h-123zM123 -41l72 98q72 -61 168 -61t159.5 60.5t63.5 162.5q0 35 -8 66l-134 878h123l140 -889q8 -53 8 -71q0 -143 -98.5 -236.5 t-256.5 -93.5q-137 2 -237 86z" />
<glyph unicode="&#xa8;" horiz-adv-x="1009" d="M629 1608v176h121v-176h-121zM322 1608v176h120v-176h-120z" />
<glyph unicode="&#xa9;" horiz-adv-x="1624" d="M84 721q0 309 212 526t511 217q305 0 519 -217t214 -526q0 -313 -213 -529.5t-520 -216.5q-301 0 -512 217.5t-211 528.5zM205 721q0 -268 174 -451.5t428 -183.5q260 0 437 183.5t177 451.5q0 266 -177 449.5t-437 183.5q-254 0 -428 -183.5t-174 -449.5zM406 717 q0 172 114.5 297t306.5 125q63 0 121 -19.5t94.5 -47.5t65.5 -56.5t41 -48.5l12 -19l-94 -63l-10 15q-6 9 -28.5 33.5t-48.5 43t-66 34t-83 15.5q-141 0 -223 -90t-82 -217t81 -217t224 -90q135 0 226 127l10 14l94 -64q-4 -8 -13 -20t-40 -45t-66.5 -58.5t-93 -46 t-121.5 -20.5q-195 0 -308 124t-113 294z" />
<glyph unicode="&#xaa;" horiz-adv-x="847" d="M348 782q-92 0 -158.5 53.5t-66.5 143.5q0 225 389 225h27q-2 86 -35 122t-111 36q-106 0 -106 -41v-49h-109v80q0 41 45 67.5t89 33.5t83 7q143 0 199.5 -66.5t56.5 -185.5v-290q0 -18 19 -19h59v-104h-96q-84 0 -86 79v25h-4q-6 -12 -18.5 -31.5t-63 -52.5t-113.5 -33z M362 881q80 0 127.5 68.5t51.5 164.5h-25q-276 0 -276 -129q0 -43 32.5 -73.5t89.5 -30.5zM119 541v96h620v-96h-620z" />
<glyph unicode="&#xab;" horiz-adv-x="1069" d="M444 578l336 421h152l-336 -421l336 -420h-152zM414 158l-336 420l336 421h149l-336 -421l336 -420h-149z" />
<glyph unicode="&#xac;" d="M143 700v119h955v-495h-125v376h-830z" />
<glyph unicode="&#xad;" horiz-adv-x="884" d="M152 518v127h581v-127h-581z" />
<glyph unicode="&#xae;" horiz-adv-x="1624" d="M84 721q0 309 212 526t511 217q305 0 519 -217t214 -526q0 -313 -213 -529.5t-520 -216.5q-301 0 -512 217.5t-211 528.5zM205 721q0 -268 174 -451.5t428 -183.5q260 0 437 183.5t177 451.5q0 266 -177 449.5t-437 183.5q-254 0 -428 -183.5t-174 -449.5zM565 322v702 h-73v96h358q106 0 173 -65.5t67 -171.5q0 -84 -44.5 -140.5t-105.5 -70.5v-4q23 -8 41 -43l92 -185q12 -27 55 -26h21v-92h-59q-47 0 -71 11t-44 50l-111 217q-25 45 -73 45h-111v-323h-115zM680 735h149q66 0 104 39t38 109q0 68 -38 104.5t-104 36.5h-149v-289z" />
<glyph unicode="&#xaf;" horiz-adv-x="944" d="M229 1608v110h504v-110h-504z" />
<glyph unicode="&#x2c9;" horiz-adv-x="944" d="M229 1608v110h504v-110h-504z" />
<glyph unicode="&#xb0;" horiz-adv-x="784" d="M391 893q-119 0 -203 83t-84 202q0 117 84 200.5t203 83.5t204 -84t85 -200q0 -119 -84 -202t-205 -83zM391.5 1008q69.5 0 118.5 49t49 121q0 70 -49 120t-118.5 50t-117 -50.5t-47.5 -119.5q0 -72 47.5 -121t117 -49z" />
<glyph unicode="&#xb1;" d="M86 522v119h473v522h125v-522h471v-119h-471v-522h-125v522h-473zM123 -213h995v-119h-995v119z" />
<glyph unicode="&#xb2;" horiz-adv-x="837" d="M197 543q-51 0 -72 22.5t-21 79.5q0 63 20.5 113.5t64.5 91.5t77 62.5t96 58.5q66 37 101 60.5t67.5 68.5t32.5 98q0 63 -44 105.5t-118 42.5q-57 0 -98 -25t-41 -57v-54h-110v80q0 80 82.5 123t166.5 43q131 0 206 -72.5t75 -185.5q0 -61 -20.5 -109.5t-68.5 -89.5 t-77 -59t-96.5 -57t-100 -61.5t-65.5 -66.5t-33 -93q0 -12 19 -13h358q12 0 12 15v71h111v-102q0 -47 -21.5 -68.5t-68.5 -21.5h-434z" />
<glyph unicode="&#xb3;" horiz-adv-x="837" d="M406 526q-80 0 -156 37t-111 74l-37 37l82 80q10 -12 29.5 -32t78 -52.5t116.5 -32.5q72 0 126 50t54 126t-56.5 121t-136.5 45h-71l-21 70l197 239l47 49v4q-35 -6 -74 -6h-194q-20 0 -21 -22v-58h-111v88q0 53 20.5 75t76.5 22h452v-80l-241 -283q96 -8 174 -78.5 t78 -187.5q0 -123 -89 -204t-212 -81z" />
<glyph unicode="&#xb4;" horiz-adv-x="759" d="M236 1540l143 244h156l-179 -244h-120z" />
<glyph unicode="&#xb5;" horiz-adv-x="1234" d="M43 909v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-6q-4 -10 -12.5 -28t-42.5 -63t-74.5 -79.5t-113.5 -62.5t-157 -28q-76 0 -133 21.5 t-76 44.5l-18 20h-4q14 -104 14 -155v-316h-129v1274q0 45 -45 45h-86z" />
<glyph unicode="&#x3bc;" horiz-adv-x="1234" d="M43 909v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-6q-4 -10 -12.5 -28t-42.5 -63t-74.5 -79.5t-113.5 -62.5t-157 -28q-76 0 -133 21.5 t-76 44.5l-18 20h-4q14 -104 14 -155v-316h-129v1274q0 45 -45 45h-86z" />
<glyph unicode="&#xb6;" horiz-adv-x="1175" d="M578 -102v596q-201 0 -345.5 138t-144.5 336.5t143.5 335t343.5 136.5h490v-127h-371v-1415h-116zM821 -102v1292h119v-1292h-119z" />
<glyph unicode="&#xb7;" horiz-adv-x="440" d="M141 508v164h158v-164h-158z" />
<glyph unicode="&#x2219;" horiz-adv-x="440" d="M141 508v164h158v-164h-158z" />
<glyph unicode="&#xb8;" horiz-adv-x="845" d="M324 41l82 -14v-17l-25 -123q66 -10 105.5 -48t39.5 -97q0 -82 -57 -122t-141 -40l-101 10v99q39 -12 86 -13q104 0 104.5 70t-116.5 70l-31 -2z" />
<glyph unicode="&#xb9;" horiz-adv-x="837" d="M164 543v106h192v563l2 70h-4q-10 -20 -26 -37l-92 -90l-74 76l209 209h104v-791h191v-106h-502z" />
<glyph unicode="&#xba;" horiz-adv-x="933" d="M467 784q-143 0 -242.5 98.5t-99.5 243.5q0 141 100.5 238.5t241.5 97.5t241.5 -97t100.5 -239q0 -145 -99.5 -243.5t-242.5 -98.5zM467 889q96 0 162.5 67.5t66.5 169.5q0 100 -66.5 167t-162.5 67t-162.5 -66.5t-66.5 -167.5q0 -102 66.5 -169.5t162.5 -67.5zM160 541 v96h620v-96h-620z" />
<glyph unicode="&#xbb;" horiz-adv-x="1069" d="M504 158l336 420l-336 421h151l336 -421l-336 -420h-151zM135 158l336 420l-336 421h152l336 -421l-336 -420h-152z" />
<glyph unicode="&#xbc;" horiz-adv-x="1822" d="M551 0l608 1440h127l-606 -1440h-129zM160 543v106h192v563l2 70h-4q-10 -20 -26 -37l-93 -90l-73 76l209 209h102v-791h188v-106h-497zM1016 240v75l426 582h123v-551h137v-106h-137v-240h-117v240h-432zM1155 344q29 2 43 2h252v313l2 80h-4q-14 -29 -33 -55l-231 -305 l-29 -33v-2z" />
<glyph unicode="&#xbd;" horiz-adv-x="1822" d="M528 0l609 1440h127l-607 -1440h-129zM160 543v106h192v563l2 70h-4q-10 -20 -26 -37l-93 -90l-73 76l209 209h102v-791h188v-106h-497zM1063 102q0 63 20.5 114.5t64.5 91.5t78 62.5t95 57.5q66 37 100.5 60.5t67.5 68.5t33 98q0 63 -44 105.5t-118 42.5 q-57 0 -98 -24.5t-41 -57.5v-51h-111v78q0 82 83 123.5t167 41.5q131 0 205.5 -72.5t74.5 -185.5q0 -61 -20.5 -109t-67.5 -88t-77.5 -60.5t-96.5 -57.5q-49 -29 -74.5 -46.5t-59.5 -46t-48 -59t-14 -67.5q0 -14 16 -15h358q12 0 13 15v72h110v-103q0 -90 -90 -90h-434 q-51 0 -71.5 22.5t-20.5 79.5z" />
<glyph unicode="&#xbe;" horiz-adv-x="1822" d="M549 0l608 1440h127l-606 -1440h-129zM430 526q-80 0 -155.5 37t-110.5 74l-37 37l82 80q10 -12 29.5 -32t78 -52.5t115.5 -32.5q72 0 126 50t54 126t-56 121t-136 45h-72l-20 70l196 239l47 49v4q-35 -6 -73 -6h-195q-20 0 -20 -22v-58h-111v88q0 53 20.5 75t75.5 22 h453v-80l-242 -283q96 -8 174 -78.5t78 -187.5q0 -123 -89 -204t-212 -81zM1016 240v75l426 582h123v-551h137v-106h-137v-240h-117v240h-432zM1155 344q29 2 43 2h252v313l2 80h-4q-14 -29 -33 -55l-231 -305l-29 -33v-2z" />
<glyph unicode="&#xbf;" horiz-adv-x="882" d="M420 872v158h158v-158h-158zM63 -68q0 94 38 169t91.5 126.5t107.5 98.5t92 109.5t38 135.5v82h137v-88q0 -90 -36.5 -163.5t-89.5 -123.5l-104 -99q-52 -48 -89 -109.5t-37 -130.5q0 -100 75.5 -168t192.5 -68q61 0 124 21.5t93 42.5l31 22l76 -102q-14 -12 -41 -32 t-113 -52.5t-176 -32.5q-176 0 -293 102t-117 260z" />
<glyph unicode="&#xc0;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM612 1540l-178 244h156l143 -244h-121z " />
<glyph unicode="&#xc1;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM612 1540l144 244h155l-178 -244h-121z " />
<glyph unicode="&#xc2;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM432 1540l170 244h143l170 -244h-129 l-110 166h-4l-111 -166h-129z" />
<glyph unicode="&#xc3;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM350 1546q0 240 191 240q59 0 103 -37 t81 -74t74 -37q82 0 82 142h108q0 -240 -190 -240q-59 0 -104.5 37t-81 73t-74.5 36q-82 0 -82 -140h-107z" />
<glyph unicode="&#xc4;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM768 1608v176h121v-176h-121zM461 1608 v176h121v-176h-121z" />
<glyph unicode="&#xc5;" horiz-adv-x="1345" d="M25 0v127h26q57 0 74 45l471 1268h154l471 -1268q16 -45 73 -45h25v-127h-66q-78 0 -110.5 22.5t-59.5 96.5l-125 340h-571l-127 -340q-29 -74 -60.5 -96.5t-107.5 -22.5h-67zM426 584h494l-191 514l-55 186h-4q-31 -119 -56 -186zM673.5 1518q-63.5 0 -107.5 40.5 t-44 104t44 104.5t107.5 41t107.5 -41t44 -104.5t-44 -104t-107.5 -40.5zM674 1595q29 0 48 19.5t19 48.5q0 31 -19.5 50.5t-48 19.5t-48 -19.5t-19.5 -50.5q0 -29 18.5 -48.5t49.5 -19.5z" />
<glyph unicode="&#xc6;" horiz-adv-x="1685" d="M25 0v127h18q57 0 74 45l487 1268h848q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-475v-525h524v-126h-524v-490q0 -27 13 -36t44 -9h477q45 0 45 45v96h135v-143q0 -66 -29.5 -95.5t-95.5 -29.5h-589q-80 0 -112 25.5t-32 99.5v537h-325l-205 -543 q-27 -74 -58.5 -96.5t-109.5 -22.5h-55zM500 788h278v525h-82z" />
<glyph unicode="&#xc7;" horiz-adv-x="1421" d="M78 731q0 311 203.5 522t506.5 211q82 0 171.5 -17t174.5 -52t139 -96.5t54 -139.5v-119h-135v80q0 94 -129 151.5t-270 57.5q-242 0 -404 -169t-162 -429t161 -440t405 -180q84 0 162.5 20.5t134 50t97.5 59t62 50.5l21 20l82 -102l-24 -24q-15 -15 -67.5 -55 t-110.5 -69.5t-151.5 -56.5t-191.5 -29l-19 -88q66 -10 105 -48t39 -97q0 -84 -56.5 -123t-140.5 -39l-100 10v99q39 -12 86 -13q102 0 102 70t-116 70l-29 -2l39 166q-285 27 -462 238.5t-177 512.5z" />
<glyph unicode="&#xc8;" horiz-adv-x="1142" d="M219 125v1188h-133v127h823q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-492v-525h541v-126h-541v-490q0 -45 46 -45h505q45 0 45 45v96h134v-143q0 -66 -30 -95.5t-95 -29.5h-623q-66 0 -95.5 29.5t-29.5 95.5zM541 1540l-179 244h156l144 -244h-121z" />
<glyph unicode="&#xc9;" horiz-adv-x="1142" d="M219 125v1188h-133v127h823q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-492v-525h541v-126h-541v-490q0 -45 46 -45h505q45 0 45 45v96h134v-143q0 -66 -30 -95.5t-95 -29.5h-623q-66 0 -95.5 29.5t-29.5 95.5zM541 1540l143 244h156l-178 -244h-121z" />
<glyph unicode="&#xca;" horiz-adv-x="1142" d="M219 125v1188h-133v127h823q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-492v-525h541v-126h-541v-490q0 -45 46 -45h505q45 0 45 45v96h134v-143q0 -66 -30 -95.5t-95 -29.5h-623q-66 0 -95.5 29.5t-29.5 95.5zM360 1540l170 244h144l170 -244h-129l-111 166h-4 l-111 -166h-129z" />
<glyph unicode="&#xcb;" horiz-adv-x="1142" d="M219 125v1188h-133v127h823q66 0 95.5 -30t29.5 -95v-144h-135v97q0 45 -45 45h-492v-525h541v-126h-541v-490q0 -45 46 -45h505q45 0 45 45v96h134v-143q0 -66 -30 -95.5t-95 -29.5h-623q-66 0 -95.5 29.5t-29.5 95.5zM696 1608v176h121v-176h-121zM389 1608v176h121 v-176h-121z" />
<glyph unicode="&#xcc;" horiz-adv-x="600" d="M94 0v127h135v1186h-135v127h412v-127h-137v-1186h137v-127h-412zM238 1540l-179 244h156l143 -244h-120z" />
<glyph unicode="&#xcd;" horiz-adv-x="600" d="M94 0v127h135v1186h-135v127h412v-127h-137v-1186h137v-127h-412zM238 1540l143 244h156l-179 -244h-120z" />
<glyph unicode="&#xce;" horiz-adv-x="600" d="M94 0v127h135v1186h-135v127h412v-127h-137v-1186h137v-127h-412zM57 1540l170 244h144l170 -244h-129l-111 166h-4l-111 -166h-129z" />
<glyph unicode="&#xcf;" horiz-adv-x="600" d="M94 0v127h135v1186h-135v127h412v-127h-137v-1186h137v-127h-412zM393 1608v176h121v-176h-121zM86 1608v176h121v-176h-121z" />
<glyph unicode="&#xd0;" horiz-adv-x="1464" d="M219 125v537h-102v122h102v529h-133v127h578q330 0 526 -191.5t196 -527.5q0 -340 -196.5 -530.5t-525.5 -190.5h-320q-66 0 -95.5 29.5t-29.5 95.5zM362 172q0 -45 46 -45h241q270 0 429 154.5t159 439.5q0 283 -158.5 437.5t-429.5 154.5h-287v-529h336v-122h-336v-490 z" />
<glyph unicode="&#xd1;" horiz-adv-x="1556" d="M86 0v127h88q45 0 45 45v1268h131l735 -1026l117 -189h4q-10 113 -10 189v901q0 66 29.5 95.5t95.5 29.5h152v-127h-89q-45 0 -45 -45v-1268h-131l-735 1026l-119 186h-4q12 -111 12 -186v-901q0 -66 -29.5 -95.5t-94.5 -29.5h-152zM477 1546q0 240 191 240q59 0 103 -37 t81 -74t74 -37q82 0 82 142h108q0 -240 -190 -240q-59 0 -104.5 37t-81 73t-74.5 36q-82 0 -82 -140h-107z" />
<glyph unicode="&#xd2;" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427zM743 1540l-178 244h156l143 -244h-121z" />
<glyph unicode="&#xd3;" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427zM743 1540l144 244h155l-178 -244h-121z" />
<glyph unicode="&#xd4;" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427zM563 1540l170 244h144l170 -244h-129 l-111 166h-4l-111 -166h-129z" />
<glyph unicode="&#xd5;" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427zM481 1546q0 240 191 240q59 0 103 -37t81 -74 t74 -37q82 0 82 142h108q0 -240 -190 -240q-59 0 -104.5 37t-81 73t-74.5 36q-82 0 -82 -140h-107z" />
<glyph unicode="&#xd6;" horiz-adv-x="1619" d="M78 729q0 309 213 522t520 213t520 -213t213 -522q0 -315 -214 -534.5t-519 -219.5q-307 0 -520 219.5t-213 534.5zM227 729q0 -260 170 -439t414 -179q242 0 413 179t171 439q0 254 -170 427t-414 173t-414 -173t-170 -427zM899 1608v176h121v-176h-121zM592 1608v176 h121v-176h-121z" />
<glyph unicode="&#xd7;" d="M98 84l443 498l-443 497l84 84l439 -493l438 493l84 -84l-445 -497l445 -498l-84 -84l-438 494l-439 -494z" />
<glyph unicode="&#xd8;" horiz-adv-x="1626" d="M238 10l100 142q-121 104 -189.5 254.5t-68.5 322.5q0 309 213 522t520 213q209 0 387 -110l98 137l84 -61l-96 -136q260 -223 260 -565q0 -315 -214 -534.5t-519 -219.5q-215 0 -391 115l-98 -139zM424 268l696 973q-143 88 -307 88q-244 0 -414 -173t-170 -427 q0 -283 195 -461zM504 203q145 -92 309 -92q244 0 414 179t170 439q0 272 -197 447z" />
<glyph unicode="&#xd9;" horiz-adv-x="1468" d="M203 494v774q0 45 -45 45h-88v127h151q66 0 95.5 -30t29.5 -95v-815q0 -180 105.5 -284.5t281.5 -104.5q178 0 283.5 105.5t105.5 287.5v811q0 66 30 95.5t95 29.5h152v-127h-88q-45 0 -45 -45v-774q0 -233 -146.5 -376t-384 -143t-385 143t-147.5 376zM676 1540 l-178 244h155l144 -244h-121z" />
<glyph unicode="&#xda;" horiz-adv-x="1468" d="M203 494v774q0 45 -45 45h-88v127h151q66 0 95.5 -30t29.5 -95v-815q0 -180 105.5 -284.5t281.5 -104.5q178 0 283.5 105.5t105.5 287.5v811q0 66 30 95.5t95 29.5h152v-127h-88q-45 0 -45 -45v-774q0 -233 -146.5 -376t-384 -143t-385 143t-147.5 376zM676 1540l143 244 h156l-178 -244h-121z" />
<glyph unicode="&#xdb;" horiz-adv-x="1468" d="M203 494v774q0 45 -45 45h-88v127h151q66 0 95.5 -30t29.5 -95v-815q0 -180 105.5 -284.5t281.5 -104.5q178 0 283.5 105.5t105.5 287.5v811q0 66 30 95.5t95 29.5h152v-127h-88q-45 0 -45 -45v-774q0 -233 -146.5 -376t-384 -143t-385 143t-147.5 376zM496 1540l170 244 h143l170 -244h-129l-111 166h-4l-110 -166h-129z" />
<glyph unicode="&#xdc;" horiz-adv-x="1468" d="M203 494v774q0 45 -45 45h-88v127h151q66 0 95.5 -30t29.5 -95v-815q0 -180 105.5 -284.5t281.5 -104.5q178 0 283.5 105.5t105.5 287.5v811q0 66 30 95.5t95 29.5h152v-127h-88q-45 0 -45 -45v-774q0 -233 -146.5 -376t-384 -143t-385 143t-147.5 376zM831 1608v176h121 v-176h-121zM524 1608v176h121v-176h-121z" />
<glyph unicode="&#xdd;" horiz-adv-x="1212" d="M535 0v627l-385 633q-33 53 -97 53h-33v127h56q76 0 113.5 -20.5t82.5 -94.5l244 -407l88 -162h4q43 86 88 162l244 407q45 74 83 94.5t114 20.5h55v-127h-33q-63 0 -94 -53l-387 -633v-627h-143zM547 1540l143 244h156l-178 -244h-121z" />
<glyph unicode="&#xde;" horiz-adv-x="1196" d="M219 0v1268q0 45 -45 45h-88v127h152q66 0 95 -30t29 -95v-131h332q195 0 320 -119t125 -317q0 -197 -126 -318t-323 -121h-328v-309h-143zM362 436h314q143 0 229 83t86 228.5t-85 227.5t-228 82h-316v-621z" />
<glyph unicode="&#xdf;" horiz-adv-x="1142" d="M41 0v121h84q45 0 45 45v921q0 174 123 275.5t289 101.5q160 0 259 -90t99 -215q0 -68 -36 -128t-78 -95t-77.5 -79t-35.5 -85q0 -49 62.5 -103.5t137 -100.5t137 -126t62.5 -174q0 -139 -96 -216t-236 -77q-178 0 -309 111l-8 8l51 109q12 -12 34.5 -28.5t90.5 -45.5 t131 -29q86 0 143.5 43t57.5 129q0 68 -62.5 131.5t-138.5 107.5t-138.5 112.5t-62.5 144.5q0 57 36 110.5t78 89.5t78 86t36 103q0 72 -58.5 126t-163.5 54q-106 0 -186 -69.5t-80 -190.5v-952q0 -66 -29.5 -95.5t-95.5 -29.5h-143z" />
<glyph unicode="&#xe0;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM471 1196l-178 244h156l143 -244h-121z" />
<glyph unicode="&#xe1;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM471 1196l143 244h156l-178 -244h-121z" />
<glyph unicode="&#xe2;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM291 1196l170 244h143l170 -244h-129l-110 166h-5 l-110 -166h-129z" />
<glyph unicode="&#xe3;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM209 1202q0 240 190 240q59 0 103.5 -37t81.5 -74t73 -37 q82 0 82 142h109q0 -240 -191 -240q-59 0 -104 37t-81 72.5t-75 35.5q-82 0 -82 -139h-106z" />
<glyph unicode="&#xe4;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM627 1264v176h121v-176h-121zM319 1264v176h121v-176h-121 z" />
<glyph unicode="&#xe5;" horiz-adv-x="1083" d="M82 281q0 354 631 354h57v12q0 160 -61.5 225.5t-204.5 65.5q-63 0 -132 -20.5t-69 -69.5v-66h-133v99q0 49 39 87t97.5 55t108.5 24.5t91 7.5q227 0 315 -104.5t88 -291.5v-493q0 -45 45 -45h86v-121h-141q-66 0 -94.5 29.5t-28.5 93.5l2 76h-4q2 0 -9 -22.5t-37 -56.5 t-62.5 -67t-99 -55.5t-134.5 -22.5q-141 0 -245.5 80.5t-104.5 225.5zM225 289q0 -78 60.5 -136.5t169.5 -58.5q139 0 227 119t88 264v47h-59q-55 0 -93 -2t-102.5 -8t-109 -21.5t-89.5 -40t-68.5 -66.5t-23.5 -97zM532.5 1174q-63.5 0 -107.5 40.5t-44 104t44 104.5 t107.5 41t107.5 -41t44 -104.5t-44 -104t-107.5 -40.5zM532 1251q29 0 48.5 19.5t19.5 48.5q0 31 -19.5 50.5t-48 19.5t-48 -19.5t-19.5 -50.5q0 -29 18 -48.5t49 -19.5z" />
<glyph unicode="&#xe6;" horiz-adv-x="1783" d="M82 281q0 70 23.5 124t58.5 89.5t90 61.5t105.5 39t120 20.5t113.5 8.5t107 1h68v22q0 160 -61.5 225.5t-202.5 65.5q-66 0 -133.5 -20.5t-67.5 -69.5v-66h-133v99q0 86 104.5 130t231.5 44q289 0 356 -213h4q127 213 389 213q201 0 312.5 -132t111.5 -317l-4 -92h-772 q4 -197 111.5 -305.5t273.5 -108.5q170 0 301 119l8 8l66 -104q-16 -16 -47 -41t-130.5 -66t-203.5 -41q-158 0 -276.5 76t-176.5 211h-4q-6 -23 -19 -51.5t-46 -72.5t-73 -77.5t-106.5 -59.5t-144.5 -26q-150 0 -252 81.5t-102 224.5zM913 625h625q-6 152 -89 231.5 t-200 79.5q-131 0 -222 -80.5t-114 -230.5zM225 289q0 -80 61.5 -137.5t170.5 -57.5q139 0 226 120t87 265v35h-121q-82 0 -142.5 -6t-132 -26.5t-110.5 -69.5t-39 -123z" />
<glyph unicode="&#xe7;" horiz-adv-x="1081" d="M82 514q0 236 155.5 388.5t387.5 152.5q49 0 107.5 -11.5t118.5 -34t100 -68.5t40 -105v-93h-131v60q0 59 -79 93t-156 34q-170 0 -285 -116t-115 -300t118 -298t286 -114q186 0 317 131l15 15l65 -105l-16.5 -17t-49 -40t-82.5 -51.5t-114 -41t-146 -18.5l-16 -88 q66 -10 104.5 -48t38.5 -97q0 -84 -56 -123t-140 -39l-103 10v99q39 -12 86 -13q104 0 104.5 70t-116.5 70l-31 -2l39 170q-197 29 -321.5 173t-124.5 357z" />
<glyph unicode="&#xe8;" horiz-adv-x="1122" d="M82 514q0 246 146.5 393.5t361.5 147.5q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-791q2 -188 118 -299t282 -111q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-231 0 -385 151.5t-154 387.5zM233 621h646q-6 154 -88 235.5t-203 81.5 q-133 0 -231.5 -83.5t-123.5 -233.5zM524 1196l-178 244h156l143 -244h-121z" />
<glyph unicode="&#xe9;" horiz-adv-x="1122" d="M82 514q0 246 146.5 393.5t361.5 147.5q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-791q2 -188 118 -299t282 -111q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-231 0 -385 151.5t-154 387.5zM233 621h646q-6 154 -88 235.5t-203 81.5 q-133 0 -231.5 -83.5t-123.5 -233.5zM524 1196l144 244h155l-178 -244h-121z" />
<glyph unicode="&#xea;" horiz-adv-x="1122" d="M82 514q0 246 146.5 393.5t361.5 147.5q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-791q2 -188 118 -299t282 -111q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-231 0 -385 151.5t-154 387.5zM233 621h646q-6 154 -88 235.5t-203 81.5 q-133 0 -231.5 -83.5t-123.5 -233.5zM344 1196l170 244h143l170 -244h-129l-110 166h-4l-111 -166h-129z" />
<glyph unicode="&#xeb;" horiz-adv-x="1122" d="M82 514q0 246 146.5 393.5t361.5 147.5q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-791q2 -188 118 -299t282 -111q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-231 0 -385 151.5t-154 387.5zM233 621h646q-6 154 -88 235.5t-203 81.5 q-133 0 -231.5 -83.5t-123.5 -233.5zM680 1264v176h121v-176h-121zM373 1264v176h121v-176h-121z" />
<glyph unicode="&#xec;" horiz-adv-x="516" d="M190 125v739q0 45 -45 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5zM182 1196l-176 244h156l141 -244h-121z" />
<glyph unicode="&#xed;" horiz-adv-x="516" d="M190 125v739q0 45 -45 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5zM182 1196l144 244h155l-178 -244h-121z" />
<glyph unicode="&#xee;" horiz-adv-x="516" d="M190 125v739q0 45 -45 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5zM2 1196l172 244h141l172 -244h-129l-110 166h-4l-113 -166h-129z" />
<glyph unicode="&#xef;" horiz-adv-x="516" d="M190 125v739q0 45 -45 45h-86v121h146q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5zM309 1264v176h121v-176h-121zM51 1264v176h123v-176h-123z" />
<glyph unicode="&#xf0;" horiz-adv-x="1157" d="M76 475q0 197 130 339t359 142q178 0 287 -102l8 -8h4q-70 199 -254 325l-360 -163l-27 98l277 129q-131 68 -291 104l41 119q236 -59 401 -158l269 121l26 -98l-198 -92q309 -242 309 -672q0 -106 -30 -206.5t-89 -186.5t-159.5 -138.5t-229.5 -52.5q-215 0 -344 149.5 t-129 350.5zM219 473q0 -152 90 -262.5t244 -110.5q176 0 268 132.5t92 299.5q0 133 -92 219.5t-241 86.5q-174 0 -267.5 -107.5t-93.5 -257.5z" />
<glyph unicode="&#xf1;" horiz-adv-x="1245" d="M178 0v864q0 45 -45 45h-86v121h143q125 0 125 -115v-47l-4 -73h4q37 94 142.5 177t267.5 83q186 0 266 -100.5t80 -299.5v-489q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5v493q0 145 -44 225.5t-179 80.5q-131 0 -235.5 -81t-139.5 -210q-16 -57 -17 -139 v-494h-139zM326 1202q0 240 190 240q59 0 103.5 -37t81 -74t73.5 -37q82 0 82 142h109q0 -240 -191 -240q-59 0 -104 37t-81 72.5t-75 35.5q-82 0 -82 -139h-106z" />
<glyph unicode="&#xf2;" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291zM565 1196 l-178 244h156l143 -244h-121z" />
<glyph unicode="&#xf3;" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291zM565 1196 l144 244h155l-178 -244h-121z" />
<glyph unicode="&#xf4;" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291zM385 1196 l170 244h143l170 -244h-129l-110 166h-4l-111 -166h-129z" />
<glyph unicode="&#xf5;" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291zM303 1202 q0 240 191 240q59 0 103 -37t81 -74t74 -37q82 0 82 142h108q0 -240 -190 -240q-59 0 -104.5 37t-81.5 72.5t-74 35.5q-82 0 -82 -139h-107z" />
<glyph unicode="&#xf6;" horiz-adv-x="1251" d="M82 520q0 227 158.5 381t384.5 154q227 0 385.5 -153.5t158.5 -381.5q0 -231 -158.5 -388t-383.5 -157q-227 0 -386 157t-159 388zM225 520q0 -178 117 -299t285 -121q166 0 282.5 121t116.5 299q0 174 -116.5 291t-282.5 117q-168 0 -285 -117t-117 -291zM721 1264v176 h121v-176h-121zM414 1264v176h121v-176h-121z" />
<glyph unicode="&#xf7;" d="M526 887v151h154v-151h-154zM102 522v119h1004v-119h-1004zM526 125v151h154v-151h-154z" />
<glyph unicode="&#xf8;" horiz-adv-x="1251" d="M201 -6l75 104q-195 162 -194 422q0 227 158.5 381t384.5 154q154 0 280 -76l80 113l84 -62l-80 -110q180 -158 180 -400q0 -231 -158.5 -388t-383.5 -157q-145 0 -265 66l-77 -109zM354 209l475 663q-94 55 -202 56q-168 0 -285 -117t-117 -291q0 -186 129 -311z M438 150q88 -49 189 -50q166 0 282.5 121t116.5 299q0 172 -119 287z" />
<glyph unicode="&#xf9;" horiz-adv-x="1234" d="M174 375v489q0 45 -45 45h-86v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-4q-39 -94 -144.5 -177.5t-257.5 -83.5q-180 0 -263 98.5t-83 301.5z M543 1196l-178 244h155l144 -244h-121z" />
<glyph unicode="&#xfa;" horiz-adv-x="1234" d="M174 375v489q0 45 -45 45h-86v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-4q-39 -94 -144.5 -177.5t-257.5 -83.5q-180 0 -263 98.5t-83 301.5z M543 1196l143 244h156l-178 -244h-121z" />
<glyph unicode="&#xfb;" horiz-adv-x="1234" d="M174 375v489q0 45 -45 45h-86v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-4q-39 -94 -144.5 -177.5t-257.5 -83.5q-180 0 -263 98.5t-83 301.5z M362 1196l170 244h144l170 -244h-129l-111 166h-4l-110 -166h-130z" />
<glyph unicode="&#xfc;" horiz-adv-x="1234" d="M174 375v489q0 45 -45 45h-86v121h145q66 0 95.5 -28.5t29.5 -92.5v-497q0 -145 45 -225.5t181 -80.5q168 0 273.5 128t105.5 303v493h139v-864q0 -45 45 -45h86v-121h-141q-125 0 -125 115v47l4 74h-4q-39 -94 -144.5 -177.5t-257.5 -83.5q-180 0 -263 98.5t-83 301.5z M698 1264v176h121v-176h-121zM391 1264v176h121v-176h-121z" />
<glyph unicode="&#xfd;" horiz-adv-x="1103" d="M82 -227q0 -4 18.5 -21.5t57.5 -37t78 -19.5q121 0 190 168l61 141l-362 858q-20 47 -72 47h-20v121h63q70 0 99.5 -21.5t58.5 -90.5l264 -644l37 -110h4q14 59 35 110l254 644q27 70 57.5 91t102.5 21h63v-121h-20q-53 0 -72 -47l-444 -1077q-41 -100 -118 -157.5 t-177 -57.5q-133 0 -220 94l-4 6zM487 1196l144 244h155l-178 -244h-121z" />
<glyph unicode="&#xfe;" horiz-adv-x="1196" d="M172 -410v1684q0 45 -45 45h-86v121h145q66 0 95.5 -30t29.5 -95v-367l-4 -90h4q100 197 346 197q209 0 331 -148.5t122 -390.5t-122 -391.5t-331 -149.5q-74 0 -136 19.5t-99 48.5t-63.5 57.5t-36.5 46.5l-11 21h-4q4 -37 4 -90v-488h-139zM307 514q0 -211 96.5 -312.5 t239.5 -101.5q145 0 234.5 114t89.5 302q0 186 -89.5 299t-234.5 113q-147 0 -241.5 -100.5t-94.5 -313.5z" />
<glyph unicode="&#xff;" horiz-adv-x="1103" d="M82 -227q0 -4 18.5 -21.5t57.5 -37t78 -19.5q121 0 190 168l61 141l-362 858q-20 47 -72 47h-20v121h63q70 0 99.5 -21.5t58.5 -90.5l264 -644l37 -110h4q14 59 35 110l254 644q27 70 57.5 91t102.5 21h63v-121h-20q-53 0 -72 -47l-444 -1077q-41 -100 -118 -157.5 t-177 -57.5q-133 0 -220 94l-4 6zM643 1264v176h121v-176h-121zM336 1264v176h121v-176h-121z" />
<glyph unicode="&#x152;" horiz-adv-x="1863" d="M78 721q0 313 197.5 526t496.5 213q51 0 153.5 -10t137.5 -10h565q66 0 95.5 -30t29.5 -95v-144h-133v97q0 45 -45 45h-477v-525h524v-126h-524v-535h536q45 0 45 45v96h133v-143q0 -125 -114 -125h-633q-35 0 -138.5 -10t-154.5 -10q-299 0 -496.5 213t-197.5 528z M227 721q0 -262 150.5 -433t394.5 -171q119 0 182 14v1176q-72 16 -182 16q-242 0 -393.5 -171t-151.5 -431z" />
<glyph unicode="&#x153;" horiz-adv-x="2068" d="M82 512q0 240 157.5 391.5t385.5 151.5q154 0 276.5 -74t190.5 -203h4q59 131 174.5 204t265.5 73q205 0 318.5 -136.5t113.5 -338.5l-4 -70h-790q8 -193 121.5 -301.5t277.5 -108.5q170 0 299 117l10 10l68 -104q-16 -16 -48 -41t-131.5 -66t-203.5 -41q-160 0 -283 75 t-186 206h-4q-66 -131 -189 -206t-280 -75q-227 0 -385 149.5t-158 387.5zM1180 621h645q-8 154 -89 235.5t-202 81.5q-133 0 -231 -83.5t-123 -233.5zM225 512q0 -182 116 -297t284 -115t283.5 117t115.5 303q0 182 -116.5 295t-282.5 113q-168 0 -284 -116t-116 -300z" />
<glyph unicode="&#x178;" horiz-adv-x="1212" d="M535 0v627l-385 633q-33 53 -97 53h-33v127h56q76 0 113.5 -20.5t82.5 -94.5l244 -407l88 -162h4q43 86 88 162l244 407q45 74 83 94.5t114 20.5h55v-127h-33q-63 0 -94 -53l-387 -633v-627h-143zM702 1608v176h121v-176h-121zM395 1608v176h121v-176h-121z" />
<glyph unicode="&#x192;" horiz-adv-x="708" d="M-47 -115l-62 4l13 123q18 -4 47 -4t55.5 5t61 21.5t60.5 43t47.5 77t27.5 117.5l41 473h-162v119h174l18 203q8 96 41 170t74 113t94.5 62.5t94 30.5t84.5 7l63 -4l-12 -125q-18 4 -47 4q-39 0 -73 -9t-75 -34t-69.5 -81t-36.5 -140l-19 -197h223v-119h-233l-41 -479 q-8 -96 -41 -168.5t-75 -111.5t-96 -63.5t-94 -31t-83 -6.5z" />
<glyph unicode="&#x2c6;" horiz-adv-x="962" d="M240 1540l170 244h143l170 -244h-129l-111 166h-4l-110 -166h-129z" />
<glyph unicode="&#x2da;" horiz-adv-x="770" d="M385.5 1518q-63.5 0 -108 40.5t-44.5 104t44.5 104.5t108 41t107.5 -41t44 -104.5t-44 -104t-107.5 -40.5zM385 1595q29 0 48.5 19.5t19.5 48.5q0 31 -19.5 50.5t-48.5 19.5t-48.5 -19.5t-19.5 -50.5q0 -29 18.5 -48.5t49.5 -19.5z" />
<glyph unicode="&#x2dc;" horiz-adv-x="1007" d="M182 1546q0 240 191 240q59 0 103 -37t81 -74t74 -37q82 0 82 142h108q0 -240 -190 -240q-59 0 -104.5 37t-81 73t-74.5 36q-82 0 -82 -140h-107z" />
<glyph unicode="&#x2000;" horiz-adv-x="903" />
<glyph unicode="&#x2001;" horiz-adv-x="1808" />
<glyph unicode="&#x2002;" horiz-adv-x="903" />
<glyph unicode="&#x2003;" horiz-adv-x="1808" />
<glyph unicode="&#x2004;" horiz-adv-x="602" />
<glyph unicode="&#x2005;" horiz-adv-x="450" />
<glyph unicode="&#x2006;" horiz-adv-x="301" />
<glyph unicode="&#x2007;" horiz-adv-x="301" />
<glyph unicode="&#x2008;" horiz-adv-x="225" />
<glyph unicode="&#x2009;" horiz-adv-x="360" />
<glyph unicode="&#x200a;" horiz-adv-x="100" />
<glyph unicode="&#x2010;" horiz-adv-x="884" d="M152 518v127h581v-127h-581z" />
<glyph unicode="&#x2011;" horiz-adv-x="884" d="M152 518v127h581v-127h-581z" />
<glyph unicode="&#x2012;" horiz-adv-x="884" d="M152 518v127h581v-127h-581z" />
<glyph unicode="&#x2013;" horiz-adv-x="1314" d="M145 522v119h1024v-119h-1024z" />
<glyph unicode="&#x2014;" horiz-adv-x="1724" d="M145 522v119h1434v-119h-1434z" />
<glyph unicode="&#x2018;" horiz-adv-x="434" d="M104 1106l115 352h111l-80 -352h-146z" />
<glyph unicode="&#x2019;" horiz-adv-x="434" d="M104 1108l80 352h146l-115 -352h-111z" />
<glyph unicode="&#x201a;" horiz-adv-x="434" d="M184 168h146l-115 -352h-111z" />
<glyph unicode="&#x201c;" horiz-adv-x="675" d="M346 1106l115 352h110l-79 -352h-146zM104 1106l115 352h111l-80 -352h-146z" />
<glyph unicode="&#x201d;" horiz-adv-x="675" d="M346 1108l80 352h145l-114 -352h-111zM104 1108l80 352h146l-115 -352h-111z" />
<glyph unicode="&#x201e;" horiz-adv-x="675" d="M346 -184l80 352h145l-114 -352h-111zM184 168h146l-115 -352h-111z" />
<glyph unicode="&#x2020;" horiz-adv-x="743" d="M299 -102v1013h-240v119h240v410h137v-410h248v-119h-248v-1013h-137z" />
<glyph unicode="&#x2021;" horiz-adv-x="743" d="M299 -102v469h-240v118h240v426h-240v119h240v410h137v-410h248v-119h-248v-426h248v-118h-248v-469h-137z" />
<glyph unicode="&#x2022;" horiz-adv-x="899" d="M450.5 303q-120.5 0 -206.5 86t-86 207t86 207t206.5 86t205.5 -86t85 -207t-85 -207t-205.5 -86z" />
<glyph unicode="&#x2026;" horiz-adv-x="1673" d="M1239 0v164h158v-164h-158zM758 0v164h157v-164h-157zM276 0v164h158v-164h-158z" />
<glyph unicode="&#x202f;" horiz-adv-x="360" />
<glyph unicode="&#x2039;" horiz-adv-x="702" d="M414 158l-336 420l336 421h149l-336 -421l336 -420h-149z" />
<glyph unicode="&#x203a;" horiz-adv-x="702" d="M135 158l336 420l-336 421h152l336 -421l-336 -420h-152z" />
<glyph unicode="&#x205f;" horiz-adv-x="450" />
<glyph unicode="&#x20ac;" horiz-adv-x="1208" d="M80 545v104h117q-4 37 -4 72l4 94h-117v105h135q61 242 249.5 393t438.5 151q49 0 96.5 -6t69.5 -12l23 -6l-33 -133q-74 23 -158 22q-195 0 -337 -111.5t-195 -297.5h620l-20 -105h-623q-8 -41 -8 -90l4 -76h596l-18 -104h-553q47 -195 193.5 -314.5t344.5 -119.5 q47 0 93 7t69 13l23 8l32 -131q-94 -33 -219 -33q-258 0 -447.5 159t-244.5 411h-131z" />
<glyph unicode="&#x2122;" horiz-adv-x="1998" d="M858 543v104h51q20 0 23 21l59 772h107l235 -514q18 -39 29 -84h4q10 45 29 84l235 514h107l59 -772q2 -20 23 -21h51v-104h-88q-55 0 -74.5 19.5t-24.5 74.5l-41 514l3 59h-5l-229 -499h-94l-230 499h-4l2 -59l-41 -514q-4 -55 -23.5 -74.5t-74.5 -19.5h-88zM408 543 v790h-193q-20 0 -20 -20v-62h-107v95q0 53 20.5 73.5t75.5 20.5h566q55 0 75.5 -20.5t20.5 -73.5v-95h-107v62q0 20 -20 20h-195v-790h-116z" />
<glyph unicode="&#xe000;" horiz-adv-x="1030" d="M0 1030h1030v-1030h-1030v1030z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1118" d="M180 0v913h-129v117h129v37q0 119 38 202t98.5 118.5t112.5 49t106 13.5l63 -4v-125q-20 4 -51 4q-37 0 -70 -9t-71.5 -32.5t-62.5 -80t-24 -136.5v-37h488q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5v743q0 45 -45 45 h-429v-913h-139zM788 1264v176h136v-176h-136z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1105" d="M535 1440h260q66 0 95.5 -30t29.5 -95v-1149q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5v1149q0 45 -45 45h-186q-229 0 -230 -252v-37h263v-117h-263v-913h-139v913h-129v117h129v37q0 96 26.5 169t64.5 109.5t90.5 60.5t91.5 29t82 5z" />
<glyph unicode="&#xfb03;" horiz-adv-x="1722" d="M180 0v913h-129v117h129v37q0 119 38 202t98.5 118.5t112.5 49t106 13.5l63 -4v-125q-20 4 -49 4q-37 0 -71 -9t-72.5 -34t-62.5 -80t-24 -137v-35h465v37q0 119 38 202t98.5 118.5t112.5 49t106 13.5l63 -4v-125q-20 4 -49 4q-37 0 -70.5 -9t-72.5 -34t-62.5 -80 t-23.5 -137v-35h487q66 0 95.5 -29.5t29.5 -95.5v-739q0 -45 45 -45h86v-121h-145q-66 0 -95.5 29.5t-29.5 95.5v743q0 45 -45 45h-428v-913h-140v913h-465v-913h-139zM1393 1264v176h135v-176h-135z" />
<glyph unicode="&#xfb04;" horiz-adv-x="1708" d="M1139 1440h260q66 0 95.5 -30t29.5 -95v-1149q0 -45 45 -45h86v-121h-146q-66 0 -95.5 29.5t-29.5 95.5v1149q0 45 -45 45h-186q-229 0 -229 -252v-37h262v-117h-262v-913h-140v913h-465v-913h-139v913h-129v117h129v43q0 117 36 198t96.5 116.5t111.5 49t106 13.5l68 -4 v-125q-23 4 -53 4q-37 0 -71 -9t-71.5 -34t-60.5 -79t-23 -132v-41h465v37q0 96 27 169t64.5 109.5t90 60.5t91.5 29t82 5z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,253 @@
<?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>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : Copyright c 2008 by Jos Buivengaexljbris All rights reserved
Designer : Jos Buivenga
Foundry : Jos Buivenga
Foundry URL : httpwwwjosbuivengademonnl
</metadata>
<defs>
<font id="webfont2nqRdrT9" horiz-adv-x="1267" >
<font-face units-per-em="2048" ascent="1536" descent="-512" />
<missing-glyph horiz-adv-x="542" />
<glyph unicode=" " horiz-adv-x="542" />
<glyph unicode="&#x09;" horiz-adv-x="542" />
<glyph unicode="&#xa0;" horiz-adv-x="542" />
<glyph unicode="!" horiz-adv-x="679" d="M227 420l-22 1034h270l-20 -1034h-228zM215 0v242h252v-242h-252z" />
<glyph unicode="&#x22;" horiz-adv-x="755" d="M444 1053v428h193v-428h-193zM117 1053v428h192v-428h-192z" />
<glyph unicode="#" horiz-adv-x="1433" d="M244 0l65 383h-243l30 186h244l51 287h-239l30 188h242l72 410h209l-72 -410h278l72 410h209l-72 -410h248l-33 -188h-245l-52 -287h244l-31 -186h-245l-66 -383h-209l68 383h-281l-65 -383h-209zM549 569h280l52 287h-281z" />
<glyph unicode="$" horiz-adv-x="1146" d="M78 268l186 156q4 -8 13.5 -22.5t42 -50.5t68.5 -62.5t93.5 -49t116.5 -22.5q92 0 150.5 46t58.5 126q0 51 -38 93t-98.5 74t-133 63.5t-145.5 72.5t-133 91.5t-98 127t-38 172.5q0 152 107.5 256.5t277.5 130.5v191h182v-191q137 -18 238.5 -87.5t101.5 -190.5v-135 h-242v65q0 49 -54 81t-128 32q-92 0 -152.5 -42t-60.5 -106q0 -70 71 -122t171 -93t200.5 -92t171 -148t70.5 -235q0 -154 -106.5 -270.5t-280.5 -142.5v-191h-182v189q-244 33 -397 237z" />
<glyph unicode="%" horiz-adv-x="1689" d="M446.5 831q-139.5 0 -236.5 94.5t-97 229.5q0 133 98 228.5t235.5 95.5t236.5 -95.5t99 -228.5q0 -135 -98 -229.5t-237.5 -94.5zM164 0l1116 1454h240l-1117 -1454h-239zM446.5 1020q57.5 0 97.5 39t40 96q0 55 -40 95t-97.5 40t-96.5 -40t-39 -95q0 -57 39 -96 t96.5 -39zM907 297q0 133 97.5 228.5t236.5 95.5q137 0 235.5 -95.5t98.5 -228.5t-97.5 -227.5t-236.5 -94.5t-236.5 94.5t-97.5 227.5zM1106 299q0 -57 39 -96t96 -39t97 39t40 96q0 55 -40 95t-97 40t-96 -40t-39 -95z" />
<glyph unicode="&#x26;" horiz-adv-x="1333" d="M86 426q0 113 64.5 214t177.5 134v4q-8 2 -19.5 9.5t-42 33t-54.5 57t-43 90t-19 128.5q0 172 124.5 277.5t317.5 105.5q51 0 101 -6.5t75 -12.5l25 -6l-64 -209q-51 12 -98 12q-96 0 -155.5 -55t-59.5 -139q0 -76 51 -134.5t170 -58.5h219v174h260v-174h174v-229h-174 v-172q0 -225 -136 -359.5t-374 -134.5q-227 0 -373.5 129t-146.5 322zM356 428q0 -88 69 -149.5t181 -61.5q119 0 184.5 67.5t65.5 198.5v158h-219q-131 0 -206 -54.5t-75 -158.5z" />
<glyph unicode="'" horiz-adv-x="430" d="M117 1053v428h196v-428h-196z" />
<glyph unicode="(" horiz-adv-x="718" d="M166 668q0 492 240 850h221q-229 -383 -230 -832q0 -469 236 -881h-221q-246 361 -246 863z" />
<glyph unicode=")" horiz-adv-x="718" d="M86 -195q236 412 236 881q0 449 -230 832h221q242 -360 242 -850q0 -502 -246 -863h-223z" />
<glyph unicode="*" horiz-adv-x="989" d="M350 657l-186 136l170 204v4l-258 64l69 221l248 -100l-18 268h235l-18 -268l248 100l73 -219l-262 -66v-4l172 -202l-186 -138l-141 226h-4z" />
<glyph unicode="+" d="M86 483v203h442v485h211v-485h443v-203h-443v-483h-211v483h-442z" />
<glyph unicode="," horiz-adv-x="542" d="M182 264h250l-196 -479h-191z" />
<glyph unicode="-" horiz-adv-x="882" d="M133 471v227h617v-227h-617z" />
<glyph unicode="." horiz-adv-x="542" d="M145 0v260h252v-260h-252z" />
<glyph unicode="/" horiz-adv-x="751" d="M-2 -86l520 1614h223l-522 -1614h-221z" />
<glyph unicode="0" horiz-adv-x="1253" d="M626.5 -25q-143.5 0 -249 57.5t-163.5 164t-86 237.5t-28 295q0 750 526.5 750t526.5 -750q0 -164 -27.5 -295t-86 -237.5t-164 -164t-249 -57.5zM627 217q256 0 256 512q0 506 -256 506t-256 -506q0 -512 256 -512z" />
<glyph unicode="1" horiz-adv-x="1091" d="M131 0v227h313v807l2 99h-4q-16 -35 -63 -82l-117 -111l-156 164l365 350h242v-1227h313v-227h-895z" />
<glyph unicode="2" horiz-adv-x="1189" d="M68 193q0 106 38.5 193t101 144.5t138.5 105.5t152.5 90t139 86t101.5 102.5t39 129.5q0 86 -58 137.5t-153 51.5q-82 0 -136 -36t-54 -79v-63h-242v143q0 90 73 156.5t171 95.5t199 29q199 0 335 -117t136 -313q0 -137 -73 -244t-176.5 -171.5t-205.5 -118.5 t-175 -116.5t-73 -134.5q0 -37 55 -37h426q45 0 45 45v88h242v-221q0 -74 -32.5 -106.5t-106.5 -32.5h-758q-92 0 -120.5 42t-28.5 151z" />
<glyph unicode="3" horiz-adv-x="1138" d="M53 180l135 201l17 -16q10 -10 47 -38t75 -48.5t98 -37t120 -16.5q109 0 178.5 61.5t69.5 155.5q0 96 -78 154.5t-197 58.5h-102l-54 133l246 330q49 74 97 111v4q-45 -6 -130 -6h-182q-45 0 -45 -45v-88h-242v221q0 74 28 106.5t99 32.5h791v-166l-334 -418 q158 -25 266.5 -136t108.5 -288q0 -193 -140.5 -332t-377.5 -139q-266 0 -461 172z" />
<glyph unicode="4" horiz-adv-x="1206" d="M37 367v170l602 917h315v-860h224v-227h-224v-367h-268v367h-649zM690 594v403l10 158h-4q-41 -78 -78 -131l-227 -336l-74 -96v-4q59 6 127 6h246z" />
<glyph unicode="5" horiz-adv-x="1218" d="M96 176l135 203q4 -6 14.5 -16.5t43.5 -37t69.5 -47t94 -37t116.5 -16.5q119 0 193 70t74 172q0 117 -91.5 182.5t-222.5 65.5q-72 0 -140.5 -16.5t-100.5 -32.5l-33 -17l-94 47l53 619q6 74 36.5 106.5t100.5 32.5h537q139 0 139 -139v-221h-244v88q0 45 -45 45h-239 q-41 0 -46 -45l-18 -201l-10 -68h4q68 27 153 27q244 0 388.5 -136t144.5 -341q0 -201 -146.5 -345.5t-392.5 -144.5q-258 0 -440 170z" />
<glyph unicode="6" horiz-adv-x="1177" d="M631 -25q-238 0 -400.5 182.5t-162.5 493.5q0 119 25.5 234.5t80.5 223.5t132 189.5t188.5 131t242.5 49.5q182 0 299 -62l-78 -227q-94 45 -204 45q-160 0 -258.5 -113.5t-126.5 -281.5h4q37 47 113.5 76.5t156.5 29.5q209 0 337 -140t128 -343q0 -207 -133 -347.5 t-344 -140.5zM344 571q0 -137 86 -245.5t199 -108.5q100 0 159.5 69.5t59.5 176.5q0 115 -70.5 190.5t-195.5 75.5q-98 0 -168 -46t-70 -112z" />
<glyph unicode="7" horiz-adv-x="1101" d="M96 0l600 1094q49 90 88 133v4q-27 -4 -100 -4h-350q-45 0 -45 -45v-88h-244v221q0 74 28.5 106.5t98.5 32.5h909v-184l-692 -1270h-293z" />
<glyph unicode="8" horiz-adv-x="1193" d="M74 420q0 63 22.5 123.5t56 102.5t66.5 74t55 46l23 16v4l-17 12q-11 7 -39 33.5t-49.5 58.5t-39 82t-17.5 105q0 164 126 283t341 119q209 0 338 -115t129 -289q0 -180 -141 -315l-17 -15v-4q201 -127 201 -333q0 -174 -144.5 -303.5t-373.5 -129.5q-221 0 -370.5 125 t-149.5 320zM592 881q74 -31 96 -31q37 0 80 65.5t43 141.5q0 82 -57.5 130t-151.5 48q-96 0 -151.5 -47t-55.5 -117t50.5 -111.5t146.5 -78.5zM344 436q0 -98 71.5 -158.5t178.5 -60.5q102 0 175 57.5t73 145.5q0 70 -52.5 114t-156.5 87q-111 49 -131 49q-43 0 -100.5 -73 t-57.5 -161z" />
<glyph unicode="9" horiz-adv-x="1177" d="M139 37l78 227q94 -47 205 -47q160 0 258 113.5t127 283.5h-4q-35 -47 -113 -76.5t-158 -29.5q-209 0 -336.5 140t-127.5 343q0 205 133 346.5t346 141.5q236 0 398.5 -182.5t162.5 -493.5q0 -119 -25.5 -234.5t-81 -223t-132 -189.5t-188.5 -131.5t-243 -49.5 q-182 1 -299 62zM596 725q96 0 165.5 45t69.5 113q0 137 -86 244.5t-198 107.5q-100 0 -159.5 -68.5t-59.5 -175.5q0 -115 70.5 -190.5t197.5 -75.5z" />
<glyph unicode=":" horiz-adv-x="626" d="M188 784v260h250v-260h-250zM188 0v260h250v-260h-250z" />
<glyph unicode=";" horiz-adv-x="626" d="M190 784v260h250v-260h-250zM72 -215l112 479h248l-168 -479h-192z" />
<glyph unicode="&#x3c;" d="M131 502v168l985 438v-227l-710 -293v-4l710 -293v-228z" />
<glyph unicode="=" d="M135 694v201h1000v-201h-1000zM135 274v201h1000v-201h-1000z" />
<glyph unicode="&#x3e;" d="M145 63v228l711 293v4l-711 293v227l985 -438v-168z" />
<glyph unicode="?" horiz-adv-x="974" d="M297 420v98q0 82 35 150.5t85 114.5l99 88q49 42 84 93.5t35 108.5q0 72 -57.5 121t-141.5 49q-51 0 -106.5 -21.5t-83.5 -41.5l-29 -23l-143 178q16 16 46 41t130 66t209 41q182 0 314 -105.5t132 -279.5q0 -94 -37 -170t-89 -125t-104 -93t-89 -97.5t-37 -112.5v-80 h-252zM297 0v242h252v-242h-252z" />
<glyph unicode="@" horiz-adv-x="1607" d="M78 492q0 319 222 541t548 222q293 0 428 -124.5t135 -321.5v-512h150v-186h-568q-199 0 -319.5 112.5t-120.5 268.5q0 154 120 264t320 110h174q-2 80 -90 130.5t-221 50.5q-219 0 -370.5 -166t-151.5 -389q0 -231 152.5 -390t402.5 -159v-203q-360 0 -585.5 215 t-225.5 537zM811 498q0 -84 55.5 -142.5t143.5 -58.5h157v401h-153q-90 0 -146.5 -58t-56.5 -142z" />
<glyph unicode="A" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218z" />
<glyph unicode="B" horiz-adv-x="1288" d="M201 139v1088h-133v227h628q201 0 326 -99.5t125 -275.5q0 -113 -51.5 -192.5t-124.5 -118.5v-4q113 -33 173 -129t60 -213q0 -207 -142 -314.5t-360 -107.5h-362q-72 0 -105.5 32.5t-33.5 106.5zM469 860h229q82 0 129 52.5t47 134t-47 131t-133 49.5h-225v-367z M469 272q0 -45 45 -45h209q96 0 150.5 58.5t54.5 152.5q0 92 -55.5 150.5t-149.5 58.5h-254v-375z" />
<glyph unicode="C" horiz-adv-x="1452" d="M61 739q0 315 211 527.5t527 212.5q78 0 166 -17.5t178 -52.5t148.5 -101.5t58.5 -154.5v-162h-244v82q0 74 -95.5 115t-205.5 41q-201 0 -333 -133t-132 -357q0 -213 137 -363.5t336 -150.5q78 0 150.5 19.5t123 48.5t90.5 57.5t58 46.5l18 21l142 -193 q-8 -10 -24.5 -26.5t-74 -59.5t-120 -76.5t-163 -60.5t-204.5 -27q-330 0 -539 218t-209 546z" />
<glyph unicode="D" horiz-adv-x="1464" d="M203 139v1088h-133v227h592q340 0 540.5 -192.5t200.5 -532.5t-201 -534.5t-540 -194.5h-320q-74 0 -106.5 32.5t-32.5 106.5zM471 272q0 -45 45 -45h131q221 0 349 130t128 372q0 238 -129 368t-348 130h-176v-955z" />
<glyph unicode="E" horiz-adv-x="1183" d="M203 139v1088h-133v227h878q139 0 139 -139v-221h-243v88q0 45 -45 45h-328v-381h471v-228h-471v-346q0 -45 45 -45h336q45 0 45 45v88h244v-221q0 -74 -34 -106.5t-106 -32.5h-659q-74 0 -106.5 32.5t-32.5 106.5z" />
<glyph unicode="F" horiz-adv-x="1077" d="M203 0v1227h-133v227h829q74 0 106.5 -34t32.5 -105v-221h-241v88q0 45 -45 45h-281v-412h465v-227h-465v-588h-268z" />
<glyph unicode="G" horiz-adv-x="1519" d="M63 735q0 315 212 529.5t528 214.5q100 0 191 -19.5t150.5 -46.5t103.5 -53.5t65 -44.5l20 -21l-151 -192q-16 14 -48 35.5t-129.5 57.5t-195.5 36q-195 0 -331 -138.5t-136 -355.5q0 -231 138 -371.5t339 -140.5q203 0 352 135l17 17v108q0 45 -45 45h-88v228h235 q74 0 107 -33t33 -104v-621h-230v70l2 61h-4q-6 -6 -18.5 -16.5t-54.5 -38t-88 -48t-118.5 -37t-148.5 -16.5q-295 0 -501 209t-206 551z" />
<glyph unicode="H" horiz-adv-x="1583" d="M203 0v1182q0 45 -45 45h-88v227h262q74 0 106.5 -34t32.5 -105v-477h641v477q0 139 139 139h262v-227h-88q-45 0 -45 -45v-1182h-268v610h-641v-610h-268z" />
<glyph unicode="I" horiz-adv-x="700" d="M78 0v227h145v1000h-145v227h545v-227h-146v-1000h146v-227h-545z" />
<glyph unicode="J" horiz-adv-x="1103" d="M41 430v84h268v-59q0 -121 54.5 -175.5t136.5 -54.5t135 53.5t53 163.5v740q0 45 -45 45h-352v227h526q139 0 139 -139v-885q0 -223 -135 -339t-323 -116q-186 0 -321.5 117t-135.5 338z" />
<glyph unicode="K" horiz-adv-x="1298" d="M203 0v1182q0 45 -45 45h-88v227h262q74 0 106.5 -34t32.5 -105v-453h102q90 0 117 47l293 545h295l-328 -598q-45 -82 -92 -106v-5q49 -12 94 -100l185 -371q23 -47 102 -47h39v-227h-154q-86 0 -127 20.5t-75 88.5l-238 477q-16 33 -45 41t-82 8h-86v-635h-268z" />
<glyph unicode="L" horiz-adv-x="1142" d="M203 139v1043q0 45 -45 45h-88v227h262q74 0 106.5 -34t32.5 -105v-1043q0 -45 45 -45h318q45 0 45 45v88h243v-221q0 -74 -32.5 -106.5t-106.5 -32.5h-641q-74 0 -106.5 32.5t-32.5 106.5z" />
<glyph unicode="M" horiz-adv-x="1781" d="M37 0v227h63q41 0 45 45l95 1182h278l299 -692l72 -195h4q37 111 72 195l299 692h278l94 -1182q4 -45 45 -45h64v-227h-232q-72 0 -101.5 31.5t-35.5 107.5l-49 647q-5 55 -5 121q0 49 3 105h-4q-43 -143 -80 -226l-242 -536h-217l-241 536q-16 37 -37 93.5t-33 95.5 l-10 39h-4q3 -56 2 -106q0 -66 -4 -122l-47 -647q-6 -76 -37 -107.5t-103 -31.5h-231z" />
<glyph unicode="N" horiz-adv-x="1576" d="M70 0v227h88q45 0 45 45v1182h241l551 -805q57 -84 121 -205h4q-14 121 -14 205v666q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-1182h-239l-553 803q-57 82 -121 205h-4q14 -121 14 -205v-664q0 -74 -32.5 -106.5t-106.5 -32.5h-262z" />
<glyph unicode="O" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5z" />
<glyph unicode="P" horiz-adv-x="1239" d="M203 0v1227h-133v227h665q205 0 334 -131t129 -342t-129 -345t-334 -134h-264v-502h-268zM471 731h215q113 0 175.5 67.5t62.5 182.5q0 113 -61.5 179.5t-172.5 66.5h-219v-496z" />
<glyph unicode="Q" horiz-adv-x="1626" d="M61 735q0 313 215.5 527.5t534.5 214.5q322 0 538 -214t216 -528q0 -248 -160 -459l158 -143l-160 -174l-158 156q-182 -139 -434 -140q-317 0 -533.5 220.5t-216.5 539.5zM340 735q0 -215 137 -362.5t334 -147.5q150 0 240 70l-148 137l158 174l147 -147q78 123 78 276 q0 209 -137 350.5t-338 141.5q-199 0 -335 -141.5t-136 -350.5z" />
<glyph unicode="R" horiz-adv-x="1294" d="M203 0v1227h-133v227h651q203 0 328 -117.5t125 -320.5q0 -92 -29 -168t-71 -119t-79 -66.5t-63 -29.5v-4q45 -20 72 -74l141 -281q25 -47 102 -47h27v-227h-141q-84 0 -126 20.5t-77 88.5l-187 366q-23 41 -50 54.5t-87 13.5h-135v-543h-268zM471 772h213 q102 0 158.5 60.5t56.5 168.5q0 106 -56.5 166t-154.5 60h-217v-455z" />
<glyph unicode="S" horiz-adv-x="1124" d="M66 201l151 188q6 -6 17.5 -18.5t48 -42t75.5 -52t96.5 -41t114.5 -18.5q88 0 148.5 46t60.5 126q0 49 -38 91t-98 74t-133 63.5t-145.5 72.5t-133 89t-98.5 123t-38 167q0 176 137.5 293t348.5 117q94 0 188 -27t169 -95.5t75 -164.5v-135h-242v65q0 49 -58.5 81 t-133.5 32q-92 0 -152.5 -43t-60.5 -113q0 -49 37.5 -89t98 -69.5t133.5 -60.5t145.5 -69.5t133 -87t98.5 -126t38 -174.5q0 -180 -131.5 -304t-352.5 -124q-266 0 -461 185z" />
<glyph unicode="T" horiz-adv-x="1337" d="M535 0v1227h-224q-45 0 -45 -45v-88h-235v229q0 72 28.5 101.5t102.5 29.5h1014q74 0 102.5 -29.5t28.5 -101.5v-229h-236v88q0 45 -45 45h-223v-1227h-268z" />
<glyph unicode="U" horiz-adv-x="1515" d="M186 518v664q0 45 -45 45h-88v227h262q74 0 107 -34t33 -105v-789q0 -141 81.5 -221t221 -80t221.5 80t82 223v787q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-664q0 -242 -156.5 -392.5t-412.5 -150.5q-258 0 -416 150.5t-158 392.5z" />
<glyph unicode="V" horiz-adv-x="1400" d="M559 0l-436 1182q-16 45 -64 45h-36v227h170q76 0 111.5 -24.5t60.5 -94.5l278 -811q12 -37 26.5 -90t22.5 -88l6 -35h4q27 131 56 213l278 811q25 70 59.5 94.5t110.5 24.5h172v-227h-39q-47 0 -63 -45l-434 -1182h-283z" />
<glyph unicode="W" horiz-adv-x="2031" d="M438 0l-301 1182q-10 45 -65 45h-39v227h174q80 0 122 -25.5t58 -93.5l199 -866l24 -154h4q8 70 31 154l264 981h228l249 -981l29 -154h4q6 72 25 154l201 866q14 68 56 93.5t122 25.5h176v-227h-39q-55 0 -66 -45l-303 -1182h-309l-221 823q-25 92 -37 181h-4 q-12 -86 -39 -181l-231 -823h-312z" />
<glyph unicode="X" horiz-adv-x="1255" d="M10 0l451 737l-271 441q-18 33 -34.5 41t-53.5 8h-61v227h168q74 0 111.5 -21.5t74.5 -84.5l140 -242l92 -176h4q39 92 88 176l141 242q37 63 76 84.5t113 21.5h165v-227h-61q-35 0 -52.5 -9.5t-35.5 -39.5l-272 -441l452 -737h-301l-225 383l-92 170h-4 q-39 -86 -88 -170l-224 -383h-301z" />
<glyph unicode="Y" horiz-adv-x="1259" d="M496 0v635l-344 543q-20 31 -36 40t-48 9h-48v227h138q74 0 112.5 -20.5t77.5 -85.5l193 -320l88 -164h4q37 78 88 164l190 320q39 66 78 86t113 20h137v-227h-47q-33 0 -48.5 -9.5t-35.5 -39.5l-344 -543v-635h-268z" />
<glyph unicode="Z" horiz-adv-x="1204" d="M35 0v170l653 926q59 82 111 131v4q-43 -4 -111 -4h-352q-45 0 -45 -45v-88h-244v221q0 72 33 105.5t106 33.5h944v-168l-653 -928q-59 -84 -110 -131v-4q43 4 110 4h397q45 0 46 45v88h241v-221q0 -74 -32.5 -106.5t-106.5 -32.5h-987z" />
<glyph unicode="[" horiz-adv-x="720" d="M188 -55v1433q0 74 33 107t107 33h264v-189h-137q-45 0 -45 -45v-1245q0 -45 45 -45h137v-189h-264q-74 0 -107 33t-33 107z" />
<glyph unicode="\" horiz-adv-x="745" d="M532 -86l-522 1614h223l523 -1614h-224z" />
<glyph unicode="]" horiz-adv-x="720" d="M129 -6h135q45 0 45 45v1245q0 45 -45 45h-135v189h264q74 0 106.5 -33t32.5 -107v-1433q0 -74 -32.5 -107t-106.5 -33h-264v189z" />
<glyph unicode="^" d="M133 502l412 952h164l411 -952h-225l-268 678l-269 -678h-225z" />
<glyph unicode="_" horiz-adv-x="1169" d="M10 0h1149v-201h-1149v201z" />
<glyph unicode="`" horiz-adv-x="817" d="M360 1550l-213 279h250l156 -279h-193z" />
<glyph unicode="a" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164z" />
<glyph unicode="b" horiz-adv-x="1265" d="M162 0v1188q0 45 -45 45h-82v221h248q139 0 139 -139v-303l-4 -88h4q4 6 11 15t35 34.5t61.5 45t89 35t116.5 15.5q211 0 337 -151.5t126 -395.5q0 -246 -134 -396.5t-345 -150.5q-96 0 -174 37t-107 74l-30 37h-5q4 -29 5 -70v-53h-246zM414 516q0 -131 68.5 -226 t191.5 -95q111 0 186.5 87t75.5 236q0 147 -71.5 237.5t-188.5 90.5q-111 0 -186.5 -83t-75.5 -247z" />
<glyph unicode="c" horiz-adv-x="1101" d="M66 522q0 229 155.5 388t415.5 159q80 0 160 -19.5t149.5 -75.5t69.5 -140v-123h-230v57q0 39 -47 60.5t-102 21.5q-135 0 -222 -92t-87 -234q0 -152 95 -236.5t230 -84.5q160 0 299 131l11 10l108 -180q-6 -8 -18.5 -20.5t-54.5 -45t-89 -57.5t-122.5 -45.5 t-155.5 -20.5q-252 0 -408.5 157t-156.5 390z" />
<glyph unicode="d" horiz-adv-x="1273" d="M66 522q0 246 133 396.5t342 150.5q199 0 290 -113l11 -14h4q-2 27 -2 62v184q0 45 -45 45h-82v221h248q139 0 139 -139v-1051q0 -45 45 -45h80v-219h-240q-129 0 -129 106v39h-4q-4 -6 -11 -18t-35 -41t-61.5 -51.5t-92 -41t-126.5 -18.5q-211 0 -337.5 151.5 t-126.5 395.5zM588 195q111 0 186.5 82.5t75.5 246.5q0 131 -67.5 226.5t-190.5 95.5q-113 0 -187.5 -87t-74.5 -237q0 -147 71.5 -237t186.5 -90z" />
<glyph unicode="e" horiz-adv-x="1140" d="M66 522q0 242 147 394.5t383 152.5q217 0 340 -140.5t123 -355.5l-6 -96h-721q14 -133 102 -206.5t211 -73.5q74 0 147.5 28.5t108.5 57.5l37 30l109 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-252 0 -406.5 159t-154.5 388zM340 657h453 q-2 92 -58.5 151.5t-138.5 59.5q-100 0 -166.5 -56.5t-89.5 -154.5z" />
<glyph unicode="f" horiz-adv-x="706" d="M170 0v838h-129v206h129v31q0 98 30.5 171t76 113t107.5 64.5t111.5 31.5t100.5 7l88 -6v-221q-23 4 -53 4q-201 0 -201 -170v-25h223v-206h-223v-838h-260z" />
<glyph unicode="g" horiz-adv-x="1253" d="M66 549q0 225 122.5 372.5t339.5 147.5q68 0 126.5 -15.5t92 -37t59 -43t34.5 -35.5l10 -16h4v26q0 39 28.5 67.5t86.5 28.5h241v-221h-80q-45 0 -45 -41v-719q0 -129 -47 -227t-127 -154.5t-175 -84t-201 -27.5q-201 0 -371 90l80 205q129 -70 288 -70q129 0 212 61.5 t83 194.5v49l2 56h-4q-94 -135 -290 -136q-217 0 -343 153t-126 376zM590 240q106 0 175 71.5t69 235.5q0 301 -261 301q-117 0 -180 -78t-63 -213q0 -141 68.5 -229t191.5 -88z" />
<glyph unicode="h" horiz-adv-x="1310" d="M162 0v1188q0 45 -45 45h-82v221h248q139 0 139 -137v-367l-4 -88h4q41 84 136 145.5t222 61.5q365 0 365 -397v-408q0 -45 45 -45h82v-219h-248q-72 0 -104.5 33t-32.5 106v479q0 104 -37 158.5t-129 54.5q-100 0 -176 -60t-107 -157q-16 -55 -16 -135v-479h-260z" />
<glyph unicode="i" horiz-adv-x="612" d="M190 1214v240h226v-240h-226zM178 139v639q0 45 -45 45h-82v221h248q72 0 104.5 -33.5t32.5 -105.5v-641q0 -45 45 -45h82v-219h-248q-72 0 -104.5 32.5t-32.5 106.5z" />
<glyph unicode="j" horiz-adv-x="624" d="M225 1214v240h228v-240h-228zM-39 -199q18 -4 45 -4q35 0 65.5 7.5t65.5 24.5t56.5 59t21.5 102v788q0 45 -45 45h-82v221h248q74 0 106.5 -33.5t32.5 -105.5v-936q0 -100 -32.5 -175t-79 -114.5t-110 -64.5t-113.5 -32t-101 -7l-78 6v219z" />
<glyph unicode="k" horiz-adv-x="1132" d="M162 0v1188q0 45 -45 45h-82v221h248q76 0 107.5 -24.5t31.5 -94.5v-659h78q72 0 98 39l213 329h289l-264 -393q-20 -29 -40 -49t-30 -27l-8 -6v-4q37 -14 73 -82l119 -225q20 -39 86 -39h70v-219h-193q-68 0 -100.5 17.5t-62.5 72.5l-175 328q-23 39 -96 39h-57v-457 h-260z" />
<glyph unicode="l" horiz-adv-x="595" d="M164 139v1049q0 45 -45 45h-82v221h248q139 0 139 -139v-1051q0 -45 45 -45h80v-219h-246q-74 0 -106.5 32.5t-32.5 106.5z" />
<glyph unicode="m" horiz-adv-x="1931" d="M170 0v778q0 45 -45 45h-82v221h240q137 0 137 -116v-31l-2 -45h4q41 86 132 151.5t206 65.5q238 0 305 -215h4q45 90 141.5 152.5t214.5 62.5q342 0 342 -397v-408q0 -45 45 -45h80v-219h-245q-74 0 -107 33t-33 106v484q0 102 -29.5 155t-113.5 53q-92 0 -159.5 -68.5 t-90.5 -170.5q-16 -55 -16 -133v-459h-260v623q0 100 -28 154t-114 54q-94 0 -159.5 -67.5t-92.5 -173.5q-16 -66 -16 -131v-459h-258z" />
<glyph unicode="n" horiz-adv-x="1316" d="M170 0v778q0 45 -45 45h-82v221h240q137 0 137 -116v-31l-4 -45h4q43 86 135 151.5t233 65.5q365 0 365 -397v-408q0 -45 45 -45h82v-219h-248q-74 0 -106.5 33t-32.5 106v479q0 104 -36 158.5t-128 54.5q-102 0 -177 -58t-103 -155q-20 -61 -21 -139v-479h-258z" />
<glyph unicode="o" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5z" />
<glyph unicode="p" horiz-adv-x="1271" d="M170 -410v1188q0 45 -45 45h-82v221h231q131 0 132 -100v-41h4l11 18q7 11 35.5 39.5t62.5 50t94.5 40t127.5 18.5q211 0 338 -151.5t127 -395.5q0 -246 -135 -396.5t-344 -150.5q-57 0 -109.5 14.5t-85 35t-58 40t-36.5 33.5l-10 15h-4q4 -37 4 -90v-433h-258zM422 516 q0 -131 67.5 -226t190.5 -95q113 0 188.5 87t75.5 236q0 147 -71.5 237.5t-188.5 90.5q-111 0 -186.5 -83t-75.5 -247z" />
<glyph unicode="q" horiz-adv-x="1273" d="M68 522q0 246 132 396.5t341 150.5q203 0 309 -133l14 -21h4v37q0 92 133 92h230v-221h-82q-45 0 -45 -45v-1188h-260v443l4 90h-4l-11 -17q-7 -10 -35 -34.5t-60.5 -44t-88 -36t-119.5 -16.5q-211 0 -336.5 151.5t-125.5 395.5zM590 195q111 0 186.5 82.5t75.5 246.5 q0 131 -68.5 226.5t-191.5 95.5q-111 0 -186.5 -87t-75.5 -237q0 -147 71.5 -237t188.5 -90z" />
<glyph unicode="r" horiz-adv-x="843" d="M170 0v778q0 45 -45 45h-82v221h238q139 0 139 -126v-62l-4 -65h4q37 117 126 192.5t206 75.5l47 -4v-256q-27 4 -64 4q-92 0 -172 -55.5t-112 -163.5q-23 -80 -23 -170v-414h-258z" />
<glyph unicode="s" horiz-adv-x="958" d="M51 162l123 170q14 -16 42 -42t109 -69t160 -43q63 0 102.5 25.5t39.5 77.5q0 39 -56.5 72.5t-137.5 64.5t-163 70.5t-138 110.5t-56 165q0 150 115.5 227.5t289.5 77.5q59 0 117.5 -10t117 -34t95.5 -69t37 -104v-109h-230v52q0 35 -40.5 54t-90.5 19 q-72 0 -113.5 -24.5t-41.5 -69.5t57 -78.5t139 -62.5t163 -66t138.5 -106.5t57.5 -165.5q0 -145 -114 -232.5t-288 -87.5q-127 0 -235.5 47.5t-153.5 92.5z" />
<glyph unicode="t" horiz-adv-x="757" d="M174 383v455h-135v206h141v285h254v-285h238v-206h-238v-422q0 -113 64.5 -155t142.5 -42l47 4v-227q-33 -6 -80 -6q-53 0 -102 7t-112.5 31.5t-109.5 64.5t-78 115t-32 175z" />
<glyph unicode="u" horiz-adv-x="1306" d="M166 373v405q0 45 -45 45h-82v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-4q-41 -90 -137.5 -154t-223.5 -64q-360 1 -360 398z" />
<glyph unicode="v" horiz-adv-x="1116" d="M403 0l-299 786q-14 37 -57 37h-22v221h149q63 0 98 -22.5t56 -75.5l196 -549l39 -149h4q16 88 37 149l197 549q20 53 55 75.5t98 22.5h140v-221h-25q-43 0 -57 -37l-299 -786h-310z" />
<glyph unicode="w" horiz-adv-x="1710" d="M356 0l-250 786q-12 37 -57 37h-29v221h179q66 0 99.5 -23.5t47.5 -82.5l154 -580l20 -110h4q8 55 25 110l192 682h230l194 -682l23 -110h4q6 55 20 110l152 580q14 59 48 82.5t99 23.5h179v-221h-29q-43 0 -57 -37l-250 -786h-293l-178 596l-25 113h-4q-10 -57 -27 -113 l-176 -596h-295z" />
<glyph unicode="x" horiz-adv-x="1048" d="M23 0l339 528l-172 260q-23 35 -79 35h-76v221h182q66 0 100.5 -19t69.5 -79l102 -172l33 -67h4q18 41 33 67l103 172q35 59 68.5 78.5t100.5 19.5h181v-221h-74q-57 0 -80 -35l-174 -260l342 -528h-289l-182 291l-29 55h-4q-16 -33 -30 -55l-181 -291h-288z" />
<glyph unicode="y" horiz-adv-x="1132" d="M102 -139q63 -72 150 -72q117 0 172 133l35 80l-348 784q-14 37 -56 37h-30v221h172q55 0 85.5 -22.5t51.5 -75.5l205 -522l36 -139h5q16 86 34 139l179 522q33 98 139 98h176v-221h-31q-45 0 -59 -37l-375 -944q-53 -135 -153.5 -203.5t-223.5 -68.5q-152 0 -258 100 l-6 6z" />
<glyph unicode="z" horiz-adv-x="1046" d="M55 0v139l482 588q20 27 42.5 50.5t34.5 33.5l11 12v4q-31 -4 -97 -4h-188q-45 0 -45 -45v-59h-236v186q0 72 33 105.5t107 33.5h766v-141l-482 -588l-88 -96v-4q31 6 99 6h229q45 0 45 45v58h236v-185q0 -74 -33 -106.5t-105 -32.5h-811z" />
<glyph unicode="{" horiz-adv-x="720" d="M223 145v199q0 166 -137 205l-37 8v227q6 0 18.5 2t42 14.5t53 34t42 64.5t18.5 102v177q0 88 28 154.5t65.5 102t92 56t94.5 27t83 6.5l63 -2v-193q-16 2 -37 2q-37 0 -69.5 -9t-65.5 -51t-33 -114v-223q0 -172 -139 -248l-29 -12v-4q6 -2 17.5 -6.5t41.5 -23.5 t51.5 -46t39.5 -75t18 -107v-246q0 -55 17.5 -93t47.5 -53.5t53.5 -21.5t49.5 -6l37 2v-193q-27 -4 -63 -4q-43 0 -83 6.5t-94.5 26.5t-92 56t-65.5 102.5t-28 156.5z" />
<glyph unicode="|" horiz-adv-x="638" d="M209 -330v1960h221v-1960h-221z" />
<glyph unicode="}" horiz-adv-x="720" d="M72 -6q16 -2 37 -2q166 0 165 174v246q0 59 17.5 107t43 75t50.5 45t41 25l18 6v4q-6 2 -18 7t-41 25.5t-51.5 47t-41 75t-18.5 105.5v223q0 55 -17 92t-46 53.5t-52.5 22.5t-49.5 6l-37 -2v193q27 2 63 2q43 0 83 -6.5t94.5 -27t92 -56t65.5 -102t28 -154.5v-177 q0 -92 44 -146t87 -62l43 -9v-227q-6 0 -18.5 -2t-42 -14.5t-53 -33t-42 -63.5t-18.5 -100v-199q0 -90 -28 -156.5t-65.5 -102.5t-92 -56t-94.5 -26.5t-83 -6.5l-63 4v193z" />
<glyph unicode="~" d="M115 408q0 373 315 372q70 0 126 -28.5t88 -64.5t75 -64.5t88 -28.5q63 0 95 51t32 127h205q0 -373 -314 -373q-70 0 -126 29t-87.5 63.5t-74.5 63.5t-88 29q-63 0 -95 -50.5t-32 -125.5h-207z" />
<glyph unicode="&#xa1;" horiz-adv-x="679" d="M215 801v241h250v-241h-250zM205 -410l22 1033h228l20 -1033h-270z" />
<glyph unicode="&#xa2;" horiz-adv-x="1198" d="M537 -76v228q-190 33 -307 192.5t-117 382.5t116.5 384t307.5 194v223h182v-223q133 -25 232.5 -113t146.5 -219l-234 -90q-72 182 -229 182q-115 0 -187.5 -95.5t-72.5 -242.5q0 -154 70.5 -246t189.5 -92q160 0 229 182l234 -90q-49 -125 -145.5 -219t-233.5 -110v-228 h-182z" />
<glyph unicode="&#xa3;" horiz-adv-x="1200" d="M96 0v227h119v410h-90v178h90v248q0 180 132 298t335 118q98 0 189.5 -37t132.5 -74l43 -37l-150 -180q-96 88 -211 88q-90 0 -146.5 -52t-56.5 -132v-240h363v-178h-363v-410h344q45 0 45 45v88h242v-221q0 -74 -32.5 -106.5t-104.5 -32.5h-881z" />
<glyph unicode="&#xa5;" horiz-adv-x="1271" d="M174 397v156h328v82l-56 86h-274v156h172v4l-188 301q-18 29 -35 37t-51 8h-43v227h133q74 0 115.5 -20.5t80.5 -85.5l191 -320l88 -160h4q37 74 88 160l191 320q39 66 79.5 86t114.5 20h133v-227h-43q-35 0 -51 -8.5t-35 -36.5l-188 -301v-4h168v-156h-271l-55 -86v-82 h326v-156h-326v-397h-268v397h-328z" />
<glyph unicode="&#xa7;" horiz-adv-x="1030" d="M328 283l-150 704q-14 68 -14 117q0 166 111.5 270.5t308.5 104.5q96 0 181 -32t124 -63l37 -32l-117 -166q-94 80 -223 80q-94 0 -152.5 -47.5t-58.5 -145.5q0 -47 14 -102l141 -688h-202zM125 -2l111 176l31 -26q19 -15 81 -39.5t119 -24.5q92 0 151.5 52t59.5 155 q0 49 -19 117l-137 661h205l145 -704q14 -72 15 -117q0 -166 -111.5 -270.5t-308.5 -104.5q-96 0 -181 32t-122 62z" />
<glyph unicode="&#xa8;" horiz-adv-x="1042" d="M627 1591v238h182v-238h-182zM260 1591v238h180v-238h-180z" />
<glyph unicode="&#xa9;" horiz-adv-x="1599" d="M66 727q0 311 214 530.5t517 219.5q307 0 522 -219.5t215 -530.5t-215 -531.5t-522 -220.5q-303 0 -517 220.5t-214 531.5zM248 727q0 -246 158.5 -416t390.5 -170q236 0 396.5 170t160.5 416t-161 415t-396 169q-231 0 -390 -169t-159 -415zM424 723q0 166 108.5 282.5 t274.5 116.5q201 0 309 -172l23 -43l-156 -73l-6 12q-4 8 -19.5 28.5t-34 36t-48 28.5t-62.5 13q-90 0 -145.5 -65.5t-55.5 -163.5q0 -100 54.5 -164.5t146.5 -64.5q53 0 95 29.5t59 58.5l16 30l156 -71l-12 -24q-7 -15 -34.5 -52t-61.5 -65.5t-94 -52t-130 -23.5 q-166 0 -274.5 116.5t-108.5 282.5z" />
<glyph unicode="&#xaa;" horiz-adv-x="851" d="M324 784q-92 0 -158 56.5t-66 152.5q0 55 28 96t66.5 64t92 36t95.5 17t85 4h29q-2 63 -24.5 88t-76.5 25q-70 0 -69 -31v-30h-176v86q0 39 27.5 65.5t70.5 38.5t78.5 17.5t68.5 5.5q287 0 287 -269v-221q0 -25 23 -24h53v-164h-140q-92 0 -104 71l-2 19h-4 q-6 -12 -19.5 -28.5t-60.5 -45.5t-104 -29zM369 932q55 0 89 45t40 113h-21q-186 0 -186 -89q0 -69 78 -69zM102 545v139h660v-139h-660z" />
<glyph unicode="&#xab;" horiz-adv-x="1257" d="M553 578l336 421h248l-336 -421l336 -420h-248zM430 158l-336 420l336 421h248l-336 -421l336 -420h-248z" />
<glyph unicode="&#xac;" d="M135 694v201h1000v-602h-209v401h-791z" />
<glyph unicode="&#xad;" horiz-adv-x="882" d="M133 471v227h617v-227h-617z" />
<glyph unicode="&#xae;" horiz-adv-x="1599" d="M66 727q0 311 214 530.5t517 219.5q307 0 522 -219.5t215 -530.5t-215 -531.5t-522 -220.5q-303 0 -517 220.5t-214 531.5zM248 727q0 -246 158.5 -416t390.5 -170q236 0 396.5 170t160.5 416t-161 415t-396 169q-231 0 -390 -169t-159 -415zM541 356v623h-66v127h377 q111 0 178.5 -65.5t67.5 -172.5q0 -80 -42 -131t-91 -63v-4q27 -6 47 -41l65 -123q14 -25 45 -25h23v-125h-98q-43 0 -66 11.5t-41 44.5l-100 188q-18 33 -68 33h-57v-277h-174zM715 756h96q51 0 80 29.5t29 83t-29 82t-78 28.5h-98v-223z" />
<glyph unicode="&#xaf;" horiz-adv-x="956" d="M213 1604v172h537v-172h-537z" />
<glyph unicode="&#x2c9;" horiz-adv-x="956" d="M213 1604v172h537v-172h-537z" />
<glyph unicode="&#xb0;" horiz-adv-x="839" d="M420 836q-139 0 -236.5 93t-97.5 228q0 133 97.5 228.5t236.5 95.5q137 0 235.5 -95.5t98.5 -228.5q0 -135 -97.5 -228t-236.5 -93zM419.5 1022q57.5 0 97.5 39t40 96q0 55 -40 95t-97.5 40t-96 -40t-38.5 -95q0 -57 38.5 -96t96 -39z" />
<glyph unicode="&#xb1;" d="M86 483v203h442v485h211v-485h443v-203h-443v-483h-211v483h-442zM115 -174h1040v-201h-1040v201z" />
<glyph unicode="&#xb2;" horiz-adv-x="894" d="M209 547q-59 0 -81 26.5t-22 112.5q0 63 20.5 113.5t63.5 90.5t76 63.5t90 56.5q86 47 130 88t44 98q0 45 -29.5 70.5t-76.5 25.5q-43 0 -70.5 -18.5t-27.5 -42.5v-45h-181v102q0 88 92.5 135t188.5 47q129 0 216 -72.5t87 -197.5q0 -66 -22.5 -118t-71.5 -94t-81 -62.5 t-95 -55.5q-76 -39 -114 -70.5t-38 -70.5q0 -12 23 -12h245q12 0 13 12v68h180v-150q0 -100 -100 -100h-459z" />
<glyph unicode="&#xb3;" horiz-adv-x="894" d="M449 530q-176 0 -320 160l-18 23l135 121q10 -14 27.5 -34t69.5 -53.5t103 -33.5q55 0 93.5 32.5t38.5 83.5q0 49 -39 79t-101 30h-71l-27 109l147 198l41 43v4q-31 -4 -63 -4h-115q-18 0 -18 -18v-49h-180v133q0 55 21.5 77.5t76.5 22.5h504v-133l-189 -234 q94 -20 152.5 -94.5t58.5 -167.5q0 -131 -97 -213t-230 -82z" />
<glyph unicode="&#xb4;" horiz-adv-x="827" d="M252 1550l156 279h249l-215 -279h-190z" />
<glyph unicode="&#xb5;" horiz-adv-x="1306" d="M39 823v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-6l-12 -24q-7 -15 -37.5 -52t-67.5 -65.5t-101.5 -52.5t-140.5 -24q-47 0 -83.5 10.5 t-49.5 22.5l-14 10h-4q14 -100 14 -170v-258h-223v1188q0 45 -45 45h-82z" />
<glyph unicode="&#x3bc;" horiz-adv-x="1306" d="M39 823v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-6l-12 -24q-7 -15 -37.5 -52t-67.5 -65.5t-101.5 -52.5t-140.5 -24q-47 0 -83.5 10.5 t-49.5 22.5l-14 10h-4q14 -100 14 -170v-258h-223v1188q0 45 -45 45h-82z" />
<glyph unicode="&#xb6;" horiz-adv-x="1280" d="M561 -102v596q-199 0 -340 140t-141 341t141 340t340 139h625v-227h-436v-1329h-189zM877 -102v1216h190v-1216h-190z" />
<glyph unicode="&#xb7;" horiz-adv-x="542" d="M145 469v258h252v-258h-252z" />
<glyph unicode="&#x2219;" horiz-adv-x="542" d="M145 469v258h252v-258h-252z" />
<glyph unicode="&#xb8;" horiz-adv-x="860" d="M332 51l119 -26v-15l-21 -100q66 -8 108 -48t42 -108q0 -94 -64.5 -137t-157.5 -43q-31 0 -62.5 4t-47.5 8l-17 2v144q43 -16 91 -17q88 0 88 58q0 55 -99 55l-43 -4z" />
<glyph unicode="&#xb9;" horiz-adv-x="894" d="M147 547v170h189v420l2 63h-4q-8 -18 -23 -31l-69 -65l-115 125l235 225h170v-737h187v-170h-572z" />
<glyph unicode="&#xba;" horiz-adv-x="931" d="M465 786q-150 0 -254.5 98.5t-104.5 248.5q0 147 104.5 244.5t254.5 97.5q152 0 256 -97.5t104 -244.5q0 -150 -104 -248.5t-256 -98.5zM465 950q74 0 124 51.5t50 131.5q0 78 -50 129t-124 51q-72 0 -122 -51.5t-50 -128.5q0 -80 50 -131.5t122 -51.5zM137 545v139h660 v-139h-660z" />
<glyph unicode="&#xbb;" horiz-adv-x="1257" d="M580 158l335 420l-335 421h247l336 -421l-336 -420h-247zM119 158l336 420l-336 421h248l335 -421l-335 -420h-248z" />
<glyph unicode="&#xbc;" horiz-adv-x="1931" d="M614 0l568 1454h202l-567 -1454h-203zM158 547v170h188v420l2 63h-4q-8 -18 -22 -31l-70 -65l-115 125l234 225h170v-737h178v-170h-561zM1102 221v115l358 573h236v-516h133v-172h-133v-221h-197v221h-397zM1300 391q25 2 39 2h164v244l2 70h-4q-12 -31 -28 -58 l-144 -219l-29 -35v-4z" />
<glyph unicode="&#xbd;" horiz-adv-x="1931" d="M590 0l567 1454h201l-567 -1454h-201zM158 547v170h188v420l2 63h-4q-8 -18 -22 -31l-70 -65l-115 125l234 225h170v-737h178v-170h-561zM1161 141q0 61 20.5 112.5t62.5 91.5t77 63.5t92 56.5t88 53.5t58.5 56t27.5 76.5q0 43 -29.5 68.5t-78.5 25.5q-43 0 -70 -17 t-27 -42v-47h-180v102q0 88 92 136.5t189 48.5q127 0 215 -74t88 -199q0 -66 -22.5 -118t-72 -93t-81 -61.5t-97.5 -54.5q-74 -39 -111.5 -72t-37.5 -72q0 -12 22 -12h244q12 0 12 14v66h183v-150q0 -100 -103 -100h-456q-61 0 -83 27.5t-22 113.5z" />
<glyph unicode="&#xbe;" horiz-adv-x="1931" d="M608 0l568 1454h200l-565 -1454h-203zM455 530q-90 0 -174 46.5t-123 91.5l-39 45l133 121q10 -14 27.5 -34t69.5 -53.5t104 -33.5q55 0 93 32.5t38 83.5q0 49 -39 79t-101 30h-71l-27 109l148 198l41 43v4q-31 -4 -64 -4h-115q-18 0 -18 -18v-49h-180v133 q0 55 21.5 77.5t76.5 22.5h504v-133l-189 -234q94 -20 152.5 -94.5t58.5 -167.5q0 -131 -97 -213t-230 -82zM1102 221v115l358 573h236v-516h133v-172h-133v-221h-197v221h-397zM1300 391q25 2 39 2h164v244l2 70h-4q-12 -31 -28 -58l-144 -219l-29 -35v-4z" />
<glyph unicode="&#xbf;" horiz-adv-x="974" d="M426 803v241h250v-241h-250zM68 -45q0 92 36.5 168t89 125l105.5 94t90 98.5t37 112.5v72h250v-90q0 -82 -35 -151t-84 -115l-98 -88q-49 -42 -84 -93t-35 -108q0 -72 57.5 -122.5t141.5 -50.5q51 0 105 23t83 43l29 23l145 -181q-16 -16 -47 -40.5t-131 -64.5t-207 -40 q-182 0 -315 104.5t-133 280.5z" />
<glyph unicode="&#xc0;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM590 1550l-213 279h250l155 -279h-192z " />
<glyph unicode="&#xc1;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM590 1550l155 279h250l-215 -279h-190z " />
<glyph unicode="&#xc2;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM393 1550l187 279h223l188 -279h-194 l-103 166h-4l-104 -166h-193z" />
<glyph unicode="&#xc3;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM319 1552q0 281 234 281 q61 0 108.5 -34t83 -66.5t70.5 -32.5q41 0 62.5 37t21.5 90h162q0 -281 -234 -281q-61 0 -108 34t-83 66.5t-71 32.5q-41 0 -62.5 -35.5t-21.5 -91.5h-162z" />
<glyph unicode="&#xc4;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM784 1591v238h183v-238h-183zM418 1591 v238h180v-238h-180z" />
<glyph unicode="&#xc5;" horiz-adv-x="1380" d="M23 0v227h32q49 0 64 45l432 1182h280l431 -1182q14 -45 63 -45h33v-227h-160q-76 0 -111.5 24.5t-60.5 94.5l-90 254h-492l-90 -254q-25 -70 -59.5 -94.5t-110.5 -24.5h-161zM506 594h368l-124 364l-58 218h-4q-31 -137 -57 -218zM690 1526q-74 0 -128 43t-54 117 q0 76 54 118.5t128 42.5t128 -43t54 -118q0 -74 -54 -117t-128 -43zM690 1616q31 0 51.5 19.5t20.5 50.5q0 33 -20.5 52t-51.5 19t-51.5 -19.5t-20.5 -51.5q0 -31 20.5 -50.5t51.5 -19.5z" />
<glyph unicode="&#xc6;" horiz-adv-x="1824" d="M23 0v227h28q29 0 41 9.5t23 35.5l485 1182h989q74 0 107 -34t33 -105v-221h-244v88q0 45 -45 45h-320v-381h465v-228h-465v-346q0 -45 51 -45h324q45 0 45 45v88h242v-221q0 -74 -33 -106.5t-107 -32.5h-645q-80 0 -113.5 30.5t-33.5 108.5v479h-326l-186 -499 q-27 -70 -61.5 -94.5t-110.5 -24.5h-143zM610 846h240v381h-96z" />
<glyph unicode="&#xc7;" horiz-adv-x="1452" d="M61 739q0 315 211 527.5t527 212.5q78 0 166 -17.5t178 -52.5t148.5 -101.5t58.5 -154.5v-162h-244v82q0 74 -95.5 115t-205.5 41q-201 0 -333 -133t-132 -357q0 -215 135 -364.5t332 -149.5q78 0 152.5 19.5t125 47t90 56.5t58.5 49l20 19l142 -191q-8 -10 -23.5 -25.5 t-69 -57.5t-114 -73.5t-157.5 -59t-200 -32.5l-14 -67q66 -8 108 -48t42 -108q0 -94 -63.5 -137t-158.5 -43q-31 0 -62.5 4t-47.5 8l-14 2v144q43 -16 88 -17q90 0 90 58q0 55 -99 55l-43 -4l43 158q-289 33 -464 244.5t-175 512.5z" />
<glyph unicode="&#xc8;" horiz-adv-x="1183" d="M203 139v1088h-133v227h878q139 0 139 -139v-221h-243v88q0 45 -45 45h-328v-381h471v-228h-471v-346q0 -45 45 -45h336q45 0 45 45v88h244v-221q0 -74 -34 -106.5t-106 -32.5h-659q-74 0 -106.5 32.5t-32.5 106.5zM508 1550l-213 279h250l155 -279h-192z" />
<glyph unicode="&#xc9;" horiz-adv-x="1183" d="M203 139v1088h-133v227h878q139 0 139 -139v-221h-243v88q0 45 -45 45h-328v-381h471v-228h-471v-346q0 -45 45 -45h336q45 0 45 45v88h244v-221q0 -74 -34 -106.5t-106 -32.5h-659q-74 0 -106.5 32.5t-32.5 106.5zM508 1550l156 279h249l-215 -279h-190z" />
<glyph unicode="&#xca;" horiz-adv-x="1183" d="M203 139v1088h-133v227h878q139 0 139 -139v-221h-243v88q0 45 -45 45h-328v-381h471v-228h-471v-346q0 -45 45 -45h336q45 0 45 45v88h244v-221q0 -74 -34 -106.5t-106 -32.5h-659q-74 0 -106.5 32.5t-32.5 106.5zM309 1550l187 279h223l188 -279h-194l-103 166h-4 l-104 -166h-193z" />
<glyph unicode="&#xcb;" horiz-adv-x="1183" d="M203 139v1088h-133v227h878q139 0 139 -139v-221h-243v88q0 45 -45 45h-328v-381h471v-228h-471v-346q0 -45 45 -45h336q45 0 45 45v88h244v-221q0 -74 -34 -106.5t-106 -32.5h-659q-74 0 -106.5 32.5t-32.5 106.5zM702 1591v238h183v-238h-183zM336 1591v238h180v-238 h-180z" />
<glyph unicode="&#xcc;" horiz-adv-x="700" d="M78 0v227h145v1000h-145v227h545v-227h-146v-1000h146v-227h-545zM250 1550l-213 279h250l155 -279h-192z" />
<glyph unicode="&#xcd;" horiz-adv-x="700" d="M78 0v227h145v1000h-145v227h545v-227h-146v-1000h146v-227h-545zM250 1550l156 279h249l-215 -279h-190z" />
<glyph unicode="&#xce;" horiz-adv-x="700" d="M78 0v227h145v1000h-145v227h545v-227h-146v-1000h146v-227h-545zM51 1550l187 279h223l188 -279h-194l-103 166h-4l-104 -166h-193z" />
<glyph unicode="&#xcf;" horiz-adv-x="700" d="M78 0v227h145v1000h-145v227h545v-227h-146v-1000h146v-227h-545zM442 1591v238h183v-238h-183zM76 1591v238h180v-238h-180z" />
<glyph unicode="&#xd0;" horiz-adv-x="1464" d="M203 139v477h-99v215h99v396h-133v227h592q340 0 540.5 -192.5t200.5 -532.5t-201 -534.5t-540 -194.5h-320q-74 0 -106.5 32.5t-32.5 106.5zM471 272q0 -45 45 -45h131q221 0 349 130t128 372q0 238 -129 368t-348 130h-176v-396h252v-215h-252v-344z" />
<glyph unicode="&#xd1;" horiz-adv-x="1576" d="M70 0v227h88q45 0 45 45v1182h241l551 -805q57 -84 121 -205h4q-14 121 -14 205v666q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-1182h-239l-553 803q-57 82 -121 205h-4q14 -121 14 -205v-664q0 -74 -32.5 -106.5t-106.5 -32.5h-262zM434 1552 q0 281 234 281q61 0 108 -34t83 -66.5t71 -32.5q41 0 62.5 37t21.5 90h162q0 -281 -234 -281q-61 0 -108.5 34t-83 66.5t-70.5 32.5q-41 0 -62.5 -35.5t-21.5 -91.5h-162z" />
<glyph unicode="&#xd2;" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5zM709 1550l-213 279h249l156 -279h-192 z" />
<glyph unicode="&#xd3;" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5zM709 1550l155 279h250l-215 -279h-190 z" />
<glyph unicode="&#xd4;" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5zM510 1550l186 279h224l188 -279h-195 l-102 166h-4l-105 -166h-192z" />
<glyph unicode="&#xd5;" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5zM436 1552q0 281 234 281q59 0 107 -34 t84 -66.5t71 -32.5q41 0 62.5 37t21.5 90h162q0 -281 -234 -281q-59 0 -107.5 34t-84 66.5t-70.5 32.5q-41 0 -62.5 -35.5t-21.5 -91.5h-162z" />
<glyph unicode="&#xd6;" horiz-adv-x="1626" d="M61 737q0 313 216.5 527.5t536 214.5t535.5 -214t216 -528q0 -322 -216 -542t-535.5 -220t-536 220t-216.5 542zM340 737q0 -217 137 -364.5t336 -147.5t336 147.5t137 364.5q0 207 -137 349.5t-336 142.5t-336 -142.5t-137 -349.5zM901 1591v238h182v-238h-182z M535 1591v238h180v-238h-180z" />
<glyph unicode="&#xd7;" d="M94 141l404 445l-404 442l142 143l399 -438l399 438l142 -143l-406 -442l406 -445l-142 -141l-399 438l-399 -438z" />
<glyph unicode="&#xd8;" horiz-adv-x="1628" d="M223 27l92 131q-252 225 -252 579q0 313 216.5 527.5t535.5 214.5q207 0 381 -101l94 129l117 -80l-94 -129q119 -104 186.5 -249.5t67.5 -311.5q0 -322 -216 -542t-536 -220q-209 0 -381 101l-94 -129zM477 379l567 788q-106 61 -229 62q-199 0 -336 -142.5t-137 -349.5 q0 -213 135 -358zM586 287q102 -61 229 -62q197 0 334 147.5t137 364.5q0 199 -133 338z" />
<glyph unicode="&#xd9;" horiz-adv-x="1515" d="M186 518v664q0 45 -45 45h-88v227h262q74 0 107 -34t33 -105v-789q0 -141 81.5 -221t221 -80t221.5 80t82 223v787q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-664q0 -242 -156.5 -392.5t-412.5 -150.5q-258 0 -416 150.5t-158 392.5zM659 1550l-213 279 h250l156 -279h-193z" />
<glyph unicode="&#xda;" horiz-adv-x="1515" d="M186 518v664q0 45 -45 45h-88v227h262q74 0 107 -34t33 -105v-789q0 -141 81.5 -221t221 -80t221.5 80t82 223v787q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-664q0 -242 -156.5 -392.5t-412.5 -150.5q-258 0 -416 150.5t-158 392.5zM659 1550l156 279 h250l-215 -279h-191z" />
<glyph unicode="&#xdb;" horiz-adv-x="1515" d="M186 518v664q0 45 -45 45h-88v227h262q74 0 107 -34t33 -105v-789q0 -141 81.5 -221t221 -80t221.5 80t82 223v787q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-664q0 -242 -156.5 -392.5t-412.5 -150.5q-258 0 -416 150.5t-158 392.5zM461 1550l186 279 h223l189 -279h-195l-102 166h-4l-105 -166h-192z" />
<glyph unicode="&#xdc;" horiz-adv-x="1515" d="M186 518v664q0 45 -45 45h-88v227h262q74 0 107 -34t33 -105v-789q0 -141 81.5 -221t221 -80t221.5 80t82 223v787q0 72 32.5 105.5t106.5 33.5h262v-227h-88q-45 0 -45 -45v-664q0 -242 -156.5 -392.5t-412.5 -150.5q-258 0 -416 150.5t-158 392.5zM852 1591v238h182 v-238h-182zM485 1591v238h181v-238h-181z" />
<glyph unicode="&#xdd;" horiz-adv-x="1259" d="M496 0v635l-344 543q-20 31 -36 40t-48 9h-48v227h138q74 0 112.5 -20.5t77.5 -85.5l193 -320l88 -164h4q37 78 88 164l190 320q39 66 78 86t113 20h137v-227h-47q-33 0 -48.5 -9.5t-35.5 -39.5l-344 -543v-635h-268zM530 1550l156 279h250l-215 -279h-191z" />
<glyph unicode="&#xde;" horiz-adv-x="1249" d="M203 0v1182q0 45 -45 45h-88v227h262q74 0 106.5 -34t32.5 -105v-96h264q205 0 334 -131.5t129 -342t-129 -344t-336 -133.5h-262v-268h-268zM471 496h215q113 0 175.5 67.5t62.5 182t-61.5 180t-172.5 65.5h-219v-495z" />
<glyph unicode="&#xdf;" horiz-adv-x="1224" d="M37 0v219h72q45 0 45 45v819q0 184 140 290t333 106q178 0 301 -102.5t123 -254.5q0 -61 -29 -115.5t-63.5 -86t-63.5 -72.5t-29 -80q0 -33 34 -68.5t83 -70.5t98 -78t83 -106.5t34 -139.5q0 -158 -106.5 -244t-262.5 -86q-190 2 -303 86l60 201q94 -66 205 -65 q145 0 145 122q0 47 -52.5 97.5t-113.5 91.5t-113.5 108.5t-52.5 145.5q0 68 46 129l92 118q46 56 46 109q0 57 -45 98t-125 41q-86 0 -145 -49t-59 -143v-926q0 -74 -33 -106.5t-107 -32.5h-237z" />
<glyph unicode="&#xe0;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM455 1174l-213 278h250l155 -278h-192z" />
<glyph unicode="&#xe1;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM455 1174l155 278h250l-215 -278h-190z" />
<glyph unicode="&#xe2;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM258 1174l186 278h224l188 -278h-194l-103 165h-4l-104 -165h-193z" />
<glyph unicode="&#xe3;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM184 1176q0 281 234 280q61 0 108 -33.5t83 -66.5t71 -33q41 0 62.5 37t21.5 90h162 q0 -281 -234 -281q-61 0 -108 34t-83 67t-71 33q-41 0 -62.5 -36t-21.5 -91h-162z" />
<glyph unicode="&#xe4;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM649 1214v238h182v-238h-182zM283 1214v238h180v-238h-180z" />
<glyph unicode="&#xe5;" horiz-adv-x="1146" d="M68 301q0 78 32.5 139.5t91 98t122 62.5t140 36t129 14t105.5 4h33v9q0 111 -46 157.5t-147 46.5q-49 0 -94 -15t-45 -54v-56h-242v111q0 68 42 115t111 66.5t123 26.5t107 7q451 0 451 -416v-389q0 -45 45 -45h82v-219h-234q-68 0 -100.5 31.5t-32.5 83.5l2 45h-4 l-10 -21q-6 -12 -32.5 -44t-59.5 -56.5t-90.5 -44t-122.5 -19.5q-147 0 -251.5 88t-104.5 238zM330 313q0 -55 41 -95t116 -40q100 0 169 87t69 188v24h-45q-350 0 -350 -164zM555 1149q-74 0 -128 43t-54 117q0 76 54 118.5t128 42.5t128 -43t54 -118q0 -74 -54 -117 t-128 -43zM555 1239q31 0 51.5 19.5t20.5 50.5q0 33 -20.5 52t-51.5 19t-51.5 -19.5t-20.5 -51.5q0 -31 20.5 -50.5t51.5 -19.5z" />
<glyph unicode="&#xe6;" horiz-adv-x="1773" d="M70 301q0 113 65.5 189.5t174 108.5t195.5 43t183 11h35v15q0 109 -48 154.5t-147 45.5q-51 0 -95 -15t-44 -54v-56h-242v111q0 80 64.5 131t144.5 67.5t174 16.5q252 0 349 -154h4q125 154 348 154q219 0 339 -145.5t120 -366.5l-4 -84h-715q16 -135 100 -205.5 t207 -70.5q74 0 147.5 28.5t110.5 57.5l35 30l108 -180l-18 -17.5t-54 -38t-87 -47t-116 -38t-144 -17.5q-299 0 -439 230h-4q-10 -25 -34.5 -57.5t-69.5 -73.5t-121 -69t-166 -28q-150 0 -253 88.5t-103 235.5zM981 653h444q-2 94 -59 153.5t-139 59.5q-96 0 -161 -57.5 t-85 -155.5zM332 313q0 -57 41 -96t119 -39q100 0 167.5 87t67.5 190v18h-74q-321 0 -321 -160z" />
<glyph unicode="&#xe7;" horiz-adv-x="1101" d="M66 522q0 229 155.5 388t415.5 159q80 0 160 -19.5t149.5 -75.5t69.5 -140v-123h-230v57q0 39 -47 60.5t-102 21.5q-135 0 -222 -92t-87 -234q0 -152 95 -236.5t230 -84.5q160 0 299 131l11 10l108 -180q-6 -8 -18.5 -20.5t-53.5 -44t-87 -56.5t-120.5 -45.5 t-152.5 -22.5l-14 -65q66 -8 106.5 -47t40.5 -109q0 -94 -63.5 -137t-155.5 -43q-33 0 -64.5 4t-46.5 8l-16 2v144q43 -16 90 -17q88 0 88 58q0 55 -98 55l-43 -4l45 164q-203 37 -322.5 184t-119.5 350z" />
<glyph unicode="&#xe8;" horiz-adv-x="1140" d="M66 522q0 242 147 394.5t383 152.5q217 0 340 -140.5t123 -355.5l-6 -96h-721q14 -133 102 -206.5t211 -73.5q74 0 147.5 28.5t108.5 57.5l37 30l109 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-252 0 -406.5 159t-154.5 388zM340 657h453 q-2 92 -58.5 151.5t-138.5 59.5q-100 0 -166.5 -56.5t-89.5 -154.5zM489 1174l-213 278h250l156 -278h-193z" />
<glyph unicode="&#xe9;" horiz-adv-x="1140" d="M66 522q0 242 147 394.5t383 152.5q217 0 340 -140.5t123 -355.5l-6 -96h-721q14 -133 102 -206.5t211 -73.5q74 0 147.5 28.5t108.5 57.5l37 30l109 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-252 0 -406.5 159t-154.5 388zM340 657h453 q-2 92 -58.5 151.5t-138.5 59.5q-100 0 -166.5 -56.5t-89.5 -154.5zM489 1174l156 278h250l-215 -278h-191z" />
<glyph unicode="&#xea;" horiz-adv-x="1140" d="M66 522q0 242 147 394.5t383 152.5q217 0 340 -140.5t123 -355.5l-6 -96h-721q14 -133 102 -206.5t211 -73.5q74 0 147.5 28.5t108.5 57.5l37 30l109 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-252 0 -406.5 159t-154.5 388zM340 657h453 q-2 92 -58.5 151.5t-138.5 59.5q-100 0 -166.5 -56.5t-89.5 -154.5zM291 1174l186 278h223l189 -278h-195l-102 165h-4l-105 -165h-192z" />
<glyph unicode="&#xeb;" horiz-adv-x="1140" d="M66 522q0 242 147 394.5t383 152.5q217 0 340 -140.5t123 -355.5l-6 -96h-721q14 -133 102 -206.5t211 -73.5q74 0 147.5 28.5t108.5 57.5l37 30l109 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-252 0 -406.5 159t-154.5 388zM340 657h453 q-2 92 -58.5 151.5t-138.5 59.5q-100 0 -166.5 -56.5t-89.5 -154.5zM682 1214v238h182v-238h-182zM315 1214v238h181v-238h-181z" />
<glyph unicode="&#xec;" horiz-adv-x="618" d="M180 139v639q0 45 -45 45h-82v221h248q139 0 139 -139v-641q0 -45 45 -45h80v-219h-246q-74 0 -106.5 32.5t-32.5 106.5zM195 1174l-213 280h247l156 -280h-190z" />
<glyph unicode="&#xed;" horiz-adv-x="618" d="M180 139v639q0 45 -45 45h-82v221h248q139 0 139 -139v-641q0 -45 45 -45h80v-219h-246q-74 0 -106.5 32.5t-32.5 106.5zM195 1174l155 280h248l-213 -280h-190z" />
<glyph unicode="&#xee;" horiz-adv-x="618" d="M180 139v639q0 45 -45 45h-82v221h248q139 0 139 -139v-641q0 -45 45 -45h80v-219h-246q-74 0 -106.5 32.5t-32.5 106.5zM-6 1174l188 280h224l188 -280h-197l-102 167h-4l-103 -167h-194z" />
<glyph unicode="&#xef;" horiz-adv-x="618" d="M180 139v639q0 45 -45 45h-82v221h248q139 0 139 -139v-641q0 -45 45 -45h80v-219h-246q-74 0 -106.5 32.5t-32.5 106.5zM356 1214v240h183v-240h-183zM41 1214v240h180v-240h-180z" />
<glyph unicode="&#xf0;" horiz-adv-x="1198" d="M78 485q0 193 130 330t351 137q57 0 109.5 -15t76.5 -30l23 -14h4q-59 131 -192 217l-379 -164l-13 154l228 100q-100 49 -236 82l72 205q258 -57 442 -170l303 129l13 -152l-181 -80q281 -246 281 -645q0 -86 -17.5 -169t-58.5 -160.5t-101.5 -136t-151.5 -93.5 t-203 -35q-229 0 -364.5 151.5t-135.5 358.5zM340 479q0 -117 63.5 -200.5t180.5 -83.5q131 0 197.5 98t66.5 229q0 100 -65.5 164t-176.5 64q-127 0 -196.5 -80t-69.5 -191z" />
<glyph unicode="&#xf1;" horiz-adv-x="1316" d="M170 0v778q0 45 -45 45h-82v221h240q137 0 137 -116v-31l-4 -45h4q43 86 135 151.5t233 65.5q365 0 365 -397v-408q0 -45 45 -45h82v-219h-248q-74 0 -106.5 33t-32.5 106v479q0 104 -36 158.5t-128 54.5q-102 0 -177 -58t-103 -155q-20 -61 -21 -139v-479h-258z M301 1176q0 281 234 280q59 0 107 -33.5t84 -66.5t71 -33q41 0 62.5 37t21.5 90h161q0 -281 -233 -281q-59 0 -107.5 34t-84 67t-70.5 33q-41 0 -62.5 -36t-21.5 -91h-162z" />
<glyph unicode="&#xf2;" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5zM537 1174l-213 278h249 l156 -278h-192z" />
<glyph unicode="&#xf3;" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5zM539 1174l155 278h250 l-215 -278h-190z" />
<glyph unicode="&#xf4;" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5zM340 1174l186 278h224l188 -278 h-195l-102 165h-4l-105 -165h-192z" />
<glyph unicode="&#xf5;" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5zM266 1176q0 281 234 280 q61 0 108 -33.5t83 -66.5t71 -33q41 0 62.5 37t21.5 90h162q0 -281 -234 -281q-61 0 -108.5 34t-83 67t-70.5 33q-41 0 -62.5 -36t-21.5 -91h-162z" />
<glyph unicode="&#xf6;" horiz-adv-x="1275" d="M66 522.5q0 237.5 164.5 392t406.5 154.5t407.5 -154.5t165.5 -392t-164.5 -392.5t-408.5 -155q-242 0 -406.5 155t-164.5 392.5zM328 522q0 -143 90 -234t219 -91q131 0 221 91t90 234q0 141 -91 233.5t-220 92.5t-219 -92.5t-90 -233.5zM731 1214v238h182v-238h-182z M365 1214v238h180v-238h-180z" />
<glyph unicode="&#xf7;" d="M510 895v221h233v-221h-233zM94 483v203h1067v-203h-1067zM510 55v221h233v-221h-233z" />
<glyph unicode="&#xf8;" horiz-adv-x="1275" d="M184 -8l78 108q-197 160 -196 422q0 238 164.5 392.5t406.5 154.5q147 0 274 -65l84 116l113 -78l-82 -112q184 -162 184 -408q0 -238 -164.5 -392.5t-408.5 -154.5q-141 0 -256 56l-84 -119zM408 301l366 514q-66 33 -137 33q-129 0 -219 -92t-90 -234q0 -129 80 -221z M518 221q55 -25 119 -24q131 0 221 91t90 234q0 119 -69 201z" />
<glyph unicode="&#xf9;" horiz-adv-x="1306" d="M166 373v405q0 45 -45 45h-82v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-4q-41 -90 -137.5 -154t-223.5 -64q-360 1 -360 398zM541 1174 l-213 278h250l155 -278h-192z" />
<glyph unicode="&#xfa;" horiz-adv-x="1306" d="M166 373v405q0 45 -45 45h-82v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-4q-41 -90 -137.5 -154t-223.5 -64q-360 1 -360 398zM541 1174 l155 278h250l-215 -278h-190z" />
<glyph unicode="&#xfb;" horiz-adv-x="1306" d="M166 373v405q0 45 -45 45h-82v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-4q-41 -90 -137.5 -154t-223.5 -64q-360 1 -360 398zM342 1174 l186 278h224l188 -278h-195l-102 165h-4l-104 -165h-193z" />
<glyph unicode="&#xfc;" horiz-adv-x="1306" d="M166 373v405q0 45 -45 45h-82v221h248q72 0 104.5 -32.5t32.5 -104.5v-481q0 -104 36 -158.5t126 -54.5q135 0 214 102.5t79 249.5v479h260v-780q0 -45 45 -45h82v-219h-240q-137 0 -137 117v28l2 48h-4q-41 -90 -137.5 -154t-223.5 -64q-360 1 -360 398zM735 1214v238 h183v-238h-183zM369 1214v238h180v-238h-180z" />
<glyph unicode="&#xfd;" horiz-adv-x="1132" d="M102 -139q63 -72 150 -72q117 0 172 133l35 80l-348 784q-14 37 -56 37h-30v221h172q55 0 85.5 -22.5t51.5 -75.5l205 -522l36 -139h5q16 86 34 139l179 522q33 98 139 98h176v-221h-31q-45 0 -59 -37l-375 -944q-53 -135 -153.5 -203.5t-223.5 -68.5q-152 0 -258 100 l-6 6zM471 1174l156 278h250l-215 -278h-191z" />
<glyph unicode="&#xfe;" horiz-adv-x="1265" d="M164 -410v1598q0 45 -45 45h-82v221h248q74 0 106.5 -34t32.5 -105v-297l-4 -90h4q98 141 305 141q213 0 342 -153.5t129 -393.5q0 -238 -129 -392.5t-342 -154.5q-100 0 -176 35t-102 70l-27 35h-4q4 -37 4 -90v-435h-260zM416 522q0 -170 74.5 -247.5t191.5 -77.5 q115 0 185.5 92t70.5 233q0 143 -70.5 234.5t-185.5 91.5q-119 0 -192.5 -78t-73.5 -248z" />
<glyph unicode="&#xff;" horiz-adv-x="1132" d="M102 -139q63 -72 150 -72q117 0 172 133l35 80l-348 784q-14 37 -56 37h-30v221h172q55 0 85.5 -22.5t51.5 -75.5l205 -522l36 -139h5q16 86 34 139l179 522q33 98 139 98h176v-221h-31q-45 0 -59 -37l-375 -944q-53 -135 -153.5 -203.5t-223.5 -68.5q-152 0 -258 100 l-6 6zM664 1214v238h182v-238h-182zM297 1214v238h180v-238h-180z" />
<glyph unicode="&#x152;" horiz-adv-x="1945" d="M61 729q0 313 211 527t519 214q70 0 163 -8t133 -8h621q74 0 106.5 -34t32.5 -105v-221h-241v88q0 45 -45 45h-322v-381h465v-228h-465v-391h375q45 0 45 45v88h242v-221q0 -74 -32 -106.5t-102 -32.5h-680q-39 0 -133 -9t-163 -9q-307 0 -518.5 217t-211.5 530zM340 729 q0 -215 127 -356.5t324 -141.5q123 0 180 15v960q-72 16 -180 17q-197 0 -324 -140.5t-127 -353.5z" />
<glyph unicode="&#x153;" horiz-adv-x="2035" d="M66 520.5q0 241.5 164.5 395t404.5 153.5q283 0 440 -215h4q135 215 412 215q219 0 341 -140.5t122 -355.5l-6 -96h-721q18 -135 105 -207.5t208 -72.5q156 0 289 110l6 6l107 -180q-6 -6 -18.5 -17.5t-54.5 -38t-87 -47t-116 -38t-144 -17.5q-293 0 -437 222h-4 q-160 -221 -444 -222q-242 0 -406.5 152t-164.5 393.5zM1235 657h453q-4 94 -58.5 152.5t-138.5 58.5q-100 0 -166.5 -56.5t-89.5 -154.5zM328 520.5q0 -145.5 90 -234.5t219 -89q131 0 221 90t90 235.5t-91 235.5t-220 90t-219 -91t-90 -236.5z" />
<glyph unicode="&#x178;" horiz-adv-x="1259" d="M496 0v635l-344 543q-20 31 -36 40t-48 9h-48v227h138q74 0 112.5 -20.5t77.5 -85.5l193 -320l88 -164h4q37 78 88 164l190 320q39 66 78 86t113 20h137v-227h-47q-33 0 -48.5 -9.5t-35.5 -39.5l-344 -543v-635h-268zM725 1591v238h182v-238h-182zM358 1591v238h181v-238 h-181z" />
<glyph unicode="&#x192;" horiz-adv-x="765" d="M-23 -115l-86 6l21 222q20 -4 51 -4q201 0 217 188l35 387h-145v207h163l17 184q8 98 46 171t85 113t110.5 64.5t113.5 31.5t104 7l88 -6l-21 -221q-20 4 -53 4q-201 0 -217 -188l-14 -160h206v-207h-225l-37 -410q-8 -98 -46 -171.5t-86 -113.5t-111.5 -64.5t-113 -32 t-102.5 -7.5z" />
<glyph unicode="&#x2c6;" horiz-adv-x="1026" d="M215 1550l186 279h224l188 -279h-195l-102 166h-4l-104 -166h-193z" />
<glyph unicode="&#x2da;" horiz-adv-x="786" d="M393 1526q-74 0 -128 43t-54 117q0 76 54 118.5t128 42.5t128 -43t54 -118q0 -74 -54 -117t-128 -43zM393 1616q31 0 51.5 19.5t20.5 50.5q0 33 -20.5 52t-51.5 19t-51 -19.5t-20 -51.5q0 -31 20 -50.5t51 -19.5z" />
<glyph unicode="&#x2dc;" horiz-adv-x="1122" d="M197 1552q0 281 233 281q61 0 108.5 -34t83 -66.5t70.5 -32.5q41 0 62.5 37t21.5 90h162q0 -281 -233 -281q-61 0 -108.5 34t-83.5 66.5t-71 32.5q-41 0 -62.5 -35.5t-21.5 -91.5h-161z" />
<glyph unicode="&#x2000;" horiz-adv-x="923" />
<glyph unicode="&#x2001;" horiz-adv-x="1847" />
<glyph unicode="&#x2002;" horiz-adv-x="923" />
<glyph unicode="&#x2003;" horiz-adv-x="1847" />
<glyph unicode="&#x2004;" horiz-adv-x="614" />
<glyph unicode="&#x2005;" horiz-adv-x="460" />
<glyph unicode="&#x2006;" horiz-adv-x="307" />
<glyph unicode="&#x2007;" horiz-adv-x="307" />
<glyph unicode="&#x2008;" horiz-adv-x="229" />
<glyph unicode="&#x2009;" horiz-adv-x="368" />
<glyph unicode="&#x200a;" horiz-adv-x="102" />
<glyph unicode="&#x2010;" horiz-adv-x="882" d="M133 471v227h617v-227h-617z" />
<glyph unicode="&#x2011;" horiz-adv-x="882" d="M133 471v227h617v-227h-617z" />
<glyph unicode="&#x2012;" horiz-adv-x="882" d="M133 471v227h617v-227h-617z" />
<glyph unicode="&#x2013;" horiz-adv-x="1357" d="M113 483v203h1132v-203h-1132z" />
<glyph unicode="&#x2014;" horiz-adv-x="1767" d="M113 483v203h1542v-203h-1542z" />
<glyph unicode="&#x2018;" horiz-adv-x="501" d="M86 1032l154 447h176l-97 -447h-233z" />
<glyph unicode="&#x2019;" horiz-adv-x="501" d="M86 1032l96 449h234l-154 -449h-176z" />
<glyph unicode="&#x201a;" horiz-adv-x="501" d="M182 264h234l-154 -446h-176z" />
<glyph unicode="&#x201c;" horiz-adv-x="827" d="M414 1032l151 447h176l-96 -447h-231zM86 1032l154 447h176l-97 -447h-233z" />
<glyph unicode="&#x201d;" horiz-adv-x="827" d="M414 1032l96 449h231l-151 -449h-176zM86 1032l96 449h234l-154 -449h-176z" />
<glyph unicode="&#x201e;" horiz-adv-x="827" d="M414 -182l96 446h231l-151 -446h-176zM182 264h234l-154 -446h-176z" />
<glyph unicode="&#x2020;" horiz-adv-x="872" d="M309 -102v944h-254v202h254v410h250v-410h258v-202h-258v-944h-250z" />
<glyph unicode="&#x2021;" horiz-adv-x="872" d="M309 -102v436h-254v201h254v307h-254v202h254v410h250v-410h258v-202h-258v-307h258v-201h-258v-436h-250z" />
<glyph unicode="&#x2022;" horiz-adv-x="960" d="M479 254q-141 0 -241.5 100.5t-100.5 241.5t100.5 241.5t241.5 100.5q143 0 242.5 -100.5t99.5 -241.5t-99.5 -241.5t-242.5 -100.5z" />
<glyph unicode="&#x2026;" horiz-adv-x="2033" d="M1475 0v260h251v-260h-251zM891 0v260h252v-260h-252zM309 0v260h250v-260h-250z" />
<glyph unicode="&#x202f;" horiz-adv-x="368" />
<glyph unicode="&#x2039;" horiz-adv-x="802" d="M430 158l-336 420l336 421h248l-336 -421l336 -420h-248z" />
<glyph unicode="&#x203a;" horiz-adv-x="802" d="M119 158l336 420l-336 421h248l335 -421l-335 -420h-248z" />
<glyph unicode="&#x205f;" horiz-adv-x="460" />
<glyph unicode="&#x20ac;" horiz-adv-x="1253" d="M78 512v156h127q-4 35 -4 61l4 66h-127v157h153q68 233 259.5 380t441.5 147l203 -27l-64 -240q-70 20 -145 21q-145 0 -254 -75t-158 -206h510l-33 -157h-514q-4 -31 -4 -62l6 -65h488l-31 -156h-410q47 -131 158 -209t252 -78l197 31l47 -242q-106 -39 -248 -39 q-260 0 -448.5 147.5t-252.5 389.5h-153z" />
<glyph unicode="&#x2122;" horiz-adv-x="2029" d="M874 547v170h46q18 0 20 18l57 719h183l186 -428l29 -86h4q12 51 26 86l189 428h180l57 -719q4 -18 21 -18h47v-170h-154q-57 0 -78.5 17.5t-25.5 74.5l-27 375l2 63h-4l-159 -364h-154l-160 364h-4l2 -63l-27 -375q-4 -57 -24.5 -74.5t-77.5 -17.5h-154zM373 547v735 h-119q-16 0 -16 -16v-60h-168v156q0 53 20.5 72.5t77.5 19.5h606q55 0 75.5 -19.5t20.5 -72.5v-156h-163v60q0 16 -15 16h-123v-735h-196z" />
<glyph unicode="&#xe000;" horiz-adv-x="1045" d="M0 1045h1045v-1045h-1045v1045z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1298" d="M170 0v838h-129v206h129v31q0 98 30.5 171t76 113t107.5 64.5t111.5 31.5t100.5 7l88 -6v-221q-25 4 -59 4q-195 0 -195 -174v-21h555q139 0 139 -139v-641q0 -45 45 -45h80v-219h-245q-74 0 -107 33t-33 106v654q0 45 -45 45h-389v-838h-260zM877 1214v240h225v-240 h-225z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1282" d="M596 1454h375q139 0 139 -139v-1051q0 -45 45 -45h80v-219h-246q-74 0 -106.5 33t-32.5 106v1049q0 45 -45 45h-174q-201 0 -201 -164v-25h223v-206h-223v-838h-260v838h-129v206h129v31q0 98 31.5 171t76 111t106.5 61.5t110.5 29.5t101.5 6z" />
<glyph unicode="&#xfb03;" horiz-adv-x="1986" d="M170 0v838h-129v206h129v31q0 98 30.5 171t76 113t107.5 64.5t111.5 31.5t100.5 7l88 -6v-221q-25 4 -59 4q-195 0 -195 -176v-19h426v31q0 98 31 171t76 113t107.5 64.5t111.5 31.5t102 7l86 -6v-221q-25 4 -57 4q-197 0 -197 -176v-19h555q74 0 106.5 -33.5 t32.5 -105.5v-641q0 -45 45 -45h82v-219h-247q-74 0 -107 33t-33 106v654q0 45 -45 45h-389v-838h-260v838h-426v-838h-260zM1563 1214v240h225v-240h-225z" />
<glyph unicode="&#xfb04;" horiz-adv-x="1970" d="M1284 1454h375q139 0 139 -139v-1051q0 -45 45 -45h80v-219h-246q-74 0 -106.5 33t-32.5 106v1049q0 45 -45 45h-174q-201 0 -201 -164v-25h223v-206h-223v-838h-260v838h-428v-838h-260v838h-129v206h129v33q0 96 30.5 170t74.5 114t105.5 63.5t111 30.5t102.5 7l90 -6 v-221q-25 4 -57 4q-197 0 -197 -174v-21h428v31q0 98 32 171t76 111t106.5 61.5t110.5 29.5t101 6z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,108 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AjaxCommentForm.ascx.cs" Inherits="Runway.Blog.usercontrols.AjaxCommentForm" %>
<asp:PlaceHolder ID="ph_closed" runat="server" Visible="false">
<p class="blogCommentsClosed umbError">
<%= CommentsClosedMessage %>
</p>
</asp:PlaceHolder>
<asp:PlaceHolder ID="ph_form" Visible="false" runat="server">
<div id="commentform" class="post-comment">
<div id="gravatar" style="display: none; height: 80px; width:80px;"></div>
<div class="form-label">
<label for="author" class="fieldLabel">
<%= Runway.Blog.BlogLibrary.Dictionary("#Name","Your name") %>:
</label>
</div>
<div class="form-input">
<input type="text" id="author" name="name" class="input-text required" />
</div>
<div class="form-label">
<label for="email" class="fieldLabel">
<%= Runway.Blog.BlogLibrary.Dictionary("#Email","Email address") %>:
</label>
</div>
<div class="form-input">
<input type="text" id="email" name="email" class="input-text required email" />
</div>
<div class="form-label">
<label for="url" class="fieldLabel">
<%= Runway.Blog.BlogLibrary.Dictionary("#Website","Website url") %>:
</label>
</div>
<div class="form-input">
<input type="text" id="url" name="website" class="input-text url" />
</div>
<div class="form-label">
<label for="comment" class="fieldLabel">
<%= Runway.Blog.BlogLibrary.Dictionary("#Comment","Your message") %>:
</label>
</div>
<div class="form-input">
<textarea id="comment" cols="20" name="comment" rows="7" class="required"></textarea>
</div>
<div class="form-submit">
<input type="submit" id="submit" class="submit" value="<%= Runway.Blog.BlogLibrary.Dictionary("#Submit","Post Comment") %>" />
</div>
</div>
<div id="commentLoading" style="display: none">
<%= Runway.Blog.BlogLibrary.Dictionary("#CommentLoading","Your comment is being submitted, please wait") %>
</div>
<div id="commentPosted" style="display: none">
<%= Runway.Blog.BlogLibrary.Dictionary("#CommentPosted","Your comment has been posted, thank you very much") %>
</div>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("#commentform #email").blur(function(){
var email = jQuery("#commentform #email").val();
if(email != ""){
var url = "/base/RunwayBlog/GetGravatarImage/" + email + "/80.aspx";
jQuery.get(url, function(data){
if(data != ""){
jQuery("#gravatar").css( "background-image","url(" + data + ")" ).show();
}else{
jQuery("#gravatar").hide();
}
});
}
});
jQuery("form").validate({
submitHandler: function(form) {
jQuery("#commentform").hide();
jQuery("#commentLoading").show();
jQuery("#commentform #submit").attr("enabled", false);
var url = "/base/RunwayBlog/CreateComment/<umbraco:Item field="pageID" runat="server"/>.aspx";
jQuery.post(url, { author: jQuery("#commentform #author").val(), email: jQuery("#commentform #email").val(), url: jQuery("#commentform #url").val(), comment: jQuery("#commentform #comment").val() },
function(data){
jQuery("#commentLoading").hide();
jQuery("#commentPosted").show().removeClass("error");
if(data == 0){
jQuery("#commentPosted").addClass("error").html(" <%= Runway.Blog.BlogLibrary.Dictionary("#CommentFailend","Your comment could not be posted, we're very sorry for the inconvenience") %> ");
jQuery("#commentform").show();
jQuery("#commentform #submit").attr("enabled", true);
}
});
}
});
});
</script>
</asp:PlaceHolder>

View File

@@ -0,0 +1,42 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BlogInstaller.ascx.cs" Inherits="Runway.Blog.usercontrols.BlogInstaller" %>
<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %>
<asp:Panel runat="server" ID="done" Visible="false">
<p>
<strong>Installation complete!</strong> you can now go to the content section and start blogging directly from the dashboard.
</p>
<p>
Or you can view your blog <asp:HyperLink Target="_blank" Text="here" runat="server" ID="blogLink" />
</p>
</asp:Panel>
<asp:Panel runat="server" ID="install">
<umb:PropertyPanel runat="server">
<p>
<strong>Runway Blog has been installed</strong>
</p>
<ul>
<li>Document types and templates have been added</li>
<li>Macros and xslt-files have been setup</li>
<li>A test blog has been created</li>
</ul>
<p>
All you need to do now is give it a name and a description, and you can start blogging right away.
</p>
</umb:PropertyPanel>
<umb:PropertyPanel runat="server" Text="Blog name">
<asp:TextBox ID="tb_name" runat="server" CssClass="guiInputText" style="width: 230px" /> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="tb_name" runat="server" ErrorMessage="*"/>
</umb:PropertyPanel>
<umb:PropertyPanel runat="server" Text="Blog description">
<asp:TextBox ID="tb_description" TextMode="MultiLine" CssClass="guiInputText" style="width: 230px" runat="server" /> <asp:RequiredFieldValidator ControlToValidate="tb_description" runat="server" ErrorMessage="*"/>
</umb:PropertyPanel>
<umb:PropertyPanel runat="server" Text=" ">
<asp:Button ID="bt_create" runat="server" OnClick="saveAndPublish" Text="Save" />
</umb:PropertyPanel>
</asp:Panel>

View File

@@ -0,0 +1,147 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CommentModeration.ascx.cs" Inherits="Runway.Blog.Dashboard.CommentModeration" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %>
<style type="text/css">
.comment-select
{
float:left;
}
.comment-gravatar
{
float:left;
margin-right:8px;
}
.comment-actions
{
float:right;
width: 150px;
}
.comment-data
{
margin-left: 30px;
}
#comments-options
{
margin-top:5px;
padding:5px;
}
#comments-paging
{
padding:5px;
}
.comment
{
padding-top:5px;
padding-left:5px;
border-bottom: solid 1px #CCCCCC;
}
.spamTrue
{
background-color: #FFFFE0;
}
#bulkactions
{
float:right;
}
</style>
<script type="text/javascript" language="javascript">
function commentconfirm_delete() {
if (confirm("Are you sure you want to delete this comment?") == true)
return true;
else
return false;
}
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<umb:Pane runat="server" Text="Comment moderation">
<div id="comments-options">
<div id="bulkactions">
<asp:LinkButton ID="btnDeleteSelected" runat="server" onclick="btnDeleteSelected_Click">Delete Selected</asp:LinkButton>
</div>
<asp:LinkButton ID="btnApproved" runat="server" onclick="btnApproved_Click">Approved</asp:LinkButton> |
<asp:LinkButton ID="btnSpam" runat="server" onclick="btnSpam_Click">Spam</asp:LinkButton> |
<asp:LinkButton ID="btnAll" runat="server" onclick="btnAll_Click">All</asp:LinkButton>
</div>
<div id="comments">
<asp:Repeater ID="rptComments" runat="server">
<ItemTemplate>
<div class='comment spam<%# Eval("spam") %>'>
<asp:Label ID="lblID" runat="server" Text='<%# Eval("id") %>' Visible="false"></asp:Label>
<div class="comment-actions">
<asp:LinkButton ID="btnDelete" runat="server" CommandArgument='<%# Eval("id") %>' OnClientClick="return commentconfirm_delete();" OnClick="btnDelete_Click">Delete</asp:LinkButton>
| <asp:LinkButton ID="btnToggleState" runat="server" CommandName='<%# Eval("spam").ToString() %>' CommandArgument='<%# Eval("id") %>' Text='<%# GetToggleStateText(Eval("spam")) %>' OnClick="btnToggleState_Click"></asp:LinkButton>
</div>
<div class="comment-select">
<asp:CheckBox ID="cbSelectComment" runat="server" />
</div>
<div class="comment-data">
<p class="comment-author">
<div class="comment-gravatar">
<img src='http://www.gravatar.com/avatar/<%# umbraco.library.md5(Eval("email").ToString()) %>?s=32' width="32" height="32" alt="avatar" />
</div>
<strong><%# Server.HtmlEncode(Eval("name").ToString()) %></strong>
<br/>
<a href='<%# Eval("website") %>' target='_blank'><%# Server.HtmlEncode( Eval("website").ToString()) %></a> | <a href='mailto:<%# Eval("email") %>'><%# Server.HtmlEncode(Eval("email").ToString()) %></a>
</p>
<p>
<%# Server.HtmlEncode(Eval("comment").ToString()).Replace("\n","<br/>") %>
</p>
<p>
On <%# GetPageDetails(Eval("nodeid")) %> , <%# Eval("created") %>
</p>
</div>
<br style="clear:both;" />
</div>
</ItemTemplate>
</asp:Repeater>
<div id="comments-paging">
<asp:Repeater ID="rptPages" runat="server">
<ItemTemplate>
<asp:LinkButton ID="btnPage"
CommandName="Page"
CommandArgument="<%#Container.DataItem %>"
CssClass="text"
Runat="server"><%# Container.DataItem %>
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</div>
</div>
</umb:Pane>
</ContentTemplate>
</asp:UpdatePanel>

View File

@@ -0,0 +1,14 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MemberPicker.ascx.cs" Inherits="Training.Level2.usercontrols.MemberPicker" %>
<asp:textbox id="tb_members" runat="server" cssclass="tokeninput" />
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("input.tokeninput").tokenInput("/base/Mentions/Members/", {
theme: "facebook",
prePopulate:[
<asp:literal id="js_values" runat="server" />
]
});
});
</script>

View File

@@ -0,0 +1,2 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Parallel.ascx.cs" Inherits="Umbraco.Web.UI.usercontrols.ParallelUserControl" %>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

View File

@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
namespace Umbraco.Web.UI.usercontrols
{
public partial class ParallelUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
ParallelDocumentUpdate test = new ParallelDocumentUpdate();
test.Execute();
}
}
public class ParallelDocumentUpdate
{
private List<myDocument> documents;
public ParallelDocumentUpdate()
{
documents = new List<myDocument>();
documents.Add(new myDocument(1079, "name1", "string1", 1, false, DateTime.Now.AddDays(1)));
documents.Add(new myDocument(1080, "name2", "string2", 2, true, DateTime.Now.AddDays(2)));
documents.Add(new myDocument(1082, "name3", "string3", 3, false, DateTime.Now.AddDays(3)));
documents.Add(new myDocument(1083, "name4", "string4", 4, true, DateTime.Now.AddDays(4)));
documents.Add(new myDocument(1084, "name5", "string5", 5, true, DateTime.Now.AddDays(4)));
}
public void Execute()
{
System.Threading.Tasks.Parallel.ForEach<myDocument>(documents, d =>
{
Document doc = new Document(d.Id);
doc.Text = d.Name + " " + d.Id.ToString();
doc.getProperty("string").Value = d.Prop1 + " " + d.Id.ToString();
doc.getProperty("int").Value = d.Prop2;
doc.getProperty("bool").Value = d.Prop3;
doc.getProperty("date").Value = d.Prop4;
doc.Publish(User.GetUser(0));
});
}
}
public class myDocument
{
public myDocument(int id, string name, string prop1, int prop2, bool prop3, DateTime prop4)
{
Id = id;
Name = name;
Prop1 = prop1;
Prop2 = prop2;
Prop3 = prop3;
Prop4 = prop4;
}
public int Id { get; set; }
public string Name { get; set; }
public string Prop1 { get; set; }
public int Prop2 { get; set; }
public bool Prop3 { get; set; }
public DateTime Prop4 { get; set; }
}
}

View File

@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Umbraco.Web.UI.usercontrols {
public partial class ParallelUserControl {
/// <summary>
/// Button1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button Button1;
}
}

View File

@@ -0,0 +1,21 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Contact.ascx.cs" Inherits="UmbracoShop.Controls.Contact" %>
<asp:ValidationSummary id="valSum" runat="server" CssClass="error" DisplayMode="BulletList" />
<fieldset>
<legend>Your details</legend>
<p><asp:Label id="lb_name" runat="server" AssociatedControlID="tb_name" Text="Name" /><asp:TextBox ID="tb_name" cssclass="text" runat="server" /></p>
<p><asp:Label id="lb_email" runat="server" AssociatedControlID="tb_email" Text="Email" /><asp:TextBox ID="tb_email" cssclass="text" runat="server" /></p>
<p><asp:Label id="lb_company" runat="server" AssociatedControlID="tb_company" Text="Company" /><asp:TextBox ID="tb_company" cssclass="text" runat="server" /></p>
</fieldset>
<fieldset>
<legend>Message</legend>
<p><asp:Label id="Label1" runat="server" AssociatedControlID="tb_msg" Text="Message" /> <asp:textbox ID="tb_msg" runat="server" cssclass="text" textmode="MultiLine"/></p>
<p><asp:Button ID="bt_submit" OnClick="sendMail" runat="server" Text="Send email" /> <asp:Label CssClass="success" id="lb_success" runat="server" Visible="false">Email send</asp:Label></p>
</fieldset>
<asp:RequiredFieldValidator Display="None" ID="RequiredFieldValidator0" ControlToValidate="tb_name" runat="server" ErrorMessage="Name is mandatory" />
<asp:RequiredFieldValidator Display="None" ID="RequiredFieldValidator1" ControlToValidate="tb_email" runat="server" ErrorMessage="Email is mandatory" />
<asp:RequiredFieldValidator Display="None" ID="RequiredFieldValidator2" ControlToValidate="tb_msg" runat="server" ErrorMessage="Message is mandatory" />
<asp:RegularExpressionValidator Display="None" ID="RegularExpressionValidator0" runat="server" ValidationExpression="^(?i:(?<local_part>[a-z0-9!#$%^&*{}'`+=-_|/?]+(?:\.[a-z0-9!#$%^&*{}'`+=-_|/?]+)*)@(?<labels>[a-z0-9]+\z?.*[a-z0-9-_]+)*(?<tld>\.[a-z0-9]{2,}))$" ControlToValidate="tb_email" ErrorMessage="Email is not valid" />

View File

@@ -1099,8 +1099,7 @@ namespace umbraco
string sql =
@"select umbracoNode.id, umbracoNode.parentId, umbracoNode.sortOrder, cmsContentXml.xml from umbracoNode
inner join cmsContentXml on cmsContentXml.nodeId = umbracoNode.id and umbracoNode.nodeObjectType = @type
inner join cmsDocument on cmsDocument.nodeId = umbracoNode.id
where cmsDocument.published = 1
where umbracoNode.id in (select cmsDocument.nodeId from cmsDocument where cmsDocument.published = 1)
order by umbracoNode.level, umbracoNode.sortOrder";
lock (DbReadSyncLock)

View File

@@ -16,19 +16,19 @@ using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.Xsl;
using Umbraco.Core;
using Umbraco.Core.Events;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Web;
using Umbraco.Web.Macros;
using Umbraco.Web.Templates;
using umbraco.BusinessLogic;
using umbraco.BusinessLogic.Utils;
using umbraco.cms.businesslogic;
using umbraco.cms.businesslogic.macro;
using umbraco.cms.businesslogic.member;
using umbraco.DataLayer;
using umbraco.NodeFactory;
using umbraco.presentation.templateControls;
using umbraco.presentation.xslt.Exslt;
using Content = umbraco.cms.businesslogic.Content;
using Macro = umbraco.cms.businesslogic.macro.Macro;
@@ -373,6 +373,18 @@ namespace umbraco
switch (macroType)
{
case (int)MacroTypes.PartialView:
//error handler for partial views, is an action because we need to re-use it twice below
Action<Exception> handleError = e =>
{
LogHelper.WarnWithException<macro>("Error loading Partial View (file: " + ScriptFile + ")", true, e);
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = Model.ScriptName, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
macroControl = RaiseAndHandleErrorForBehavior("Error loading Partial View script (file: " + ScriptFile + ")", macroErrorEventArgs);
};
TraceInfo("umbracoMacro", "Partial View added (" + Model.TypeName + ")");
try
{
@@ -380,41 +392,16 @@ namespace umbraco
macroControl = new LiteralControl(result.Result);
if (result.ResultException != null)
{
// we'll throw the error if we run in release mode, show details if we're in release mode!
renderFailed = true;
if (HttpContext.Current != null && !HttpContext.Current.IsDebuggingEnabled)
throw result.ResultException;
Exceptions.Add(result.ResultException);
handleError(result.ResultException);
}
break;
}
catch (Exception e)
{
renderFailed = true;
Exceptions.Add(e);
LogHelper.WarnWithException<macro>("Error loading MacroEngine script (file: " + ScriptFile + ", Type: '" + Model.TypeName + "'",
true,
e);
var result =
new LiteralControl("Error loading MacroEngine script (file: " + ScriptFile + ")");
/*
string args = "<ul>";
foreach(object key in attributes.Keys)
args += "<li><strong>" + key.ToString() + ": </strong> " + attributes[key] + "</li>";
foreach (object key in pageElements.Keys)
args += "<li><strong>" + key.ToString() + ": </strong> " + pageElements[key] + "</li>";
args += "</ul>";
result.Text += args;
*/
macroControl = result;
break;
handleError(e);
}
break;
@@ -435,16 +422,19 @@ namespace umbraco
renderFailed = true;
Exceptions.Add(e);
LogHelper.WarnWithException<macro>("Error loading userControl (" + Model.TypeName + ")", true, e);
macroControl = new LiteralControl("Error loading userControl '" + Model.TypeName + "'");
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.TypeName, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
macroControl = RaiseAndHandleErrorForBehavior("Error loading userControl '" + Model.TypeName + "'", macroErrorEventArgs);
break;
}
case (int)MacroTypes.CustomControl:
try
{
TraceInfo("umbracoMacro",
"Custom control added (" + Model.TypeName + ")");
TraceInfo("umbracoMacro",
"ScriptAssembly (" + Model.TypeAssembly + ")");
TraceInfo("umbracoMacro", "Custom control added (" + Model.TypeName + ")");
TraceInfo("umbracoMacro", "ScriptAssembly (" + Model.TypeAssembly + ")");
macroControl = loadControl(Model.TypeAssembly, ScriptType, Model, pageElements);
break;
}
@@ -453,32 +443,41 @@ namespace umbraco
renderFailed = true;
Exceptions.Add(e);
LogHelper.WarnWithException<macro>("Error loading customControl (Assembly: " +
Model.TypeAssembly +
", Type: '" + Model.TypeName + "'", true, e);
LogHelper.WarnWithException<macro>("Error loading customControl (Assembly: " + Model.TypeAssembly + ", Type: '" + Model.TypeName + "'", true, e);
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.TypeAssembly, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
macroControl = RaiseAndHandleErrorForBehavior("Error loading customControl (Assembly: " + Model.TypeAssembly + ", Type: '" + Model.TypeName + "'", macroErrorEventArgs);
macroControl =
new LiteralControl("Error loading customControl (Assembly: " + Model.TypeAssembly +
", Type: '" +
Model.TypeName + "'");
break;
}
case (int)MacroTypes.XSLT:
macroControl = loadMacroXSLT(this, Model, pageElements);
break;
case (int)MacroTypes.Script:
//error handler for partial views, is an action because we need to re-use it twice below
Action<Exception> handleMacroScriptError = e =>
{
LogHelper.WarnWithException<macro>("Error loading MacroEngine script (file: " + ScriptFile + ", Type: '" + Model.TypeName + "'", true, e);
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = ScriptFile, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
macroControl = RaiseAndHandleErrorForBehavior("Error loading MacroEngine script (file: " + ScriptFile + ")", macroErrorEventArgs);
};
try
{
TraceInfo("umbracoMacro",
"MacroEngine script added (" + ScriptFile + ")");
TraceInfo("umbracoMacro", "MacroEngine script added (" + ScriptFile + ")");
ScriptingMacroResult result = loadMacroScript(Model);
macroControl = new LiteralControl(result.Result);
if (result.ResultException != null)
{
// we'll throw the error if we run in release mode, show details if we're in release mode!
renderFailed = true;
if (HttpContext.Current != null && !HttpContext.Current.IsDebuggingEnabled)
throw result.ResultException;
Exceptions.Add(result.ResultException);
handleMacroScriptError(result.ResultException);
}
break;
}
@@ -487,36 +486,13 @@ namespace umbraco
renderFailed = true;
Exceptions.Add(e);
LogHelper.WarnWithException<macro>(
"Error loading MacroEngine script (file: " + ScriptFile + ", Type: '" + Model.TypeName + "'",
true,
e);
var result =
new LiteralControl("Error loading MacroEngine script (file: " + ScriptFile + ")");
/*
string args = "<ul>";
foreach(object key in attributes.Keys)
args += "<li><strong>" + key.ToString() + ": </strong> " + attributes[key] + "</li>";
foreach (object key in pageElements.Keys)
args += "<li><strong>" + key.ToString() + ": </strong> " + pageElements[key] + "</li>";
args += "</ul>";
result.Text += args;
*/
macroControl = result;
handleMacroScriptError(e);
break;
}
default:
if (GlobalSettings.DebugMode)
macroControl =
new LiteralControl("&lt;Macro: " + Name + " (" + ScriptAssembly + "," + ScriptType +
")&gt;");
macroControl = new LiteralControl("&lt;Macro: " + Name + " (" + ScriptAssembly + "," + ScriptType + ")&gt;");
break;
}
@@ -606,6 +582,28 @@ namespace umbraco
return macroControl;
}
/// <summary>
/// Raises the error event and based on the error behavior either return a control to display or throw the exception
/// </summary>
/// <param name="msg"></param>
/// <param name="args"></param>
/// <returns></returns>
private Control RaiseAndHandleErrorForBehavior(string msg, MacroErrorEventArgs args)
{
OnError(args);
switch (args.Behaviour)
{
case MacroErrorBehaviour.Inline:
return new LiteralControl(msg);
case MacroErrorBehaviour.Silent:
return new LiteralControl("");
case MacroErrorBehaviour.Throw:
default:
throw args.Exception;
}
}
/// <summary>
/// check that the file has not recently changed
/// </summary>
@@ -774,11 +772,10 @@ namespace umbraco
"</b><br/><p>" + HttpContext.Current.Server.HtmlEncode(macroXML.OuterXml) +
"</p></div>");
}
else
{
try
{
XslCompiledTransform xsltFile = getXslt(XsltFile);
var xsltFile = getXslt(XsltFile);
try
{
@@ -799,23 +796,25 @@ namespace umbraco
TraceWarn("umbracoMacro InnerException", ie.Message, ie);
ie = ie.InnerException;
}
return new LiteralControl("Error parsing XSLT file: \\xslt\\" + XsltFile);
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
return RaiseAndHandleErrorForBehavior("Error parsing XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
}
}
catch (Exception e)
{
Exceptions.Add(e);
LogHelper.WarnWithException<macro>("Error loading XSLT " + Model.Xslt, true, e);
return new LiteralControl("Error reading XSLT file: \\xslt\\" + XsltFile);
// Invoke any error handlers for this macro
var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
return RaiseAndHandleErrorForBehavior("Error reading XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
}
}
}
else
{
TraceWarn("macro", "Xslt is empty");
return new LiteralControl(string.Empty);
}
}
/// <summary>
/// Parses the text for umbraco Item controls that need to be rendered.
@@ -1502,7 +1501,7 @@ namespace umbraco
string userControlPath = IOHelper.FindFile(fileName);
if (!File.Exists(IOHelper.MapPath(userControlPath)))
return new LiteralControl(string.Format("UserControl {0} does not exist.", fileName));
throw new UmbracoException(string.Format("UserControl {0} does not exist.", fileName));
var oControl = (UserControl)new UserControl().LoadControl(userControlPath);
@@ -1528,11 +1527,7 @@ namespace umbraco
catch (Exception e)
{
LogHelper.WarnWithException<macro>(string.Format("Error creating usercontrol ({0})", fileName), true, e);
return new LiteralControl(
string.Format(
"<div style=\"color: black; padding: 3px; border: 2px solid red\"><b style=\"color:red\">Error creating control ({0}).</b><br/> Maybe file doesn't exists or the usercontrol has a cache directive, which is not allowed! See the tracestack for more information!</div>",
fileName));
throw;
}
}
@@ -1799,5 +1794,26 @@ namespace umbraco
value = false;
return false;
}
#region Events
/// <summary>
/// Occurs when a macro error is raised.
/// </summary>
public static event EventHandler<MacroErrorEventArgs> Error;
/// <summary>
/// Raises the <see cref="MacroErrorEventArgs"/> event.
/// </summary>
/// <param name="e">The <see cref="MacroErrorEventArgs"/> instance containing the event data.</param>
protected void OnError(MacroErrorEventArgs e)
{
if (Error != null)
{
Error(this, e);
}
}
#endregion
}
}

View File

@@ -183,6 +183,7 @@ namespace umbraco.presentation.templateControls
System.Web.HttpContext.Current.Trace.Warn("Template", "Result of macro " + tempMacro.Name + " is null");
} catch (Exception ee) {
System.Web.HttpContext.Current.Trace.Warn("Template", "Error adding macro " + tempMacro.Name, ee);
throw;
}
}
}

View File

@@ -171,11 +171,7 @@ namespace umbraco.MacroEngines
Success = false;
ResultException = exception;
HttpContext.Current.Trace.Warn("umbracoMacro", string.Format("Error Loading Razor Script (file: {0}) {1} {2}", macro.Name, exception.Message, exception.StackTrace));
var loading = string.Format("<div style=\"border: 1px solid #990000\">Error loading Razor Script {0}</br/>", macro.ScriptName);
if (GlobalSettings.DebugMode)
loading = loading + exception.Message;
loading = loading + "</div>";
return loading;
throw;
}
}

View File

@@ -1,11 +1,7 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Xml;
using umbraco.BusinessLogic;
using Umbraco.Core;
using System.Collections.Generic;
using umbraco.MacroEngines;
@@ -554,6 +550,18 @@ namespace umbraco
get { return Umbraco.Core.Configuration.UmbracoSettings.ResolveUrlsFromTextString; }
}
/// <summary>
/// This configuration setting defines how to handle macro errors:
/// - Inline - Show error within macro as text (default and current Umbraco 'normal' behavior)
/// - Silent - Suppress error and hide macro
/// - Throw - Throw an exception and invoke the global error handler (if one is defined, if not you'll get a YSOD)
/// </summary>
/// <value>MacroErrorBehaviour enum defining how to handle macro errors.</value>
public static MacroErrorBehaviour MacroErrorBehaviour
{
get { return Umbraco.Core.Configuration.UmbracoSettings.MacroErrorBehaviour; }
}
/// <summary>
/// Configuration regarding webservices
/// </summary>

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using Umbraco.Core;
using umbraco.cms.businesslogic.member;
using umbraco.cms.businesslogic.web;
@@ -62,4 +63,5 @@ namespace umbraco.cms.businesslogic {
public bool CancelChildren { get; set; }
}
}