Merge branch 'upstream'

This commit is contained in:
Oliver Jowett 2016-02-17 19:42:39 +00:00
commit b19c1f9dd2
75 changed files with 940 additions and 220 deletions

231
anet.c
View file

@ -1,3 +1,26 @@
// Part of dump1090, a Mode S message decoder for RTLSDR devices.
//
// anet.c: Basic TCP socket stuff made a bit less boring
//
// Copyright (c) 2016 Oliver Jowett <oliver@mutability.co.uk>
//
// This file is free software: you may copy, redistribute and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation, either version 2 of the License, or (at your
// option) any later version.
//
// This file is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// This file incorporates work covered by the following copyright and
// permission notice:
//
/* anet.c -- Basic TCP socket stuff made a bit less boring
*
* Copyright (c) 2006-2012, Salvatore Sanfilippo <antirez at gmail dot com>
@ -28,7 +51,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _WIN32
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
@ -43,10 +65,6 @@
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#else
#include "winstubs.h" //Put everything Windows specific in here
#include "dump1090.h"
#endif
#include "anet.h"
@ -63,7 +81,7 @@ static void anetSetError(char *err, const char *fmt, ...)
int anetNonBlock(char *err, int fd)
{
int flags;
#ifndef _WIN32
/* Set the socket nonblocking.
* Note that fcntl(2) for F_GETFL and F_SETFL can't be
* interrupted by a signal. */
@ -75,14 +93,7 @@ int anetNonBlock(char *err, int fd)
anetSetError(err, "fcntl(F_SETFL,O_NONBLOCK): %s", strerror(errno));
return ANET_ERR;
}
#else
flags = 1;
if (ioctlsocket(fd, FIONBIO, &flags)) {
errno = WSAGetLastError();
anetSetError(err, "ioctlsocket(FIONBIO): %s", strerror(errno));
return ANET_ERR;
}
#endif
return ANET_OK;
}
@ -117,31 +128,10 @@ int anetTcpKeepAlive(char *err, int fd)
return ANET_OK;
}
int anetResolve(char *err, char *host, char *ipbuf)
static int anetCreateSocket(char *err, int domain)
{
struct sockaddr_in sa;
sa.sin_family = AF_INET;
if (inet_aton(host, (void*)&sa.sin_addr) == 0) {
struct hostent *he;
he = gethostbyname(host);
if (he == NULL) {
anetSetError(err, "can't resolve: %s", host);
return ANET_ERR;
}
memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr));
}
strcpy(ipbuf,inet_ntoa(sa.sin_addr));
return ANET_OK;
}
static int anetCreateSocket(char *err, int domain) {
int s, on = 1;
if ((s = socket(domain, SOCK_STREAM, 0)) == -1) {
#ifdef _WIN32
errno = WSAGetLastError();
#endif
anetSetError(err, "creating socket: %s", strerror(errno));
return ANET_ERR;
}
@ -157,52 +147,63 @@ static int anetCreateSocket(char *err, int domain) {
#define ANET_CONNECT_NONE 0
#define ANET_CONNECT_NONBLOCK 1
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags)
static int anetTcpGenericConnect(char *err, char *addr, char *service, int flags)
{
int s;
struct sockaddr_in sa;
struct addrinfo gai_hints;
struct addrinfo *gai_result, *p;
int gai_error;
if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR)
return ANET_ERR;
gai_hints.ai_family = AF_UNSPEC;
gai_hints.ai_socktype = SOCK_STREAM;
gai_hints.ai_protocol = 0;
gai_hints.ai_flags = 0;
gai_hints.ai_addrlen = 0;
gai_hints.ai_addr = NULL;
gai_hints.ai_canonname = NULL;
gai_hints.ai_next = NULL;
memset(&sa,0,sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons((uint16_t)port);
if (inet_aton(addr, (void*)&sa.sin_addr) == 0) {
struct hostent *he;
he = gethostbyname(addr);
if (he == NULL) {
anetSetError(err, "can't resolve: %s", addr);
close(s);
gai_error = getaddrinfo(addr, service, &gai_hints, &gai_result);
if (gai_error != 0) {
anetSetError(err, "can't resolve %s: %s", addr, gai_strerror(gai_error));
return ANET_ERR;
}
memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr));
}
for (p = gai_result; p != NULL; p = p->ai_next) {
if ((s = anetCreateSocket(err, p->ai_family)) == ANET_ERR)
continue;
if (flags & ANET_CONNECT_NONBLOCK) {
if (anetNonBlock(err,s) != ANET_OK)
return ANET_ERR;
}
if (connect(s, (struct sockaddr*)&sa, sizeof(sa)) == -1) {
if (errno == EINPROGRESS &&
flags & ANET_CONNECT_NONBLOCK)
if (connect(s, p->ai_addr, p->ai_addrlen) >= 0) {
freeaddrinfo(gai_result);
return s;
}
if (errno == EINPROGRESS && (flags & ANET_CONNECT_NONBLOCK)) {
freeaddrinfo(gai_result);
return s;
}
anetSetError(err, "connect: %s", strerror(errno));
close(s);
}
freeaddrinfo(gai_result);
return ANET_ERR;
}
return s;
int anetTcpConnect(char *err, char *addr, char *service)
{
return anetTcpGenericConnect(err,addr,service,ANET_CONNECT_NONE);
}
int anetTcpConnect(char *err, char *addr, int port)
int anetTcpNonBlockConnect(char *err, char *addr, char *service)
{
return anetTcpGenericConnect(err,addr,port,ANET_CONNECT_NONE);
}
int anetTcpNonBlockConnect(char *err, char *addr, int port)
{
return anetTcpGenericConnect(err,addr,port,ANET_CONNECT_NONBLOCK);
return anetTcpGenericConnect(err,addr,service,ANET_CONNECT_NONBLOCK);
}
/* Like read(2) but make sure 'count' is read before to return
@ -236,10 +237,12 @@ int anetWrite(int fd, char *buf, int count)
}
static int anetListen(char *err, int s, struct sockaddr *sa, socklen_t len) {
if (sa->sa_family == AF_INET6) {
int on = 1;
setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
}
if (bind(s,sa,len) == -1) {
#ifdef _WIN32
errno = WSAGetLastError();
#endif
anetSetError(err, "bind: %s", strerror(errno));
close(s);
return ANET_ERR;
@ -249,9 +252,6 @@ static int anetListen(char *err, int s, struct sockaddr *sa, socklen_t len) {
* the kernel does: backlogsize = roundup_pow_of_two(backlogsize + 1);
* which will thus give us a backlog of 512 entries */
if (listen(s, 511) == -1) {
#ifdef _WIN32
errno = WSAGetLastError();
#endif
anetSetError(err, "listen: %s", strerror(errno));
close(s);
return ANET_ERR;
@ -259,40 +259,52 @@ static int anetListen(char *err, int s, struct sockaddr *sa, socklen_t len) {
return ANET_OK;
}
int anetTcpServer(char *err, int port, char *bindaddr)
int anetTcpServer(char *err, char *service, char *bindaddr, int *fds, int nfds)
{
int s;
struct sockaddr_in sa;
int i = 0;
struct addrinfo gai_hints;
struct addrinfo *gai_result, *p;
int gai_error;
if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR)
return ANET_ERR;
gai_hints.ai_family = AF_UNSPEC;
gai_hints.ai_socktype = SOCK_STREAM;
gai_hints.ai_protocol = 0;
gai_hints.ai_flags = AI_PASSIVE;
gai_hints.ai_addrlen = 0;
gai_hints.ai_addr = NULL;
gai_hints.ai_canonname = NULL;
gai_hints.ai_next = NULL;
memset(&sa,0,sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons((uint16_t)port);
sa.sin_addr.s_addr = htonl(INADDR_ANY);
if (bindaddr && inet_aton(bindaddr, (void*)&sa.sin_addr) == 0) {
anetSetError(err, "invalid bind address");
close(s);
gai_error = getaddrinfo(bindaddr, service, &gai_hints, &gai_result);
if (gai_error != 0) {
anetSetError(err, "can't resolve %s: %s", bindaddr, gai_strerror(gai_error));
return ANET_ERR;
}
if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR)
return ANET_ERR;
return s;
for (p = gai_result; p != NULL && i < nfds; p = p->ai_next) {
if ((s = anetCreateSocket(err, p->ai_family)) == ANET_ERR)
continue;
if (anetListen(err, s, p->ai_addr, p->ai_addrlen) == ANET_ERR) {
continue;
}
static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *len) {
fds[i++] = s;
}
freeaddrinfo(gai_result);
return (i > 0 ? i : ANET_ERR);
}
static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *len)
{
int fd;
while(1) {
fd = accept(s,sa,len);
if (fd == -1) {
#ifndef _WIN32
if (errno == EINTR) {
continue;
#else
errno = WSAGetLastError();
if (errno == WSAEWOULDBLOCK) {
#endif
} else {
anetSetError(err, "accept: %s", strerror(errno));
}
@ -302,44 +314,13 @@ static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *l
return fd;
}
int anetTcpAccept(char *err, int s, char *ip, int *port) {
int anetTcpAccept(char *err, int s) {
int fd;
struct sockaddr_in sa;
socklen_t salen = sizeof(sa);
if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR)
struct sockaddr_storage ss;
socklen_t sslen = sizeof(ss);
if ((fd = anetGenericAccept(err, s, (struct sockaddr*)&ss, &sslen)) == ANET_ERR)
return ANET_ERR;
if (ip) strcpy(ip,inet_ntoa(sa.sin_addr));
if (port) *port = ntohs(sa.sin_port);
return fd;
}
int anetPeerToString(int fd, char *ip, int *port) {
struct sockaddr_in sa;
socklen_t salen = sizeof(sa);
if (getpeername(fd,(struct sockaddr*)&sa,&salen) == -1) {
*port = 0;
ip[0] = '?';
ip[1] = '\0';
return -1;
}
if (ip) strcpy(ip,inet_ntoa(sa.sin_addr));
if (port) *port = ntohs(sa.sin_port);
return 0;
}
int anetSockName(int fd, char *ip, int *port) {
struct sockaddr_in sa;
socklen_t salen = sizeof(sa);
if (getsockname(fd,(struct sockaddr*)&sa,&salen) == -1) {
*port = 0;
ip[0] = '?';
ip[1] = '\0';
return -1;
}
if (ip) strcpy(ip,inet_ntoa(sa.sin_addr));
if (port) *port = ntohs(sa.sin_port);
return 0;
}

37
anet.h
View file

@ -1,3 +1,26 @@
// Part of dump1090, a Mode S message decoder for RTLSDR devices.
//
// anet.h: Basic TCP socket stuff made a bit less boring
//
// Copyright (c) 2016 Oliver Jowett <oliver@mutability.co.uk>
//
// This file is free software: you may copy, redistribute and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation, either version 2 of the License, or (at your
// option) any later version.
//
// This file is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// This file incorporates work covered by the following copyright and
// permission notice:
//
/* anet.c -- Basic TCP socket stuff made a bit less boring
*
* Copyright (c) 2006-2012, Salvatore Sanfilippo <antirez at gmail dot com>
@ -39,21 +62,15 @@
#define AF_LOCAL AF_UNIX
#endif
int anetTcpConnect(char *err, char *addr, int port);
int anetTcpNonBlockConnect(char *err, char *addr, int port);
int anetUnixConnect(char *err, char *path);
int anetUnixNonBlockConnect(char *err, char *path);
int anetTcpConnect(char *err, char *addr, char *service);
int anetTcpNonBlockConnect(char *err, char *addr, char *service);
int anetRead(int fd, char *buf, int count);
int anetResolve(char *err, char *host, char *ipbuf);
int anetTcpServer(char *err, int port, char *bindaddr);
int anetUnixServer(char *err, char *path, mode_t perm);
int anetTcpAccept(char *err, int serversock, char *ip, int *port);
int anetUnixAccept(char *err, int serversock);
int anetTcpServer(char *err, char *service, char *bindaddr, int *fds, int nfds);
int anetTcpAccept(char *err, int serversock);
int anetWrite(int fd, char *buf, int count);
int anetNonBlock(char *err, int fd);
int anetTcpNoDelay(char *err, int fd);
int anetTcpKeepAlive(char *err, int fd);
int anetPeerToString(int fd, char *ip, int *port);
int anetSetSendBuffer(char *err, int fd, int buffsize);
#endif

View file

@ -1,21 +0,0 @@
# dump1090-fa configuration
# This is read by the systemd service file as environment vars,
# and evaluated by some scripts as a POSIX shell fragment.
# User to run as.
DUMP1090_USER=dump1090
# Where to log to. (See also /etc/logrotate.d/dump1090-fa.conf)
LOGFILE=/var/log/dump1090-fa.log
# RTLSDR device index or serial number to use
# If set to "none", dump1090 will be started in --net-only mode
DEVICE=0
# RTLSDR gain in dB.
# If set to "max" (the default) the maximum supported gain is used.
# If set to "agc", the tuner AGC is used to set the gain.
GAIN=agc
# RTLSDR frequency correction in PPM
PPM=0

681
debian/copyright vendored
View file

@ -9,10 +9,38 @@ Copyright: Copyright 2012 Salvatore Sanfilippo <antirez@gmail.com>
Copyright 2014,2015 Oliver Jowett <oliver@mutability.co.uk>
License: BSD-3-Clause and GPL-2+
Files: cprtests.c cpr.h crc.c crc.h demod_2000.h demod_2400.c demod_2000.h icao_filter.c icao_filter.h demod_2400.h demod_2000.h crc.h
Files: cprtests.c cpr.h crc.c crc.h demod_2000.h demod_2400.c demod_2000.h icao_filter.c icao_filter.h demod_2400.h demod_2000.h
Copyright: Copyright 2014,2015 Oliver Jowett <oliver@mutability.co.uk>
License: GPL-2+
Files: compat/clock_gettime/*
Copyright: Copyright (c), MM Weiss
License: BSD-3-Clause
Files: compat/clock_nanosleep/*
Copyright: Copyright © 2006 Rémi Denis-Courmont.
License: GPL-2+
Files: public_html/coolclock/*
Copyright: Copyright 2010, Simon Baird
License: BSD-3-Clause
Comment: 3-clause clarified with https://github.com/simonbaird/CoolClock/blob/a3e6d1a6fcf9d5bfd81d862d91d83a3892cb6923/LICENSE
Files: public_html/coolclock/excanvas.js
Copyright: Copyright 2006 Google Inc.
License: Apache-2.0
Files: public_html/flags-tiny/*
Copyright: Gang of the Coconuts
License: CC-BY-SA-3.0
Files: public_html/markers.js
Copyright: Kaboldy
Icons made by Freepik
License: CC-BY-SA-3.0 and CC-BY-3.0
Comment: _generic_plane_svg was added with https://github.com/mutability/dump1090/commit/5f0e295580c34da34ecef3a37f03e9a9d57485ff
https://github.com/DE8MSH
Files: debian/*
Copyright: 2014,2015 Oliver Jowett <oliver@mutability.co.uk>
License: BSD-3-Clause
@ -63,3 +91,654 @@ License: BSD-3-Clause
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
License: Apache-2.0
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
.
http://www.apache.org/licenses/LICENSE-2.0
.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
.
On Debian systems, the full text of the Apache Software License version 2
can be found in the file `/usr/share/common-licenses/Apache-2.0'.
License: CC-BY-SA-3.0
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
.
License
.
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO
BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE
CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED
HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
.
1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation, derivative
work, arrangement of music or other alterations of a literary or
artistic work, or phonogram or performance and includes cinematographic
adaptations or any other form in which the Work may be recast,
transformed, or adapted including in any form recognizably derived from
the original, except that a work that constitutes a Collection will not
be considered an Adaptation for the purpose of this License. For the
avoidance of doubt, where the Work is a musical work, performance or
phonogram, the synchronization of the Work in timed-relation with a
moving image ("synching") will be considered an Adaptation for the
purpose of this License.
"Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed in
Section 1(f) below, which, by reason of the selection and arrangement of
their contents, constitute intellectual creations, in which the Work is
included in its entirety in unmodified form along with one or more other
contributions, each constituting separate and independent works in
themselves, which together are assembled into a collective whole. A work
that constitutes a Collection will not be considered an Adaptation (as
defined below) for the purposes of this License.
"Creative Commons Compatible License" means a license that is listed at
http://creativecommons.org/compatiblelicenses that has been approved by
Creative Commons as being essentially equivalent to this License,
including, at a minimum, because that license: (i) contains terms that
have the same purpose, meaning and effect as the License Elements of
this License; and, (ii) explicitly permits the relicensing of
adaptations of works made available under that license under this
License or a Creative Commons jurisdiction license with the same License
Elements as this License.
"Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or other
transfer of ownership.
"License Elements" means the following high-level license attributes as
selected by Licensor and indicated in the title of this License:
Attribution, ShareAlike.
"Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the
individual, individuals, entity or entities who created the Work or if
no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms
of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book, pamphlet
and other writing; a lecture, address, sermon or other work of the same
nature; a dramatic or dramatico-musical work; a choreographic work or
entertainment in dumb show; a musical composition with or without words;
a cinematographic work to which are assimilated works expressed by a
process analogous to cinematography; a work of drawing, painting,
architecture, sculpture, engraving or lithography; a photographic work
to which are assimilated works expressed by a process analogous to
photography; a work of applied art; an illustration, map, plan, sketch
or three-dimensional work relative to geography, topography,
architecture or science; a performance; a broadcast; a phonogram; a
compilation of data to the extent it is protected as a copyrightable
work; or a work performed by a variety or circus performer to the extent
it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License
who has not previously violated the terms of this License with respect
to the Work, or who has received express permission from the Licensor to
exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and
to communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a place
individually chosen by them; to perform the Work to the public by any
means or process and the communication to the public of the performances
of the Work, including by public digital performance; to broadcast and
rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
.
to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to
clearly label, demarcate or otherwise identify that changes were made to
the original Work. For example, a translation could be marked "The
original work was translated from English to Spanish," or a modification
could indicate "The original work has been modified.";
to Distribute and Publicly Perform the Work including as incorporated in
Collections; and,
to Distribute and Publicly Perform Adaptations.
.
For the avoidance of doubt:
Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor reserves
the exclusive right to collect such royalties for any exercise by
You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which
the right to collect royalties through any statutory or compulsory
licensing scheme can be waived, the Licensor waives the exclusive
right to collect such royalties for any exercise by You of the
rights granted under this License; and,
Voluntary License Schemes. The Licensor waives the right to collect
royalties, whether individually or, in the event that the Licensor
is a member of a collecting society that administers voluntary
licensing schemes, via that society, from any exercise by You of the
rights granted under this License.
.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make such
modifications as are technically necessary to exercise the rights in other
media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved.
.
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
.
You may Distribute or Publicly Perform the Work only under the terms of
this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms on
the Work that restrict the terms of this License or the ability of the
recipient of the Work to exercise the rights granted to that recipient
under the terms of the License. You may not sublicense the Work. You
must keep intact all notices that refer to this License and to the
disclaimer of warranties with every copy of the Work You Distribute or
Publicly Perform. When You Distribute or Publicly Perform the Work, You
may not impose any effective technological measures on the Work that
restrict the ability of a recipient of the Work from You to exercise the
rights granted to that recipient under the terms of the License. This
Section 4(a) applies to the Work as incorporated in a Collection, but
this does not require the Collection apart from the Work itself to be
made subject to the terms of this License. If You create a Collection,
upon notice from any Licensor You must, to the extent practicable,
remove from the Collection any credit as required by Section 4(c), as
requested. If You create an Adaptation, upon notice from any Licensor
You must, to the extent practicable, remove from the Adaptation any
credit as required by Section 4(c), as requested.
You may Distribute or Publicly Perform an Adaptation only under the
terms of: (i) this License; (ii) a later version of this License with
the same License Elements as this License; (iii) a Creative Commons
jurisdiction license (either this or a later license version) that
contains the same License Elements as this License (e.g.,
Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible
License. If you license the Adaptation under one of the licenses
mentioned in (iv), you must comply with the terms of that license. If
you license the Adaptation under the terms of any of the licenses
mentioned in (i), (ii) or (iii) (the "Applicable License"), you must
comply with the terms of the Applicable License generally and the
following provisions: (I) You must include a copy of, or the URI for,
the Applicable License with every copy of each Adaptation You Distribute
or Publicly Perform; (II) You may not offer or impose any terms on the
Adaptation that restrict the terms of the Applicable License or the
ability of the recipient of the Adaptation to exercise the rights
granted to that recipient under the terms of the Applicable License;
(III) You must keep intact all notices that refer to the Applicable
License and to the disclaimer of warranties with every copy of the Work
as included in the Adaptation You Distribute or Publicly Perform; (IV)
when You Distribute or Publicly Perform the Adaptation, You may not
impose any effective technological measures on the Adaptation that
restrict the ability of a recipient of the Adaptation from You to
exercise the rights granted to that recipient under the terms of the
Applicable License. This Section 4(b) applies to the Adaptation as
incorporated in a Collection, but this does not require the Collection
apart from the Adaptation itself to be made subject to the terms of the
Applicable License.
If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party or
parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party or
parties; (ii) the title of the Work if supplied; (iii) to the extent
reasonably practicable, the URI, if any, that Licensor specifies to be
associated with the Work, unless such URI does not refer to the
copyright notice or licensing information for the Work; and (iv) ,
consistent with Ssection 3(b), in the case of an Adaptation, a credit
identifying the use of the Work in the Adaptation (e.g., "French
translation of the Work by Original Author," or "Screenplay based on
original Work by Original Author"). The credit required by this Section
4(c) may be implemented in any reasonable manner; provided, however,
that in the case of a Adaptation or Collection, at a minimum such credit
will appear, if a credit for all contributing authors of the Adaptation
or Collection appears, then as part of these credits and in a manner at
least as prominent as the credits for the other contributing authors.
For the avoidance of doubt, You may only use the credit required by this
Section for the purpose of attribution in the manner set out above and,
by exercising Your rights under this License, You may not implicitly or
explicitly assert or imply any connection with, sponsorship or
endorsement by the Original Author, Licensor and/or Attribution Parties,
as appropriate, of You or Your use of the Work, without the separate,
express prior written permission of the Original Author, Licensor and/or
Attribution Parties.
Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any Adaptations
or Collections, You must not distort, mutilate, modify or take other
derogatory action in relation to the Work which would be prejudicial to
the Original Author's honor or reputation. Licensor agrees that in those
jurisdictions (e.g. Japan), in which any exercise of the right granted
in Section 3(b) of this License (the right to make Adaptations) would be
deemed to be a distortion, mutilation, modification or other derogatory
action prejudicial to the Original Author's honor and reputation, the
Licensor will waive or not assert, as appropriate, this Section, to the
fullest extent permitted by the applicable national law, to enable You
to reasonably exercise Your right under Section 3(b) of this License
(right to make Adaptations) but not otherwise.
.
5. Representations, Warranties and Disclaimer
.
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER
OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF
IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY
SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING
OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
.
7. Termination
.
This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
.
8. Miscellaneous
.
Each time You Distribute or Publicly Perform the Work or a Collection,
the Licensor offers to the recipient a license to the Work on the same
terms and conditions as the license granted to You under this License.
Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same terms
and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that may
appear in any communication from You. This License may not be modified
without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for t Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
the Universal Copyright Convention (as revised on July 24, 1971). These
rights and subject matter take effect in the relevant jurisdiction in
which the License terms are sought to be enforced according to the
corresponding provisions of the implementation of those treaty
provisions in the applicable national law. If the standard suite of
rights granted under applicable copyright law includes additional rights
not granted under this License, such additional rights are deemed to be
included in the License; this License is not intended to restrict the
license of any rights under applicable law.
License: CC-BY-3.0
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
ITS USE.
.
License
.
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.
.
1. Definitions
.
a. "Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation, derivative
work, arrangement of music or other alterations of a literary or
artistic work, or phonogram or performance and includes cinematographic
adaptations or any other form in which the Work may be recast,
transformed, or adapted including in any form recognizably derived from
the original, except that a work that constitutes a Collection will not
be considered an Adaptation for the purpose of this License. For the
avoidance of doubt, where the Work is a musical work, performance or
phonogram, the synchronization of the Work in timed-relation with a
moving image ("synching") will be considered an Adaptation for the
purpose of this License.
.
b. "Collection" means a collection of literary or artistic works, such
as encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed in
Section 1(f) below, which, by reason of the selection and arrangement of
their contents, constitute intellectual creations, in which the Work is
included in its entirety in unmodified form along with one or more other
contributions, each constituting separate and independent works in
themselves, which together are assembled into a collective whole. A work
that constitutes a Collection will not be considered an Adaptation (as
defined above) for the purposes of this License.
.
c. "Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or other
transfer of ownership.
.
d. "Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
.
e. "Original Author" means, in the case of a literary or artistic work,
the individual, individuals, entity or entities who created the Work or
if no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
.
f. "Work" means the literary and/or artistic work offered under the
terms of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book, pamphlet
and other writing; a lecture, address, sermon or other work of the same
nature; a dramatic or dramatico-musical work; a choreographic work or
entertainment in dumb show; a musical composition with or without words;
a cinematographic work to which are assimilated works expressed by a
process analogous to cinematography; a work of drawing, painting,
architecture, sculpture, engraving or lithography; a photographic work
to which are assimilated works expressed by a process analogous to
photography; a work of applied art; an illustration, map, plan, sketch
or three-dimensional work relative to geography, topography,
architecture or science; a performance; a broadcast; a phonogram; a
compilation of data to the extent it is protected as a copyrightable
work; or a work performed by a variety or circus performer to the extent
it is not otherwise considered a literary or artistic work.
.
g. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
.
h. "Publicly Perform" means to perform public recitations of the Work
and to communicate to the public those public recitations, by any means
or process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a place
individually chosen by them; to perform the Work to the public by any
means or process and the communication to the public of the performances
of the Work, including by public digital performance; to broadcast and
rebroadcast the Work by any means including signs, sounds or images.
.
i. "Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
.
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
.
b. to create and Reproduce Adaptations provided that any such
Adaptation, including any translation in any medium, takes reasonable
steps to clearly label, demarcate or otherwise identify that changes
were made to the original Work. For example, a translation could be
marked "The original work was translated from English to Spanish," or a
modification could indicate "The original work has been modified.";
.
c. to Distribute and Publicly Perform the Work including as incorporated
in Collections; and,
.
d. to Distribute and Publicly Perform Adaptations.
.
e. For the avoidance of doubt:
.
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or compulsory
licensing scheme cannot be waived, the Licensor reserves the exclusive
right to collect such royalties for any exercise by You of the rights
granted under this License;
.
ii. Waivable Compulsory License Schemes. In those jurisdictions in which
the right to collect royalties through any statutory or compulsory
licensing scheme can be waived, the Licensor waives the exclusive right
to collect such royalties for any exercise by You of the rights granted
under this License; and,
.
iii. Voluntary License Schemes. The Licensor waives the right to collect
royalties, whether individually or, in the event that the Licensor is a
member of a collecting society that administers voluntary licensing
schemes, via that society, from any exercise by You of the rights
granted under this License.
.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights
in other media and formats. Subject to Section 8(f), all rights not
expressly granted by Licensor are hereby reserved.
.
4. Restrictions. The license granted in Section 3 above is expressly
made subject to and limited by the following restrictions:
.
a. You may Distribute or Publicly Perform the Work only under the terms
of this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms on
the Work that restrict the terms of this License or the ability of the
recipient of the Work to exercise the rights granted to that recipient
under the terms of the License. You may not sublicense the Work. You
must keep intact all notices that refer to this License and to the
disclaimer of warranties with every copy of the Work You Distribute or
Publicly Perform. When You Distribute or Publicly Perform the Work, You
may not impose any effective technological measures on the Work that
restrict the ability of a recipient of the Work from You to exercise the
rights granted to that recipient under the terms of the License. This
Section 4(a) applies to the Work as incorporated in a Collection, but
this does not require the Collection apart from the Work itself to be
made subject to the terms of this License. If You create a Collection,
upon notice from any Licensor You must, to the extent practicable,
remove from the Collection any credit as required by Section 4(b), as
requested. If You create an Adaptation, upon notice from any Licensor
You must, to the extent practicable, remove from the Adaptation any
credit as required by Section 4(b), as requested.
.
b. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party or
parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party or
parties; (ii) the title of the Work if supplied; (iii) to the extent
reasonably practicable, the URI, if any, that Licensor specifies to be
associated with the Work, unless such URI does not refer to the
copyright notice or licensing information for the Work; and (iv) ,
consistent with Section 3(b), in the case of an Adaptation, a credit
identifying the use of the Work in the Adaptation (e.g., "French
translation of the Work by Original Author," or "Screenplay based on
original Work by Original Author"). The credit required by this Section
4 (b) may be implemented in any reasonable manner; provided, however,
that in the case of a Adaptation or Collection, at a minimum such credit
will appear, if a credit for all contributing authors of the Adaptation
or Collection appears, then as part of these credits and in a manner at
least as prominent as the credits for the other contributing authors.
For the avoidance of doubt, You may only use the credit required by this
Section for the purpose of attribution in the manner set out above and,
by exercising Your rights under this License, You may not implicitly or
explicitly assert or imply any connection with, sponsorship or
endorsement by the Original Author, Licensor and/or Attribution Parties,
as appropriate, of You or Your use of the Work, without the separate,
express prior written permission of the Original Author, Licensor and/or
Attribution Parties.
.
c. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any Adaptations
or Collections, You must not distort, mutilate, modify or take other
derogatory action in relation to the Work which would be prejudicial to
the Original Author's honor or reputation. Licensor agrees that in those
jurisdictions (e.g. Japan), in which any exercise of the right granted
in Section 3(b) of this License (the right to make Adaptations) would be
deemed to be a distortion, mutilation, modification or other derogatory
action prejudicial to the Original Author's honor and reputation, the
Licensor will waive or not assert, as appropriate, this Section, to the
fullest extent permitted by the applicable national law, to enable You
to reasonably exercise Your right under Section 3(b) of this License
(right to make Adaptations) but not otherwise.
.
5. Representations, Warranties and Disclaimer
.
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
.
7. Termination
.
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
.
b. Subject to the above terms and conditions, the license granted here
is perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
.
8. Miscellaneous
.
a. Each time You Distribute or Publicly Perform the Work or a
Collection, the Licensor offers to the recipient a license to the Work
on the same terms and conditions as the license granted to You under
this License.
.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same terms
and conditions as the license granted to You under this License.
.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent. This
License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representatio Work not specified
here. Licensor shall not be bound by any additional provisions that may
appear in any communication from You.
.
e. This License may not be modified without the mutual written agreement
of the Licensor and You.
.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for the Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
the Universal Copyright Convention (as revised on July 24, 1971). These
rights and subject matter take effect in the relevant jurisdiction in
which the License terms are sought to be enforced according to the
corresponding provisions of the implementation of those treaty
provisions in the applicable national law. If the standard suite of
rights granted under applicable copyright law includes additional rights
not granted under this License, such additional rights are deemed to be
included in the License; this License is not intended to restrict the
license of any rights under applicable law.

View file

@ -31,20 +31,6 @@ case "$1" in
adduser --system --home /usr/share/$NAME --no-create-home --quiet "$RUNAS"
fi
# create cronjob
if ! test -e $CRONFILE; then
echo "Creating cronjob in $CRONFILE to periodically update the aircraft database.." >&2
MIN=$(($RANDOM % 60))
DOM=$(( ($RANDOM % 28) + 1 ))
tail -n +4 $TEMPLATECRON | sed -e "s/@USER@/$RUNAS/g" -e "s/@MIN@/$MIN/g" -e "s/@DOM@/$DOM/g" >$CRONFILE
fi
# update the DB
echo "Updating aircraft database now.."
mkdir -m 0755 -p /var/cache/$NAME
chown $RUNAS /var/cache/$NAME
su $RUNAS -s /bin/bash -c /usr/share/$NAME/update-aircraft-database.sh || true
# set up lighttpd
echo "Enabling lighttpd integration.." >&2
lighty-enable-mod dump1090-fa || true

View file

@ -4,7 +4,6 @@
alias.url += (
"/dump1090-fa/data/" => "/run/dump1090-fa/",
"/dump1090-fa/db/" => "/var/cache/dump1090-fa/db/",
"/dump1090-fa/" => "/usr/share/dump1090-fa/html/"
)

View file

@ -145,8 +145,8 @@ void modesInitConfig(void) {
Modes.ppm_error = MODES_DEFAULT_PPM;
Modes.check_crc = 1;
Modes.net_heartbeat_interval = MODES_NET_HEARTBEAT_INTERVAL;
Modes.net_output_raw_ports = strdup("30001");
Modes.net_input_raw_ports = strdup("30002");
Modes.net_input_raw_ports = strdup("30001");
Modes.net_output_raw_ports = strdup("30002");
Modes.net_output_sbs_ports = strdup("30003");
Modes.net_input_beast_ports = strdup("30004,30104");
Modes.net_output_beast_ports = strdup("30005");

View file

@ -1237,6 +1237,7 @@ void displayModesMessage(struct modesMessage *mm) {
}
printf("\n");
fflush(stdout);
}
//

View file

@ -154,7 +154,12 @@ struct client *createGenericClient(struct net_service *service, int fd)
// Return the new client or NULL if the connection failed
struct client *serviceConnect(struct net_service *service, char *addr, int port)
{
int s = anetTcpConnect(Modes.aneterr, addr, port);
int s;
char buf[20];
// Bleh.
snprintf(buf, 20, "%d", port);
s = anetTcpConnect(Modes.aneterr, addr, buf);
if (s == ANET_ERR)
return NULL;
@ -168,6 +173,7 @@ void serviceListen(struct net_service *service, char *bind_addr, char *bind_port
int *fds = NULL;
int n = 0;
char *p, *end;
char buf[128];
if (service->listener_count > 0) {
fprintf(stderr, "Tried to set up the service %s twice!\n", service->descr);
@ -178,38 +184,41 @@ void serviceListen(struct net_service *service, char *bind_addr, char *bind_port
return;
p = bind_ports;
while (*p) {
int s;
unsigned long port = strtoul(p, &end, 10);
if (p == end) {
fprintf(stderr,
"Couldn't parse port list: %s\n"
" %*s^\n",
bind_ports, (int)(p - bind_ports), "");
while (p && *p) {
int newfds[16];
int nfds, i;
end = strpbrk(p, ", ");
if (!end) {
strncpy(buf, p, sizeof(buf));
buf[sizeof(buf)-1] = 0;
p = NULL;
} else {
size_t len = end - p;
if (len >= sizeof(buf))
len = sizeof(buf) - 1;
memcpy(buf, p, len);
buf[len] = 0;
p = end + 1;
}
nfds = anetTcpServer(Modes.aneterr, buf, bind_addr, newfds, sizeof(newfds));
if (nfds == ANET_ERR) {
fprintf(stderr, "Error opening the listening port %s (%s): %s\n",
buf, service->descr, Modes.aneterr);
exit(1);
}
s = anetTcpServer(Modes.aneterr, port, bind_addr);
if (s == ANET_ERR) {
fprintf(stderr, "Error opening the listening port %lu (%s): %s\n",
port, service->descr, Modes.aneterr);
exit(1);
}
anetNonBlock(Modes.aneterr, s);
fds = realloc(fds, (n+1) * sizeof(int));
fds = realloc(fds, (n+nfds) * sizeof(int));
if (!fds) {
fprintf(stderr, "out of memory\n");
exit(1);
}
fds[n] = s;
++n;
p = end;
if (*p == ',')
++p;
for (i = 0; i < nfds; ++i) {
anetNonBlock(Modes.aneterr, newfds[i]);
fds[n++] = newfds[i];
}
}
service->listener_count = n;
@ -259,13 +268,13 @@ void modesInitNet(void) {
// awakened by new data arriving. This usually happens a few times every second
//
static struct client * modesAcceptClients(void) {
int fd, port;
int fd;
struct net_service *s;
for (s = Modes.services; s; s = s->next) {
int i;
for (i = 0; i < s->listener_count; ++i) {
while ((fd = anetTcpAccept(Modes.aneterr, s->listener_fds[i], NULL, &port)) >= 0) {
while ((fd = anetTcpAccept(Modes.aneterr, s->listener_fds[i])) >= 0) {
createSocketClient(s, fd);
}
}

1
public_html/db/0.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/06.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/1.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/2.json Normal file
View file

@ -0,0 +1 @@
{"01001":{"r":"V5-NAM","t":"F900"},"01028":{"r":"V5-NMF","t":"A343"},"01029":{"r":"V5-NME","t":"A343"},"02031":{"r":"E3-AAQ","t":"B762"}}

1
public_html/db/3.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/30.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/34.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/39.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/3C.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/3C4.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/3C6.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/4.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/40.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/400.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/400A.json Normal file
View file

@ -0,0 +1 @@
{"00":{"r":"G-EZJU","t":"B737"},"02":{"r":"G-OZBG","t":"A321"},"04":{"r":"G-CELX","t":"B733"},"05":{"r":"G-EZJW","t":"B737"},"06":{"r":"G-EZJV","t":"B737"},"07":{"r":"G-EZJX","t":"B737"},"08":{"r":"G-TCDV","t":"A321"},"09":{"r":"G-DHJZ","t":"A320"},"0A":{"r":"G-SUEW","t":"A320"},"0B":{"r":"G-KKAZ","t":"A320"},"0D":{"r":"G-VROC","t":"B744"},"0E":{"r":"G-EUUO","t":"A320"},"0F":{"r":"G-ZAPU","t":"B752"},"12":{"r":"G-CELY","t":"B733"},"13":{"r":"G-EZJY","t":"B737"},"14":{"r":"G-EZJZ","t":"B737"},"15":{"r":"G-EZKA","t":"B737"},"17":{"r":"G-BFIV","t":"C177"},"18":{"r":"G-SSXX","t":"EC35"},"19":{"r":"G-ORJA","t":"BE20"},"1C":{"r":"G-ONAV","t":"PA31"},"1F":{"r":"G-TALF","t":"PA24"},"25":{"r":"G-EUUP","t":"A320"},"26":{"r":"G-EUUR","t":"A320"},"27":{"r":"G-CDCX","t":"C750"},"28":{"r":"G-BWWW","t":"JS31"},"29":{"r":"G-CHAI","t":"CL60"},"2A":{"r":"G-JEDM","t":"DH8D"},"2B":{"r":"G-JEDN","t":"DH8D"},"2D":{"r":"G-TTOI","t":"A320"},"2E":{"r":"G-TTOJ","t":"A320"},"30":{"r":"G-TCDA","t":"A321"},"31":{"r":"G-YAKN","t":"YK52"},"32":{"r":"G-CELZ","t":"B733"},"33":{"r":"G-CELA","t":"B733"},"34":{"r":"G-CELB","t":"B733"},"35":{"r":"G-CELE","t":"B733"},"3A":{"r":"G-CTWW","t":"PA34"},"3B":{"r":"G-FILE","t":"PA34"},"3C":{"r":"G-EMAX","t":"PA31"},"3E":{"r":"G-VIPX","t":"PA31"},"40":{"r":"G-SGEC","t":"BE20"},"42":{"r":"G-GSSC","t":"B744"},"43":{"r":"G-JEDO","t":"DH8D"},"45":{"r":"G-HRYZ","t":"P28A"},"47":{"r":"G-VICM","t":"BE33"},"48":{"r":"G-CCGS","t":"D328"},"50":{"r":"G-EZKB","t":"B737"},"51":{"r":"G-EZKC","t":"B737"},"52":{"r":"G-EZKD","t":"B737"},"53":{"r":"G-EZKE","t":"B737"},"54":{"r":"G-EZKF","t":"B737"},"55":{"r":"G-EZKG","t":"B737"},"57":{"r":"G-EZNC","t":"A319"},"58":{"r":"G-WINA","t":"C560"},"5A":{"r":"G-ZXZX","t":"LJ45"},"5B":{"r":"G-DBCA","t":"A319"},"5E":{"r":"G-CELP","t":"B733"},"5F":{"r":"G-CELR","t":"B733"},"60":{"r":"G-OOBF","t":"B752"},"61":{"r":"G-ORTH"},"62":{"r":"G-BHTA","t":"P28A"},"63":{"r":"G-DAAT","t":"EC35"},"66":{"r":"G-MEDJ","t":"A321"},"67":{"r":"G-LIZZ","t":"PA23"},"68":{"r":"G-EZEA","t":"A319"},"69":{"r":"G-EZEB","t":"A319"},"6A":{"r":"G-EZEC","t":"A319"},"6B":{"r":"G-EZED","t":"A319"},"6C":{"r":"G-BCBG","t":"PA23"},"70":{"r":"G-TENG","t":"E300"},"71":{"r":"G-GRGA","t":"H25B"},"73":{"r":"G-VIPA","t":"C182"},"76":{"r":"G-CIFE","t":"BE20"},"77":{"r":"G-JEDP","t":"DH8D"},"78":{"r":"G-JEDR","t":"DH8D"},"79":{"r":"G-JEDT","t":"DH8D"},"7C":{"r":"G-DBCC","t":"A319"},"7D":{"r":"G-DBCB","t":"A319"},"7E":{"r":"G-OZBH","t":"A321"},"7F":{"r":"G-OZBI","t":"A321"},"80":{"r":"G-IBFW","t":"P28R"},"82":{"r":"G-ZAPR","t":"B462"},"83":{"r":"G-JPSX","t":"F900"},"85":{"r":"G-CIFW","t":"BE20"},"86":{"r":"G-OLIV","t":"BE20"},"87":{"r":"G-RAFO","t":"BE20"},"88":{"r":"G-RAFP","t":"BE20"},"89":{"r":"G-YPRS","t":"C550"},"8A":{"r":"G-OOBH","t":"B752"},"8B":{"r":"G-OBNA","t":"PA34"},"8C":{"r":"G-BMLS","t":"P28R"},"8D":{"r":"G-BAMV","t":"DR40"},"8E":{"r":"G-OOPX","t":"A320"},"8F":{"r":"G-VSSH","t":"A346"},"90":{"r":"G-VNAP","t":"A346"},"92":{"r":"G-OAAF","t":"ATP"},"98":{"r":"G-GAJB","t":"AA5"},"99":{"r":"G-STRF","t":"B737"},"9A":{"r":"G-STRH","t":"B737"},"9B":{"r":"G-CBFM","t":"TB21"},"9C":{"r":"G-BTII","t":"AA5"},"9D":{"r":"G-JANT","t":"P28A"},"9F":{"r":"G-EZEG","t":"A319"},"A2":{"r":"G-EZEJ","t":"A319"},"A3":{"r":"G-EZEK","t":"A319"},"A5":{"r":"G-PLAZ","t":"AC11"},"A7":{"r":"G-EZEF","t":"A319"},"B0":{"r":"G-GPMW","t":"P28T"},"B1":{"r":"G-SAMM","t":"C340"},"B2":{"r":"G-DIXY","t":"P28A"},"B3":{"r":"G-JACS","t":"P28A"},"B8":{"r":"G-RIGH","t":"P32R"},"BB":{"r":"G-IDAB","t":"C550"},"BC":{"r":"G-NESW","t":"PA34"},"BD":{"r":"G-JEDU","t":"DH8D"},"BE":{"r":"G-LVLV","t":"CL60"},"C1":{"r":"G-TWIZ","t":"AC11"},"C2":{"r":"G-BALN","t":"C310"},"C5":{"r":"G-OAJS"},"C9":{"r":"G-BFBU","t":"P68"},"CA":{"r":"G-UILT","t":"C303"},"CB":{"r":"G-AZID","t":"C150"},"CC":{"r":"G-ZLOJ","t":"BE36"},"D0":{"r":"G-CBTT","t":"P28A"},"D1":{"r":"G-LGNH","t":"SF34"},"D2":{"r":"G-JEDV","t":"DH8D"},"D4":{"r":"G-RVIX","t":"RV9"},"D6":{"r":"G-ATCX","t":"C182"},"D7":{"r":"G-SENX","t":"PA34"},"D8":{"r":"G-VONS","t":"P32R"},"DA":{"r":"G-OMJC","t":"PRM1"},"DD":{"r":"G-EZEN","t":"A319"},"DE":{"r":"G-EZEO","t":"A319"},"DF":{"r":"G-EZEP","t":"A319"},"E1":{"r":"G-EZET","t":"A319"},"E2":{"r":"G-EZEU","t":"A319"},"E3":{"r":"G-EZEV","t":"A319"},"E4":{"r":"G-EZEW","t":"A319"},"E7":{"r":"G-EZEZ","t":"A319"},"E9":{"r":"G-BNVE","t":"P28A"},"EA":{"r":"G-PECK","t":"PA32"},"EB":{"r":"G-DJJA","t":"P28A"},"ED":{"r":"G-OOBJ","t":"B752"},"EE":{"r":"G-OOBI","t":"B752"},"EF":{"r":"G-FAVS","t":"PA32"},"F0":{"r":"G-IKOS","t":"C550"},"F1":{"r":"G-JEMD","t":"ATP"},"F4":{"r":"G-DNOP","t":"PA46"},"F6":{"r":"G-DRFC"},"F7":{"r":"G-EZAM","t":"A319"},"F8":{"r":"G-EZDC","t":"A319"},"F9":{"r":"G-EZMH","t":"A319"},"FA":{"r":"G-EZSM","t":"A319"},"FB":{"r":"G-EUXC","t":"A321"},"FC":{"r":"G-EUXD","t":"A321"},"FD":{"r":"G-EUXE","t":"A321"},"FE":{"r":"G-EUXF","t":"A321"},"FF":{"r":"G-EUXG","t":"A321"}}

1
public_html/db/400C.json Normal file
View file

@ -0,0 +1 @@
{"00":{"r":"G-NIVA","t":"EC55"},"01":{"r":"G-CBTN","t":"PA31"},"02":{"r":"G-OAPE","t":"C303"},"05":{"r":"G-OWAL","t":"PA34"},"06":{"r":"G-JETJ","t":"C550"},"07":{"r":"G-ZARI","t":"AA5"},"08":{"r":"G-DMAH","t":"TRIN"},"09":{"r":"G-THOG","t":"B733"},"0A":{"r":"G-THOH","t":"B733"},"0C":{"r":"G-MACA","t":"R22"},"10":{"r":"G-RVRW","t":"PA23"},"11":{"r":"G-MAXI","t":"PA34"},"12":{"r":"G-KWIN","t":"F2TH"},"13":{"r":"G-KWLI","t":"C421"},"16":{"r":"G-TREC","t":"C421"},"18":{"r":"G-OTUI","t":"TRIN"},"19":{"r":"G-DMCS","t":"P28A"},"1A":{"r":"G-BYDF","t":"S76"},"1E":{"r":"G-SVEA","t":"P28A"},"1F":{"r":"G-BGHJ","t":"C172"},"20":{"r":"G-IJYS","t":"JS31"},"21":{"r":"G-BHKJ","t":"C421"},"22":{"r":"G-OSCC","t":"PA32"},"24":{"r":"G-POPA","t":"BE36"},"25":{"r":"G-BVYF","t":"PA31"},"27":{"r":"G-BMMC","t":"C310"},"29":{"r":"G-OBAL","t":"M20P"},"2A":{"r":"G-ATHR","t":"P28A"},"2B":{"r":"G-BTNT","t":"P28A"},"2C":{"r":"G-CBAL","t":"P28A"},"2D":{"r":"G-BNMB","t":"P28A"},"2E":{"r":"G-UAVA","t":"PA30"},"2F":{"r":"G-KVIP","t":"BE20"},"30":{"r":"G-FIFA","t":"C404"},"31":{"r":"G-DIPM","t":"P46T"},"32":{"r":"G-HWAA","t":"EC35"},"33":{"r":"G-BHLX","t":"AA5"},"35":{"r":"G-SAPM","t":"TRIN"},"37":{"r":"G-ATSR","t":"BE35"},"38":{"r":"G-BVES","t":"C340"},"3F":{"r":"G-RVRD","t":"PA23"},"41":{"r":"G-EZNM","t":"A319"},"42":{"r":"G-EJAR","t":"A319"},"43":{"r":"G-EZIA","t":"A319"},"44":{"r":"G-EZIB","t":"A319"},"45":{"r":"G-EZID","t":"A319"},"46":{"r":"G-EZIC","t":"A319"},"47":{"r":"G-EZIE","t":"A319"},"48":{"r":"G-EZIF","t":"A319"},"49":{"r":"G-EZIG","t":"A319"},"4A":{"r":"G-EZIH","t":"A319"},"4B":{"r":"G-EZII","t":"A319"},"4C":{"r":"G-EZIJ","t":"A319"},"4D":{"r":"G-EZIK","t":"A319"},"4E":{"r":"G-EZIL","t":"A319"},"4F":{"r":"G-EZIM","t":"A319"},"50":{"r":"G-EZIN","t":"A319"},"51":{"r":"G-AVNU","t":"P28A"},"52":{"r":"G-OOBL","t":"B763"},"53":{"r":"G-GTDL","t":"A320"},"54":{"r":"G-TCAC","t":"A320"},"55":{"r":"G-OSEA","t":"BN2P"},"56":{"r":"G-TERY","t":"P28A"},"57":{"r":"G-PZAZ","t":"PA31"},"58":{"r":"G-CDHV","t":"R44"},"5A":{"r":"G-STRL","t":"AS50"},"5C":{"r":"G-CDKA","t":"SB20"},"5D":{"r":"G-CDKB","t":"SB20"},"5E":{"r":"G-CGET","t":"B733"},"5F":{"r":"G-ECJM","t":"P28A"},"62":{"r":"G-BWNZ","t":"A109"},"63":{"r":"G-ISAY","t":"JS41"},"67":{"r":"G-NSUK","t":"PA34"},"6A":{"r":"G-GAFA","t":"PA34"},"6B":{"r":"G-BGRE","t":"BE20"},"6C":{"r":"G-VIPV","t":"PA31"},"70":{"r":"G-JECH","t":"DH8D"},"72":{"r":"G-BAVL","t":"PA27"},"73":{"r":"G-EFBP","t":"C172"},"75":{"r":"G-MRJK","t":"A320"},"76":{"r":"G-OZBK","t":"A320"},"79":{"r":"G-BTFT","t":"BE58"},"7A":{"r":"G-JETX","t":"B06"},"7D":{"r":"G-STRI","t":"B733"},"7F":{"r":"G-BOIC","t":"P28R"},"80":{"r":"G-ISHK","t":"C172"},"81":{"r":"G-BYBP","t":"C185"},"83":{"r":"G-BZIT","t":"BE58"},"85":{"r":"G-BOFC","t":"BE76"},"86":{"r":"G-UMMI","t":"PA31"},"89":{"r":"G-ORVR","t":"P68"},"8B":{"r":"G-HUBB","t":"P68"},"8F":{"r":"G-STRJ","t":"B733"},"90":{"r":"G-SCIP","t":"TRIN"},"91":{"r":"G-VALY","t":"TRIN"},"94":{"r":"G-GURN","t":"PA31"},"A2":{"r":"G-BTNC","t":"AS65"},"A4":{"r":"G-GBEN","t":"R44"},"A5":{"r":"G-WOWD","t":"DH8C"},"A6":{"r":"G-CCXJ","t":"C340"},"A9":{"r":"G-FIND","t":"F406"},"AA":{"r":"G-TURF","t":"F406"},"AC":{"r":"G-NOSE","t":"C402"},"AD":{"r":"G-MIND","t":"C404"},"AF":{"r":"G-SOUL","t":"C310"},"B0":{"r":"G-BODY","t":"C310"},"B2":{"r":"G-TWIN","t":"PA44"},"B4":{"r":"G-WLDN","t":"R44"},"B9":{"r":"G-LGNI","t":"SF34"},"BA":{"r":"G-BRNV","t":"P28A"},"BB":{"r":"G-JREE","t":"M7"},"BC":{"r":"G-DSID","t":"PA34"},"BD":{"r":"G-BJCW","t":"P32R"},"C0":{"r":"G-ILET","t":"R44"},"C3":{"r":"G-AZWY","t":"PA24"},"C5":{"r":"G-BMJO","t":"PA34"},"C6":{"r":"G-CIEL","t":"C560"},"C9":{"r":"G-REST","t":"BE35"},"CA":{"r":"G-BRDO","t":"C177"},"CB":{"r":"G-CDLT","t":"H25B"},"CC":{"r":"G-BJNZ","t":"PA27"},"CF":{"r":"G-EZIO","t":"A319"},"D0":{"r":"G-EZIP","t":"A319"},"D1":{"r":"G-EZIR","t":"A319"},"D2":{"r":"G-EZIS","t":"A319"},"D3":{"r":"G-EZIT","t":"A319"},"D4":{"r":"G-EZIU","t":"A319"},"D5":{"r":"G-EZIV","t":"A319"},"D6":{"r":"G-EZIW","t":"A319"},"D7":{"r":"G-EZIX","t":"A319"},"D8":{"r":"G-EZIY","t":"A319"},"D9":{"r":"G-OEWD","t":"PRM1"},"DA":{"r":"G-BYKP","t":"P28T"},"DB":{"r":"G-EMCA","t":"AC11"},"DC":{"r":"G-LARE","t":"PA30"},"DE":{"r":"G-HANG","t":"DA42"},"DF":{"r":"G-CDKR","t":"DA42"},"E1":{"r":"G-SLCT","t":"DA42"},"E2":{"r":"G-SELC","t":"DA42"},"E3":{"r":"G-RALA","t":"R44"},"E7":{"r":"G-BNYB","t":"P28A"},"E8":{"r":"G-MSPT","t":"EC35"},"EA":{"r":"G-REGE","t":"R44"},"EB":{"r":"G-EUXI","t":"A321"},"EE":{"r":"G-LGNJ","t":"SF34"},"EF":{"r":"G-LGNK","t":"SF34"},"F2":{"r":"G-CDDG","t":"P28A"},"F3":{"r":"G-RAGT","t":"PA32"},"F4":{"r":"G-JUPP","t":"P32T"},"F5":{"r":"G-AZGL","t":"RALL"},"F9":{"r":"G-JECI","t":"DH8D"},"FB":{"r":"G-GYMM","t":"P28A"},"FD":{"r":"G-UIST","t":"JS31"},"FE":{"r":"G-LNKS","t":"JS31"}}

1
public_html/db/400D.json Normal file
View file

@ -0,0 +1 @@
{"00":{"r":"G-CDLY","t":"SR20"},"01":{"r":"G-CTCE","t":"DA42"},"02":{"r":"G-CTCF","t":"DA42"},"03":{"r":"G-CTCG","t":"DA42"},"04":{"r":"G-JKMI","t":"DA42"},"07":{"r":"G-PVPC","t":"PC12"},"08":{"r":"G-COVB","t":"P28A"},"0B":{"r":"G-PZIZ","t":"PA31"},"0C":{"r":"G-BEJV","t":"PA34"},"0D":{"r":"G-BCVY","t":"PA34"},"0E":{"r":"G-OHLI","t":"R44"},"0F":{"r":"G-WALI","t":"R44"},"14":{"r":"G-GREY","t":"PA46"},"15":{"r":"G-BDUN","t":"PA34"},"16":{"r":"G-BHYG","t":"PA34"},"17":{"r":"G-BXRH","t":"C185"},"1A":{"r":"G-BPRJ","t":"AS55"},"1B":{"r":"G-BVLG","t":"AS55"},"1C":{"r":"G-NETR","t":"AS55"},"23":{"r":"G-CBBC","t":"BDOG"},"25":{"r":"G-BOCG","t":"PA34"},"27":{"r":"G-LSAB","t":"B752"},"29":{"r":"G-BLFI","t":"P28A"},"2D":{"r":"G-RATV","t":"P28T"},"2E":{"r":"G-OTVR","t":"PA34"},"30":{"r":"G-VWKD","t":"A346"},"36":{"r":"G-NMAK","t":"A319"},"37":{"r":"G-NFLA","t":"JS31"},"38":{"r":"G-MOOO","t":"LJ45"},"3A":{"r":"G-ATSZ","t":"PA30"},"3C":{"r":"G-OVIN","t":"AC11"},"3D":{"r":"G-SIGN"},"43":{"r":"G-LINE","t":"AS55"},"44":{"r":"G-BOPA","t":"P28A"},"45":{"r":"G-OOTT","t":"AS50"},"46":{"r":"G-MRMJ","t":"AS65"},"48":{"r":"G-CHEY","t":"PA31"},"4A":{"r":"G-CGRI","t":"A109"},"4B":{"r":"G-OOBM","t":"B763"},"4C":{"r":"G-IMAC","t":"CL60"},"4D":{"r":"G-BOUL","t":"PA34"},"4E":{"r":"G-BOWE","t":"PA34"},"4F":{"r":"G-BSRR","t":"C182"},"50":{"r":"G-TCEE","t":"H500"},"51":{"r":"G-BGPA","t":"C182"},"57":{"r":"G-VBLU","t":"A346"},"58":{"r":"G-VWIN","t":"A346"},"59":{"r":"G-SVPN","t":"P32R"},"5A":{"r":"G-DBCG","t":"A319"},"5B":{"r":"G-DBCH","t":"A319"},"5D":{"r":"G-LGKO","t":"CL60"},"5E":{"r":"G-PREI","t":"PRM1"},"60":{"r":"G-CSBD","t":"P28B"},"61":{"r":"G-OTVI","t":"R44"},"62":{"r":"G-JBIZ","t":"C550"},"63":{"r":"G-BTZN"},"64":{"r":"G-PCOP","t":"BE20"},"68":{"r":"G-VVBK","t":"PA34"},"69":{"r":"G-EZIZ","t":"A319"},"6A":{"r":"G-CDNK","t":"LJ45"},"6B":{"r":"G-GLTT","t":"PA31"},"6C":{"r":"G-WAGS","t":"R44"},"6D":{"r":"G-SHAF","t":"R44"},"6E":{"r":"G-EVEV","t":"R44"},"70":{"r":"G-OSPY","t":"SR20"},"72":{"r":"G-SEEK","t":"C210"},"74":{"r":"G-AWUZ","t":"C172"},"77":{"r":"G-FULM","t":"S76"},"78":{"r":"G-CHIP","t":"P28A"},"7B":{"r":"G-BOUM","t":"PA34"},"81":{"r":"G-OPSS","t":"SR20"},"84":{"r":"G-ELAM","t":"PA30"},"85":{"r":"G-ARRD","t":"DR10"},"86":{"r":"G-CCVM","t":"RV7"},"87":{"r":"G-TTIE","t":"A321"},"89":{"r":"G-MEDL","t":"A321"},"8A":{"r":"G-PEJM","t":"P28A"},"8B":{"r":"G-EZAA","t":"A319"},"8C":{"r":"G-EZAB","t":"A319"},"8D":{"r":"G-EZAC","t":"A319"},"8E":{"r":"G-EZAD","t":"A319"},"8F":{"r":"G-EZAE","t":"A319"},"90":{"r":"G-EZAF","t":"A319"},"91":{"r":"G-EZAG","t":"A319"},"92":{"r":"G-EZAH","t":"A319"},"93":{"r":"G-KEEF","t":"AC11"},"94":{"r":"G-NWAA","t":"EC35"},"97":{"r":"G-FPLE","t":"BE20"},"98":{"r":"G-SIRA","t":"E135"},"9A":{"r":"G-ROUS","t":"PA34"},"9B":{"r":"G-VONJ","t":"PRM1"},"9C":{"r":"G-HAFT","t":"DA42"},"9E":{"r":"G-ORZA","t":"DA42"},"9F":{"r":"G-DMND","t":"DA42"},"A0":{"r":"G-DBCI","t":"A319"},"A2":{"r":"G-NJIM","t":"P32R"},"A3":{"r":"G-ODHB","t":"R44"},"A4":{"r":"G-IFTF","t":"H25B"},"AB":{"r":"G-GDSG","t":"A109"},"AC":{"r":"G-DASA","t":"FA50"},"AD":{"r":"G-EZAI","t":"A319"},"AE":{"r":"G-EZAJ","t":"A319"},"AF":{"r":"G-EZAK","t":"A319"},"B0":{"r":"G-EZAL","t":"A319"},"B1":{"r":"G-EZAN","t":"A319"},"B2":{"r":"G-EZAO","t":"A319"},"B3":{"r":"G-EZAP","t":"A319"},"B4":{"r":"G-EZAS","t":"A319"},"B5":{"r":"G-ENHP","t":"EN48"},"B6":{"r":"G-PPLC","t":"C560"},"B8":{"r":"G-CEGR","t":"BE20"},"B9":{"r":"G-BFBR","t":"P28A"},"BA":{"r":"G-FJET","t":"C550"},"BB":{"r":"G-GOAC","t":"PA34"},"BD":{"r":"G-JANI","t":"R44"},"BE":{"r":"G-BLXA","t":"TRIN"},"C2":{"r":"G-SASC","t":"BE20"},"C3":{"r":"G-SASD","t":"BE20"},"C4":{"r":"G-RUES","t":"HR10"},"C5":{"r":"G-IINI","t":"RV9"},"C7":{"r":"G-OLFT","t":"AC11"},"C8":{"r":"G-CJAG","t":"PRM1"},"CA":{"r":"G-HDEF","t":"R44"},"CB":{"r":"G-WCCI","t":"E135"},"CE":{"r":"G-SHAR","t":"C182"},"CF":{"r":"G-CDSR","t":"LJ45"},"D0":{"r":"G-IJAG","t":"C182"},"D1":{"r":"G-SYLJ","t":"E135"},"D2":{"r":"G-MATX","t":"PC12"},"D3":{"r":"G-GRND","t":"A109"},"D4":{"r":"G-CTCD","t":"DA42"},"D5":{"r":"G-OPFR","t":"DA42"},"D8":{"r":"G-CDSF","t":"DA40"},"D9":{"r":"G-KAFT","t":"DA40"},"DA":{"r":"G-LAFT","t":"DA40"},"DB":{"r":"G-OOGA","t":"GA7"},"DC":{"r":"G-JECJ","t":"DH8D"},"DE":{"r":"G-LACI","t":"C172"},"DF":{"r":"G-CDTA"},"E0":{"r":"G-RJXM","t":"E145"},"E1":{"r":"G-TESI","t":"SIRA"},"E2":{"r":"G-JETO","t":"C550"},"E5":{"r":"G-HIJK","t":"C421"},"E6":{"r":"G-ISLB","t":"JS32"},"E7":{"r":"G-ISLC","t":"JS32"},"E8":{"r":"G-ISLD","t":"JS32"},"E9":{"r":"G-XXRS","t":"GLEX"},"EA":{"r":"G-PRKR","t":"CL60"},"EB":{"r":"G-OBSM","t":"R44"},"ED":{"r":"G-RULE","t":"R44"},"F0":{"r":"G-RMBM","t":"R44"},"F1":{"r":"G-GEMM","t":"SR20"},"F2":{"r":"G-IFTE","t":"H25B"},"F3":{"r":"G-JETA","t":"C550"},"F4":{"r":"G-VUEZ","t":"C550"},"F6":{"r":"G-JECL","t":"DH8D"},"F7":{"r":"G-JECK","t":"DH8D"},"F9":{"r":"G-VANA","t":"GA8"},"FA":{"r":"G-BXOZ","t":"P28A"},"FC":{"r":"G-EMAA","t":"EC35"},"FD":{"r":"G-CDVB","t":"A109"},"FF":{"r":"G-CDVE","t":"A109"}}

1
public_html/db/400E.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/400F.json Normal file
View file

@ -0,0 +1 @@
{"00":{"r":"G-EZBF","t":"A319"},"01":{"r":"G-EZBG","t":"A319"},"02":{"r":"G-EZBH","t":"A319"},"03":{"r":"G-JOAL","t":"BE20"},"06":{"r":"G-CCVP","t":"BE58"},"08":{"r":"G-GSYJ","t":"DA42"},"0A":{"r":"G-NTWK","t":"AS55"},"0B":{"r":"G-VRED","t":"A346"},"10":{"r":"G-CLIF","t":"C42"},"11":{"r":"G-SARM","t":"C42"},"12":{"r":"G-TBEA","t":"C25A"},"14":{"r":"G-ARJU","t":"PA23"},"15":{"r":"G-DIAM","t":"DA40"},"18":{"r":"G-RASA","t":"DA42"},"1C":{"r":"G-ZUMO","t":"PC12"},"1F":{"r":"G-YBAA","t":"C172"},"20":{"r":"G-CEAU","t":"R44"},"21":{"r":"G-HDEW","t":"P32R"},"22":{"r":"G-MAJW","t":"JS41"},"25":{"r":"G-MAJX","t":"JS41"},"26":{"r":"G-MAJZ","t":"JS41"},"28":{"r":"G-MPSA","t":"BK17"},"29":{"r":"G-MPSB","t":"BK17"},"2A":{"r":"G-MPSC","t":"BK17"},"2B":{"r":"G-CDZT","t":"BE20"},"2C":{"r":"G-YEOM","t":"PA31"},"30":{"r":"G-SPYS","t":"R44"},"31":{"r":"G-TCXA","t":"A332"},"32":{"r":"G-SAIG","t":"R44"},"34":{"r":"G-HTRL","t":"PA34"},"36":{"r":"G-EEBB","t":"S76"},"3A":{"r":"G-NETB","t":"SR22"},"3C":{"r":"G-CBZX","t":"MCR1"},"3D":{"r":"G-FSEU","t":"BE20"},"3E":{"r":"G-ISSW","t":"EC55"},"3F":{"r":"G-ISSV","t":"EC55"},"40":{"r":"G-ISSU","t":"EC55"},"41":{"r":"G-MAMD","t":"BE20"},"42":{"r":"G-PDGK","t":"AS65"},"43":{"r":"G-FBEB","t":"E190"},"44":{"r":"G-JIBO","t":"JS31"},"46":{"r":"G-MAJY","t":"JS41"},"47":{"r":"G-VUEM","t":"C501"},"48":{"r":"G-RVMB","t":"RV9"},"4A":{"r":"G-PLAL","t":"EC35"},"4B":{"r":"G-BIMU","t":"S61"},"4C":{"r":"G-LSAE","t":"B752"},"4D":{"r":"G-BYTB","t":"TRIN"},"4E":{"r":"G-TAAB","t":"SR22"},"52":{"r":"G-CDXK","t":"DA42"},"53":{"r":"G-OWAR","t":"P28A"},"61":{"r":"G-GSSO","t":"GLF5"},"62":{"r":"G-BURT","t":"P28A"},"63":{"r":"G-VWEB","t":"A346"},"65":{"r":"G-BSPK","t":"C195"},"67":{"r":"G-DOLY","t":"C303"},"68":{"r":"G-MOOR","t":"TOBA"},"6A":{"r":"G-CCEJ","t":"EV97"},"6B":{"r":"G-RVCL","t":"RV6"},"6D":{"r":"G-CBMP","t":"C82R"},"6F":{"r":"G-BPGU","t":"P28A"},"70":{"r":"G-GUYS","t":"PA34"},"76":{"r":"G-XELA","t":"R44"},"77":{"r":"G-EEZR","t":"R44"},"78":{"r":"G-LOVB","t":"JS31"},"7B":{"r":"G-BEVG","t":"PA34"},"7F":{"r":"G-CDYK","t":"RJ85"},"82":{"r":"G-OCCY","t":"DA42"},"83":{"r":"G-OCCZ","t":"DA42"},"86":{"r":"G-WOFM","t":"A109"},"8C":{"r":"G-DAKM","t":"DA40"},"8D":{"r":"G-VEZE","t":"VEZE"},"8E":{"r":"G-AEDU","t":"DH90"},"91":{"r":"G-MEET","t":"LJ45"},"96":{"r":"G-CGFD","t":"CL60"},"99":{"r":"G-DBCJ","t":"A319"},"9A":{"r":"G-DBCK","t":"A319"},"9D":{"r":"G-GTJM","t":"EC20"},"A4":{"r":"G-WJCJ","t":"EC55"},"A5":{"r":"G-BHDX","t":"C172"},"A6":{"r":"G-INDC","t":"C303"},"A7":{"r":"G-KALS","t":"CL30"},"A8":{"r":"G-OLDK","t":"LJ45"},"A9":{"r":"G-SVSB","t":"C680"},"AA":{"r":"G-PKRG","t":"C560"},"AE":{"r":"G-AXZP","t":"PA23"},"AF":{"r":"G-CEDG","t":"R44"},"B1":{"r":"G-SAMJ","t":"P68"},"B5":{"r":"G-LLMW","t":"DA42"},"B6":{"r":"G-JKMH","t":"DA42"},"B7":{"r":"G-PETS","t":"DA42"},"B8":{"r":"G-OCCD","t":"DA40"},"B9":{"r":"G-OCCE","t":"DA40"},"BA":{"r":"G-JECP","t":"DH8D"},"BB":{"r":"G-BMKD","t":"BE9L"},"BC":{"r":"G-VVTV","t":"DA42"},"BD":{"r":"G-OCCF","t":"DA40"},"BE":{"r":"G-OCCG","t":"DA40"},"C1":{"r":"G-GFEA","t":"C172"},"C2":{"r":"G-CEFG","t":"B763"},"C3":{"r":"G-JVBP","t":"EV97"},"C4":{"r":"G-AZAB","t":"PA30"},"C5":{"r":"G-BHBG","t":"P32R"},"C7":{"r":"G-OUNI","t":"SR20"},"C8":{"r":"G-TAAC","t":"SR20"},"CB":{"r":"G-PURL","t":"P32R"},"CE":{"r":"G-HARK","t":"CL60"},"CF":{"r":"G-SFCJ","t":"C525"},"D2":{"r":"G-BMDK","t":"PA34"},"D3":{"r":"G-LEVO","t":"R44"},"D5":{"r":"G-CECX","t":"R44"},"D6":{"r":"G-GENI","t":"R44"},"D9":{"r":"G-JJAB","t":"JAB4"},"DA":{"r":"G-EZBI","t":"A319"},"DB":{"r":"G-EZBJ","t":"A319"},"DC":{"r":"G-EZBK","t":"A319"},"DD":{"r":"G-EZBL","t":"A319"},"DE":{"r":"G-EZBM","t":"A319"},"DF":{"r":"G-EZBN","t":"A319"},"E0":{"r":"G-EZBO","t":"A319"},"E1":{"r":"G-EZBP","t":"A319"},"E2":{"r":"G-EZBR","t":"A319"},"E3":{"r":"G-EZBT","t":"A319"},"E5":{"r":"G-ILLG","t":"R44"},"E6":{"r":"G-BRME","t":"P28A"},"E7":{"r":"G-EDCS","t":"BE40"},"E8":{"r":"G-ULES","t":"AS50"},"E9":{"r":"G-RJXN","t":"E145"},"EA":{"r":"G-RJXO","t":"E145"},"EB":{"r":"G-BUUR","t":"ATP"},"ED":{"r":"G-OMRH","t":"C550"},"EE":{"r":"G-SARV","t":"RV4"},"EF":{"r":"G-AIST","t":"SPIT"},"F0":{"r":"G-OCCH","t":"DA40"},"F1":{"r":"G-OCCK","t":"DA40"},"F2":{"r":"G-FDZA","t":"B738"},"F3":{"r":"G-FDZB","t":"B738"},"F4":{"r":"G-FDZD","t":"B738"},"F5":{"r":"G-OCCL","t":"DA40"},"F6":{"r":"G-OCCM","t":"DA40"},"F7":{"r":"G-OCCN","t":"DA40"},"F8":{"r":"G-TRUE","t":"H500"},"FD":{"r":"G-BHIB","t":"C182"},"FE":{"r":"G-FBEC","t":"E190"}}

1
public_html/db/401.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/405.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/406.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/4062.json Normal file
View file

@ -0,0 +1 @@
{"04":{"r":"G-LATE","t":"F2TH"},"06":{"r":"G-RSCU","t":"A109"},"08":{"r":"G-HEMZ","t":"A109"},"0B":{"r":"G-MACN","t":"SR22"},"0E":{"r":"G-CGGU","t":"CL60"},"10":{"r":"G-EDEO","t":"BE24"},"12":{"r":"G-EGVO","t":"F900"},"17":{"r":"G-DLAA","t":"C208"},"1A":{"r":"G-CGGW","t":"MT"},"1B":{"r":"G-STBA","t":"B77W"},"1C":{"r":"G-STBB","t":"B77W"},"1D":{"r":"G-STBC","t":"B77W"},"1E":{"r":"G-RIZA","t":"PRM1"},"22":{"r":"G-LCYJ","t":"E190"},"25":{"r":"G-HCFC","t":"A109"},"28":{"r":"G-EZTP","t":"A320"},"29":{"r":"G-EZTR","t":"A320"},"2A":{"r":"G-EZTS","t":"A320"},"2B":{"r":"G-EZTT","t":"A320"},"2C":{"r":"G-EZTU","t":"A320"},"2D":{"r":"G-EZTV","t":"A320"},"2E":{"r":"G-EZTW","t":"A320"},"2F":{"r":"G-EZTX","t":"A320"},"30":{"r":"G-LCYK","t":"E190"},"31":{"r":"G-LCYL","t":"E190"},"37":{"r":"G-TSLS","t":"GL5T"},"38":{"r":"G-JOEB","t":"SR22"},"39":{"r":"G-DTFL","t":"P46T"},"3A":{"r":"G-PBAT","t":"CRUZ"},"3E":{"r":"G-OMSA","t":"FDCT"},"3F":{"r":"G-CGJT","t":"CRUZ"},"40":{"r":"G-MCAN","t":"A109"},"41":{"r":"G-SHSI","t":"E135"},"43":{"r":"G-LUEK","t":"C182"},"45":{"r":"G-JONT","t":"SR22"},"48":{"r":"G-CGHD","t":"C172"},"4E":{"r":"G-EUYG","t":"A320"},"4F":{"r":"G-EUYH","t":"A320"},"50":{"r":"G-EUYI","t":"A320"},"54":{"r":"G-CGID","t":"PA31"},"55":{"r":"G-CGHI","t":"F2TH"},"66":{"r":"G-LEAX","t":"C56X"},"67":{"r":"G-SONE","t":"C25A"},"6B":{"r":"G-HUBY","t":"E135"},"6D":{"r":"G-CGHW","t":"CRUZ"},"6E":{"r":"G-GKRC","t":"C180"},"70":{"r":"G-ROKO","t":"NG4"},"78":{"r":"G-CGHY","t":"H25B"},"79":{"r":"G-LCYM","t":"E190"},"7A":{"r":"G-YROZ","t":"CDUS"},"7D":{"r":"G-OMSV","t":"BE20"},"80":{"r":"G-CGLR","t":"CRUZ"},"87":{"r":"G-HAYY","t":"CRUZ"},"89":{"r":"G-ISCD","t":"CRUZ"},"8C":{"r":"G-JOHA","t":"SR20"},"8F":{"r":"G-COBM","t":"BE30"},"90":{"r":"G-COBI","t":"B350"},"92":{"r":"G-CGIL","t":"CRUZ"},"95":{"r":"G-EMSA","t":"CRUZ"},"A3":{"r":"G-OOBP","t":"B752"},"A4":{"r":"G-OOBN","t":"B752"},"A6":{"r":"G-PLAR","t":"RV9"},"B0":{"r":"G-REAF","t":"JAB4"},"B1":{"r":"G-EVPH"},"B6":{"r":"G-XCRJ","t":"RV9"},"B7":{"r":"G-KANL","t":"GLEX"},"B8":{"r":"G-PVEL","t":"GL5T"},"B9":{"r":"G-WINR","t":"R22"},"BA":{"r":"G-CKSC","t":"CRUZ"},"BF":{"r":"G-DAVM","t":"CP10"},"C0":{"r":"G-CGJA","t":"CL60"},"C1":{"r":"G-CGLZ","t":"ULAC"},"C9":{"r":"G-ZMED","t":"LJ35"},"CD":{"r":"G-CGJH","t":"ULAC"},"D1":{"r":"G-KUIP","t":"CRUZ"},"D2":{"r":"G-POLA","t":"EC35"},"D4":{"r":"G-CGMF","t":"C56X"},"D5":{"r":"G-LSAK","t":"B752"},"D8":{"r":"G-TVHB","t":"EC35"},"DC":{"r":"G-CGJS","t":"CRUZ"},"E0":{"r":"G-OBOF","t":"GX"},"E1":{"r":"G-RMMA","t":"GL5T"},"E2":{"r":"G-CGJN","t":"RV7"},"E3":{"r":"G-VKGO","t":"E50P"},"E5":{"r":"G-LOOC","t":"C172"},"E9":{"r":"G-CGKY","t":"C182"},"EC":{"r":"G-SCVF","t":"CRUZ"},"EF":{"r":"G-XXZZ","t":"LJ60"},"F3":{"r":"G-CGMP","t":"CRUZ"},"F6":{"r":"G-JDRD","t":"ULAC"},"FF":{"r":"G-ZOOG","t":"P06T"}}

1
public_html/db/42.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/43.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/43C.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/44.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/45.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/47.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/48.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/49.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/4B.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/4B1.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/4C.json Normal file
View file

@ -0,0 +1 @@
{"0188":{"r":"YU-AMI","t":"IL76"},"01A3":{"r":"YU-AND","t":"B733"},"01A5":{"r":"YU-ANF","t":"B733"},"01A8":{"r":"YU-ANI","t":"B733"},"01A9":{"r":"YU-ANJ","t":"B733"},"01AA":{"r":"YU-ANK","t":"B733"},"01AB":{"r":"YU-ANL","t":"B733"},"01AF":{"r":"YU-ANP","t":"B732"},"01B5":{"r":"YU-ANV","t":"B733"},"01B6":{"r":"YU-ANW","t":"B733"},"01CD":{"r":"YU-AON","t":"B733"},"01D2":{"r":"YU-AOS","t":"B734"},"01D4":{"r":"YU-AOU","t":"B733"},"01D5":{"r":"YU-AOV","t":"B733"},"01E0":{"r":"YU-APA","t":"A319"},"01E1":{"r":"YU-APB","t":"A319"},"01E2":{"r":"YU-APC","t":"A319"},"01E3":{"r":"YU-APD","t":"A319"},"01E4":{"r":"YU-APE","t":"A319"},"01E5":{"r":"YU-APF","t":"A319"},"01E6":{"r":"YU-APG","t":"A320"},"01E7":{"r":"YU-APH","t":"A320"},"01E8":{"r":"YU-API","t":"A319"},"01E9":{"r":"YU-APJ","t":"A319"},"05A0":{"r":"YU-BNA","t":"FA50"},"0639":{"r":"YU-BRZ","t":"LJ31"},"0646":{"r":"YU-BSG","t":"C550"},"064C":{"r":"YU-BSM","t":"C550"},"0653":{"r":"YU-BST","t":"C525"},"0661":{"r":"YU-BTB","t":"C550"},"066C":{"r":"YU-BTM","t":"C650"},"066D":{"r":"YU-BTN","t":"C25B"},"0694":{"r":"YU-BUU","t":"C25A"},"072C":{"r":"YU-BZM","t":"C56X"},"0739":{"r":"YU-BZZ","t":"C550"},"1C93":{"r":"YU-HET","t":"GAZL"},"1C98":{"r":"YU-HEY","t":"GAZL"},"1D82":{"r":"YU-HMC","t":"GAZL"},"3274":{"r":"YU-MTU","t":"C525"},"498A":{"r":"YU-SMK","t":"C56X"},"49E0":{"r":"YU-SPA","t":"C56X"},"49E1":{"r":"YU-SPB","t":"C56X"},"49E2":{"r":"YU-SPC","t":"C56X"},"49EC":{"r":"YU-SPM","t":"C510"},"4AAB":{"r":"YU-SVL","t":"C56X"},"800A":{"r":"5B-DAW","t":"A320"},"800D":{"r":"5B-DBA","t":"A320"},"800E":{"r":"5B-DBB","t":"A320"},"800F":{"r":"5B-DBC","t":"A320"},"8012":{"r":"5B-DBD","t":"A320"},"801E":{"r":"5B-DBO","t":"A319"},"801F":{"r":"5B-DBP","t":"A319"},"8020":{"r":"5B-DBS","t":"A332"},"8021":{"r":"5B-DBT","t":"A332"},"8022":{"r":"5B-DBU","t":"B738"},"8023":{"r":"5B-DBV","t":"B738"},"8025":{"r":"5B-DBX","t":"B738"},"802D":{"r":"5B-DBZ","t":"B738"},"8031":{"r":"5B-CKO","t":"F2TH"},"8032":{"r":"5B-DBR","t":"B738"},"8037":{"r":"5B-DCF","t":"A319"},"803A":{"r":"5B-DCG","t":"A320"},"803B":{"r":"5B-DCH","t":"A320"},"803D":{"r":"5B-DCJ","t":"A320"},"803E":{"r":"5B-DCK","t":"A320"},"803F":{"r":"5B-DCL","t":"A320"},"8040":{"r":"5B-DCM","t":"A320"},"8046":{"r":"5B-DCN","t":"A319"},"804C":{"r":"5B-DCO","t":"A321"},"804D":{"r":"5B-DCP","t":"A321"},"C0D5":{"r":"TF-BBD","t":"B733"},"C0D9":{"r":"TF-BBE","t":"B733"},"C0DA":{"r":"TF-BBF","t":"B733"},"C0DB":{"r":"TF-BBG","t":"B733"},"C0DC":{"r":"TF-BBH","t":"B734"},"C0DD":{"r":"TF-TNM","t":"B734"},"C0DE":{"r":"TF-BBI","t":"B733"},"C0DF":{"r":"TF-BBJ","t":"B734"},"C1A2":{"r":"TF-ELF","t":"A306"},"C1AC":{"r":"TF-ELK","t":"A306"},"C1BC":{"r":"TF-NPA","t":"J328"},"C264":{"r":"TF-FID","t":"B752"},"C265":{"r":"TF-FIE","t":"B752"},"C266":{"r":"TF-CIB","t":"B752"},"C267":{"r":"TF-LLX","t":"B752"},"C268":{"r":"TF-FIC","t":"B752"},"C269":{"r":"TF-FIA","t":"B752"},"C26A":{"r":"TF-FIY","t":"B752"},"C26B":{"r":"TF-FIZ","t":"B752"},"C26C":{"r":"TF-FIK","t":"B752"},"C26D":{"r":"TF-IST","t":"B752"},"C26F":{"r":"TF-FIW","t":"B752"},"C270":{"r":"TF-ISF","t":"B752"},"C271":{"r":"TF-ISK","t":"B752"},"C272":{"r":"TF-ISD","t":"B752"},"C273":{"r":"TF-FIT","t":"B752"},"C274":{"r":"TF-FIS","t":"B752"},"C277":{"r":"TF-FIK","t":"B752"},"C29E":{"r":"TF-FII","t":"B752"},"C29F":{"r":"TF-FIH","t":"B752"},"C2A2":{"r":"TF-FIJ","t":"B752"},"C2A3":{"r":"TF-FIN","t":"B752"},"C2A5":{"r":"TF-FIR","t":"B752"},"C2A6":{"r":"TF-FIO","t":"B752"},"C2A7":{"r":"TF-FIP","t":"B752"},"C2AC":{"r":"TF-FIG","t":"B752"},"C2AD":{"r":"TF-FIV","t":"B752"},"C2AE":{"r":"TF-FIX","t":"B753"},"C2C4":{"r":"TF-FIB","t":"B763"},"C2C5":{"r":"TF-FIU","t":"B752"},"C2C9":{"r":"TF-MIK","t":"J328"},"C2CC":{"r":"TF-NPB","t":"J328"},"C334":{"r":"TF-JMO","t":"F50"},"C394":{"r":"TF-ATX","t":"B742"},"C3B4":{"r":"TF-ARJ","t":"B742"},"C3B7":{"r":"TF-ARM","t":"B742"},"C3BD":{"r":"TF-ARP","t":"B742"},"C3C8":{"r":"TF-AME","t":"B743"},"C3C9":{"r":"TF-AMI","t":"B744"},"C3CD":{"r":"TF-AMJ","t":"B743"},"C3D2":{"r":"TF-AMP","t":"B744"},"C3D6":{"r":"TF-AAA","t":"B742"},"C3D7":{"r":"TF-AAB","t":"B742"},"C3D8":{"r":"TF-AMS","t":"B744"},"C3D9":{"r":"TF-AMU","t":"B744"},"C3DA":{"r":"TF-AMT","t":"B744"},"C3DB":{"r":"TF-AMV","t":"B744"},"C3DC":{"r":"TF-AMX","t":"B744"},"C3DD":{"r":"TF-NAC","t":"B744"},"C3DE":{"r":"TF-NAD","t":"B744"},"C3E0":{"r":"TF-AMY","t":"B744"},"C3E1":{"r":"TF-AMZ","t":"B744"},"C3E2":{"r":"TF-AAC","t":"B744"},"C3E3":{"r":"TF-AAD","t":"B744"},"C3E4":{"r":"TF-AAE","t":"B744"},"C3E6":{"r":"TF-AMF","t":"B744"},"C3E8":{"r":"TF-AML","t":"B744"},"C468":{"r":"TF-SIF","t":"DH8C"},"C47B":{"r":"TF-JXG","t":"B737"},"C47D":{"r":"TF-JXI","t":"B738"},"C4B9":{"r":"TF-WOW","t":"A320"},"C4C6":{"r":"TF-MOM","t":"A321"},"C4C7":{"r":"TF-DAD","t":"A321"},"C4D3":{"r":"TF-BRO","t":"A320"},"C4D4":{"r":"TF-SIS","t":"A320"},"children":["4CA"]}

1
public_html/db/4CA.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/5.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/6.json Normal file
View file

@ -0,0 +1 @@
{"00007":{"r":"EK-32011","t":"A319"},"0000C":{"r":"EK32008","t":"A320"},"00013":{"r":"EK-11001","t":"AN12"},"0002F":{"r":"EK-12104","t":"AN12"},"0003C":{"r":"EK-RA01","t":"A319"},"0004A":{"r":"EK-32007","t":"A319"},"00059":{"r":"EK-95015","t":"SU95"},"0005A":{"r":"EK-95016","t":"SU95"},"00076":{"r":"EK-74723","t":"B742"},"00079":{"r":"EK-74798","t":"B742"},"00087":{"r":"EK-74799","t":"B742"},"0009D":{"r":"EK-73775","t":"B735"},"0009F":{"r":"EK-73772","t":"B735"},"00803":{"r":"4K-AZ03","t":"A319"},"00804":{"r":"4K-AZ04","t":"A319"},"00805":{"r":"4K-AZ05","t":"A319"},"00806":{"r":"4K-AI06","t":"GLF5"},"00808":{"r":"4K-MEK8","t":"GLF5"},"00826":{"r":"4K-AZ38","t":"B752"},"0082B":{"r":"4K-AZ43","t":"B752"},"00836":{"r":"4K-AZ54","t":"A320"},"00838":{"r":"4K-AZ56","t":"AN12"},"0084D":{"r":"4K-AZ77","t":"A320"},"0084E":{"r":"4K-AZ78","t":"A320"},"0084F":{"r":"4K-AZ79","t":"A320"},"00850":{"r":"4K-AZ80","t":"A320"},"00851":{"r":"4K-AZ81","t":"B763"},"00852":{"r":"4K-AZ82","t":"B763"},"00853":{"r":"4K-AZ83","t":"A320"},"00854":{"r":"4K-AZ84","t":"A320"},"00858":{"r":"4K-AZ88","t":"GALX"},"008D0":{"r":"4K-AZ208","t":"G280"},"00918":{"r":"4K-AZ280","t":"G280"},"00B20":{"r":"4K-800","t":"B744"},"00B21":{"r":"4K-SW888","t":"B744"},"00B70":{"r":"4K-SW880","t":"B763"},"00B78":{"r":"4K-AZ888","t":"GLF4"},"00BB9":{"r":"4K-SW808","t":"B763"},"00BBE":{"r":"4K-SW008","t":"B744"},"00BC4":{"r":"4K-AI88","t":"GLF6"},"00BE8":{"r":"4K-BAKU","t":"B763"},"01097":{"r":"EX-37008"},"010F2":{"r":"EX-32001","t":"A320"},"010F4":{"r":"EX-37001","t":"B733"},"010F9":{"r":"EX-73401","t":"B734"},"01839":{"r":"EZ-A779","t":"B77L"},"0183A":{"r":"EZ-A778","t":"B77L"},"0183B":{"r":"EZ-A017","t":"B738"},"0183C":{"r":"EZ-A016","t":"B738"},"0183D":{"r":"EZ-A015","t":"B738"},"01842":{"r":"EZ-A010","t":"B752"},"01846":{"r":"EZ-A011","t":"B752"},"01847":{"r":"EZ-A012","t":"B752"},"01849":{"r":"EZ-A014","t":"B752"},"01854":{"r":"EZ-A106","t":"B712"},"01855":{"r":"EZ-A107","t":"B712"},"01858":{"r":"EZ-A004","t":"B738"},"01859":{"r":"EZ-A005","t":"B738"},"0185A":{"r":"EZ-A007","t":"B737"},"0185E":{"r":"EZ-A006","t":"B737"},"0185F":{"r":"EZ-A008","t":"B737"},"01860":{"r":"EZ-A009","t":"B737"},"01861":{"r":"EZ-A777","t":"B772"},"80001":{"r":"A5-RGF","t":"A319"},"80002":{"r":"A5-RGG","t":"A319"},"82209":{"r":"JU-1011","t":"B763"},"8220A":{"r":"JU-1012","t":"B763"},"83037":{"r":"UP-B5701","t":"B752"},"83065":{"r":"UP-Y4204","t":"YK42"},"83088":{"r":"UP-I7620","t":"IL76"},"830A5":{"r":"UP-A2001","t":"A320"},"830BD":{"r":"UP-CS302","t":"C25B"},"830C2":{"r":"UP-K3501","t":"B350"},"830ED":{"r":"UP-A3001","t":"A332"},"830FE":{"r":"UP-K3502","t":"B350"},"831E8":{"r":"UP-T5409","t":"T154"}}

1
public_html/db/7.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/71.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/78.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/7C.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/8.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/89.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/9.json Normal file
View file

@ -0,0 +1 @@
{}

1
public_html/db/A.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A0.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A1.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A3.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A4.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A6.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A7.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A8.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/A9.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AA.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AB.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AC.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AD.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AE.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/AE0.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/B.json Normal file
View file

@ -0,0 +1 @@
{}

1
public_html/db/C.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/D.json Normal file
View file

@ -0,0 +1 @@
{}

1
public_html/db/E.json Normal file

File diff suppressed because one or more lines are too long

1
public_html/db/F.json Normal file
View file

@ -0,0 +1 @@
{"A0001":{"r":"FAV0001","t":"A319"}}

5
public_html/db/README Normal file
View file

@ -0,0 +1,5 @@
This directory contains static data on some aircraft (registrations, etc)
originally derived from Virtual Radar Server's BasicAircraftLookup.sqb
(see tools/vrs-basicaircraft-to-json.py). As that database is no longer being
updated, the data is directly included here rather than periodically refreshing
from the online copy.

View file

@ -252,10 +252,6 @@ static int doGlobalCPR(struct aircraft *a, struct modesMessage *mm, uint64_t now
return result;
}
// for mlat results, accept it unquestioningly
if (mm->bFlags & MODES_ACFLAGS_FROM_MLAT)
return result;
// check max range
if (Modes.maxRange > 0 && (Modes.bUserFlags & MODES_USER_LATLON_VALID)) {
double range = greatcircle(Modes.fUserLat, Modes.fUserLon, *lat, *lon);
@ -270,6 +266,10 @@ static int doGlobalCPR(struct aircraft *a, struct modesMessage *mm, uint64_t now
}
}
// for mlat results, skip the speed check
if (mm->bFlags & MODES_ACFLAGS_FROM_MLAT)
return result;
// check speed limit
if ((a->bFlags & MODES_ACFLAGS_LATLON_VALID) && a->pos_nuc >= *nuc && !speed_check(a, mm, *lat, *lon, now, surface)) {
Modes.stats_current.cpr_global_speed_checks++;