ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/schmorpforge/genpage
(Generate patch)

Comparing cvsroot/schmorpforge/genpage (file contents):
Revision 1.115 by root, Thu Dec 4 20:30:09 2014 UTC vs.
Revision 1.128 by root, Fri Apr 19 19:48:08 2019 UTC

200 200
201<div class='section section-resources'> 201<div class='section section-resources'>
202<h2>Resources</h2> 202<h2>Resources</h2>
203<table class='resources'> 203<table class='resources'>
204EOF 204EOF
205
206 for (grep /^res/, @args) {
207 /^resource\(([^,]+),{{(.*?)}}\)$/ or die "$_: no resource\n";
208 print <<EOF;
209<tr><td><tt class="icon">$1</tt></td><td class='rr'>$2</li></tr>
210EOF
211 }
212
213 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='https://ftpmirror.gnu.org/gnu/$name/'>File Releases (GNU)</a></td></tr>\n"
214 if grep /dist-gnu/, @args;
215 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://dist.schmorp.de/$name/'>File Releases</a></td></tr>\n"
216 if grep /dist(?!-)/, @args;
217 print "<tr><td><tt class='icon'>CPAN</tt></td><td class='rr'><a href='http://www.cpan.org/modules/by-authors/id/M/ML/MLEHMANN/'>File Releases (CPAN)</a></td></tr>\n"
218 if grep /cpan$/, @args;
219
205 if (grep /git/, @args) { 220 if (grep /git/, @args) {
206 print <<EOF; 221 print <<EOF;
207<tr><td><tt class="icon">GIT</tt></td><td class='rr'><a href='http://git.ta-sa.org/git/$name/'>Browsable GIT repository '$name'</a></li></tr> 222<tr><td><tt class="icon">GIT</tt></td><td class='rr'><a href='http://git.ta-sa.org/git/$name/'>Browsable GIT repository '$name'</a></li></tr>
208<tr><td><tt class="icon">GIT</tt></td><td class='rr'>Read-only GIT checkout: <tt>&#160;git-clone http://git.ta-sa.org/$name.git</tt> 223<tr><td><tt class="icon">GIT</tt></td><td class='rr'>Read-only GIT checkout: <tt>&#160;git-clone http://git.ta-sa.org/$name.git</tt>
209</td></tr> 224</td></tr>
211 <tt>cvs -d ":ext;CVS_SERVER=git-cvsserver:USER\@ruth.plan9.de/gitroot/$name.git" co -d $name master</tt> 226 <tt>cvs -d ":ext;CVS_SERVER=git-cvsserver:USER\@ruth.plan9.de/gitroot/$name.git" co -d $name master</tt>
212</td></tr> --> 227</td></tr> -->
213EOF 228EOF
214 } else { 229 } else {
215 my $modules = $name; 230 my $modules = $name;
231
232 for (@args) {
216 $modules = "$1" if grep /modules\((.*)\)/, @args; 233 $modules = "$1" if /modules\((.*)\)/;
234 }
217 235
236 if (length $modules) {
218 print <<EOF; 237 print <<EOF;
219<tr><td><tt class="icon">CVS</tt></td><td class='rr'><a href='http://cvs.schmorp.de/$name'>Browsable CVS module '$name'</a></td></tr> 238<tr><td><tt class="icon">CVS</tt></td><td class='rr'><a href='http://cvs.schmorp.de/$name'>Browsable CVS module '$name'</a></td></tr>
220<tr><td><tt class="icon">CVS</tt></td><td class='rr'>Anonymous CVS: 239<tr><td><tt class="icon">CVS</tt></td><td class='rr'>Anonymous CVS:
221 <tt>&#160;cvs -z3 -d :pserver:anonymous\@cvs.schmorp.de/schmorpforge co $modules</tt> 240 <tt>&#160;cvs -z3 -d :pserver:anonymous\@cvs.schmorp.de/schmorpforge co $modules</tt>
222 241
223 <small>
224
225<!--
226 <p>The warning
227 <b>cvs checkout: warning: cannot write to history file /schmorpforge/CVSROOT/history: Permission denied</b>
228 is expected and harmless, just ignore it. It simply means you have no write access to the repository.
229 </p>
230-->
231
232<!--
233 <p>The CVS server moved again on 2008-02-21, you can use the following
234 (untested) snippet to update your CVS checkout. Run it in the top level
235 checked out directory:</ br>
236
237 <pre>
238find . -name CVS | xargs -I% find % -name Root |
239 xargs perl -i -pe 's%:pserver:anonymous\\\@cvs.schmorp.de:636/schmorpforge%:pserver:anonymous\\\@cvs.schmorp.de:/schmorpforge%'</pre>
240 </p>
241-->
242
243 </small>
244
245</td></tr> 242</td></tr>
246EOF 243EOF
244 }
247 } 245 }
248 246
249 my @irc; 247 my @irc;
250 248
251 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://dist.schmorp.de/$name/'>File Releases</a></td></tr>\n" 249 my $perlname = $name =~ s/-/::/gr;
252 if grep /dist(?!-)/, @args; 250
253 print "<tr><td><tt class='icon'>FILE</tt></td><td class='rr'><a href='http://ftp.gnu.org/gnu/$name/'>File Releases</a></td></tr>\n" 251 print "<tr><td><tt class='icon'>METACPAN</tt></td><td class='rr'><a href='https://metacpan.org/pod/$perlname'>MetaCPAN page</a></td></tr>\n"
254 if grep /dist-gnu/, @args;
255 print "<tr><td><tt class='icon'>CPAN</tt></td><td class='rr'><a href='http://www.cpan.org/modules/by-authors/id/M/ML/MLEHMANN/'>File Releases (CPAN)</a></td></tr>\n"
256 if grep /cpan$/, @args; 252 if grep /cpan$/, @args;
257 print "<tr><td><tt class='icon'>CPAN</tt></td><td class='rr'><a href='http://www.cpan.org/modules/by-authors/id/E/EL/ELMEX/'>File Releases (CPAN)</a></td></tr>\n"
258 if grep /cpan-elmex/, @args;
259 for (@args) { 253 for (@args) {
260 if (/list\((.*?)\)/) { 254 if (/list\((.*?)\)/) {
261 print "<tr><td><tt class='icon'>LIST</tt></td><td class='rr'><a href='http://lists.schmorp.de/mailman/listinfo/" . ($1 || $name) . "'>Mailing List '" . ($1 || $name) . "'</a></td></tr>\n"; 255 print "<tr><td><tt class='icon'>LIST</tt></td><td class='rr'><a href='http://lists.schmorp.de/mailman/listinfo/" . ($1 || $name) . "'>Mailing List '" . ($1 || $name) . "'</a></td></tr>\n";
262 } 256 }
263 if (/irc\((.*?)\)/) { 257 if (/irc\((.*?)\)/) {
271 } 265 }
272 266
273 print "</table>"; 267 print "</table>";
274 268
275 if (my @files = grep $_, map /(cvs-co|cvs-pod|git-pod|git-co)\((\S+)\)/ && [$1, $2], @args) { 269 if (my @files = grep $_, map /(cvs-co|cvs-pod|git-pod|git-co)\((\S+)\)/ && [$1, $2], @args) {
276 print "</div><div class='section section-documents'><h2>Additional Documents</h2><table class='resources'>"; 270 print "</div><div class='section section-documents'><h2>Package Documention</h2><table class='resources'>";
277 271
278 for (@files) { 272 for (@files) {
279 my ($type, $arg) = @$_; 273 my ($type, $arg) = @$_;
280 274
281 if ($type eq "cvs-co") { 275 if ($type eq "cvs-co") {
339 333
340print "</table></div>"; 334print "</table></div>";
341ftr; 335ftr;
342 336
343__DATA__ 337__DATA__
338stableperl list(perl) modules()
339 Stableperl is a fork, or a branch, of the official perl with the goal
340 of providing stability and compatibility. See <a
341 href="http://stableperl.schmorp.de/">stableperl.schmorp.de</a> for
342 details.
343
344 You can also look at the <a href="http://schplog.schmorp.de/2015-06-06-stableperl-faq.html">Canary::Stability and Stableperl FAQ</a>, and you can download
345 releases at <a href="http://stableperl.schmorp.de/dist/">http://stableperl.schmorp.de/dist/</a>.
346
347Canary-Stability cpan cvs-pod(Stability.pm,) cvs-co(Changes) list(perl)
348 A little bird that doubles as an early warning system.
349
350 Wasn't early but rather late, but at least it is warning now.
351
344rxvt-unicode dist list(rxvt-unicode) cvs-pod(doc/rxvt.1.pod,) cvs-pod(doc/rxvt.7.pod,FAQ) cvs-pod(src/urxvt.pm,Perl) cvs-co(Changes) irc(rxvt) irc(rxvtdev) 352rxvt-unicode dist list(rxvt-unicode) cvs-pod(doc/rxvt.1.pod,) cvs-pod(doc/rxvt.7.pod,FAQ) cvs-pod(src/urxvt.pm,Perl) cvs-co(Changes) irc(rxvt) irc(rxvtdev)
345 rxvt-unicode is a fork of the well known terminal emulator rxvt. 353 rxvt-unicode is a fork of the well known terminal emulator rxvt.
346 354
347 <p>If you have a problem, please have a look at the 355 <p>If you have a problem, please have a look at the
348 <a href="http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.html">FAQ</a> 356 <a href="http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.html">FAQ</a>
349 <em>first</em>.</p> 357 <em>first</em>.</p>
403libptytty dist list(rxvt-unicode) cvs-pod(doc/libptytty.3.pod) cvs-co(Changes) 411libptytty dist list(rxvt-unicode) cvs-pod(doc/libptytty.3.pod) cvs-co(Changes)
404 libptytty is an offspring of rxvt-unicode that handles pty/tty/utmp/wtmp/lastlog handling 412 libptytty is an offspring of rxvt-unicode that handles pty/tty/utmp/wtmp/lastlog handling
405 in mostly OS-independent ways, so it's less of a hassle for you :) 413 in mostly OS-independent ways, so it's less of a hassle for you :)
406 414
407vt102 list(perl) cvs-co(vt102) 415vt102 list(perl) cvs-co(vt102)
408 <code>vt102</code> is a vt100/102/131 hardware simulator, implemernting 416 <code>vt102</code> is a vt100/102/131 hardware simulator, implementing
409 practical and 100% compatible DEC VT terminal "emulation". 417 practical and 100% compatible DEC VT terminal "emulation".
410 418
411 Most terminal emulators nowadays strive to emulate a DEC VT102 419 Most terminal emulators nowadays strive to emulate a DEC VT102
412 terminal (even those claiming to emulate a VT100 usually mean 420 terminal (even those claiming to emulate a VT100 usually mean
413 VT102). Unfortunately, even though there are some VT100 simulators, 421 VT102). Unfortunately, even though there are some VT100 simulators,
415 compatibility with the real device. 423 compatibility with the real device.
416 424
417 Thanks to this simulator, one can now test how the "real" VT102 behaves, 425 Thanks to this simulator, one can now test how the "real" VT102 behaves,
418 and as free extra, it also simulates DEC VT100 and DEC VT131 terminals. 426 and as free extra, it also simulates DEC VT100 and DEC VT131 terminals.
419 427
420 ROMs are included - a standard Perl 5.10+ installation plus the 428 ROMs are included - a standard Perl 5.10+ installation, the
421 L<IO::Pty> module are required to run the script, and rxvt-unicode, xterm 429 <code>stty</code> utility and the <code>IO::Pty</code> module are
430 required to run the script, and rxvt-unicode, xterm or a similar terminal
422 or a similar terminal emulation is required to have display/keyboard 431 emulation is required to have display/keyboard support.
423 support.
424 432
425gtkbfc cvs-pod(README) 433gtkbfc cvs-pod(README)
426 Gtk+ bash file chooser replacement. 434 Gtk+ bash file chooser replacement.
427 435
428 <b>gtkbfc</b> is a hack that replaces the dreaded, slow and hard-to-use GTK+ 436 <b>gtkbfc</b> is a hack that replaces the dreaded, slow and hard-to-use GTK+
771 A perl module implementing an AnyEvent client for the (pre-xml) GPSD protocol. 779 A perl module implementing an AnyEvent client for the (pre-xml) GPSD protocol.
772 780
773AnyEvent-Porttracker cpan cvs-pod(Porttracker.pm,) cvs-pod(Porttracker/protocol.pod,api-protocol) list(anyevent) irc(anyevent) 781AnyEvent-Porttracker cpan cvs-pod(Porttracker.pm,) cvs-pod(Porttracker/protocol.pod,api-protocol) list(anyevent) irc(anyevent)
774 A perl module implementing a client for the Porttracker/PortIQ API protocol. 782 A perl module implementing a client for the Porttracker/PortIQ API protocol.
775 783
784AnyEvent-ZabbixSender cpan cvs-pod(ZabbixSender.pm,) list(anyevent) irc(anyevent)
785 A perl module implementing an AnyEvent client for the zabbix_sender protocol, used to submit
786 monitoring data items to a zabbix server or proxy.
787
776AnyEvent-SNMP cpan cvs-pod(SNMP.pm,) list(anyevent) irc(anyevent) 788AnyEvent-SNMP cpan cvs-pod(SNMP.pm,) list(anyevent) irc(anyevent)
777 A perl module that transparently integrates Net::SNMP into AnyEvent. 789 A perl module that transparently integrates Net::SNMP into AnyEvent.
778 790
779 In addition to making Net::SNMP AnyEvent-aware, this module also 791 In addition to making Net::SNMP AnyEvent-aware, this module also
780 implements advanced rate-limiting that enables you to query many devices 792 implements advanced rate-limiting that enables you to query many devices
802 814
803 The caller is responsible for authentication management, cookies (if 815 The caller is responsible for authentication management, cookies (if
804 the simplistic implementation in this module doesn't suffice), referer 816 the simplistic implementation in this module doesn't suffice), referer
805 and other high-level protocol details for which this module offers only 817 and other high-level protocol details for which this module offers only
806 limited support. 818 limited support.
819
820AnyEvent-WebDriver cpan cvs-pod(WebDriver.pm,) cvs-co(Changes) list(anyevent) irc(anyevent)
821 A thin wrapper around the <a href="https://www.w3.org/TR/webdriver1/">W3C WebDriver</a> protocol
822 (<a href="https://www.seleniumhq.org/">"Selenium"</a> browser remote control)
823
824 This module implements a relatively thin but easy to use wrapper around the
825 raw <a href="https://www.w3.org/TR/webdriver1/">W3C WebDriver</a> protocol
826 (think <a href="https://www.seleniumhq.org/">"Selenium"</a>, that let's you remote control
827 popular browsers such as Firefox, Chromium, Safari, IE and the like.
807 828
808AnyEvent-MP cpan cvs-pod(MP.pm,) cvs-pod(MP/Intro.pod,Introduction/Tutorial) cvs-pod(bin/aemp,Config-Uility) cvs-pod(MP/Kernel.pm) cvs-pod(MP/Global.pm) cvs-pod(MP/Transport.pm) cvs-pod(MP/DataConn.pm) cvs-pod(MP/LogCatcher.pm) cvs-co(Changes) list(anyevent) irc(anyevent) 829AnyEvent-MP cpan cvs-pod(MP.pm,) cvs-pod(MP/Intro.pod,Introduction/Tutorial) cvs-pod(bin/aemp,Config-Uility) cvs-pod(MP/Kernel.pm) cvs-pod(MP/Global.pm) cvs-pod(MP/Transport.pm) cvs-pod(MP/DataConn.pm) cvs-pod(MP/LogCatcher.pm) cvs-co(Changes) list(anyevent) irc(anyevent)
809 This Perl module (-family) implements a simple message passing framework for Perl. 830 This Perl module (-family) implements a simple message passing framework for Perl.
810 831
811 Despite its simplicity, you can securely message other processes running 832 Despite its simplicity, you can securely message other processes running
858 allows easy decoding of multipart mime, uuencode and a whole lot of 879 allows easy decoding of multipart mime, uuencode and a whole lot of
859 differently encoded messages. You basically throw files at it, and 880 differently encoded messages. You basically throw files at it, and
860 it extracts the files in them. This module is used by the popular <a 881 it extracts the files in them. This module is used by the popular <a
861 href="www.amavis.org">amavis virus scanner</a>. 882 href="www.amavis.org">amavis virus scanner</a>.
862 883
884Convert-BER-XS cpan cvs-pod(XS.pm,) cvs-co(Changes)
885 A <em>very</em> low level BER/DER decoder and encoder library.
886
887 This BER en-/decoder is tuned for speed and low memory usage,
888 representing all BER values as tuples (perl-arrays) consisting of (class,
889 tag, constructed, data).
890
863Coro cpan cvs-co(Changes) cvs-pod(Coro.pm,) cvs-pod(Coro/AIO.pm,Coro::AIO) cvs-pod(Coro/AnyEvent.pm,Coro::AnyEvent) cvs-pod(Coro/BDB.pm,Coro::BDB) cvs-pod(Coro/Channel.pm,Coro::Channel) cvs-pod(Coro/Debug.pm,Coro::Debug) cvs-pod(Coro/EV.pm,Coro::EV) cvs-pod(Coro/Event.pm,Coro::Event) cvs-pod(Coro/Handle.pm,Coro::Handle) cvs-pod(Coro/LWP.pm,Coro::LWP) cvs-pod(Coro/MakeMaker.pm,Coro::MakeMaker) cvs-pod(Coro/RWLock.pm,Coro::RWLock) cvs-pod(Coro/Select.pm,Coro::Select) cvs-pod(Coro/Semaphore.pm,Coro::Semaphore) cvs-pod(Coro/SemaphoreSet.pm,Coro::SemaphoreSet) cvs-pod(Coro/Signal.pm,Coro::Signal) cvs-pod(Coro/Socket.pm,Coro::Socket) cvs-pod(Coro/Specific.pm,Coro::Specific) cvs-pod(Coro/State.pm,Coro::State) cvs-pod(Coro/Storable.pm,Coro::Storable) cvs-pod(Coro/Timer.pm,Coro::Timer) cvs-pod(Coro/Util.pm,Coro::Util) list(anyevent) irc(anyevent) 891Coro cpan cvs-co(Changes) cvs-pod(Coro.pm,) cvs-pod(Coro/AIO.pm,Coro::AIO) cvs-pod(Coro/AnyEvent.pm,Coro::AnyEvent) cvs-pod(Coro/BDB.pm,Coro::BDB) cvs-pod(Coro/Channel.pm,Coro::Channel) cvs-pod(Coro/Debug.pm,Coro::Debug) cvs-pod(Coro/EV.pm,Coro::EV) cvs-pod(Coro/Event.pm,Coro::Event) cvs-pod(Coro/Handle.pm,Coro::Handle) cvs-pod(Coro/LWP.pm,Coro::LWP) cvs-pod(Coro/MakeMaker.pm,Coro::MakeMaker) cvs-pod(Coro/RWLock.pm,Coro::RWLock) cvs-pod(Coro/Select.pm,Coro::Select) cvs-pod(Coro/Semaphore.pm,Coro::Semaphore) cvs-pod(Coro/SemaphoreSet.pm,Coro::SemaphoreSet) cvs-pod(Coro/Signal.pm,Coro::Signal) cvs-pod(Coro/Socket.pm,Coro::Socket) cvs-pod(Coro/Specific.pm,Coro::Specific) cvs-pod(Coro/State.pm,Coro::State) cvs-pod(Coro/Storable.pm,Coro::Storable) cvs-pod(Coro/Timer.pm,Coro::Timer) cvs-pod(Coro/Util.pm,Coro::Util) list(anyevent) irc(anyevent)
864 A large Perl module family that implements cooperative multitasking in 892 A large Perl module family that implements cooperative multitasking in
865 Perl. It supports filehandle and event abstraction and also implements 893 Perl. It supports filehandle and event abstraction and also implements
866 continuations as well as the necessary directives to implement a slightly 894 continuations as well as the necessary directives to implement a slightly
867 limited call/cc in Perl. 895 limited call/cc in Perl.
871 899
872 This perl module patches libmysqlclient/DBD::mysql at runtime to allow 900 This perl module patches libmysqlclient/DBD::mysql at runtime to allow
873 multiple Coro-based threads to make database accesses concurrently, 901 multiple Coro-based threads to make database accesses concurrently,
874 instead of blocking the whole process. 902 instead of blocking the whole process.
875 903
904Coro-Multicore cpan cvs-co(Changes) cvs-pod(Multicore.pm,) cvs-pod(perlmulticore.h) list(anyevent) irc(anyevent)
905 Runs XS functions transparently in their own XS level thread,
906 running other Coro threads in parallel.
907
908 This perl module allows XS functions that have been properly prepared
909 (see the <a href="http://perlmulticore.schmorp.de">Perl Multicore
910 Specification</a>) to run in parallel to other Coro threads, in their own
911 OS level thread.
912
913Crypt-Ed25519 cpan cvs-pod(Ed25519.pm,) cvs-co(Changes)
914 A Perl module implementing Ed25519 public key signing and verification.
915
916Crypt-Spritz cpan cvs-pod(Spritz.pm,) cvs-co(Changes)
917 A Perl module implementing the Spritz family of cryptographic algorithms,
918 giving you a stream cipher, a hash, a mac, authenticated encryption
919 with associated data (AEAD) and a cryptographically secure random
920 number generator, at reasonable speed and with very small code size, making
921 Spritz an attractive algorithm for resource-constrained environments
922 such as javascript in your browser, or microcontrollers.
923
876Crypt-Twofish2 cpan cvs-pod(Twofish2.pm,) cvs-co(Changes) 924Crypt-Twofish2 cpan cvs-pod(Twofish2.pm,) cvs-co(Changes)
877 A Perl module implementing the twofish encryption algorithm in Perl. It has 925 A Perl module implementing the twofish encryption algorithm in Perl. It has
878 mostly been superceded by the Crypt::Twofish module. However, it supports 926 mostly been superceded by the Crypt::Twofish module. However, it supports
879 an easy and fast CBC mode natively. 927 an easy and fast CBC mode natively.
880 928
881Digest-Hashcash cpan cvs-pod(Hashcash.pm,) cvs-co(Changes) 929Digest-Hashcash cpan cvs-pod(Hashcash.pm,) cvs-co(Changes)
882 Perl module to generate and parse <a href="http://www.hashcash.org">hashcashes</a>. 930 Perl module to generate and parse <a href="http://www.hashcash.org">hashcashes</a>.
883 Follow the link to learn more. This module is currently faster than 931 Follow the link to learn more. This module is currently faster than
884 the hashcash reference library. 932 the hashcash reference library.
933
934Digest-FNV-XS cpan cvs-pod(XS.pm,) cvs-co(Changes)
935 Perl module to generate FNV hashes (FNV-0, FNV-1, FNV-1a in 32 and 64 bit)
936 plus utiilities for xor folding and retry mapping. The main selling
937 point over Digest::FNV is that it works with binary data.
885 938
886EV cpan cvs-pod(EV.pm,) cvs-pod(../libev/ev.pod,libev-documentation) cvs-pod(EV/MakeMaker.pm) cvs-co(Changes) list(libev) 939EV cpan cvs-pod(EV.pm,) cvs-pod(../libev/ev.pod,libev-documentation) cvs-pod(EV/MakeMaker.pm) cvs-co(Changes) list(libev)
887 A thin wrapper around <a href="/pkg/libev.html">libev</a>, a 940 A thin wrapper around <a href="/pkg/libev.html">libev</a>, a
888 high-performance event loop. Intended as a faster and less buggy 941 high-performance event loop. Intended as a faster and less buggy
889 replacement for the Event perl module. Efficiently supports very high 942 replacement for the Event perl module. Efficiently supports very high
1275 users to manage their channels in a secure and efficient way and 1328 users to manage their channels in a secure and efficient way and
1276 allows operators to manage various things about their networks. 1329 allows operators to manage various things about their networks.
1277 Ermyth has been ported to C++ and goes its way using modern concepts 1330 Ermyth has been ported to C++ and goes its way using modern concepts
1278 and the object oriented paradigm. 1331 and the object oriented paradigm.
1279 1332
1333ExtUtils-CXX cpan cvs-pod(CXX.pm,) cvs-co(Changes) list(perl) irc(schmorp)
1334 Try to treat .xs files as C++ rather than C in your module.
1335
1336 This module can be used to compile C++ XS files. It might not be perfect,
1337 but is meant aa single point that needs patching, so other modules who rely on
1338 it do not have to be pqatched every single time.
1339

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines