This commit is contained in:
guava
2016-12-15 13:40:07 +01:00
commit ee4dd89693
95 changed files with 7368 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
client_script 'deathevents.lua'
client_script 'vehiclechecker.lua'

View File

@@ -0,0 +1,73 @@
Citizen.CreateThread(function()
local isDead = false
local hasBeenDead = false
local diedAt
while true do
Wait(0)
local player = PlayerId()
if NetworkIsPlayerActive(player) then
local ped = PlayerPedId()
if IsPedFatallyInjured(ped) and not isDead then
isDead = true
if not diedAt then
diedAt = GetGameTimer()
end
local killer = NetworkGetEntityKillerOfPlayer(player)
local killerentitytype = GetEntityType(killer)
local killertype = -1
local killerinvehicle = false
local killervehiclename = ''
local killervehicleseat = 0
if killerentitytype == 1 then
killertype = GetPedType(killer)
if IsPedInAnyVehicle(killer, false) == 1 then
killerinvehicle = true
killervehiclename = GetDisplayNameFromVehicleModel(GetEntityModel(GetVehiclePedIsUsing(killer)))
killervehicleseat = GetPedVehicleSeat(killer)
else killerinvehicle = false
end
end
local killerid = GetPlayerByEntityID(killer)
if killer ~= ped and killerid ~= nil and NetworkIsPlayerActive(killerid) then killerid = GetPlayerServerId(killerid)
else killerid = -1
end
if killer == ped then
TriggerEvent('baseevents:onPlayerDied', killertype, { table.unpack(GetEntityCoords(ped)) })
TriggerServerEvent('baseevents:onPlayerDied', killertype, { table.unpack(GetEntityCoords(ped)) })
hasBeenDead = true
else
TriggerEvent('baseevents:onPlayerKilled', killerid, {killertype=killertype, killerinveh=killerinvehicle, killervehseat=killervehicleseat, killervehname=killervehiclename, killerpos=table.unpack(GetEntityCoords(ped))})
TriggerServerEvent('baseevents:onPlayerKilled', killerid, {killertype=killertype, killerinveh=killerinvehicle, killervehseat=killervehicleseat, killervehname=killervehiclename, killerpos=table.unpack(GetEntityCoords(ped))})
hasBeenDead = true
end
elseif not IsPedFatallyInjured(ped) then
isDead = false
diedAt = nil
end
-- check if the player has to respawn in order to trigger an event
if not hasBeenDead and diedAt ~= nil and diedAt > 0 then
TriggerEvent('baseevents:onPlayerWasted', { table.unpack(GetEntityCoords(ped)) })
TriggerServerEvent('baseevents:onPlayerWasted', { table.unpack(GetEntityCoords(ped)) })
hasBeenDead = true
elseif hasBeenDead and diedAt ~= nil and diedAt <= 0 then
hasBeenDead = false
end
end
end
end)
function GetPlayerByEntityID(id)
for i=0,32 do
if(NetworkIsPlayerActive(i) and GetPlayerPed(i) == id) then return i end
end
return nil
end

View File

@@ -0,0 +1,54 @@
local isInVehicle = false
local isEnteringVehicle = false
local currentVehicle = 0
local currentSeat = 0
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
local ped = PlayerPedId()
if not isInVehicle and not IsPlayerDead(PlayerId()) then
if DoesEntityExist(GetVehiclePedIsTryingToEnter(ped)) and not isEnteringVehicle then
-- trying to enter a vehicle!
local vehicle = GetVehiclePedIsTryingToEnter(ped)
local seat = GetSeatPedIsTryingToEnter(ped)
isEnteringVehicle = true
TriggerServerEvent('baseevents:enteringVehicle', vehicle, seat, GetDisplayNameFromVehicleModel(GetEntityModel(vehicle)))
elseif not DoesEntityExist(GetVehiclePedIsTryingToEnter(ped)) and not IsPedInAnyVehicle(ped, true) and isEnteringVehicle then
-- vehicle entering aborted
TriggerServerEvent('baseevents:enteringAborted')
isEnteringVehicle = false
elseif IsPedInAnyVehicle(ped, false) then
-- suddenly appeared in a vehicle, possible teleport
isEnteringVehicle = false
isInVehicle = true
currentVehicle = GetVehiclePedIsUsing(ped)
currentSeat = GetPedVehicleSeat(ped)
local model = GetEntityModel(currentVehicle)
local name = GetDisplayNameFromVehicleModel()
TriggerServerEvent('baseevents:enteredVehicle', currentVehicle, currentSeat, GetDisplayNameFromVehicleModel(GetEntityModel(currentVehicle)))
end
elseif isInVehicle then
if not IsPedInAnyVehicle(ped, false) or IsPlayerDead(PlayerId()) then
-- bye, vehicle
local model = GetEntityModel(currentVehicle)
local name = GetDisplayNameFromVehicleModel()
TriggerServerEvent('baseevents:leftVehicle', currentVehicle, currentSeat, GetDisplayNameFromVehicleModel(GetEntityModel(currentVehicle)))
isInVehicle = false
currentVehicle = 0
currentSeat = 0
end
end
Citizen.Wait(50)
end
end)
function GetPedVehicleSeat(ped)
local vehicle = GetVehiclePedIsIn(ped, false)
for i=-2,GetVehicleMaxNumberOfPassengers(vehicle) do
if(GetPedInVehicleSeat(vehicle, i) == ped) then return i end
end
return -2
end

View File

@@ -0,0 +1,15 @@
description 'chat management stuff'
ui_page 'html/chat.html'
client_script 'chat_client.lua'
server_script 'chat_server.lua'
export 'printChatLine'
files {
'html/chat.html',
'html/chat.css',
'html/chat.js',
'html/jquery.faketextbox.js'
}

View File

@@ -0,0 +1,56 @@
local chatInputActive = false
local chatInputActivating = false
RegisterNetEvent('chatMessage')
AddEventHandler('chatMessage', function(name, color, message)
SendNUIMessage({
name = name,
color = color,
message = message
})
end)
RegisterNUICallback('chatResult', function(data, cb)
chatInputActive = false
SetNuiFocus(false)
if data.message then
local id = PlayerId()
--local r, g, b = GetPlayerRgbColour(id, _i, _i, _i)
local r, g, b = 0, 0x99, 255
TriggerServerEvent('chatMessageEntered', GetPlayerName(id), { r, g, b }, data.message)
end
cb('ok')
end)
Citizen.CreateThread(function()
SetTextChatEnabled(false)
while true do
Wait(0)
if not chatInputActive then
if IsControlPressed(0, 245) --[[ INPUT_MP_TEXT_CHAT_ALL ]] then
chatInputActive = true
chatInputActivating = true
SendNUIMessage({
meta = 'openChatBox'
})
end
end
if chatInputActivating then
if not IsControlPressed(0, 245) then
SetNuiFocus(true)
chatInputActivating = false
end
end
end
end)

View File

@@ -0,0 +1,50 @@
RegisterServerEvent('chatCommandEntered')
RegisterServerEvent('chatMessageEntered')
AddEventHandler('chatMessageEntered', function(name, color, message)
if not name or not color or not message or #color ~= 3 then
return
end
TriggerEvent('chatMessage', source, name, message)
if not WasEventCanceled() then
TriggerClientEvent('chatMessage', -1, name, color, message)
end
print(name .. ': ' .. message)
end)
-- player join messages
AddEventHandler('playerActivated', function()
TriggerClientEvent('chatMessage', -1, '', { 0, 0, 0 }, '^2* ' .. GetPlayerName(source) .. ' joined.')
end)
AddEventHandler('playerDropped', function(reason)
TriggerClientEvent('chatMessage', -1, '', { 0, 0, 0 }, '^2* ' .. GetPlayerName(source) ..' left (' .. reason .. ')')
end)
-- say command handler
AddEventHandler('rconCommand', function(commandName, args)
if commandName == "say" then
local msg = table.concat(args, ' ')
TriggerClientEvent('chatMessage', -1, 'console', { 0, 0x99, 255 }, msg)
RconPrint('console: ' .. msg .. "\n")
CancelEvent()
end
end)
-- tell command handler
AddEventHandler('rconCommand', function(commandName, args)
if commandName == "tell" then
local target = table.remove(args, 1)
local msg = table.concat(args, ' ')
TriggerClientEvent('chatMessage', tonumber(target), 'console', { 0, 0x99, 255 }, msg)
RconPrint('console: ' .. msg .. "\n")
CancelEvent()
end
end)

View File

@@ -0,0 +1,102 @@
body
{
background-color: transparent;
margin: 0px;
}
ul
{
margin: 0px;
padding: 0px;
list-style-type: none; /* hii */
}
#chat
{
position: absolute;
top: 30px;
left: 30px;
padding: 7px;
width: 30%;
font-size: 20px;
font-family: "Segoe UI", "Segoe UI Symbol", "Segoe UI Emoji", Arial, sans-serif;
color: #fff;
overflow: hidden;
text-shadow: 0px 0px 1px #333;
}
input.fake
{
position: absolute;
top: -10000px;
left: -10000px;
}
#chatInputHas
{
display: none;
}
#chatInputHas strong
{
display: inline-block;
vertical-align: middle;
text-transform: uppercase;
height: 29px;
line-height: 26px;
}
#chatInput
{
background-color: transparent;
border: none;
outline: none !important;
padding: 3px;
display: inline-block;
vertical-align: middle;
margin: 0px;
color: #fff;
text-shadow: 0px 0px 1px #333;
font: inherit;
white-space: pre;
overflow: hidden;
}
#chatInput > div:first-child
{
display: inline-block;
vertical-align: middle;
height: 23px;
line-height: 20px;
}
#chatInput .caret
{
display: inline-block;
min-width: 1px;
height: 22px;
margin-left: 1px;
vertical-align: bottom;
background-color: #fff;
box-shadow: 0px 0px 1px #333;
color: white;
}
#chatBuffer
{
height: 240px;
overflow: hidden;
}
.color-1{color: #ff4444;}
.color-2{color: #99cc00;}
.color-3{color: #ffbb33;}
.color-4{color: #0099cc;}
.color-5{color: #33b5e5;}
.color-6{color: #aa66cc;}
.color-8{color: #cc0000;}
.color-9{color: #cc0000;}

View File

@@ -0,0 +1,20 @@
<html>
<head>
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
<script src="jquery.faketextbox.js" type="text/javascript"></script>
<script src="chat.js" type="text/javascript"></script>
<link href="chat.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="chat">
<div id="chatBuffer">
<ul>
</ul>
</div>
<div id="chatInputHas">
<strong>Chat</strong>
<div id="chatInput" />
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,166 @@
function colorize(string)
{
var newString = '';
var inSpan = false;
for (i = 0; i < string.length; i++)
{
if (string[i] == '^')
{
if (string[i + 1] == '7' || string[i + 1] == '0')
{
if (inSpan)
{
newString += '</span>';
inSpan = false;
}
i += 2;
}
else if (string[i + 1] >= '0' && string[i + 1] <= '9')
{
if (inSpan)
{
newString += '</span>';
}
i += 2;
newString += '<span class="color-' + string[i - 1] + '">';
inSpan = true;
}
}
newString += string[i];
}
if (inSpan)
{
newString += '</span>';
}
return newString;
}
$(function()
{
var chatHideTimeout;
var inputShown = false;
function startHideChat()
{
if (chatHideTimeout)
{
clearTimeout(chatHideTimeout);
}
if (inputShown)
{
return;
}
chatHideTimeout = setTimeout(function()
{
if (inputShown)
{
return;
}
$('#chat').animate({ opacity: 0 }, 300);
}, 7000);
}
handleResult = function(elem, wasEnter)
{
inputShown = false;
$('#chatInputHas').hide();
startHideChat();
var obj = {};
if (wasEnter)
{
obj = { message: $(elem).val() };
}
$(elem).val('');
$.post('http://chat/chatResult', JSON.stringify(obj), function(data)
{
console.log(data);
});
};
$('#chatInput').fakeTextbox(); // //
$('#chatInput')[0].onPress(function(e)
{
if (e.which == 13)
{
handleResult(this, true);
}
});
$(document).keyup(function(e)
{
if (e.keyCode == 27)
{
handleResult($('#chatInput')[0].getTextBox(), false);
}
});
$(document).keypress(function(e)
{
if (e.keyCode == 9)
{
e.preventDefault();
return false;
}
});
window.addEventListener('message', function(event)
{
var item = event.data;
if (item.meta && item.meta == 'openChatBox')
{
inputShown = true;
$('#chat').css('opacity', '1');
$('#chatInputHas').show();
$('#chatInput')[0].doFocus();
return;
}
// TODO: use some templating stuff for this
var colorR = parseInt(item.color[0]);
var colorG = parseInt(item.color[1]);
var colorB = parseInt(item.color[2]);
var name = item.name.replace('<', '&lt;');
var message = item.message.replace('<', '&lt;');
message = colorize(message);
var buf = $('#chatBuffer');
var nameStr = '';
if (name != '')
{
nameStr = '<strong style="color: rgb(' + colorR + ', ' + colorG + ', ' + colorB + ')">' + name + ': </strong>';
}
buf.find('ul').append('<li>' + nameStr + message + '</li>');
buf.scrollTop(buf[0].scrollHeight - buf.height());
$('#chat').css('opacity', '1');
startHideChat();
}, false);
});

View File

@@ -0,0 +1,103 @@
(function ($) {
$.fn.fakeTextbox = function () {
return this.each(function () {
var $me = $(this),
cursorTimer,
$tb = $('<input type="text" class="fake" />');
if ($me.data('ftbftw')) {
console.log('already initialized');
return;
}
$me.data('ftbftw', 1);
$tb.insertAfter($me);
function appendCaret(toHere, position, selStart, selEnd) {
if (position === selStart) {
toHere += "</div><div class='caret'>";
}
if (position === selEnd) {
toHere += "</div><div>";
}
return toHere;
}
function syncTextbox() {
var tbVal = $tb.val().replace('<', '&lt;');
var tbLen = tbVal.length;
var selStart = $tb.get(0).selectionStart;
var selEnd = $tb.get(0).selectionEnd;
var newOut = '<div>';
for (var i = 0; i < tbLen; i++) {
newOut = appendCaret(newOut, i, selStart, selEnd);
newOut += tbVal[i];
}
$me.html(colorize(appendCaret(newOut, i, selStart, selEnd) + '</div>'));
if (selStart != selEnd) {
$('.caret', $me).addClass('selection');
}
}
$me.click(function () {
$tb.focus();
});
$tb.bind("change keypress keyup", function()
{
setTimeout(syncTextbox, 1); //
})
.blur(function () {
clearInterval(cursorTimer);
cursorTimer = null;
var $cursor = $('.caret', $me);
$cursor.css({
visibility: 'visible'
});
$me.removeClass('focused');
}).focus(function () {
if (!cursorTimer) {
$me.addClass('focused');
cursorTimer = window.setInterval(function () {
var $cursor = $('.caret', $me);
if ($cursor.hasClass('selection') || $cursor.css('visibility') === 'hidden') {
$cursor.css({
visibility: 'visible'
});
} else {
$cursor.css({
visibility: 'hidden'
});
}
}, 500);
}
});
this.doFocus = function()
{
$tb.focus();
};
this.onPress = function(f)
{
$tb.bind('keypress', f);
};
this.getTextBox = function()
{
return $tb;
};
syncTextbox();
if ($me.hasClass('initFocus')) {
$tb.focus();
}
});
};
}(jQuery));

View File

@@ -0,0 +1,2 @@
client_script 'client.lua'
server_script 'server.lua'

View File

@@ -0,0 +1,11 @@
Citizen.CreateThread(function()
while true do
Wait(0)
if NetworkIsSessionStarted() then
TriggerServerEvent('hardcap:playerActivated')
return
end
end
end)

View File

@@ -0,0 +1,29 @@
local playerCount = 0
local list = {}
RegisterServerEvent('hardcap:playerActivated')
AddEventHandler('hardcap:playerActivated', function()
if not list[source] then
playerCount = playerCount + 1
list[source] = true
end
end)
AddEventHandler('playerDropped', function()
if list[source] then
playerCount = playerCount - 1
list[source] = nil
end
end)
AddEventHandler('playerConnecting', function(name, setReason)
print('Connecting: ' .. name)
if playerCount >= 24 then
print('Full. :(')
setReason('This server is full (past 24 players).')
CancelEvent()
end
end)

View File

@@ -0,0 +1,2 @@
client_script 'rconlog_client.lua'
server_script 'rconlog_server.lua'

View File

@@ -0,0 +1,25 @@
RegisterNetEvent('rlUpdateNames')
AddEventHandler('rlUpdateNames', function()
local names = {}
for i = 0, 31 do
if NetworkIsPlayerActive(i) then
names[GetPlayerServerId(i)] = { id = i, name = GetPlayerName(i) }
end
end
TriggerServerEvent('rlUpdateNamesResult', names)
end)
Citizen.CreateThread(function()
while true do
Wait(0)
if NetworkIsSessionStarted() then
TriggerServerEvent('rlPlayerActivated')
return
end
end
end)

View File

@@ -0,0 +1,80 @@
RconLog({ msgType = 'serverStart', hostname = 'lovely', maxplayers = 32 })
RegisterServerEvent('rlPlayerActivated')
local names = {}
AddEventHandler('rlPlayerActivated', function()
RconLog({ msgType = 'playerActivated', netID = source, name = GetPlayerName(source), guid = GetPlayerIdentifiers(source)[1], ip = GetPlayerEP(source) })
names[source] = { name = GetPlayerName(source), id = source }
TriggerClientEvent('rlUpdateNames', GetHostId())
end)
RegisterServerEvent('rlUpdateNamesResult')
AddEventHandler('rlUpdateNamesResult', function(res)
if source ~= GetHostId() then
print('bad guy')
return
end
for id, data in pairs(res) do
if data then
if data.name then
if not names[id] then
names[id] = data
end
if names[id].name ~= data.name or names[id].id ~= data.id then
names[id] = data
RconLog({ msgType = 'playerRenamed', netID = id, name = data.name })
end
end
else
names[id] = nil
end
end
end)
AddEventHandler('playerDropped', function()
RconLog({ msgType = 'playerDropped', netID = source, name = GetPlayerName(source) })
names[source] = nil
end)
AddEventHandler('chatMessage', function(netID, name, message)
RconLog({ msgType = 'chatMessage', netID = netID, name = name, message = message, guid = GetPlayerIdentifiers(netID)[1] })
end)
AddEventHandler('rconCommand', function(commandName, args)
if commandName == 'status' then
for netid, data in pairs(names) do
local guid = GetPlayerIdentifiers(netid)
if guid and guid[1] and data then
local ping = GetPlayerPing(netid)
RconPrint(netid .. ' ' .. guid[1] .. ' ' .. data.name .. ' ' .. GetPlayerEP(netid) .. ' ' .. ping .. "\n")
end
end
CancelEvent()
elseif commandName:lower() == 'clientkick' then
local playerId = table.remove(args, 1)
local msg = table.concat(args, ' ')
DropPlayer(playerId, msg)
CancelEvent()
elseif commandName:lower() == 'tempbanclient' then
local playerId = table.remove(args, 1)
local msg = table.concat(args, ' ')
TempBanPlayer(playerId, msg)
CancelEvent()
end
end)

View File

@@ -0,0 +1,18 @@
description 'Scoreboard'
-- temporary!
ui_page 'html/scoreboard.html'
client_script 'scoreboard.lua'
files {
'html/scoreboard.html',
'html/style.css',
'html/reset.css',
'html/listener.js',
'html/res/futurastd-medium.css',
'html/res/futurastd-medium.eot',
'html/res/futurastd-medium.woff',
'html/res/futurastd-medium.ttf',
'html/res/futurastd-medium.svg',
}

View File

@@ -0,0 +1,17 @@
$(function()
{
window.addEventListener('message', function(event)
{
var item = event.data;
var buf = $('#wrap');
buf.find('table').append("<tr class=\"heading\"><th>ID</th><th>Name</th><th>Wanted level</th></tr>");
if (item.meta && item.meta == 'close')
{
document.getElementById("ptbl").innerHTML = "";
$('#wrap').hide();
return;
}
buf.find('table').append(item.text);
$('#wrap').show();
}, false);
});

View File

@@ -0,0 +1,8 @@
@font-face {
font-family: 'FuturaStdMedium';
src: url('futurastd-medium.eot');
src: url('futurastd-medium.eot') format('embedded-opentype'),
url('futurastd-medium.woff') format('woff'),
url('futurastd-medium.ttf') format('truetype'),
url('futurastd-medium.svg#FuturaStdMedium') format('svg');
}

View File

@@ -0,0 +1,913 @@
<?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>
<metadata>
Created by FontForge 20110222 at Mon Aug 4 15:25:24 2014
By Orthosie Webhosting
Copyright (c) 1987, 1991, 1993, 2002 Adobe Systems Incorporated. All Rights Reserved.
</metadata>
<defs>
<font id="FuturaStdMedium" horiz-adv-x="578" >
<font-face
font-family="FuturaStdMedium"
font-weight="500"
font-stretch="normal"
units-per-em="1000"
panose-1="2 11 5 2 2 2 4 2 3 3"
ascent="825"
descent="-175"
x-height="468"
cap-height="754"
bbox="-163 -268 1113 995"
underline-thickness="50"
underline-position="-50"
unicode-range="U+0020-FB02"
/>
<missing-glyph horiz-adv-x="500"
d="M0 0v700h500v-700h-500zM250 395l170 255h-340zM280 350l170 -255v510zM80 50h340l-170 255zM50 605v-510l170 255z" />
<glyph glyph-name="fi" unicode="fi" horiz-adv-x="512"
d="M430 468v-468h-90v468h90zM385 745q26 0 44 -18.5t18 -44.5q0 -25 -18 -43t-44 -18t-44 18t-18 43q0 26 18 44.5t44 18.5zM294 868v-91q-43 19 -60 19q-18 0 -31 -9.5t-19 -21.5t-9.5 -32.5t-4 -32t-0.5 -31.5v-201h124v-84h-124v-384h-90v384h-41v84h41v228
q0 184 151 184q33 0 63 -12z" />
<glyph glyph-name="fl" unicode="fl" horiz-adv-x="497"
d="M431 868v-868h-90v868h90zM294 868v-91q-43 19 -60 19q-18 0 -31 -9.5t-19 -21.5t-9.5 -32.5t-4 -32t-0.5 -31.5v-201h124v-84h-124v-384h-90v384h-41v84h41v228q0 184 151 184q33 0 63 -12z" />
<glyph glyph-name=".notdef" horiz-adv-x="500"
d="M0 0v700h500v-700h-500zM250 395l170 255h-340zM280 350l170 -255v510zM80 50h340l-170 255zM50 605v-510l170 255z" />
<glyph glyph-name=".null" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="333"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="289"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="321"
d="M161 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5zM116 174v580h90v-580h-90z" />
<glyph glyph-name="quotedbl" unicode="&#x22;" horiz-adv-x="439"
d="M90 754h98l-18 -328h-62zM251 754h98l-18 -328h-62z" />
<glyph glyph-name="numbersign" unicode="#"
d="M217 718h77l-36 -194h124l35 194h79l-35 -194h92v-80h-107l-27 -154h101v-80h-117l-38 -210h-76l37 210h-123l-40 -210h-75l37 210h-100v80h115l27 154h-105v80h119zM245 444l-27 -154h123l27 154h-123z" />
<glyph glyph-name="dollar" unicode="$"
d="M333 349v-271q46 10 75.5 49t29.5 87q0 80 -105 135zM283 770v90h50v-90q114 -11 171 -116l-79 -45q-29 55 -92 74v-235q90 -39 142.5 -92.5t52.5 -137.5q0 -82 -57.5 -152.5t-137.5 -81.5v-95h-50v95q-87 1 -153 62t-80 148l90 19q13 -66 46 -99.5t97 -41.5v300l-36 18
q-70 36 -107 76t-37 107q0 75 52.5 133t127.5 64zM283 472v211q-40 -6 -66.5 -35t-26.5 -68q0 -71 93 -108z" />
<glyph glyph-name="percent" unicode="%" horiz-adv-x="708"
d="M193 710q-47 0 -81.5 -33t-34.5 -79q0 -45 34.5 -78t81.5 -33t81.5 33t34.5 78q0 46 -34.5 79t-81.5 33zM552 770l45 -26l-440 -760l-46 25zM516 267q-47 0 -81.5 -33t-34.5 -79q0 -45 34.5 -78t81.5 -33t81.5 33t34.5 78q0 46 -34.5 79t-81.5 33zM193 770
q72 0 124 -50.5t52 -121.5t-52.5 -121t-123.5 -50t-123.5 50t-52.5 121t52 121.5t124 50.5zM516 327q72 0 124 -50.5t52 -121.5t-52.5 -121t-123.5 -50t-123.5 50t-52.5 121t52 121.5t124 50.5z" />
<glyph glyph-name="ampersand" unicode="&#x26;" horiz-adv-x="692"
d="M287 372l-9 -6q-1 -1 -20 -14t-24 -16.5t-21.5 -16.5t-23 -19.5t-18.5 -19.5t-16.5 -23t-9 -23.5t-4.5 -26.5q0 -54 43 -96.5t97 -42.5q33 0 67 17t55 35t51 48zM307 490l12 8q4 3 19.5 14.5t21.5 17t17.5 17t17 20t10 21.5t4.5 26q0 39 -24.5 60.5t-63.5 21.5
q-35 0 -59.5 -22.5t-24.5 -57.5q0 -18 8 -36.5t14.5 -28t22.5 -29.5zM592 0l-82 102q-100 -118 -226 -118q-96 0 -163.5 63t-67.5 159q0 65 33.5 109t98.5 91l47 34q-83 87 -83 165q0 76 49 120.5t125 44.5q72 0 123 -42.5t51 -114.5q0 -30 -11.5 -57.5t-34.5 -52t-42 -40.5
t-49 -38l157 -190l88 102l60 -62l-92 -108l135 -167h-116z" />
<glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="277"
d="M90 754h98l-18 -328h-62z" />
<glyph glyph-name="parenleft" unicode="(" horiz-adv-x="292"
d="M161 809l74 -55q-86 -180 -86 -446t86 -446l-74 -55q-52 103 -78 236.5t-26 264.5t26 265t78 236z" />
<glyph glyph-name="parenright" unicode=")" horiz-adv-x="292"
d="M57 754l74 55q52 -102 78 -236t26 -265t-26 -264.5t-78 -236.5l-74 55q86 180 86 446t-86 446z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="432"
d="M184 754h69v-95l81 48l35 -59l-85 -50l85 -50l-35 -58l-81 50v-96h-69v97l-87 -49l-34 57l85 49l-84 50l31 57l89 -49v98z" />
<glyph glyph-name="plus" unicode="+"
d="M246 512h86v-213h213v-86h-213v-213h-86v213h-213v86h213v213z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="289"
d="M164 119l78 -31l-133 -267l-55 23z" />
<glyph glyph-name="hyphen" unicode="-" horiz-adv-x="332"
d="M57 358h219v-75h-219v75z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="289"
d="M145 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="slash" unicode="/" horiz-adv-x="551"
d="M448 868l72 -32l-417 -962l-71 32z" />
<glyph glyph-name="zero" unicode="0"
d="M289 -16q-56 0 -101.5 26.5t-75 67.5t-49.5 94t-28.5 104.5t-8.5 100.5q0 63 14.5 127.5t43.5 126t82.5 100.5t122.5 39t122.5 -39t82.5 -100.5t43.5 -126t14.5 -127.5q0 -49 -8.5 -100.5t-28.5 -104.5t-49.5 -94t-75 -67.5t-101.5 -26.5zM289 690q-48 0 -83.5 -33.5
t-54 -84.5t-27 -100.5t-8.5 -93.5t8.5 -93t27 -100t54 -84t83.5 -33t83.5 33t54 84t27 100t8.5 93t-8.5 93.5t-27 100.5t-54 84.5t-83.5 33.5z" />
<glyph glyph-name="one" unicode="1"
d="M254 668h-131l52 86h169v-754h-90v668z" />
<glyph glyph-name="two" unicode="2"
d="M228 86h304v-86h-487l330 405q67 82 67 135q0 59 -44.5 101.5t-103.5 42.5q-57 0 -99 -40.5t-46 -97.5h-94q11 102 74.5 163t164.5 61q98 0 168 -64.5t70 -161.5q0 -86 -56 -155z" />
<glyph glyph-name="three" unicode="3"
d="M275 360v78q148 0 148 121q0 57 -37 93t-94 36q-51 0 -84 -29.5t-41 -78.5h-93q13 93 70.5 141.5t150.5 48.5t155.5 -55.5t62.5 -147.5q0 -116 -96 -170q107 -51 107 -187q0 -103 -68.5 -164.5t-172.5 -61.5q-92 0 -159 56t-71 146h91q7 -54 48.5 -87t97.5 -33
q62 0 103 43t41 105q0 71 -44.5 111t-114.5 35z" />
<glyph glyph-name="four" unicode="4"
d="M469 192h86v-82h-86v-110h-90v110h-372l462 676v-594zM379 192v311h-2l-212 -311h214z" />
<glyph glyph-name="five" unicode="5"
d="M528 668h-237l-47 -155l53 3q106 0 174 -78t68 -186q0 -118 -80.5 -193t-198.5 -75q-71 0 -134.5 35.5t-95.5 96.5l70 66q17 -47 66.5 -79.5t100.5 -32.5q76 0 129 54.5t53 130.5q0 73 -53.5 126t-126.5 53q-40 0 -78.5 -18t-62.5 -49h-18l116 387h302v-86z" />
<glyph glyph-name="six" unicode="6"
d="M379 770l68 -46l-201 -272l2 -2q36 18 74 18q91 0 154.5 -71.5t63.5 -164.5q0 -103 -73 -175.5t-176 -72.5q-99 0 -175 71.5t-76 169.5q0 89 82 199zM290 68q64 0 112 46t48 108q0 68 -49 115t-111 47t-111 -48t-49 -109q0 -65 47.5 -112t112.5 -47z" />
<glyph glyph-name="seven" unicode="7"
d="M437 668h-390v86h543l-470 -770l-73 45z" />
<glyph glyph-name="eight" unicode="8"
d="M289 352q-58 0 -102 -41.5t-44 -100.5q0 -56 45 -99t101 -43t101 43t45 99q0 59 -44 100.5t-102 41.5zM53 210q0 63 31 112t88 69q-99 56 -99 169q0 91 62.5 150.5t153.5 59.5t153.5 -59.5t62.5 -150.5q0 -113 -99 -169q57 -20 88 -69t31 -112q0 -102 -68.5 -164
t-167.5 -62t-167.5 62t-68.5 164zM289 690q-51 0 -89.5 -38t-38.5 -92q0 -45 40.5 -86.5t87.5 -41.5t87.5 41.5t40.5 86.5q0 54 -38.5 92t-89.5 38z" />
<glyph glyph-name="nine" unicode="9"
d="M213 -16l-68 47l201 271l-2 2q-28 -14 -73 -14q-92 0 -155.5 70t-63.5 162q0 103 73 175.5t176 72.5q99 0 175 -71.5t76 -169.5q0 -89 -82 -199zM302 370q70 0 115 47t45 111q0 61 -46.5 109.5t-107.5 48.5q-68 0 -117 -47t-49 -111q0 -65 49.5 -111.5t110.5 -46.5z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="289"
d="M145 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5zM145 482q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="semicolon" unicode=";" horiz-adv-x="289"
d="M156 119l78 -31l-133 -267l-55 23zM192 482q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="less" unicode="&#x3c;"
d="M545 498v-94l-384 -148l384 -148v-94l-512 207v70z" />
<glyph glyph-name="equal" unicode="="
d="M33 385h512v-86h-512v86zM33 213h512v-86h-512v86z" />
<glyph glyph-name="greater" unicode="&#x3e;"
d="M33 404v94l512 -207v-70l-512 -207v94l384 148z" />
<glyph glyph-name="question" unicode="?" horiz-adv-x="453"
d="M301 345h91q3 -64 -47 -112.5t-115 -48.5q-67 0 -114 46.5t-47 113.5q0 64 33 94.5t93 52.5q5 2 20 7.5t21 7.5t19 7.5t18 9t15 10t14 12.5t9 14t7 17t2 20q0 41 -26 65t-66 24q-35 0 -60.5 -25.5t-25.5 -60.5q0 -10 6 -32h-94l-2 33q-4 71 51 120.5t128 49.5
q76 0 128 -51t52 -126q0 -78 -54 -124q-31 -27 -124 -56q-73 -22 -73 -73q0 -30 20 -51t50 -21q32 0 52 22.5t19 54.5zM230 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="at" unicode="@" horiz-adv-x="800"
d="M503 372q7 60 -21 93.5t-81 33.5q-58 0 -95 -47t-37 -106q0 -46 27.5 -80t72.5 -34q62 0 94 39.5t40 100.5zM528 506l14 62h71l-50 -257q-9 -25 -8.5 -55.5t22.5 -30.5q36 0 72 60t36 132q0 124 -76.5 198.5t-193.5 74.5q-126 0 -212.5 -91.5t-86.5 -221.5
q0 -135 92.5 -224t223.5 -89q129 0 186 48l75 -60q-64 -34 -122 -51t-147 -17q-163 0 -275.5 112t-112.5 281q0 167 110.5 280t271.5 113q139 0 235 -87q112 -97 112 -230q0 -131 -62 -212q-34 -45 -75 -67t-79 -20q-44 2 -54 62q-62 -62 -136 -62q-67 0 -117.5 54.5
t-50.5 130.5q0 95 57 166.5t147 71.5q78 0 133 -71z" />
<glyph glyph-name="A" unicode="A" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268z" />
<glyph glyph-name="B" unicode="B" horiz-adv-x="535"
d="M158 670v-250h24q78 0 120 26t42 100q0 73 -41.5 98.5t-118.5 25.5h-26zM158 345v-261h72q178 0 178 133q0 38 -17.5 64.5t-47.5 39.5t-61 18.5t-66 5.5h-58zM64 0v754h92q58 0 104 -9t86.5 -30.5t63 -64t22.5 -103.5q0 -43 -22 -84.5t-59 -58.5v-2q65 -12 108 -67.5
t43 -123.5q0 -106 -76 -158.5t-186 -52.5h-176z" />
<glyph glyph-name="C" unicode="C" horiz-adv-x="661"
d="M621 719v-109q-83 74 -199 74q-125 0 -211.5 -90.5t-86.5 -217.5q0 -125 85.5 -215.5t210.5 -90.5q114 0 201 78v-111q-90 -53 -198 -53q-162 0 -277.5 113t-115.5 276q0 167 117 282t284 115q107 0 190 -51z" />
<glyph glyph-name="D" unicode="D" horiz-adv-x="665"
d="M64 0v754h156q183 0 303 -96.5t120 -276.5q0 -185 -119 -283t-307 -98h-153zM158 668v-582h33q76 0 138 15t112.5 48t79 91t28.5 137q0 80 -28.5 138t-79.5 90.5t-112.5 47.5t-137.5 15h-33z" />
<glyph glyph-name="E" unicode="E" horiz-adv-x="521"
d="M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z" />
<glyph glyph-name="F" unicode="F" horiz-adv-x="474"
d="M436 668h-271v-212h262v-86h-262v-370h-94v754h365v-86z" />
<glyph glyph-name="G" unicode="G" horiz-adv-x="780"
d="M460 380h299v-30q0 -157 -100 -261.5t-257 -104.5t-269 116.5t-112 274.5q0 163 114.5 279t276.5 116q89 0 170.5 -38.5t136.5 -107.5l-66 -63q-41 56 -105 89.5t-132 33.5q-126 0 -213.5 -89.5t-87.5 -216.5q0 -121 86.5 -214.5t206.5 -93.5q90 0 167 67t80 157h-195v86
z" />
<glyph glyph-name="H" unicode="H" horiz-adv-x="675"
d="M158 450h359v304h94v-754h-94v362h-359v-362h-94v754h94v-304z" />
<glyph glyph-name="I" unicode="I" horiz-adv-x="232"
d="M163 754v-754h-94v754h94z" />
<glyph glyph-name="J" unicode="J" horiz-adv-x="362"
d="M209 754h94v-479q0 -61 -7.5 -107.5t-28 -91t-63 -68.5t-105.5 -24t-118 33l47 80q33 -25 75 -25q22 0 39.5 8t28.5 18t19 30t11.5 34t5.5 40t2 37v36v479z" />
<glyph glyph-name="K" unicode="K" horiz-adv-x="600"
d="M166 427l320 327h123l-339 -339l345 -415h-127l-284 351l-38 -36v-315h-94v754h94v-327z" />
<glyph glyph-name="L" unicode="L" horiz-adv-x="385"
d="M166 754v-668h229v-86h-323v754h94z" />
<glyph glyph-name="M" unicode="M" horiz-adv-x="851"
d="M426 -16l-226 514h-2l-88 -498h-97l154 786l259 -594l259 594l154 -786h-97l-88 498h-2z" />
<glyph glyph-name="N" unicode="N" horiz-adv-x="785"
d="M63 0v790l566 -593v557h94v-785l-566 593v-562h-94z" />
<glyph glyph-name="O" unicode="O" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5z" />
<glyph glyph-name="P" unicode="P" horiz-adv-x="495"
d="M166 316v-316h-94v754h108q167 0 235.5 -54.5t68.5 -163.5q0 -112 -73.5 -166t-190.5 -54h-54zM166 670v-270h30q41 0 72.5 5t62.5 18.5t48 42.5t17 72q0 42 -18 70t-51 40.5t-64 17t-72 4.5h-25z" />
<glyph glyph-name="Q" unicode="Q" horiz-adv-x="828"
d="M808 -16h-114l-65 67q-97 -67 -215 -67q-165 0 -280 113t-115 280q0 162 116.5 277.5t278.5 115.5t278.5 -115.5t116.5 -277.5q0 -80 -31 -152.5t-87 -125.5zM508 284l119 -118q42 37 65 95.5t23 115.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216
q0 -128 89 -216.5t212 -88.5q82 0 150 43l-173 169h117z" />
<glyph glyph-name="R" unicode="R" horiz-adv-x="543"
d="M303 328l238 -328h-114l-222 319h-39v-319h-94v754h114q43 0 69.5 -1.5t64 -9.5t65.5 -24q46 -27 72.5 -76t26.5 -104q0 -82 -50 -141.5t-131 -69.5zM166 670v-273h30q41 0 72.5 5t62.5 18.5t48 42.5t17 72q0 135 -205 135h-25z" />
<glyph glyph-name="S" unicode="S" horiz-adv-x="537"
d="M482 656l-75 -45q-42 71 -121 71q-48 0 -87 -30t-39 -77q0 -68 105 -108l54 -21q90 -35 138.5 -87t48.5 -140q0 -102 -69.5 -168.5t-171.5 -66.5q-91 0 -156 59.5t-77 151.5l95 20q-1 -61 41.5 -102t104.5 -41q60 0 99.5 43.5t39.5 103.5q0 55 -34.5 86.5t-95.5 56.5
l-52 22q-77 33 -120.5 76t-43.5 115q0 88 66 141.5t156 53.5q130 0 194 -114z" />
<glyph glyph-name="T" unicode="T" horiz-adv-x="456"
d="M275 668v-668h-94v668h-179v86h452v-86h-179z" />
<glyph glyph-name="U" unicode="U" horiz-adv-x="669"
d="M59 754h94v-445q0 -237 182 -237t182 237v445h94v-477q0 -128 -74.5 -210.5t-201.5 -82.5t-201.5 82.5t-74.5 210.5v477z" />
<glyph glyph-name="V" unicode="V" horiz-adv-x="640"
d="M96 754l225 -558l224 558h103l-327 -794l-328 794h103z" />
<glyph glyph-name="W" unicode="W" horiz-adv-x="1027"
d="M90 754l211 -540l213 556l213 -556l211 540h102l-313 -784l-213 553l-213 -553l-313 784h102z" />
<glyph glyph-name="X" unicode="X" horiz-adv-x="574"
d="M237 395l-208 359h107l154 -275l164 275h107l-217 -359l229 -395h-105l-178 309l-185 -309h-105z" />
<glyph glyph-name="Y" unicode="Y" horiz-adv-x="573"
d="M240 328l-246 426h108l185 -322l185 322h108l-246 -426v-328h-94v328z" />
<glyph glyph-name="Z" unicode="Z" horiz-adv-x="552"
d="M162 86h382v-86h-535l382 668h-328v86h481z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="311"
d="M153 725v-834h98v-84h-190v1002h190v-84h-98z" />
<glyph glyph-name="backslash" unicode="\" horiz-adv-x="551"
d="M31 868h84l404 -868h-84z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="311"
d="M158 -109v834h-98v84h190v-1002h-190v84h98z" />
<glyph glyph-name="asciicircum" unicode="^"
d="M33 308l200 446h112l200 -446h-94l-162 362l-163 -362h-93z" />
<glyph glyph-name="underscore" unicode="_" horiz-adv-x="500"
d="M500 -75v-50h-500v50h500z" />
<glyph glyph-name="grave" unicode="`" horiz-adv-x="360"
d="M76 690l83 44l125 -166l-44 -27z" />
<glyph glyph-name="a" unicode="a" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90z" />
<glyph glyph-name="b" unicode="b" horiz-adv-x="556"
d="M288 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM55 0v868h90v-478h2q61 92 163 92q98 0 159 -72.5t61 -172.5q0 -106 -60 -179.5t-164 -73.5q-48 0 -89.5 24t-69.5 65h-2v-73h-90z" />
<glyph glyph-name="c" unicode="c" horiz-adv-x="441"
d="M406 451v-116q-55 63 -134 63q-65 0 -110.5 -49t-45.5 -115q0 -72 45.5 -119t116.5 -47q73 0 128 62v-115q-58 -31 -129 -31q-104 0 -177.5 71t-73.5 175q0 108 73.5 180t182.5 72q71 0 124 -31z" />
<glyph glyph-name="d" unicode="d" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM411 0v73h-2q-28 -41 -69.5 -65t-89.5 -24q-104 0 -164 73.5t-60 179.5q0 100 61 172.5t159 72.5q102 0 163 -92h2v478h90v-868h-90z" />
<glyph glyph-name="e" unicode="e" horiz-adv-x="488"
d="M473 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94t-126.5 -34q-105 0 -167.5 70t-62.5 176q0 112 59 182t169 70q107 0 163 -69.5t56 -179.5v-14zM121 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84z" />
<glyph glyph-name="f" unicode="f" horiz-adv-x="275"
d="M294 868v-91q-43 19 -60 19q-18 0 -31 -9.5t-19 -21.5t-9.5 -32.5t-4 -32t-0.5 -31.5v-201h124v-84h-124v-384h-90v384h-41v84h41v228q0 184 151 184q33 0 63 -12z" />
<glyph glyph-name="g" unicode="g" horiz-adv-x="555"
d="M263 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM500 468v-459q0 -133 -50 -205t-178 -72q-99 0 -162 57t-64 155h90q0 -62 38.5 -97t101.5 -35q77 0 105.5 45t28.5 127v89h-2q-28 -41 -69.5 -65
t-89.5 -24q-104 0 -164 73.5t-60 179.5q0 100 61 172.5t159 72.5q103 0 163 -94h2v80h90z" />
<glyph glyph-name="h" unicode="h" horiz-adv-x="523"
d="M62 868h90v-463h2q20 37 58.5 57t82.5 20q92 0 129 -54t37 -149v-279h-90v268q0 69 -19.5 101.5t-83.5 32.5q-28 0 -49 -7t-33 -23t-19.5 -30.5t-10.5 -41t-3.5 -41.5t-0.5 -44v-215h-90v868z" />
<glyph glyph-name="i" unicode="i" horiz-adv-x="254"
d="M172 468v-468h-90v468h90zM127 745q26 0 44 -18.5t18 -44.5q0 -25 -18 -43t-44 -18t-44 18t-18 43q0 26 18 44.5t44 18.5z" />
<glyph glyph-name="j" unicode="j" horiz-adv-x="254"
d="M172 468v-736h-90v736h90zM127 745q26 0 44 -18.5t18 -44.5q0 -25 -18 -43t-44 -18t-44 18t-18 43q0 26 18 44.5t44 18.5z" />
<glyph glyph-name="k" unicode="k" horiz-adv-x="462"
d="M158 868v-576l176 176h119l-200 -194l220 -274h-117l-167 213l-31 -31v-182h-90v868h90z" />
<glyph glyph-name="l" unicode="l" horiz-adv-x="222"
d="M156 868v-868h-90v868h90z" />
<glyph glyph-name="m" unicode="m" horiz-adv-x="767"
d="M149 468v-59h2q20 32 53.5 52.5t70.5 20.5q87 0 135 -83q22 38 61 60.5t83 22.5q155 0 155 -202v-280h-90v265q0 27 -2.5 47.5t-11 43t-27 34.5t-46.5 12t-47.5 -11.5t-30 -28t-16.5 -41.5t-7.5 -45t-1.5 -46v-230h-90v248q0 24 -1 40t-5.5 40t-13 38t-25.5 25t-41 11
q-34 0 -56.5 -15.5t-32 -44t-12.5 -53.5t-3 -59v-230h-90v468h90z" />
<glyph glyph-name="n" unicode="n" horiz-adv-x="523"
d="M152 468v-63h2q20 37 58.5 57t82.5 20q92 0 129 -54t37 -149v-279h-90v268q0 69 -19.5 101.5t-83.5 32.5q-28 0 -49 -7t-33 -23t-19.5 -30.5t-10.5 -41t-3.5 -41.5t-0.5 -44v-215h-90v468h90z" />
<glyph glyph-name="o" unicode="o" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48z" />
<glyph glyph-name="p" unicode="p" horiz-adv-x="556"
d="M288 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM145 468v-78h2q61 92 163 92q98 0 159 -72.5t61 -172.5q0 -106 -60 -179.5t-164 -73.5q-48 0 -89.5 24t-69.5 65h-2v-341h-90v736h90z" />
<glyph glyph-name="q" unicode="q" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-736h-90v341h-2q-28 -41 -69.5 -65t-89.5 -24q-104 0 -164 73.5t-60 179.5q0 100 61 172.5t159 72.5q102 0 163 -92h2v78h90z" />
<glyph glyph-name="r" unicode="r" horiz-adv-x="351"
d="M158 468v-76h3q17 42 50.5 66t77.5 24q38 0 74 -23l-41 -82q-22 19 -55 19q-35 0 -58 -14.5t-33.5 -41t-14 -52t-3.5 -58.5v-230h-90v468h90z" />
<glyph glyph-name="s" unicode="s" horiz-adv-x="384"
d="M323 400l-73 -39q-20 41 -60 41q-19 0 -34 -13.5t-15 -32.5q0 -9 2.5 -16.5t10 -14t13 -11.5t18 -11.5t19.5 -10t23.5 -10.5t22.5 -10q50 -23 79 -53t29 -80q0 -66 -47.5 -110.5t-113.5 -44.5q-53 0 -98.5 28.5t-63.5 76.5l77 35q33 -60 85 -60q29 0 50 18.5t21 47.5
t-33 51l-88 47q-46 25 -68 49.5t-22 68.5q0 57 40.5 96.5t97.5 39.5q88 0 128 -82z" />
<glyph glyph-name="t" unicode="t" horiz-adv-x="240"
d="M165 384v-384h-90v384h-49v84h49v179h90v-179h88v-84h-88z" />
<glyph glyph-name="u" unicode="u" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5t-149 57.5t-49 157.5v269z" />
<glyph glyph-name="v" unicode="v" horiz-adv-x="445"
d="M88 468l134 -292l135 292h101l-236 -484l-235 484h101z" />
<glyph glyph-name="w" unicode="w" horiz-adv-x="718"
d="M86 468l136 -298l138 324l137 -324l136 298h102l-238 -484l-137 313l-138 -313l-238 484h102z" />
<glyph glyph-name="x" unicode="x" horiz-adv-x="489"
d="M195 254l-168 214h106l111 -151l121 151h109l-172 -214l201 -254h-105l-154 190l-149 -190h-109z" />
<glyph glyph-name="y" unicode="y" horiz-adv-x="484"
d="M201 80l-214 388h105l158 -297l147 297h101l-379 -736h-102z" />
<glyph glyph-name="z" unicode="z" horiz-adv-x="495"
d="M177 84h304v-84h-479l317 384h-263v84h438z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="334"
d="M48 271v73q75 33 75 151v182q0 55 29.5 93.5t55.5 38.5h78v-84h-40q-15 0 -22 -10t-8 -20t-1 -32v-184q0 -52 -18 -93.5t-31.5 -55.5t-26.5 -23q8 -5 18 -15t24.5 -29.5t24 -53t9.5 -73.5v-184q0 -22 1 -32t8 -20t22 -10h40v-84h-78q-26 0 -55.5 38.5t-29.5 93.5v182
q0 118 -75 151z" />
<glyph glyph-name="bar" unicode="|" horiz-adv-x="570"
d="M328 786v-1000h-86v1000h86z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="334"
d="M286 344v-73q-75 -33 -75 -151v-182q0 -55 -29.5 -93.5t-55.5 -38.5h-78v84h40q15 0 22 10t8 20t1 32v184q0 40 9.5 73.5t24 53t24.5 29.5t18 15q-13 9 -26.5 23t-31.5 55.5t-18 93.5v184q0 22 -1 32t-8 20t-22 10h-40v84h78q26 0 55.5 -38.5t29.5 -93.5v-182
q0 -118 75 -151z" />
<glyph glyph-name="asciitilde" unicode="~"
d="M478 334l67 -50q-67 -122 -152 -122q-40 0 -115 51q-7 5 -21 14.5t-21 14.5t-17 11t-17.5 8.5t-13.5 2.5q-24 0 -45 -20t-47 -62l-63 45q22 32 30.5 43t30.5 35.5t44.5 34.5t47.5 10q55 0 122 -51q6 -5 18.5 -14.5t19 -14.5t15.5 -11t16.5 -8.5t14.5 -2.5q24 0 39.5 17
t39.5 57q5 8 7 12z" />
<glyph glyph-name="uni00A0" unicode="&#xa0;" horiz-adv-x="289"
/>
<glyph glyph-name="exclamdown" unicode="&#xa1;" horiz-adv-x="321"
d="M161 508q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5zM116 323h90v-581h-90v581z" />
<glyph glyph-name="cent" unicode="&#xa2;"
d="M356 704v-76q74 -4 122 -31v-115h-2q-47 61 -120 63v-328q73 10 122 62v-117q-50 -24 -105 -28l-17 -1v-85h-48v89q-91 14 -149.5 81t-58.5 159q0 94 58 164.5t150 84.5v78h48zM308 220v319q-51 -6 -85.5 -56t-34.5 -102q0 -56 33 -103t87 -58z" />
<glyph glyph-name="sterling" unicode="&#xa3;"
d="M90 -16l-79 40q31 54 65.5 82.5t88.5 30.5q30 100 -8 164h-129v58h100q-58 110 -58 180q0 95 75.5 163t171.5 68q105 0 170 -64.5t70 -169.5l-90 -34v28q0 63 -41.5 107.5t-104.5 44.5q-61 0 -111 -47.5t-50 -103.5q0 -24 8 -50t16.5 -42t24.5 -42.5t22 -37.5h148v-58
h-124q26 -84 0 -172l74 -26q6 -2 27.5 -11t37 -13.5t29.5 -4.5q19 0 36.5 13.5t26 26t20.5 34.5l75 -46q-23 -53 -62.5 -85.5t-93.5 -32.5q-48 0 -131 33q-79 32 -116 32q-62 0 -88 -65z" />
<glyph glyph-name="currency" unicode="&#xa4;"
d="M483 546l60 -60l-41 -44q42 -66 42 -142t-42 -142l41 -44l-60 -60l-46 44q-63 -48 -148 -48t-148 48l-46 -44l-60 60l41 44q-42 66 -42 142t42 142l-41 44l60 60l46 -44q63 48 148 48t148 -48zM289 130q72 0 123 50t52 120q1 74 -49 122t-126 48t-126 -48t-49 -122
q2 -70 52.5 -120t122.5 -50z" />
<glyph glyph-name="yen" unicode="&#xa5;"
d="M336 260v-260h-94v260h-236v58h236v10l-54 94h-182v58h148l-158 274h108l185 -322l185 322h108l-158 -274h148v-58h-181l-55 -94v-10h236v-58h-236z" />
<glyph glyph-name="brokenbar" unicode="&#xa6;" horiz-adv-x="570"
d="M328 161v-250h-86v250h86zM328 661v-250h-86v250h86z" />
<glyph glyph-name="section" unicode="&#xa7;"
d="M214 335l175 -87q27 17 43.5 46t16.5 59q0 32 -19.5 51t-56.5 37l-184 93q-27 -17 -43.5 -46t-16.5 -60q0 -18 6.5 -32.5t22 -26t25.5 -18t31 -16.5zM310 192l-141 69q-34 17 -51.5 27.5t-38.5 29.5t-30 43t-9 57q0 90 96 162q-44 50 -44 111q0 75 57.5 126t133.5 51
q80 0 137 -45t62 -123h-87q-2 41 -35.5 65t-76.5 24q-42 0 -71.5 -29t-29.5 -71q0 -36 22.5 -59t62.5 -42l133 -67q31 -16 49 -26.5t42 -29t35.5 -42t11.5 -51.5q0 -49 -24.5 -94t-64.5 -75q53 -50 53 -122q0 -86 -63 -139.5t-150 -53.5q-99 0 -162.5 58t-63.5 157v15h89
q-2 -62 36 -105t100 -43q49 0 86.5 32t37.5 81q0 21 -8.5 38t-26.5 31t-30 21t-37 19z" />
<glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="470"
d="M130 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5zM341 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="800"
d="M400 -16q-165 0 -279.5 114.5t-114.5 278.5t114.5 278.5t279.5 114.5t279.5 -114.5t114.5 -278.5t-114.5 -278.5t-279.5 -114.5zM400 706q-136 0 -233 -95.5t-97 -233.5t97 -233.5t233 -95.5t233 95.5t97 233.5t-97 233.5t-233 95.5zM600 458h-61q-9 41 -42 63t-83 22
q-76 0 -114.5 -47.5t-38.5 -113.5q0 -72 41 -118t114 -46q102 0 123 89h61q-9 -69 -61.5 -111t-122.5 -42q-98 0 -158.5 65t-60.5 161q0 100 59 163.5t159 63.5q71 0 121.5 -40t63.5 -109z" />
<glyph glyph-name="ordfeminine" unicode="&#xaa;" horiz-adv-x="334"
d="M167 519q46 0 72.5 29.5t26.5 72.5t-26.5 72t-72.5 29q-43 0 -69.5 -30t-26.5 -71q0 -42 26 -72t70 -30zM322 761v-280h-59v43h-2q-39 -53 -103 -53q-67 0 -106.5 44t-39.5 108q0 60 40 103.5t104 43.5t106 -55h1v46h59z" />
<glyph glyph-name="guillemotleft" unicode="&#xab;" horiz-adv-x="523"
d="M311 320l149 -191l-56 -41l-182 232l182 240l56 -41zM119 320l149 -191l-56 -41l-182 232l182 240l56 -41z" />
<glyph glyph-name="logicalnot" unicode="&#xac;"
d="M459 115v184h-426v86h512v-270h-86z" />
<glyph glyph-name="uni00AD" unicode="&#xad;" horiz-adv-x="332"
d="M57 358h219v-75h-219v75z" />
<glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="800"
d="M400 -16q-165 0 -279.5 114.5t-114.5 278.5t114.5 278.5t279.5 114.5t279.5 -114.5t114.5 -278.5t-114.5 -278.5t-279.5 -114.5zM400 706q-136 0 -233 -95.5t-97 -233.5t97 -233.5t233 -95.5t233 95.5t97 233.5t-97 233.5t-233 95.5zM468 357l112 -204h-73l-113 204h-82
v-204h-64v442h186q152 0 152 -117q0 -60 -34 -89.5t-84 -31.5zM422 531h-110v-110h68q7 0 26.5 -0.5t28.5 0t25.5 1.5t25 4t18.5 8.5t14 15t4 21.5q0 20 -7.5 33t-23 18.5t-30.5 7t-39 1.5z" />
<glyph glyph-name="macron" unicode="&#xaf;" horiz-adv-x="500"
d="M70 694h361v-68h-361v68z" />
<glyph glyph-name="degree" unicode="&#xb0;" horiz-adv-x="400"
d="M350 620q0 -62 -44 -106t-106 -44t-106 44t-44 106q-1 62 43.5 106t106.5 44t106 -44t44 -106zM199 720q-42 0 -71 -29t-28 -71q0 -43 28.5 -71.5t71.5 -28.5q42 0 71 28.5t29 71.5q0 42 -29 71t-72 29z" />
<glyph glyph-name="plusminus" unicode="&#xb1;"
d="M33 0v86h512v-86h-512zM246 562h86v-173h213v-86h-213v-173h-86v173h-213v86h213v173z" />
<glyph glyph-name="twosuperior" unicode="&#xb2;" horiz-adv-x="346"
d="M144 360h188v-58h-317l215 243q38 44 38 81q0 33 -29 56.5t-62 23.5q-37 0 -61.5 -21t-26.5 -55h-67q7 61 48 97.5t107 36.5q63 0 109 -39t46 -97q0 -55 -33 -93z" />
<glyph glyph-name="threesuperior" unicode="&#xb3;" horiz-adv-x="346"
d="M163 518v58q43 0 68.5 17t25.5 50t-25 51t-58 18q-32 0 -53.5 -14t-21.5 -42h-67q9 55 46 84.5t98 29.5t103 -33.5t42 -88.5q0 -67 -66 -102q73 -32 73 -112q0 -62 -46 -99t-114 -37q-59 0 -102.5 33.5t-46.5 88.5h64q10 -64 90 -64q37 0 64 22t27 58q0 38 -29 61t-72 21
z" />
<glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="360"
d="M201 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="mu" unicode="&#xb5;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5q-56 0 -108 44v-296h-90v736z" />
<glyph glyph-name="paragraph" unicode="&#xb6;"
d="M538 754v-84h-61v-823h-84v823h-62v-823h-84v436q-86 0 -142.5 57t-63.5 157q-7 95 56.5 176t158.5 81h282z" />
<glyph glyph-name="periodcentered" unicode="&#xb7;" horiz-adv-x="289"
d="M145 314q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="cedilla" unicode="&#xb8;" horiz-adv-x="330"
d="M244 -46l-105 -135l-53 27l87 137z" />
<glyph glyph-name="onesuperior" unicode="&#xb9;" horiz-adv-x="346"
d="M151 696h-86l34 58h116v-452h-64v394z" />
<glyph glyph-name="ordmasculine" unicode="&#xba;" horiz-adv-x="324"
d="M162 770q68 0 115.5 -43t47.5 -107q0 -63 -47.5 -106t-115.5 -43t-115 43t-47 106q0 64 47 107t115 43zM162 718q-43 0 -73 -28.5t-30 -69.5q0 -39 30 -68t73 -29t73.5 29t30.5 68q0 41 -30.5 69.5t-73.5 28.5z" />
<glyph glyph-name="guillemotright" unicode="&#xbb;" horiz-adv-x="523"
d="M63 129l149 191l-149 199l56 41l182 -240l-182 -232zM255 129l149 191l-149 199l56 41l182 -240l-182 -232z" />
<glyph glyph-name="onequarter" unicode="&#xbc;" horiz-adv-x="867"
d="M778 124h49v-58h-49v-66h-64v66h-243l307 407v-349zM714 124v164h-3l-123 -164h126zM126 696h-86l34 58h116v-452h-64v394zM631 770l51 -26l-440 -760l-51 28z" />
<glyph glyph-name="onehalf" unicode="&#xbd;" horiz-adv-x="867"
d="M126 302v394h-86l34 58h116v-452h-64zM639 58h188v-58h-317l215 243q38 44 38 81q0 33 -29 56.5t-62 23.5q-37 0 -61.5 -21t-26.5 -55h-67q7 61 48 97.5t107 36.5q63 0 109 -39t46 -97q0 -55 -33 -93zM579 770l51 -26l-440 -760l-51 28z" />
<glyph glyph-name="threequarters" unicode="&#xbe;" horiz-adv-x="867"
d="M778 124h49v-58h-49v-66h-64v66h-243l307 407v-349zM714 124v164h-3l-123 -164h126zM184 518v58q43 0 68.5 17t25.5 50t-25 51t-58 18q-32 0 -53.5 -14t-21.5 -42h-67q9 55 46 84.5t98 29.5t103 -33.5t42 -88.5q0 -67 -66 -102q73 -32 73 -112q0 -62 -46 -99t-114 -37
q-59 0 -102.5 33.5t-46.5 88.5h64q10 -64 90 -64q37 0 64 22t27 58q0 38 -29 61t-72 21zM687 770l51 -26l-440 -760l-51 28z" />
<glyph glyph-name="questiondown" unicode="&#xbf;" horiz-adv-x="453"
d="M152 157h-91q-3 64 47 112.5t115 48.5q67 0 114 -46.5t47 -113.5q0 -64 -33 -94.5t-93 -52.5q-5 -2 -20 -7.5t-21 -7.5t-19 -7.5t-18 -9t-15 -10t-14 -12.5t-9 -14t-7 -17t-2 -20q0 -41 26 -65t66 -24q35 0 60.5 25.5t25.5 60.5q0 10 -6 32h94l2 -33q4 -71 -51 -120.5
t-128 -49.5q-76 0 -128 51t-52 126q0 78 54 124q31 27 124 56q73 22 73 73q0 30 -20 51t-50 21q-32 0 -52 -22.5t-19 -54.5zM223 508q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="Agrave" unicode="&#xc0;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM208 951l83 44l125 -166l-44 -27z" />
<glyph glyph-name="Aacute" unicode="&#xc1;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM413 995l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="Acircumflex" unicode="&#xc2;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM192 850l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="Atilde" unicode="&#xc3;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM208 834l-47 40l3 5q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="Adieresis" unicode="&#xc4;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM247 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5zM458 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43
t18 42.5t43 17.5z" />
<glyph glyph-name="Aring" unicode="&#xc5;" horiz-adv-x="703"
d="M525 189h-346l-86 -189h-101l360 786l360 -786h-101zM486 275l-134 305l-134 -305h268zM352 985q38 0 64.5 -26.5t26.5 -64.5t-26.5 -64t-64.5 -26t-64 26t-26 64t26.5 64.5t63.5 26.5zM352 849q19 0 32.5 13t13.5 32t-13.5 32.5t-32.5 13.5q-18 0 -31.5 -13.5
t-13.5 -32.5t13.5 -32t31.5 -13z" />
<glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="997"
d="M532 189h-343l-86 -189h-103l362 754h330l38 -86h-309l91 -211h301l40 -86h-302l121 -285h311l38 -86h-406zM497 275l-130 292l-138 -292h268z" />
<glyph glyph-name="Ccedilla" unicode="&#xc7;" horiz-adv-x="661"
d="M621 719v-109q-83 74 -199 74q-125 0 -211.5 -90.5t-86.5 -217.5q0 -125 85.5 -215.5t210.5 -90.5q114 0 201 78v-111q-90 -53 -198 -53q-162 0 -277.5 113t-115.5 276q0 167 117 282t284 115q107 0 190 -51zM410 -46l-105 -135l-53 27l87 137z" />
<glyph glyph-name="Egrave" unicode="&#xc8;" horiz-adv-x="521"
d="M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zM137 951l83 44l125 -166l-44 -27z" />
<glyph glyph-name="Eacute" unicode="&#xc9;" horiz-adv-x="521"
d="M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zM322 995l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="Ecircumflex" unicode="&#xca;" horiz-adv-x="521"
d="M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zM113 850l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="Edieresis" unicode="&#xcb;" horiz-adv-x="521"
d="M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zM168 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43t18 42.5t43 17.5zM379 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5z" />
<glyph glyph-name="Igrave" unicode="&#xcc;" horiz-adv-x="232"
d="M163 754v-754h-94v754h94zM-18 951l83 44l125 -166l-44 -27z" />
<glyph glyph-name="Iacute" unicode="&#xcd;" horiz-adv-x="232"
d="M163 754v-754h-94v754h94zM167 995l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="Icircumflex" unicode="&#xce;" horiz-adv-x="232"
d="M163 754v-754h-94v754h94zM-44 850l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="Idieresis" unicode="&#xcf;" horiz-adv-x="232"
d="M163 754v-754h-94v754h94zM11 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5zM222 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43t18 42.5t43 17.5z" />
<glyph glyph-name="Eth" unicode="&#xd0;" horiz-adv-x="665"
d="M64 442v312h156q183 0 303 -96.5t120 -276.5q0 -185 -119 -283t-307 -98h-153v362h-64v80h64zM158 668v-226h134v-80h-134v-276h33q76 0 138 15t112.5 48t79 91t28.5 137q0 80 -28.5 138t-79.5 90.5t-112.5 47.5t-137.5 15h-33z" />
<glyph glyph-name="Ntilde" unicode="&#xd1;" horiz-adv-x="785"
d="M63 0v790l566 -593v557h94v-785l-566 593v-562h-94zM249 834l-47 40l3 5q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="Ograve" unicode="&#xd2;" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5zM280 951l83 44l125 -166
l-44 -27z" />
<glyph glyph-name="Oacute" unicode="&#xd3;" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5zM465 995l83 -44l-164 -149
l-44 27z" />
<glyph glyph-name="Ocircumflex" unicode="&#xd4;" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5zM254 850l159 145l161 -145
l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="Otilde" unicode="&#xd5;" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5zM270 834l-47 40l3 5
q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="Odieresis" unicode="&#xd6;" horiz-adv-x="828"
d="M414 770q162 0 278.5 -115.5t116.5 -277.5q0 -167 -115 -280t-280 -113t-280 113t-115 280q0 162 116.5 277.5t278.5 115.5zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89t-85.5 -216q0 -128 89 -216.5t212 -88.5zM309 955q25 0 42.5 -17.5
t17.5 -42.5t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5zM520 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43t18 42.5t43 17.5z" />
<glyph glyph-name="multiply" unicode="&#xd7;"
d="M33 451l60 61l196 -195l196 195l60 -61l-195 -195l195 -195l-60 -61l-196 195l-196 -195l-60 61l195 195z" />
<glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="828"
d="M659 557l-428 -422q81 -63 183 -63q123 0 212 88.5t89 216.5q0 102 -56 180zM178 189l430 423q-80 70 -194 70q-130 0 -215.5 -89t-85.5 -216q0 -107 65 -188zM7 21l104 102q-92 108 -92 254q0 162 116.5 277.5t278.5 115.5q146 0 257 -96l96 95l54 -53l-98 -96
q86 -108 86 -243q0 -167 -115 -280t-280 -113q-141 0 -249 86l-104 -102z" />
<glyph glyph-name="Ugrave" unicode="&#xd9;" horiz-adv-x="669"
d="M59 754h94v-445q0 -237 182 -237t182 237v445h94v-477q0 -128 -74.5 -210.5t-201.5 -82.5t-201.5 82.5t-74.5 210.5v477zM201 951l83 44l125 -166l-44 -27z" />
<glyph glyph-name="Uacute" unicode="&#xda;" horiz-adv-x="669"
d="M59 754h94v-445q0 -237 182 -237t182 237v445h94v-477q0 -128 -74.5 -210.5t-201.5 -82.5t-201.5 82.5t-74.5 210.5v477zM386 995l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="Ucircumflex" unicode="&#xdb;" horiz-adv-x="669"
d="M59 754h94v-445q0 -237 182 -237t182 237v445h94v-477q0 -128 -74.5 -210.5t-201.5 -82.5t-201.5 82.5t-74.5 210.5v477zM175 850l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="Udieresis" unicode="&#xdc;" horiz-adv-x="669"
d="M59 754h94v-445q0 -237 182 -237t182 237v445h94v-477q0 -128 -74.5 -210.5t-201.5 -82.5t-201.5 82.5t-74.5 210.5v477zM230 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43t18 42.5t43 17.5zM441 955q25 0 42.5 -17.5t17.5 -42.5
t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5z" />
<glyph glyph-name="Yacute" unicode="&#xdd;" horiz-adv-x="573"
d="M240 328l-246 426h108l185 -322l185 322h108l-246 -426v-328h-94v328zM368 995l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="Thorn" unicode="&#xde;" horiz-adv-x="495"
d="M166 176v-176h-94v754h94v-140h14q167 0 235.5 -54.5t68.5 -163.5q0 -112 -73.5 -166t-190.5 -54h-54zM166 530v-270h30q41 0 72.5 5t62.5 18.5t48 42.5t17 72q0 42 -18 70t-51 40.5t-64 17t-72 4.5h-25z" />
<glyph glyph-name="germandbls" unicode="&#xdf;" horiz-adv-x="580"
d="M282 -16v84q78 0 136.5 56t58.5 134q0 84 -54.5 131.5t-140.5 53.5v88q57 -1 96 39.5t39 98.5q0 55 -38 91t-92 36q-27 0 -48.5 -9t-35 -20.5t-22.5 -34.5t-13.5 -38.5t-7 -46.5t-2.5 -43.5v-44.5v-559h-90v386h-40v84h40v148q0 262 222 262q93 0 155 -61t62 -155
q0 -111 -96 -167q72 -23 114 -91.5t42 -147.5q0 -117 -84.5 -198t-200.5 -76z" />
<glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM159 690l83 44l125 -166
l-44 -27z" />
<glyph glyph-name="aacute" unicode="&#xe1;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM339 734l83 -44
l-164 -149l-44 27z" />
<glyph glyph-name="acircumflex" unicode="&#xe2;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM118 589l159 145
l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM134 573l-47 40l3 5
q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="adieresis" unicode="&#xe4;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM173 694
q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5zM384 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="aring" unicode="&#xe5;" horiz-adv-x="556"
d="M264 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50zM501 468v-468h-90v73h-2q-60 -89 -159 -89q-103 0 -163.5 73.5t-60.5 179.5q0 100 61 172.5t160 72.5q101 0 162 -92h2v78h90zM278 734
q38 0 64.5 -26.5t26.5 -64.5t-26.5 -64t-64.5 -26t-64 26.5t-26 63.5q0 38 26.5 64.5t63.5 26.5zM278 598q19 0 32.5 13t13.5 32t-13.5 32.5t-32.5 13.5q-18 0 -31.5 -13.5t-13.5 -32.5t13.5 -32t31.5 -13z" />
<glyph glyph-name="ae" unicode="&#xe6;" horiz-adv-x="807"
d="M442 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM221 218q-41 0 -76 -20.5t-35 -58.5t36 -56.5t78 -18.5q43 0 79.5 19.5t36.5 58.5q0 38 -38 57t-81 19zM792 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94
t-126.5 -34q-105 0 -180 87q-28 -42 -76.5 -64.5t-102.5 -22.5q-76 0 -133 39.5t-57 113.5q0 73 51 115t126 42q90 0 142 -43v32q0 121 -123 121q-81 0 -128 -15v80q66 13 141 13q48 0 93.5 -19.5t66.5 -57.5q62 77 178 77q107 0 163 -69.5t56 -179.5v-14z" />
<glyph glyph-name="ccedilla" unicode="&#xe7;" horiz-adv-x="441"
d="M406 451v-116q-55 63 -134 63q-65 0 -110.5 -49t-45.5 -115q0 -72 45.5 -119t116.5 -47q73 0 128 62v-115q-58 -31 -129 -31q-104 0 -177.5 71t-73.5 175q0 108 73.5 180t182.5 72q71 0 124 -31zM300 -46l-105 -135l-53 27l87 137z" />
<glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="488"
d="M473 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94t-126.5 -34q-105 0 -167.5 70t-62.5 176q0 112 59 182t169 70q107 0 163 -69.5t56 -179.5v-14zM121 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM125 690l83 44
l125 -166l-44 -27z" />
<glyph glyph-name="eacute" unicode="&#xe9;" horiz-adv-x="488"
d="M473 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94t-126.5 -34q-105 0 -167.5 70t-62.5 176q0 112 59 182t169 70q107 0 163 -69.5t56 -179.5v-14zM121 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM305 734
l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="488"
d="M473 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94t-126.5 -34q-105 0 -167.5 70t-62.5 176q0 112 59 182t169 70q107 0 163 -69.5t56 -179.5v-14zM121 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM84 589
l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="488"
d="M473 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94t-126.5 -34q-105 0 -167.5 70t-62.5 176q0 112 59 182t169 70q107 0 163 -69.5t56 -179.5v-14zM121 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM139 694
q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5zM350 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="254"
d="M172 468v-468h-90v468h90zM-7 690l83 44l125 -166l-44 -27z" />
<glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="254"
d="M172 468v-468h-90v468h90zM178 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="254"
d="M172 468v-468h-90v468h90zM-33 589l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="idieresis" unicode="&#xef;" horiz-adv-x="254"
d="M172 468v-468h-90v468h90zM22 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5zM233 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="eth" unicode="&#xf0;" horiz-adv-x="540"
d="M270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM46 638l145 83q-54 60 -111 105l57 51q62 -43 129 -113l145 83l42 -55l-141 -81q91 -107 149.5 -229.5t58.5 -229.5q0 -124 -71 -196t-179 -72q-105 0 -177.5 72
t-72.5 177t72.5 177t177.5 72q10 0 19.5 -1t17 -2.5t15.5 -4t13 -4.5t12.5 -6t10 -5.5t10 -5.5t8.5 -5q-58 119 -139 220l-147 -84z" />
<glyph glyph-name="ntilde" unicode="&#xf1;" horiz-adv-x="523"
d="M152 468v-63h2q20 37 58.5 57t82.5 20q92 0 129 -54t37 -149v-279h-90v268q0 69 -19.5 101.5t-83.5 32.5q-28 0 -49 -7t-33 -23t-19.5 -30.5t-10.5 -41t-3.5 -41.5t-0.5 -44v-215h-90v468h90zM118 573l-47 40l3 5q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27
q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="ograve" unicode="&#xf2;" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM126 690l83 44l125 -166l-44 -27z" />
<glyph glyph-name="oacute" unicode="&#xf3;" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM331 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="ocircumflex" unicode="&#xf4;" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM110 589l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="otilde" unicode="&#xf5;" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM126 573l-47 40l3 5q17 24 29 38t33 26t46 12q41 0 89 -26
q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="odieresis" unicode="&#xf6;" horiz-adv-x="540"
d="M270 482q105 0 177.5 -72t72.5 -177t-72.5 -177t-177.5 -72t-177.5 72t-72.5 177t72.5 177t177.5 72zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM165 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18
t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5zM376 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="divide" unicode="&#xf7;"
d="M33 213v86h512v-86h-512zM289 124q26 0 44 -18.5t18 -44.5q0 -25 -18 -43t-44 -18t-44 18t-18 43q0 26 18 44.5t44 18.5zM289 512q26 0 44 -18.5t18 -44.5q0 -25 -18 -43t-44 -18t-44 18t-18 43q0 26 18 44.5t44 18.5z" />
<glyph glyph-name="oslash" unicode="&#xf8;" horiz-adv-x="540"
d="M139 141l223 225q-42 30 -92 30q-66 0 -113 -48t-47 -115q0 -50 29 -92zM405 319l-221 -223q38 -26 86 -26q66 0 113 48.5t47 114.5q0 49 -25 86zM8 9l67 67q-55 66 -55 157q0 105 72.5 177t177.5 72q87 0 155 -52l61 61l46 -43l-62 -63q50 -66 50 -152
q0 -105 -72.5 -177t-177.5 -72q-85 0 -149 48l-69 -70z" />
<glyph glyph-name="ugrave" unicode="&#xf9;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5t-149 57.5t-49 157.5v269zM112 690l83 44l125 -166l-44 -27z" />
<glyph glyph-name="uacute" unicode="&#xfa;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5t-149 57.5t-49 157.5v269zM317 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="ucircumflex" unicode="&#xfb;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5t-149 57.5t-49 157.5v269zM96 589l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="udieresis" unicode="&#xfc;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5t-149 57.5t-49 157.5v269zM151 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5zM362 694q25 0 42.5 -17.5
t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="yacute" unicode="&#xfd;" horiz-adv-x="484"
d="M201 80l-214 388h105l158 -297l147 297h101l-379 -736h-102zM323 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="thorn" unicode="&#xfe;" horiz-adv-x="556"
d="M145 868v-478h2q61 92 163 92q98 0 159 -72.5t61 -172.5q0 -106 -60 -179.5t-164 -73.5q-48 0 -89.5 24t-69.5 65h-2v-341h-90v1136h90zM288 64q71 0 111.5 49t40.5 121q0 71 -41 119.5t-111 48.5q-67 0 -107.5 -49.5t-40.5 -118.5q0 -70 40 -120t108 -50z" />
<glyph glyph-name="ydieresis" unicode="&#xff;" horiz-adv-x="484"
d="M201 80l-214 388h105l158 -297l147 297h101l-379 -736h-102zM147 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5zM358 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 17.5t-17.5 43.5q0 25 18 42.5
t43 17.5z" />
<glyph glyph-name="dotlessi" unicode="&#x131;" horiz-adv-x="254"
d="M172 468v-468h-90v468h90z" />
<glyph glyph-name="Lslash" unicode="&#x141;" horiz-adv-x="385"
d="M166 754v-288l118 83v-90l-118 -79v-294h229v-86h-323v322l-81 -58v91l81 54v345h94z" />
<glyph glyph-name="lslash" unicode="&#x142;" horiz-adv-x="255"
d="M82 0v412l-81 -55v81l81 55v375h90v-314l82 56v-82l-82 -55v-473h-90z" />
<glyph glyph-name="OE" unicode="&#x152;" horiz-adv-x="1143"
d="M718 0v126h-2q-51 -68 -130.5 -105.5t-171.5 -36.5q-165 0 -280 113t-115 280q0 162 116.5 277.5t278.5 115.5q90 -3 172 -41t130 -107h2v132h395v-86h-310v-211h301v-86h-301v-285h310v-86h-395zM414 72q123 0 212 88.5t89 216.5q0 127 -85.5 216t-215.5 89t-215.5 -89
t-85.5 -216q0 -128 89 -216.5t212 -88.5z" />
<glyph glyph-name="oe" unicode="&#x153;" horiz-adv-x="897"
d="M529 287h262q-8 54 -42 85.5t-87 31.5q-52 0 -88.5 -33t-44.5 -84zM270 396q-66 0 -113 -48t-47 -115q0 -66 47 -114.5t113 -48.5t113 48.5t47 114.5q0 67 -47 115t-113 48zM882 219h-357q1 -63 40 -109t101 -46q49 0 80.5 22.5t59.5 68.5l76 -43q-33 -60 -90.5 -94
t-126.5 -34q-60 -1 -113 26.5t-82 76.5q-33 -49 -87 -76.5t-113 -26.5q-105 0 -177.5 72t-72.5 177t72.5 177t177.5 72q58 -2 113 -30t87 -75q64 101 193 105q107 0 163 -69.5t56 -179.5v-14z" />
<glyph glyph-name="Scaron" unicode="&#x160;" horiz-adv-x="537"
d="M482 656l-75 -45q-42 71 -121 71q-48 0 -87 -30t-39 -77q0 -68 105 -108l54 -21q90 -35 138.5 -87t48.5 -140q0 -102 -69.5 -168.5t-171.5 -66.5q-91 0 -156 59.5t-77 151.5l95 20q-1 -61 41.5 -102t104.5 -41q60 0 99.5 43.5t39.5 103.5q0 55 -34.5 86.5t-95.5 56.5
l-52 22q-77 33 -120.5 76t-43.5 115q0 88 66 141.5t156 53.5q130 0 194 -114zM119 949l58 46l101 -96l102 96l59 -46l-161 -145z" />
<glyph glyph-name="scaron" unicode="&#x161;" horiz-adv-x="384"
d="M323 400l-73 -39q-20 41 -60 41q-19 0 -34 -13.5t-15 -32.5q0 -9 2.5 -16.5t10 -14t13 -11.5t18 -11.5t19.5 -10t23.5 -10.5t22.5 -10q50 -23 79 -53t29 -80q0 -66 -47.5 -110.5t-113.5 -44.5q-53 0 -98.5 28.5t-63.5 76.5l77 35q33 -60 85 -60q29 0 50 18.5t21 47.5
t-33 51l-88 47q-46 25 -68 49.5t-22 68.5q0 57 40.5 96.5t97.5 39.5q88 0 128 -82zM32 688l58 46l101 -96l102 96l59 -46l-161 -145z" />
<glyph glyph-name="Ydieresis" unicode="&#x178;" horiz-adv-x="573"
d="M240 328l-246 426h108l185 -322l185 322h108l-246 -426v-328h-94v328zM194 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18q-26 0 -43.5 18t-17.5 43t18 42.5t43 17.5zM405 955q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 18t-18 43t18 42.5t43 17.5z
" />
<glyph glyph-name="Zcaron" unicode="&#x17d;" horiz-adv-x="552"
d="M162 86h382v-86h-535l382 668h-328v86h481zM131 949l58 46l101 -96l102 96l59 -46l-161 -145z" />
<glyph glyph-name="zcaron" unicode="&#x17e;" horiz-adv-x="495"
d="M177 84h304v-84h-479l317 384h-263v84h438zM103 688l58 46l101 -96l102 96l59 -46l-161 -145z" />
<glyph glyph-name="florin" unicode="&#x192;"
d="M355 505h129l-9 -68h-131l-55 -303q-7 -42 -12.5 -67.5t-16 -59t-22 -53.5t-30 -42t-41.5 -34t-55.5 -19.5t-73.5 -7.5h-24l15 86h19q28 0 49.5 6.5t36.5 22t24.5 29t17 41.5t10.5 43t9 50l53 308h-65l9 68h70l21 124q17 100 60 153.5t137 53.5q33 0 60 -7l-16 -84
q-18 7 -41 7t-41 -8.5t-27.5 -18.5t-18 -32t-11.5 -34.5t-8 -40.5z" />
<glyph glyph-name="circumflex" unicode="&#x2c6;" horiz-adv-x="470"
d="M75 589l159 145l161 -145l-59 -46l-102 96l-101 -96z" />
<glyph glyph-name="caron" unicode="&#x2c7;" horiz-adv-x="472"
d="M76 688l58 46l101 -96l102 96l59 -46l-161 -145z" />
<glyph glyph-name="uni02C9" unicode="&#x2c9;" horiz-adv-x="500"
d="M70 694h361v-68h-361v68z" />
<glyph glyph-name="breve" unicode="&#x2d8;" horiz-adv-x="490"
d="M71 694h72q32 -75 102 -75q39 0 62.5 18.5t40.5 56.5h71q-11 -62 -60.5 -101.5t-113.5 -39.5q-63 0 -112.5 39.5t-61.5 101.5z" />
<glyph glyph-name="dotaccent" unicode="&#x2d9;" horiz-adv-x="360"
d="M181 694q25 0 42.5 -17.5t17.5 -42.5t-17.5 -43t-42.5 -18t-43 17.5t-18 43.5q0 25 18 42.5t43 17.5z" />
<glyph glyph-name="ring" unicode="&#x2da;" horiz-adv-x="360"
d="M180 734q38 0 64.5 -26.5t26.5 -64.5t-26.5 -64t-64.5 -26t-64 26.5t-26 63.5q0 38 26.5 64.5t63.5 26.5zM180 598q19 0 32.5 13t13.5 32t-13.5 32.5t-32.5 13.5q-18 0 -31.5 -13.5t-13.5 -32.5t13.5 -32t31.5 -13z" />
<glyph glyph-name="ogonek" unicode="&#x2db;" horiz-adv-x="340"
d="M165 -16h46v-2q-61 -41 -61 -85q0 -47 56 -47q30 0 50 13l-7 -58q-27 -17 -64 -17q-40 0 -70.5 22t-30.5 60q0 65 81 114z" />
<glyph glyph-name="tilde" unicode="&#x2dc;" horiz-adv-x="510"
d="M111 573l-47 40l3 5q17 24 29 38t33 26t46 12q41 0 89 -26q50 -27 72 -27q35 0 64 48l47 -39q-40 -82 -118 -82q-29 0 -83 26q-54 25 -78 25q-17 0 -32.5 -14t-24.5 -32z" />
<glyph glyph-name="hungarumlaut" unicode="&#x2dd;" horiz-adv-x="470"
d="M349 725l83 -44l-164 -149l-44 27zM163 734l83 -44l-164 -149l-44 27z" />
<glyph glyph-name="uni03A9" unicode="&#x3a9;" horiz-adv-x="745"
d="M204 70v3q-61 57 -100.5 144t-39.5 192q0 158 88.5 259t223.5 101q136 0 220 -105t84 -250q0 -109 -41 -198.5t-100 -142.5v-3h155v-70h-252v51q65 46 109 136t44 211q0 74 -23.5 140.5t-75.5 113t-121 46.5q-102 0 -164 -86.5t-62 -216.5q0 -114 44.5 -207.5
t107.5 -136.5v-51h-251v70h154z" />
<glyph glyph-name="uni03BC" unicode="&#x3bc;" horiz-adv-x="512"
d="M58 468h90v-259q0 -65 23.5 -103t84.5 -38t84.5 38t23.5 103v259h90v-269q0 -100 -49 -157.5t-149 -57.5q-56 0 -108 44v-296h-90v736z" />
<glyph glyph-name="pi" unicode="&#x3c0;" horiz-adv-x="598"
d="M570 491h-83v-333q0 -104 15 -158h-81q-17 31 -17 151v340h-185q-4 -114 -26 -265t-49 -226h-82q29 85 50 230.5t25 260.5q-79 0 -115 -13l-12 57q44 29 152 29h415z" />
<glyph glyph-name="endash" unicode="&#x2013;" horiz-adv-x="500"
d="M0 358h500v-75h-500v75z" />
<glyph glyph-name="emdash" unicode="&#x2014;" horiz-adv-x="1000"
d="M130 358h740v-75h-740v75z" />
<glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="277"
d="M139 472l-79 31l133 267l56 -23z" />
<glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="277"
d="M138 770l79 -31l-133 -267l-56 23z" />
<glyph glyph-name="quotesinglbase" unicode="&#x201a;" horiz-adv-x="277"
d="M164 119l78 -31l-133 -267l-55 23z" />
<glyph glyph-name="quotedblleft" unicode="&#x201c;" horiz-adv-x="439"
d="M305 472l-79 31l133 267l56 -23zM139 472l-79 31l133 267l56 -23z" />
<glyph glyph-name="quotedblright" unicode="&#x201d;" horiz-adv-x="439"
d="M134 770l79 -31l-133 -267l-56 23zM300 770l79 -31l-133 -267l-56 23z" />
<glyph glyph-name="quotedblbase" unicode="&#x201e;" horiz-adv-x="439"
d="M160 119l78 -31l-133 -267l-55 23zM326 119l78 -31l-133 -267l-55 23z" />
<glyph glyph-name="dagger" unicode="&#x2020;"
d="M244 868h90v-275h181v-86h-181v-595h-90v595h-181v86h181v275z" />
<glyph glyph-name="daggerdbl" unicode="&#x2021;"
d="M244 868h90v-239h181v-86h-181v-122h181v-86h-181v-422h-90v422h-181v86h181v122h-181v86h181v239z" />
<glyph glyph-name="bullet" unicode="&#x2022;"
d="M289 189q-78 0 -133 55t-55 133q-1 79 54 134t134 55t134 -55t55 -134q0 -78 -55.5 -133t-133.5 -55z" />
<glyph glyph-name="ellipsis" unicode="&#x2026;" horiz-adv-x="1000"
d="M500 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5zM834 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5zM166 100q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41
q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="perthousand" unicode="&#x2030;" horiz-adv-x="1110"
d="M198 710q-47 0 -81.5 -33t-34.5 -79q0 -45 34.5 -78t81.5 -33t81.5 33t34.5 78q0 46 -34.5 79t-81.5 33zM557 770l45 -26l-440 -760l-46 25zM521 267q-47 0 -81.5 -33t-34.5 -79q0 -45 34.5 -78t81.5 -33t81.5 33t34.5 78q0 46 -34.5 79t-81.5 33zM198 770
q72 0 124 -50.5t52 -121.5t-52.5 -121t-123.5 -50t-123.5 50t-52.5 121t52 121.5t124 50.5zM521 327q72 0 124 -50.5t52 -121.5t-52.5 -121t-123.5 -50t-123.5 50t-52.5 121t52 121.5t124 50.5zM913 327q72 0 124 -50.5t52 -121.5t-52.5 -121t-123.5 -50t-123.5 50
t-52.5 121t52 121.5t124 50.5zM913 267q-47 0 -81.5 -33t-34.5 -79q0 -45 34.5 -78t81.5 -33t81.5 33t34.5 78q0 46 -34.5 79t-81.5 33z" />
<glyph glyph-name="guilsinglleft" unicode="&#x2039;" horiz-adv-x="336"
d="M111 320l149 -191l-56 -41l-182 232l182 240l56 -41z" />
<glyph glyph-name="guilsinglright" unicode="&#x203a;" horiz-adv-x="336"
d="M76 129l149 191l-149 199l56 41l182 -240l-182 -232z" />
<glyph glyph-name="fraction" unicode="&#x2044;" horiz-adv-x="165"
d="M277 770l51 -26l-440 -760l-51 28z" />
<glyph glyph-name="Euro" unicode="&#x20ac;"
d="M532 723v-87q-57 53 -154 53q-83 0 -129.5 -55t-55.5 -147h295l-23 -69h-281q0 -5 -0.5 -19t-0.5 -20q0 -8 0.5 -22.5t0.5 -18.5h253l-23 -69h-221q11 -101 58.5 -153t127.5 -52q95 0 153 53v-89q-51 -43 -165 -43q-227 0 -262 284h-78l23 69h48q-2 20 -2 41
q0 7 0.5 20.5t0.5 18.5h-70l23 69h53q17 132 81.5 207t182.5 75q109 0 165 -46z" />
<glyph glyph-name="afii61289" unicode="&#x2113;" horiz-adv-x="509"
d="M446 159l39 -36q-68 -134 -196 -134q-86 0 -128.5 56t-45.5 144v14q-10 -8 -30.5 -25t-29.5 -24l-25 48q71 62 84 75v295q0 136 47 198t116 62q64 0 97 -49t33 -127q0 -179 -213 -395v-39q1 -84 32 -125t80 -41q45 0 81 30.5t59 72.5zM194 576v-231q157 180 157 311
q0 112 -73 112q-34 0 -59 -46t-25 -146z" />
<glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="940"
d="M906 754v-421h-64v357h-2l-144 -357h-39l-140 357h-2v-357h-64v421h105l121 -297l125 297h104zM374 754v-64h-138v-357h-64v357h-138v64h340z" />
<glyph glyph-name="Omega" unicode="&#x2126;" horiz-adv-x="745"
d="M204 70v3q-61 57 -100.5 144t-39.5 192q0 158 88.5 259t223.5 101q136 0 220 -105t84 -250q0 -109 -41 -198.5t-100 -142.5v-3h155v-70h-252v51q65 46 109 136t44 211q0 74 -23.5 140.5t-75.5 113t-121 46.5q-102 0 -164 -86.5t-62 -216.5q0 -114 44.5 -207.5
t107.5 -136.5v-51h-251v70h154z" />
<glyph glyph-name="estimated" unicode="&#x212e;" horiz-adv-x="948"
d="M910 366h-707q-6 0 -6 -5v-214q0 -11 9 -24q113 -116 268 -116q83 0 156 34.5t125 95.5h63q-60 -70 -151 -111t-194 -41q-181 0 -308.5 114.5t-127.5 277.5t127.5 278t308.5 115t309 -115t128 -278v-11zM749 394v215q0 16 -10 26q-114 111 -265 111q-154 0 -266 -115
q-11 -11 -11 -27v-210q0 -7 6 -7h542q4 0 4 7z" />
<glyph glyph-name="partialdiff" unicode="&#x2202;" horiz-adv-x="573"
d="M107 725l-28 63q73 60 175 60q111 0 188.5 -105.5t77.5 -304.5q0 -201 -71.5 -325t-202.5 -124q-96 0 -148.5 74t-52.5 176q0 124 65.5 201t157.5 77q62 0 106.5 -32.5t61.5 -66.5h2q1 12 1 46q0 137 -56 225t-138 88q-78 0 -138 -52zM253 60h2q69 0 116 80.5t57 194.5
q-13 41 -53 77t-94 36q-63 0 -108 -61.5t-45 -147.5q0 -79 34.5 -129t90.5 -50z" />
<glyph glyph-name="Delta" unicode="&#x2206;" horiz-adv-x="676"
d="M33 0v57l258 720h97l254 -719v-58h-609zM117 69h436l-147 407q-8 26 -34.5 99.5t-33.5 100.5h-4q-5 -22 -29 -90.5t-32 -93.5z" />
<glyph glyph-name="product" unicode="&#x220f;" horiz-adv-x="731"
d="M703 680h-113v-785h-82v785h-286v-785h-82v785h-112v77h675v-77z" />
<glyph glyph-name="summation" unicode="&#x2211;"
d="M555 -105h-531v57l279 373l-267 373v59h502v-72h-387v-4l247 -343l-269 -359v-4h426v-80z" />
<glyph glyph-name="minus" unicode="&#x2212;"
d="M33 213v86h512v-86h-512z" />
<glyph glyph-name="uni2215" unicode="&#x2215;" horiz-adv-x="165"
d="M277 770l51 -26l-440 -760l-51 28z" />
<glyph glyph-name="uni2219" unicode="&#x2219;" horiz-adv-x="289"
d="M145 314q24 0 41 -17.5t17 -40.5q0 -24 -17 -41t-41 -17t-41 17t-17 41q0 23 17 40.5t41 17.5z" />
<glyph glyph-name="radical" unicode="&#x221a;" horiz-adv-x="601"
d="M601 901l-232 -1062h-73l-166 501l-78 -29l-16 51l146 57l131 -395q2 -11 9 -40t9 -41l2 -1q7 50 14 82l193 877h61z" />
<glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="821"
d="M768 315v-1q0 -75 -48.5 -122.5t-114.5 -47.5q-48 0 -91.5 29.5t-101.5 96.5q-53 -61 -97.5 -93.5t-102.5 -32.5q-65 0 -112 48t-47 118q0 73 47.5 121t119.5 48q54 0 99 -32.5t96 -92.5q3 4 10 11q34 38 54 57t57.5 38t76.5 19q69 0 112 -45.5t43 -118.5zM219 196h2
q14 0 27.5 3t27 11.5t23 14.5t24 19.5t20.5 20t21 23t19 20.5q-26 32 -37.5 45t-35.5 35.5t-47 31.5t-50 9q-48 0 -76.5 -35t-28.5 -85q1 -48 32 -80.5t79 -32.5zM607 429h-1q-25 0 -52 -15t-40.5 -27t-41 -42t-29.5 -32q58 -65 92 -91t74 -26q47 0 75.5 35t28.5 79
q0 55 -29.5 87t-76.5 32z" />
<glyph glyph-name="integral" unicode="&#x222b;" horiz-adv-x="381"
d="M362 912l-13 -59q-17 11 -38 11q-33 0 -53 -26q-35 -43 -35 -193q0 -84 7 -269t7 -275q0 -151 -45 -219q-34 -57 -107 -57q-41 0 -69 17l14 61q27 -12 47 -12q31 0 49 25q34 46 34 185q0 91 -7 278.5t-7 273.5q0 91 13 144t44 86q39 43 101 43q36 0 58 -14z" />
<glyph glyph-name="approxequal" unicode="&#x2248;" horiz-adv-x="588"
d="M506 465l34 -29q-50 -102 -136 -102q-29 0 -53.5 9.5t-68.5 34.5q-61 36 -97 36q-33 0 -56 -20.5t-47 -58.5l-35 29q24 48 62 75.5t83 27.5q15 0 28.5 -2.5t27.5 -9t21.5 -10t22.5 -12.5t17 -10q3 -2 19.5 -11t21 -11t16.5 -7t21 -6.5t20 -1.5q31 0 53.5 19.5t45.5 59.5z
M506 284l34 -30q-50 -101 -136 -101q-29 0 -53.5 9.5t-68.5 34.5q-63 36 -97 36q-33 0 -56 -20.5t-47 -58.5l-35 29q24 47 62 74.5t83 27.5q18 0 37 -5t29 -9.5t29 -15t22 -12.5t14 -8t14.5 -8t12.5 -7t14.5 -6.5t13 -4t15 -3.5t15.5 -1q30 0 52.5 19t45.5 60z" />
<glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="588"
d="M419 541l-47 -103h162v-54h-183l-70 -153h253v-54h-274l-56 -123l-43 19l48 104h-156v54h178l69 153h-247v54h268l55 122z" />
<glyph glyph-name="lessequal" unicode="&#x2264;" horiz-adv-x="588"
d="M531 107l-472 240v57l472 239v-65l-415 -201v-2l415 -203v-65zM535 8h-481v56h481v-56z" />
<glyph glyph-name="greaterequal" unicode="&#x2265;" horiz-adv-x="588"
d="M60 643l472 -240v-56l-471 -240v65l414 202v2l-415 202v65zM534 8h-479v56h479v-56z" />
<glyph glyph-name="lozenge" unicode="&#x25ca;" horiz-adv-x="602"
d="M544 378l-211 -426h-68l-208 426l211 427h68zM468 376l-146 298q-13 31 -20 59h-3q-10 -35 -20 -59l-146 -294l147 -300q13 -33 19 -57h4q6 28 18 56z" />
<hkern u1="T" u2="&#x161;" k="25" />
<hkern u1="T" u2="&#xfc;" k="50" />
<hkern u1="T" u2="&#xf6;" k="50" />
<hkern u1="T" u2="&#xf2;" k="50" />
<hkern u1="T" u2="&#xee;" k="-3" />
<hkern u1="T" u2="&#xed;" k="8" />
<hkern u1="T" u2="&#xec;" k="-8" />
<hkern u1="T" u2="&#xeb;" k="50" />
<hkern u1="T" u2="&#xea;" k="75" />
<hkern u1="T" u2="&#xe8;" k="75" />
<hkern u1="T" u2="&#xe5;" k="50" />
<hkern u1="T" u2="&#xe4;" k="25" />
<hkern u1="T" u2="&#xe3;" k="50" />
<hkern u1="T" u2="&#xe2;" k="50" />
<hkern u1="T" u2="&#xe0;" k="50" />
<hkern u1="V" u2="&#xf6;" k="40" />
<hkern u1="V" u2="&#xf4;" k="60" />
<hkern u1="V" u2="&#xee;" k="-4" />
<hkern u1="V" u2="&#xeb;" k="40" />
<hkern u1="V" u2="&#xea;" k="40" />
<hkern u1="V" u2="&#xe8;" k="40" />
<hkern u1="V" u2="&#xe5;" k="40" />
<hkern u1="V" u2="&#xe4;" k="40" />
<hkern u1="V" u2="&#xe3;" k="40" />
<hkern u1="V" u2="&#xe2;" k="40" />
<hkern u1="V" u2="&#xe0;" k="40" />
<hkern u1="W" u2="&#xfc;" k="30" />
<hkern u1="W" u2="&#xf6;" k="45" />
<hkern u1="W" u2="&#xea;" k="45" />
<hkern u1="W" u2="&#xe4;" k="45" />
<hkern u1="Y" u2="&#xfc;" k="45" />
<hkern u1="Y" u2="&#xf6;" k="75" />
<hkern u1="&#x2018;" u2="&#x2018;" k="111" />
<hkern u1="&#x2019;" u2="&#x2019;" k="111" />
<hkern g1="f,fi,fl"
g2="quoteright"
k="-20" />
<hkern g1="f,fi,fl"
g2="f,germandbls,fi,fl"
k="-20" />
<hkern g1="F"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="60" />
<hkern g1="F"
g2="comma"
k="150" />
<hkern g1="F"
g2="period"
k="150" />
<hkern g1="L,Lslash"
g2="T"
k="30" />
<hkern g1="L,Lslash"
g2="V"
k="40" />
<hkern g1="L,Lslash"
g2="W"
k="30" />
<hkern g1="L,Lslash"
g2="y,yacute,ydieresis"
k="20" />
<hkern g1="L,Lslash"
g2="Y,Yacute,Ydieresis"
k="40" />
<hkern g1="L,Lslash"
g2="quoteright"
k="80" />
<hkern g1="P"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="80" />
<hkern g1="P"
g2="comma"
k="135" />
<hkern g1="P"
g2="period"
k="135" />
<hkern g1="r"
g2="v"
k="-40" />
<hkern g1="r"
g2="w"
k="-40" />
<hkern g1="r"
g2="y,yacute,ydieresis"
k="-40" />
<hkern g1="r"
g2="f,germandbls,fi,fl"
k="-20" />
<hkern g1="r"
g2="comma"
k="100" />
<hkern g1="r"
g2="period"
k="100" />
<hkern g1="r"
g2="m"
k="-8" />
<hkern g1="r"
g2="n,ntilde"
k="-8" />
<hkern g1="r"
g2="q"
k="20" />
<hkern g1="r"
g2="t"
k="-20" />
<hkern g1="r"
g2="x"
k="-40" />
<hkern g1="R"
g2="T"
k="20" />
<hkern g1="R"
g2="Y,Yacute,Ydieresis"
k="20" />
<hkern g1="T"
g2="w"
k="80" />
<hkern g1="T"
g2="y,yacute,ydieresis"
k="80" />
<hkern g1="T"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="80" />
<hkern g1="T"
g2="comma"
k="100" />
<hkern g1="T"
g2="period"
k="100" />
<hkern g1="T"
g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae"
k="100" />
<hkern g1="T"
g2="c,ccedilla"
k="100" />
<hkern g1="T"
g2="e,egrave,eacute,ecircumflex,edieresis"
k="100" />
<hkern g1="T"
g2="i,igrave,iacute,icircumflex,idieresis"
k="15" />
<hkern g1="T"
g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe"
k="100" />
<hkern g1="T"
g2="r"
k="80" />
<hkern g1="T"
g2="s,scaron"
k="100" />
<hkern g1="T"
g2="u,ugrave,uacute,ucircumflex,udieresis"
k="100" />
<hkern g1="T"
g2="colon"
k="100" />
<hkern g1="T"
g2="hyphen"
k="80" />
<hkern g1="T"
g2="semicolon"
k="100" />
<hkern g1="v"
g2="comma"
k="80" />
<hkern g1="v"
g2="period"
k="80" />
<hkern g1="V"
g2="y,yacute,ydieresis"
k="20" />
<hkern g1="V"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="100" />
<hkern g1="V"
g2="comma"
k="120" />
<hkern g1="V"
g2="period"
k="120" />
<hkern g1="V"
g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae"
k="80" />
<hkern g1="V"
g2="e,egrave,eacute,ecircumflex,edieresis"
k="80" />
<hkern g1="V"
g2="i,igrave,iacute,icircumflex,idieresis"
k="20" />
<hkern g1="V"
g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe"
k="80" />
<hkern g1="V"
g2="r"
k="40" />
<hkern g1="V"
g2="u,ugrave,uacute,ucircumflex,udieresis"
k="60" />
<hkern g1="V"
g2="colon"
k="80" />
<hkern g1="V"
g2="hyphen"
k="30" />
<hkern g1="V"
g2="semicolon"
k="80" />
<hkern g1="w"
g2="comma"
k="60" />
<hkern g1="w"
g2="period"
k="60" />
<hkern g1="W"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="100" />
<hkern g1="W"
g2="comma"
k="80" />
<hkern g1="W"
g2="period"
k="80" />
<hkern g1="W"
g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae"
k="60" />
<hkern g1="W"
g2="e,egrave,eacute,ecircumflex,edieresis"
k="60" />
<hkern g1="W"
g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe"
k="60" />
<hkern g1="W"
g2="r"
k="20" />
<hkern g1="W"
g2="u,ugrave,uacute,ucircumflex,udieresis"
k="40" />
<hkern g1="W"
g2="colon"
k="80" />
<hkern g1="W"
g2="semicolon"
k="80" />
<hkern g1="y,yacute,ydieresis"
g2="comma"
k="80" />
<hkern g1="y,yacute,ydieresis"
g2="period"
k="80" />
<hkern g1="Y,Yacute,Ydieresis"
g2="v"
k="40" />
<hkern g1="Y,Yacute,Ydieresis"
g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="comma"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="period"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="q"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="e,egrave,eacute,ecircumflex,edieresis"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="i,igrave,iacute,icircumflex,idieresis"
k="20" />
<hkern g1="Y,Yacute,Ydieresis"
g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="u,ugrave,uacute,ucircumflex,udieresis"
k="60" />
<hkern g1="Y,Yacute,Ydieresis"
g2="colon"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="hyphen"
k="60" />
<hkern g1="Y,Yacute,Ydieresis"
g2="semicolon"
k="100" />
<hkern g1="Y,Yacute,Ydieresis"
g2="p"
k="80" />
<hkern g1="quoteright"
g2="t"
k="20" />
<hkern g1="quoteright"
g2="s,scaron"
k="100" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -0,0 +1,48 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

View File

@@ -0,0 +1,14 @@
<html>
<head>
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
<script src="listener.js" type="text/javascript"></script>
<link rel="stylesheet" href="nui://scoreboard/html/reset.css">
<link rel="stylesheet" href="nui://scoreboard/html/style.css">
</head>
<body>
<div style="display: none;" id="wrap">
<table id="ptbl" width="100%">
</table>
</div>
</body>
</html>

View File

@@ -0,0 +1,40 @@
@import url('res/futurastd-medium.css');
html {
color: #fff;
}
#wrap {
width: 500px;
min-height: 185px;
margin-top: 10%;
margin-left: auto;
margin-right: auto;
background-color: #fff;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.16), 0px 2px 10px 0px rgba(0, 0, 0, 0.12);
color: rgba(255, 255, 255, 0.9);
}
table {
text-align: left;
}
th, td {
padding-left: 25px;
}
th {
padding-top: 10px;
height: 40px;
}
tr {
font-size: 120%;
font-family: 'Segoe UI';
/*text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.9);*/
}
tr.heading {
background-color: #43A047;
color: rgba(255, 255, 255, 0.9);
}

View File

@@ -0,0 +1,48 @@
local listOn = false
Citizen.CreateThread(function()
listOn = false
while true do
Wait(0)
if IsControlPressed(0, 27)--[[ INPUT_PHONE ]] then
if not listOn then
local players = {}
ptable = GetPlayers()
for _, i in ipairs(ptable) do
local wantedLevel = GetPlayerWantedLevel(i)
r, g, b = GetPlayerRgbColour(i)
table.insert(players,
'<tr style=\"color: rgb(' .. r .. ', ' .. g .. ', ' .. b .. ')\"><td>' .. GetPlayerServerId(i) .. '</td><td>' .. GetPlayerName(i) .. '</td><td>' .. (wantedLevel and wantedLevel or tostring(0)) .. '</td></tr>'
)
end
SendNUIMessage({ text = table.concat(players) })
listOn = true
while listOn do
Wait(0)
if(IsControlPressed(0, 27) == false) then
listOn = false
SendNUIMessage({
meta = 'close'
})
break
end
end
end
end
end
end)
function GetPlayers()
local players = {}
for i = 0, 31 do
if NetworkIsPlayerActive(i) then
table.insert(players, i)
end
end
return players
end

View File

@@ -0,0 +1,11 @@
client_scripts {
'client/initial.lua',
'client/leavehandler.lua',
'client/activationhandler.lua',
'client/hostservice.lua',
'client/sessionstarter.lua'
}
server_script 'server/host_lock.lua'
export 'serviceHostStuff'

View File

@@ -0,0 +1,27 @@
-- triggers an event when the local network player becomes active
AddEventHandler('sessionInitialized', function()
local playerId = GetPlayerId()
-- create a looping thread
CreateThread(function()
-- wait until the player becomes active
while not IsNetworkPlayerActive(playerId) do
Wait(0)
end
-- set some defaults
AllowGameToPauseForStreaming(true)
SetMaxWantedLevel(6)
SetWantedMultiplier(0.9999999)
SetCreateRandomCops(true)
SetDitchPoliceModels(false)
DisplayPlayerNames(true)
NetworkSetHealthReticuleOption(true)
-- trigger an event on both the local client and the server
TriggerEvent('playerActivated')
TriggerServerEvent('playerActivated')
end)
end)

View File

@@ -0,0 +1,55 @@
-- serving the duties of the office of the host
-- two functions from GTA script; they do 'something lock-ish'
local function acquireHostLock()
if IsThisMachineTheServer() then
SetThisMachineRunningServerScript(true)
return true
end
return false
end
local function releaseHostLock()
SetThisMachineRunningServerScript(false)
end
-- handle msgGetReadyToStartPlaying sending
function serviceHostStuff()
-- acquire the host lock
if acquireHostLock() then
-- check if players want to join
for i = 0, 31 do
-- does this index?
if PlayerWantsToJoinNetworkGame(i) then
-- well, get ready to start playing!
TellNetPlayerToStartPlaying(i, 0)
TriggerServerEvent('playerJoining', i)
end
end
-- release the host lock
releaseHostLock()
end
end
-- host service loop
CreateThread(function()
NetworkSetScriptLobbyState(false)
SwitchArrowAboveBlippedPickups(true)
UsePlayerColourInsteadOfTeamColour(true)
LoadAllPathNodes(true)
SetSyncWeatherAndGameTime(true)
while true do
Wait(0)
serviceHostStuff()
-- launch the local player, for the initial host scenario
if LocalPlayerIsReadyToStartPlaying() then
LaunchLocalPlayerInNetworkGame()
end
end
end)

View File

@@ -0,0 +1,124 @@
-- state variable for session host lock
local sessionHostPending = false
local sessionHostResult
AddEventHandler('sessionHostResult', function(result)
if not sessionHostPending then
return
end
sessionHostResult = result
sessionHostPending = false
end)
local attempts = 0
-- allow early script to create the player
AddEventHandler('playerInfoCreated', function()
CreateThread(function()
-- so that the game won't trigger the citizen disconnect handler
SafeguardDisconnect(true)
-- loop for 3 times
while attempts < 3 do
-- 'find' games (this will store the host session in memory, or if no host exists, tell us later)
NetworkFindGame(16, false, 0, 0)
-- we don't have to wait for the finding to complete; TestSessionFind.cpp in hooks_ny will instantly return
local gamesFound = NetworkGetNumberOfGames(_r)
-- if we found at least one game (if the game isn't hooked, this can be any amount; but
-- we can't trust the implementation in that case anyway)
local needsToHost = true -- whether we need to host after completing a possible join
if gamesFound > 0 then
-- join the game
NetworkJoinGame(0)
SetLoadingText('Entering session') -- status text
-- wait for the join to complete
while NetworkJoinGamePending() do
Wait(0)
end
-- if we succeeded, we're now a session member, and will not need to host
if NetworkJoinGameSucceeded() then
needsToHost = false
break
end
end
-- if we didn't find any games, or a join timed out, we'll *consider* hosting
if needsToHost then
-- make sure we don't have an actual other host waiting for us
sessionHostPending = true -- to trigger a wait loop below
TriggerServerEvent('hostingSession')
SetLoadingText('Initializing session') -- some vague status text
-- wait for the server to respond to our request
while sessionHostPending do
Wait(0)
end
if sessionHostResult == 'wait' then
-- TODO: not implemented yet: wait for a message from the server, then attempt finding a game/joining a game again
sessionHostPending = true
while sessionHostPending do
Wait(0)
end
if sessionHostResult == 'free' then
goto endLoop
end
end
if sessionHostResult == 'conflict' and gamesFound > 0 then
-- there's already a host which is working perfectly fine; show a message to the player
--error('session creation conflict: could not connect to original host')
echo("session creation conflict\n")
goto endLoop
end
-- we got a green light to host; start hosting
if not NetworkHostGameE1(16, false, 32, false, 0, 0) then
echo("session creation failure from NetworkHostGameE1\n")
error('failed to initialize session')
end
-- wait for internal processing to complete
while NetworkHostGamePending() do
Wait(0)
end
-- another failure check
if not NetworkHostGameSucceeded() then
echo("session creation failure from NetworkHostGameSucceeded\n")
error('failed to initialize session')
end
TriggerServerEvent('hostedSession')
break
end
::endLoop::
attempts = attempts + 1
end
SafeguardDisconnect(false)
if attempts >= 3 then
error("Could not connect to session provider.")
end
SetLoadingText('Look at that!')
-- signal local game-specific resources to start
TriggerEvent('sessionInitialized')
TriggerServerEvent('sessionInitialized')
end)
end)

View File

@@ -0,0 +1,31 @@
-- handles the script end of the flag the 'leave game' option in the pause menu sets
CreateThread(function()
while true do
Wait(0)
-- if the flag is set
if DoesGameCodeWantToLeaveNetworkSession() then
-- if we're part of a started session; end it first (FIXME: will this break others when we're host?)
if NetworkIsSessionStarted() then
NetworkEndSession()
-- wait for the session to be ended
while NetworkEndSessionPending() do
Wait(0)
end
end
-- attempt to leave the game
NetworkLeaveGame()
-- while we're waiting to leave...
while NetworkLeaveGamePending() do
Wait(0)
end
-- reinitialize the game as a network game (TODO: call into citigame for UI/NetLibrary leaving)
--ShutdownAndLaunchNetworkGame(0) -- episode id is arg
ShutdownNetworkCit('Left');
end
end
end)

View File

@@ -0,0 +1,26 @@
-- more rline stuff, this does some late-term session management (which I think has some race condition with launching the network player?)
AddEventHandler('sessionInitialized', function()
if IsThisMachineTheServer() then
-- unknown stuff, seems needed though
NetworkChangeExtendedGameConfigCit()
CreateThread(function()
Wait(1500)
if not NetworkIsSessionStarted() then
NetworkStartSession()
while NetworkStartSessionPending() do
Wait(0)
end
if not NetworkStartSessionSucceeded() then
ForceLoadingScreen(0)
SetMsgForLoadingScreen("MO_SNI")
return
end
end
end)
end
end)

View File

@@ -0,0 +1,67 @@
-- whitelist c2s events
RegisterServerEvent('hostingSession')
RegisterServerEvent('hostedSession')
-- event handler for pre-session 'acquire'
local currentHosting
local hostReleaseCallbacks = {}
-- TODO: add a timeout for the hosting lock to be held
-- TODO: add checks for 'fraudulent' conflict cases of hosting attempts (typically whenever the host can not be reached)
AddEventHandler('hostingSession', function()
-- if the lock is currently held, tell the client to await further instruction
if currentHosting then
TriggerClientEvent('sessionHostResult', source, 'wait')
-- register a callback for when the lock is freed
table.insert(hostReleaseCallbacks, function()
TriggerClientEvent('sessionHostResult', source, 'free')
end)
return
end
-- if the current host was last contacted less than a second ago
if GetHostId() >= 1 then
if GetPlayerLastMsg(GetHostId()) < 1000 then
TriggerClientEvent('sessionHostResult', source, 'conflict')
return
end
end
hostReleaseCallbacks = {}
currentHosting = source
TriggerClientEvent('sessionHostResult', source, 'go')
-- set a timeout of 5 seconds
SetTimeout(5000, function()
if not currentHosting then
return
end
currentHosting = nil
for _, cb in ipairs(hostReleaseCallbacks) do
cb()
end
end)
end)
AddEventHandler('hostedSession', function()
-- check if the client is the original locker
if currentHosting ~= source then
-- TODO: drop client as they're clearly lying
print(currentHosting, '~=', source)
return
end
-- free the host lock (call callbacks and remove the lock value)
for _, cb in ipairs(hostReleaseCallbacks) do
cb()
end
currentHosting = nil
end)

View File

@@ -0,0 +1,9 @@
client_script 'spawnmanager.lua'
export 'getRandomSpawnPoint'
export 'spawnPlayer'
export 'addSpawnPoint'
export 'loadSpawns'
export 'setAutoSpawn'
export 'setAutoSpawnCallback'
export 'forceRespawn'

View File

@@ -0,0 +1,350 @@
-- in-memory spawnpoint array for this script execution instance
local spawnPoints = {}
-- auto-spawn enabled flag
local autoSpawnEnabled = false
local autoSpawnCallback
-- support for mapmanager maps
AddEventHandler('getMapDirectives', function(add)
-- call the remote callback
add('spawnpoint', function(state, model)
-- return another callback to pass coordinates and so on (as such syntax would be [spawnpoint 'model' { options/coords }])
return function(opts)
local x, y, z, heading
local s, e = pcall(function()
-- is this a map or an array?
if opts.x then
x = opts.x
y = opts.y
z = opts.z
else
x = opts[1]
y = opts[2]
z = opts[3]
end
x = x + 0.0001
y = y + 0.0001
z = z + 0.0001
-- get a heading and force it to a float, or just default to null
heading = opts.heading and (opts.heading + 0.01) or 0
-- add the spawnpoint
addSpawnPoint({
x = x, y = y, z = z,
heading = heading,
model = model
})
-- recalculate the model for storage
if not tonumber(model) then
model = GetHashKey(model, _r)
end
-- store the spawn data in the state so we can erase it later on
state.add('xyz', { x, y, z })
state.add('model', model)
end)
if not s then
Citizen.Trace(e .. "\n")
end
end
-- delete callback follows on the next line
end, function(state, arg)
-- loop through all spawn points to find one with our state
for i, sp in ipairs(spawnPoints) do
-- if it matches...
if sp.x == state.xyz[1] and sp.y == state.xyz[2] and sp.z == state.xyz[3] and sp.model == state.model then
-- remove it.
table.remove(spawnPoints, i)
return
end
end
end)
end)
-- loads a set of spawn points from a JSON string
function loadSpawns(spawnString)
-- decode the JSON string
local data = json.decode(spawnString)
-- do we have a 'spawns' field?
if not data.spawns then
error("no 'spawns' in JSON data")
end
-- loop through the spawns
for i, spawn in ipairs(data.spawns) do
-- and add it to the list (validating as we go)
addSpawnPoint(spawn)
end
end
function addSpawnPoint(spawn)
-- validate the spawn (position)
if not tonumber(spawn.x) or not tonumber(spawn.y) or not tonumber(spawn.z) then
error("invalid spawn position")
end
-- heading
if not tonumber(spawn.heading) then
error("invalid spawn heading")
end
-- model (try integer first, if not, hash it)
local model = spawn.model
if not tonumber(spawn.model) then
model = GetHashKey(spawn.model)
end
-- is the model actually a model?
if not IsModelInCdimage(model) then
error("invalid spawn model")
end
-- is is even a ped?
-- not in V?
--[[if not IsThisModelAPed(model) then
error("this model ain't a ped!")
end]]
-- overwrite the model in case we hashed it
spawn.model = model
-- all OK, add the spawn entry to the list
table.insert(spawnPoints, spawn)
end
-- changes the auto-spawn flag
function setAutoSpawn(enabled)
autoSpawnEnabled = enabled
end
-- sets a callback to execute instead of 'native' spawning when trying to auto-spawn
function setAutoSpawnCallback(cb)
autoSpawnCallback = cb
autoSpawnEnabled = true
end
-- function as existing in original R* scripts
local function freezePlayer(id, freeze)
local player = id
SetPlayerControl(player, not freeze, false)
local ped = GetPlayerPed(player)
if not freeze then
if not IsEntityVisible(ped) then
SetEntityVisible(ped, true)
end
if not IsPedInAnyVehicle(ped) then
SetEntityCollision(ped, true)
end
FreezeEntityPosition(ped, false)
--SetCharNeverTargetted(ped, false)
SetPlayerInvincible(player, false)
else
if IsEntityVisible(ped) then
SetEntityVisible(ped, false)
end
SetEntityCollision(ped, false)
FreezeEntityPosition(ped, true)
--SetCharNeverTargetted(ped, true)
SetPlayerInvincible(player, true)
--RemovePtfxFromPed(ped)
if not IsPedFatallyInjured(ped) then
ClearPedTasksImmediately(ped)
end
end
end
function loadScene(x, y, z)
NewLoadSceneStart(x, y, z, 0.0, 0.0, 0.0, 20.0, 0)
while IsNewLoadSceneActive() do
networkTimer = GetNetworkTimer()
NetworkUpdateLoadScene()
end
end
-- to prevent trying to spawn multiple times
local spawnLock = false
-- spawns the current player at a certain spawn point index (or a random one, for that matter)
function spawnPlayer(spawnIdx, cb)
if spawnLock then
return
end
spawnLock = true
Citizen.CreateThread(function()
DoScreenFadeOut(500)
while IsScreenFadingOut() do
Citizen.Wait(0)
end
-- if the spawn isn't set, select a random one
if not spawnIdx then
spawnIdx = GetRandomIntInRange(1, #spawnPoints + 1)
end
-- get the spawn from the array
local spawn
if type(spawnIdx) == 'table' then
spawn = spawnIdx
else
spawn = spawnPoints[spawnIdx]
end
-- validate the index
if not spawn then
Citizen.Trace("tried to spawn at an invalid spawn index\n")
spawnLock = false
return
end
-- freeze the local player
freezePlayer(PlayerId(), true)
-- if the spawn has a model set
if spawn.model then
RequestModel(spawn.model)
-- load the model for this spawn
while not HasModelLoaded(spawn.model) do
RequestModel(spawn.model)
Wait(0)
end
-- change the player model
SetPlayerModel(PlayerId(), spawn.model)
-- release the player model
SetModelAsNoLongerNeeded(spawn.model)
end
-- preload collisions for the spawnpoint
RequestCollisionAtCoord(spawn.x, spawn.y, spawn.z)
-- spawn the player
--ResurrectNetworkPlayer(GetPlayerId(), spawn.x, spawn.y, spawn.z, spawn.heading)
local ped = GetPlayerPed(-1)
-- V requires setting coords as well
SetEntityCoordsNoOffset(ped, spawn.x, spawn.y, spawn.z, false, false, false, true)
NetworkResurrectLocalPlayer(spawn.x, spawn.y, spawn.z, spawn.heading, true, true, false)
-- gamelogic-style cleanup stuff
ClearPedTasksImmediately(ped)
--SetEntityHealth(ped, 300) -- TODO: allow configuration of this?
RemoveAllPedWeapons(ped) -- TODO: make configurable (V behavior?)
ClearPlayerWantedLevel(PlayerId())
-- why is this even a flag?
--SetCharWillFlyThroughWindscreen(ped, false)
-- set primary camera heading
--SetGameCamHeading(spawn.heading)
--CamRestoreJumpcut(GetGameCam())
-- load the scene; streaming expects us to do it
--ForceLoadingScreen(true)
--loadScene(spawn.x, spawn.y, spawn.z)
--ForceLoadingScreen(false)
ShutdownLoadingScreen()
DoScreenFadeIn(500)
while IsScreenFadingIn() do
Citizen.Wait(0)
end
-- and unfreeze the player
freezePlayer(PlayerId(), false)
TriggerEvent('playerSpawned', spawn)
if cb then
cb(spawn)
end
spawnLock = false
end)
end
-- automatic spawning monitor thread, too
local respawnForced
local diedAt
Citizen.CreateThread(function()
-- main loop thing
while true do
Citizen.Wait(50)
local playerPed = GetPlayerPed(-1)
if playerPed and playerPed ~= -1 then
-- check if we want to autospawn
if autoSpawnEnabled then
if NetworkIsPlayerActive(PlayerId()) then
if (diedAt and (GetTimeDifference(GetGameTimer(), diedAt) > 2000)) or respawnForced then
Citizen.Trace("forcin' respawn\n")
if autoSpawnCallback then
autoSpawnCallback()
else
spawnPlayer()
end
respawnForced = false
end
end
end
if IsEntityDead(playerPed) then
if not diedAt then
diedAt = GetGameTimer()
end
else
diedAt = nil
end
end
end
end)
function forceRespawn()
spawnLock = false
respawnForced = true
end
--[[AddEventHandler('playerInfoCreated', function()
loadSpawns(json.encode({
spawns = {
{ x = -238.511, y = 954.025, z = 11.0803, heading = 90.0, model = 'ig_brucie' },
{ x = -310.001, y = 945.603, z = 14.3728, heading = 90.0, model = 'ig_bulgarin' },
}
}))
end)
AddEventHandler('playerActivated', function()
respawnForced = true
end)]]