summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luasocket
diff options
context:
space:
mode:
authorLuigi Scarso <luigi.scarso@gmail.com>2018-01-17 18:00:12 +0000
committerLuigi Scarso <luigi.scarso@gmail.com>2018-01-17 18:00:12 +0000
commitf100e939b3262ac391fe767d591d1a316ab59f3a (patch)
tree53787d7aa79da3a8b10df0049cfe623cf0f2bd89 /Build/source/texk/web2c/luatexdir/luasocket
parent345e6b3ddab394ae88cd0d916992bc2bc0f8695d (diff)
Luatex 1.07 --- luatex and luatex53
git-svn-id: svn://tug.org/texlive/trunk@46348 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luasocket')
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/LICENSE4
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/Lua51.props28
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/Lua52.props28
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/NEW76
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/README11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/config60
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/ftp.html1
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/http.html7
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/index.html59
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/installation.html14
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/ltn12.html8
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/lua05.pptbin0 -> 304128 bytes
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/mime.html59
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/reference.css1
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/reference.html6
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/smtp.html235
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/socket.html118
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/tcp.html405
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/doc/udp.html447
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/check-links.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/cookie.lua88
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/dispatch.lua42
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/forward.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/get.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/etc/links17
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/makefile29
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/mime.vcproj141
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj217
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj.filters16
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/samples/lpr.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/samples/mclisten.lua18
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/samples/mcsend.lua20
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/socket.vcproj182
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj307
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj.filters51
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/Makefile63
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.c12
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.h11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/buffer.c37
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/compat.c19
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/compat.c.orig19
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/compat.h11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/compat.h.orig11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/except.c88
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/except.h23
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua135
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ftp_lua.c1202
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/headers_lua.c481
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/http.lua109
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/http.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/http_lua.c1435
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/inet.c368
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/inet.h27
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/io.c2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua43
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/ltn12_lua.c974
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/lua_preload.c13
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c.orig114
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.h9
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/makefile438
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua38
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mbox_lua.c364
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mime.c130
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mime.h4
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua41
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/mime_lua.c269
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/options.c158
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/options.h20
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/pierror.h28
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/select.c32
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/serial.c25
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua42
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/smtp_lua.c904
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/socket.lua35
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c527
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c.module317
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c170
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/timeout.c21
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/timeout.h1
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua25
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/tp_lua.c422
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/udp.c319
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/udp.h3
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unix.c358
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unix.h6
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.c408
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.h20
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.c357
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.h21
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/url.lua51
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/url.lua_lua.c0
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/url_lua.c1100
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/usocket.c116
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/usocket.h16
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c156
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.h11
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htaccess4
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htpasswd1
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/auth/index.html3002
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/cat6
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/cat-index-html5
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/env5
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/query-string4
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/redirect-loop3
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/cgi/request-uri4
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/dicttest.lua5
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/excepttest.lua30
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/find-connect-limit32
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/ftptest.lua122
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/hello.lua3
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/httptest.lua441
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/index.html3002
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/ltn12test.lua299
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/luasocket.pngbin0 -> 11732 bytes
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/mimetest.lua299
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/smtptest.lua259
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/stufftest.lua21
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/tcp-getoptions41
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/test_bind.lua6
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/test_getaddrinfo.lua15
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/test_socket_error.lua31
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/testclnt.lua132
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/testmesg.lua96
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/testsrvr.lua2
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/tftptest.lua20
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send25
-rwxr-xr-xBuild/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send-recv37
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectclnt.lua19
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectsrvr.lua16
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramclnt.lua9
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramsrvr.lua9
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamclnt.lua8
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamsrvr.lua9
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/upload.html15
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/urltest.lua635
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/utestclnt.lua644
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/test/utestsrvr.lua17
146 files changed, 18417 insertions, 5800 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/LICENSE b/Build/source/texk/web2c/luatexdir/luasocket/LICENSE
index 5bd3478897d..b63545107ef 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/LICENSE
+++ b/Build/source/texk/web2c/luatexdir/luasocket/LICENSE
@@ -1,5 +1,5 @@
-LuaSocket 2.1 license
-Copyright © 2004-2012 Diego Nehab
+LuaSocket 3.0 license
+Copyright © 2004-2013 Diego Nehab
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/Lua51.props b/Build/source/texk/web2c/luatexdir/luasocket/Lua51.props
new file mode 100644
index 00000000000..1bd62565389
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/Lua51.props
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ImportGroup Label="PropertySheets" />
+ <PropertyGroup Label="UserMacros">
+ <LUABIN_PATH>..\build\vc12\bin\lua\5.1\</LUABIN_PATH>
+ <LUALIB_PATH>..\build\vc12\bin\lua\5.1\</LUALIB_PATH>
+ <LUAINC_PATH>..\build\vc12\include\lua\5.1\</LUAINC_PATH>
+ <LUALIB>lua51.lib</LUALIB>
+ </PropertyGroup>
+ <PropertyGroup>
+ <_PropertySheetDisplayName>Lua51</_PropertySheetDisplayName>
+ </PropertyGroup>
+ <ItemDefinitionGroup />
+ <ItemGroup>
+ <BuildMacro Include="LUALIB_PATH">
+ <Value>$(LUALIB_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUABIN_PATH">
+ <Value>$(LUABIN_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUAINC_PATH">
+ <Value>$(LUAINC_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUALIB">
+ <Value>$(LUALIB)</Value>
+ </BuildMacro>
+ </ItemGroup>
+</Project>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/Lua52.props b/Build/source/texk/web2c/luatexdir/luasocket/Lua52.props
new file mode 100644
index 00000000000..01afcfa7c4b
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/Lua52.props
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ImportGroup Label="PropertySheets" />
+ <PropertyGroup Label="UserMacros">
+ <LUABIN_PATH>..\build\vc12\bin\lua\5.2\</LUABIN_PATH>
+ <LUALIB_PATH>..\build\vc12\bin\lua\5.2\</LUALIB_PATH>
+ <LUAINC_PATH>..\build\vc12\include\lua\5.2\</LUAINC_PATH>
+ <LUALIB>lua52.lib</LUALIB>
+ </PropertyGroup>
+ <PropertyGroup>
+ <_PropertySheetDisplayName>Lua52</_PropertySheetDisplayName>
+ </PropertyGroup>
+ <ItemDefinitionGroup />
+ <ItemGroup>
+ <BuildMacro Include="LUALIB_PATH">
+ <Value>$(LUALIB_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUABIN_PATH">
+ <Value>$(LUABIN_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUAINC_PATH">
+ <Value>$(LUAINC_PATH)</Value>
+ </BuildMacro>
+ <BuildMacro Include="LUALIB">
+ <Value>$(LUALIB)</Value>
+ </BuildMacro>
+ </ItemGroup>
+</Project>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/NEW b/Build/source/texk/web2c/luatexdir/luasocket/NEW
index 76b84487037..0bff64c1df3 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/NEW
+++ b/Build/source/texk/web2c/luatexdir/luasocket/NEW
@@ -1,38 +1,44 @@
What's New
-This is just a bug-fix/update release.
+Main changes for LuaSocket 3.0-rc1 are IPv6 support and Lua 5.2 compatibility.
- * Fixed: manual sample of HTTP authentication now uses correct
- "authorization" header (Alexandre Ittner);
- * Fixed: failure on bind() was destroying the socket (Sam Roberts);
- * Fixed: receive() returns immediatelly if prefix can satisfy
- bytes requested (M Joonas Pihlaja);
- * Fixed: multicast didn't work on Windows, or anywhere
- else for that matter (Herbert Leuwer, Adrian Sietsma);
- * Fixed: select() now reports an error when called with more
- sockets than FD_SETSIZE (Lorenzo Leonini);
- * Fixed: manual links to home.html changed to index.html (Robert Hahn);
- * Fixed: mime.unb64() would return an empty string on results that started
- with a null character (Robert Raschke);
- * Fixed: HTTP now automatically redirects on 303 and 307 (Jonathan Gray);
- * Fixed: calling sleep() with negative numbers could
- block forever, wasting CPU. Now it returns immediately (MPB);
- * Improved: FTP commands are now sent in upper case to
- help buggy servers (Anders Eurenius);
- * Improved: known headers now sent in canonic
- capitalization to help buggy servers (Joseph Stewart);
- * Improved: Clarified tcp:receive() in the manual (MPB);
- * Improved: Decent makefiles (LHF).
- * Fixed: RFC links in documentation now point to IETF (Cosmin Apreutesei).
-
-
- Yuri's bug?
- Dahlberg
- Sam Roberts
- Thomas Harning Jr.
- Sebastien Perin
- remove getn in all files
- ltn12.pump.all(
- ltn12.source.file(io.open("original.png")),
- ltn12.sink.file(io.open("copy.png", "wb"))
- )
+ * Added: Compatible with Lua 5.2
+ - Note that unless you define LUA_COMPAT_MODULE, package
+ tables will not be exported as globals!
+ * Added: IPv6 support;
+ - Socket.connect and socket.bind support IPv6 addresses;
+ - Getpeername and getsockname support IPv6 addresses, and
+ return the socket family as a third value;
+ - URL module updated to support IPv6 host names;
+ - New socket.tcp6 and socket.udp6 functions;
+ - New socket.dns.getaddrinfo and socket.dns.getnameinfo functions;
+ * Added: getoption method;
+ * Fixed: url.unescape was returning additional values;
+ * Fixed: mime.qp, mime.unqp, mime.b64, and mime.unb64 could
+ mistaking their own stack slots for functions arguments;
+ * Fixed: Receiving zero-length datagram is now possible;
+ * Improved: Hidden all internal library symbols;
+ * Improved: Better error messages;
+ * Improved: Better documentation of socket options.
+ * Fixed: manual sample of HTTP authentication now uses correct
+ "authorization" header (Alexandre Ittner);
+ * Fixed: failure on bind() was destroying the socket (Sam Roberts);
+ * Fixed: receive() returns immediatelly if prefix can satisfy
+ bytes requested (M Joonas Pihlaja);
+ * Fixed: multicast didn't work on Windows, or anywhere
+ else for that matter (Herbert Leuwer, Adrian Sietsma);
+ * Fixed: select() now reports an error when called with more
+ sockets than FD_SETSIZE (Lorenzo Leonini);
+ * Fixed: manual links to home.html changed to index.html (Robert Hahn);
+ * Fixed: mime.unb64() would return an empty string on results that started
+ with a null character (Robert Raschke);
+ * Fixed: HTTP now automatically redirects on 303 and 307 (Jonathan Gray);
+ * Fixed: calling sleep() with negative numbers could
+ block forever, wasting CPU. Now it returns immediately (MPB);
+ * Improved: FTP commands are now sent in upper case to
+ help buggy servers (Anders Eurenius);
+ * Improved: known headers now sent in canonic
+ capitalization to help buggy servers (Joseph Stewart);
+ * Improved: Clarified tcp:receive() in the manual (MPB);
+ * Improved: Decent makefiles (LHF).
+ * Fixed: RFC links in documentation now point to IETF (Cosmin Apreutesei).
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/README b/Build/source/texk/web2c/luatexdir/luasocket/README
index e9dc323bfc6..cd8ee59d14f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/README
+++ b/Build/source/texk/web2c/luatexdir/luasocket/README
@@ -1,6 +1,11 @@
-This is the LuaSocket 2.1. It has been tested on --[[WinXP--]], Mac OS X,
-and --[[Linux--]]. Please use the Lua mailing list to report any bugs
-(or "features") you encounter.
+This is the LuaSocket 3.0-rc1. It has been tested on Windows 7, Mac OS X,
+and Linux.
+
+Please use the project page at GitHub
+
+ https://github.com/diegonehab/luasocket
+
+to file bug reports or propose changes.
Have fun,
Diego Nehab.
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/config b/Build/source/texk/web2c/luatexdir/luasocket/config
deleted file mode 100644
index 49958ebcbbe..00000000000
--- a/Build/source/texk/web2c/luatexdir/luasocket/config
+++ /dev/null
@@ -1,60 +0,0 @@
-#------
-# LuaSocket makefile configuration
-#
-
-#------
-# Output file names
-#
-EXT=so
-SOCKET_V=2.0.2
-MIME_V=1.0.2
-SOCKET_SO=socket.$(EXT).$(SOCKET_V)
-MIME_SO=mime.$(EXT).$(MIME_V)
-UNIX_SO=unix.$(EXT)
-
-#------
-# Lua includes and libraries
-#
-#LUAINC=-I/usr/local/include/lua50
-#LUAINC=-I/usr/local/include/lua5.1
-#LUAINC=-Ilua-5.1.1/src
-
-#------
-# Compat-5.1 directory
-#
-#COMPAT=compat-5.1r5
-
-#------
-# Top of your Lua installation
-# Relative paths will be inside the src tree
-#
-#INSTALL_TOP_SHARE=/usr/local/share/lua/5.0
-#INSTALL_TOP_LIB=/usr/local/lib/lua/5.0
-INSTALL_TOP_SHARE=/usr/local/share/lua/5.1
-INSTALL_TOP_LIB=/usr/local/lib/lua/5.1
-
-INSTALL_DATA=cp
-INSTALL_EXEC=cp
-
-#------
-# Compiler and linker settings
-# for Mac OS X
-#
-#CC=gcc
-#DEF= -DLUASOCKET_DEBUG -DUNIX_HAS_SUN_LEN
-#CFLAGS= $(LUAINC) -I$(COMPAT) $(DEF) -pedantic -Wall -O2 -fno-common
-#LDFLAGS=-bundle -undefined dynamic_lookup
-#LD=export MACOSX_DEPLOYMENT_TARGET="10.3"; gcc
-
-#------
-# Compiler and linker settings
-# for Linux
-CC=gcc
-DEF=-DLUASOCKET_DEBUG
-CFLAGS= $(LUAINC) $(DEF) -pedantic -Wall -O2 -fpic
-LDFLAGS=-O -shared -fpic
-LD=gcc
-
-#------
-# End of makefile configuration
-#
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/ftp.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/ftp.html
index 3f23a4a93cc..091c88f7838 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/ftp.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/ftp.html
@@ -86,7 +86,6 @@ the FTP module:
<ul>
<li> <tt>PASSWORD</tt>: default anonymous password.
-<li> <tt>PORT</tt>: default port used for the control connection;
<li> <tt>TIMEOUT</tt>: sets the timeout for all I/O operations;
<li> <tt>USER</tt>: default anonymous user;
</ul>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/http.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/http.html
index cd41c0ddb9e..3b7a8b1a26a 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/http.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/http.html
@@ -112,12 +112,15 @@ the HTTP module:
</p>
<ul>
-<li> <tt>PORT</tt>: default port used for connections;
-<li> <tt>PROXY</tt>: default proxy used for connections;
+<li> <tt>PROXY</tt>: default proxy used for connections;
<li> <tt>TIMEOUT</tt>: sets the timeout for all I/O operations;
<li> <tt>USERAGENT</tt>: default user agent reported to server.
</ul>
+<p class=note id="post">
+Note: These constants are global. Changing them will also
+change the behavior other code that might be using LuaSocket.
+</p>
<!-- http.request ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/index.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/index.html
index d8ee4a492d2..7d81b411d0c 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/index.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/index.html
@@ -49,7 +49,7 @@ functionality commonly needed by applications that deal with the Internet.
The core support has been implemented so that it is both efficient and
simple to use. It is available to any Lua application once it has been
properly initialized by the interpreter in use. The code has been tested
-and runs well on several Windows and Unix platforms. </p>
+and runs well on several Windows and UNIX platforms. </p>
<p>
Among the support modules, the most commonly used implement the
@@ -78,7 +78,7 @@ LuaSocket.
</p>
<p>
-Copyright &copy; 1999-2012 Diego Nehab. All rights reserved. <br>
+Copyright &copy; 1999-2013 Diego Nehab. All rights reserved. <br>
Author: <A href="http://www.impa.br/~diego">Diego Nehab</a>
</p>
@@ -87,16 +87,16 @@ Author: <A href="http://www.impa.br/~diego">Diego Nehab</a>
<h2 id=download>Download</h2>
<p>
-LuaSocket version 2.1-rc1 is now available for download!
+LuaSocket version 3.0-rc1 is now available for download!
It is compatible with Lua&nbsp;5.1 and 5.2, and has
been tested on Windows&nbsp;XP, Linux, and Mac OS X. Chances
are it works well on most UNIX distributions and Windows flavors.
</p>
<p>
-The library can be downloaded in source code from the
-<a href="https://github.com/diegonehab/luasocket/downloads">LuaSocket
-project page</a> at GitHub. Besides the full C and Lua source code
+The current version of the library can be found at
+the <a href="https://github.com/diegonehab/luasocket">LuaSocket
+project page</a> on GitHub. Besides the full C and Lua source code
for the library, the distribution contains several examples,
this user's manual and basic test procedures.
</p>
@@ -113,11 +113,12 @@ manual to find out how to properly install the library.
<p>
This marks the first release of LuaSocket that
wholeheartedly embraces the open-source development
-philosophy. After a long hiatus, Matthew Wild finally
-convinced me it was time for a release including IPv6
-and Lua 5.2 support. Special thanks to Sam Roberts, Florian
-Zeitz, and Paul Aurich, Liam Devine, and everybody else that
-has helped bring this library back to life.
+philosophy. After a long hiatus, Matthew Wild finally
+convinced me it was time for a release including IPv6 and
+Lua 5.2 support. It was more work than we anticipated.
+Special thanks to Sam Roberts, Florian Zeitz, and Paul
+Aurich, Liam Devine, Alexey Melnichuk, and everybody else
+that has helped bring this library back to life.
</p>
<!-- whatsnew +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -125,12 +126,16 @@ has helped bring this library back to life.
<h2 id=new>What's New</h2>
<p>
-Main changes for LuaSocket&nbsp;2.1-rc1 are IPv6 support
+Main changes for LuaSocket&nbsp;3.0-rc1 are IPv6 support
and Lua&nbsp;5.2 compatibility.
</p>
<ul>
-<li> Added: Compatible with Lua&nbsp;5.2 (using <tt>LUA_COMPAT_MODULE</tt>);
+<li> Added: Compatible with Lua&nbsp;5.2
+<ul>
+<li> Note that unless you define <tt>LUA_COMPAT_MODULE</tt>,
+package tables will <em>not</em> be exported as globals!
+</ul>
<li> Added: IPv6 support;
<ul>
<li> <tt>Socket.connect</tt> and <tt>socket.bind</tt> support IPv6 addresses;
@@ -138,7 +143,8 @@ and Lua&nbsp;5.2 compatibility.
IPv6 addresses, and return the socket family as a third value;
<li> URL module updated to support IPv6 host names;
<li> New <tt>socket.tcp6</tt> and <tt>socket.udp6</tt> functions;
-<li> New <tt>socket.dns.getaddrinfo</tt> function;
+<li> New <tt>socket.dns.getaddrinfo</tt> and
+ <tt>socket.dns.getnameinfo</tt> functions;
</ul>
<li> Added: <tt>getoption</tt> method;
<li> Fixed: <tt>url.unescape</tt> was returning additional values;
@@ -149,6 +155,29 @@ IPv6 addresses, and return the socket family as a third value;
<li> Improved: Hidden all internal library symbols;
<li> Improved: Better error messages;
<li> Improved: Better documentation of socket options.
+<li> Fixed: manual sample of HTTP authentication now uses correct
+ "authorization" header (Alexandre Ittner);
+<li> Fixed: failure on bind() was destroying the socket (Sam Roberts);
+<li> Fixed: receive() returns immediatelly if prefix can satisfy
+ bytes requested (M Joonas Pihlaja);
+<li> Fixed: multicast didn't work on Windows, or anywhere
+ else for that matter (Herbert Leuwer, Adrian Sietsma);
+<li> Fixed: select() now reports an error when called with more
+ sockets than FD_SETSIZE (Lorenzo Leonini);
+<li> Fixed: manual links to home.html changed to index.html
+(Robert Hahn);
+<li> Fixed: mime.unb64() would return an empty string on results that started
+ with a null character (Robert Raschke);
+<li> Fixed: HTTP now automatically redirects on 303 and 307 (Jonathan Gray);
+<li> Fixed: calling sleep() with negative numbers could
+ block forever, wasting CPU. Now it returns immediately (MPB);
+<li> Improved: FTP commands are now sent in upper case to
+ help buggy servers (Anders Eurenius);
+<li> Improved: known headers now sent in canonic
+ capitalization to help buggy servers (Joseph Stewart);
+<li> Improved: Clarified tcp:receive() in the manual (MPB);
+<li> Improved: Decent makefiles (LHF).
+<li> Fixed: RFC links in documentation now point to IETF (Cosmin Apreutesei).
</ul>
<!-- old ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -176,7 +205,7 @@ still available for those that have compatibility issues.
<p>
<small>
Last modified by Diego Nehab on <br>
-Mon Apr 16 21:58:56 HKT 2012
+Tue Jun 11 18:50:23 HKT 2013
</small>
</p>
</center>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/installation.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/installation.html
index 37c309b5d24..28a9fbb5f22 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/installation.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/installation.html
@@ -39,12 +39,6 @@ Installation">
<h2>Installation</h2>
-<p> LuaSocket 2.1-rc still uses Lua&nbsp;5.1's package
-system. Users that have already made the switch to
-Lua&nbsp;5.2 should leave the default
-<tt>LUA_COMPAT_MODULE</tt> defined when compiling their Lua
-distribution for compatibility with LuaSocket. </p>
-
<p> Here we describe the standard distribution. If the
standard doesn't meet your needs, we refer you to the Lua
discussion list, where any question about the package scheme
@@ -92,17 +86,17 @@ it should be easy to use LuaSocket. Just fire the interpreter and use the
<tt>require</tt> function to gain access to whatever module you need:</p>
<pre class=example>
-Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
+Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio
&gt; socket = require("socket")
&gt; print(socket._VERSION)
---&gt; LuaSocket 2.1-rc1
+--&gt; LuaSocket 3.0-rc1
</pre>
<p> Each module loads their dependencies automatically, so you only need to
load the modules you directly depend upon: </p>
<pre class=example>
-Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
+Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio
&gt; http = require("socket.http")
&gt; print(http.request("http://www.impa.br/~diego/software/luasocket"))
--&gt; homepage gets dumped to terminal
@@ -123,7 +117,7 @@ Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
<p>
<small>
Last modified by Diego Nehab on <br>
-Mon Apr 16 21:01:42 HKT 2012
+Tue Jun 11 19:06:14 HKT 2013
</small>
</p>
</center>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/ltn12.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/ltn12.html
index 7e2f49a8c4c..54e66fb6bb0 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/ltn12.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/ltn12.html
@@ -224,8 +224,8 @@ local ltn12 = require("ltn12")
-- copy a file
ltn12.pump.all(
- ltn12.source.file(io.open("original.png")),
- ltn12.sink.file(io.open("copy.png"))
+ ltn12.source.file(io.open("original.png", "rb")),
+ ltn12.sink.file(io.open("copy.png", "wb"))
)
</pre>
@@ -379,8 +379,8 @@ local ltn12 = require("ltn12")
-- copy a file
ltn12.pump.all(
- ltn12.source.file(io.open("original.png")),
- ltn12.sink.file(io.open("copy.png"))
+ ltn12.source.file(io.open("original.png", "rb")),
+ ltn12.sink.file(io.open("copy.png", "wb"))
)
</pre>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/lua05.ppt b/Build/source/texk/web2c/luatexdir/luasocket/doc/lua05.ppt
new file mode 100644
index 00000000000..e2b7ab4b304
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/lua05.ppt
Binary files differ
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/mime.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/mime.html
index ae136fd85d1..8cb3507aa7b 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/mime.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/mime.html
@@ -72,34 +72,6 @@ local mime = require("mime")
<h3 id=high>High-level filters</h3>
-<!-- normalize ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id="normalize">
-mime.<b>normalize(</b>[marker]<b>)</b>
-</p>
-
-<p class=description>
-Converts most common end-of-line markers to a specific given marker.
-</p>
-
-<p class=parameters>
-<tt>Marker</tt> is the new marker. It defaults to CRLF, the canonic
-end-of-line marker defined by the MIME standard.
-</p>
-
-<p class=return>
-The function returns a filter that performs the conversion.
-</p>
-
-<p class=note>
-Note: There is no perfect solution to this problem. Different end-of-line
-markers are an evil that will probably plague developers forever.
-This function, however, will work perfectly for text created with any of
-the most common end-of-line markers, i.e. the Mac OS (CR), the Unix (LF),
-or the DOS (CRLF) conventions. Even if the data has mixed end-of-line
-markers, the function will still work well, although it doesn't
-guarantee that the number of empty lines will be correct.
-</p>
<!-- decode +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -159,6 +131,35 @@ base64 = ltn12.filter.chain(
)
</pre>
+<!-- normalize ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="normalize">
+mime.<b>normalize(</b>[marker]<b>)</b>
+</p>
+
+<p class=description>
+Converts most common end-of-line markers to a specific given marker.
+</p>
+
+<p class=parameters>
+<tt>Marker</tt> is the new marker. It defaults to CRLF, the canonic
+end-of-line marker defined by the MIME standard.
+</p>
+
+<p class=return>
+The function returns a filter that performs the conversion.
+</p>
+
+<p class=note>
+Note: There is no perfect solution to this problem. Different end-of-line
+markers are an evil that will probably plague developers forever.
+This function, however, will work perfectly for text created with any of
+the most common end-of-line markers, i.e. the Mac OS (CR), the Unix (LF),
+or the DOS (CRLF) conventions. Even if the data has mixed end-of-line
+markers, the function will still work well, although it doesn't
+guarantee that the number of empty lines will be correct.
+</p>
+
<!-- stuff +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id="stuff">
@@ -466,7 +467,7 @@ marker.
<p>
<small>
Last modified by Diego Nehab on <br>
-Thu Apr 20 00:25:44 EDT 2006
+Fri Mar 4 15:19:17 BRT 2016
</small>
</p>
</center>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.css b/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.css
index b1dd25d70bb..04e38cfebeb 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.css
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.css
@@ -2,6 +2,7 @@ body {
margin-left: 1em;
margin-right: 1em;
font-family: "Verdana", sans-serif;
+ background: #ffffff;
}
tt {
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.html
index e9bb5eb6fcc..287dc19d900 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/reference.html
@@ -147,6 +147,7 @@ Support, Manual">
<a href="socket.html#connect">connect</a>,
<a href="socket.html#connect">connect4</a>,
<a href="socket.html#connect">connect6</a>,
+<a href="socket.html#datagramsize">_DATAGRAMSIZE</a>,
<a href="socket.html#debug">_DEBUG</a>,
<a href="dns.html#dns">dns</a>,
<a href="socket.html#gettime">gettime</a>,
@@ -158,11 +159,14 @@ Support, Manual">
<a href="socket.html#skip">skip</a>,
<a href="socket.html#sleep">sleep</a>,
<a href="socket.html#setsize">_SETSIZE</a>,
+<a href="socket.html#socketinvalid">_SOCKETINVALID</a>,
<a href="socket.html#source">source</a>,
<a href="tcp.html#socket.tcp">tcp</a>,
+<a href="tcp.html#socket.tcp4">tcp4</a>,
<a href="tcp.html#socket.tcp6">tcp6</a>,
<a href="socket.html#try">try</a>,
<a href="udp.html#socket.udp">udp</a>,
+<a href="udp.html#socket.udp4">udp4</a>,
<a href="udp.html#socket.udp6">udp6</a>,
<a href="socket.html#version">_VERSION</a>.
</blockquote>
@@ -183,6 +187,7 @@ Support, Manual">
<a href="tcp.html#getpeername">getpeername</a>,
<a href="tcp.html#getsockname">getsockname</a>,
<a href="tcp.html#getstats">getstats</a>,
+<a href="tcp.html#gettimeout">gettimeout</a>,
<a href="tcp.html#listen">listen</a>,
<a href="tcp.html#receive">receive</a>,
<a href="tcp.html#send">send</a>,
@@ -203,6 +208,7 @@ Support, Manual">
<a href="udp.html#getoption">getoption</a>,
<a href="udp.html#getpeername">getpeername</a>,
<a href="udp.html#getsockname">getsockname</a>,
+<a href="udp.html#gettimeout">gettimeout</a>,
<a href="udp.html#receive">receive</a>,
<a href="udp.html#receivefrom">receivefrom</a>,
<a href="udp.html#send">send</a>,
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/smtp.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/smtp.html
index bbbff8047b9..600ec37529f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/smtp.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/smtp.html
@@ -114,6 +114,124 @@ the SMTP module:
<li> <tt>ZONE</tt>: default time zone.
</ul>
+<!-- message ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id=message>
+smtp.<b>message(</b>mesgt<b>)</b>
+</p>
+
+<p class=description>
+Returns a <em>simple</em>
+<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a> source that sends an SMTP message body, possibly multipart (arbitrarily deep).
+</p>
+
+<p class=parameters>
+The only parameter of the function is a table describing the message.
+<tt>Mesgt</tt> has the following form (notice the recursive structure):
+</p>
+
+<blockquote>
+<table summary="Mesgt table structure">
+<tr><td><tt>
+mesgt = {<br>
+&nbsp;&nbsp;headers = <i>header-table</i>,<br>
+&nbsp;&nbsp;body = <i>LTN12 source</i> or <i>string</i> or
+<i>multipart-mesgt</i><br>
+}<br>
+&nbsp;<br>
+multipart-mesgt = {<br>
+&nbsp;&nbsp;[preamble = <i>string</i>,]<br>
+&nbsp;&nbsp;[1] = <i>mesgt</i>,<br>
+&nbsp;&nbsp;[2] = <i>mesgt</i>,<br>
+&nbsp;&nbsp;...<br>
+&nbsp;&nbsp;[<i>n</i>] = <i>mesgt</i>,<br>
+&nbsp;&nbsp;[epilogue = <i>string</i>,]<br>
+}<br>
+</tt></td></tr>
+</table>
+</blockquote>
+
+<p class=parameters>
+For a simple message, all that is needed is a set of <tt>headers</tt>
+and the <tt>body</tt>. The message <tt>body</tt> can be given as a string
+or as a <em>simple</em>
+<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a>
+source. For multipart messages, the body is a table that
+recursively defines each part as an independent message, plus an optional
+<tt>preamble</tt> and <tt>epilogue</tt>.
+</p>
+
+<p class=return>
+The function returns a <em>simple</em>
+<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a>
+source that produces the
+message contents as defined by <tt>mesgt</tt>, chunk by chunk.
+Hopefully, the following
+example will make things clear. When in doubt, refer to the appropriate RFC
+as listed in the introduction. </p>
+
+<pre class=example>
+-- load the smtp support and its friends
+local smtp = require("socket.smtp")
+local mime = require("mime")
+local ltn12 = require("ltn12")
+
+-- creates a source to send a message with two parts. The first part is
+-- plain text, the second part is a PNG image, encoded as base64.
+source = smtp.message{
+ headers = {
+ -- Remember that headers are *ignored* by smtp.send.
+ from = "Sicrano de Oliveira &lt;sicrano@example.com&gt;",
+ to = "Fulano da Silva &lt;fulano@example.com&gt;",
+ subject = "Here is a message with attachments"
+ },
+ body = {
+ preamble = "If your client doesn't understand attachments, \r\n" ..
+ "it will still display the preamble and the epilogue.\r\n" ..
+ "Preamble will probably appear even in a MIME enabled client.",
+ -- first part: no headers means plain text, us-ascii.
+ -- The mime.eol low-level filter normalizes end-of-line markers.
+ [1] = {
+ body = mime.eol(0, [[
+ Lines in a message body should always end with CRLF.
+ The smtp module will *NOT* perform translation. However, the
+ send function *DOES* perform SMTP stuffing, whereas the message
+ function does *NOT*.
+ ]])
+ },
+ -- second part: headers describe content to be a png image,
+ -- sent under the base64 transfer content encoding.
+ -- notice that nothing happens until the message is actually sent.
+ -- small chunks are loaded into memory right before transmission and
+ -- translation happens on the fly.
+ [2] = {
+ headers = {
+ ["content-type"] = 'image/png; name="image.png"',
+ ["content-disposition"] = 'attachment; filename="image.png"',
+ ["content-description"] = 'a beautiful image',
+ ["content-transfer-encoding"] = "BASE64"
+ },
+ body = ltn12.source.chain(
+ ltn12.source.file(io.open("image.png", "rb")),
+ ltn12.filter.chain(
+ mime.encode("base64"),
+ mime.wrap()
+ )
+ )
+ },
+ epilogue = "This might also show up, but after the attachments"
+ }
+}
+
+-- finally send it
+r, e = smtp.send{
+ from = "&lt;sicrano@example.com&gt;",
+ rcpt = "&lt;fulano@example.com&gt;",
+ source = source,
+}
+</pre>
+
+
<!-- send +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id=send>
@@ -275,123 +393,6 @@ r, e = smtp.send{
}
</pre>
-<!-- message ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id=message>
-smtp.<b>message(</b>mesgt<b>)</b>
-</p>
-
-<p class=description>
-Returns a <em>simple</em>
-<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a> source that sends an SMTP message body, possibly multipart (arbitrarily deep).
-</p>
-
-<p class=parameters>
-The only parameter of the function is a table describing the message.
-<tt>Mesgt</tt> has the following form (notice the recursive structure):
-</p>
-
-<blockquote>
-<table summary="Mesgt table structure">
-<tr><td><tt>
-mesgt = {<br>
-&nbsp;&nbsp;headers = <i>header-table</i>,<br>
-&nbsp;&nbsp;body = <i>LTN12 source</i> or <i>string</i> or
-<i>multipart-mesgt</i><br>
-}<br>
-&nbsp;<br>
-multipart-mesgt = {<br>
-&nbsp;&nbsp;[preamble = <i>string</i>,]<br>
-&nbsp;&nbsp;[1] = <i>mesgt</i>,<br>
-&nbsp;&nbsp;[2] = <i>mesgt</i>,<br>
-&nbsp;&nbsp;...<br>
-&nbsp;&nbsp;[<i>n</i>] = <i>mesgt</i>,<br>
-&nbsp;&nbsp;[epilogue = <i>string</i>,]<br>
-}<br>
-</tt></td></tr>
-</table>
-</blockquote>
-
-<p class=parameters>
-For a simple message, all that is needed is a set of <tt>headers</tt>
-and the <tt>body</tt>. The message <tt>body</tt> can be given as a string
-or as a <em>simple</em>
-<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a>
-source. For multipart messages, the body is a table that
-recursively defines each part as an independent message, plus an optional
-<tt>preamble</tt> and <tt>epilogue</tt>.
-</p>
-
-<p class=return>
-The function returns a <em>simple</em>
-<a href="http://lua-users.org/wiki/FiltersSourcesAndSinks">LTN12</a>
-source that produces the
-message contents as defined by <tt>mesgt</tt>, chunk by chunk.
-Hopefully, the following
-example will make things clear. When in doubt, refer to the appropriate RFC
-as listed in the introduction. </p>
-
-<pre class=example>
--- load the smtp support and its friends
-local smtp = require("socket.smtp")
-local mime = require("mime")
-local ltn12 = require("ltn12")
-
--- creates a source to send a message with two parts. The first part is
--- plain text, the second part is a PNG image, encoded as base64.
-source = smtp.message{
- headers = {
- -- Remember that headers are *ignored* by smtp.send.
- from = "Sicrano de Oliveira &lt;sicrano@example.com&gt;",
- to = "Fulano da Silva &lt;fulano@example.com&gt;",
- subject = "Here is a message with attachments"
- },
- body = {
- preamble = "If your client doesn't understand attachments, \r\n" ..
- "it will still display the preamble and the epilogue.\r\n" ..
- "Preamble will probably appear even in a MIME enabled client.",
- -- first part: no headers means plain text, us-ascii.
- -- The mime.eol low-level filter normalizes end-of-line markers.
- [1] = {
- body = mime.eol(0, [[
- Lines in a message body should always end with CRLF.
- The smtp module will *NOT* perform translation. However, the
- send function *DOES* perform SMTP stuffing, whereas the message
- function does *NOT*.
- ]])
- },
- -- second part: headers describe content to be a png image,
- -- sent under the base64 transfer content encoding.
- -- notice that nothing happens until the message is actually sent.
- -- small chunks are loaded into memory right before transmission and
- -- translation happens on the fly.
- [2] = {
- headers = {
- ["content-type"] = 'image/png; name="image.png"',
- ["content-disposition"] = 'attachment; filename="image.png"',
- ["content-description"] = 'a beautiful image',
- ["content-transfer-encoding"] = "BASE64"
- },
- body = ltn12.source.chain(
- ltn12.source.file(io.open("image.png", "rb")),
- ltn12.filter.chain(
- mime.encode("base64"),
- mime.wrap()
- )
- )
- },
- epilogue = "This might also show up, but after the attachments"
- }
-}
-
--- finally send it
-r, e = smtp.send{
- from = "&lt;sicrano@example.com&gt;",
- rcpt = "&lt;fulano@example.com&gt;",
- source = source,
-}
-</pre>
-
<!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<div class=footer>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/socket.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/socket.html
index b9303cb505a..35f8391c845 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/socket.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/socket.html
@@ -51,6 +51,30 @@ To obtain the <tt>socket</tt> namespace, run:
local socket = require("socket")
</pre>
+<!-- headers.canonic ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="headers.canonic">
+socket.headers.<b>canonic</b></p>
+
+<p> The <tt>socket.headers.canonic</tt> table
+is used by the HTTP and SMTP modules to translate from
+lowercase field names back into their canonic
+capitalization. When a lowercase field name exists as a key
+in this table, the associated value is substituted in
+whenever the field name is sent out.
+</p>
+
+<p>
+You can obtain the <tt>headers</tt> namespace if case run-time
+modifications are required by running:
+</p>
+
+<pre class=example>
+-- loads the headers module
+local headers = require("headers")
+</pre>
+
+
<!-- bind ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id=bind>
@@ -90,7 +114,7 @@ of connect are defined as simple helper functions that restrict the
<!-- debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id=debug>
+<p class=name id=debug>
socket.<b>_DEBUG</b>
</p>
@@ -99,6 +123,19 @@ This constant is set to <tt><b>true</b></tt> if the library was compiled
with debug support.
</p>
+<!-- datagramsize +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id=debug>
+socket.<b>_DATAGRAMSIZE</b>
+</p>
+
+<p class=description>
+Default datagram size used by calls to
+<a href="udp.html#receive"<tt>receive</tt></a> and
+<a href="udp.html#receivefrom"><tt>receivefrom</tt></a>.
+(Unless changed in compile time, the value is 8192.)
+</p>
+
<!-- get time +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id=gettime>
@@ -106,8 +143,7 @@ socket.<b>gettime()</b>
</p>
<p class=description>
-Returns the time in seconds, relative to the origin of the
-universe. You should subtract the values returned by this function
+Returns the UNIX time in seconds. You should subtract the values returned by this function
to get meaningful values.
</p>
@@ -117,29 +153,6 @@ t = socket.gettime()
print(socket.gettime() - t .. " seconds elapsed")
</pre>
-<!-- socket.headers ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id="headers.canonic">
-socket.headers.<b>canonic</b></p>
-
-<p> The <tt>socket.headers.canonic</tt> table
-is used by the HTTP and SMTP modules to translate from
-lowercase field names back into their canonic
-capitalization. When a lowercase field name exists as a key
-in this table, the associated value is substituted in
-whenever the field name is sent out.
-</p>
-
-<p>
-You can obtain the <tt>headers</tt> namespace if case run-time
-modifications are required by running:
-</p>
-
-<pre class=example>
--- loads the headers module
-local headers = require("headers")
-</pre>
-
<!-- newtry +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id=newtry>
@@ -155,8 +168,7 @@ is raised.
<p class=parameters>
<tt>Finalizer</tt> is a function that will be called before
-<tt>try</tt> throws the exception. It will be called
-in <em>protected</em> mode.
+<tt>try</tt> throws the exception.
</p>
<p class=return>
@@ -204,15 +216,9 @@ to throw exceptions.
</p>
<p class=return>
-Returns an equivalent function that instead of throwing exceptions,
-returns <tt><b>nil</b></tt> followed by an error message.
-</p>
-
-<p class=note>
-Note: Beware that if your function performs some illegal operation that
-raises an error, the protected function will catch the error and return it
-as a string. This is because the <a href=#try><tt>try</tt></a> function
-uses errors as the mechanism to throw exceptions.
+Returns an equivalent function that instead of throwing exceptions in case of
+a failed <a href=#try><tt>try</tt></a> call, returns <tt><b>nil</b></tt>
+followed by an error message.
</p>
<!-- select +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -238,7 +244,9 @@ non-numeric indices) in the arrays will be silently ignored.
<p class=return> The function returns a list with the sockets ready for
reading, a list with the sockets ready for writing and an error message.
-The error message is "<tt>timeout</tt>" if a timeout condition was met and
+The error message is "<tt>timeout</tt>" if a timeout
+condition was met, "<tt>select failed</tt>" if the call
+to <tt>select</tt> failed, and
<tt><b>nil</b></tt> otherwise. The returned tables are
doubly keyed both by integers and also by the sockets
themselves, to simplify the test if a specific socket has
@@ -246,7 +254,7 @@ changed status.
</p>
<p class=note>
-<b>Note: </b>: <tt>select</tt> can monitor a limited number
+<b>Note:</b> <tt>select</tt> can monitor a limited number
of sockets, as defined by the constant <tt>socket._SETSIZE</tt>. This
number may be as high as 1024 or as low as 64 by default,
depending on the system. It is usually possible to change this
@@ -276,6 +284,18 @@ it to <tt>select</tt>, it will be ignored.
<b>Using select with non-socket objects</b>: Any object that implements <tt>getfd</tt> and <tt>dirty</tt> can be used with <tt>select</tt>, allowing objects from other libraries to be used within a <tt>socket.select</tt> driven loop.
</p>
+<!-- setsize ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id=setsize>
+socket.<b>_SETSIZE</b>
+</p>
+
+<p class=description>
+The maximum number of sockets that the <a
+href=#select><tt>select</tt></a> function can handle.
+</p>
+
+
<!-- sink ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id=sink>
@@ -383,15 +403,14 @@ side closes the connection.
The function returns a source with the appropriate behavior.
</p>
-<!-- setsize ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<!-- socketinvalid ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id=setsize>
-socket.<b>_SETSIZE</b>
+<p class=name id=socketinvalid>
+socket.<b>_SOCKETINVALID</b>
</p>
<p class=description>
-The maximum number of sockets that the <a
-href=#select><tt>select</tt></a> function can handle.
+The OS value for an invalid socket.
</p>
<!-- try ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -401,9 +420,9 @@ socket.<b>try(</b>ret<sub>1</sub> [, ret<sub>2</sub> ... ret<sub>N</sub>]<b>)</b
</p>
<p class=description>
-Throws an exception in case of error. The exception can only be caught
-by the <a href=#protect><tt>protect</tt></a> function. It does not explode
-into an error message.
+Throws an exception in case <tt>ret<sub>1</sub></tt> is falsy, using
+<tt>ret<sub>2</sub></tt> as the error message. The exception is supposed to be caught
+by a <a href=#protect><tt>protect</tt></a>ed function only.
</p>
<p class=parameters>
@@ -414,7 +433,10 @@ nested with <tt>try</tt>.
<p class=return>
The function returns <tt>ret</tt><sub>1</sub> to <tt>ret</tt><sub>N</sub> if
-<tt>ret</tt><sub>1</sub> is not <tt><b>nil</b></tt>. Otherwise, it calls <tt>error</tt> passing <tt>ret</tt><sub>2</sub>.
+<tt>ret</tt><sub>1</sub> is not <tt><b>nil</b></tt> or <tt><b>false</b></tt>.
+Otherwise, it calls <tt>error</tt> passing <tt>ret</tt><sub>2</sub> wrapped
+in a table with metatable used by <a href=#protect><tt>protect</tt></a> to
+distinguish exceptions from runtime errors.
</p>
<pre class=example>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/tcp.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/tcp.html
index 151a4c993c1..c6c6eb26956 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/tcp.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/tcp.html
@@ -1,10 +1,10 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="description" content="LuaSocket: The TCP/IP support">
-<meta name="keywords" content="Lua, LuaSocket, Socket, TCP, Library, Network, Support">
+<meta name="keywords" content="Lua, LuaSocket, Socket, TCP, Library, Network, Support">
<title>LuaSocket: TCP/IP support</title>
<link rel="stylesheet" href="reference.css" type="text/css">
</head>
@@ -28,7 +28,7 @@
<a href="index.html#download">download</a> &middot;
<a href="installation.html">installation</a> &middot;
<a href="introduction.html">introduction</a> &middot;
-<a href="reference.html">reference</a>
+<a href="reference.html">reference</a>
</p>
</center>
<hr>
@@ -36,56 +36,11 @@
<!-- tcp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<h2 id="tcp">TCP</h2>
-
-<!-- socket.tcp +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id="socket.tcp">
-socket.<b>tcp()</b>
-</p>
-
-<p class=description>
-Creates and returns an IPv4 TCP master object. A master object can
-be transformed into a server object with the method
-<a href=#listen><tt>listen</tt></a> (after a call to <a
-href=#bind><tt>bind</tt></a>) or into a client object with
-the method <a href=#connect><tt>connect</tt></a>. The only other
-method supported by a master object is the
-<a href=#close><tt>close</tt></a> method.</p>
-
-<p class=return>
-In case of success, a new master object is returned. In case of error,
-<b><tt>nil</tt></b> is returned, followed by an error message.
-</p>
-
-<!-- socket.tcp6 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id="socket.tcp6">
-socket.<b>tcp6()</b>
-</p>
-
-<p class=description>
-Creates and returns an IPv6 TCP master object. A master object can
-be transformed into a server object with the method
-<a href=#listen><tt>listen</tt></a> (after a call to <a
-href=#bind><tt>bind</tt></a>) or into a client object with
-the method <a href=#connect><tt>connect</tt></a>. The only other
-method supported by a master object is the
-<a href=#close><tt>close</tt></a> method.</p>
-
-<p class=return>
-In case of success, a new master object is returned. In case of error,
-<b><tt>nil</tt></b> is returned, followed by an error message.
-</p>
-
-<p class=note>
-Note: The TCP object returned will have the option
-"<tt>ipv6-v6only</tt>" set to <tt><b>true</b></tt>.
-</p>
+<h2 id="tcp">TCP</h2>
<!-- accept +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="accept">
+<p class=name id="accept">
server:<b>accept()</b>
</p>
@@ -95,9 +50,9 @@ object and returns a client object representing that connection.
</p>
<p class=return>
-If a connection is successfully initiated, a client object is returned.
+If a connection is successfully initiated, a client object is returned.
If a timeout condition is met, the method returns <b><tt>nil</tt></b>
-followed by the error string '<tt>timeout</tt>'. Other errors are
+followed by the error string '<tt>timeout</tt>'. Other errors are
reported by <b><tt>nil</tt></b> followed by a message describing the error.
</p>
@@ -107,28 +62,28 @@ with a server object in
the <tt>recvt</tt> parameter before a call to <tt>accept</tt> does
<em>not</em> guarantee <tt>accept</tt> will return immediately. Use the <a
href=#settimeout><tt>settimeout</tt></a> method or <tt>accept</tt>
-might block until <em>another</em> client shows up.
+might block until <em>another</em> client shows up.
</p>
<!-- bind +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="bind">
+<p class=name id="bind">
master:<b>bind(</b>address, port<b>)</b>
</p>
<p class=description>
Binds a master object to <tt>address</tt> and <tt>port</tt> on the
-local host.
+local host.
<p class=parameters>
-<tt>Address</tt> can be an IP address or a host name.
-<tt>Port</tt> must be an integer number in the range [0..64K).
+<tt>Address</tt> can be an IP address or a host name.
+<tt>Port</tt> must be an integer number in the range [0..64K).
If <tt>address</tt>
is '<tt>*</tt>', the system binds to all local interfaces
using the <tt>INADDR_ANY</tt> constant or
-<tt>IN6ADDR_ANY_INIT</tt>, according to the family.
+<tt>IN6ADDR_ANY_INIT</tt>, according to the family.
If <tt>port</tt> is 0, the system automatically
-chooses an ephemeral port.
+chooses an ephemeral port.
</p>
<p class=return>
@@ -137,13 +92,13 @@ method returns <b><tt>nil</tt></b> followed by an error message.
</p>
<p class=note>
-Note: The function <a href=socket.html#bind><tt>socket.bind</tt></a>
+Note: The function <a href=socket.html#bind><tt>socket.bind</tt></a>
is available and is a shortcut for the creation of server sockets.
</p>
<!-- close ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="close">
+<p class=name id="close">
master:<b>close()</b><br>
client:<b>close()</b><br>
server:<b>close()</b>
@@ -154,14 +109,14 @@ Closes a TCP object. The internal socket used by the object is closed
and the local address to which the object was
bound is made available to other applications. No further operations
(except for further calls to the <tt>close</tt> method) are allowed on
-a closed socket.
+a closed socket.
</p>
<p class=note>
Note: It is important to close all used sockets once they are not
needed, since, in many systems, each socket uses a file descriptor,
which are limited system resources. Garbage-collected objects are
-automatically closed before destruction, though.
+automatically closed before destruction, though.
</p>
<!-- connect ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -172,19 +127,19 @@ master:<b>connect(</b>address, port<b>)</b>
<p class=description>
Attempts to connect a master object to a remote host, transforming it into a
-client object.
-Client objects support methods
+client object.
+Client objects support methods
<a href=#send><tt>send</tt></a>,
-<a href=#receive><tt>receive</tt></a>,
-<a href=#getsockname><tt>getsockname</tt></a>,
+<a href=#receive><tt>receive</tt></a>,
+<a href=#getsockname><tt>getsockname</tt></a>,
<a href=#getpeername><tt>getpeername</tt></a>,
-<a href=#settimeout><tt>settimeout</tt></a>,
+<a href=#settimeout><tt>settimeout</tt></a>,
and <a href=#close><tt>close</tt></a>.
</p>
<p class=parameters>
-<tt>Address</tt> can be an IP address or a host name.
-<tt>Port</tt> must be an integer number in the range [1..64K).
+<tt>Address</tt> can be an IP address or a host name.
+<tt>Port</tt> must be an integer number in the range [1..64K).
</p>
<p class=return>
@@ -193,14 +148,14 @@ describing the error. In case of success, the method returns 1.
</p>
<p class=note>
-Note: The function <a href=socket.html#connect><tt>socket.connect</tt></a>
+Note: The function <a href=socket.html#connect><tt>socket.connect</tt></a>
is available and is a shortcut for the creation of client sockets.
</p>
<p class=note>
-Note: Starting with LuaSocket 2.0,
+Note: Starting with LuaSocket 2.0,
the <a href=#settimeout><tt>settimeout</tt></a>
-method affects the behavior of <tt>connect</tt>, causing it to return
+method affects the behavior of <tt>connect</tt>, causing it to return
with an error in case of a timeout. If that happens, you can still call <a
href=socket.html#select><tt>socket.select</tt></a> with the socket in the
<tt>sendt</tt> table. The socket will be writable when the connection is
@@ -208,14 +163,89 @@ established.
</p>
<p class=note>
-Note: Starting with LuaSocket 2.1, the host name resolution
-depends on whether the socket was created by <a
-href=#socket.tcp><tt>socket.tcp</tt></a> or <a
-href=#socket.tcp6><tt>socket.tcp6</tt></a>. Addresses from
-the appropriate family are tried in succession until the
-first success or until the last failure.
+Note: Starting with LuaSocket 3.0, the host name resolution
+depends on whether the socket was created by
+<a href=#socket.tcp><tt>socket.tcp</tt></a>,
+<a href=#socket.tcp4><tt>socket.tcp4</tt></a> or
+<a href=#socket.tcp6><tt>socket.tcp6</tt></a>. Addresses from
+the appropriate family (or both) are tried in the order
+returned by the resolver until the
+first success or until the last failure. If the timeout was
+set to zero, only the first address is tried.
+</p>
+
+<!-- dirty +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="dirty">
+master:<b>dirty()</b><br>
+client:<b>dirty()</b><br>
+server:<b>dirty()</b>
+</p>
+
+<p class=description>
+Check the read buffer status.
+</p>
+
+<p class=return>
+Returns <tt>true</tt> if there is any data in the read buffer, <tt>false</tt> otherwise.
+</p>
+
+<p class=note>
+Note: <b>This is an internal method, use at your own risk.</b>
+</p>
+
+
+<!-- getfd +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="getfd">
+master:<b>getfd()</b><br>
+client:<b>getfd()</b><br>
+server:<b>getfd()</b>
+</p>
+
+<p class=description>
+Returns the underling socket descriptor or handle associated to the object.
+</p>
+
+<p class=return>
+The descriptor or handle. In case the object has been closed, the return will be -1.
+</p>
+
+<p class=note>
+Note: <b>This is an internal method. Unlikely to be
+portable. Use at your own risk. </b>
+</p>
+
+
+<!-- getoption ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="getoption">
+client:<b>getoption(</b>option)</b><br>
+server:<b>getoption(</b>option)</b>
+</p>
+
+<p class=description>
+Gets options for the TCP object.
+See <a href=#setoption><tt>setoption</tt></a> for description of the
+option names and values.
+</p>
+
+<p class=parameters>
+<tt>Option</tt> is a string with the option name.
+<ul>
+
+<li> '<tt>keepalive</tt>'
+<li> '<tt>linger</tt>'
+<li> '<tt>reuseaddr</tt>'
+<li> '<tt>tcp-nodelay</tt>'
+</ul>
+
+<p class=return>
+The method returns the option <tt>value</tt> in case of success, or
+<b><tt>nil</tt></b> followed by an error message otherwise.
</p>
+
<!-- getpeername ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id="getpeername">
@@ -227,10 +257,10 @@ Returns information about the remote side of a connected client object.
</p>
<p class=return>
-Returns a string with the IP address of the peer, the
-port number that peer is using for the connection,
-and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
-In case of error, the method returns <b><tt>nil</tt></b>.
+Returns a string with the IP address of the peer, the
+port number that peer is using for the connection,
+and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
+In case of error, the method returns <b><tt>nil</tt></b>.
</p>
<p class=note>
@@ -246,13 +276,13 @@ server:<b>getsockname()</b>
</p>
<p class=description>
-Returns the local address information associated to the object.
+Returns the local address information associated to the object.
</p>
<p class=return>
-The method returns a string with local IP address, a number with
-the local port,
-and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
+The method returns a string with local IP address, a number with
+the local port,
+and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
In case of error, the method returns <b><tt>nil</tt></b>.
</p>
@@ -266,32 +296,46 @@ server:<b>getstats()</b><br>
<p class=description>
Returns accounting information on the socket, useful for throttling
-of bandwidth.
+of bandwidth.
</p>
<p class=return>
The method returns the number of bytes received, the number of bytes sent,
-and the age of the socket object in seconds.
+and the age of the socket object in seconds.
</p>
+<!-- gettimeout +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="gettimeout">
+master:<b>gettimeout()</b><br>
+client:<b>gettimeout()</b><br>
+server:<b>gettimeout()</b>
+</p>
+
+<p class=description>
+Returns the current block timeout followed by the curent
+total timeout.
+</p>
+
+
<!-- listen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="listen">
+<p class=name id="listen">
master:<b>listen(</b>backlog<b>)</b>
</p>
<p class=description>
Specifies the socket is willing to receive connections, transforming the
-object into a server object. Server objects support the
-<a href=#accept><tt>accept</tt></a>,
-<a href=#getsockname><tt>getsockname</tt></a>,
-<a href=#setoption><tt>setoption</tt></a>,
-<a href=#settimeout><tt>settimeout</tt></a>,
-and <a href=#close><tt>close</tt></a> methods.
+object into a server object. Server objects support the
+<a href=#accept><tt>accept</tt></a>,
+<a href=#getsockname><tt>getsockname</tt></a>,
+<a href=#setoption><tt>setoption</tt></a>,
+<a href=#settimeout><tt>settimeout</tt></a>,
+and <a href=#close><tt>close</tt></a> methods.
</p>
<p class=parameters>
-The parameter <tt>backlog</tt> specifies the number of client
+The parameter <tt>backlog</tt> specifies the number of client
connections that can
be queued waiting for service. If the queue is full and another client
attempts connection, the connection is refused.
@@ -310,11 +354,11 @@ client:<b>receive(</b>[pattern [, prefix]]<b>)</b>
<p class=description>
Reads data from a client object, according to the specified <em>read
-pattern</em>. Patterns follow the Lua file I/O format, and the difference in performance between all patterns is negligible.
+pattern</em>. Patterns follow the Lua file I/O format, and the difference in performance between all patterns is negligible.
</p>
<p class=parameters>
-<tt>Pattern</tt> can be any of the following:
+<tt>Pattern</tt> can be any of the following:
</p>
<ul>
@@ -325,7 +369,7 @@ terminated by a LF character (ASCII&nbsp;10), optionally preceded by a
CR character (ASCII&nbsp;13). The CR and LF characters are not included in
the returned line. In fact, <em>all</em> CR characters are
ignored by the pattern. This is the default pattern;
-<li> <tt>number</tt>: causes the method to read a specified <tt>number</tt>
+<li> <tt>number</tt>: causes the method to read a specified <tt>number</tt>
of bytes from the socket.
</ul>
@@ -347,10 +391,10 @@ closed before the transmission was completed or the string
<p class=note>
<b>Important note</b>: This function was changed <em>severely</em>. It used
to support multiple patterns (but I have never seen this feature used) and
-now it doesn't anymore. Partial results used to be returned in the same
+now it doesn't anymore. Partial results used to be returned in the same
way as successful results. This last feature violated the idea that all
functions should return <tt><b>nil</b></tt> on error. Thus it was changed
-too.
+too.
</p>
<!-- send +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -366,7 +410,7 @@ Sends <tt>data</tt> through client object.
<p class=parameters>
<tt>Data</tt> is the string to be sent. The optional arguments
<tt>i</tt> and <tt>j</tt> work exactly like the standard
-<tt>string.sub</tt> Lua function to allow the selection of a
+<tt>string.sub</tt> Lua function to allow the selection of a
substring to be sent.
</p>
@@ -385,10 +429,10 @@ there was a timeout during the operation.
</p>
<p class=note>
-Note: Output is <em>not</em> buffered. For small strings,
-it is always better to concatenate them in Lua
-(with the '<tt>..</tt>' operator) and send the result in one call
-instead of calling the method several times.
+Note: Output is <em>not</em> buffered. For small strings,
+it is always better to concatenate them in Lua
+(with the '<tt>..</tt>' operator) and send the result in one call
+instead of calling the method several times.
</p>
<!-- setoption ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -400,12 +444,12 @@ server:<b>setoption(</b>option [, value]<b>)</b>
<p class=description>
Sets options for the TCP object. Options are only needed by low-level or
-time-critical applications. You should only modify an option if you
-are sure you need it.
+time-critical applications. You should only modify an option if you
+are sure you need it.
</p>
<p class=parameters>
-<tt>Option</tt> is a string with the option name, and <tt>value</tt>
+<tt>Option</tt> is a string with the option name, and <tt>value</tt>
depends on the option being set:
<ul>
@@ -413,7 +457,7 @@ depends on the option being set:
<li> '<tt>keepalive</tt>': Setting this option to <tt>true</tt> enables
the periodic transmission of messages on a connected socket. Should the
connected party fail to respond to these messages, the connection is
-considered broken and processes using the socket are notified;
+considered broken and processes using the socket are notified;
<li> '<tt>linger</tt>': Controls the action taken when unsent data are
queued on a socket and a close is performed. The value is a table with a
@@ -424,13 +468,13 @@ it is able to transmit the data or until '<tt>timeout</tt>' has passed. If
'<tt>on</tt>' is <tt>false</tt> and a close is issued, the system will
process the close in a manner that allows the process to continue as
quickly as possible. I do not advise you to set this to anything other than
-zero;
+zero;
<li> '<tt>reuseaddr</tt>': Setting this option indicates that the rules
-used in validating addresses supplied in a call to
+used in validating addresses supplied in a call to
<a href=#bind><tt>bind</tt></a> should allow reuse of local addresses;
-<li> '<tt>tcp-nodelay</tt>': Setting this option to <tt>true</tt>
+<li> '<tt>tcp-nodelay</tt>': Setting this option to <tt>true</tt>
disables the Nagle's algorithm for the connection;
<li> '<tt>ipv6-v6only</tt>':
@@ -447,34 +491,6 @@ followed by an error message otherwise.
Note: The descriptions above come from the man pages.
</p>
-<!-- getoption ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class=name id="getoption">
-client:<b>getoption(</b>option)</b><br>
-server:<b>getoption(</b>option)</b>
-</p>
-
-<p class=description>
-Gets options for the TCP object.
-See <a href=#setoption><tt>setoption</tt></a> for description of the
-option names and values.
-</p>
-
-<p class=parameters>
-<tt>Option</tt> is a string with the option name.
-<ul>
-
-<li> '<tt>keepalive</tt>'
-<li> '<tt>linger</tt>'
-<li> '<tt>reuseaddr</tt>'
-<li> '<tt>tcp-nodelay</tt>'
-</ul>
-
-<p class=return>
-The method returns the option <tt>value</tt> in case of success, or
-<b><tt>nil</tt></b> followed by an error message otherwise.
-</p>
-
<!-- setstats +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class=name id="setstats">
@@ -485,7 +501,7 @@ server:<b>setstats(</b>received, sent, age<b>)</b><br>
<p class=description>
Resets accounting information on the socket, useful for throttling
-of bandwidth.
+of bandwidth.
</p>
<p class=parameters>
@@ -495,7 +511,7 @@ of bandwidth.
</p>
<p class=return>
-The method returns 1 in case of success and <tt><b>nil</b></tt> otherwise.
+The method returns 1 in case of success and <tt><b>nil</b></tt> otherwise.
</p>
<!-- settimeout +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -509,8 +525,8 @@ server:<b>settimeout(</b>value [, mode]<b>)</b>
<p class=description>
Changes the timeout values for the object. By default,
all I/O operations are blocking. That is, any call to the methods
-<a href=#send><tt>send</tt></a>,
-<a href=#receive><tt>receive</tt></a>, and
+<a href=#send><tt>send</tt></a>,
+<a href=#receive><tt>receive</tt></a>, and
<a href=#accept><tt>accept</tt></a>
will block indefinitely, until the operation completes. The
<tt>settimeout</tt> method defines a limit on the amount of time the
@@ -521,7 +537,7 @@ time has elapsed, the affected methods give up and fail with an error code.
<p class=parameters>
The amount of time to wait is specified as the
<tt>value</tt> parameter, in seconds. There are two timeout modes and
-both can be used together for fine tuning:
+both can be used together for fine tuning:
</p>
<ul>
@@ -532,7 +548,7 @@ default mode;</li>
<li> '<tt>t</tt>': <em>total</em> timeout. Specifies the upper limit on
the amount of time LuaSocket can block a Lua script before returning from
-a call.</li>
+a call.</li>
</ul>
<p class=parameters>
@@ -562,7 +578,7 @@ client:<b>shutdown(</b>mode<b>)</b><br>
</p>
<p class=description>
-Shuts down part of a full-duplex connection.
+Shuts down part of a full-duplex connection.
</p>
<p class=parameters>
@@ -579,66 +595,107 @@ This is the default mode;
This function returns 1.
</p>
-<!-- dirty +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<!-- setfd +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="dirty">
-master:<b>dirty()</b><br>
-client:<b>dirty()</b><br>
-server:<b>dirty()</b>
+<p class=name id="setfd">
+master:<b>setfd(</b>fd<b>)</b><br>
+client:<b>setfd(</b>fd<b>)</b><br>
+server:<b>setfd(</b>fd<b>)</b>
</p>
<p class=description>
-Check the read buffer status.
+Sets the underling socket descriptor or handle associated to the object. The current one is simply replaced, not closed, and no other change to the object state is made.
</p>
<p class=return>
-Returns <tt>true</tt> if there is any data in the read buffer, <tt>false</tt> otherwise.
+No return value.
</p>
<p class=note>
-Note: <b>This is an internal method, any use is unlikely to be portable.</b>
+Note: <b>This is an internal method. Unlikely to be
+portable. Use at your own risk. </b>
</p>
-<!-- getfd +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<!-- socket.tcp +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<p class=name id="getfd">
-master:<b>getfd()</b><br>
-client:<b>getfd()</b><br>
-server:<b>getfd()</b>
+<p class=name id="socket.tcp">
+socket.<b>tcp()</b>
</p>
<p class=description>
-Returns the underling socket descriptor or handle associated to the object.
-</p>
+Creates and returns an TCP master object. A master object can
+be transformed into a server object with the method
+<a href=#listen><tt>listen</tt></a> (after a call to <a
+href=#bind><tt>bind</tt></a>) or into a client object with
+the method <a href=#connect><tt>connect</tt></a>. The only other
+method supported by a master object is the
+<a href=#close><tt>close</tt></a> method.</p>
<p class=return>
-The descriptor or handle. In case the object has been closed, the return will be -1.
+In case of success, a new master object is returned. In case of error,
+<b><tt>nil</tt></b> is returned, followed by an error message.
</p>
<p class=note>
-Note: <b>This is an internal method, any use is unlikely to be portable.</b>
+Note: The choice between IPv4 and IPv6 happens during a call to
+<a href=#bind><tt>bind</tt></a> or <a
+href=#bind><tt>connect</tt></a>, depending on the address
+family obtained from the resolver.
</p>
-<!-- setfd +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<p class=note>
+Note: Before the choice between IPv4 and IPv6 happens,
+the internal socket object is invalid and therefore <a
+href=#setoption><tt>setoption</tt></a> will fail.
+</p>
-<p class=name id="setfd">
-master:<b>setfd(</b>fd<b>)</b><br>
-client:<b>setfd(</b>fd<b>)</b><br>
-server:<b>setfd(</b>fd<b>)</b>
+<!-- socket.tcp +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="socket.tcp4">
+socket.<b>tcp4()</b>
</p>
<p class=description>
-Sets the underling socket descriptor or handle associated to the object. The current one is simply replaced, not closed, and no other change to the object state is made.
+Creates and returns an IPv4 TCP master object. A master object can
+be transformed into a server object with the method
+<a href=#listen><tt>listen</tt></a> (after a call to <a
+href=#bind><tt>bind</tt></a>) or into a client object with
+the method <a href=#connect><tt>connect</tt></a>. The only other
+method supported by a master object is the
+<a href=#close><tt>close</tt></a> method.</p>
+
+<p class=return>
+In case of success, a new master object is returned. In case of error,
+<b><tt>nil</tt></b> is returned, followed by an error message.
+</p>
+
+<!-- socket.tcp6 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="socket.tcp6">
+socket.<b>tcp6()</b>
</p>
+<p class=description>
+Creates and returns an IPv6 TCP master object. A master object can
+be transformed into a server object with the method
+<a href=#listen><tt>listen</tt></a> (after a call to <a
+href=#bind><tt>bind</tt></a>) or into a client object with
+the method <a href=#connect><tt>connect</tt></a>. The only other
+method supported by a master object is the
+<a href=#close><tt>close</tt></a> method.</p>
+
<p class=return>
-No return value.
+In case of success, a new master object is returned. In case of error,
+<b><tt>nil</tt></b> is returned, followed by an error message.
</p>
<p class=note>
-Note: <b>This is an internal method, any use is unlikely to be portable.</b>
+Note: The TCP object returned will have the option
+"<tt>ipv6-v6only</tt>" set to <tt><b>true</b></tt>.
</p>
+
+
<!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<div class=footer>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/doc/udp.html b/Build/source/texk/web2c/luatexdir/luasocket/doc/udp.html
index 554fa317688..4618aadb97e 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/doc/udp.html
+++ b/Build/source/texk/web2c/luatexdir/luasocket/doc/udp.html
@@ -4,7 +4,7 @@
<head>
<meta name="description" content="LuaSocket: The UDP support">
-<meta name="keywords" content="Lua, LuaSocket, Socket, UDP, Library, Network, Support">
+<meta name="keywords" content="Lua, LuaSocket, Socket, UDP, Library, Network, Support">
<title>LuaSocket: UDP support</title>
<link rel="stylesheet" href="reference.css" type="text/css">
</head>
@@ -28,7 +28,7 @@
<a href="index.html#download">download</a> &middot;
<a href="installation.html">installation</a> &middot;
<a href="introduction.html">introduction</a> &middot;
-<a href="reference.html">reference</a>
+<a href="reference.html">reference</a>
</p>
</center>
<hr>
@@ -37,74 +37,7 @@
<!-- udp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-<h2 id="udp">UDP</h2>
-
-<!-- socket.udp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class="name" id="socket.udp">
-socket.<b>udp()</b>
-</p>
-
-<p class="description">
-Creates and returns an unconnected IPv4 UDP object.
-Unconnected objects support the
-<a href="#sendto"><tt>sendto</tt></a>,
-<a href="#receive"><tt>receive</tt></a>,
-<a href="#receivefrom"><tt>receivefrom</tt></a>,
-<a href="#getoption"><tt>getoption</tt></a>,
-<a href="#getsockname"><tt>getsockname</tt></a>,
-<a href="#setoption"><tt>setoption</tt></a>,
-<a href="#settimeout"><tt>settimeout</tt></a>,
-<a href="#setpeername"><tt>setpeername</tt></a>,
-<a href="#setsockname"><tt>setsockname</tt></a>, and
-<a href="#close"><tt>close</tt></a>.
-The <a href="#setpeername"><tt>setpeername</tt></a>
-is used to connect the object.
-</p>
-
-<p class="return">
-In case of success, a new unconnected UDP object
-returned. In case of error, <b><tt>nil</tt></b> is returned, followed by
-an error message.
-</p>
-
-<!-- socket.udp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class="name" id="socket.udp6">
-socket.<b>udp6()</b>
-</p>
-
-<p class="description">
-Creates and returns an unconnected IPv6 UDP object.
-Unconnected objects support the
-<a href="#sendto"><tt>sendto</tt></a>,
-<a href="#receive"><tt>receive</tt></a>,
-<a href="#receivefrom"><tt>receivefrom</tt></a>,
-<a href="#getoption"><tt>getoption</tt></a>,
-<a href="#getsockname"><tt>getsockname</tt></a>,
-<a href="#setoption"><tt>setoption</tt></a>,
-<a href="#settimeout"><tt>settimeout</tt></a>,
-<a href="#setpeername"><tt>setpeername</tt></a>,
-<a href="#setsockname"><tt>setsockname</tt></a>, and
-<a href="#close"><tt>close</tt></a>.
-The <a href="#setpeername"><tt>setpeername</tt></a>
-is used to connect the object.
-</p>
-
-<p class="return">
-In case of success, a new unconnected UDP object
-returned. In case of error, <b><tt>nil</tt></b> is returned, followed by
-an error message.
-</p>
-
-<p class=note>
-Note: The TCP object returned will have the option
-"<tt>ipv6-v6only</tt>" set to <tt><b>true</b></tt>.
-</p>
-
-
-
-<!-- close +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<h2 id="udp">UDP</h2>
<!-- close +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
@@ -129,6 +62,40 @@ Garbage-collected objects are automatically closed before
destruction, though.
</p>
+<!-- getoption +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class="name" id="getoption">
+connected:<b>getoption()</b><br>
+unconnected:<b>getoption()</b>
+</p>
+
+<p class="description">
+Gets an option value from the UDP object.
+See <a href=#setoption><tt>setoption</tt></a> for
+description of the option names and values.
+</p>
+
+<p class="parameters"><tt>Option</tt> is a string with the option name.
+<ul>
+<li> '<tt>dontroute</tt>'
+<li> '<tt>broadcast</tt>'
+<li> '<tt>reuseaddr</tt>'
+<li> '<tt>reuseport</tt>'
+<li> '<tt>ip-multicast-loop</tt>'
+<li> '<tt>ipv6-v6only</tt>'
+<li> '<tt>ip-multicast-if</tt>'
+<li> '<tt>ip-multicast-ttl</tt>'
+<li> '<tt>ip-add-membership</tt>'
+<li> '<tt>ip-drop-membership</tt>'
+</ul>
+</p>
+
+<p class=return>
+The method returns the option <tt>value</tt> in case of
+success, or
+<b><tt>nil</tt></b> followed by an error message otherwise.
+</p>
+
<!-- getpeername +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class="name" id="getpeername">
@@ -142,10 +109,10 @@ associated with a connected UDP object.
<p class=return>
-Returns a string with the IP address of the peer, the
-port number that peer is using for the connection,
-and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
-In case of error, the method returns <b><tt>nil</tt></b>.
+Returns a string with the IP address of the peer, the
+port number that peer is using for the connection,
+and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
+In case of error, the method returns <b><tt>nil</tt></b>.
</p>
<p class="note">
@@ -165,9 +132,9 @@ Returns the local address information associated to the object.
<p class=return>
-The method returns a string with local IP address, a number with
-the local port,
-and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
+The method returns a string with local IP address, a number with
+the local port,
+and a string with the family ("<tt>inet</tt>" or "<tt>inet6</tt>").
In case of error, the method returns <b><tt>nil</tt></b>.
</p>
@@ -179,6 +146,18 @@ first time (in which case it is bound to an ephemeral port and the
wild-card address).
</p>
+<!-- gettimeout +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class=name id="gettimeout">
+connected:<b>settimeout(</b>value<b>)</b><br>
+unconnected:<b>settimeout(</b>value<b>)</b>
+</p>
+
+<p class=description>
+Returns the current timeout value.
+</p>
+
+
<!-- receive +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class="name" id="receive">
@@ -199,9 +178,12 @@ specifies the maximum size of the datagram to be retrieved. If
there are more than <tt>size</tt> bytes available in the datagram,
the excess bytes are discarded. If there are less then
<tt>size</tt> bytes available in the current datagram, the
-available bytes are returned. If <tt>size</tt> is omitted, the
-maximum datagram size is used (which is currently limited by the
-implementation to 8192 bytes).
+available bytes are returned.
+If <tt>size</tt> is omitted, the
+compile-time constant <a
+href=socket.html#datagramsize><tt>socket._DATAGRAMSIZE</tt></a> is used
+(it defaults to 8192 bytes). Larger sizes will cause a
+temporary buffer to be allocated for the operation.
</p>
<p class="return">
@@ -217,46 +199,12 @@ unconnected:<b>receivefrom(</b>[size]<b>)</b>
</p>
<p class="description">
-Works exactly as the <a href="#receive"><tt>receive</tt></a>
+Works exactly as the <a href="#receive"><tt>receive</tt></a>
method, except it returns the IP
address and port as extra return values (and is therefore slightly less
efficient).
</p>
-<!-- getoption +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class="name" id="getoption">
-connected:<b>getoption()</b><br>
-unconnected:<b>getoption()</b>
-</p>
-
-<p class="description">
-Gets an option value from the UDP object.
-See <a href=#setoption><tt>setoption</tt></a> for
-description of the option names and values.
-</p>
-
-<p class="parameters"><tt>Option</tt> is a string with the option name.
-<ul>
-<li> '<tt>dontroute</tt>'
-<li> '<tt>broadcast</tt>'
-<li> '<tt>reuseaddr</tt>'
-<li> '<tt>reuseport</tt>'
-<li> '<tt>ip-multicast-loop</tt>'
-<li> '<tt>ipv6-v6only</tt>'
-<li> '<tt>ip-multicast-if</tt>'
-<li> '<tt>ip-multicast-ttl</tt>'
-<li> '<tt>ip-add-membership</tt>'
-<li> '<tt>ip-drop-membership</tt>'
-</ul>
-</p>
-
-<p class=return>
-The method returns the option <tt>value</tt> in case of
-success, or
-<b><tt>nil</tt></b> followed by an error message otherwise.
-</p>
-
<!-- send ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class="name" id="send">
@@ -268,7 +216,7 @@ Sends a datagram to the UDP peer of a connected object.
</p>
<p class="parameters">
-<tt>Datagram</tt> is a string with the datagram contents.
+<tt>Datagram</tt> is a string with the datagram contents.
The maximum datagram size for UDP is 64K minus IP layer overhead.
However datagrams larger than the link layer packet size will be
fragmented, which may deteriorate performance and/or reliability.
@@ -298,11 +246,11 @@ Sends a datagram to the specified IP address and port number.
<p class="parameters">
<tt>Datagram</tt> is a string with the
-datagram contents.
+datagram contents.
The maximum datagram size for UDP is 64K minus IP layer overhead.
However datagrams larger than the link layer packet size will be
fragmented, which may deteriorate performance and/or reliability.
-<tt>Ip</tt> is the IP address of the recipient.
+<tt>Ip</tt> is the IP address of the recipient.
Host names are <em>not</em> allowed for performance reasons.
<tt>Port</tt> is the port number at the recipient.
@@ -320,6 +268,75 @@ refuses to send a message to the specified address (i.e. no
interface accepts the address).
</p>
+<!-- setoption +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class="name" id="setoption">
+connected:<b>setoption(</b>option [, value]<b>)</b><br>
+unconnected:<b>setoption(</b>option [, value]<b>)</b>
+</p>
+
+<p class="description">
+Sets options for the UDP object. Options are
+only needed by low-level or time-critical applications. You should
+only modify an option if you are sure you need it.</p>
+<p class="parameters"><tt>Option</tt> is a string with the option
+name, and <tt>value</tt> depends on the option being set:
+</p>
+
+<ul>
+<li> '<tt>dontroute</tt>': Indicates that outgoing
+messages should bypass the standard routing facilities.
+Receives a boolean value;
+<li> '<tt>broadcast</tt>': Requests permission to send
+broadcast datagrams on the socket.
+Receives a boolean value;
+<li> '<tt>reuseaddr</tt>': Indicates that the rules used in
+validating addresses supplied in a <tt>bind()</tt> call
+should allow reuse of local addresses.
+Receives a boolean value;
+<li> '<tt>reuseport</tt>': Allows completely duplicate
+bindings by multiple processes if they all set
+'<tt>reuseport</tt>' before binding the port.
+Receives a boolean value;
+<li> '<tt>ip-multicast-loop</tt>':
+Specifies whether or not a copy of an outgoing multicast
+datagram is delivered to the sending host as long as it is a
+member of the multicast group.
+Receives a boolean value;
+<li> '<tt>ipv6-v6only</tt>':
+Specifies whether to restrict <tt>inet6</tt> sockets to
+sending and receiving only IPv6 packets.
+Receive a boolean value;
+<li> '<tt>ip-multicast-if</tt>':
+Sets the interface over which outgoing multicast datagrams
+are sent.
+Receives an IP address;
+<li> '<tt>ip-multicast-ttl</tt>':
+Sets the Time To Live in the IP header for outgoing
+multicast datagrams.
+Receives a number;
+<li> '<tt>ip-add-membership</tt>':
+Joins the multicast group specified.
+Receives a table with fields
+<tt>multiaddr</tt> and <tt>interface</tt>, each containing an
+IP address;
+<li> '<tt>ip-drop-membership</tt>': Leaves the multicast
+group specified.
+Receives a table with fields
+<tt>multiaddr</tt> and <tt>interface</tt>, each containing an
+IP address.
+</ul>
+
+<p class="return">
+The method returns 1 in case of success, or
+<b><tt>nil</tt></b> followed by an error message otherwise.
+</p>
+
+<p class=note>
+Note: The descriptions above come from the man pages.
+</p>
+
+
<!-- setpeername +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class="name" id="setpeername">
@@ -337,9 +354,9 @@ object or vice versa.
For connected objects, outgoing datagrams
will be sent to the specified peer, and datagrams received from
other peers will be discarded by the OS. Connected UDP objects must
-use the <a href="#send"><tt>send</tt></a> and
-<a href="#receive"><tt>receive</tt></a> methods instead of
-<a href="#sendto"><tt>sendto</tt></a> and
+use the <a href="#send"><tt>send</tt></a> and
+<a href="#receive"><tt>receive</tt></a> methods instead of
+<a href="#sendto"><tt>sendto</tt></a> and
<a href="#receivefrom"><tt>receivefrom</tt></a>.
</p>
@@ -365,7 +382,7 @@ and can result in up to 30% performance gains.
</p>
<p class=note>
-Note: Starting with LuaSocket 2.1, the host name resolution
+Note: Starting with LuaSocket 3.0, the host name resolution
depends on whether the socket was created by <a
href=#socket.udp><tt>socket.udp</tt></a> or <a
href=#socket.udp6><tt>socket.udp6</tt></a>. Addresses from
@@ -406,74 +423,6 @@ system or explicitly by <tt>setsockname</tt>, it cannot be
changed.
</p>
-<!-- setoption +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
-
-<p class="name" id="setoption">
-connected:<b>setoption(</b>option [, value]<b>)</b><br>
-unconnected:<b>setoption(</b>option [, value]<b>)</b>
-</p>
-
-<p class="description">
-Sets options for the UDP object. Options are
-only needed by low-level or time-critical applications. You should
-only modify an option if you are sure you need it.</p>
-<p class="parameters"><tt>Option</tt> is a string with the option
-name, and <tt>value</tt> depends on the option being set:
-</p>
-
-<ul>
-<li> '<tt>dontroute</tt>': Indicates that outgoing
-messages should bypass the standard routing facilities.
-Receives a boolean value;
-<li> '<tt>broadcast</tt>': Requests permission to send
-broadcast datagrams on the socket.
-Receives a boolean value;
-<li> '<tt>reuseaddr</tt>': Indicates that the rules used in
-validating addresses supplied in a <tt>bind()</tt> call
-should allow reuse of local addresses.
-Receives a boolean value;
-<li> '<tt>reuseport</tt>': Allows completely duplicate
-bindings by multiple processes if they all set
-'<tt>reuseport</tt>' before binding the port.
-Receives a boolean value;
-<li> '<tt>ip-multicast-loop</tt>':
-Specifies whether or not a copy of an outgoing multicast
-datagram is delivered to the sending host as long as it is a
-member of the multicast group.
-Receives a boolean value;
-<li> '<tt>ipv6-v6only</tt>':
-Specifies whether to restrict <tt>inet6</tt> sockets to
-sending and receiving only IPv6 packets.
-Receive a boolean value;
-<li> '<tt>ip-multicast-if</tt>':
-Sets the interface over which outgoing multicast datagrams
-are sent.
-Receives an IP address;
-<li> '<tt>ip-multicast-ttl</tt>':
-Sets the Time To Live in the IP header for outgoing
-multicast datagrams.
-Receives a number;
-<li> '<tt>ip-add-membership</tt>':
-Joins the multicast group specified.
-Receives a table with fields
-<tt>multiaddr</tt> and <tt>interface</tt>, each containing an
-IP address;
-<li> '<tt>ip-drop-membership</tt>': Leaves the multicast
-group specified.
-Receives a table with fields
-<tt>multiaddr</tt> and <tt>interface</tt>, each containing an
-IP address.
-</ul>
-
-<p class="return">
-The method returns 1 in case of success, or
-<b><tt>nil</tt></b> followed by an error message otherwise.
-</p>
-
-<p class=note>
-Note: The descriptions above come from the man pages.
-</p>
-
<!-- settimeout +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<p class="name" id="settimeout">
@@ -482,14 +431,14 @@ unconnected:<b>settimeout(</b>value<b>)</b>
</p>
<p class="description">
-Changes the timeout values for the object. By default, the
-<a href="#receive"><tt>receive</tt></a> and
-<a href="#receivefrom"><tt>receivefrom</tt></a>
+Changes the timeout values for the object. By default, the
+<a href="#receive"><tt>receive</tt></a> and
+<a href="#receivefrom"><tt>receivefrom</tt></a>
operations are blocking. That is, any call to the methods will block
indefinitely, until data arrives. The <tt>settimeout</tt> function defines
a limit on the amount of time the functions can block. When a timeout is
set and the specified amount of time has elapsed, the affected methods
-give up and fail with an error code.
+give up and fail with an error code.
</p>
<p class="parameters">
@@ -514,6 +463,114 @@ all other method names already contained verbs making their
imperative nature obvious.
</p>
+<!-- socket.udp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class="name" id="socket.udp">
+socket.<b>udp()</b>
+</p>
+
+<p class="description">
+Creates and returns an unconnected UDP object.
+Unconnected objects support the
+<a href="#sendto"><tt>sendto</tt></a>,
+<a href="#receive"><tt>receive</tt></a>,
+<a href="#receivefrom"><tt>receivefrom</tt></a>,
+<a href="#getoption"><tt>getoption</tt></a>,
+<a href="#getsockname"><tt>getsockname</tt></a>,
+<a href="#setoption"><tt>setoption</tt></a>,
+<a href="#settimeout"><tt>settimeout</tt></a>,
+<a href="#setpeername"><tt>setpeername</tt></a>,
+<a href="#setsockname"><tt>setsockname</tt></a>, and
+<a href="#close"><tt>close</tt></a>.
+The <a href="#setpeername"><tt>setpeername</tt></a>
+is used to connect the object.
+</p>
+
+<p class="return">
+In case of success, a new unconnected UDP object
+returned. In case of error, <b><tt>nil</tt></b> is returned, followed by
+an error message.
+</p>
+
+<p class=note>
+Note: The choice between IPv4 and IPv6 happens during a call to
+<a href=#sendto><tt>sendto</tt></a>, <a
+href=#setpeername><tt>setpeername</tt></a>, or <a
+href=#setsockname><tt>sockname</tt></a>, depending on the address
+family obtained from the resolver.
+</p>
+
+<p class=note>
+Note: Before the choice between IPv4 and IPv6 happens,
+the internal socket object is invalid and therefore <a
+href=#setoption><tt>setoption</tt></a> will fail.
+</p>
+
+<!-- socket.udp4 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class="name" id="socket.udp">
+socket.<b>udp4()</b>
+</p>
+
+<p class="description">
+Creates and returns an unconnected IPv4 UDP object.
+Unconnected objects support the
+<a href="#sendto"><tt>sendto</tt></a>,
+<a href="#receive"><tt>receive</tt></a>,
+<a href="#receivefrom"><tt>receivefrom</tt></a>,
+<a href="#getoption"><tt>getoption</tt></a>,
+<a href="#getsockname"><tt>getsockname</tt></a>,
+<a href="#setoption"><tt>setoption</tt></a>,
+<a href="#settimeout"><tt>settimeout</tt></a>,
+<a href="#setpeername"><tt>setpeername</tt></a>,
+<a href="#setsockname"><tt>setsockname</tt></a>, and
+<a href="#close"><tt>close</tt></a>.
+The <a href="#setpeername"><tt>setpeername</tt></a>
+is used to connect the object.
+</p>
+
+<p class="return">
+In case of success, a new unconnected UDP object
+returned. In case of error, <b><tt>nil</tt></b> is returned, followed by
+an error message.
+</p>
+
+<!-- socket.udp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<p class="name" id="socket.udp6">
+socket.<b>udp6()</b>
+</p>
+
+<p class="description">
+Creates and returns an unconnected IPv6 UDP object.
+Unconnected objects support the
+<a href="#sendto"><tt>sendto</tt></a>,
+<a href="#receive"><tt>receive</tt></a>,
+<a href="#receivefrom"><tt>receivefrom</tt></a>,
+<a href="#getoption"><tt>getoption</tt></a>,
+<a href="#getsockname"><tt>getsockname</tt></a>,
+<a href="#setoption"><tt>setoption</tt></a>,
+<a href="#settimeout"><tt>settimeout</tt></a>,
+<a href="#setpeername"><tt>setpeername</tt></a>,
+<a href="#setsockname"><tt>setsockname</tt></a>, and
+<a href="#close"><tt>close</tt></a>.
+The <a href="#setpeername"><tt>setpeername</tt></a>
+is used to connect the object.
+</p>
+
+<p class="return">
+In case of success, a new unconnected UDP object
+returned. In case of error, <b><tt>nil</tt></b> is returned, followed by
+an error message.
+</p>
+
+<p class=note>
+Note: The TCP object returned will have the option
+"<tt>ipv6-v6only</tt>" set to <tt><b>true</b></tt>.
+</p>
+
+
+
<!-- footer ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<div class=footer>
@@ -524,7 +581,7 @@ imperative nature obvious.
<a href="index.html#download">download</a> &middot;
<a href="installation.html">installation</a> &middot;
<a href="introduction.html">introduction</a> &middot;
-<a href="reference.html">reference</a>
+<a href="reference.html">reference</a>
</p>
<p>
<small>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/check-links.lua b/Build/source/texk/web2c/luatexdir/luasocket/etc/check-links.lua
index d2e4266e809..283f3ac2f63 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/etc/check-links.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/check-links.lua
@@ -11,7 +11,7 @@ dispatch.TIMEOUT = 10
-- make sure the user knows how to invoke us
arg = arg or {}
-if table.getn(arg) < 1 then
+if #arg < 1 then
print("Usage:\n luasocket check-links.lua [-n] {<url>}")
exit()
end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/cookie.lua b/Build/source/texk/web2c/luatexdir/luasocket/etc/cookie.lua
new file mode 100644
index 00000000000..4adb40317c9
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/cookie.lua
@@ -0,0 +1,88 @@
+local socket = require"socket"
+local http = require"socket.http"
+local url = require"socket.url"
+local ltn12 = require"ltn12"
+
+local token_class = '[^%c%s%(%)%<%>%@%,%;%:%\\%"%/%[%]%?%=%{%}]'
+
+local function unquote(t, quoted)
+ local n = string.match(t, "%$(%d+)$")
+ if n then n = tonumber(n) end
+ if quoted[n] then return quoted[n]
+ else return t end
+end
+
+local function parse_set_cookie(c, quoted, cookie_table)
+ c = c .. ";$last=last;"
+ local _, __, n, v, i = string.find(c, "(" .. token_class ..
+ "+)%s*=%s*(.-)%s*;%s*()")
+ local cookie = {
+ name = n,
+ value = unquote(v, quoted),
+ attributes = {}
+ }
+ while 1 do
+ _, __, n, v, i = string.find(c, "(" .. token_class ..
+ "+)%s*=?%s*(.-)%s*;%s*()", i)
+ if not n or n == "$last" then break end
+ cookie.attributes[#cookie.attributes+1] = {
+ name = n,
+ value = unquote(v, quoted)
+ }
+ end
+ cookie_table[#cookie_table+1] = cookie
+end
+
+local function split_set_cookie(s, cookie_table)
+ cookie_table = cookie_table or {}
+ -- remove quoted strings from cookie list
+ local quoted = {}
+ s = string.gsub(s, '"(.-)"', function(q)
+ quoted[#quoted+1] = q
+ return "$" .. #quoted
+ end)
+ -- add sentinel
+ s = s .. ",$last="
+ -- split into individual cookies
+ i = 1
+ while 1 do
+ local _, __, cookie, next_token
+ _, __, cookie, i, next_token = string.find(s, "(.-)%s*%,%s*()(" ..
+ token_class .. "+)%s*=", i)
+ if not next_token then break end
+ parse_set_cookie(cookie, quoted, cookie_table)
+ if next_token == "$last" then break end
+ end
+ return cookie_table
+end
+
+local function quote(s)
+ if string.find(s, "[ %,%;]") then return '"' .. s .. '"'
+ else return s end
+end
+
+local _empty = {}
+local function build_cookies(cookies)
+ s = ""
+ for i,v in ipairs(cookies or _empty) do
+ if v.name then
+ s = s .. v.name
+ if v.value and v.value ~= "" then
+ s = s .. '=' .. quote(v.value)
+ end
+ end
+ if v.name and #(v.attributes or _empty) > 0 then s = s .. "; " end
+ for j,u in ipairs(v.attributes or _empty) do
+ if u.name then
+ s = s .. u.name
+ if u.value and u.value ~= "" then
+ s = s .. '=' .. quote(u.value)
+ end
+ end
+ if j < #v.attributes then s = s .. "; " end
+ end
+ if i < #cookies then s = s .. ", " end
+ end
+ return s
+end
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/dispatch.lua b/Build/source/texk/web2c/luatexdir/luasocket/etc/dispatch.lua
index cc8cb23c882..24854155408 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/etc/dispatch.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/dispatch.lua
@@ -5,6 +5,7 @@
-----------------------------------------------------------------------------
local base = _G
local table = require("table")
+local string = require("string")
local socket = require("socket")
local coroutine = require("coroutine")
module("dispatch")
@@ -43,26 +44,32 @@ end
-----------------------------------------------------------------------------
-- Mega hack. Don't try to do this at home.
-----------------------------------------------------------------------------
--- we can't yield across calls to protect, so we rewrite it with coxpcall
+-- we can't yield across calls to protect on Lua 5.1, so we rewrite it with
+-- coroutines
-- make sure you don't require any module that uses socket.protect before
-- loading our hack
-function socket.protect(f)
- return function(...)
- local co = coroutine.create(f)
- while true do
- local results = {coroutine.resume(co, base.unpack(arg))}
- local status = table.remove(results, 1)
- if not status then
- if base.type(results[1]) == 'table' then
- return nil, results[1][1]
- else base.error(results[1]) end
- end
- if coroutine.status(co) == "suspended" then
- arg = {coroutine.yield(base.unpack(results))}
+if string.sub(base._VERSION, -3) == "5.1" then
+ local function _protect(co, status, ...)
+ if not status then
+ local msg = ...
+ if base.type(msg) == 'table' then
+ return nil, msg[1]
else
- return base.unpack(results)
+ base.error(msg, 0)
end
end
+ if coroutine.status(co) == "suspended" then
+ return _protect(co, coroutine.resume(co, coroutine.yield(...)))
+ else
+ return ...
+ end
+ end
+
+ function socket.protect(f)
+ return function(...)
+ local co = coroutine.create(f)
+ return _protect(co, coroutine.resume(co, ...))
+ end
end
end
@@ -76,7 +83,7 @@ local function newset()
insert = function(set, value)
if not reverse[value] then
table.insert(set, value)
- reverse[value] = table.getn(set)
+ reverse[value] = #set
end
end,
remove = function(set, value)
@@ -104,8 +111,7 @@ local function cowrap(dispatcher, tcp, error)
-- don't override explicitly.
local metat = { __index = function(table, key)
table[key] = function(...)
- arg[1] = tcp
- return tcp[key](base.unpack(arg))
+ return tcp[key](tcp,select(2,...))
end
return table[key]
end}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/forward.lua b/Build/source/texk/web2c/luatexdir/luasocket/etc/forward.lua
index 9073ac4d0fa..05ced1aede8 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/etc/forward.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/forward.lua
@@ -3,7 +3,7 @@ local dispatch = require("dispatch")
local handler = dispatch.newhandler()
-- make sure the user knows how to invoke us
-if table.getn(arg) < 1 then
+if #arg < 1 then
print("Usage")
print(" lua forward.lua <iport:ohost:oport> ...")
os.exit(1)
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/get.lua b/Build/source/texk/web2c/luatexdir/luasocket/etc/get.lua
index 4196f000b09..9edc2357027 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/etc/get.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/get.lua
@@ -135,7 +135,7 @@ end
-- main program
arg = arg or {}
-if table.getn(arg) < 1 then
+if #arg < 1 then
io.write("Usage:\n lua get.lua <remote-url> [<local-file>]\n")
os.exit(1)
else get(arg[1], arg[2]) end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/etc/links b/Build/source/texk/web2c/luatexdir/luasocket/etc/links
new file mode 100644
index 00000000000..087f1c0e4ae
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/etc/links
@@ -0,0 +1,17 @@
+<a href="http://www.cs.princeton.edu"> bla </a>
+<a href="http://www.princeton.edu"> bla </a>
+<a href="http://www.tecgraf.puc-rio.br"> bla </a>
+<a href="http://www.inf.puc-rio.br"> bla </a>
+<a href="http://www.puc-rio.br"> bla </a>
+<a href="http://www.impa.br"> bla </a>
+<a href="http://www.lua.org"> bla </a>
+<a href="http://www.lua-users.org"> bla </a>
+<a href="http://www.amazon.com"> bla </a>
+<a href="http://www.google.com"> bla </a>
+<a href="http://www.nytimes.com"> bla </a>
+<a href="http://www.bbc.co.uk"> bla </a>
+<a href="http://oglobo.globo.com"> bla </a>
+<a href="http://slate.msn.com"> bla </a>
+<a href="http://www.apple.com"> bla </a>
+<a href="http://www.microsoft.com"> bla </a>
+<a href="http://www.nasa.gov"> bla </a>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/makefile b/Build/source/texk/web2c/luatexdir/luasocket/makefile
index f9fa6fe7803..cc15b4ef6cd 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/makefile
+++ b/Build/source/texk/web2c/luatexdir/luasocket/makefile
@@ -3,13 +3,14 @@
# see src/makefile for description of how to customize the build
#
# Targets:
-# install install system independent support
-# install-unix also install unix-only support
-# install-both install both lua5.1 and lua5.2 socket support
-# print print the build settings
+# install install system independent support
+# install-unix also install unix-only support
+# install-both install for lua51 lua52 lua53
+# install-both-unix also install unix-only
+# print print the build settings
PLAT?= linux
-PLATS= macosx linux win32
+PLATS= macosx linux win32 mingw freebsd solaris
all: $(PLAT)
@@ -23,12 +24,26 @@ test:
lua test/hello.lua
install-both:
- $(MAKE) clean
+ $(MAKE) clean
+ @cd src; $(MAKE) $(PLAT) LUAV=5.1
+ @cd src; $(MAKE) install LUAV=5.1
+ $(MAKE) clean
+ @cd src; $(MAKE) $(PLAT) LUAV=5.2
+ @cd src; $(MAKE) install LUAV=5.2
+ $(MAKE) clean
+ @cd src; $(MAKE) $(PLAT) LUAV=5.3
+ @cd src; $(MAKE) install LUAV=5.3
+
+install-both-unix:
+ $(MAKE) clean
@cd src; $(MAKE) $(PLAT) LUAV=5.1
@cd src; $(MAKE) install-unix LUAV=5.1
- $(MAKE) clean
+ $(MAKE) clean
@cd src; $(MAKE) $(PLAT) LUAV=5.2
@cd src; $(MAKE) install-unix LUAV=5.2
+ $(MAKE) clean
+ @cd src; $(MAKE) $(PLAT) LUAV=5.3
+ @cd src; $(MAKE) install-unix LUAV=5.3
.PHONY: test
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/mime.vcproj b/Build/source/texk/web2c/luatexdir/luasocket/mime.vcproj
deleted file mode 100644
index 8ad790040ba..00000000000
--- a/Build/source/texk/web2c/luatexdir/luasocket/mime.vcproj
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="mime"
- ProjectGUID="{128E8BD0-174A-48F0-8771-92B1E8D18713}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="src"
- IntermediateDirectory="src"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="h:\include\lua5.1"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MIME_EXPORTS;MIME_API=__declspec(dllexport)"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/mime.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="h:\lib"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/mime.pdb"
- SubSystem="2"
- ImportLibrary="$(OutDir)/mime.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="src"
- IntermediateDirectory="src"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="h:\include\lua5.1"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MIME_EXPORTS; MIME_API=__declspec(dllexport)"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/mime.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="h:\lib"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/mime.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath="src\mime.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
- </Filter>
- <File
- RelativePath="..\..\lib\lua5.1.dll.lib">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj b/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj
new file mode 100644
index 00000000000..c77d611c049
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\mime.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="src\mime.lua">
+ <FileType>Document</FileType>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUALIB_PATH)$(Platform)\$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUALIB_PATH)$(Platform)\$(Configuration)</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{128E8BD0-174A-48F0-8771-92B1E8D18713}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>$(LUABIN_PATH)$(Configuration)\mime\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>core</TargetName>
+ <OutDir>$(LUABIN_PATH)$(Platform)\$(Configuration)\mime\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>$(LUABIN_PATH)$(Configuration)\mime\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(LUABIN_PATH)$(Platform)\$(Configuration)\mime\</OutDir>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MIME_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)mime.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention />
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MIME_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)mime.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MIME_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat />
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention />
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MIME_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>
+ </DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj.filters b/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj.filters
new file mode 100644
index 00000000000..621215b6216
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/mime.vcxproj.filters
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="src\mime.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="cdir">
+ <UniqueIdentifier>{fad87a86-297c-4881-a114-73b967bb3c92}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="src\mime.lua">
+ <Filter>cdir</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/samples/lpr.lua b/Build/source/texk/web2c/luatexdir/luasocket/samples/lpr.lua
index 3d5e2f8d1be..49a1dfa9a7d 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/samples/lpr.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/samples/lpr.lua
@@ -28,7 +28,7 @@ end
do
local opt = {}
- local pat = "[%s%c%p]*([%w]*)=([\"]?[%w%s_!@#$%%^&*()<>:;]+[\"]\?\.?)"
+ local pat = "[%s%c%p]*([%w]*)=([\"]?[%w%s_!@#$%%^&*()<>:;]+[\"]?.?)"
for i = 2, #arg, 1 do
string.gsub(arg[i], pat, function(name, value) opt[name] = value end)
end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/samples/mclisten.lua b/Build/source/texk/web2c/luatexdir/luasocket/samples/mclisten.lua
new file mode 100644
index 00000000000..d40d7893d69
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/samples/mclisten.lua
@@ -0,0 +1,18 @@
+local socket = require"socket"
+local group = "225.0.0.37"
+local port = 12345
+local c = assert(socket.udp())
+print(assert(c:setoption("reuseport", true)))
+print(assert(c:setsockname("*", port)))
+--print("loop:", c:getoption("ip-multicast-loop"))
+--print(assert(c:setoption("ip-multicast-loop", false)))
+--print("loop:", c:getoption("ip-multicast-loop"))
+--print("if:", c:getoption("ip-multicast-if"))
+--print(assert(c:setoption("ip-multicast-if", "127.0.0.1")))
+--print("if:", c:getoption("ip-multicast-if"))
+--print(assert(c:setoption("ip-multicast-if", "10.0.1.4")))
+--print("if:", c:getoption("ip-multicast-if"))
+print(assert(c:setoption("ip-add-membership", {multiaddr = group, interface = "*"})))
+while 1 do
+ print(c:receivefrom())
+end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/samples/mcsend.lua b/Build/source/texk/web2c/luatexdir/luasocket/samples/mcsend.lua
new file mode 100644
index 00000000000..7c24cdf2b27
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/samples/mcsend.lua
@@ -0,0 +1,20 @@
+local socket = require"socket"
+local group = "225.0.0.37"
+local port = 12345
+local c = assert(socket.udp())
+--print(assert(c:setoption("reuseport", true)))
+--print(assert(c:setsockname("*", port)))
+--print(assert(c:setoption("ip-multicast-loop", false)))
+--print(assert(c:setoption("ip-multicast-ttl", 4)))
+--print(assert(c:setoption("ip-multicast-if", "10.0.1.3")))
+--print(assert(c:setoption("ip-add-membership", {multiaddr = group, interface = "*"})))
+local i = 0
+while 1 do
+ local message = string.format("hello all %d!", i)
+ assert(c:sendto(message, group, port))
+ print("sent " .. message)
+ socket.sleep(1)
+ c:settimeout(0.5)
+ print(c:receivefrom())
+ i = i + 1
+end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/socket.vcproj b/Build/source/texk/web2c/luatexdir/luasocket/socket.vcproj
deleted file mode 100644
index b7c4a083297..00000000000
--- a/Build/source/texk/web2c/luatexdir/luasocket/socket.vcproj
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="socket"
- ProjectGUID="{66E3CE14-884D-4AEA-9F20-15A0BEAF8C5A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="src"
- IntermediateDirectory="src"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="h:\include\lua5.1"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LUASOCKET_EXPORTS;LUASOCKET_API=__declspec(dllexport)"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="ws2_32.lib"
- OutputFile="$(OutDir)/socket.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="h:\lib"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/socket.pdb"
- SubSystem="2"
- ImportLibrary="$(OutDir)/socket.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="./src"
- IntermediateDirectory="./src"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="h:\include\lua5.1"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LUASOCKET_EXPORTS;LUASOCKET_API=__declspec(dllexport); LUASOCKET_DEBUG"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="ws2_32.lib"
- OutputFile="$(OutDir)/socket.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="h:\lib"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/socket.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath="src\auxiliar.c">
- </File>
- <File
- RelativePath="src\buffer.c">
- </File>
- <File
- RelativePath="src\except.c">
- </File>
- <File
- RelativePath="src\inet.c">
- </File>
- <File
- RelativePath="src\io.c">
- </File>
- <File
- RelativePath="src\luasocket.c">
- </File>
- <File
- RelativePath="src\options.c">
- </File>
- <File
- RelativePath="src\select.c">
- </File>
- <File
- RelativePath="src\tcp.c">
- </File>
- <File
- RelativePath="src\timeout.c">
- </File>
- <File
- RelativePath="src\udp.c">
- </File>
- <File
- RelativePath="src\wsocket.c">
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- GeneratePreprocessedFile="0"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
- </Filter>
- <File
- RelativePath="..\..\lib\lua5.1.dll.lib">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj b/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj
new file mode 100644
index 00000000000..16daeef63d4
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\auxiliar.c" />
+ <ClCompile Include="src\buffer.c" />
+ <ClCompile Include="src\except.c" />
+ <ClCompile Include="src\inet.c" />
+ <ClCompile Include="src\io.c" />
+ <ClCompile Include="src\luasocket.c" />
+ <ClCompile Include="src\options.c" />
+ <ClCompile Include="src\select.c" />
+ <ClCompile Include="src\tcp.c" />
+ <ClCompile Include="src\timeout.c" />
+ <ClCompile Include="src\udp.c" />
+ <ClCompile Include="src\wsocket.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="src\ltn12.lua">
+ <FileType>Document</FileType>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="src\socket.lua">
+ <FileType>Document</FileType>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\%(Filename)%(Extension)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="src\ftp.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ <CustomBuild Include="src\headers.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ <CustomBuild Include="src\http.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ <CustomBuild Include="src\smtp.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ <CustomBuild Include="src\tp.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ <CustomBuild Include="src\url.lua">
+ <FileType>Document</FileType>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(LUABIN_PATH)$(Configuration)\socket\%(Filename)%(Extension)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) $(LUABIN_PATH)$(Platform)\$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) $(LUABIN_PATH)$(Configuration)\socket</Command>
+ </CustomBuild>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{66E3CE14-884D-4AEA-9F20-15A0BEAF8C5A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ <Import Project="Lua.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>$(LUALIB_PATH)$(Configuration)\socket\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>core</TargetName>
+ <OutDir>$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>$(LUALIB_PATH)$(Configuration)\socket\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(LUABIN_PATH)$(Platform)\$(Configuration)\socket\</OutDir>
+ <TargetName>core</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LUASOCKET_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;LUASOCKET_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)mime.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention />
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LUASOCKET_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;LUASOCKET_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)mime.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LUASOCKET_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader />
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat />
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention />
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(LUAINC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LUASOCKET_API=__declspec(dllexport);_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>
+ </DebugInformationFormat>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName)$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>$(LUALIB);ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <AdditionalLibraryDirectories>$(LUALIB_PATH)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj.filters b/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj.filters
new file mode 100644
index 00000000000..38f2f0733aa
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/socket.vcxproj.filters
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="src\auxiliar.c" />
+ <ClCompile Include="src\buffer.c" />
+ <ClCompile Include="src\except.c" />
+ <ClCompile Include="src\inet.c" />
+ <ClCompile Include="src\io.c" />
+ <ClCompile Include="src\luasocket.c" />
+ <ClCompile Include="src\options.c" />
+ <ClCompile Include="src\select.c" />
+ <ClCompile Include="src\tcp.c" />
+ <ClCompile Include="src\timeout.c" />
+ <ClCompile Include="src\udp.c" />
+ <ClCompile Include="src\wsocket.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="src\ltn12.lua">
+ <Filter>cdir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\socket.lua">
+ <Filter>cdir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\ftp.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\headers.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\http.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\smtp.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\tp.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ <CustomBuild Include="src\url.lua">
+ <Filter>ldir</Filter>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="cdir">
+ <UniqueIdentifier>{b053460d-5439-4e3a-a2eb-c31a95b5691f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="ldir">
+ <UniqueIdentifier>{b301b82c-37cb-4e05-9333-194e92ed7a62}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/Makefile b/Build/source/texk/web2c/luatexdir/luasocket/src/Makefile
deleted file mode 100644
index f42d62047c5..00000000000
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/Makefile
+++ /dev/null
@@ -1,63 +0,0 @@
-
-SOCKET_SO=socket.a
-
-INSTALL_TOP_SHARE=/usr/local/share/lua/5.1
-INSTALL_TOP_LIB=/usr/local/lib/lua/5.1
-
-LUAINC = -I../../lua51
-
-DEF = -DLUASOCKET_DEBUG
-CFLAGS = $(LUAINC) $(DEF) $(XCFLAGS)
-AR=ar
-ARFLAGS=rc
-
-SOCKET_OBJS:= \
- luasocket.o \
- timeout.o \
- buffer.o \
- io.o \
- auxiliar.o \
- options.o \
- inet.o \
- tcp.o \
- udp.o \
- except.o \
- select.o \
- socket.o \
- mime.o \
- lua_preload.o
-
-all: $(SOCKET_SO)
-
-$(SOCKET_SO): $(SOCKET_OBJS)
- $(AR) $(ARFLAGS) $@ $(SOCKET_OBJS)
-
-#------
-# List of dependencies
-#
-auxiliar.o: auxiliar.c auxiliar.h
-buffer.o: buffer.c buffer.h io.h timeout.h
-except.o: except.c except.h
-inet.o: inet.c inet.h socket.h io.h timeout.h usocket.h
-io.o: io.c io.h timeout.h
-luasocket.o: luasocket.c luasocket.h auxiliar.h except.h timeout.h \
- buffer.h io.h inet.h socket.h usocket.h tcp.h udp.h select.h
-mime.o: mime.c mime.h
-options.o: options.c auxiliar.h options.h socket.h io.h timeout.h \
- usocket.h inet.h
-select.o: select.c socket.h io.h timeout.h usocket.h select.h
-tcp.o: tcp.c auxiliar.h socket.h io.h timeout.h usocket.h inet.h \
- options.h tcp.h buffer.h
-timeout.o: timeout.c auxiliar.h timeout.h
-udp.o: udp.c auxiliar.h socket.h io.h timeout.h usocket.h inet.h \
- options.h udp.h
-unix.o: unix.c auxiliar.h socket.h io.h timeout.h usocket.h options.h \
- unix.h buffer.h
-usocket.o: usocket.c socket.h io.h timeout.h usocket.h
-
-clean:
- rm -f $(SOCKET_SO) $(SOCKET_OBJS)
-
-#------
-# End of makefile configuration
-#
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.c b/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.c
index de625e9d743..18fa8e4c3c0 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.c
@@ -26,7 +26,7 @@ void auxiliar_newclass(lua_State *L, const char *classname, luaL_Reg *func) {
luaL_newmetatable(L, classname); /* mt */
/* create __index table to place methods */
lua_pushstring(L, "__index"); /* mt,"__index" */
- lua_newtable(L); /* mt,"__index",it */
+ lua_newtable(L); /* mt,"__index",it */
/* put class name into class metatable */
lua_pushstring(L, "class"); /* mt,"__index",it,"class" */
lua_pushstring(L, classname); /* mt,"__index",it,"class",classname */
@@ -84,7 +84,7 @@ int auxiliar_checkboolean(lua_State *L, int objidx) {
}
/*-------------------------------------------------------------------------*\
-* Return userdata pointer if object belongs to a given class, abort with
+* Return userdata pointer if object belongs to a given class, abort with
* error otherwise
\*-------------------------------------------------------------------------*/
void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx) {
@@ -98,7 +98,7 @@ void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx) {
}
/*-------------------------------------------------------------------------*\
-* Return userdata pointer if object belongs to a given group, abort with
+* Return userdata pointer if object belongs to a given group, abort with
* error otherwise
\*-------------------------------------------------------------------------*/
void *auxiliar_checkgroup(lua_State *L, const char *groupname, int objidx) {
@@ -121,7 +121,7 @@ void auxiliar_setclass(lua_State *L, const char *classname, int objidx) {
}
/*-------------------------------------------------------------------------*\
-* Get a userdata pointer if object belongs to a given group. Return NULL
+* Get a userdata pointer if object belongs to a given group. Return NULL
* otherwise
\*-------------------------------------------------------------------------*/
void *auxiliar_getgroupudata(lua_State *L, const char *groupname, int objidx) {
@@ -139,7 +139,7 @@ void *auxiliar_getgroupudata(lua_State *L, const char *groupname, int objidx) {
}
/*-------------------------------------------------------------------------*\
-* Get a userdata pointer if object belongs to a given class. Return NULL
+* Get a userdata pointer if object belongs to a given class. Return NULL
* otherwise
\*-------------------------------------------------------------------------*/
void *auxiliar_getclassudata(lua_State *L, const char *classname, int objidx) {
@@ -151,7 +151,7 @@ void *auxiliar_getclassudata(lua_State *L, const char *classname, int objidx) {
* Used to be part of lauxlib in Lua 5.1, was dropped from 5.2.
\*-------------------------------------------------------------------------*/
int auxiliar_typeerror (lua_State *L, int narg, const char *tname) {
- const char *msg = lua_pushfstring(L, "%s expected, got %s", tname,
+ const char *msg = lua_pushfstring(L, "%s expected, got %s", tname,
luaL_typename(L, narg));
return luaL_argerror(L, narg, msg);
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.h b/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.h
index ea9901333de..65511d4de53 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/auxiliar.h
@@ -4,12 +4,12 @@
* Auxiliar routines for class hierarchy manipulation
* LuaSocket toolkit (but completely independent of other LuaSocket modules)
*
-* A LuaSocket class is a name associated with Lua metatables. A LuaSocket
-* group is a name associated with a class. A class can belong to any number
+* A LuaSocket class is a name associated with Lua metatables. A LuaSocket
+* group is a name associated with a class. A class can belong to any number
* of groups. This module provides the functionality to:
*
-* - create new classes
-* - add classes to groups
+* - create new classes
+* - add classes to groups
* - set the class of objects
* - check if an object belongs to a given class or group
* - get the userdata associated to objects
@@ -26,11 +26,12 @@
* "class" with the class name.
*
* The mapping from class name to the corresponding metatable and the
-* reverse mapping are done using lauxlib.
+* reverse mapping are done using lauxlib.
\*=========================================================================*/
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
int auxiliar_open(lua_State *L);
void auxiliar_newclass(lua_State *L, const char *classname, luaL_Reg *func);
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/buffer.c b/Build/source/texk/web2c/luatexdir/luasocket/src/buffer.c
index 4ef4e8eb5c4..fff16346f00 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/buffer.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/buffer.c
@@ -4,6 +4,7 @@
\*=========================================================================*/
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "buffer.h"
@@ -37,7 +38,7 @@ int buffer_open(lua_State *L) {
}
/*-------------------------------------------------------------------------*\
-* Initializes C structure
+* Initializes C structure
\*-------------------------------------------------------------------------*/
void buffer_init(p_buffer buf, p_io io, p_timeout tm) {
buf->first = buf->last = 0;
@@ -61,8 +62,8 @@ int buffer_meth_getstats(lua_State *L, p_buffer buf) {
* object:setstats() interface
\*-------------------------------------------------------------------------*/
int buffer_meth_setstats(lua_State *L, p_buffer buf) {
- buf->received = (long) luaL_optnumber(L, 2, (lua_Number) buf->received);
- buf->sent = (long) luaL_optnumber(L, 3, (lua_Number) buf->sent);
+ buf->received = (long) luaL_optnumber(L, 2, (lua_Number) buf->received);
+ buf->sent = (long) luaL_optnumber(L, 3, (lua_Number) buf->sent);
if (lua_isnumber(L, 4)) buf->birthday = timeout_gettime() - lua_tonumber(L, 4);
lua_pushnumber(L, 1);
return 1;
@@ -78,9 +79,7 @@ int buffer_meth_send(lua_State *L, p_buffer buf) {
const char *data = luaL_checklstring(L, 2, &size);
long start = (long) luaL_optnumber(L, 3, 1);
long end = (long) luaL_optnumber(L, 4, -1);
-#ifdef LUASOCKET_DEBUG
- p_timeout tm = timeout_markstart(buf->tm);
-#endif
+ timeout_markstart(buf->tm);
if (start < 0) start = (long) (size+start+1);
if (end < 0) end = (long) (size+end+1);
if (start < 1) start = (long) 1;
@@ -89,7 +88,7 @@ int buffer_meth_send(lua_State *L, p_buffer buf) {
/* check if there was an error */
if (err != IO_DONE) {
lua_pushnil(L);
- lua_pushstring(L, buf->io->error(buf->io->ctx, err));
+ lua_pushstring(L, buf->io->error(buf->io->ctx, err));
lua_pushnumber(L, (lua_Number) (sent+start-1));
} else {
lua_pushnumber(L, (lua_Number) (sent+start-1));
@@ -98,7 +97,7 @@ int buffer_meth_send(lua_State *L, p_buffer buf) {
}
#ifdef LUASOCKET_DEBUG
/* push time elapsed during operation as the last return value */
- lua_pushnumber(L, timeout_gettime() - timeout_getstart(tm));
+ lua_pushnumber(L, timeout_gettime() - timeout_getstart(buf->tm));
#endif
return lua_gettop(L) - top;
}
@@ -111,10 +110,8 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
luaL_Buffer b;
size_t size;
const char *part = luaL_optlstring(L, 3, "", &size);
-#ifdef LUASOCKET_DEBUG
- p_timeout tm = timeout_markstart(buf->tm);
-#endif
- /* initialize buffer with optional extra prefix
+ timeout_markstart(buf->tm);
+ /* initialize buffer with optional extra prefix
* (useful for concatenating previous partial results) */
luaL_buffinit(L, &b);
luaL_addlstring(&b, part, size);
@@ -122,12 +119,12 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
if (!lua_isnumber(L, 2)) {
const char *p= luaL_optstring(L, 2, "*l");
if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b);
- else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b);
+ else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b);
else luaL_argcheck(L, 0, 2, "invalid receive pattern");
- /* get a fixed number of bytes (minus what was already partially
+ /* get a fixed number of bytes (minus what was already partially
* received) */
} else {
- double n = lua_tonumber(L, 2);
+ double n = lua_tonumber(L, 2);
size_t wanted = (size_t) n;
luaL_argcheck(L, n >= 0, 2, "invalid receive pattern");
if (size == 0 || wanted > size)
@@ -138,8 +135,8 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
/* we can't push anyting in the stack before pushing the
* contents of the buffer. this is the reason for the complication */
luaL_pushresult(&b);
- lua_pushstring(L, buf->io->error(buf->io->ctx, err));
- lua_pushvalue(L, -2);
+ lua_pushstring(L, buf->io->error(buf->io->ctx, err));
+ lua_pushvalue(L, -2);
lua_pushnil(L);
lua_replace(L, -4);
} else {
@@ -149,7 +146,7 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
}
#ifdef LUASOCKET_DEBUG
/* push time elapsed during operation as the last return value */
- lua_pushnumber(L, timeout_gettime() - timeout_getstart(tm));
+ lua_pushnumber(L, timeout_gettime() - timeout_getstart(buf->tm));
#endif
return lua_gettop(L) - top;
}
@@ -222,7 +219,7 @@ static int recvall(p_buffer buf, luaL_Buffer *b) {
}
/*-------------------------------------------------------------------------*\
-* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
+* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
* are not returned by the function and are discarded from the buffer
\*-------------------------------------------------------------------------*/
static int recvline(p_buffer buf, luaL_Buffer *b) {
@@ -252,7 +249,7 @@ static int recvline(p_buffer buf, luaL_Buffer *b) {
static void buffer_skip(p_buffer buf, size_t count) {
buf->received += count;
buf->first += count;
- if (buffer_isempty(buf))
+ if (buffer_isempty(buf))
buf->first = buf->last = 0;
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c
new file mode 100644
index 00000000000..e9ee32a154c
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c
@@ -0,0 +1,19 @@
+#include "compat.h"
+
+#if LUA_VERSION_NUM<501
+/*
+** Adapted from Lua 5.2
+*/
+void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
+ luaL_checkstack(L, nup+1, "too many upvalues");
+ for (; l->name != NULL; l++) { /* fill the table with given functions */
+ int i;
+ lua_pushstring(L, l->name);
+ for (i = 0; i < nup; i++) /* copy upvalues to the top */
+ lua_pushvalue(L, -(nup+1));
+ lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */
+ lua_settable(L, -(nup + 3));
+ }
+ lua_pop(L, nup); /* remove upvalues */
+}
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c.orig b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c.orig
new file mode 100644
index 00000000000..c2d99cb20c6
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.c.orig
@@ -0,0 +1,19 @@
+#include "compat.h"
+
+#if LUA_VERSION_NUM==501
+/*
+** Adapted from Lua 5.2
+*/
+void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
+ luaL_checkstack(L, nup+1, "too many upvalues");
+ for (; l->name != NULL; l++) { /* fill the table with given functions */
+ int i;
+ lua_pushstring(L, l->name);
+ for (i = 0; i < nup; i++) /* copy upvalues to the top */
+ lua_pushvalue(L, -(nup+1));
+ lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */
+ lua_settable(L, -(nup + 3));
+ }
+ lua_pop(L, nup); /* remove upvalues */
+}
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h
new file mode 100644
index 00000000000..a4d5f36a660
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h
@@ -0,0 +1,11 @@
+#ifndef COMPAT_H
+#define COMPAT_H
+
+#include "lua.h"
+#include "lauxlib.h"
+
+#if LUA_VERSION_NUM<501
+void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
+#endif
+
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h.orig b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h.orig
new file mode 100644
index 00000000000..7bf8010ea85
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/compat.h.orig
@@ -0,0 +1,11 @@
+#ifndef COMPAT_H
+#define COMPAT_H
+
+#include "lua.h"
+#include "lauxlib.h"
+
+#if LUA_VERSION_NUM==501
+void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
+#endif
+
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/except.c b/Build/source/texk/web2c/luatexdir/luasocket/src/except.c
index 1d1ade0ee00..60b5005823a 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/except.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/except.c
@@ -6,9 +6,19 @@
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "except.h"
+#if LUA_VERSION_NUM < 502
+#define lua_pcallk(L, na, nr, err, ctx, cont) \
+ (((void)ctx),((void)cont),lua_pcall(L, na, nr, err))
+#endif
+
+#if LUA_VERSION_NUM < 503
+typedef int lua_KContext;
+#endif
+
/*=========================================================================*\
* Internal function prototypes.
\*=========================================================================*/
@@ -29,18 +39,17 @@ static luaL_Reg func[] = {
* Try factory
\*-------------------------------------------------------------------------*/
static void wrap(lua_State *L) {
- lua_newtable(L);
- lua_pushnumber(L, 1);
- lua_pushvalue(L, -3);
- lua_settable(L, -3);
- lua_insert(L, -2);
- lua_pop(L, 1);
+ lua_createtable(L, 1, 0);
+ lua_pushvalue(L, -2);
+ lua_rawseti(L, -2, 1);
+ lua_pushvalue(L, lua_upvalueindex(1));
+ lua_setmetatable(L, -2);
}
static int finalize(lua_State *L) {
if (!lua_toboolean(L, 1)) {
- lua_pushvalue(L, lua_upvalueindex(1));
- lua_pcall(L, 0, 0, 0);
+ lua_pushvalue(L, lua_upvalueindex(2));
+ lua_call(L, 0, 0);
lua_settop(L, 2);
wrap(L);
lua_error(L);
@@ -48,15 +57,17 @@ static int finalize(lua_State *L) {
} else return lua_gettop(L);
}
-static int do_nothing(lua_State *L) {
+static int do_nothing(lua_State *L) {
(void) L;
- return 0;
+ return 0;
}
static int global_newtry(lua_State *L) {
lua_settop(L, 1);
if (lua_isnil(L, 1)) lua_pushcfunction(L, do_nothing);
- lua_pushcclosure(L, finalize, 1);
+ lua_pushvalue(L, lua_upvalueindex(1));
+ lua_insert(L, -2);
+ lua_pushcclosure(L, finalize, 2);
return 1;
}
@@ -64,27 +75,49 @@ static int global_newtry(lua_State *L) {
* Protect factory
\*-------------------------------------------------------------------------*/
static int unwrap(lua_State *L) {
- if (lua_istable(L, -1)) {
- lua_pushnumber(L, 1);
- lua_gettable(L, -2);
- lua_pushnil(L);
- lua_insert(L, -2);
- return 1;
- } else return 0;
+ if (lua_istable(L, -1) && lua_getmetatable(L, -1)) {
+ int r = lua_rawequal(L, -1, lua_upvalueindex(1));
+ lua_pop(L, 1);
+ if (r) {
+ lua_pushnil(L);
+ lua_rawgeti(L, -2, 1);
+ return 1;
+ }
+ }
+ return 0;
}
-static int protected_(lua_State *L) {
- lua_pushvalue(L, lua_upvalueindex(1));
- lua_insert(L, 1);
- if (lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0) != 0) {
+static int protected_finish(lua_State *L, int status, lua_KContext ctx) {
+ (void)ctx;
+ if (status != 0 && status != LUA_YIELD) {
if (unwrap(L)) return 2;
- else lua_error(L);
- return 0;
+ else return lua_error(L);
} else return lua_gettop(L);
}
+#if LUA_VERSION_NUM == 502
+static int protected_cont(lua_State *L) {
+ int ctx = 0;
+ int status = lua_getctx(L, &ctx);
+ return protected_finish(L, status, ctx);
+}
+#else
+#define protected_cont protected_finish
+#endif
+
+static int protected_(lua_State *L) {
+ int status;
+ lua_pushvalue(L, lua_upvalueindex(2));
+ lua_insert(L, 1);
+ status = lua_pcallk(L, lua_gettop(L) - 1, LUA_MULTRET, 0, 0, protected_cont);
+ return protected_finish(L, status, 0);
+}
+
static int global_protect(lua_State *L) {
- lua_pushcclosure(L, protected_, 1);
+ lua_settop(L, 1);
+ lua_pushvalue(L, lua_upvalueindex(1));
+ lua_insert(L, 1);
+ lua_pushcclosure(L, protected_, 2);
return 1;
}
@@ -92,6 +125,9 @@ static int global_protect(lua_State *L) {
* Init module
\*-------------------------------------------------------------------------*/
int except_open(lua_State *L) {
- luaL_openlib(L, NULL, func, 0);
+ lua_newtable(L); /* metatable for wrapped exceptions */
+ lua_pushboolean(L, 0);
+ lua_setfield(L, -2, "__metatable");
+ luaL_setfuncs(L, func, 1);
return 0;
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/except.h b/Build/source/texk/web2c/luatexdir/luasocket/src/except.h
index 1e7a2455e70..2497c0566b8 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/except.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/except.h
@@ -9,21 +9,26 @@
* error checking was taking a substantial amount of the coding. These
* function greatly simplify the task of checking errors.
*
-* The main idea is that functions should return nil as its first return
-* value when it finds an error, and return an error message (or value)
+* The main idea is that functions should return nil as their first return
+* values when they find an error, and return an error message (or value)
* following nil. In case of success, as long as the first value is not nil,
* the other values don't matter.
*
* The idea is to nest function calls with the "try" function. This function
-* checks the first value, and calls "error" on the second if the first is
-* nil. Otherwise, it returns all values it received.
+* checks the first value, and, if it's falsy, wraps the second value in a
+* table with metatable and calls "error" on it. Otherwise, it returns all
+* values it received. Basically, it works like the Lua "assert" function,
+* but it creates errors targeted specifically at "protect".
*
-* The protect function returns a new function that behaves exactly like the
-* function it receives, but the new function doesn't throw exceptions: it
-* returns nil followed by the error message instead.
+* The "newtry" function is a factory for "try" functions that call a
+* finalizer in protected mode before calling "error".
*
-* With these two function, it's easy to write functions that throw
-* exceptions on error, but that don't interrupt the user script.
+* The "protect" function returns a new function that behaves exactly like
+* the function it receives, but the new function catches exceptions thrown
+* by "try" functions and returns nil followed by the error message instead.
+*
+* With these three functions, it's easy to write functions that throw
+* exceptions on error, but that don't interrupt the user script.
\*=========================================================================*/
#include "lua.h"
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua
index 5aa646b1767..7340a7b605f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua
@@ -11,31 +11,31 @@ local base = _G
local table = require("table")
local string = require("string")
local math = require("math")
-local socket = require("socket")
-local url = require("socket.url")
-local tp = require("socket.tp")
-local ltn12 = require("ltn12")
-module("socket.ftp")
-
+local socket = socket or require("socket")
+local url = socket.url or require("socket.url")
+local tp = socket.tp or require("socket.tp")
+local ltn12 = ltn12 or require("ltn12")
+socket.ftp = {}
+local _M = socket.ftp
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- timeout in seconds before the program gives up on a connection
-TIMEOUT = 60
+_M.TIMEOUT = 60
-- default port for ftp service
-PORT = 21
+local PORT = 21
-- this is the default anonymous password. used when no password is
-- provided in url. should be changed to your e-mail.
-USER = "ftp"
-PASSWORD = "anonymous@anonymous.org"
+_M.USER = "ftp"
+_M.PASSWORD = "anonymous@anonymous.org"
-----------------------------------------------------------------------------
-- Low level FTP API
-----------------------------------------------------------------------------
local metat = { __index = {} }
-function open(server, port, create)
- local tp = socket.try(tp.connect(server, port or PORT, TIMEOUT, create))
+function _M.open(server, port, create)
+ local tp = socket.try(tp.connect(server, port or PORT, _M.TIMEOUT, create))
local f = base.setmetatable({ tp = tp }, metat)
-- make sure everything gets closed in an exception
f.try = socket.newtry(function() f:close() end)
@@ -43,22 +43,22 @@ function open(server, port, create)
end
function metat.__index:portconnect()
- self.try(self.server:settimeout(TIMEOUT))
+ self.try(self.server:settimeout(_M.TIMEOUT))
self.data = self.try(self.server:accept())
- self.try(self.data:settimeout(TIMEOUT))
+ self.try(self.data:settimeout(_M.TIMEOUT))
end
function metat.__index:pasvconnect()
self.data = self.try(socket.tcp())
- self.try(self.data:settimeout(TIMEOUT))
- self.try(self.data:connect(self.pasvt.ip, self.pasvt.port))
+ self.try(self.data:settimeout(_M.TIMEOUT))
+ self.try(self.data:connect(self.pasvt.address, self.pasvt.port))
end
function metat.__index:login(user, password)
- self.try(self.tp:command("user", user or USER))
+ self.try(self.tp:command("user", user or _M.USER))
local code, reply = self.try(self.tp:check{"2..", 331})
if code == 331 then
- self.try(self.tp:command("pass", password or PASSWORD))
+ self.try(self.tp:command("pass", password or _M.PASSWORD))
self.try(self.tp:check("2.."))
end
return 1
@@ -71,32 +71,65 @@ function metat.__index:pasv()
local a, b, c, d, p1, p2 = socket.skip(2, string.find(reply, pattern))
self.try(a and b and c and d and p1 and p2, reply)
self.pasvt = {
- ip = string.format("%d.%d.%d.%d", a, b, c, d),
+ address = string.format("%d.%d.%d.%d", a, b, c, d),
port = p1*256 + p2
}
if self.server then
self.server:close()
self.server = nil
end
- return self.pasvt.ip, self.pasvt.port
+ return self.pasvt.address, self.pasvt.port
end
-function metat.__index:port(ip, port)
+function metat.__index:epsv()
+ self.try(self.tp:command("epsv"))
+ local code, reply = self.try(self.tp:check("229"))
+ local pattern = "%((.)(.-)%1(.-)%1(.-)%1%)"
+ local d, prt, address, port = string.match(reply, pattern)
+ self.try(port, "invalid epsv response")
+ self.pasvt = {
+ address = self.tp:getpeername(),
+ port = port
+ }
+ if self.server then
+ self.server:close()
+ self.server = nil
+ end
+ return self.pasvt.address, self.pasvt.port
+end
+
+
+function metat.__index:port(address, port)
self.pasvt = nil
- if not ip then
- ip, port = self.try(self.tp:getcontrol():getsockname())
- self.server = self.try(socket.bind(ip, 0))
- ip, port = self.try(self.server:getsockname())
- self.try(self.server:settimeout(TIMEOUT))
+ if not address then
+ address, port = self.try(self.tp:getsockname())
+ self.server = self.try(socket.bind(address, 0))
+ address, port = self.try(self.server:getsockname())
+ self.try(self.server:settimeout(_M.TIMEOUT))
end
local pl = math.mod(port, 256)
local ph = (port - pl)/256
- local arg = string.gsub(string.format("%s,%d,%d", ip, ph, pl), "%.", ",")
+ local arg = string.gsub(string.format("%s,%d,%d", address, ph, pl), "%.", ",")
self.try(self.tp:command("port", arg))
self.try(self.tp:check("2.."))
return 1
end
+function metat.__index:eprt(family, address, port)
+ self.pasvt = nil
+ if not address then
+ address, port = self.try(self.tp:getsockname())
+ self.server = self.try(socket.bind(address, 0))
+ address, port = self.try(self.server:getsockname())
+ self.try(self.server:settimeout(_M.TIMEOUT))
+ end
+ local arg = string.format("|%s|%s|%d|", family, address, port)
+ self.try(self.tp:command("eprt", arg))
+ self.try(self.tp:check("2.."))
+ return 1
+end
+
+
function metat.__index:send(sendt)
self.try(self.pasvt or self.server, "need port or pasv first")
-- if there is a pasvt table, we already sent a PASV command
@@ -110,12 +143,12 @@ function metat.__index:send(sendt)
-- send the transfer command and check the reply
self.try(self.tp:command(command, argument))
local code, reply = self.try(self.tp:check{"2..", "1.."})
- -- if there is not a a pasvt table, then there is a server
+ -- if there is not a pasvt table, then there is a server
-- and we already sent a PORT command
if not self.pasvt then self:portconnect() end
-- get the sink, source and step for the transfer
local step = sendt.step or ltn12.pump.step
- local readt = {self.tp.c}
+ local readt = { self.tp }
local checkstep = function(src, snk)
-- check status in control connection while downloading
local readyt = socket.select(readt, nil, 0)
@@ -142,7 +175,11 @@ function metat.__index:receive(recvt)
if argument == "" then argument = nil end
local command = recvt.command or "retr"
self.try(self.tp:command(command, argument))
- local code = self.try(self.tp:check{"1..", "2.."})
+ local code,reply = self.try(self.tp:check{"1..", "2.."})
+ if (code >= 200) and (code <= 299) then
+ recvt.sink(reply)
+ return 1
+ end
if not self.pasvt then self:portconnect() end
local source = socket.source("until-closed", self.data)
local step = recvt.step or ltn12.pump.step
@@ -199,11 +236,11 @@ end
local function tput(putt)
putt = override(putt)
socket.try(putt.host, "missing hostname")
- local f = open(putt.host, putt.port, putt.create)
+ local f = _M.open(putt.host, putt.port, putt.create)
f:greet()
f:login(putt.user, putt.password)
if putt.type then f:type(putt.type) end
- f:pasv()
+ f:epsv()
local sent = f:send(putt)
f:quit()
f:close()
@@ -215,7 +252,7 @@ local default = {
scheme = "ftp"
}
-local function parse(u)
+local function genericform(u)
local t = socket.try(url.parse(u, default))
socket.try(t.scheme == "ftp", "wrong scheme '" .. t.scheme .. "'")
socket.try(t.host, "missing hostname")
@@ -228,13 +265,15 @@ local function parse(u)
return t
end
+_M.genericform = genericform
+
local function sput(u, body)
- local putt = parse(u)
+ local putt = genericform(u)
putt.source = ltn12.source.string(body)
return tput(putt)
end
-put = socket.protect(function(putt, body)
+_M.put = socket.protect(function(putt, body)
if base.type(putt) == "string" then return sput(putt, body)
else return tput(putt) end
end)
@@ -242,39 +281,49 @@ end)
local function tget(gett)
gett = override(gett)
socket.try(gett.host, "missing hostname")
- local f = open(gett.host, gett.port, gett.create)
+ local f = _M.open(gett.host, gett.port, gett.create)
f:greet()
f:login(gett.user, gett.password)
if gett.type then f:type(gett.type) end
- f:pasv()
+ f:epsv()
f:receive(gett)
f:quit()
return f:close()
end
local function sget(u)
- local gett = parse(u)
+ local gett = genericform(u)
local t = {}
gett.sink = ltn12.sink.table(t)
tget(gett)
return table.concat(t)
end
-command = socket.protect(function(cmdt)
+_M.command = socket.protect(function(cmdt)
cmdt = override(cmdt)
socket.try(cmdt.host, "missing hostname")
socket.try(cmdt.command, "missing command")
- local f = open(cmdt.host, cmdt.port, cmdt.create)
+ local f = _M.open(cmdt.host, cmdt.port, cmdt.create)
f:greet()
f:login(cmdt.user, cmdt.password)
- f.try(f.tp:command(cmdt.command, cmdt.argument))
- if cmdt.check then f.try(f.tp:check(cmdt.check)) end
+ if type(cmdt.command) == "table" then
+ local argument = cmdt.argument or {}
+ local check = cmdt.check or {}
+ for i,cmd in ipairs(cmdt.command) do
+ f.try(f.tp:command(cmd, argument[i]))
+ if check[i] then f.try(f.tp:check(check[i])) end
+ end
+ else
+ f.try(f.tp:command(cmdt.command, cmdt.argument))
+ if cmdt.check then f.try(f.tp:check(cmdt.check)) end
+ end
f:quit()
return f:close()
end)
-get = socket.protect(function(gett)
+_M.get = socket.protect(function(gett)
if base.type(gett) == "string" then return sget(gett)
else return tget(gett) end
end)
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ftp_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp_lua.c
index 6c158328cc2..ec38cb10786 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/ftp_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ftp_lua.c
@@ -1,467 +1,749 @@
/*
- * This file is auto-generated by "lua2c ftp.lua ftp_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_ftp_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 70, 84, 80, 32,115,117,112,112,111,114,116, 32,102,111,114, 32,116,104,101,
- 32, 76,117, 97, 32,108, 97,110,103,117, 97,103,101, 10, 45, 45, 32, 76,117, 97,
- 83,111, 99,107,101,116, 32,116,111,111,108,107,105,116, 46, 10, 45, 45, 32, 65,
-117,116,104,111,114, 58, 32, 68,105,101,103,111, 32, 78,101,104, 97, 98, 10, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 10, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,
-101, 99,108, 97,114,101, 32,109,111,100,117,108,101, 32, 97,110,100, 32,105,109,
-112,111,114,116, 32,100,101,112,101,110,100,101,110, 99,105,101,115, 10, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,
-108, 32, 98, 97,115,101, 32, 61, 32, 95, 71, 10,108,111, 99, 97,108, 32,116, 97,
- 98,108,101, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,116, 97, 98,108,101,
- 34, 41, 10,108,111, 99, 97,108, 32,115,116,114,105,110,103, 32, 61, 32,114,101,
-113,117,105,114,101, 40, 34,115,116,114,105,110,103, 34, 41, 10,108,111, 99, 97,
-108, 32,109, 97,116,104, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,109, 97,
-116,104, 34, 41, 10,108,111, 99, 97,108, 32,115,111, 99,107,101,116, 32, 61, 32,
-114,101,113,117,105,114,101, 40, 34,115,111, 99,107,101,116, 34, 41, 10,108,111,
- 99, 97,108, 32,117,114,108, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,
-111, 99,107,101,116, 46,117,114,108, 34, 41, 10,108,111, 99, 97,108, 32,116,112,
- 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,111, 99,107,101,116, 46,116,
-112, 34, 41, 10,108,111, 99, 97,108, 32,108,116,110, 49, 50, 32, 61, 32,114,101,
-113,117,105,114,101, 40, 34,108,116,110, 49, 50, 34, 41, 10,109,111,100,117,108,
-101, 40, 34,115,111, 99,107,101,116, 46,102,116,112, 34, 41, 10, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 80,114,
-111,103,114, 97,109, 32, 99,111,110,115,116, 97,110,116,115, 10, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,116,105,109,
-101,111,117,116, 32,105,110, 32,115,101, 99,111,110,100,115, 32, 98,101,102,111,
-114,101, 32,116,104,101, 32,112,114,111,103,114, 97,109, 32,103,105,118,101,115,
- 32,117,112, 32,111,110, 32, 97, 32, 99,111,110,110,101, 99,116,105,111,110, 10,
- 84, 73, 77, 69, 79, 85, 84, 32, 61, 32, 54, 48, 10, 45, 45, 32,100,101,102, 97,
-117,108,116, 32,112,111,114,116, 32,102,111,114, 32,102,116,112, 32,115,101,114,
-118,105, 99,101, 10, 80, 79, 82, 84, 32, 61, 32, 50, 49, 10, 45, 45, 32,116,104,
-105,115, 32,105,115, 32,116,104,101, 32,100,101,102, 97,117,108,116, 32, 97,110,
-111,110,121,109,111,117,115, 32,112, 97,115,115,119,111,114,100, 46, 32,117,115,
-101,100, 32,119,104,101,110, 32,110,111, 32,112, 97,115,115,119,111,114,100, 32,
-105,115, 10, 45, 45, 32,112,114,111,118,105,100,101,100, 32,105,110, 32,117,114,
-108, 46, 32,115,104,111,117,108,100, 32, 98,101, 32, 99,104, 97,110,103,101,100,
- 32,116,111, 32,121,111,117,114, 32,101, 45,109, 97,105,108, 46, 10, 85, 83, 69,
- 82, 32, 61, 32, 34,102,116,112, 34, 10, 80, 65, 83, 83, 87, 79, 82, 68, 32, 61,
- 32, 34, 97,110,111,110,121,109,111,117,115, 64, 97,110,111,110,121,109,111,117,
-115, 46,111,114,103, 34, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 45, 45, 32, 76,111,119, 32,108,101,118,101,108, 32, 70,
- 84, 80, 32, 65, 80, 73, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,109,101,116, 97,116, 32, 61, 32,123,
- 32, 95, 95,105,110,100,101,120, 32, 61, 32,123,125, 32,125, 10, 10,102,117,110,
- 99,116,105,111,110, 32,111,112,101,110, 40,115,101,114,118,101,114, 44, 32,112,
-111,114,116, 44, 32, 99,114,101, 97,116,101, 41, 10, 32, 32, 32, 32,108,111, 99,
- 97,108, 32,116,112, 32, 61, 32,115,111, 99,107,101,116, 46,116,114,121, 40,116,
-112, 46, 99,111,110,110,101, 99,116, 40,115,101,114,118,101,114, 44, 32,112,111,
-114,116, 32,111,114, 32, 80, 79, 82, 84, 44, 32, 84, 73, 77, 69, 79, 85, 84, 44,
- 32, 99,114,101, 97,116,101, 41, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,
-102, 32, 61, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,116, 97, 98,108,
-101, 40,123, 32,116,112, 32, 61, 32,116,112, 32,125, 44, 32,109,101,116, 97,116,
- 41, 10, 32, 32, 32, 32, 45, 45, 32,109, 97,107,101, 32,115,117,114,101, 32,101,
-118,101,114,121,116,104,105,110,103, 32,103,101,116,115, 32, 99,108,111,115,101,
-100, 32,105,110, 32, 97,110, 32,101,120, 99,101,112,116,105,111,110, 10, 32, 32,
- 32, 32,102, 46,116,114,121, 32, 61, 32,115,111, 99,107,101,116, 46,110,101,119,
-116,114,121, 40,102,117,110, 99,116,105,111,110, 40, 41, 32,102, 58, 99,108,111,
-115,101, 40, 41, 32,101,110,100, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110,
- 32,102, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116,
- 97,116, 46, 95, 95,105,110,100,101,120, 58,112,111,114,116, 99,111,110,110,101,
- 99,116, 40, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,
-108,102, 46,115,101,114,118,101,114, 58,115,101,116,116,105,109,101,111,117,116,
- 40, 84, 73, 77, 69, 79, 85, 84, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,
-100, 97,116, 97, 32, 61, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102,
- 46,115,101,114,118,101,114, 58, 97, 99, 99,101,112,116, 40, 41, 41, 10, 32, 32,
- 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,100, 97,116, 97,
- 58,115,101,116,116,105,109,101,111,117,116, 40, 84, 73, 77, 69, 79, 85, 84, 41,
- 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,
-116, 46, 95, 95,105,110,100,101,120, 58,112, 97,115,118, 99,111,110,110,101, 99,
-116, 40, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,100, 97,116, 97, 32, 61, 32,
-115,101,108,102, 46,116,114,121, 40,115,111, 99,107,101,116, 46,116, 99,112, 40,
- 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102,
- 46,100, 97,116, 97, 58,115,101,116,116,105,109,101,111,117,116, 40, 84, 73, 77,
- 69, 79, 85, 84, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,
-115,101,108,102, 46,100, 97,116, 97, 58, 99,111,110,110,101, 99,116, 40,115,101,
-108,102, 46,112, 97,115,118,116, 46,105,112, 44, 32,115,101,108,102, 46,112, 97,
-115,118,116, 46,112,111,114,116, 41, 41, 10,101,110,100, 10, 10,102,117,110, 99,
-116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,108,
-111,103,105,110, 40,117,115,101,114, 44, 32,112, 97,115,115,119,111,114,100, 41,
- 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,
-112, 58, 99,111,109,109, 97,110,100, 40, 34,117,115,101,114, 34, 44, 32,117,115,
-101,114, 32,111,114, 32, 85, 83, 69, 82, 41, 41, 10, 32, 32, 32, 32,108,111, 99,
- 97,108, 32, 99,111,100,101, 44, 32,114,101,112,108,121, 32, 61, 32,115,101,108,
-102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107,123,
- 34, 50, 46, 46, 34, 44, 32, 51, 51, 49,125, 41, 10, 32, 32, 32, 32,105,102, 32,
- 99,111,100,101, 32, 61, 61, 32, 51, 51, 49, 32,116,104,101,110, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,
-112, 58, 99,111,109,109, 97,110,100, 40, 34,112, 97,115,115, 34, 44, 32,112, 97,
-115,115,119,111,114,100, 32,111,114, 32, 80, 65, 83, 83, 87, 79, 82, 68, 41, 41,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,
-108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10,
- 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 49,
- 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116,
- 46, 95, 95,105,110,100,101,120, 58,112, 97,115,118, 40, 41, 10, 32, 32, 32, 32,
-115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,111,109,
-109, 97,110,100, 40, 34,112, 97,115,118, 34, 41, 41, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32, 99,111,100,101, 44, 32,114,101,112,108,121, 32, 61, 32,115,101,
-108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107,
- 40, 34, 50, 46, 46, 34, 41, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112,
- 97,116,116,101,114,110, 32, 61, 32, 34, 40, 37,100, 43, 41, 37, 68, 40, 37,100,
- 43, 41, 37, 68, 40, 37,100, 43, 41, 37, 68, 40, 37,100, 43, 41, 37, 68, 40, 37,
-100, 43, 41, 37, 68, 40, 37,100, 43, 41, 34, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32, 97, 44, 32, 98, 44, 32, 99, 44, 32,100, 44, 32,112, 49, 44, 32,112, 50,
- 32, 61, 32,115,111, 99,107,101,116, 46,115,107,105,112, 40, 50, 44, 32,115,116,
-114,105,110,103, 46,102,105,110,100, 40,114,101,112,108,121, 44, 32,112, 97,116,
-116,101,114,110, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,
- 97, 32, 97,110,100, 32, 98, 32, 97,110,100, 32, 99, 32, 97,110,100, 32,100, 32,
- 97,110,100, 32,112, 49, 32, 97,110,100, 32,112, 50, 44, 32,114,101,112,108,121,
- 41, 10, 32, 32, 32, 32,115,101,108,102, 46,112, 97,115,118,116, 32, 61, 32,123,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,105,112, 32, 61, 32,115,116,114,105,110,103,
- 46,102,111,114,109, 97,116, 40, 34, 37,100, 46, 37,100, 46, 37,100, 46, 37,100,
- 34, 44, 32, 97, 44, 32, 98, 44, 32, 99, 44, 32,100, 41, 44, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,112,111,114,116, 32, 61, 32,112, 49, 42, 50, 53, 54, 32, 43, 32,
-112, 50, 10, 32, 32, 32, 32,125, 10, 32, 32, 32, 32,105,102, 32,115,101,108,102,
- 46,115,101,114,118,101,114, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,115,101,108,102, 46,115,101,114,118,101,114, 58, 99,108,111,115,101, 40, 41,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,115,101,108,102, 46,115,101,114,118,101,114,
- 32, 61, 32,110,105,108, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,115,101,108,102, 46,112, 97,115,118,116, 46,105,112, 44,
- 32,115,101,108,102, 46,112, 97,115,118,116, 46,112,111,114,116, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,
-110,100,101,120, 58,112,111,114,116, 40,105,112, 44, 32,112,111,114,116, 41, 10,
- 32, 32, 32, 32,115,101,108,102, 46,112, 97,115,118,116, 32, 61, 32,110,105,108,
- 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,105,112, 32,116,104,101,110, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,105,112, 44, 32,112,111,114,116, 32, 61, 32,115,
-101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58,103,101,116, 99,
-111,110,116,114,111,108, 40, 41, 58,103,101,116,115,111, 99,107,110, 97,109,101,
- 40, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,101,108,102, 46,115,101,114,
-118,101,114, 32, 61, 32,115,101,108,102, 46,116,114,121, 40,115,111, 99,107,101,
-116, 46, 98,105,110,100, 40,105,112, 44, 32, 48, 41, 41, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,105,112, 44, 32,112,111,114,116, 32, 61, 32,115,101,108,102, 46,116,
-114,121, 40,115,101,108,102, 46,115,101,114,118,101,114, 58,103,101,116,115,111,
- 99,107,110, 97,109,101, 40, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,101,
-108,102, 46,116,114,121, 40,115,101,108,102, 46,115,101,114,118,101,114, 58,115,
-101,116,116,105,109,101,111,117,116, 40, 84, 73, 77, 69, 79, 85, 84, 41, 41, 10,
- 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112,108,
- 32, 61, 32,109, 97,116,104, 46,109,111,100, 40,112,111,114,116, 44, 32, 50, 53,
- 54, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112,104, 32, 61, 32, 40,112,
-111,114,116, 32, 45, 32,112,108, 41, 47, 50, 53, 54, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32, 97,114,103, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117,
- 98, 40,115,116,114,105,110,103, 46,102,111,114,109, 97,116, 40, 34, 37,115, 44,
- 37,100, 44, 37,100, 34, 44, 32,105,112, 44, 32,112,104, 44, 32,112,108, 41, 44,
- 32, 34, 37, 46, 34, 44, 32, 34, 44, 34, 41, 10, 32, 32, 32, 32,115,101,108,102,
- 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100,
- 40, 34,112,111,114,116, 34, 44, 32, 97,114,103, 41, 41, 10, 32, 32, 32, 32,115,
-101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,
-107, 40, 34, 50, 46, 46, 34, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110,
- 32, 49, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116,
- 97,116, 46, 95, 95,105,110,100,101,120, 58,115,101,110,100, 40,115,101,110,100,
-116, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102,
- 46,112, 97,115,118,116, 32,111,114, 32,115,101,108,102, 46,115,101,114,118,101,
-114, 44, 32, 34,110,101,101,100, 32,112,111,114,116, 32,111,114, 32,112, 97,115,
-118, 32,102,105,114,115,116, 34, 41, 10, 32, 32, 32, 32, 45, 45, 32,105,102, 32,
-116,104,101,114,101, 32,105,115, 32, 97, 32,112, 97,115,118,116, 32,116, 97, 98,
-108,101, 44, 32,119,101, 32, 97,108,114,101, 97,100,121, 32,115,101,110,116, 32,
- 97, 32, 80, 65, 83, 86, 32, 99,111,109,109, 97,110,100, 10, 32, 32, 32, 32, 45,
- 45, 32,119,101, 32,106,117,115,116, 32,103,101,116, 32,116,104,101, 32,100, 97,
-116, 97, 32, 99,111,110,110,101, 99,116,105,111,110, 32,105,110,116,111, 32,115,
-101,108,102, 46,100, 97,116, 97, 10, 32, 32, 32, 32,105,102, 32,115,101,108,102,
- 46,112, 97,115,118,116, 32,116,104,101,110, 32,115,101,108,102, 58,112, 97,115,
-118, 99,111,110,110,101, 99,116, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32, 45,
- 45, 32,103,101,116, 32,116,104,101, 32,116,114, 97,110,115,102,101,114, 32, 97,
-114,103,117,109,101,110,116, 32, 97,110,100, 32, 99,111,109,109, 97,110,100, 10,
- 32, 32, 32, 32,108,111, 99, 97,108, 32, 97,114,103,117,109,101,110,116, 32, 61,
- 32,115,101,110,100,116, 46, 97,114,103,117,109,101,110,116, 32,111,114, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,117,114,108, 46,117,110,101,115, 99, 97,112,101, 40,
-115,116,114,105,110,103, 46,103,115,117, 98, 40,115,101,110,100,116, 46,112, 97,
-116,104, 32,111,114, 32, 34, 34, 44, 32, 34, 94, 91, 47, 92, 92, 93, 34, 44, 32,
- 34, 34, 41, 41, 10, 32, 32, 32, 32,105,102, 32, 97,114,103,117,109,101,110,116,
- 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 32, 97,114,103,117,109,101,110,116,
- 32, 61, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108,
- 32, 99,111,109,109, 97,110,100, 32, 61, 32,115,101,110,100,116, 46, 99,111,109,
-109, 97,110,100, 32,111,114, 32, 34,115,116,111,114, 34, 10, 32, 32, 32, 32, 45,
- 45, 32,115,101,110,100, 32,116,104,101, 32,116,114, 97,110,115,102,101,114, 32,
- 99,111,109,109, 97,110,100, 32, 97,110,100, 32, 99,104,101, 99,107, 32,116,104,
-101, 32,114,101,112,108,121, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121,
- 40,115,101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40, 99,111,109,
-109, 97,110,100, 44, 32, 97,114,103,117,109,101,110,116, 41, 41, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32, 99,111,100,101, 44, 32,114,101,112,108,121, 32, 61,
- 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,
-101, 99,107,123, 34, 50, 46, 46, 34, 44, 32, 34, 49, 46, 46, 34,125, 41, 10, 32,
- 32, 32, 32, 45, 45, 32,105,102, 32,116,104,101,114,101, 32,105,115, 32,110,111,
-116, 32, 97, 32, 97, 32,112, 97,115,118,116, 32,116, 97, 98,108,101, 44, 32,116,
-104,101,110, 32,116,104,101,114,101, 32,105,115, 32, 97, 32,115,101,114,118,101,
-114, 10, 32, 32, 32, 32, 45, 45, 32, 97,110,100, 32,119,101, 32, 97,108,114,101,
- 97,100,121, 32,115,101,110,116, 32, 97, 32, 80, 79, 82, 84, 32, 99,111,109,109,
- 97,110,100, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,115,101,108,102, 46,
-112, 97,115,118,116, 32,116,104,101,110, 32,115,101,108,102, 58,112,111,114,116,
- 99,111,110,110,101, 99,116, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32, 45, 45,
- 32,103,101,116, 32,116,104,101, 32,115,105,110,107, 44, 32,115,111,117,114, 99,
-101, 32, 97,110,100, 32,115,116,101,112, 32,102,111,114, 32,116,104,101, 32,116,
-114, 97,110,115,102,101,114, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,116,
-101,112, 32, 61, 32,115,101,110,100,116, 46,115,116,101,112, 32,111,114, 32,108,
-116,110, 49, 50, 46,112,117,109,112, 46,115,116,101,112, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,114,101, 97,100,116, 32, 61, 32,123,115,101,108,102, 46,116,
-112, 46, 99,125, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,104,101, 99,107,
-115,116,101,112, 32, 61, 32,102,117,110, 99,116,105,111,110, 40,115,114, 99, 44,
- 32,115,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32, 99,104,101,
- 99,107, 32,115,116, 97,116,117,115, 32,105,110, 32, 99,111,110,116,114,111,108,
- 32, 99,111,110,110,101, 99,116,105,111,110, 32,119,104,105,108,101, 32,100,111,
-119,110,108,111, 97,100,105,110,103, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,114,101, 97,100,121,116, 32, 61, 32,115,111, 99,107,101,116, 46,
-115,101,108,101, 99,116, 40,114,101, 97,100,116, 44, 32,110,105,108, 44, 32, 48,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,114,101, 97,100,121,116, 91,
-116,112, 93, 32,116,104,101,110, 32, 99,111,100,101, 32, 61, 32,115,101,108,102,
- 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34,
- 50, 46, 46, 34, 41, 41, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,115,116,101,112, 40,115,114, 99, 44, 32,115,110,107, 41,
- 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,
-105,110,107, 32, 61, 32,115,111, 99,107,101,116, 46,115,105,110,107, 40, 34, 99,
-108,111,115,101, 45,119,104,101,110, 45,100,111,110,101, 34, 44, 32,115,101,108,
-102, 46,100, 97,116, 97, 41, 10, 32, 32, 32, 32, 45, 45, 32,116,114, 97,110,115,
-102,101,114, 32, 97,108,108, 32,100, 97,116, 97, 32, 97,110,100, 32, 99,104,101,
- 99,107, 32,101,114,114,111,114, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,
-121, 40,108,116,110, 49, 50, 46,112,117,109,112, 46, 97,108,108, 40,115,101,110,
-100,116, 46,115,111,117,114, 99,101, 44, 32,115,105,110,107, 44, 32, 99,104,101,
- 99,107,115,116,101,112, 41, 41, 10, 32, 32, 32, 32,105,102, 32,115,116,114,105,
-110,103, 46,102,105,110,100, 40, 99,111,100,101, 44, 32, 34, 49, 46, 46, 34, 41,
- 32,116,104,101,110, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,
-116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 32,101,110,100,
- 10, 32, 32, 32, 32, 45, 45, 32,100,111,110,101, 32,119,105,116,104, 32,100, 97,
-116, 97, 32, 99,111,110,110,101, 99,116,105,111,110, 10, 32, 32, 32, 32,115,101,
-108,102, 46,100, 97,116, 97, 58, 99,108,111,115,101, 40, 41, 10, 32, 32, 32, 32,
- 45, 45, 32,102,105,110,100, 32,111,117,116, 32,104,111,119, 32,109, 97,110,121,
- 32, 98,121,116,101,115, 32,119,101,114,101, 32,115,101,110,116, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32,115,101,110,116, 32, 61, 32,115,111, 99,107,101,116,
- 46,115,107,105,112, 40, 49, 44, 32,115,101,108,102, 46,100, 97,116, 97, 58,103,
-101,116,115,116, 97,116,115, 40, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,
-100, 97,116, 97, 32, 61, 32,110,105,108, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,115,101,110,116, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110,
- 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,114,101, 99,101,105,
-118,101, 40,114,101, 99,118,116, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,
-114,121, 40,115,101,108,102, 46,112, 97,115,118,116, 32,111,114, 32,115,101,108,
-102, 46,115,101,114,118,101,114, 44, 32, 34,110,101,101,100, 32,112,111,114,116,
- 32,111,114, 32,112, 97,115,118, 32,102,105,114,115,116, 34, 41, 10, 32, 32, 32,
- 32,105,102, 32,115,101,108,102, 46,112, 97,115,118,116, 32,116,104,101,110, 32,
-115,101,108,102, 58,112, 97,115,118, 99,111,110,110,101, 99,116, 40, 41, 32,101,
-110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 97,114,103,117,109,101,110,
-116, 32, 61, 32,114,101, 99,118,116, 46, 97,114,103,117,109,101,110,116, 32,111,
-114, 10, 32, 32, 32, 32, 32, 32, 32, 32,117,114,108, 46,117,110,101,115, 99, 97,
-112,101, 40,115,116,114,105,110,103, 46,103,115,117, 98, 40,114,101, 99,118,116,
- 46,112, 97,116,104, 32,111,114, 32, 34, 34, 44, 32, 34, 94, 91, 47, 92, 92, 93,
- 34, 44, 32, 34, 34, 41, 41, 10, 32, 32, 32, 32,105,102, 32, 97,114,103,117,109,
-101,110,116, 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 32, 97,114,103,117,109,
-101,110,116, 32, 61, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32, 99,111,109,109, 97,110,100, 32, 61, 32,114,101, 99,118,116, 46,
- 99,111,109,109, 97,110,100, 32,111,114, 32, 34,114,101,116,114, 34, 10, 32, 32,
- 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,
-111,109,109, 97,110,100, 40, 99,111,109,109, 97,110,100, 44, 32, 97,114,103,117,
-109,101,110,116, 41, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,111,100,
-101, 32, 61, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112,
- 58, 99,104,101, 99,107,123, 34, 49, 46, 46, 34, 44, 32, 34, 50, 46, 46, 34,125,
- 41, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,115,101,108,102, 46,112, 97,
-115,118,116, 32,116,104,101,110, 32,115,101,108,102, 58,112,111,114,116, 99,111,
-110,110,101, 99,116, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,115,111,117,114, 99,101, 32, 61, 32,115,111, 99,107,101,116, 46,115,111,
-117,114, 99,101, 40, 34,117,110,116,105,108, 45, 99,108,111,115,101,100, 34, 44,
- 32,115,101,108,102, 46,100, 97,116, 97, 41, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,115,116,101,112, 32, 61, 32,114,101, 99,118,116, 46,115,116,101,112, 32,
-111,114, 32,108,116,110, 49, 50, 46,112,117,109,112, 46,115,116,101,112, 10, 32,
- 32, 32, 32,115,101,108,102, 46,116,114,121, 40,108,116,110, 49, 50, 46,112,117,
-109,112, 46, 97,108,108, 40,115,111,117,114, 99,101, 44, 32,114,101, 99,118,116,
- 46,115,105,110,107, 44, 32,115,116,101,112, 41, 41, 10, 32, 32, 32, 32,105,102,
- 32,115,116,114,105,110,103, 46,102,105,110,100, 40, 99,111,100,101, 44, 32, 34,
- 49, 46, 46, 34, 41, 32,116,104,101,110, 32,115,101,108,102, 46,116,114,121, 40,
-115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41,
- 41, 32,101,110,100, 10, 32, 32, 32, 32,115,101,108,102, 46,100, 97,116, 97, 58,
- 99,108,111,115,101, 40, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,100, 97,116,
- 97, 32, 61, 32,110,105,108, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 49,
- 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116,
- 46, 95, 95,105,110,100,101,120, 58, 99,119,100, 40,100,105,114, 41, 10, 32, 32,
- 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,
-111,109,109, 97,110,100, 40, 34, 99,119,100, 34, 44, 32,100,105,114, 41, 41, 10,
- 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112,
- 58, 99,104,101, 99,107, 40, 50, 53, 48, 41, 41, 10, 32, 32, 32, 32,114,101,116,
-117,114,110, 32, 49, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,
-109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,116,121,112,101, 40,116,
-121,112,101, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,
-108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40, 34,116,121,112,101, 34,
- 44, 32,116,121,112,101, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,
-121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 50, 48, 48, 41,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 49, 10,101,110,100, 10, 10,
-102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,
-101,120, 58,103,114,101,101,116, 40, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108,
- 32, 99,111,100,101, 32, 61, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,
-102, 46,116,112, 58, 99,104,101, 99,107,123, 34, 49, 46, 46, 34, 44, 32, 34, 50,
- 46, 46, 34,125, 41, 10, 32, 32, 32, 32,105,102, 32,115,116,114,105,110,103, 46,
-102,105,110,100, 40, 99,111,100,101, 44, 32, 34, 49, 46, 46, 34, 41, 32,116,104,
-101,110, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58,
- 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 32,101,110,100, 10, 32, 32,
- 32, 32,114,101,116,117,114,110, 32, 49, 10,101,110,100, 10, 10,102,117,110, 99,
-116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,113,
-117,105,116, 40, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,
-101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40, 34,113,117,105,116,
- 34, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,
-102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10, 32,
- 32, 32, 32,114,101,116,117,114,110, 32, 49, 10,101,110,100, 10, 10,102,117,110,
- 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,
- 99,108,111,115,101, 40, 41, 10, 32, 32, 32, 32,105,102, 32,115,101,108,102, 46,
-100, 97,116, 97, 32,116,104,101,110, 32,115,101,108,102, 46,100, 97,116, 97, 58,
- 99,108,111,115,101, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,115,
-101,108,102, 46,115,101,114,118,101,114, 32,116,104,101,110, 32,115,101,108,102,
- 46,115,101,114,118,101,114, 58, 99,108,111,115,101, 40, 41, 32,101,110,100, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46,116,112, 58, 99,
-108,111,115,101, 40, 41, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 72,105,103,104, 32,108,101,
-118,101,108, 32, 70, 84, 80, 32, 65, 80, 73, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,102,117,110, 99,
-116,105,111,110, 32,111,118,101,114,114,105,100,101, 40,116, 41, 10, 32, 32, 32,
- 32,105,102, 32,116, 46,117,114,108, 32,116,104,101,110, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,117, 32, 61, 32,117,114,108, 46,112, 97,114,
-115,101, 40,116, 46,117,114,108, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,111,
-114, 32,105, 44,118, 32,105,110, 32, 98, 97,115,101, 46,112, 97,105,114,115, 40,
-116, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,117, 91,
-105, 93, 32, 61, 32,118, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,117, 10, 32, 32, 32, 32,
-101,108,115,101, 32,114,101,116,117,114,110, 32,116, 32,101,110,100, 10,101,110,
-100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,116,112,
-117,116, 40,112,117,116,116, 41, 10, 32, 32, 32, 32,112,117,116,116, 32, 61, 32,
-111,118,101,114,114,105,100,101, 40,112,117,116,116, 41, 10, 32, 32, 32, 32,115,
-111, 99,107,101,116, 46,116,114,121, 40,112,117,116,116, 46,104,111,115,116, 44,
- 32, 34,109,105,115,115,105,110,103, 32,104,111,115,116,110, 97,109,101, 34, 41,
- 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,102, 32, 61, 32,111,112,101,110, 40,
-112,117,116,116, 46,104,111,115,116, 44, 32,112,117,116,116, 46,112,111,114,116,
- 44, 32,112,117,116,116, 46, 99,114,101, 97,116,101, 41, 10, 32, 32, 32, 32,102,
- 58,103,114,101,101,116, 40, 41, 10, 32, 32, 32, 32,102, 58,108,111,103,105,110,
- 40,112,117,116,116, 46,117,115,101,114, 44, 32,112,117,116,116, 46,112, 97,115,
-115,119,111,114,100, 41, 10, 32, 32, 32, 32,105,102, 32,112,117,116,116, 46,116,
-121,112,101, 32,116,104,101,110, 32,102, 58,116,121,112,101, 40,112,117,116,116,
- 46,116,121,112,101, 41, 32,101,110,100, 10, 32, 32, 32, 32,102, 58,112, 97,115,
-118, 40, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,101,110,116, 32, 61,
- 32,102, 58,115,101,110,100, 40,112,117,116,116, 41, 10, 32, 32, 32, 32,102, 58,
-113,117,105,116, 40, 41, 10, 32, 32, 32, 32,102, 58, 99,108,111,115,101, 40, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,110,116, 10,101,110,100,
- 10, 10,108,111, 99, 97,108, 32,100,101,102, 97,117,108,116, 32, 61, 32,123, 10,
- 32, 32, 32, 32,112, 97,116,104, 32, 61, 32, 34, 47, 34, 44, 10, 32, 32, 32, 32,
-115, 99,104,101,109,101, 32, 61, 32, 34,102,116,112, 34, 10,125, 10, 10,108,111,
- 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,112, 97,114,115,101, 40,117,
- 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,116, 32, 61, 32,115,111, 99,107,
-101,116, 46,116,114,121, 40,117,114,108, 46,112, 97,114,115,101, 40,117, 44, 32,
-100,101,102, 97,117,108,116, 41, 41, 10, 32, 32, 32, 32,115,111, 99,107,101,116,
- 46,116,114,121, 40,116, 46,115, 99,104,101,109,101, 32, 61, 61, 32, 34,102,116,
-112, 34, 44, 32, 34,119,114,111,110,103, 32,115, 99,104,101,109,101, 32, 39, 34,
- 32, 46, 46, 32,116, 46,115, 99,104,101,109,101, 32, 46, 46, 32, 34, 39, 34, 41,
- 10, 32, 32, 32, 32,115,111, 99,107,101,116, 46,116,114,121, 40,116, 46,104,111,
-115,116, 44, 32, 34,109,105,115,115,105,110,103, 32,104,111,115,116,110, 97,109,
-101, 34, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112, 97,116, 32, 61, 32,
- 34, 94,116,121,112,101, 61, 40, 46, 41, 36, 34, 10, 32, 32, 32, 32,105,102, 32,
-116, 46,112, 97,114, 97,109,115, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,116, 46,116,121,112,101, 32, 61, 32,115,111, 99,107,101,116, 46,115,107,
-105,112, 40, 50, 44, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,116, 46,
-112, 97,114, 97,109,115, 44, 32,112, 97,116, 41, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,115,111, 99,107,101,116, 46,116,114,121, 40,116, 46,116,121,112,101, 32,
- 61, 61, 32, 34, 97, 34, 32,111,114, 32,116, 46,116,121,112,101, 32, 61, 61, 32,
- 34,105, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34,105,110,
-118, 97,108,105,100, 32,116,121,112,101, 32, 39, 34, 32, 46, 46, 32,116, 46,116,
-121,112,101, 32, 46, 46, 32, 34, 39, 34, 41, 10, 32, 32, 32, 32,101,110,100, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32,116, 10,101,110,100, 10, 10,108,111,
- 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,115,112,117,116, 40,117, 44,
- 32, 98,111,100,121, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112,117,116,
-116, 32, 61, 32,112, 97,114,115,101, 40,117, 41, 10, 32, 32, 32, 32,112,117,116,
-116, 46,115,111,117,114, 99,101, 32, 61, 32,108,116,110, 49, 50, 46,115,111,117,
-114, 99,101, 46,115,116,114,105,110,103, 40, 98,111,100,121, 41, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,116,112,117,116, 40,112,117,116,116, 41, 10,101,
-110,100, 10, 10,112,117,116, 32, 61, 32,115,111, 99,107,101,116, 46,112,114,111,
-116,101, 99,116, 40,102,117,110, 99,116,105,111,110, 40,112,117,116,116, 44, 32,
- 98,111,100,121, 41, 10, 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,116,121,
-112,101, 40,112,117,116,116, 41, 32, 61, 61, 32, 34,115,116,114,105,110,103, 34,
- 32,116,104,101,110, 32,114,101,116,117,114,110, 32,115,112,117,116, 40,112,117,
-116,116, 44, 32, 98,111,100,121, 41, 10, 32, 32, 32, 32,101,108,115,101, 32,114,
-101,116,117,114,110, 32,116,112,117,116, 40,112,117,116,116, 41, 32,101,110,100,
- 10,101,110,100, 41, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,
-110, 32,116,103,101,116, 40,103,101,116,116, 41, 10, 32, 32, 32, 32,103,101,116,
-116, 32, 61, 32,111,118,101,114,114,105,100,101, 40,103,101,116,116, 41, 10, 32,
- 32, 32, 32,115,111, 99,107,101,116, 46,116,114,121, 40,103,101,116,116, 46,104,
-111,115,116, 44, 32, 34,109,105,115,115,105,110,103, 32,104,111,115,116,110, 97,
-109,101, 34, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,102, 32, 61, 32,111,
-112,101,110, 40,103,101,116,116, 46,104,111,115,116, 44, 32,103,101,116,116, 46,
-112,111,114,116, 44, 32,103,101,116,116, 46, 99,114,101, 97,116,101, 41, 10, 32,
- 32, 32, 32,102, 58,103,114,101,101,116, 40, 41, 10, 32, 32, 32, 32,102, 58,108,
-111,103,105,110, 40,103,101,116,116, 46,117,115,101,114, 44, 32,103,101,116,116,
- 46,112, 97,115,115,119,111,114,100, 41, 10, 32, 32, 32, 32,105,102, 32,103,101,
-116,116, 46,116,121,112,101, 32,116,104,101,110, 32,102, 58,116,121,112,101, 40,
-103,101,116,116, 46,116,121,112,101, 41, 32,101,110,100, 10, 32, 32, 32, 32,102,
- 58,112, 97,115,118, 40, 41, 10, 32, 32, 32, 32,102, 58,114,101, 99,101,105,118,
-101, 40,103,101,116,116, 41, 10, 32, 32, 32, 32,102, 58,113,117,105,116, 40, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102, 58, 99,108,111,115,101, 40,
- 41, 10,101,110,100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,
-110, 32,115,103,101,116, 40,117, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,
-103,101,116,116, 32, 61, 32,112, 97,114,115,101, 40,117, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32,116, 32, 61, 32,123,125, 10, 32, 32, 32, 32,103,101,116,
-116, 46,115,105,110,107, 32, 61, 32,108,116,110, 49, 50, 46,115,105,110,107, 46,
-116, 97, 98,108,101, 40,116, 41, 10, 32, 32, 32, 32,116,103,101,116, 40,103,101,
-116,116, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,116, 97, 98,108,101,
- 46, 99,111,110, 99, 97,116, 40,116, 41, 10,101,110,100, 10, 10, 99,111,109,109,
- 97,110,100, 32, 61, 32,115,111, 99,107,101,116, 46,112,114,111,116,101, 99,116,
- 40,102,117,110, 99,116,105,111,110, 40, 99,109,100,116, 41, 10, 32, 32, 32, 32,
- 99,109,100,116, 32, 61, 32,111,118,101,114,114,105,100,101, 40, 99,109,100,116,
- 41, 10, 32, 32, 32, 32,115,111, 99,107,101,116, 46,116,114,121, 40, 99,109,100,
-116, 46,104,111,115,116, 44, 32, 34,109,105,115,115,105,110,103, 32,104,111,115,
-116,110, 97,109,101, 34, 41, 10, 32, 32, 32, 32,115,111, 99,107,101,116, 46,116,
-114,121, 40, 99,109,100,116, 46, 99,111,109,109, 97,110,100, 44, 32, 34,109,105,
-115,115,105,110,103, 32, 99,111,109,109, 97,110,100, 34, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32,102, 32, 61, 32,111,112,101,110, 40, 99,109,100,116, 46,
-104,111,115,116, 44, 32, 99,109,100,116, 46,112,111,114,116, 44, 32, 99,109,100,
-116, 46, 99,114,101, 97,116,101, 41, 10, 32, 32, 32, 32,102, 58,103,114,101,101,
-116, 40, 41, 10, 32, 32, 32, 32,102, 58,108,111,103,105,110, 40, 99,109,100,116,
- 46,117,115,101,114, 44, 32, 99,109,100,116, 46,112, 97,115,115,119,111,114,100,
- 41, 10, 32, 32, 32, 32,102, 46,116,114,121, 40,102, 46,116,112, 58, 99,111,109,
-109, 97,110,100, 40, 99,109,100,116, 46, 99,111,109,109, 97,110,100, 44, 32, 99,
-109,100,116, 46, 97,114,103,117,109,101,110,116, 41, 41, 10, 32, 32, 32, 32,105,
-102, 32, 99,109,100,116, 46, 99,104,101, 99,107, 32,116,104,101,110, 32,102, 46,
-116,114,121, 40,102, 46,116,112, 58, 99,104,101, 99,107, 40, 99,109,100,116, 46,
- 99,104,101, 99,107, 41, 41, 32,101,110,100, 10, 32, 32, 32, 32,102, 58,113,117,
-105,116, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102, 58, 99,108,
-111,115,101, 40, 41, 10,101,110,100, 41, 10, 10,103,101,116, 32, 61, 32,115,111,
- 99,107,101,116, 46,112,114,111,116,101, 99,116, 40,102,117,110, 99,116,105,111,
-110, 40,103,101,116,116, 41, 10, 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,
-116,121,112,101, 40,103,101,116,116, 41, 32, 61, 61, 32, 34,115,116,114,105,110,
-103, 34, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,115,103,101,116, 40,
-103,101,116,116, 41, 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,
-110, 32,116,103,101,116, 40,103,101,116,116, 41, 32,101,110,100, 10,101,110,100,
- 41, 10, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x28, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
+ 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d, 0x61, 0x74, 0x68, 0x22, 0x29,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6f,
+ 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x74, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x74, 0x70, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c,
+ 0x74, 0x6e, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28,
+ 0x22, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x22, 0x29, 0x0a, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x66, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x7b, 0x7d,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x66, 0x74, 0x70, 0x0a, 0x5f,
+ 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x20, 0x3d, 0x20,
+ 0x36, 0x30, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x50, 0x4f, 0x52,
+ 0x54, 0x20, 0x3d, 0x20, 0x32, 0x31, 0x0a, 0x5f, 0x4d, 0x2e, 0x55, 0x53,
+ 0x45, 0x52, 0x20, 0x3d, 0x20, 0x22, 0x66, 0x74, 0x70, 0x22, 0x0a, 0x5f,
+ 0x4d, 0x2e, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x20, 0x3d,
+ 0x20, 0x22, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x40,
+ 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x2e, 0x6f, 0x72,
+ 0x67, 0x22, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74,
+ 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x74, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+ 0x74, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x2c, 0x20,
+ 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x2c, 0x20,
+ 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x20, 0x74, 0x70, 0x20, 0x3d, 0x20,
+ 0x74, 0x70, 0x20, 0x7d, 0x2c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6e, 0x65, 0x77, 0x74,
+ 0x72, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x29, 0x20, 0x66, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74,
+ 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x70, 0x6f, 0x72,
+ 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a,
+ 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x5f,
+ 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x3a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x28, 0x29, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x73, 0x65,
+ 0x74, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x5f, 0x4d, 0x2e,
+ 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x29, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,
+ 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x3a, 0x70, 0x61, 0x73, 0x76, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74,
+ 0x63, 0x70, 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x64, 0x61, 0x74, 0x61, 0x3a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65,
+ 0x6f, 0x75, 0x74, 0x28, 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f,
+ 0x55, 0x54, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x3a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74, 0x2e, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x29,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x28, 0x75,
+ 0x73, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x75, 0x73, 0x65,
+ 0x72, 0x22, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20,
+ 0x5f, 0x4d, 0x2e, 0x55, 0x53, 0x45, 0x52, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65,
+ 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x20, 0x3d, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x7b, 0x22, 0x32, 0x2e,
+ 0x2e, 0x22, 0x2c, 0x20, 0x33, 0x33, 0x31, 0x7d, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d,
+ 0x20, 0x33, 0x33, 0x31, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x70, 0x61, 0x73, 0x73,
+ 0x22, 0x2c, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20,
+ 0x6f, 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f,
+ 0x52, 0x44, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28,
+ 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e,
+ 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x70, 0x61, 0x73, 0x76,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x70, 0x61, 0x73,
+ 0x76, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x70,
+ 0x6c, 0x79, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68,
+ 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x22, 0x28, 0x25, 0x64,
+ 0x2b, 0x29, 0x25, 0x44, 0x28, 0x25, 0x64, 0x2b, 0x29, 0x25, 0x44, 0x28,
+ 0x25, 0x64, 0x2b, 0x29, 0x25, 0x44, 0x28, 0x25, 0x64, 0x2b, 0x29, 0x25,
+ 0x44, 0x28, 0x25, 0x64, 0x2b, 0x29, 0x25, 0x44, 0x28, 0x25, 0x64, 0x2b,
+ 0x29, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x61, 0x2c, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x2c, 0x20, 0x64, 0x2c,
+ 0x20, 0x70, 0x31, 0x2c, 0x20, 0x70, 0x32, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6b, 0x69, 0x70, 0x28, 0x32, 0x2c,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64,
+ 0x28, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x74,
+ 0x65, 0x72, 0x6e, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x61, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x62, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x31, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x70, 0x32, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61,
+ 0x73, 0x76, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x64, 0x2e, 0x25, 0x64, 0x2e, 0x25,
+ 0x64, 0x2e, 0x25, 0x64, 0x22, 0x2c, 0x20, 0x61, 0x2c, 0x20, 0x62, 0x2c,
+ 0x20, 0x63, 0x2c, 0x20, 0x64, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x70,
+ 0x31, 0x2a, 0x32, 0x35, 0x36, 0x20, 0x2b, 0x20, 0x70, 0x32, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70,
+ 0x61, 0x73, 0x76, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74,
+ 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74,
+ 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x65, 0x70, 0x73,
+ 0x76, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x65, 0x70,
+ 0x73, 0x76, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x79, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x32, 0x39, 0x22, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70,
+ 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x3d, 0x20, 0x22, 0x25, 0x28,
+ 0x28, 0x2e, 0x29, 0x28, 0x2e, 0x2d, 0x29, 0x25, 0x31, 0x28, 0x2e, 0x2d,
+ 0x29, 0x25, 0x31, 0x28, 0x2e, 0x2d, 0x29, 0x25, 0x31, 0x25, 0x29, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64,
+ 0x2c, 0x20, 0x70, 0x72, 0x74, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28,
+ 0x72, 0x65, 0x70, 0x6c, 0x79, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65,
+ 0x72, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x22,
+ 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x65, 0x70, 0x73, 0x76,
+ 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73,
+ 0x76, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x67, 0x65, 0x74,
+ 0x70, 0x65, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76,
+ 0x74, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74, 0x2e, 0x70, 0x6f,
+ 0x72, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x70, 0x6f, 0x72, 0x74, 0x28, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70,
+ 0x61, 0x73, 0x76, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x64,
+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x70, 0x3a, 0x67, 0x65, 0x74, 0x73, 0x6f, 0x63, 0x6b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x62, 0x69, 0x6e,
+ 0x64, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x30,
+ 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a,
+ 0x67, 0x65, 0x74, 0x73, 0x6f, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x28,
+ 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x73, 0x65, 0x74, 0x74,
+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x5f, 0x4d, 0x2e, 0x54, 0x49,
+ 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x70, 0x6c, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e,
+ 0x6d, 0x6f, 0x64, 0x28, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x32, 0x35,
+ 0x36, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x70, 0x68, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x6f, 0x72, 0x74, 0x20,
+ 0x2d, 0x20, 0x70, 0x6c, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x72, 0x67, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75,
+ 0x62, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x73, 0x2c, 0x25, 0x64, 0x2c, 0x25,
+ 0x64, 0x22, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c,
+ 0x20, 0x70, 0x68, 0x2c, 0x20, 0x70, 0x6c, 0x29, 0x2c, 0x20, 0x22, 0x25,
+ 0x2e, 0x22, 0x2c, 0x20, 0x22, 0x2c, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+ 0x64, 0x28, 0x22, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x2c, 0x20, 0x61, 0x72,
+ 0x67, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22,
+ 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x65, 0x70, 0x72, 0x74, 0x28,
+ 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76,
+ 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c,
+ 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x67, 0x65, 0x74, 0x73, 0x6f, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+ 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
+ 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x30, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x67, 0x65, 0x74,
+ 0x73, 0x6f, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x3a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65,
+ 0x6f, 0x75, 0x74, 0x28, 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f,
+ 0x55, 0x54, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61,
+ 0x72, 0x67, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x7c, 0x25, 0x73, 0x7c,
+ 0x25, 0x73, 0x7c, 0x25, 0x64, 0x7c, 0x22, 0x2c, 0x20, 0x66, 0x61, 0x6d,
+ 0x69, 0x6c, 0x79, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+ 0x28, 0x22, 0x65, 0x70, 0x72, 0x74, 0x22, 0x2c, 0x20, 0x61, 0x72, 0x67,
+ 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a,
+ 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x73,
+ 0x65, 0x6e, 0x64, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x70, 0x61, 0x73, 0x76, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x22, 0x6e,
+ 0x65, 0x65, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20,
+ 0x70, 0x61, 0x73, 0x76, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x22, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x70, 0x61, 0x73, 0x76, 0x63, 0x6f, 0x6e,
+ 0x6e, 0x65, 0x63, 0x74, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x72, 0x67,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6e, 0x64,
+ 0x74, 0x2e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f,
+ 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72,
+ 0x6c, 0x2e, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73,
+ 0x65, 0x6e, 0x64, 0x74, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72,
+ 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x5e, 0x5b, 0x2f, 0x5c, 0x5c, 0x5d,
+ 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61,
+ 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x69,
+ 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20,
+ 0x3d, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x73, 0x74, 0x6f, 0x72,
+ 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79,
+ 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63,
+ 0x6b, 0x7b, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x2c, 0x20, 0x22, 0x31, 0x2e,
+ 0x2e, 0x22, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73,
+ 0x76, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x3a, 0x70, 0x6f, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+ 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20,
+ 0x73, 0x65, 0x6e, 0x64, 0x74, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x20, 0x6f,
+ 0x72, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70,
+ 0x2e, 0x73, 0x74, 0x65, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x74, 0x20, 0x3d, 0x20,
+ 0x7b, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x20, 0x7d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68,
+ 0x65, 0x63, 0x6b, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20,
+ 0x73, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x79,
+ 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x72, 0x65, 0x61, 0x64, 0x74, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x79, 0x74, 0x5b, 0x74, 0x70, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a,
+ 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29,
+ 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x65,
+ 0x70, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x6e, 0x6b, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x69, 0x6e, 0x6b,
+ 0x28, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2d, 0x77, 0x68, 0x65, 0x6e,
+ 0x2d, 0x64, 0x6f, 0x6e, 0x65, 0x22, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x64, 0x61, 0x74, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x6c, 0x74, 0x6e, 0x31,
+ 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73,
+ 0x65, 0x6e, 0x64, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c,
+ 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b,
+ 0x73, 0x74, 0x65, 0x70, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e,
+ 0x64, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x22, 0x31, 0x2e, 0x2e,
+ 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22,
+ 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x63, 0x6c, 0x6f,
+ 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6b, 0x69, 0x70, 0x28, 0x31, 0x2c,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x67,
+ 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x73, 0x28, 0x29, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x72, 0x65,
+ 0x63, 0x76, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70,
+ 0x61, 0x73, 0x76, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x22, 0x6e, 0x65,
+ 0x65, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x70,
+ 0x61, 0x73, 0x76, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x22, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x70, 0x61, 0x73, 0x76, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x3a, 0x70, 0x61, 0x73, 0x76, 0x63, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x72, 0x67, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x63, 0x76, 0x74,
+ 0x2e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c,
+ 0x2e, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x72, 0x65,
+ 0x63, 0x76, 0x74, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20,
+ 0x22, 0x22, 0x2c, 0x20, 0x22, 0x5e, 0x5b, 0x2f, 0x5c, 0x5c, 0x5d, 0x22,
+ 0x2c, 0x20, 0x22, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x72,
+ 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d,
+ 0x20, 0x72, 0x65, 0x63, 0x76, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x72, 0x65, 0x74, 0x72, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+ 0x64, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x20, 0x3d,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x7b,
+ 0x22, 0x31, 0x2e, 0x2e, 0x22, 0x2c, 0x20, 0x22, 0x32, 0x2e, 0x2e, 0x22,
+ 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63,
+ 0x6f, 0x64, 0x65, 0x20, 0x3e, 0x3d, 0x20, 0x32, 0x30, 0x30, 0x29, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3c, 0x3d,
+ 0x20, 0x32, 0x39, 0x39, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x63, 0x76, 0x74,
+ 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x28, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x61, 0x73, 0x76, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x70, 0x6f,
+ 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x28, 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c, 0x6f, 0x73,
+ 0x65, 0x64, 0x22, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x63,
+ 0x76, 0x74, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x6c,
+ 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x73, 0x74,
+ 0x65, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75,
+ 0x6d, 0x70, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x2c, 0x20, 0x72, 0x65, 0x63, 0x76, 0x74, 0x2e, 0x73, 0x69, 0x6e,
+ 0x6b, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x66, 0x69, 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x22,
+ 0x31, 0x2e, 0x2e, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32,
+ 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x3a,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d, 0x20,
+ 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e,
+ 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x77, 0x64, 0x28,
+ 0x64, 0x69, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x63,
+ 0x77, 0x64, 0x22, 0x2c, 0x20, 0x64, 0x69, 0x72, 0x29, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63,
+ 0x6b, 0x28, 0x32, 0x35, 0x30, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65,
+ 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a,
+ 0x74, 0x79, 0x70, 0x65, 0x28, 0x74, 0x79, 0x70, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x28, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x32, 0x30,
+ 0x30, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e,
+ 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x67, 0x72, 0x65, 0x65,
+ 0x74, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x7b, 0x22, 0x31, 0x2e, 0x2e,
+ 0x22, 0x2c, 0x20, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x7d, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20,
+ 0x22, 0x31, 0x2e, 0x2e, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22,
+ 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x28, 0x22, 0x71, 0x75, 0x69, 0x74, 0x22, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65,
+ 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+ 0x65, 0x28, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x75, 0x20, 0x3d, 0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x28, 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c,
+ 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x61,
+ 0x69, 0x72, 0x73, 0x28, 0x74, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x5b,
+ 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x70, 0x75, 0x74, 0x28, 0x70, 0x75,
+ 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x74, 0x74,
+ 0x20, 0x3d, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x28,
+ 0x70, 0x75, 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x70, 0x75, 0x74,
+ 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x22, 0x6d, 0x69, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70, 0x65,
+ 0x6e, 0x28, 0x70, 0x75, 0x74, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c,
+ 0x20, 0x70, 0x75, 0x74, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20,
+ 0x70, 0x75, 0x74, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x67, 0x72, 0x65, 0x65, 0x74,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x6c, 0x6f, 0x67,
+ 0x69, 0x6e, 0x28, 0x70, 0x75, 0x74, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72,
+ 0x2c, 0x20, 0x70, 0x75, 0x74, 0x74, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x70, 0x75, 0x74, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x66, 0x3a, 0x74, 0x79, 0x70, 0x65, 0x28, 0x70, 0x75,
+ 0x74, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x65, 0x70, 0x73, 0x76, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x3a, 0x73, 0x65, 0x6e,
+ 0x64, 0x28, 0x70, 0x75, 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x66, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65,
+ 0x6e, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x7b,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20,
+ 0x22, 0x2f, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x66, 0x74, 0x70, 0x22, 0x0a,
+ 0x7d, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63,
+ 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x75, 0x72, 0x6c,
+ 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x75, 0x2c, 0x20, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x74,
+ 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x22,
+ 0x66, 0x74, 0x70, 0x22, 0x2c, 0x20, 0x22, 0x77, 0x72, 0x6f, 0x6e, 0x67,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x27, 0x22, 0x20, 0x2e,
+ 0x2e, 0x20, 0x74, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x2e,
+ 0x2e, 0x20, 0x22, 0x27, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x74, 0x2e,
+ 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x22, 0x6d, 0x69, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x70, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x5e, 0x74, 0x79, 0x70, 0x65,
+ 0x3d, 0x28, 0x2e, 0x29, 0x24, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6b, 0x69, 0x70, 0x28, 0x32, 0x2c, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28,
+ 0x74, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x70, 0x61,
+ 0x74, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x74,
+ 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x61, 0x22,
+ 0x20, 0x6f, 0x72, 0x20, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x69, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x27, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x2e, 0x2e,
+ 0x20, 0x22, 0x27, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20,
+ 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x73, 0x70, 0x75, 0x74, 0x28, 0x75, 0x2c, 0x20, 0x62,
+ 0x6f, 0x64, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x70, 0x75, 0x74, 0x74, 0x20, 0x3d, 0x20, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x75, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x74, 0x74, 0x2e, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x28, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x70, 0x75, 0x74,
+ 0x28, 0x70, 0x75, 0x74, 0x74, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f,
+ 0x4d, 0x2e, 0x70, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x28, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x75, 0x74, 0x74,
+ 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65,
+ 0x28, 0x70, 0x75, 0x74, 0x74, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x70, 0x75, 0x74, 0x28,
+ 0x70, 0x75, 0x74, 0x74, 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x74, 0x70, 0x75, 0x74, 0x28, 0x70, 0x75, 0x74,
+ 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x29, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x74, 0x67, 0x65, 0x74, 0x28, 0x67, 0x65, 0x74, 0x74,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x74, 0x20, 0x3d,
+ 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x28, 0x67, 0x65,
+ 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x67, 0x65, 0x74, 0x74, 0x2e,
+ 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x22, 0x6d, 0x69, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x66, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28,
+ 0x67, 0x65, 0x74, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x67,
+ 0x65, 0x74, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x67, 0x65,
+ 0x74, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x66, 0x3a, 0x67, 0x72, 0x65, 0x65, 0x74, 0x28, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x6c, 0x6f, 0x67, 0x69, 0x6e,
+ 0x28, 0x67, 0x65, 0x74, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20,
+ 0x67, 0x65, 0x74, 0x74, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x67, 0x65,
+ 0x74, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x66, 0x3a, 0x74, 0x79, 0x70, 0x65, 0x28, 0x67, 0x65, 0x74, 0x74,
+ 0x2e, 0x74, 0x79, 0x70, 0x65, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x66, 0x3a, 0x65, 0x70, 0x73, 0x76, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
+ 0x65, 0x28, 0x67, 0x65, 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x3a, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x73, 0x67, 0x65, 0x74, 0x28, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x65, 0x74, 0x74, 0x20,
+ 0x3d, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72,
+ 0x6d, 0x28, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x67, 0x65, 0x74, 0x74, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x20,
+ 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x73, 0x69, 0x6e, 0x6b,
+ 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x74, 0x67, 0x65, 0x74, 0x28, 0x67, 0x65, 0x74, 0x74, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74,
+ 0x28, 0x74, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x28,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x6d, 0x64,
+ 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6d, 0x64, 0x74, 0x20,
+ 0x3d, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x28, 0x63,
+ 0x6d, 0x64, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x63, 0x6d, 0x64, 0x74,
+ 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x22, 0x6d, 0x69, 0x73, 0x73,
+ 0x69, 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
+ 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x22, 0x6d, 0x69, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+ 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x66, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70, 0x65, 0x6e,
+ 0x28, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20,
+ 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x63,
+ 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x67, 0x72, 0x65, 0x65, 0x74, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x6c, 0x6f, 0x67, 0x69,
+ 0x6e, 0x28, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2c,
+ 0x20, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x28, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x61, 0x6e, 0x64, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x63,
+ 0x6d, 0x64, 0x74, 0x2e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x65,
+ 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x68,
+ 0x65, 0x63, 0x6b, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c,
+ 0x63, 0x6d, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x70, 0x61, 0x69, 0x72,
+ 0x73, 0x28, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+ 0x64, 0x28, 0x63, 0x6d, 0x64, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x5b, 0x69, 0x5d, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x63, 0x68, 0x65, 0x63, 0x6b,
+ 0x5b, 0x69, 0x5d, 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x63, 0x6d,
+ 0x64, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2c, 0x20,
+ 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x68, 0x65, 0x63,
+ 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28,
+ 0x63, 0x6d, 0x64, 0x74, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x29, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x66, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x5f, 0x4d, 0x2e, 0x67, 0x65, 0x74, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x65, 0x63, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x67, 0x65, 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28,
+ 0x67, 0x65, 0x74, 0x74, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x67, 0x65, 0x74, 0x28, 0x67,
+ 0x65, 0x74, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x67, 0x65,
+ 0x74, 0x28, 0x67, 0x65, 0x74, 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua
index 41794baeef0..875bbf6d562 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua
@@ -3,9 +3,13 @@
-- LuaSocket toolkit.
-- Author: Diego Nehab
-----------------------------------------------------------------------------
-module("socket.headers")
+if not(socket) then
+ local socket = require("socket")
+end
+socket.headers = {}
+local _M = socket.headers
-canonic = {
+_M.canonic = {
["accept"] = "Accept",
["accept-charset"] = "Accept-Charset",
["accept-encoding"] = "Accept-Encoding",
@@ -33,6 +37,7 @@ canonic = {
["content-range"] = "Content-Range",
["content-transfer-encoding"] = "Content-Transfer-Encoding",
["content-type"] = "Content-Type",
+ ["cookie"] = "Cookie",
["date"] = "Date",
["diagnostic-code"] = "Diagnostic-Code",
["dsn-gateway"] = "DSN-Gateway",
@@ -97,3 +102,5 @@ canonic = {
["www-authenticate"] = "WWW-Authenticate",
["x-mailer"] = "X-Mailer",
}
+
+return _M \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/headers.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/headers_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/headers_lua.c
index 412f4064533..6121dd13204 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/headers_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/headers_lua.c
@@ -1,194 +1,301 @@
/*
- * This file is auto-generated by "lua2c headers.lua headers_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_headers_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 67, 97,110,111,110,105, 99, 32,104,101, 97,100,101,114, 32,102,105,101,108,
-100, 32, 99, 97,112,105,116, 97,108,105,122, 97,116,105,111,110, 10, 45, 45, 32,
- 76,117, 97, 83,111, 99,107,101,116, 32,116,111,111,108,107,105,116, 46, 10, 45,
- 45, 32, 65,117,116,104,111,114, 58, 32, 68,105,101,103,111, 32, 78,101,104, 97,
- 98, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,
-109,111,100,117,108,101, 40, 34,115,111, 99,107,101,116, 46,104,101, 97,100,101,
-114,115, 34, 41, 10, 10, 99, 97,110,111,110,105, 99, 32, 61, 32,123, 10, 32, 32,
- 32, 32, 91, 34, 97, 99, 99,101,112,116, 34, 93, 32, 61, 32, 34, 65, 99, 99,101,
-112,116, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97, 99, 99,101,112,116, 45, 99,104,
- 97,114,115,101,116, 34, 93, 32, 61, 32, 34, 65, 99, 99,101,112,116, 45, 67,104,
- 97,114,115,101,116, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97, 99, 99,101,112,116,
- 45,101,110, 99,111,100,105,110,103, 34, 93, 32, 61, 32, 34, 65, 99, 99,101,112,
-116, 45, 69,110, 99,111,100,105,110,103, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97,
- 99, 99,101,112,116, 45,108, 97,110,103,117, 97,103,101, 34, 93, 32, 61, 32, 34,
- 65, 99, 99,101,112,116, 45, 76, 97,110,103,117, 97,103,101, 34, 44, 10, 32, 32,
- 32, 32, 91, 34, 97, 99, 99,101,112,116, 45,114, 97,110,103,101,115, 34, 93, 32,
- 61, 32, 34, 65, 99, 99,101,112,116, 45, 82, 97,110,103,101,115, 34, 44, 10, 32,
- 32, 32, 32, 91, 34, 97, 99,116,105,111,110, 34, 93, 32, 61, 32, 34, 65, 99,116,
-105,111,110, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97,108,116,101,114,110, 97,116,
-101, 45,114,101, 99,105,112,105,101,110,116, 34, 93, 32, 61, 32, 34, 65,108,116,
-101,114,110, 97,116,101, 45, 82,101, 99,105,112,105,101,110,116, 34, 44, 10, 32,
- 32, 32, 32, 91, 34, 97,103,101, 34, 93, 32, 61, 32, 34, 65,103,101, 34, 44, 10,
- 32, 32, 32, 32, 91, 34, 97,108,108,111,119, 34, 93, 32, 61, 32, 34, 65,108,108,
-111,119, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97,114,114,105,118, 97,108, 45,100,
- 97,116,101, 34, 93, 32, 61, 32, 34, 65,114,114,105,118, 97,108, 45, 68, 97,116,
-101, 34, 44, 10, 32, 32, 32, 32, 91, 34, 97,117,116,104,111,114,105,122, 97,116,
-105,111,110, 34, 93, 32, 61, 32, 34, 65,117,116,104,111,114,105,122, 97,116,105,
-111,110, 34, 44, 10, 32, 32, 32, 32, 91, 34, 98, 99, 99, 34, 93, 32, 61, 32, 34,
- 66, 99, 99, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99, 97, 99,104,101, 45, 99,111,
-110,116,114,111,108, 34, 93, 32, 61, 32, 34, 67, 97, 99,104,101, 45, 67,111,110,
-116,114,111,108, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99, 99, 34, 93, 32, 61, 32,
- 34, 67, 99, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,109,109,101,110,116,115,
- 34, 93, 32, 61, 32, 34, 67,111,109,109,101,110,116,115, 34, 44, 10, 32, 32, 32,
- 32, 91, 34, 99,111,110,110,101, 99,116,105,111,110, 34, 93, 32, 61, 32, 34, 67,
-111,110,110,101, 99,116,105,111,110, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,
-110,116,101,110,116, 45,100,101,115, 99,114,105,112,116,105,111,110, 34, 93, 32,
- 61, 32, 34, 67,111,110,116,101,110,116, 45, 68,101,115, 99,114,105,112,116,105,
-111,110, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,100,
-105,115,112,111,115,105,116,105,111,110, 34, 93, 32, 61, 32, 34, 67,111,110,116,
-101,110,116, 45, 68,105,115,112,111,115,105,116,105,111,110, 34, 44, 10, 32, 32,
- 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,101,110, 99,111,100,105,110,103,
- 34, 93, 32, 61, 32, 34, 67,111,110,116,101,110,116, 45, 69,110, 99,111,100,105,
-110,103, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,105,
-100, 34, 93, 32, 61, 32, 34, 67,111,110,116,101,110,116, 45, 73, 68, 34, 44, 10,
- 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,108, 97,110,103,117, 97,
-103,101, 34, 93, 32, 61, 32, 34, 67,111,110,116,101,110,116, 45, 76, 97,110,103,
-117, 97,103,101, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116,
- 45,108,101,110,103,116,104, 34, 93, 32, 61, 32, 34, 67,111,110,116,101,110,116,
- 45, 76,101,110,103,116,104, 34, 44, 10, 32, 32, 32, 32, 91, 34, 99,111,110,116,
-101,110,116, 45,108,111, 99, 97,116,105,111,110, 34, 93, 32, 61, 32, 34, 67,111,
-110,116,101,110,116, 45, 76,111, 99, 97,116,105,111,110, 34, 44, 10, 32, 32, 32,
- 32, 91, 34, 99,111,110,116,101,110,116, 45,109,100, 53, 34, 93, 32, 61, 32, 34,
- 67,111,110,116,101,110,116, 45, 77, 68, 53, 34, 44, 10, 32, 32, 32, 32, 91, 34,
- 99,111,110,116,101,110,116, 45,114, 97,110,103,101, 34, 93, 32, 61, 32, 34, 67,
-111,110,116,101,110,116, 45, 82, 97,110,103,101, 34, 44, 10, 32, 32, 32, 32, 91,
- 34, 99,111,110,116,101,110,116, 45,116,114, 97,110,115,102,101,114, 45,101,110,
- 99,111,100,105,110,103, 34, 93, 32, 61, 32, 34, 67,111,110,116,101,110,116, 45,
- 84,114, 97,110,115,102,101,114, 45, 69,110, 99,111,100,105,110,103, 34, 44, 10,
- 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,116,121,112,101, 34, 93,
- 32, 61, 32, 34, 67,111,110,116,101,110,116, 45, 84,121,112,101, 34, 44, 10, 32,
- 32, 32, 32, 91, 34,100, 97,116,101, 34, 93, 32, 61, 32, 34, 68, 97,116,101, 34,
- 44, 10, 32, 32, 32, 32, 91, 34,100,105, 97,103,110,111,115,116,105, 99, 45, 99,
-111,100,101, 34, 93, 32, 61, 32, 34, 68,105, 97,103,110,111,115,116,105, 99, 45,
- 67,111,100,101, 34, 44, 10, 32, 32, 32, 32, 91, 34,100,115,110, 45,103, 97,116,
-101,119, 97,121, 34, 93, 32, 61, 32, 34, 68, 83, 78, 45, 71, 97,116,101,119, 97,
-121, 34, 44, 10, 32, 32, 32, 32, 91, 34,101,116, 97,103, 34, 93, 32, 61, 32, 34,
- 69, 84, 97,103, 34, 44, 10, 32, 32, 32, 32, 91, 34,101,120,112,101, 99,116, 34,
- 93, 32, 61, 32, 34, 69,120,112,101, 99,116, 34, 44, 10, 32, 32, 32, 32, 91, 34,
-101,120,112,105,114,101,115, 34, 93, 32, 61, 32, 34, 69,120,112,105,114,101,115,
- 34, 44, 10, 32, 32, 32, 32, 91, 34,102,105,110, 97,108, 45,108,111,103, 45,105,
-100, 34, 93, 32, 61, 32, 34, 70,105,110, 97,108, 45, 76,111,103, 45, 73, 68, 34,
- 44, 10, 32, 32, 32, 32, 91, 34,102,105,110, 97,108, 45,114,101, 99,105,112,105,
-101,110,116, 34, 93, 32, 61, 32, 34, 70,105,110, 97,108, 45, 82,101, 99,105,112,
-105,101,110,116, 34, 44, 10, 32, 32, 32, 32, 91, 34,102,114,111,109, 34, 93, 32,
- 61, 32, 34, 70,114,111,109, 34, 44, 10, 32, 32, 32, 32, 91, 34,104,111,115,116,
- 34, 93, 32, 61, 32, 34, 72,111,115,116, 34, 44, 10, 32, 32, 32, 32, 91, 34,105,
-102, 45,109, 97,116, 99,104, 34, 93, 32, 61, 32, 34, 73,102, 45, 77, 97,116, 99,
-104, 34, 44, 10, 32, 32, 32, 32, 91, 34,105,102, 45,109,111,100,105,102,105,101,
-100, 45,115,105,110, 99,101, 34, 93, 32, 61, 32, 34, 73,102, 45, 77,111,100,105,
-102,105,101,100, 45, 83,105,110, 99,101, 34, 44, 10, 32, 32, 32, 32, 91, 34,105,
-102, 45,110,111,110,101, 45,109, 97,116, 99,104, 34, 93, 32, 61, 32, 34, 73,102,
- 45, 78,111,110,101, 45, 77, 97,116, 99,104, 34, 44, 10, 32, 32, 32, 32, 91, 34,
-105,102, 45,114, 97,110,103,101, 34, 93, 32, 61, 32, 34, 73,102, 45, 82, 97,110,
-103,101, 34, 44, 10, 32, 32, 32, 32, 91, 34,105,102, 45,117,110,109,111,100,105,
-102,105,101,100, 45,115,105,110, 99,101, 34, 93, 32, 61, 32, 34, 73,102, 45, 85,
-110,109,111,100,105,102,105,101,100, 45, 83,105,110, 99,101, 34, 44, 10, 32, 32,
- 32, 32, 91, 34,105,110, 45,114,101,112,108,121, 45,116,111, 34, 93, 32, 61, 32,
- 34, 73,110, 45, 82,101,112,108,121, 45, 84,111, 34, 44, 10, 32, 32, 32, 32, 91,
- 34,107,101,121,119,111,114,100,115, 34, 93, 32, 61, 32, 34, 75,101,121,119,111,
-114,100,115, 34, 44, 10, 32, 32, 32, 32, 91, 34,108, 97,115,116, 45, 97,116,116,
-101,109,112,116, 45,100, 97,116,101, 34, 93, 32, 61, 32, 34, 76, 97,115,116, 45,
- 65,116,116,101,109,112,116, 45, 68, 97,116,101, 34, 44, 10, 32, 32, 32, 32, 91,
- 34,108, 97,115,116, 45,109,111,100,105,102,105,101,100, 34, 93, 32, 61, 32, 34,
- 76, 97,115,116, 45, 77,111,100,105,102,105,101,100, 34, 44, 10, 32, 32, 32, 32,
- 91, 34,108,111, 99, 97,116,105,111,110, 34, 93, 32, 61, 32, 34, 76,111, 99, 97,
-116,105,111,110, 34, 44, 10, 32, 32, 32, 32, 91, 34,109, 97,120, 45,102,111,114,
-119, 97,114,100,115, 34, 93, 32, 61, 32, 34, 77, 97,120, 45, 70,111,114,119, 97,
-114,100,115, 34, 44, 10, 32, 32, 32, 32, 91, 34,109,101,115,115, 97,103,101, 45,
-105,100, 34, 93, 32, 61, 32, 34, 77,101,115,115, 97,103,101, 45, 73, 68, 34, 44,
- 10, 32, 32, 32, 32, 91, 34,109,105,109,101, 45,118,101,114,115,105,111,110, 34,
- 93, 32, 61, 32, 34, 77, 73, 77, 69, 45, 86,101,114,115,105,111,110, 34, 44, 10,
- 32, 32, 32, 32, 91, 34,111,114,105,103,105,110, 97,108, 45,101,110,118,101,108,
-111,112,101, 45,105,100, 34, 93, 32, 61, 32, 34, 79,114,105,103,105,110, 97,108,
- 45, 69,110,118,101,108,111,112,101, 45, 73, 68, 34, 44, 10, 32, 32, 32, 32, 91,
- 34,111,114,105,103,105,110, 97,108, 45,114,101, 99,105,112,105,101,110,116, 34,
- 93, 32, 61, 32, 34, 79,114,105,103,105,110, 97,108, 45, 82,101, 99,105,112,105,
-101,110,116, 34, 44, 10, 32, 32, 32, 32, 91, 34,112,114, 97,103,109, 97, 34, 93,
- 32, 61, 32, 34, 80,114, 97,103,109, 97, 34, 44, 10, 32, 32, 32, 32, 91, 34,112,
-114,111,120,121, 45, 97,117,116,104,101,110,116,105, 99, 97,116,101, 34, 93, 32,
- 61, 32, 34, 80,114,111,120,121, 45, 65,117,116,104,101,110,116,105, 99, 97,116,
-101, 34, 44, 10, 32, 32, 32, 32, 91, 34,112,114,111,120,121, 45, 97,117,116,104,
-111,114,105,122, 97,116,105,111,110, 34, 93, 32, 61, 32, 34, 80,114,111,120,121,
- 45, 65,117,116,104,111,114,105,122, 97,116,105,111,110, 34, 44, 10, 32, 32, 32,
- 32, 91, 34,114, 97,110,103,101, 34, 93, 32, 61, 32, 34, 82, 97,110,103,101, 34,
- 44, 10, 32, 32, 32, 32, 91, 34,114,101, 99,101,105,118,101,100, 34, 93, 32, 61,
- 32, 34, 82,101, 99,101,105,118,101,100, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,
-101, 99,101,105,118,101,100, 45,102,114,111,109, 45,109,116, 97, 34, 93, 32, 61,
- 32, 34, 82,101, 99,101,105,118,101,100, 45, 70,114,111,109, 45, 77, 84, 65, 34,
- 44, 10, 32, 32, 32, 32, 91, 34,114,101,102,101,114,101,110, 99,101,115, 34, 93,
- 32, 61, 32, 34, 82,101,102,101,114,101,110, 99,101,115, 34, 44, 10, 32, 32, 32,
- 32, 91, 34,114,101,102,101,114,101,114, 34, 93, 32, 61, 32, 34, 82,101,102,101,
-114,101,114, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,109,111,116,101, 45,109,
-116, 97, 34, 93, 32, 61, 32, 34, 82,101,109,111,116,101, 45, 77, 84, 65, 34, 44,
- 10, 32, 32, 32, 32, 91, 34,114,101,112,108,121, 45,116,111, 34, 93, 32, 61, 32,
- 34, 82,101,112,108,121, 45, 84,111, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,
-112,111,114,116,105,110,103, 45,109,116, 97, 34, 93, 32, 61, 32, 34, 82,101,112,
-111,114,116,105,110,103, 45, 77, 84, 65, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,
-101,115,101,110,116, 45, 98, 99, 99, 34, 93, 32, 61, 32, 34, 82,101,115,101,110,
-116, 45, 66, 99, 99, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,115,101,110,116,
- 45, 99, 99, 34, 93, 32, 61, 32, 34, 82,101,115,101,110,116, 45, 67, 99, 34, 44,
- 10, 32, 32, 32, 32, 91, 34,114,101,115,101,110,116, 45,100, 97,116,101, 34, 93,
- 32, 61, 32, 34, 82,101,115,101,110,116, 45, 68, 97,116,101, 34, 44, 10, 32, 32,
- 32, 32, 91, 34,114,101,115,101,110,116, 45,102,114,111,109, 34, 93, 32, 61, 32,
- 34, 82,101,115,101,110,116, 45, 70,114,111,109, 34, 44, 10, 32, 32, 32, 32, 91,
- 34,114,101,115,101,110,116, 45,109,101,115,115, 97,103,101, 45,105,100, 34, 93,
- 32, 61, 32, 34, 82,101,115,101,110,116, 45, 77,101,115,115, 97,103,101, 45, 73,
- 68, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,115,101,110,116, 45,114,101,112,
-108,121, 45,116,111, 34, 93, 32, 61, 32, 34, 82,101,115,101,110,116, 45, 82,101,
-112,108,121, 45, 84,111, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,115,101,110,
-116, 45,115,101,110,100,101,114, 34, 93, 32, 61, 32, 34, 82,101,115,101,110,116,
- 45, 83,101,110,100,101,114, 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,115,101,
-110,116, 45,116,111, 34, 93, 32, 61, 32, 34, 82,101,115,101,110,116, 45, 84,111,
- 34, 44, 10, 32, 32, 32, 32, 91, 34,114,101,116,114,121, 45, 97,102,116,101,114,
- 34, 93, 32, 61, 32, 34, 82,101,116,114,121, 45, 65,102,116,101,114, 34, 44, 10,
- 32, 32, 32, 32, 91, 34,114,101,116,117,114,110, 45,112, 97,116,104, 34, 93, 32,
- 61, 32, 34, 82,101,116,117,114,110, 45, 80, 97,116,104, 34, 44, 10, 32, 32, 32,
- 32, 91, 34,115,101,110,100,101,114, 34, 93, 32, 61, 32, 34, 83,101,110,100,101,
-114, 34, 44, 10, 32, 32, 32, 32, 91, 34,115,101,114,118,101,114, 34, 93, 32, 61,
- 32, 34, 83,101,114,118,101,114, 34, 44, 10, 32, 32, 32, 32, 91, 34,115,109,116,
-112, 45,114,101,109,111,116,101, 45,114,101, 99,105,112,105,101,110,116, 34, 93,
- 32, 61, 32, 34, 83, 77, 84, 80, 45, 82,101,109,111,116,101, 45, 82,101, 99,105,
-112,105,101,110,116, 34, 44, 10, 32, 32, 32, 32, 91, 34,115,116, 97,116,117,115,
- 34, 93, 32, 61, 32, 34, 83,116, 97,116,117,115, 34, 44, 10, 32, 32, 32, 32, 91,
- 34,115,117, 98,106,101, 99,116, 34, 93, 32, 61, 32, 34, 83,117, 98,106,101, 99,
-116, 34, 44, 10, 32, 32, 32, 32, 91, 34,116,101, 34, 93, 32, 61, 32, 34, 84, 69,
- 34, 44, 10, 32, 32, 32, 32, 91, 34,116,111, 34, 93, 32, 61, 32, 34, 84,111, 34,
- 44, 10, 32, 32, 32, 32, 91, 34,116,114, 97,105,108,101,114, 34, 93, 32, 61, 32,
- 34, 84,114, 97,105,108,101,114, 34, 44, 10, 32, 32, 32, 32, 91, 34,116,114, 97,
-110,115,102,101,114, 45,101,110, 99,111,100,105,110,103, 34, 93, 32, 61, 32, 34,
- 84,114, 97,110,115,102,101,114, 45, 69,110, 99,111,100,105,110,103, 34, 44, 10,
- 32, 32, 32, 32, 91, 34,117,112,103,114, 97,100,101, 34, 93, 32, 61, 32, 34, 85,
-112,103,114, 97,100,101, 34, 44, 10, 32, 32, 32, 32, 91, 34,117,115,101,114, 45,
- 97,103,101,110,116, 34, 93, 32, 61, 32, 34, 85,115,101,114, 45, 65,103,101,110,
-116, 34, 44, 10, 32, 32, 32, 32, 91, 34,118, 97,114,121, 34, 93, 32, 61, 32, 34,
- 86, 97,114,121, 34, 44, 10, 32, 32, 32, 32, 91, 34,118,105, 97, 34, 93, 32, 61,
- 32, 34, 86,105, 97, 34, 44, 10, 32, 32, 32, 32, 91, 34,119, 97,114,110,105,110,
-103, 34, 93, 32, 61, 32, 34, 87, 97,114,110,105,110,103, 34, 44, 10, 32, 32, 32,
- 32, 91, 34,119,105,108,108, 45,114,101,116,114,121, 45,117,110,116,105,108, 34,
- 93, 32, 61, 32, 34, 87,105,108,108, 45, 82,101,116,114,121, 45, 85,110,116,105,
-108, 34, 44, 10, 32, 32, 32, 32, 91, 34,119,119,119, 45, 97,117,116,104,101,110,
-116,105, 99, 97,116,101, 34, 93, 32, 61, 32, 34, 87, 87, 87, 45, 65,117,116,104,
-101,110,116,105, 99, 97,116,101, 34, 44, 10, 32, 32, 32, 32, 91, 34,120, 45,109,
- 97,105,108,101,114, 34, 93, 32, 61, 32, 34, 88, 45, 77, 97,105,108,101,114, 34,
- 44, 10,125, 10,
- 0 };
+ 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x0a, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d,
+ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x20, 0x3d, 0x20, 0x7b, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74,
+ 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x63, 0x63,
+ 0x65, 0x70, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d,
+ 0x43, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x63,
+ 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x63,
+ 0x63, 0x65, 0x70, 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d,
+ 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x65, 0x2d, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e,
+ 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x6c, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x74, 0x65, 0x2d, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65,
+ 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61,
+ 0x67, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x67, 0x65, 0x22,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x61, 0x72, 0x72,
+ 0x69, 0x76, 0x61, 0x6c, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x41, 0x72, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x2d, 0x44,
+ 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x62, 0x63, 0x63, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x42, 0x63, 0x63, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x72, 0x6f, 0x6c, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x61, 0x63,
+ 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x63, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x43, 0x63, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x5d,
+ 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e,
+ 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x2d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x64, 0x69, 0x73,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x44, 0x69,
+ 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x5d,
+ 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
+ 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x69, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x49, 0x44, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
+ 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4d, 0x44,
+ 0x35, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74,
+ 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66,
+ 0x65, 0x72, 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79,
+ 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63,
+ 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x43,
+ 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x64, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x44, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2d,
+ 0x63, 0x6f, 0x64, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x44, 0x69,
+ 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2d, 0x43, 0x6f, 0x64,
+ 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x64, 0x73,
+ 0x6e, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x44, 0x53, 0x4e, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77,
+ 0x61, 0x79, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x65,
+ 0x74, 0x61, 0x67, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x45, 0x54, 0x61,
+ 0x67, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x65, 0x78,
+ 0x70, 0x65, 0x63, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x45, 0x78,
+ 0x70, 0x65, 0x63, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x6c, 0x6f, 0x67, 0x2d, 0x69, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x4c, 0x6f, 0x67, 0x2d, 0x49, 0x44,
+ 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x66, 0x69, 0x6e,
+ 0x61, 0x6c, 0x2d, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0x5d,
+ 0x20, 0x3d, 0x20, 0x22, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x48, 0x6f, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x69, 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x49, 0x66, 0x2d, 0x4d, 0x61, 0x74,
+ 0x63, 0x68, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x69,
+ 0x66, 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73,
+ 0x69, 0x6e, 0x63, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x49, 0x66,
+ 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x53, 0x69,
+ 0x6e, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x49, 0x66, 0x2d, 0x4e, 0x6f,
+ 0x6e, 0x65, 0x2d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67,
+ 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x49, 0x66, 0x2d, 0x52, 0x61,
+ 0x6e, 0x67, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x69, 0x66, 0x2d, 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
+ 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x49, 0x66, 0x2d, 0x55, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
+ 0x65, 0x64, 0x2d, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x69, 0x6e, 0x2d, 0x72, 0x65, 0x70, 0x6c,
+ 0x79, 0x2d, 0x74, 0x6f, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x49, 0x6e,
+ 0x2d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2d, 0x54, 0x6f, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+ 0x64, 0x73, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4b, 0x65, 0x79, 0x77,
+ 0x6f, 0x72, 0x64, 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70,
+ 0x74, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x4c, 0x61, 0x73, 0x74, 0x2d, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74,
+ 0x2d, 0x44, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4c, 0x61, 0x73,
+ 0x74, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x6c, 0x6f, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4c, 0x6f, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72,
+ 0x64, 0x73, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4d, 0x61, 0x78, 0x2d,
+ 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x2d, 0x69, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x2d, 0x49, 0x44, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2d, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4d, 0x49,
+ 0x4d, 0x45, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x6f, 0x72, 0x69, 0x67, 0x69,
+ 0x6e, 0x61, 0x6c, 0x2d, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65,
+ 0x2d, 0x69, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x4f, 0x72, 0x69,
+ 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f,
+ 0x70, 0x65, 0x2d, 0x49, 0x44, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x72,
+ 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x2d, 0x52,
+ 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x50, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x22,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x70, 0x72, 0x6f, 0x78,
+ 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
+ 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x50, 0x72, 0x6f, 0x78,
+ 0x79, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
+ 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x50, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x22, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
+ 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x64, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x2d, 0x66, 0x72, 0x6f,
+ 0x6d, 0x2d, 0x6d, 0x74, 0x61, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x2d, 0x46, 0x72, 0x6f, 0x6d,
+ 0x2d, 0x4d, 0x54, 0x41, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d,
+ 0x6d, 0x74, 0x61, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x6d,
+ 0x6f, 0x74, 0x65, 0x2d, 0x4d, 0x54, 0x41, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x2d, 0x74, 0x6f,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2d,
+ 0x54, 0x6f, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x72,
+ 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x74, 0x61,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
+ 0x69, 0x6e, 0x67, 0x2d, 0x4d, 0x54, 0x41, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x62,
+ 0x63, 0x63, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x2d, 0x42, 0x63, 0x63, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x63, 0x63,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x2d, 0x43, 0x63, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d,
+ 0x44, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b,
+ 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x66, 0x72, 0x6f, 0x6d,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x2d, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x4d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x2d, 0x49, 0x44, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x72, 0x65,
+ 0x70, 0x6c, 0x79, 0x2d, 0x74, 0x6f, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x52, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x52, 0x65, 0x70, 0x6c, 0x79,
+ 0x2d, 0x54, 0x6f, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x6e, 0x64, 0x65,
+ 0x72, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x2d, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2d,
+ 0x74, 0x6f, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x2d, 0x54, 0x6f, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x72, 0x65, 0x74, 0x72, 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65,
+ 0x72, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x2d, 0x41, 0x66, 0x74, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x2d, 0x70, 0x61,
+ 0x74, 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x52, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x2d, 0x50, 0x61, 0x74, 0x68, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x5d,
+ 0x20, 0x3d, 0x20, 0x22, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x73, 0x6d,
+ 0x74, 0x70, 0x2d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x72, 0x65,
+ 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x53, 0x4d, 0x54, 0x50, 0x2d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65,
+ 0x2d, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x73, 0x75,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x53,
+ 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x54,
+ 0x45, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x74, 0x6f,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x54, 0x6f, 0x22, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x65,
+ 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x75,
+ 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65,
+ 0x6e, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x55, 0x73, 0x65, 0x72,
+ 0x2d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x76, 0x61, 0x72, 0x79, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x56, 0x61, 0x72, 0x79, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x76, 0x69, 0x61, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x56,
+ 0x69, 0x61, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x77,
+ 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x77, 0x69, 0x6c, 0x6c, 0x2d, 0x72, 0x65, 0x74,
+ 0x72, 0x79, 0x2d, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0x5d, 0x20, 0x3d,
+ 0x20, 0x22, 0x57, 0x69, 0x6c, 0x6c, 0x2d, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x2d, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x5b, 0x22, 0x77, 0x77, 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65,
+ 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x22, 0x57, 0x57, 0x57, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
+ 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x5b, 0x22, 0x78, 0x2d, 0x6d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x22, 0x5d,
+ 0x20, 0x3d, 0x20, 0x22, 0x58, 0x2d, 0x4d, 0x61, 0x69, 0x6c, 0x65, 0x72,
+ 0x22, 0x2c, 0x0a, 0x7d, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x5f, 0x4d,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua
index 4c7e7d80e30..ac7b2c0ffa7 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua
@@ -7,25 +7,30 @@
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-------------------------------------------------------------------------------
-local socket = require("socket")
-local url = require("socket.url")
-local ltn12 = require("ltn12")
-local mime = require("mime")
+local socket = socket or require("socket")
+local url = socket.url or require("socket.url")
+local ltn12 = ltn12 or require("ltn12")
+local mime = mime or require("mime")
local string = require("string")
-local headers = require("socket.headers")
+local headers = socket.headers or require("socket.headers")
local base = _G
local table = require("table")
+socket.http = {}
+local _M = socket.http
module("socket.http")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- connection timeout in seconds
-TIMEOUT = 60
--- default port for document retrieval
-PORT = 80
+_M.TIMEOUT = 60
-- user agent field sent in request
-USERAGENT = socket._VERSION
+_M.USERAGENT = socket._VERSION
+
+-- supported schemes
+local SCHEMES = { ["http"] = true }
+-- default port for document retrieval
+local PORT = 80
-----------------------------------------------------------------------------
-- Reads MIME headers from a connection, unfolding where needed
@@ -105,14 +110,14 @@ end
-----------------------------------------------------------------------------
local metat = { __index = {} }
-function open(host, port, create)
+function _M.open(host, port, create)
-- create socket with user connect function, or with default
local c = socket.try((create or socket.tcp)())
local h = base.setmetatable({ c = c }, metat)
-- create finalized try
h.try = socket.newtry(function() h:close() end)
-- set timeout before connecting
- h.try(c:settimeout(TIMEOUT))
+ h.try(c:settimeout(_M.TIMEOUT))
h.try(c:connect(host, port or PORT))
-- here everything worked
return h
@@ -185,7 +190,7 @@ end
local function adjusturi(reqt)
local u = reqt
-- if there is a proxy, we need the full url. otherwise, just a part.
- if not reqt.proxy and not PROXY then
+ if not reqt.proxy and not _M.PROXY then
u = {
path = socket.try(reqt.path, "invalid path 'nil'"),
params = reqt.params,
@@ -197,7 +202,7 @@ local function adjusturi(reqt)
end
local function adjustproxy(reqt)
- local proxy = reqt.proxy or PROXY
+ local proxy = reqt.proxy or _M.PROXY
if proxy then
proxy = url.parse(proxy)
return proxy.host, proxy.port or 3128
@@ -208,16 +213,27 @@ end
local function adjustheaders(reqt)
-- default headers
+ local host = string.gsub(reqt.authority, "^.-@", "")
local lower = {
- ["user-agent"] = USERAGENT,
- ["host"] = reqt.host,
+ ["user-agent"] = _M.USERAGENT,
+ ["host"] = host,
["connection"] = "close, TE",
["te"] = "trailers"
}
-- if we have authentication information, pass it along
if reqt.user and reqt.password then
- lower["authorization"] =
- "Basic " .. (mime.b64(reqt.user .. ":" .. reqt.password))
+ lower["authorization"] =
+ "Basic " .. (mime.b64(reqt.user .. ":" ..
+ url.unescape(reqt.password)))
+ end
+ -- if we have proxy authentication information, pass it along
+ local proxy = reqt.proxy or _M.PROXY
+ if proxy then
+ proxy = url.parse(proxy)
+ if proxy.user and proxy.password then
+ lower["proxy-authorization"] =
+ "Basic " .. (mime.b64(proxy.user .. ":" .. proxy.password))
+ end
end
-- override with user headers
for i,v in base.pairs(reqt.headers or lower) do
@@ -239,22 +255,27 @@ local function adjustrequest(reqt)
local nreqt = reqt.url and url.parse(reqt.url, default) or {}
-- explicit components override url
for i,v in base.pairs(reqt) do nreqt[i] = v end
- if nreqt.port == "" then nreqt.port = 80 end
- socket.try(nreqt.host and nreqt.host ~= "",
- "invalid host '" .. base.tostring(nreqt.host) .. "'")
+ if nreqt.port == "" then nreqt.port = PORT end
+ if not (nreqt.host and nreqt.host ~= "") then
+ socket.try(nil, "invalid host '" .. base.tostring(nreqt.host) .. "'")
+ end
-- compute uri if user hasn't overriden
nreqt.uri = reqt.uri or adjusturi(nreqt)
- -- ajust host and port if there is a proxy
- nreqt.host, nreqt.port = adjustproxy(nreqt)
-- adjust headers in request
nreqt.headers = adjustheaders(nreqt)
+ -- ajust host and port if there is a proxy
+ nreqt.host, nreqt.port = adjustproxy(nreqt)
return nreqt
end
local function shouldredirect(reqt, code, headers)
- return headers.location and
- string.gsub(headers.location, "%s", "") ~= "" and
- (reqt.redirect ~= false) and
+ local location = headers.location
+ if not location then return false end
+ location = string.gsub(location, "%s", "")
+ if location == "" then return false end
+ local scheme = string.match(location, "^([%w][%w%+%-%.]*)%:")
+ if scheme and not SCHEMES[scheme] then return false end
+ return (reqt.redirect ~= false) and
(code == 301 or code == 302 or code == 303 or code == 307) and
(not reqt.method or reqt.method == "GET" or reqt.method == "HEAD")
and (not reqt.nredirects or reqt.nredirects < 5)
@@ -270,7 +291,7 @@ end
-- forward declarations
local trequest, tredirect
-function tredirect(reqt, location)
+--[[local]] function tredirect(reqt, location)
local result, code, headers, status = trequest {
-- the RFC says the redirect URL has to be absolute, but some
-- servers do not respect that
@@ -278,27 +299,27 @@ function tredirect(reqt, location)
source = reqt.source,
sink = reqt.sink,
headers = reqt.headers,
- proxy = reqt.proxy,
+ proxy = reqt.proxy,
nredirects = (reqt.nredirects or 0) + 1,
create = reqt.create
- }
+ }
-- pass location header back as a hint we redirected
headers = headers or {}
headers.location = headers.location or location
return result, code, headers, status
end
-function trequest(reqt)
+--[[local]] function trequest(reqt)
-- we loop until we get what we want, or
-- until we are sure there is no way to get it
local nreqt = adjustrequest(reqt)
- local h = open(nreqt.host, nreqt.port, nreqt.create)
+ local h = _M.open(nreqt.host, nreqt.port, nreqt.create)
-- send request line and headers
h:sendrequestline(nreqt.method, nreqt.uri)
h:sendheaders(nreqt.headers)
-- if there is a body, send it
if nreqt.source then
- h:sendbody(nreqt.headers, nreqt.source, nreqt.step)
+ h:sendbody(nreqt.headers, nreqt.source, nreqt.step)
end
local code, status = h:receivestatusline()
-- if it is an HTTP/0.9 server, simply get the body and we are done
@@ -308,13 +329,13 @@ function trequest(reqt)
end
local headers
-- ignore any 100-continue messages
- while code == 100 do
+ while code == 100 do
headers = h:receiveheaders()
code, status = h:receivestatusline()
end
headers = h:receiveheaders()
-- at this point we should have a honest reply from the server
- -- we can't redirect if we already used the source, so we report the error
+ -- we can't redirect if we already used the source, so we report the error
if shouldredirect(nreqt, code, headers) and not nreqt.source then
h:close()
return tredirect(reqt, headers.location)
@@ -327,11 +348,13 @@ function trequest(reqt)
return 1, code, headers, status
end
-local function srequest(u, b)
+-- turns an url and a body into a generic request
+local function genericform(u, b)
local t = {}
local reqt = {
url = u,
- sink = ltn12.sink.table(t)
+ sink = ltn12.sink.table(t),
+ target = t
}
if b then
reqt.source = ltn12.source.string(b)
@@ -341,11 +364,21 @@ local function srequest(u, b)
}
reqt.method = "POST"
end
- local code, headers, status = socket.skip(1, trequest(reqt))
- return table.concat(t), code, headers, status
+ return reqt
end
-request = socket.protect(function(reqt, body)
+_M.genericform = genericform
+
+local function srequest(u, b)
+ local reqt = genericform(u, b)
+ local _, code, headers, status = trequest(reqt)
+ return table.concat(reqt.target), code, headers, status
+end
+
+_M.request = socket.protect(function(reqt, body)
if base.type(reqt) == "string" then return srequest(reqt, body)
else return trequest(reqt) end
end)
+
+socket.http = _M
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/http.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/http_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/http_lua.c
index 1fd892e6f6c..55a791e1716 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/http_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/http_lua.c
@@ -1,626 +1,823 @@
/*
- * This file is auto-generated by "lua2c http.lua http_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_http_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 72, 84, 84, 80, 47, 49, 46, 49, 32, 99,108,105,101,110,116, 32,115,117,112,
-112,111,114,116, 32,102,111,114, 32,116,104,101, 32, 76,117, 97, 32,108, 97,110,
-103,117, 97,103,101, 46, 10, 45, 45, 32, 76,117, 97, 83,111, 99,107,101,116, 32,
-116,111,111,108,107,105,116, 46, 10, 45, 45, 32, 65,117,116,104,111,114, 58, 32,
- 68,105,101,103,111, 32, 78,101,104, 97, 98, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101, 32,
-109,111,100,117,108,101, 32, 97,110,100, 32,105,109,112,111,114,116, 32,100,101,
-112,101,110,100,101,110, 99,105,101,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,115,111, 99,
-107,101,116, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,111, 99,107,101,
-116, 34, 41, 10,108,111, 99, 97,108, 32,117,114,108, 32, 61, 32,114,101,113,117,
-105,114,101, 40, 34,115,111, 99,107,101,116, 46,117,114,108, 34, 41, 10,108,111,
- 99, 97,108, 32,108,116,110, 49, 50, 32, 61, 32,114,101,113,117,105,114,101, 40,
- 34,108,116,110, 49, 50, 34, 41, 10,108,111, 99, 97,108, 32,109,105,109,101, 32,
- 61, 32,114,101,113,117,105,114,101, 40, 34,109,105,109,101, 34, 41, 10,108,111,
- 99, 97,108, 32,115,116,114,105,110,103, 32, 61, 32,114,101,113,117,105,114,101,
- 40, 34,115,116,114,105,110,103, 34, 41, 10,108,111, 99, 97,108, 32,104,101, 97,
-100,101,114,115, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,111, 99,107,
-101,116, 46,104,101, 97,100,101,114,115, 34, 41, 10,108,111, 99, 97,108, 32, 98,
- 97,115,101, 32, 61, 32, 95, 71, 10,108,111, 99, 97,108, 32,116, 97, 98,108,101,
- 32, 61, 32,114,101,113,117,105,114,101, 40, 34,116, 97, 98,108,101, 34, 41, 10,
-109,111,100,117,108,101, 40, 34,115,111, 99,107,101,116, 46,104,116,116,112, 34,
- 41, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 10, 45, 45, 32, 80,114,111,103,114, 97,109, 32, 99,111,110,115,116, 97,110,116,
-115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,
- 45, 45, 32, 99,111,110,110,101, 99,116,105,111,110, 32,116,105,109,101,111,117,
-116, 32,105,110, 32,115,101, 99,111,110,100,115, 10, 84, 73, 77, 69, 79, 85, 84,
- 32, 61, 32, 54, 48, 10, 45, 45, 32,100,101,102, 97,117,108,116, 32,112,111,114,
-116, 32,102,111,114, 32,100,111, 99,117,109,101,110,116, 32,114,101,116,114,105,
-101,118, 97,108, 10, 80, 79, 82, 84, 32, 61, 32, 56, 48, 10, 45, 45, 32,117,115,
-101,114, 32, 97,103,101,110,116, 32,102,105,101,108,100, 32,115,101,110,116, 32,
-105,110, 32,114,101,113,117,101,115,116, 10, 85, 83, 69, 82, 65, 71, 69, 78, 84,
- 32, 61, 32,115,111, 99,107,101,116, 46, 95, 86, 69, 82, 83, 73, 79, 78, 10, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 82,101, 97,100,115, 32, 77, 73, 77, 69, 32,104,101, 97,100,101,114,115, 32,
-102,114,111,109, 32, 97, 32, 99,111,110,110,101, 99,116,105,111,110, 44, 32,117,
-110,102,111,108,100,105,110,103, 32,119,104,101,114,101, 32,110,101,101,100,101,
-100, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,
-108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,114,101, 99,101,105,
-118,101,104,101, 97,100,101,114,115, 40,115,111, 99,107, 44, 32,104,101, 97,100,
-101,114,115, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,108,105,110,101, 44,
- 32,110, 97,109,101, 44, 32,118, 97,108,117,101, 44, 32,101,114,114, 10, 32, 32,
- 32, 32,104,101, 97,100,101,114,115, 32, 61, 32,104,101, 97,100,101,114,115, 32,
-111,114, 32,123,125, 10, 32, 32, 32, 32, 45, 45, 32,103,101,116, 32,102,105,114,
-115,116, 32,108,105,110,101, 10, 32, 32, 32, 32,108,105,110,101, 44, 32,101,114,
-114, 32, 61, 32,115,111, 99,107, 58,114,101, 99,101,105,118,101, 40, 41, 10, 32,
- 32, 32, 32,105,102, 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,114,
-110, 32,110,105,108, 44, 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32, 45,
- 45, 32,104,101, 97,100,101,114,115, 32,103,111, 32,117,110,116,105,108, 32, 97,
- 32, 98,108, 97,110,107, 32,108,105,110,101, 32,105,115, 32,102,111,117,110,100,
- 10, 32, 32, 32, 32,119,104,105,108,101, 32,108,105,110,101, 32,126, 61, 32, 34,
- 34, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32,103,101,116, 32,
-102,105,101,108,100, 45,110, 97,109,101, 32, 97,110,100, 32,118, 97,108,117,101,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,110, 97,109,101, 44, 32,118, 97,108,117,101,
- 32, 61, 32,115,111, 99,107,101,116, 46,115,107,105,112, 40, 50, 44, 32,115,116,
-114,105,110,103, 46,102,105,110,100, 40,108,105,110,101, 44, 32, 34, 94, 40, 46,
- 45, 41, 58, 37,115, 42, 40, 46, 42, 41, 34, 41, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,110,111,116, 32, 40,110, 97,109,101, 32, 97,110,100, 32,118,
- 97,108,117,101, 41, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,
-108, 44, 32, 34,109, 97,108,102,111,114,109,101,100, 32,114,101,112,111,110,115,
-101, 32,104,101, 97,100,101,114,115, 34, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,110, 97,109,101, 32, 61, 32,115,116,114,105,110,103, 46,108,111,119,
-101,114, 40,110, 97,109,101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32,
-103,101,116, 32,110,101,120,116, 32,108,105,110,101, 32, 40,118, 97,108,117,101,
- 32,109,105,103,104,116, 32, 98,101, 32,102,111,108,100,101,100, 41, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,108,105,110,101, 44, 32,101,114,114, 32, 32, 61, 32,115,
-111, 99,107, 58,114,101, 99,101,105,118,101, 40, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,114,110,
- 32,110,105,108, 44, 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32,
- 32, 32, 45, 45, 32,117,110,102,111,108,100, 32, 97,110,121, 32,102,111,108,100,
-101,100, 32,118, 97,108,117,101,115, 10, 32, 32, 32, 32, 32, 32, 32, 32,119,104,
-105,108,101, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,108,105,110,101,
- 44, 32, 34, 94, 37,115, 34, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,118, 97,108,117,101, 32, 61, 32,118, 97,108,117,101, 32, 46, 46,
- 32,108,105,110,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,105,
-110,101, 32, 61, 32,115,111, 99,107, 58,114,101, 99,101,105,118,101, 40, 41, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,101,114,114, 32,116,
-104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,114, 32,
-101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 45, 45, 32,115, 97,118,101, 32,112, 97,105,114, 32,105,110, 32,
-116, 97, 98,108,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,104,101, 97,
-100,101,114,115, 91,110, 97,109,101, 93, 32,116,104,101,110, 32,104,101, 97,100,
-101,114,115, 91,110, 97,109,101, 93, 32, 61, 32,104,101, 97,100,101,114,115, 91,
-110, 97,109,101, 93, 32, 46, 46, 32, 34, 44, 32, 34, 32, 46, 46, 32,118, 97,108,
-117,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,104,101, 97,100,
-101,114,115, 91,110, 97,109,101, 93, 32, 61, 32,118, 97,108,117,101, 32,101,110,
-100, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110,
- 32,104,101, 97,100,101,114,115, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 69,120,116,114, 97,
- 32,115,111,117,114, 99,101,115, 32, 97,110,100, 32,115,105,110,107,115, 10, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,115,111, 99,
-107,101,116, 46,115,111,117,114, 99,101,116, 91, 34,104,116,116,112, 45, 99,104,
-117,110,107,101,100, 34, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40,115,
-111, 99,107, 44, 32,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32,114,101,
-116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,116, 97, 98,
-108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,103,101,116,102,100, 32, 61,
- 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,
-111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,110,100, 44, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,102,117,110, 99,116,105,111,
-110, 40, 41, 32,114,101,116,117,114,110, 32,115,111, 99,107, 58,100,105,114,116,
-121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125, 44, 32,123, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61, 32,102,117,110, 99,116,105,
-111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32,
-103,101,116, 32, 99,104,117,110,107, 32,115,105,122,101, 44, 32,115,107,105,112,
- 32,101,120,116,101,110,116,105,111,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,108,105,110,101, 44, 32,101,114,114, 32, 61,
- 32,115,111, 99,107, 58,114,101, 99,101,105,118,101, 40, 41, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,101,114,114, 32,116,104,101,110, 32,
-114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,114, 32,101,110,100, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,105,
-122,101, 32, 61, 32, 98, 97,115,101, 46,116,111,110,117,109, 98,101,114, 40,115,
-116,114,105,110,103, 46,103,115,117, 98, 40,108,105,110,101, 44, 32, 34, 59, 46,
- 42, 34, 44, 32, 34, 34, 41, 44, 32, 49, 54, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,115,105,122,101, 32,116,104,101,
-110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32, 34,105,110,118, 97,108,
-105,100, 32, 99,104,117,110,107, 32,115,105,122,101, 34, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32,119, 97,115, 32,105,116,
- 32,116,104,101, 32,108, 97,115,116, 32, 99,104,117,110,107, 63, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,115,105,122,101, 32, 62, 32, 48,
- 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 45, 45, 32,105,102, 32,110,111,116, 44, 32,103,101,116, 32, 99,104,117,
-110,107, 32, 97,110,100, 32,115,107,105,112, 32,116,101,114,109,105,110, 97,116,
-105,110,103, 32, 67, 82, 76, 70, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,
-114, 44, 32,112, 97,114,116, 32, 61, 32,115,111, 99,107, 58,114,101, 99,101,105,
-118,101, 40,115,105,122,101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32,116,104,101,110, 32,115,
-111, 99,107, 58,114,101, 99,101,105,118,101, 40, 41, 32,101,110,100, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110,
- 32, 99,104,117,110,107, 44, 32,101,114,114, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 45, 45, 32,105,102, 32,105,116, 32,119, 97,115, 44, 32,114,
-101, 97,100, 32,116,114, 97,105,108,101,114,115, 32,105,110,116,111, 32,104,101,
- 97,100,101,114,115, 32,116, 97, 98,108,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,104,101, 97,100,101,114,115, 44, 32,101,114,114,
- 32, 61, 32,114,101, 99,101,105,118,101,104,101, 97,100,101,114,115, 40,115,111,
- 99,107, 44, 32,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,104,101, 97,100,
-101,114,115, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44,
- 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32,
- 32,125, 41, 10,101,110,100, 10, 10,115,111, 99,107,101,116, 46,115,105,110,107,
-116, 91, 34,104,116,116,112, 45, 99,104,117,110,107,101,100, 34, 93, 32, 61, 32,
-102,117,110, 99,116,105,111,110, 40,115,111, 99,107, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,116, 97,
- 98,108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,103,101,116,102,100, 32,
- 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,
-115,111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,110,100, 44, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,102,117,110, 99,116,105,
-111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,111, 99,107, 58,100,105,114,
-116,121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125, 44, 32,123, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61, 32,102,117,110, 99,116,
-105,111,110, 40,115,101,108,102, 44, 32, 99,104,117,110,107, 44, 32,101,114,114,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116,
- 32, 99,104,117,110,107, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,115,
-111, 99,107, 58,115,101,110,100, 40, 34, 48, 92,114, 92,110, 92,114, 92,110, 34,
- 41, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,115,105,122,101, 32, 61, 32,115,116,114,105,110,103, 46,102,111,
-114,109, 97,116, 40, 34, 37, 88, 92,114, 92,110, 34, 44, 32,115,116,114,105,110,
-103, 46,108,101,110, 40, 99,104,117,110,107, 41, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,111, 99,107, 58,115,101,
-110,100, 40,115,105,122,101, 32, 46, 46, 32, 32, 99,104,117,110,107, 32, 46, 46,
- 32, 34, 92,114, 92,110, 34, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32,125, 41, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 76,111,119, 32,108,101,
-118,101,108, 32, 72, 84, 84, 80, 32, 65, 80, 73, 10, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,109,101,116,
- 97,116, 32, 61, 32,123, 32, 95, 95,105,110,100,101,120, 32, 61, 32,123,125, 32,
-125, 10, 10,102,117,110, 99,116,105,111,110, 32,111,112,101,110, 40,104,111,115,
-116, 44, 32,112,111,114,116, 44, 32, 99,114,101, 97,116,101, 41, 10, 32, 32, 32,
- 32, 45, 45, 32, 99,114,101, 97,116,101, 32,115,111, 99,107,101,116, 32,119,105,
-116,104, 32,117,115,101,114, 32, 99,111,110,110,101, 99,116, 32,102,117,110, 99,
-116,105,111,110, 44, 32,111,114, 32,119,105,116,104, 32,100,101,102, 97,117,108,
-116, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99, 32, 61, 32,115,111, 99,107,
-101,116, 46,116,114,121, 40, 40, 99,114,101, 97,116,101, 32,111,114, 32,115,111,
- 99,107,101,116, 46,116, 99,112, 41, 40, 41, 41, 10, 32, 32, 32, 32,108,111, 99,
- 97,108, 32,104, 32, 61, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,116,
- 97, 98,108,101, 40,123, 32, 99, 32, 61, 32, 99, 32,125, 44, 32,109,101,116, 97,
-116, 41, 10, 32, 32, 32, 32, 45, 45, 32, 99,114,101, 97,116,101, 32,102,105,110,
- 97,108,105,122,101,100, 32,116,114,121, 10, 32, 32, 32, 32,104, 46,116,114,121,
- 32, 61, 32,115,111, 99,107,101,116, 46,110,101,119,116,114,121, 40,102,117,110,
- 99,116,105,111,110, 40, 41, 32,104, 58, 99,108,111,115,101, 40, 41, 32,101,110,
-100, 41, 10, 32, 32, 32, 32, 45, 45, 32,115,101,116, 32,116,105,109,101,111,117,
-116, 32, 98,101,102,111,114,101, 32, 99,111,110,110,101, 99,116,105,110,103, 10,
- 32, 32, 32, 32,104, 46,116,114,121, 40, 99, 58,115,101,116,116,105,109,101,111,
-117,116, 40, 84, 73, 77, 69, 79, 85, 84, 41, 41, 10, 32, 32, 32, 32,104, 46,116,
-114,121, 40, 99, 58, 99,111,110,110,101, 99,116, 40,104,111,115,116, 44, 32,112,
-111,114,116, 32,111,114, 32, 80, 79, 82, 84, 41, 41, 10, 32, 32, 32, 32, 45, 45,
- 32,104,101,114,101, 32,101,118,101,114,121,116,104,105,110,103, 32,119,111,114,
-107,101,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,104, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,
-110,100,101,120, 58,115,101,110,100,114,101,113,117,101,115,116,108,105,110,101,
- 40,109,101,116,104,111,100, 44, 32,117,114,105, 41, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,114,101,113,108,105,110,101, 32, 61, 32,115,116,114,105,110,103,
- 46,102,111,114,109, 97,116, 40, 34, 37,115, 32, 37,115, 32, 72, 84, 84, 80, 47,
- 49, 46, 49, 92,114, 92,110, 34, 44, 32,109,101,116,104,111,100, 32,111,114, 32,
- 34, 71, 69, 84, 34, 44, 32,117,114,105, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46, 99, 58,115,
-101,110,100, 40,114,101,113,108,105,110,101, 41, 41, 10,101,110,100, 10, 10,102,
-117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,
-120, 58,115,101,110,100,104,101, 97,100,101,114,115, 40,116,111,115,101,110,100,
- 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99, 97,110,111,110,105, 99, 32,
- 61, 32,104,101, 97,100,101,114,115, 46, 99, 97,110,111,110,105, 99, 10, 32, 32,
- 32, 32,108,111, 99, 97,108, 32,104, 32, 61, 32, 34, 92,114, 92,110, 34, 10, 32,
- 32, 32, 32,102,111,114, 32,102, 44, 32,118, 32,105,110, 32, 98, 97,115,101, 46,
-112, 97,105,114,115, 40,116,111,115,101,110,100, 41, 32,100,111, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,104, 32, 61, 32, 40, 99, 97,110,111,110,105, 99, 91,102, 93,
- 32,111,114, 32,102, 41, 32, 46, 46, 32, 34, 58, 32, 34, 32, 46, 46, 32,118, 32,
- 46, 46, 32, 34, 92,114, 92,110, 34, 32, 46, 46, 32,104, 10, 32, 32, 32, 32,101,
-110,100, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102,
- 46, 99, 58,115,101,110,100, 40,104, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32, 49, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,
-101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,115,101,110,100, 98,111,100,
-121, 40,104,101, 97,100,101,114,115, 44, 32,115,111,117,114, 99,101, 44, 32,115,
-116,101,112, 41, 10, 32, 32, 32, 32,115,111,117,114, 99,101, 32, 61, 32,115,111,
-117,114, 99,101, 32,111,114, 32,108,116,110, 49, 50, 46,115,111,117,114, 99,101,
- 46,101,109,112,116,121, 40, 41, 10, 32, 32, 32, 32,115,116,101,112, 32, 61, 32,
-115,116,101,112, 32,111,114, 32,108,116,110, 49, 50, 46,112,117,109,112, 46,115,
-116,101,112, 10, 32, 32, 32, 32, 45, 45, 32,105,102, 32,119,101, 32,100,111,110,
- 39,116, 32,107,110,111,119, 32,116,104,101, 32,115,105,122,101, 32,105,110, 32,
- 97,100,118, 97,110, 99,101, 44, 32,115,101,110,100, 32, 99,104,117,110,107,101,
-100, 32, 97,110,100, 32,104,111,112,101, 32,102,111,114, 32,116,104,101, 32, 98,
-101,115,116, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,109,111,100,101, 32, 61,
- 32, 34,104,116,116,112, 45, 99,104,117,110,107,101,100, 34, 10, 32, 32, 32, 32,
-105,102, 32,104,101, 97,100,101,114,115, 91, 34, 99,111,110,116,101,110,116, 45,
-108,101,110,103,116,104, 34, 93, 32,116,104,101,110, 32,109,111,100,101, 32, 61,
- 32, 34,107,101,101,112, 45,111,112,101,110, 34, 32,101,110,100, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,115,101,108,102, 46,116,114,121, 40,108,116,110,
- 49, 50, 46,112,117,109,112, 46, 97,108,108, 40,115,111,117,114, 99,101, 44, 32,
-115,111, 99,107,101,116, 46,115,105,110,107, 40,109,111,100,101, 44, 32,115,101,
-108,102, 46, 99, 41, 44, 32,115,116,101,112, 41, 41, 10,101,110,100, 10, 10,102,
-117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,
-120, 58,114,101, 99,101,105,118,101,115,116, 97,116,117,115,108,105,110,101, 40,
- 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,116, 97,116,117,115, 32, 61,
- 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46, 99, 58,114,101, 99,
-101,105,118,101, 40, 53, 41, 41, 10, 32, 32, 32, 32, 45, 45, 32,105,100,101,110,
-116,105,102,121, 32, 72, 84, 84, 80, 47, 48, 46, 57, 32,114,101,115,112,111,110,
-115,101,115, 44, 32,119,104,105, 99,104, 32,100,111, 32,110,111,116, 32, 99,111,
-110,116, 97,105,110, 32, 97, 32,115,116, 97,116,117,115, 32,108,105,110,101, 10,
- 32, 32, 32, 32, 45, 45, 32,116,104,105,115, 32,105,115, 32,106,117,115,116, 32,
- 97, 32,104,101,117,114,105,115,116,105, 99, 44, 32, 98,117,116, 32,105,115, 32,
-119,104, 97,116, 32,116,104,101, 32, 82, 70, 67, 32,114,101, 99,111,109,109,101,
-110,100,115, 10, 32, 32, 32, 32,105,102, 32,115,116, 97,116,117,115, 32,126, 61,
- 32, 34, 72, 84, 84, 80, 47, 34, 32,116,104,101,110, 32,114,101,116,117,114,110,
- 32,110,105,108, 44, 32,115,116, 97,116,117,115, 32,101,110,100, 10, 32, 32, 32,
- 32, 45, 45, 32,111,116,104,101,114,119,105,115,101, 32,112,114,111, 99,101,101,
-100, 32,114,101, 97,100,105,110,103, 32, 97, 32,115,116, 97,116,117,115, 32,108,
-105,110,101, 10, 32, 32, 32, 32,115,116, 97,116,117,115, 32, 61, 32,115,101,108,
-102, 46,116,114,121, 40,115,101,108,102, 46, 99, 58,114,101, 99,101,105,118,101,
- 40, 34, 42,108, 34, 44, 32,115,116, 97,116,117,115, 41, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32, 99,111,100,101, 32, 61, 32,115,111, 99,107,101,116, 46,
-115,107,105,112, 40, 50, 44, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,
-115,116, 97,116,117,115, 44, 32, 34, 72, 84, 84, 80, 47, 37,100, 42, 37, 46, 37,
-100, 42, 32, 40, 37,100, 37,100, 37,100, 41, 34, 41, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,115,101,108,102, 46,116,114,121, 40, 98, 97,115,101, 46,
-116,111,110,117,109, 98,101,114, 40, 99,111,100,101, 41, 44, 32,115,116, 97,116,
-117,115, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,
-116, 97,116, 46, 95, 95,105,110,100,101,120, 58,114,101, 99,101,105,118,101,104,
-101, 97,100,101,114,115, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-115,101,108,102, 46,116,114,121, 40,114,101, 99,101,105,118,101,104,101, 97,100,
-101,114,115, 40,115,101,108,102, 46, 99, 41, 41, 10,101,110,100, 10, 10,102,117,
-110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120,
- 58,114,101, 99,101,105,118,101, 98,111,100,121, 40,104,101, 97,100,101,114,115,
- 44, 32,115,105,110,107, 44, 32,115,116,101,112, 41, 10, 32, 32, 32, 32,115,105,
-110,107, 32, 61, 32,115,105,110,107, 32,111,114, 32,108,116,110, 49, 50, 46,115,
-105,110,107, 46,110,117,108,108, 40, 41, 10, 32, 32, 32, 32,115,116,101,112, 32,
- 61, 32,115,116,101,112, 32,111,114, 32,108,116,110, 49, 50, 46,112,117,109,112,
- 46,115,116,101,112, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,108,101,110,103,
-116,104, 32, 61, 32, 98, 97,115,101, 46,116,111,110,117,109, 98,101,114, 40,104,
-101, 97,100,101,114,115, 91, 34, 99,111,110,116,101,110,116, 45,108,101,110,103,
-116,104, 34, 93, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,116, 32, 61, 32,
-104,101, 97,100,101,114,115, 91, 34,116,114, 97,110,115,102,101,114, 45,101,110,
- 99,111,100,105,110,103, 34, 93, 32, 45, 45, 32,115,104,111,114,116, 99,117,116,
- 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,109,111,100,101, 32, 61, 32, 34,100,
-101,102, 97,117,108,116, 34, 32, 45, 45, 32, 99,111,110,110,101, 99,116,105,111,
-110, 32, 99,108,111,115,101, 10, 32, 32, 32, 32,105,102, 32,116, 32, 97,110,100,
- 32,116, 32,126, 61, 32, 34,105,100,101,110,116,105,116,121, 34, 32,116,104,101,
-110, 32,109,111,100,101, 32, 61, 32, 34,104,116,116,112, 45, 99,104,117,110,107,
-101,100, 34, 10, 32, 32, 32, 32,101,108,115,101,105,102, 32, 98, 97,115,101, 46,
-116,111,110,117,109, 98,101,114, 40,104,101, 97,100,101,114,115, 91, 34, 99,111,
-110,116,101,110,116, 45,108,101,110,103,116,104, 34, 93, 41, 32,116,104,101,110,
- 32,109,111,100,101, 32, 61, 32, 34, 98,121, 45,108,101,110,103,116,104, 34, 32,
-101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46,
-116,114,121, 40,108,116,110, 49, 50, 46,112,117,109,112, 46, 97,108,108, 40,115,
-111, 99,107,101,116, 46,115,111,117,114, 99,101, 40,109,111,100,101, 44, 32,115,
-101,108,102, 46, 99, 44, 32,108,101,110,103,116,104, 41, 44, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,115,105,110,107, 44, 32,115,116,101,112, 41, 41, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,
-110,100,101,120, 58,114,101, 99,101,105,118,101, 48, 57, 98,111,100,121, 40,115,
-116, 97,116,117,115, 44, 32,115,105,110,107, 44, 32,115,116,101,112, 41, 10, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,115,111,117,114, 99,101, 32, 61, 32,108,116,
-110, 49, 50, 46,115,111,117,114, 99,101, 46,114,101,119,105,110,100, 40,115,111,
- 99,107,101,116, 46,115,111,117,114, 99,101, 40, 34,117,110,116,105,108, 45, 99,
-108,111,115,101,100, 34, 44, 32,115,101,108,102, 46, 99, 41, 41, 10, 32, 32, 32,
- 32,115,111,117,114, 99,101, 40,115,116, 97,116,117,115, 41, 10, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,115,101,108,102, 46,116,114,121, 40,108,116,110, 49,
- 50, 46,112,117,109,112, 46, 97,108,108, 40,115,111,117,114, 99,101, 44, 32,115,
-105,110,107, 44, 32,115,116,101,112, 41, 41, 10,101,110,100, 10, 10,102,117,110,
- 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,
- 99,108,111,115,101, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,
-101,108,102, 46, 99, 58, 99,108,111,115,101, 40, 41, 10,101,110,100, 10, 10, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,
- 72,105,103,104, 32,108,101,118,101,108, 32, 72, 84, 84, 80, 32, 65, 80, 73, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111,
- 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32, 97,100,106,117,115,116,117,
-114,105, 40,114,101,113,116, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,117,
- 32, 61, 32,114,101,113,116, 10, 32, 32, 32, 32, 45, 45, 32,105,102, 32,116,104,
-101,114,101, 32,105,115, 32, 97, 32,112,114,111,120,121, 44, 32,119,101, 32,110,
-101,101,100, 32,116,104,101, 32,102,117,108,108, 32,117,114,108, 46, 32,111,116,
-104,101,114,119,105,115,101, 44, 32,106,117,115,116, 32, 97, 32,112, 97,114,116,
- 46, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,114,101,113,116, 46,112,114,
-111,120,121, 32, 97,110,100, 32,110,111,116, 32, 80, 82, 79, 88, 89, 32,116,104,
-101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,117, 32, 61, 32,123, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,115,111, 99,107,101,
-116, 46,116,114,121, 40,114,101,113,116, 46,112, 97,116,104, 44, 32, 34,105,110,
-118, 97,108,105,100, 32,112, 97,116,104, 32, 39,110,105,108, 39, 34, 41, 44, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,114, 97,109,115, 32, 61, 32,
-114,101,113,116, 46,112, 97,114, 97,109,115, 44, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,113,117,101,114,121, 32, 61, 32,114,101,113,116, 46,113,117,101,
-114,121, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,102,114, 97,103,109,
-101,110,116, 32, 61, 32,114,101,113,116, 46,102,114, 97,103,109,101,110,116, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,125, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32,
- 32, 32,114,101,116,117,114,110, 32,117,114,108, 46, 98,117,105,108,100, 40,117,
- 41, 10,101,110,100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,
-110, 32, 97,100,106,117,115,116,112,114,111,120,121, 40,114,101,113,116, 41, 10,
- 32, 32, 32, 32,108,111, 99, 97,108, 32,112,114,111,120,121, 32, 61, 32,114,101,
-113,116, 46,112,114,111,120,121, 32,111,114, 32, 80, 82, 79, 88, 89, 10, 32, 32,
- 32, 32,105,102, 32,112,114,111,120,121, 32,116,104,101,110, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,112,114,111,120,121, 32, 61, 32,117,114,108, 46,112, 97,114,115,
-101, 40,112,114,111,120,121, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,
-117,114,110, 32,112,114,111,120,121, 46,104,111,115,116, 44, 32,112,114,111,120,
-121, 46,112,111,114,116, 32,111,114, 32, 51, 49, 50, 56, 10, 32, 32, 32, 32,101,
-108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,114,
-101,113,116, 46,104,111,115,116, 44, 32,114,101,113,116, 46,112,111,114,116, 10,
- 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,108,111, 99, 97,108, 32,102,
-117,110, 99,116,105,111,110, 32, 97,100,106,117,115,116,104,101, 97,100,101,114,
-115, 40,114,101,113,116, 41, 10, 32, 32, 32, 32, 45, 45, 32,100,101,102, 97,117,
-108,116, 32,104,101, 97,100,101,114,115, 10, 32, 32, 32, 32,108,111, 99, 97,108,
- 32,108,111,119,101,114, 32, 61, 32,123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 91,
- 34,117,115,101,114, 45, 97,103,101,110,116, 34, 93, 32, 61, 32, 85, 83, 69, 82,
- 65, 71, 69, 78, 84, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 91, 34,104,111,115,
-116, 34, 93, 32, 61, 32,114,101,113,116, 46,104,111,115,116, 44, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 91, 34, 99,111,110,110,101, 99,116,105,111,110, 34, 93, 32,
- 61, 32, 34, 99,108,111,115,101, 44, 32, 84, 69, 34, 44, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 91, 34,116,101, 34, 93, 32, 61, 32, 34,116,114, 97,105,108,101,114,
-115, 34, 10, 32, 32, 32, 32,125, 10, 32, 32, 32, 32, 45, 45, 32,105,102, 32,119,
-101, 32,104, 97,118,101, 32, 97,117,116,104,101,110,116,105, 99, 97,116,105,111,
-110, 32,105,110,102,111,114,109, 97,116,105,111,110, 44, 32,112, 97,115,115, 32,
-105,116, 32, 97,108,111,110,103, 10, 32, 32, 32, 32,105,102, 32,114,101,113,116,
- 46,117,115,101,114, 32, 97,110,100, 32,114,101,113,116, 46,112, 97,115,115,119,
-111,114,100, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111,119,
-101,114, 91, 34, 97,117,116,104,111,114,105,122, 97,116,105,111,110, 34, 93, 32,
- 61, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 66, 97,115,105,
- 99, 32, 34, 32, 46, 46, 32, 32, 40,109,105,109,101, 46, 98, 54, 52, 40,114,101,
-113,116, 46,117,115,101,114, 32, 46, 46, 32, 34, 58, 34, 32, 46, 46, 32,114,101,
-113,116, 46,112, 97,115,115,119,111,114,100, 41, 41, 10, 32, 32, 32, 32,101,110,
-100, 10, 32, 32, 32, 32, 45, 45, 32,111,118,101,114,114,105,100,101, 32,119,105,
-116,104, 32,117,115,101,114, 32,104,101, 97,100,101,114,115, 10, 32, 32, 32, 32,
-102,111,114, 32,105, 44,118, 32,105,110, 32, 98, 97,115,101, 46,112, 97,105,114,
-115, 40,114,101,113,116, 46,104,101, 97,100,101,114,115, 32,111,114, 32,108,111,
-119,101,114, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111,119,101,
-114, 91,115,116,114,105,110,103, 46,108,111,119,101,114, 40,105, 41, 93, 32, 61,
- 32,118, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,108,111,119,101,114, 10,101,110,100, 10, 10, 45, 45, 32,100,101,102, 97,
-117,108,116, 32,117,114,108, 32,112, 97,114,116,115, 10,108,111, 99, 97,108, 32,
-100,101,102, 97,117,108,116, 32, 61, 32,123, 10, 32, 32, 32, 32,104,111,115,116,
- 32, 61, 32, 34, 34, 44, 10, 32, 32, 32, 32,112,111,114,116, 32, 61, 32, 80, 79,
- 82, 84, 44, 10, 32, 32, 32, 32,112, 97,116,104, 32, 61, 34, 47, 34, 44, 10, 32,
- 32, 32, 32,115, 99,104,101,109,101, 32, 61, 32, 34,104,116,116,112, 34, 10,125,
- 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32, 97,100,106,
-117,115,116,114,101,113,117,101,115,116, 40,114,101,113,116, 41, 10, 32, 32, 32,
- 32, 45, 45, 32,112, 97,114,115,101, 32,117,114,108, 32,105,102, 32,112,114,111,
-118,105,100,101,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,110,114,101,113,
-116, 32, 61, 32,114,101,113,116, 46,117,114,108, 32, 97,110,100, 32,117,114,108,
- 46,112, 97,114,115,101, 40,114,101,113,116, 46,117,114,108, 44, 32,100,101,102,
- 97,117,108,116, 41, 32,111,114, 32,123,125, 10, 32, 32, 32, 32, 45, 45, 32,101,
-120,112,108,105, 99,105,116, 32, 99,111,109,112,111,110,101,110,116,115, 32,111,
-118,101,114,114,105,100,101, 32,117,114,108, 10, 32, 32, 32, 32,102,111,114, 32,
-105, 44,118, 32,105,110, 32, 98, 97,115,101, 46,112, 97,105,114,115, 40,114,101,
-113,116, 41, 32,100,111, 32,110,114,101,113,116, 91,105, 93, 32, 61, 32,118, 32,
-101,110,100, 10, 32, 32, 32, 32,105,102, 32,110,114,101,113,116, 46,112,111,114,
-116, 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 32,110,114,101,113,116, 46,112,
-111,114,116, 32, 61, 32, 56, 48, 32,101,110,100, 10, 32, 32, 32, 32,115,111, 99,
-107,101,116, 46,116,114,121, 40,110,114,101,113,116, 46,104,111,115,116, 32, 97,
-110,100, 32,110,114,101,113,116, 46,104,111,115,116, 32,126, 61, 32, 34, 34, 44,
- 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 34,105,110,118, 97,108,105,100, 32,104,
-111,115,116, 32, 39, 34, 32, 46, 46, 32, 98, 97,115,101, 46,116,111,115,116,114,
-105,110,103, 40,110,114,101,113,116, 46,104,111,115,116, 41, 32, 46, 46, 32, 34,
- 39, 34, 41, 10, 32, 32, 32, 32, 45, 45, 32, 99,111,109,112,117,116,101, 32,117,
-114,105, 32,105,102, 32,117,115,101,114, 32,104, 97,115,110, 39,116, 32,111,118,
-101,114,114,105,100,101,110, 10, 32, 32, 32, 32,110,114,101,113,116, 46,117,114,
-105, 32, 61, 32,114,101,113,116, 46,117,114,105, 32,111,114, 32, 97,100,106,117,
-115,116,117,114,105, 40,110,114,101,113,116, 41, 10, 32, 32, 32, 32, 45, 45, 32,
- 97,106,117,115,116, 32,104,111,115,116, 32, 97,110,100, 32,112,111,114,116, 32,
-105,102, 32,116,104,101,114,101, 32,105,115, 32, 97, 32,112,114,111,120,121, 10,
- 32, 32, 32, 32,110,114,101,113,116, 46,104,111,115,116, 44, 32,110,114,101,113,
-116, 46,112,111,114,116, 32, 61, 32, 97,100,106,117,115,116,112,114,111,120,121,
- 40,110,114,101,113,116, 41, 10, 32, 32, 32, 32, 45, 45, 32, 97,100,106,117,115,
-116, 32,104,101, 97,100,101,114,115, 32,105,110, 32,114,101,113,117,101,115,116,
- 10, 32, 32, 32, 32,110,114,101,113,116, 46,104,101, 97,100,101,114,115, 32, 61,
- 32, 97,100,106,117,115,116,104,101, 97,100,101,114,115, 40,110,114,101,113,116,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,114,101,113,116, 10,101,
-110,100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,115,
-104,111,117,108,100,114,101,100,105,114,101, 99,116, 40,114,101,113,116, 44, 32,
- 99,111,100,101, 44, 32,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,104,101, 97,100,101,114,115, 46,108,111, 99, 97,116,105,
-111,110, 32, 97,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,116,
-114,105,110,103, 46,103,115,117, 98, 40,104,101, 97,100,101,114,115, 46,108,111,
- 99, 97,116,105,111,110, 44, 32, 34, 37,115, 34, 44, 32, 34, 34, 41, 32,126, 61,
- 32, 34, 34, 32, 97,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40,
-114,101,113,116, 46,114,101,100,105,114,101, 99,116, 32,126, 61, 32,102, 97,108,
-115,101, 41, 32, 97,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40,
- 99,111,100,101, 32, 61, 61, 32, 51, 48, 49, 32,111,114, 32, 99,111,100,101, 32,
- 61, 61, 32, 51, 48, 50, 32,111,114, 32, 99,111,100,101, 32, 61, 61, 32, 51, 48,
- 51, 32,111,114, 32, 99,111,100,101, 32, 61, 61, 32, 51, 48, 55, 41, 32, 97,110,
-100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40,110,111,116, 32,114,101,
-113,116, 46,109,101,116,104,111,100, 32,111,114, 32,114,101,113,116, 46,109,101,
-116,104,111,100, 32, 61, 61, 32, 34, 71, 69, 84, 34, 32,111,114, 32,114,101,113,
-116, 46,109,101,116,104,111,100, 32, 61, 61, 32, 34, 72, 69, 65, 68, 34, 41, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,110,100, 32, 40,110,111,116, 32,
-114,101,113,116, 46,110,114,101,100,105,114,101, 99,116,115, 32,111,114, 32,114,
-101,113,116, 46,110,114,101,100,105,114,101, 99,116,115, 32, 60, 32, 53, 41, 10,
-101,110,100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,
-115,104,111,117,108,100,114,101, 99,101,105,118,101, 98,111,100,121, 40,114,101,
-113,116, 44, 32, 99,111,100,101, 41, 10, 32, 32, 32, 32,105,102, 32,114,101,113,
-116, 46,109,101,116,104,111,100, 32, 61, 61, 32, 34, 72, 69, 65, 68, 34, 32,116,
-104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 32,101,110,100, 10, 32,
- 32, 32, 32,105,102, 32, 99,111,100,101, 32, 61, 61, 32, 50, 48, 52, 32,111,114,
- 32, 99,111,100,101, 32, 61, 61, 32, 51, 48, 52, 32,116,104,101,110, 32,114,101,
-116,117,114,110, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,
- 99,111,100,101, 32, 62, 61, 32, 49, 48, 48, 32, 97,110,100, 32, 99,111,100,101,
- 32, 60, 32, 50, 48, 48, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,
-105,108, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 49, 10,
-101,110,100, 10, 10, 45, 45, 32,102,111,114,119, 97,114,100, 32,100,101, 99,108,
- 97,114, 97,116,105,111,110,115, 10,108,111, 99, 97,108, 32,116,114,101,113,117,
-101,115,116, 44, 32,116,114,101,100,105,114,101, 99,116, 10, 10,102,117,110, 99,
-116,105,111,110, 32,116,114,101,100,105,114,101, 99,116, 40,114,101,113,116, 44,
- 32,108,111, 99, 97,116,105,111,110, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108,
- 32,114,101,115,117,108,116, 44, 32, 99,111,100,101, 44, 32,104,101, 97,100,101,
-114,115, 44, 32,115,116, 97,116,117,115, 32, 61, 32,116,114,101,113,117,101,115,
-116, 32,123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32,116,104,101, 32, 82,
- 70, 67, 32,115, 97,121,115, 32,116,104,101, 32,114,101,100,105,114,101, 99,116,
- 32, 85, 82, 76, 32,104, 97,115, 32,116,111, 32, 98,101, 32, 97, 98,115,111,108,
-117,116,101, 44, 32, 98,117,116, 32,115,111,109,101, 10, 32, 32, 32, 32, 32, 32,
- 32, 32, 45, 45, 32,115,101,114,118,101,114,115, 32,100,111, 32,110,111,116, 32,
-114,101,115,112,101, 99,116, 32,116,104, 97,116, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,117,114,108, 32, 61, 32,117,114,108, 46, 97, 98,115,111,108,117,116,101, 40,
-114,101,113,116, 46,117,114,108, 44, 32,108,111, 99, 97,116,105,111,110, 41, 44,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,115,111,117,114, 99,101, 32, 61, 32,114,101,
-113,116, 46,115,111,117,114, 99,101, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,
-105,110,107, 32, 61, 32,114,101,113,116, 46,115,105,110,107, 44, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,104,101, 97,100,101,114,115, 32, 61, 32,114,101,113,116, 46,
-104,101, 97,100,101,114,115, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,112,114,111,
-120,121, 32, 61, 32,114,101,113,116, 46,112,114,111,120,121, 44, 32, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,110,114,101,100,105,114,101, 99,116,115, 32, 61, 32, 40,
-114,101,113,116, 46,110,114,101,100,105,114,101, 99,116,115, 32,111,114, 32, 48,
- 41, 32, 43, 32, 49, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 99,114,101, 97,116,
-101, 32, 61, 32,114,101,113,116, 46, 99,114,101, 97,116,101, 10, 32, 32, 32, 32,
-125, 32, 32, 32, 10, 32, 32, 32, 32, 45, 45, 32,112, 97,115,115, 32,108,111, 99,
- 97,116,105,111,110, 32,104,101, 97,100,101,114, 32, 98, 97, 99,107, 32, 97,115,
- 32, 97, 32,104,105,110,116, 32,119,101, 32,114,101,100,105,114,101, 99,116,101,
-100, 10, 32, 32, 32, 32,104,101, 97,100,101,114,115, 32, 61, 32,104,101, 97,100,
-101,114,115, 32,111,114, 32,123,125, 10, 32, 32, 32, 32,104,101, 97,100,101,114,
-115, 46,108,111, 99, 97,116,105,111,110, 32, 61, 32,104,101, 97,100,101,114,115,
- 46,108,111, 99, 97,116,105,111,110, 32,111,114, 32,108,111, 99, 97,116,105,111,
-110, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,114,101,115,117,108,116, 44,
- 32, 99,111,100,101, 44, 32,104,101, 97,100,101,114,115, 44, 32,115,116, 97,116,
-117,115, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,116,114,101,
-113,117,101,115,116, 40,114,101,113,116, 41, 10, 32, 32, 32, 32, 45, 45, 32,119,
-101, 32,108,111,111,112, 32,117,110,116,105,108, 32,119,101, 32,103,101,116, 32,
-119,104, 97,116, 32,119,101, 32,119, 97,110,116, 44, 32,111,114, 10, 32, 32, 32,
- 32, 45, 45, 32,117,110,116,105,108, 32,119,101, 32, 97,114,101, 32,115,117,114,
-101, 32,116,104,101,114,101, 32,105,115, 32,110,111, 32,119, 97,121, 32,116,111,
- 32,103,101,116, 32,105,116, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,110,114,
-101,113,116, 32, 61, 32, 97,100,106,117,115,116,114,101,113,117,101,115,116, 40,
-114,101,113,116, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,104, 32, 61, 32,
-111,112,101,110, 40,110,114,101,113,116, 46,104,111,115,116, 44, 32,110,114,101,
-113,116, 46,112,111,114,116, 44, 32,110,114,101,113,116, 46, 99,114,101, 97,116,
-101, 41, 10, 32, 32, 32, 32, 45, 45, 32,115,101,110,100, 32,114,101,113,117,101,
-115,116, 32,108,105,110,101, 32, 97,110,100, 32,104,101, 97,100,101,114,115, 10,
- 32, 32, 32, 32,104, 58,115,101,110,100,114,101,113,117,101,115,116,108,105,110,
-101, 40,110,114,101,113,116, 46,109,101,116,104,111,100, 44, 32,110,114,101,113,
-116, 46,117,114,105, 41, 10, 32, 32, 32, 32,104, 58,115,101,110,100,104,101, 97,
-100,101,114,115, 40,110,114,101,113,116, 46,104,101, 97,100,101,114,115, 41, 10,
- 32, 32, 32, 32, 45, 45, 32,105,102, 32,116,104,101,114,101, 32,105,115, 32, 97,
- 32, 98,111,100,121, 44, 32,115,101,110,100, 32,105,116, 10, 32, 32, 32, 32,105,
-102, 32,110,114,101,113,116, 46,115,111,117,114, 99,101, 32,116,104,101,110, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,104, 58,115,101,110,100, 98,111,100,121, 40,110,
-114,101,113,116, 46,104,101, 97,100,101,114,115, 44, 32,110,114,101,113,116, 46,
-115,111,117,114, 99,101, 44, 32,110,114,101,113,116, 46,115,116,101,112, 41, 32,
- 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,
-111,100,101, 44, 32,115,116, 97,116,117,115, 32, 61, 32,104, 58,114,101, 99,101,
-105,118,101,115,116, 97,116,117,115,108,105,110,101, 40, 41, 10, 32, 32, 32, 32,
- 45, 45, 32,105,102, 32,105,116, 32,105,115, 32, 97,110, 32, 72, 84, 84, 80, 47,
- 48, 46, 57, 32,115,101,114,118,101,114, 44, 32,115,105,109,112,108,121, 32,103,
-101,116, 32,116,104,101, 32, 98,111,100,121, 32, 97,110,100, 32,119,101, 32, 97,
-114,101, 32,100,111,110,101, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 99,
-111,100,101, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,104, 58,114,
-101, 99,101,105,118,101, 48, 57, 98,111,100,121, 40,115,116, 97,116,117,115, 44,
- 32,110,114,101,113,116, 46,115,105,110,107, 44, 32,110,114,101,113,116, 46,115,
-116,101,112, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,
- 49, 44, 32, 50, 48, 48, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,104,101, 97,100,101,114,115, 10, 32, 32, 32, 32, 45, 45, 32,
-105,103,110,111,114,101, 32, 97,110,121, 32, 49, 48, 48, 45, 99,111,110,116,105,
-110,117,101, 32,109,101,115,115, 97,103,101,115, 10, 32, 32, 32, 32,119,104,105,
-108,101, 32, 99,111,100,101, 32, 61, 61, 32, 49, 48, 48, 32,100,111, 32, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,104,101, 97,100,101,114,115, 32, 61, 32,104, 58,114,
-101, 99,101,105,118,101,104,101, 97,100,101,114,115, 40, 41, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 99,111,100,101, 44, 32,115,116, 97,116,117,115, 32, 61, 32,104,
- 58,114,101, 99,101,105,118,101,115,116, 97,116,117,115,108,105,110,101, 40, 41,
- 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,104,101, 97,100,101,114,115,
- 32, 61, 32,104, 58,114,101, 99,101,105,118,101,104,101, 97,100,101,114,115, 40,
- 41, 10, 32, 32, 32, 32, 45, 45, 32, 97,116, 32,116,104,105,115, 32,112,111,105,
-110,116, 32,119,101, 32,115,104,111,117,108,100, 32,104, 97,118,101, 32, 97, 32,
-104,111,110,101,115,116, 32,114,101,112,108,121, 32,102,114,111,109, 32,116,104,
-101, 32,115,101,114,118,101,114, 10, 32, 32, 32, 32, 45, 45, 32,119,101, 32, 99,
- 97,110, 39,116, 32,114,101,100,105,114,101, 99,116, 32,105,102, 32,119,101, 32,
- 97,108,114,101, 97,100,121, 32,117,115,101,100, 32,116,104,101, 32,115,111,117,
-114, 99,101, 44, 32,115,111, 32,119,101, 32,114,101,112,111,114,116, 32,116,104,
-101, 32,101,114,114,111,114, 32, 10, 32, 32, 32, 32,105,102, 32,115,104,111,117,
-108,100,114,101,100,105,114,101, 99,116, 40,110,114,101,113,116, 44, 32, 99,111,
-100,101, 44, 32,104,101, 97,100,101,114,115, 41, 32, 97,110,100, 32,110,111,116,
- 32,110,114,101,113,116, 46,115,111,117,114, 99,101, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,104, 58, 99,108,111,115,101, 40, 41, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,116,114,101,100,105,114,101, 99,
-116, 40,114,101,113,116, 44, 32,104,101, 97,100,101,114,115, 46,108,111, 99, 97,
-116,105,111,110, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 45, 45,
- 32,104,101,114,101, 32,119,101, 32, 97,114,101, 32,102,105,110, 97,108,108,121,
- 32,100,111,110,101, 10, 32, 32, 32, 32,105,102, 32,115,104,111,117,108,100,114,
-101, 99,101,105,118,101, 98,111,100,121, 40,110,114,101,113,116, 44, 32, 99,111,
-100,101, 41, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,104, 58,114,
-101, 99,101,105,118,101, 98,111,100,121, 40,104,101, 97,100,101,114,115, 44, 32,
-110,114,101,113,116, 46,115,105,110,107, 44, 32,110,114,101,113,116, 46,115,116,
-101,112, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,104, 58, 99,108,
-111,115,101, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 49, 44, 32,
- 99,111,100,101, 44, 32,104,101, 97,100,101,114,115, 44, 32,115,116, 97,116,117,
-115, 10,101,110,100, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,
-110, 32,115,114,101,113,117,101,115,116, 40,117, 44, 32, 98, 41, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32,116, 32, 61, 32,123,125, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,114,101,113,116, 32, 61, 32,123, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,117,114,108, 32, 61, 32,117, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,105,
-110,107, 32, 61, 32,108,116,110, 49, 50, 46,115,105,110,107, 46,116, 97, 98,108,
-101, 40,116, 41, 10, 32, 32, 32, 32,125, 10, 32, 32, 32, 32,105,102, 32, 98, 32,
-116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,113,116, 46,115,111,
-117,114, 99,101, 32, 61, 32,108,116,110, 49, 50, 46,115,111,117,114, 99,101, 46,
-115,116,114,105,110,103, 40, 98, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,
-113,116, 46,104,101, 97,100,101,114,115, 32, 61, 32,123, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 91, 34, 99,111,110,116,101,110,116, 45,108,101,110,
-103,116,104, 34, 93, 32, 61, 32,115,116,114,105,110,103, 46,108,101,110, 40, 98,
- 41, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 34, 99,111,110,
-116,101,110,116, 45,116,121,112,101, 34, 93, 32, 61, 32, 34, 97,112,112,108,105,
- 99, 97,116,105,111,110, 47,120, 45,119,119,119, 45,102,111,114,109, 45,117,114,
-108,101,110, 99,111,100,101,100, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32,125, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,114,101,113,116, 46,109,101,116,104,111,100, 32,
- 61, 32, 34, 80, 79, 83, 84, 34, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32, 99,111,100,101, 44, 32,104,101, 97,100,101,114,115,
- 44, 32,115,116, 97,116,117,115, 32, 61, 32,115,111, 99,107,101,116, 46,115,107,
-105,112, 40, 49, 44, 32,116,114,101,113,117,101,115,116, 40,114,101,113,116, 41,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,116, 97, 98,108,101, 46, 99,
-111,110, 99, 97,116, 40,116, 41, 44, 32, 99,111,100,101, 44, 32,104,101, 97,100,
-101,114,115, 44, 32,115,116, 97,116,117,115, 10,101,110,100, 10, 10,114,101,113,
-117,101,115,116, 32, 61, 32,115,111, 99,107,101,116, 46,112,114,111,116,101, 99,
-116, 40,102,117,110, 99,116,105,111,110, 40,114,101,113,116, 44, 32, 98,111,100,
-121, 41, 10, 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,116,121,112,101, 40,
-114,101,113,116, 41, 32, 61, 61, 32, 34,115,116,114,105,110,103, 34, 32,116,104,
-101,110, 32,114,101,116,117,114,110, 32,115,114,101,113,117,101,115,116, 40,114,
-101,113,116, 44, 32, 98,111,100,121, 41, 10, 32, 32, 32, 32,101,108,115,101, 32,
-114,101,116,117,114,110, 32,116,114,101,113,117,101,115,116, 40,114,101,113,116,
- 41, 32,101,110,100, 10,101,110,100, 41, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6f, 0x72,
+ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x75, 0x72, 0x6c, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e,
+ 0x31, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x28, 0x22, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x22, 0x29, 0x0a, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20,
+ 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x22, 0x29, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x47,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x7b, 0x7d,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x0a,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x22, 0x29, 0x0a, 0x5f, 0x4d,
+ 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x20, 0x3d, 0x20, 0x36,
+ 0x30, 0x0a, 0x5f, 0x4d, 0x2e, 0x55, 0x53, 0x45, 0x52, 0x41, 0x47, 0x45,
+ 0x4e, 0x54, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x53, 0x20, 0x3d,
+ 0x20, 0x7b, 0x20, 0x5b, 0x22, 0x68, 0x74, 0x74, 0x70, 0x22, 0x5d, 0x20,
+ 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x7d, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x20, 0x3d, 0x20, 0x38, 0x30,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x2c,
+ 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x69, 0x6e, 0x65,
+ 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65,
+ 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68,
+ 0x69, 0x6c, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x7e, 0x3d, 0x20,
+ 0x22, 0x22, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73,
+ 0x6b, 0x69, 0x70, 0x28, 0x32, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x6c, 0x69, 0x6e, 0x65, 0x2c,
+ 0x20, 0x22, 0x5e, 0x28, 0x2e, 0x2d, 0x29, 0x3a, 0x25, 0x73, 0x2a, 0x28,
+ 0x2e, 0x2a, 0x29, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x28, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x22, 0x6d, 0x61, 0x6c,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69,
+ 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x6c, 0x69, 0x6e, 0x65,
+ 0x2c, 0x20, 0x22, 0x5e, 0x25, 0x73, 0x22, 0x29, 0x20, 0x64, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69,
+ 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65,
+ 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20,
+ 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x6e, 0x61,
+ 0x6d, 0x65, 0x5d, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2c, 0x20, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20,
+ 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x5b, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x2d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d,
+ 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e,
+ 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64,
+ 0x69, 0x72, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28,
+ 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c,
+ 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f,
+ 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
+ 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73,
+ 0x75, 0x62, 0x28, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x22, 0x3b, 0x2e,
+ 0x2a, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x2c, 0x20, 0x31, 0x36, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x69, 0x7a, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x73, 0x69, 0x7a,
+ 0x65, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x69,
+ 0x7a, 0x65, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68,
+ 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x70, 0x61,
+ 0x72, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x72,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73,
+ 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20, 0x3d,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a,
+ 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72,
+ 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x7b,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x22, 0x30, 0x5c, 0x72,
+ 0x5c, 0x6e, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x58, 0x5c, 0x72, 0x5c, 0x6e, 0x22,
+ 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e,
+ 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x73, 0x65, 0x6e,
+ 0x64, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5c, 0x72, 0x5c,
+ 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x6f, 0x72,
+ 0x74, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x28, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, 0x29, 0x28, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x68, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74,
+ 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x20,
+ 0x63, 0x20, 0x3d, 0x20, 0x63, 0x20, 0x7d, 0x2c, 0x20, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x2e, 0x74, 0x72,
+ 0x79, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6e,
+ 0x65, 0x77, 0x74, 0x72, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x68, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x68, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x63, 0x3a, 0x73, 0x65, 0x74, 0x74,
+ 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x5f, 0x4d, 0x2e, 0x54, 0x49,
+ 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x68, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x63, 0x3a, 0x63, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x68, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x6d, 0x65, 0x74,
+ 0x68, 0x6f, 0x64, 0x2c, 0x20, 0x75, 0x72, 0x69, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x71, 0x6c,
+ 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x73, 0x20,
+ 0x25, 0x73, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x5c,
+ 0x72, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
+ 0x20, 0x6f, 0x72, 0x20, 0x22, 0x47, 0x45, 0x54, 0x22, 0x2c, 0x20, 0x75,
+ 0x72, 0x69, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28,
+ 0x72, 0x65, 0x71, 0x6c, 0x69, 0x6e, 0x65, 0x29, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,
+ 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x28, 0x74, 0x6f, 0x73, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e,
+ 0x69, 0x63, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x2e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x22,
+ 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x66, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x74, 0x6f, 0x73,
+ 0x65, 0x6e, 0x64, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x61, 0x6e,
+ 0x6f, 0x6e, 0x69, 0x63, 0x5b, 0x66, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x66,
+ 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3a, 0x20, 0x22, 0x20, 0x2e, 0x2e,
+ 0x20, 0x76, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22,
+ 0x20, 0x2e, 0x2e, 0x20, 0x68, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x73, 0x65,
+ 0x6e, 0x64, 0x28, 0x68, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x62, 0x6f, 0x64, 0x79, 0x28, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x2c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c,
+ 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x65, 0x6d, 0x70, 0x74, 0x79,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x74,
+ 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x73, 0x74, 0x65,
+ 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x2d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x6b, 0x65, 0x65, 0x70,
+ 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x29, 0x2c, 0x20, 0x73, 0x74, 0x65,
+ 0x70, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x6c, 0x69, 0x6e, 0x65,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x63, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x35, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x48, 0x54, 0x54, 0x50,
+ 0x2f, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x22, 0x2a, 0x6c, 0x22,
+ 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73,
+ 0x6b, 0x69, 0x70, 0x28, 0x32, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x2c, 0x20, 0x22, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x25, 0x64, 0x2a,
+ 0x25, 0x2e, 0x25, 0x64, 0x2a, 0x20, 0x28, 0x25, 0x64, 0x25, 0x64, 0x25,
+ 0x64, 0x29, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x2c, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61,
+ 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x72,
+ 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x29, 0x29, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x62, 0x6f, 0x64,
+ 0x79, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x73, 0x69,
+ 0x6e, 0x6b, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e,
+ 0x73, 0x69, 0x6e, 0x6b, 0x2e, 0x6e, 0x75, 0x6c, 0x6c, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x73,
+ 0x74, 0x65, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74,
+ 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5d, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x20, 0x3d,
+ 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x22, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x22, 0x5d, 0x20, 0x2d, 0x2d, 0x20, 0x73, 0x68, 0x6f,
+ 0x72, 0x74, 0x63, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x22,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x20, 0x2d, 0x2d, 0x20,
+ 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63,
+ 0x6c, 0x6f, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x20, 0x7e, 0x3d, 0x20, 0x22,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x2d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x22, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x22, 0x5d, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6d, 0x6f,
+ 0x64, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x62, 0x79, 0x2d, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70,
+ 0x75, 0x6d, 0x70, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x6d, 0x6f,
+ 0x64, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x2c, 0x20,
+ 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x73,
+ 0x74, 0x65, 0x70, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74,
+ 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x30, 0x39, 0x62, 0x6f, 0x64, 0x79, 0x28, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2c,
+ 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
+ 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x2e, 0x72, 0x65, 0x77, 0x69, 0x6e, 0x64, 0x28, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28,
+ 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x64, 0x22, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75,
+ 0x6d, 0x70, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x73, 0x74, 0x65,
+ 0x70, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x63, 0x6c, 0x6f,
+ 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x75, 0x72, 0x69, 0x28, 0x72, 0x65,
+ 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x75, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x5f, 0x4d, 0x2e, 0x50, 0x52, 0x4f, 0x58,
+ 0x59, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x75, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x2c,
+ 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x27, 0x6e, 0x69, 0x6c, 0x27, 0x22, 0x29, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74,
+ 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d,
+ 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x72, 0x6c,
+ 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28, 0x75, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x28, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f,
+ 0x78, 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x72,
+ 0x6f, 0x78, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x50, 0x52,
+ 0x4f, 0x58, 0x59, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20,
+ 0x3d, 0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28,
+ 0x70, 0x72, 0x6f, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x72,
+ 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x72,
+ 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20,
+ 0x33, 0x31, 0x32, 0x38, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f,
+ 0x73, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72,
+ 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x72, 0x65, 0x71, 0x74, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68,
+ 0x6f, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x61,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x22, 0x5e,
+ 0x2e, 0x2d, 0x40, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x6f, 0x77, 0x65,
+ 0x72, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x5b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65,
+ 0x6e, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x55, 0x53,
+ 0x45, 0x52, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x68, 0x6f, 0x73, 0x74, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2c, 0x20, 0x54, 0x45, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x22, 0x74, 0x65,
+ 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65,
+ 0x72, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x73,
+ 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x77, 0x65, 0x72, 0x5b, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+ 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x20,
+ 0x28, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x62, 0x36, 0x34, 0x28, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x20, 0x2e, 0x2e, 0x20, 0x22,
+ 0x3a, 0x22, 0x20, 0x2e, 0x2e, 0x0a, 0x09, 0x09, 0x75, 0x72, 0x6c, 0x2e,
+ 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x72, 0x65, 0x71,
+ 0x74, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x29, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x78,
+ 0x79, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x72, 0x6f,
+ 0x78, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x50, 0x52, 0x4f,
+ 0x58, 0x59, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72,
+ 0x6f, 0x78, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x3d,
+ 0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x75,
+ 0x73, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x78,
+ 0x79, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x22, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x20, 0x28, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x62, 0x36,
+ 0x34, 0x28, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x75, 0x73, 0x65, 0x72,
+ 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3a, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x76, 0x20,
+ 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x61, 0x69, 0x72,
+ 0x73, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x29,
+ 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x69, 0x29, 0x5d, 0x20, 0x3d,
+ 0x20, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f,
+ 0x77, 0x65, 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20,
+ 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3d,
+ 0x20, 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x72,
+ 0x74, 0x20, 0x3d, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x22, 0x2f, 0x22, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20,
+ 0x3d, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x22, 0x0a, 0x7d, 0x0a, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x72, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x28, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x72, 0x65, 0x71,
+ 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x72, 0x6c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x72, 0x6c, 0x2c,
+ 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x29, 0x20, 0x6f, 0x72,
+ 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x69, 0x2c, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x72, 0x65, 0x71, 0x74, 0x29, 0x20,
+ 0x64, 0x6f, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x5b, 0x69, 0x5d, 0x20,
+ 0x3d, 0x20, 0x76, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72,
+ 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20,
+ 0x3d, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x28, 0x6e,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74,
+ 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f,
+ 0x73, 0x74, 0x20, 0x27, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6e,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x29, 0x20, 0x2e,
+ 0x2e, 0x20, 0x22, 0x27, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74,
+ 0x2e, 0x75, 0x72, 0x69, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e,
+ 0x75, 0x72, 0x69, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73,
+ 0x74, 0x75, 0x72, 0x69, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x6a, 0x75,
+ 0x73, 0x74, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6e, 0x72,
+ 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x6e, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x64,
+ 0x6a, 0x75, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x28, 0x6e, 0x72,
+ 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x72,
+ 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x72, 0x65, 0x71, 0x74,
+ 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67,
+ 0x73, 0x75, 0x62, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x22, 0x25, 0x73, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61,
+ 0x6c, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65,
+ 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x22, 0x5e, 0x28, 0x5b, 0x25, 0x77, 0x5d, 0x5b, 0x25, 0x77,
+ 0x25, 0x2b, 0x25, 0x2d, 0x25, 0x2e, 0x5d, 0x2a, 0x29, 0x25, 0x3a, 0x22,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x53, 0x5b, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x65, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x20, 0x7e, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
+ 0x29, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d,
+ 0x3d, 0x20, 0x33, 0x30, 0x31, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x30, 0x32, 0x20, 0x6f, 0x72, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x30, 0x33, 0x20,
+ 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33,
+ 0x30, 0x37, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x20,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x68,
+ 0x6f, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x47, 0x45, 0x54, 0x22, 0x20,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x68,
+ 0x6f, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x48, 0x45, 0x41, 0x44, 0x22,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x6e, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x73, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6e, 0x72,
+ 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x20, 0x3c, 0x20, 0x35,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f,
+ 0x75, 0x6c, 0x64, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x62, 0x6f,
+ 0x64, 0x79, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x3d, 0x3d,
+ 0x20, 0x22, 0x48, 0x45, 0x41, 0x44, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63,
+ 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x30, 0x34, 0x20, 0x6f,
+ 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x30,
+ 0x34, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3e, 0x3d,
+ 0x20, 0x31, 0x30, 0x30, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x3c, 0x20, 0x32, 0x30, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c,
+ 0x20, 0x74, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x0a, 0x2d,
+ 0x2d, 0x5b, 0x5b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5d, 0x5d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x72, 0x65, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2c, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75,
+ 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x72, 0x6c, 0x2e, 0x61, 0x62, 0x73,
+ 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75,
+ 0x72, 0x6c, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74,
+ 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x20, 0x3d, 0x20,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x72,
+ 0x65, 0x71, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x64, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x72, 0x65, 0x71,
+ 0x74, 0x2e, 0x6e, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73,
+ 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x63, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d,
+ 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20,
+ 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x2d, 0x2d, 0x5b, 0x5b, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x5d, 0x5d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x72, 0x65,
+ 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x64,
+ 0x6a, 0x75, 0x73, 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28,
+ 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6f,
+ 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f,
+ 0x73, 0x74, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f,
+ 0x72, 0x74, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x63, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x3a,
+ 0x73, 0x65, 0x6e, 0x64, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6c,
+ 0x69, 0x6e, 0x65, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6d, 0x65,
+ 0x74, 0x68, 0x6f, 0x64, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e,
+ 0x75, 0x72, 0x69, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6e,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68,
+ 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x62, 0x6f, 0x64, 0x79, 0x28, 0x6e, 0x72,
+ 0x65, 0x71, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c,
+ 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x74, 0x65,
+ 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x20,
+ 0x68, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x68, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
+ 0x30, 0x39, 0x62, 0x6f, 0x64, 0x79, 0x28, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x69, 0x6e,
+ 0x6b, 0x2c, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x74, 0x65,
+ 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x30,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x30, 0x30,
+ 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x68, 0x3a,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x3d, 0x20, 0x68, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
+ 0x65, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x6c, 0x69, 0x6e, 0x65, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20,
+ 0x68, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x72, 0x65, 0x64, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2c, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e,
+ 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x68, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x74, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28,
+ 0x72, 0x65, 0x71, 0x74, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x28, 0x6e, 0x72, 0x65,
+ 0x71, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x29, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68,
+ 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x62, 0x6f, 0x64, 0x79,
+ 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6e, 0x72,
+ 0x65, 0x71, 0x74, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x6e, 0x72,
+ 0x65, 0x71, 0x74, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x3a,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x2c, 0x20, 0x63, 0x6f,
+ 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c,
+ 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f,
+ 0x72, 0x6d, 0x28, 0x75, 0x2c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x7b,
+ 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x72, 0x65, 0x71, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x75,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69,
+ 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x73,
+ 0x69, 0x6e, 0x6b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x74, 0x29,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x61,
+ 0x72, 0x67, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x62,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x71, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d,
+ 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x28, 0x62,
+ 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x5b, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
+ 0x2d, 0x77, 0x77, 0x77, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x75, 0x72,
+ 0x6c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x6d, 0x65, 0x74,
+ 0x68, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x22, 0x50, 0x4f, 0x53, 0x54, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x74,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x73, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x75, 0x2c,
+ 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x72, 0x65, 0x71, 0x74, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x6e,
+ 0x65, 0x72, 0x69, 0x63, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x75, 0x2c, 0x20,
+ 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x5f, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x28, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
+ 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e,
+ 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f,
+ 0x4d, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x65,
+ 0x63, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x72, 0x65, 0x71, 0x74, 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x74, 0x79, 0x70, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 0x29, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x72, 0x65, 0x71, 0x74,
+ 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x74, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x72, 0x65, 0x71,
+ 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x29, 0x0a,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x20,
+ 0x3d, 0x20, 0x20, 0x5f, 0x4d, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/inet.c b/Build/source/texk/web2c/luatexdir/luasocket/src/inet.c
index 8bad83e7aa1..f4c84044eb7 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/inet.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/inet.c
@@ -3,66 +3,15 @@
* LuaSocket toolkit
\*=========================================================================*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "inet.h"
-#if defined(__MINGW32__)
-const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
-{
- if (af == AF_INET)
- {
- struct sockaddr_in in;
- memset(&in, 0, sizeof(in));
- in.sin_family = AF_INET;
- memcpy(&in.sin_addr, src, sizeof(struct in_addr));
- getnameinfo((struct sockaddr *)&in, sizeof(struct
-sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
- return dst;
- }
- else if (af == AF_INET6)
- {
- struct sockaddr_in6 in;
- memset(&in, 0, sizeof(in));
- in.sin6_family = AF_INET6;
- memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
- getnameinfo((struct sockaddr *)&in, sizeof(struct
-sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
- return dst;
- }
- return NULL;
-}
-
-int inet_pton(int af, const char *src, void *dst)
-{
- struct addrinfo hints, *res, *ressave;
-
- memset(&hints, 0, sizeof(struct addrinfo));
- hints.ai_family = af;
-
- if (getaddrinfo(src, NULL, &hints, &res) != 0)
- {
- return -1;
- }
-
- ressave = res;
-
- while (res)
- {
- memcpy(dst, res->ai_addr, res->ai_addrlen);
- res = res->ai_next;
- }
-
- freeaddrinfo(ressave);
- return 0;
-}
-
-#endif
-
-
/*=========================================================================*\
* Internal function prototypes.
\*=========================================================================*/
@@ -93,7 +42,7 @@ int inet_open(lua_State *L)
{
lua_pushstring(L, "dns");
lua_newtable(L);
- luaL_openlib(L, NULL, func, 0);
+ luaL_setfuncs(L, func, 0);
lua_settable(L, -3);
return 0;
}
@@ -132,24 +81,22 @@ static int inet_global_tohostname(lua_State *L) {
}
static int inet_global_getnameinfo(lua_State *L) {
+ char hbuf[NI_MAXHOST];
+ char sbuf[NI_MAXSERV];
int i, ret;
- char host[1024];
- char serv[32];
struct addrinfo hints;
struct addrinfo *resolved, *iter;
- const char *node = luaL_optstring(L, 1, NULL);
- const char *service = luaL_optstring(L, 2, NULL);
+ const char *host = luaL_optstring(L, 1, NULL);
+ const char *serv = luaL_optstring(L, 2, NULL);
- if (!(node || service))
- luaL_error(L, "You have to specify a hostname, a service, or both");
+ if (!(host || serv))
+ luaL_error(L, "host and serv cannot be both nil");
memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
+ hints.ai_family = AF_UNSPEC;
- /* getaddrinfo must get a node and a service argument */
- ret = getaddrinfo(node ? node : "127.0.0.1", service ? service : "7",
- &hints, &resolved);
+ ret = getaddrinfo(host, serv, &hints, &resolved);
if (ret != 0) {
lua_pushnil(L);
lua_pushstring(L, socket_gaistrerror(ret));
@@ -158,19 +105,19 @@ static int inet_global_getnameinfo(lua_State *L) {
lua_newtable(L);
for (i = 1, iter = resolved; iter; i++, iter = iter->ai_next) {
- getnameinfo(iter->ai_addr, (socklen_t) iter->ai_addrlen, host,
- node ? (socklen_t) sizeof(host) : 0, serv, service ? (socklen_t) sizeof(serv) : 0, 0);
-
- if (node) {
+ getnameinfo(iter->ai_addr, (socklen_t) iter->ai_addrlen,
+ hbuf, host? (socklen_t) sizeof(hbuf): 0,
+ sbuf, serv? (socklen_t) sizeof(sbuf): 0, 0);
+ if (host) {
lua_pushnumber(L, i);
- lua_pushstring(L, host);
+ lua_pushstring(L, hbuf);
lua_settable(L, -3);
}
}
freeaddrinfo(resolved);
- if (service) {
- lua_pushstring(L, serv);
+ if (serv) {
+ lua_pushstring(L, sbuf);
return 2;
} else {
return 1;
@@ -199,7 +146,7 @@ static int inet_global_toip(lua_State *L)
int inet_optfamily(lua_State* L, int narg, const char* def)
{
static const char* optname[] = { "unspec", "inet", "inet6", NULL };
- static int optvalue[] = { PF_UNSPEC, PF_INET, PF_INET6, 0 };
+ static int optvalue[] = { AF_UNSPEC, AF_INET, AF_INET6, 0 };
return optvalue[luaL_checkoption(L, narg, def, optname)];
}
@@ -220,7 +167,7 @@ static int inet_global_getaddrinfo(lua_State *L)
int i = 1, ret = 0;
memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
- hints.ai_family = PF_UNSPEC;
+ hints.ai_family = AF_UNSPEC;
ret = getaddrinfo(hostname, NULL, &hints, &resolved);
if (ret != 0) {
lua_pushnil(L);
@@ -229,9 +176,15 @@ static int inet_global_getaddrinfo(lua_State *L)
}
lua_newtable(L);
for (iterator = resolved; iterator; iterator = iterator->ai_next) {
- char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
- getnameinfo(iterator->ai_addr, (socklen_t) iterator->ai_addrlen, hbuf,
- (socklen_t) sizeof(hbuf), sbuf, 0, NI_NUMERICHOST);
+ char hbuf[NI_MAXHOST];
+ ret = getnameinfo(iterator->ai_addr, (socklen_t) iterator->ai_addrlen,
+ hbuf, (socklen_t) sizeof(hbuf), NULL, 0, NI_NUMERICHOST);
+ if (ret){
+ freeaddrinfo(resolved);
+ lua_pushnil(L);
+ lua_pushstring(L, socket_gaistrerror(ret));
+ return 2;
+ }
lua_pushnumber(L, i);
lua_newtable(L);
switch (iterator->ai_family) {
@@ -244,7 +197,17 @@ static int inet_global_getaddrinfo(lua_State *L)
lua_pushliteral(L, "family");
lua_pushliteral(L, "inet6");
lua_settable(L, -3);
- break;;
+ break;
+ case AF_UNSPEC:
+ lua_pushliteral(L, "family");
+ lua_pushliteral(L, "unspec");
+ lua_settable(L, -3);
+ break;
+ default:
+ lua_pushliteral(L, "family");
+ lua_pushliteral(L, "unknown");
+ lua_settable(L, -3);
+ break;
}
lua_pushliteral(L, "addr");
lua_pushstring(L, hbuf);
@@ -256,7 +219,6 @@ static int inet_global_getaddrinfo(lua_State *L)
return 1;
}
-
/*-------------------------------------------------------------------------*\
* Gets the host name
\*-------------------------------------------------------------------------*/
@@ -274,8 +236,6 @@ static int inet_global_gethostname(lua_State *L)
}
}
-
-
/*=========================================================================*\
* Lua methods
\*=========================================================================*/
@@ -284,44 +244,33 @@ static int inet_global_gethostname(lua_State *L)
\*-------------------------------------------------------------------------*/
int inet_meth_getpeername(lua_State *L, p_socket ps, int family)
{
+ int err;
+ struct sockaddr_storage peer;
+ socklen_t peer_len = sizeof(peer);
+ char name[INET6_ADDRSTRLEN];
+ char port[6]; /* 65535 = 5 bytes + 0 to terminate it */
+ if (getpeername(*ps, (SA *) &peer, &peer_len) < 0) {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(errno));
+ return 2;
+ }
+ err = getnameinfo((struct sockaddr *) &peer, peer_len,
+ name, INET6_ADDRSTRLEN,
+ port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, gai_strerror(err));
+ return 2;
+ }
+ lua_pushstring(L, name);
+ lua_pushinteger(L, (int) strtol(port, (char **) NULL, 10));
switch (family) {
- case PF_INET: {
- struct sockaddr_in peer;
- socklen_t peer_len = sizeof(peer);
- char name[INET_ADDRSTRLEN];
- if (getpeername(*ps, (SA *) &peer, &peer_len) < 0) {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(errno));
- return 2;
- } else {
- inet_ntop(family, &peer.sin_addr, name, sizeof(name));
- lua_pushstring(L, name);
- lua_pushnumber(L, ntohs(peer.sin_port));
- lua_pushliteral(L, "inet");
- return 3;
- }
- }
- case PF_INET6: {
- struct sockaddr_in6 peer;
- socklen_t peer_len = sizeof(peer);
- char name[INET6_ADDRSTRLEN];
- if (getpeername(*ps, (SA *) &peer, &peer_len) < 0) {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(errno));
- return 2;
- } else {
- inet_ntop(family, &peer.sin6_addr, name, sizeof(name));
- lua_pushstring(L, name);
- lua_pushnumber(L, ntohs(peer.sin6_port));
- lua_pushliteral(L, "inet6");
- return 3;
- }
- }
- default:
- lua_pushnil(L);
- lua_pushfstring(L, "unknown family %d", family);
- return 2;
+ case AF_INET: lua_pushliteral(L, "inet"); break;
+ case AF_INET6: lua_pushliteral(L, "inet6"); break;
+ case AF_UNSPEC: lua_pushliteral(L, "unspec"); break;
+ default: lua_pushliteral(L, "unknown"); break;
}
+ return 3;
}
/*-------------------------------------------------------------------------*\
@@ -329,44 +278,32 @@ int inet_meth_getpeername(lua_State *L, p_socket ps, int family)
\*-------------------------------------------------------------------------*/
int inet_meth_getsockname(lua_State *L, p_socket ps, int family)
{
+ int err;
+ struct sockaddr_storage peer;
+ socklen_t peer_len = sizeof(peer);
+ char name[INET6_ADDRSTRLEN];
+ char port[6]; /* 65535 = 5 bytes + 0 to terminate it */
+ if (getsockname(*ps, (SA *) &peer, &peer_len) < 0) {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(errno));
+ return 2;
+ }
+ err=getnameinfo((struct sockaddr *)&peer, peer_len,
+ name, INET6_ADDRSTRLEN, port, 6, NI_NUMERICHOST | NI_NUMERICSERV);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, gai_strerror(err));
+ return 2;
+ }
+ lua_pushstring(L, name);
+ lua_pushstring(L, port);
switch (family) {
- case PF_INET: {
- struct sockaddr_in local;
- socklen_t local_len = sizeof(local);
- char name[INET_ADDRSTRLEN];
- if (getsockname(*ps, (SA *) &local, &local_len) < 0) {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(errno));
- return 2;
- } else {
- inet_ntop(family, &local.sin_addr, name, sizeof(name));
- lua_pushstring(L, name);
- lua_pushnumber(L, ntohs(local.sin_port));
- lua_pushliteral(L, "inet");
- return 3;
- }
- }
- case PF_INET6: {
- struct sockaddr_in6 local;
- socklen_t local_len = sizeof(local);
- char name[INET6_ADDRSTRLEN];
- if (getsockname(*ps, (SA *) &local, &local_len) < 0) {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(errno));
- return 2;
- } else {
- inet_ntop(family, &local.sin6_addr, name, sizeof(name));
- lua_pushstring(L, name);
- lua_pushnumber(L, ntohs(local.sin6_port));
- lua_pushliteral(L, "inet6");
- return 3;
- }
- }
- default:
- lua_pushnil(L);
- lua_pushfstring(L, "unknown family %d", family);
- return 2;
+ case AF_INET: lua_pushliteral(L, "inet"); break;
+ case AF_INET6: lua_pushliteral(L, "inet6"); break;
+ case AF_UNSPEC: lua_pushliteral(L, "unspec"); break;
+ default: lua_pushliteral(L, "unknown"); break;
}
+ return 3;
}
/*=========================================================================*\
@@ -415,8 +352,13 @@ static void inet_pushresolved(lua_State *L, struct hostent *hp)
/*-------------------------------------------------------------------------*\
* Tries to create a new inet socket
\*-------------------------------------------------------------------------*/
-const char *inet_trycreate(p_socket ps, int family, int type) {
- return socket_strerror(socket_create(ps, family, type, 0));
+const char *inet_trycreate(p_socket ps, int family, int type, int protocol) {
+ const char *err = socket_strerror(socket_create(ps, family, type, protocol));
+ if (err == NULL && family == AF_INET6) {
+ int yes = 1;
+ setsockopt(*ps, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&yes, sizeof(yes));
+ }
+ return err;
}
/*-------------------------------------------------------------------------*\
@@ -425,22 +367,21 @@ const char *inet_trycreate(p_socket ps, int family, int type) {
const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm)
{
switch (family) {
- case PF_INET: {
+ case AF_INET: {
struct sockaddr_in sin;
memset((char *) &sin, 0, sizeof(sin));
sin.sin_family = AF_UNSPEC;
sin.sin_addr.s_addr = INADDR_ANY;
- return socket_strerror(socket_connect(ps, (SA *) &sin,
+ return socket_strerror(socket_connect(ps, (SA *) &sin,
sizeof(sin), tm));
}
- case PF_INET6: {
+ case AF_INET6: {
struct sockaddr_in6 sin6;
- struct in6_addr addrany = IN6ADDR_ANY_INIT;
+ struct in6_addr addrany = IN6ADDR_ANY_INIT;
memset((char *) &sin6, 0, sizeof(sin6));
sin6.sin6_family = AF_UNSPEC;
-fprintf(stderr, "disconnecting\n");
sin6.sin6_addr = addrany;
- return socket_strerror(socket_connect(ps, (SA *) &sin6,
+ return socket_strerror(socket_connect(ps, (SA *) &sin6,
sizeof(sin6), tm));
}
}
@@ -450,11 +391,12 @@ fprintf(stderr, "disconnecting\n");
/*-------------------------------------------------------------------------*\
* Tries to connect to remote address (address, port)
\*-------------------------------------------------------------------------*/
-const char *inet_tryconnect(p_socket ps, const char *address,
+const char *inet_tryconnect(p_socket ps, int *family, const char *address,
const char *serv, p_timeout tm, struct addrinfo *connecthints)
{
struct addrinfo *iterator = NULL, *resolved = NULL;
const char *err = NULL;
+ int current_family = *family;
/* try resolving */
err = socket_gaistrerror(getaddrinfo(address, serv,
connecthints, &resolved));
@@ -464,11 +406,28 @@ const char *inet_tryconnect(p_socket ps, const char *address,
}
for (iterator = resolved; iterator; iterator = iterator->ai_next) {
timeout_markstart(tm);
+ /* create new socket if necessary. if there was no
+ * bind, we need to create one for every new family
+ * that shows up while iterating. if there was a
+ * bind, all families will be the same and we will
+ * not enter this branch. */
+ if (current_family != iterator->ai_family || *ps == SOCKET_INVALID) {
+ socket_destroy(ps);
+ err = inet_trycreate(ps, iterator->ai_family,
+ iterator->ai_socktype, iterator->ai_protocol);
+ if (err) continue;
+ current_family = iterator->ai_family;
+ /* set non-blocking before connect */
+ socket_setnonblocking(ps);
+ }
/* try connecting to remote address */
- err = socket_strerror(socket_connect(ps, (SA *) iterator->ai_addr,
+ err = socket_strerror(socket_connect(ps, (SA *) iterator->ai_addr,
(socklen_t) iterator->ai_addrlen, tm));
- /* if success, break out of loop */
- if (err == NULL) break;
+ /* if success or timeout is zero, break out of loop */
+ if (err == NULL || timeout_iszero(tm)) {
+ *family = current_family;
+ break;
+ }
}
freeaddrinfo(resolved);
/* here, if err is set, we failed */
@@ -478,27 +437,30 @@ const char *inet_tryconnect(p_socket ps, const char *address,
/*-------------------------------------------------------------------------*\
* Tries to accept a socket
\*-------------------------------------------------------------------------*/
-const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm)
-{
+const char *inet_tryaccept(p_socket server, int family, p_socket client,
+ p_timeout tm) {
socklen_t len;
t_sockaddr_storage addr;
- if (family == PF_INET6) {
- len = sizeof(struct sockaddr_in6);
- } else {
- len = sizeof(struct sockaddr_in);
- }
- return socket_strerror(socket_accept(server, client, (SA *) &addr, &len, tm));
+ switch (family) {
+ case AF_INET6: len = sizeof(struct sockaddr_in6); break;
+ case AF_INET: len = sizeof(struct sockaddr_in); break;
+ default: len = sizeof(addr); break;
+ }
+ return socket_strerror(socket_accept(server, client, (SA *) &addr,
+ &len, tm));
}
/*-------------------------------------------------------------------------*\
* Tries to bind socket to (address, port)
\*-------------------------------------------------------------------------*/
-const char *inet_trybind(p_socket ps, const char *address, const char *serv,
- struct addrinfo *bindhints)
-{
+const char *inet_trybind(p_socket ps, int *family, const char *address,
+ const char *serv, struct addrinfo *bindhints) {
struct addrinfo *iterator = NULL, *resolved = NULL;
const char *err = NULL;
- t_socket sock = *ps;
+ int current_family = *family;
+ /* translate luasocket special values to C */
+ if (strcmp(address, "*") == 0) address = NULL;
+ if (!serv) serv = "0";
/* try resolving */
err = socket_gaistrerror(getaddrinfo(address, serv, bindhints, &resolved));
if (err) {
@@ -507,38 +469,34 @@ const char *inet_trybind(p_socket ps, const char *address, const char *serv,
}
/* iterate over resolved addresses until one is good */
for (iterator = resolved; iterator; iterator = iterator->ai_next) {
- if(sock == SOCKET_INVALID) {
- err = socket_strerror(socket_create(&sock, iterator->ai_family,
- iterator->ai_socktype, iterator->ai_protocol));
- if(err)
- continue;
+ if (current_family != iterator->ai_family || *ps == SOCKET_INVALID) {
+ socket_destroy(ps);
+ err = inet_trycreate(ps, iterator->ai_family,
+ iterator->ai_socktype, iterator->ai_protocol);
+ if (err) continue;
+ current_family = iterator->ai_family;
}
/* try binding to local address */
- err = socket_strerror(socket_bind(&sock,
- (SA *) iterator->ai_addr,
+ err = socket_strerror(socket_bind(ps, (SA *) iterator->ai_addr,
(socklen_t) iterator->ai_addrlen));
-
/* keep trying unless bind succeeded */
- if (err) {
- if(sock != *ps)
- socket_destroy(&sock);
- } else {
- /* remember what we connected to, particularly the family */
- *bindhints = *iterator;
+ if (err == NULL) {
+ *family = current_family;
+ /* set to non-blocking after bind */
+ socket_setnonblocking(ps);
break;
}
}
/* cleanup and return error */
freeaddrinfo(resolved);
- *ps = sock;
+ /* here, if err is set, we failed */
return err;
}
/*-------------------------------------------------------------------------*\
-* Some systems do not provide this so that we provide our own. It's not
-* marvelously fast, but it works just fine.
+* Some systems do not provide these so that we provide our own.
\*-------------------------------------------------------------------------*/
-#ifdef INET_ATON
+#ifdef LUASOCKET_INET_ATON
int inet_aton(const char *cp, struct in_addr *inp)
{
unsigned int a = 0, b = 0, c = 0, d = 0;
@@ -560,4 +518,26 @@ int inet_aton(const char *cp, struct in_addr *inp)
}
#endif
+#ifdef LUASOCKET_INET_PTON
+int inet_pton(int af, const char *src, void *dst)
+{
+ struct addrinfo hints, *res;
+ int ret = 1;
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = af;
+ hints.ai_flags = AI_NUMERICHOST;
+ if (getaddrinfo(src, NULL, &hints, &res) != 0) return -1;
+ if (af == AF_INET) {
+ struct sockaddr_in *in = (struct sockaddr_in *) res->ai_addr;
+ memcpy(dst, &in->sin_addr, sizeof(in->sin_addr));
+ } else if (af == AF_INET6) {
+ struct sockaddr_in6 *in = (struct sockaddr_in6 *) res->ai_addr;
+ memcpy(dst, &in->sin6_addr, sizeof(in->sin6_addr));
+ } else {
+ ret = -1;
+ }
+ freeaddrinfo(res);
+ return ret;
+}
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/inet.h b/Build/source/texk/web2c/luatexdir/luasocket/src/inet.h
index 4678ba656c4..928c7eb407e 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/inet.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/inet.h
@@ -1,12 +1,12 @@
-#ifndef INET_H
-#define INET_H
+#ifndef INET_H
+#define INET_H
/*=========================================================================*\
* Internet domain functions
* LuaSocket toolkit
*
* This module implements the creation and connection of internet domain
* sockets, on top of the socket.h interface, and the interface of with the
-* resolver.
+* resolver.
*
* The function inet_aton is provided for the platforms where it is not
* available. The module also implements the interface of the internet
@@ -19,16 +19,20 @@
#include "timeout.h"
#ifdef _WIN32
-#define INET_ATON
+#define LUASOCKET_INET_ATON
+#endif
+
+#if defined( __MINGW32__ ) || defined( __MINGW64__ )
+#define LUASOCKET_INET_PTON
#endif
int inet_open(lua_State *L);
-const char *inet_trycreate(p_socket ps, int family, int type);
-const char *inet_tryconnect(p_socket ps, const char *address,
+const char *inet_trycreate(p_socket ps, int family, int type, int protocol);
+const char *inet_tryconnect(p_socket ps, int *family, const char *address,
const char *serv, p_timeout tm, struct addrinfo *connecthints);
-const char *inet_trybind(p_socket ps, const char *address, const char *serv,
- struct addrinfo *bindhints);
+const char *inet_trybind(p_socket ps, int *family, const char *address,
+ const char *serv, struct addrinfo *bindhints);
const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm);
const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm);
@@ -38,8 +42,13 @@ int inet_meth_getsockname(lua_State *L, p_socket ps, int family);
int inet_optfamily(lua_State* L, int narg, const char* def);
int inet_optsocktype(lua_State* L, int narg, const char* def);
-#ifdef INET_ATON
+#ifdef LUASOCKET_INET_ATON
int inet_aton(const char *cp, struct in_addr *inp);
#endif
+#ifdef LUASOCKET_INET_PTON
+const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
+int inet_pton(int af, const char *src, void *dst);
+#endif
+
#endif /* INET_H */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/io.c b/Build/source/texk/web2c/luatexdir/luasocket/src/io.c
index 35f46f785a9..a4230ce82b8 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/io.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/io.c
@@ -25,6 +25,6 @@ const char *io_strerror(int err) {
case IO_DONE: return NULL;
case IO_CLOSED: return "closed";
case IO_TIMEOUT: return "timeout";
- default: return "unknown error";
+ default: return "unknown error";
}
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua
index fca1cb20ffd..0bdf2334aee 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua
@@ -9,17 +9,26 @@
-----------------------------------------------------------------------------
local string = require("string")
local table = require("table")
+local unpack = unpack or table.unpack
local base = _G
+local _M = {}
+if module then -- heuristic for exporting a global package table
+ ltn12 = _M
+end
module("ltn12")
+local filter,source,sink,pump = {},{},{},{}
+
+_M.filter = filter
+_M.source = source
+_M.sink = sink
+_M.pump = pump
-filter = {}
-source = {}
-sink = {}
-pump = {}
+local unpack = unpack or table.unpack
+local select = base.select
-- 2048 seems to be better in windows...
-BLOCKSIZE = 2048
-_VERSION = "LTN12 1.0.2"
+_M.BLOCKSIZE = 2048
+_M._VERSION = "LTN12 1.0.3"
-----------------------------------------------------------------------------
-- Filter stuff
@@ -38,7 +47,7 @@ end
-- (thanks to Wim Couwenberg)
function filter.chain(...)
local arg = {...}
- local n = #arg
+ local n = base.select('#',...)
local top, index = 1, 1
local retry = ""
return function(chunk)
@@ -89,7 +98,7 @@ end
function source.file(handle, io_err)
if handle then
return function()
- local chunk = handle:read(BLOCKSIZE)
+ local chunk = handle:read(_M.BLOCKSIZE)
if not chunk then handle:close() end
return chunk
end
@@ -112,8 +121,8 @@ function source.string(s)
if s then
local i = 1
return function()
- local chunk = string.sub(s, i, i+BLOCKSIZE-1)
- i = i + BLOCKSIZE
+ local chunk = string.sub(s, i, i+_M.BLOCKSIZE-1)
+ i = i + _M.BLOCKSIZE
if chunk ~= "" then return chunk
else return nil end
end
@@ -135,7 +144,9 @@ function source.rewind(src)
end
end
-function source.chain(src, f)
+-- chains a source with one or several filter(s)
+function source.chain(src, f, ...)
+ if ... then f=filter.chain(f, ...) end
base.assert(src and f)
local last_in, last_out = "", ""
local state = "feeding"
@@ -250,8 +261,13 @@ function sink.error(err)
end
end
--- chains a sink with a filter
-function sink.chain(f, snk)
+-- chains a sink with one or several filter(s)
+function sink.chain(f, snk, ...)
+ if ... then
+ local args = { f, snk, ... }
+ snk = table.remove(args, #args)
+ f = filter.chain(unpack(args))
+ end
base.assert(f and snk)
return function(chunk, err)
if chunk ~= "" then
@@ -291,3 +307,4 @@ function pump.all(src, snk, step)
end
end
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12_lua.c
index c8a6fb54d1d..226fc575464 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/ltn12_lua.c
@@ -1,421 +1,567 @@
/*
- * This file is auto-generated by "lua2c ltn12.lua ltn12_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_ltn12_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 76, 84, 78, 49, 50, 32, 45, 32, 70,105,108,116,101,114,115, 44, 32,115,111,
-117,114, 99,101,115, 44, 32,115,105,110,107,115, 32, 97,110,100, 32,112,117,109,
-112,115, 46, 10, 45, 45, 32, 76,117, 97, 83,111, 99,107,101,116, 32,116,111,111,
-108,107,105,116, 46, 10, 45, 45, 32, 65,117,116,104,111,114, 58, 32, 68,105,101,
-103,111, 32, 78,101,104, 97, 98, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101, 32,109,111,100,
-117,108,101, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 10,108,111, 99, 97,108, 32,115,116,114,105,110,103, 32, 61, 32,114,101,113,
-117,105,114,101, 40, 34,115,116,114,105,110,103, 34, 41, 10,108,111, 99, 97,108,
- 32,116, 97, 98,108,101, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,116, 97,
- 98,108,101, 34, 41, 10,108,111, 99, 97,108, 32, 98, 97,115,101, 32, 61, 32, 95,
- 71, 10,109,111,100,117,108,101, 40, 34,108,116,110, 49, 50, 34, 41, 10, 10,102,
-105,108,116,101,114, 32, 61, 32,123,125, 10,115,111,117,114, 99,101, 32, 61, 32,
-123,125, 10,115,105,110,107, 32, 61, 32,123,125, 10,112,117,109,112, 32, 61, 32,
-123,125, 10, 10, 45, 45, 32, 50, 48, 52, 56, 32,115,101,101,109,115, 32,116,111,
- 32, 98,101, 32, 98,101,116,116,101,114, 32,105,110, 32,119,105,110,100,111,119,
-115, 46, 46, 46, 10, 66, 76, 79, 67, 75, 83, 73, 90, 69, 32, 61, 32, 50, 48, 52,
- 56, 10, 95, 86, 69, 82, 83, 73, 79, 78, 32, 61, 32, 34, 76, 84, 78, 49, 50, 32,
- 49, 46, 48, 46, 50, 34, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 45, 45, 32, 70,105,108,116,101,114, 32,115,116,117,102,
-102, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,
- 45, 45, 32,114,101,116,117,114,110,115, 32, 97, 32,104,105,103,104, 32,108,101,
-118,101,108, 32,102,105,108,116,101,114, 32,116,104, 97,116, 32, 99,121, 99,108,
-101,115, 32, 97, 32,108,111,119, 45,108,101,118,101,108, 32,102,105,108,116,101,
-114, 10,102,117,110, 99,116,105,111,110, 32,102,105,108,116,101,114, 46, 99,121,
- 99,108,101, 40,108,111,119, 44, 32, 99,116,120, 44, 32,101,120,116,114, 97, 41,
- 10, 32, 32, 32, 32, 98, 97,115,101, 46, 97,115,115,101,114,116, 40,108,111,119,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,105,111,
-110, 40, 99,104,117,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99,
- 97,108, 32,114,101,116, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116, 44, 32,
- 99,116,120, 32, 61, 32,108,111,119, 40, 99,116,120, 44, 32, 99,104,117,110,107,
- 44, 32,101,120,116,114, 97, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,
-117,114,110, 32,114,101,116, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10,
- 10, 45, 45, 32, 99,104, 97,105,110,115, 32, 97, 32, 98,117,110, 99,104, 32,111,
-102, 32,102,105,108,116,101,114,115, 32,116,111,103,101,116,104,101,114, 10, 45,
- 45, 32, 40,116,104, 97,110,107,115, 32,116,111, 32, 87,105,109, 32, 67,111,117,
-119,101,110, 98,101,114,103, 41, 10,102,117,110, 99,116,105,111,110, 32,102,105,
-108,116,101,114, 46, 99,104, 97,105,110, 40, 46, 46, 46, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32, 97,114,103, 32, 61, 32,123, 46, 46, 46,125, 10, 32, 32,
- 32, 32,108,111, 99, 97,108, 32,110, 32, 61, 32, 35, 97,114,103, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32,116,111,112, 44, 32,105,110,100,101,120, 32, 61, 32,
- 49, 44, 32, 49, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,116,114,121,
- 32, 61, 32, 34, 34, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110,
- 99,116,105,111,110, 40, 99,104,117,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,114,101,116,114,121, 32, 61, 32, 99,104,117,110,107, 32, 97,110,100, 32,114,
-101,116,114,121, 10, 32, 32, 32, 32, 32, 32, 32, 32,119,104,105,108,101, 32,116,
-114,117,101, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,
-102, 32,105,110,100,101,120, 32, 61, 61, 32,116,111,112, 32,116,104,101,110, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99,104,117,110,
-107, 32, 61, 32, 97,114,103, 91,105,110,100,101,120, 93, 40, 99,104,117,110,107,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102,
- 32, 99,104,117,110,107, 32, 61, 61, 32, 34, 34, 32,111,114, 32,116,111,112, 32,
- 61, 61, 32,110, 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 99,104,117,
-110,107, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,
-108,115,101,105,102, 32, 99,104,117,110,107, 32,116,104,101,110, 32,105,110,100,
-101,120, 32, 61, 32,105,110,100,101,120, 32, 43, 32, 49, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,116,111,112, 32,
- 61, 32,116,111,112, 43, 49, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,105,110,100,101,120, 32, 61, 32,116,111,112, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99,104,117,110,107, 32, 61,
- 32, 97,114,103, 91,105,110,100,101,120, 93, 40, 99,104,117,110,107, 32,111,114,
- 32, 34, 34, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,105,102, 32, 99,104,117,110,107, 32, 61, 61, 32, 34, 34, 32,116,104,101,110,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,105,110,100,101,120, 32, 61, 32,105,110,100,101,120, 32, 45, 32, 49, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99,
-104,117,110,107, 32, 61, 32,114,101,116,114,121, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101,105,102, 32, 99,104,117,110,
-107, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32,105,102, 32,105,110,100,101,120, 32, 61, 61, 32,110,
- 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 99,104,117,110,107, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,
-108,115,101, 32,105,110,100,101,120, 32, 61, 32,105,110,100,101,120, 32, 43, 32,
- 49, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,101,108,115,101, 32, 98, 97,115,101, 46,101,114,114,111,114, 40, 34,102,
-105,108,116,101,114, 32,114,101,116,117,114,110,101,100, 32,105,110, 97,112,112,
-114,111,112,114,105, 97,116,101, 32,110,105,108, 34, 41, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 83,111,117,114, 99,101, 32,115,116,117,102,102, 10, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 99,114,101, 97,116,
-101, 32, 97,110, 32,101,109,112,116,121, 32,115,111,117,114, 99,101, 10,108,111,
- 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,101,109,112,116,121, 40, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,105,108, 10,101,110,100, 10,
- 10,102,117,110, 99,116,105,111,110, 32,115,111,117,114, 99,101, 46,101,109,112,
-116,121, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,101,109,112,116,
-121, 10,101,110,100, 10, 10, 45, 45, 32,114,101,116,117,114,110,115, 32, 97, 32,
-115,111,117,114, 99,101, 32,116,104, 97,116, 32,106,117,115,116, 32,111,117,116,
-112,117,116,115, 32, 97,110, 32,101,114,114,111,114, 10,102,117,110, 99,116,105,
-111,110, 32,115,111,117,114, 99,101, 46,101,114,114,111,114, 40,101,114,114, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,105,111,110,
- 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,105,
-108, 44, 32,101,114,114, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,
- 45, 45, 32, 99,114,101, 97,116,101,115, 32, 97, 32,102,105,108,101, 32,115,111,
-117,114, 99,101, 10,102,117,110, 99,116,105,111,110, 32,115,111,117,114, 99,101,
- 46,102,105,108,101, 40,104, 97,110,100,108,101, 44, 32,105,111, 95,101,114,114,
- 41, 10, 32, 32, 32, 32,105,102, 32,104, 97,110,100,108,101, 32,116,104,101,110,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,
-116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,
-111, 99, 97,108, 32, 99,104,117,110,107, 32, 61, 32,104, 97,110,100,108,101, 58,
-114,101, 97,100, 40, 66, 76, 79, 67, 75, 83, 73, 90, 69, 41, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 99,104,117,110,107,
- 32,116,104,101,110, 32,104, 97,110,100,108,101, 58, 99,108,111,115,101, 40, 41,
- 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,
-117,114,110, 32, 99,104,117,110,107, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,
-100, 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,115,111,
-117,114, 99,101, 46,101,114,114,111,114, 40,105,111, 95,101,114,114, 32,111,114,
- 32, 34,117,110, 97, 98,108,101, 32,116,111, 32,111,112,101,110, 32,102,105,108,
-101, 34, 41, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,116,117,114,110,
-115, 32, 97, 32,102, 97,110, 99,121, 32,115,111,117,114, 99,101, 32,105,110,116,
-111, 32, 97, 32,115,105,109,112,108,101, 32,115,111,117,114, 99,101, 10,102,117,
-110, 99,116,105,111,110, 32,115,111,117,114, 99,101, 46,115,105,109,112,108,105,
-102,121, 40,115,114, 99, 41, 10, 32, 32, 32, 32, 98, 97,115,101, 46, 97,115,115,
-101,114,116, 40,115,114, 99, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-102,117,110, 99,116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,
-111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,114, 95,111,114, 95,110,
-101,119, 32, 61, 32,115,114, 99, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,
-114, 99, 32, 61, 32,101,114,114, 95,111,114, 95,110,101,119, 32,111,114, 32,115,
-114, 99, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 99,104,
-117,110,107, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44,
- 32,101,114,114, 95,111,114, 95,110,101,119, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,108,115,101, 32,114,101,116,117,114,110, 32, 99,104,117,110,107, 32,101,110,
-100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32, 99,114,
-101, 97,116,101,115, 32,115,116,114,105,110,103, 32,115,111,117,114, 99,101, 10,
-102,117,110, 99,116,105,111,110, 32,115,111,117,114, 99,101, 46,115,116,114,105,
-110,103, 40,115, 41, 10, 32, 32, 32, 32,105,102, 32,115, 32,116,104,101,110, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,105, 32, 61, 32, 49, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,
-105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,111,
- 99, 97,108, 32, 99,104,117,110,107, 32, 61, 32,115,116,114,105,110,103, 46,115,
-117, 98, 40,115, 44, 32,105, 44, 32,105, 43, 66, 76, 79, 67, 75, 83, 73, 90, 69,
- 45, 49, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105, 32, 61, 32,
-105, 32, 43, 32, 66, 76, 79, 67, 75, 83, 73, 90, 69, 10, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32,126, 61, 32, 34, 34,
- 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 99,104,117,110,107, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,
-114,110, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,
-110,100, 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,115,
-111,117,114, 99,101, 46,101,109,112,116,121, 40, 41, 32,101,110,100, 10,101,110,
-100, 10, 10, 45, 45, 32, 99,114,101, 97,116,101,115, 32,114,101,119,105,110,100,
- 97, 98,108,101, 32,115,111,117,114, 99,101, 10,102,117,110, 99,116,105,111,110,
- 32,115,111,117,114, 99,101, 46,114,101,119,105,110,100, 40,115,114, 99, 41, 10,
- 32, 32, 32, 32, 98, 97,115,101, 46, 97,115,115,101,114,116, 40,115,114, 99, 41,
- 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,116, 32, 61, 32,123,125, 10, 32, 32,
- 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,105,111,110, 40, 99,104,
-117,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,
- 99,104,117,110,107, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 99,104,117,110,107, 32, 61, 32,116, 97, 98,108,101, 46,114,101,109,
-111,118,101, 40,116, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,
-102, 32,110,111,116, 32, 99,104,117,110,107, 32,116,104,101,110, 32,114,101,116,
-117,114,110, 32,115,114, 99, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32, 99,104,117,110,107, 32,
-101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,116, 97, 98,108,101, 46,105,110,115,101,114,
-116, 40,116, 44, 32, 99,104,117,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,102,117,110,
- 99,116,105,111,110, 32,115,111,117,114, 99,101, 46, 99,104, 97,105,110, 40,115,
-114, 99, 44, 32,102, 41, 10, 32, 32, 32, 32, 98, 97,115,101, 46, 97,115,115,101,
-114,116, 40,115,114, 99, 32, 97,110,100, 32,102, 41, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,108, 97,115,116, 95,105,110, 44, 32,108, 97,115,116, 95,111,117,
-116, 32, 61, 32, 34, 34, 44, 32, 34, 34, 10, 32, 32, 32, 32,108,111, 99, 97,108,
- 32,115,116, 97,116,101, 32, 61, 32, 34,102,101,101,100,105,110,103, 34, 10, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,101,114,114, 10, 32, 32, 32, 32,114,101,116,
-117,114,110, 32,102,117,110, 99,116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,110,111,116, 32,108, 97,115,116, 95,111,117,116, 32,116,
-104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 98, 97,115,101,
- 46,101,114,114,111,114, 40, 39,115,111,117,114, 99,101, 32,105,115, 32,101,109,
-112,116,121, 33, 39, 44, 32, 50, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,
-100, 10, 32, 32, 32, 32, 32, 32, 32, 32,119,104,105,108,101, 32,116,114,117,101,
- 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,115,
-116, 97,116,101, 32, 61, 61, 32, 34,102,101,101,100,105,110,103, 34, 32,116,104,
-101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,
- 97,115,116, 95,105,110, 44, 32,101,114,114, 32, 61, 32,115,114, 99, 40, 41, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,101,
-114,114, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,
-101,114,114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,108, 97,115,116, 95,111,117,116, 32, 61, 32,102, 40,108, 97,115,
-116, 95,105,110, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,110,111,116, 32,108, 97,115,116, 95,111,117,116, 32,116,104,
-101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,108, 97,115,116, 95,105,110, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 98, 97,115,101, 46,101,114,114,111,114, 40, 39,102,105,108,116,101,
-114, 32,114,101,116,117,114,110,101,100, 32,105,110, 97,112,112,114,111,112,114,
-105, 97,116,101, 32,110,105,108, 39, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,110,105,108, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101,105,102, 32,108, 97,
-115,116, 95,111,117,116, 32,126, 61, 32, 34, 34, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,116,
- 97,116,101, 32, 61, 32, 34,101, 97,116,105,110,103, 34, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,108, 97,
-115,116, 95,105,110, 32,116,104,101,110, 32,108, 97,115,116, 95,105,110, 32, 61,
- 32, 34, 34, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,108, 97,115,116, 95,
-111,117,116, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108, 97,115,
-116, 95,111,117,116, 32, 61, 32,102, 40,108, 97,115,116, 95,105,110, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,108, 97,
-115,116, 95,111,117,116, 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102,
- 32,108, 97,115,116, 95,105,110, 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,115,116, 97,116,101, 32, 61, 32, 34,102,101,101,100,105,110,103,
- 34, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 98, 97,115,101, 46,101,114,114,111,
-114, 40, 39,102,105,108,116,101,114, 32,114,101,116,117,114,110,101,100, 32, 34,
- 34, 39, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,101,108,115,101,105,102, 32,110,111,116, 32,108, 97,115,116, 95,
-111,117,116, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,108, 97,115,116, 95,105,110, 32,
-116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 98, 97,115,101, 46,101,114,114,111,114, 40,
- 39,102,105,108,116,101,114, 32,114,101,116,117,114,110,101,100, 32,105,110, 97,
-112,112,114,111,112,114,105, 97,116,101, 32,110,105,108, 39, 41, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,
-101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,105,108, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,
-101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,114,101,116,117,114,110, 32,108, 97,115,116, 95,111,117,116, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10, 45,
- 45, 32, 99,114,101, 97,116,101,115, 32, 97, 32,115,111,117,114, 99,101, 32,116,
-104, 97,116, 32,112,114,111,100,117, 99,101,115, 32, 99,111,110,116,101,110,116,
-115, 32,111,102, 32,115,101,118,101,114, 97,108, 32,115,111,117,114, 99,101,115,
- 44, 32,111,110,101, 32, 97,102,116,101,114, 32,116,104,101, 10, 45, 45, 32,111,
-116,104,101,114, 44, 32, 97,115, 32,105,102, 32,116,104,101,121, 32,119,101,114,
-101, 32, 99,111,110, 99, 97,116,101,110, 97,116,101,100, 10, 45, 45, 32, 40,116,
-104, 97,110,107,115, 32,116,111, 32, 87,105,109, 32, 67,111,117,119,101,110, 98,
-101,114,103, 41, 10,102,117,110, 99,116,105,111,110, 32,115,111,117,114, 99,101,
- 46, 99, 97,116, 40, 46, 46, 46, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,
- 97,114,103, 32, 61, 32,123, 46, 46, 46,125, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,115,114, 99, 32, 61, 32,116, 97, 98,108,101, 46,114,101,109,111,118,101,
- 40, 97,114,103, 44, 32, 49, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-102,117,110, 99,116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,119,
-104,105,108,101, 32,115,114, 99, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,114,
- 32, 61, 32,115,114, 99, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,105,102, 32, 99,104,117,110,107, 32,116,104,101,110, 32,114,101,116,117,114,
-110, 32, 99,104,117,110,107, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,105,102, 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,
-114,110, 32,110,105,108, 44, 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,115,114, 99, 32, 61, 32,116, 97, 98,108,101, 46,
-114,101,109,111,118,101, 40, 97,114,103, 44, 32, 49, 41, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 83,105,110,107, 32,115,116,117,102,102, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 99,114,101, 97,116,101,115,
- 32, 97, 32,115,105,110,107, 32,116,104, 97,116, 32,115,116,111,114,101,115, 32,
-105,110,116,111, 32, 97, 32,116, 97, 98,108,101, 10,102,117,110, 99,116,105,111,
-110, 32,115,105,110,107, 46,116, 97, 98,108,101, 40,116, 41, 10, 32, 32, 32, 32,
-116, 32, 61, 32,116, 32,111,114, 32,123,125, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,102, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 99,104,117,110,107,
- 44, 32,101,114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32, 99,104,
-117,110,107, 32,116,104,101,110, 32,116, 97, 98,108,101, 46,105,110,115,101,114,
-116, 40,116, 44, 32, 99,104,117,110,107, 41, 32,101,110,100, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,114,101,116,117,114,110, 32, 49, 10, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102, 44, 32,116, 10,101,110,100,
- 10, 10, 45, 45, 32,116,117,114,110,115, 32, 97, 32,102, 97,110, 99,121, 32,115,
-105,110,107, 32,105,110,116,111, 32, 97, 32,115,105,109,112,108,101, 32,115,105,
-110,107, 10,102,117,110, 99,116,105,111,110, 32,115,105,110,107, 46,115,105,109,
-112,108,105,102,121, 40,115,110,107, 41, 10, 32, 32, 32, 32, 98, 97,115,101, 46,
- 97,115,115,101,114,116, 40,115,110,107, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32,102,117,110, 99,116,105,111,110, 40, 99,104,117,110,107, 44, 32,101,
-114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,
-116, 44, 32,101,114,114, 95,111,114, 95,110,101,119, 32, 61, 32,115,110,107, 40,
- 99,104,117,110,107, 44, 32,101,114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-105,102, 32,110,111,116, 32,114,101,116, 32,116,104,101,110, 32,114,101,116,117,
-114,110, 32,110,105,108, 44, 32,101,114,114, 95,111,114, 95,110,101,119, 32,101,
-110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,110,107, 32, 61, 32,101,114,114,
- 95,111,114, 95,110,101,119, 32,111,114, 32,115,110,107, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,114,101,116,117,114,110, 32, 49, 10, 32, 32, 32, 32,101,110,100, 10,
-101,110,100, 10, 10, 45, 45, 32, 99,114,101, 97,116,101,115, 32, 97, 32,102,105,
-108,101, 32,115,105,110,107, 10,102,117,110, 99,116,105,111,110, 32,115,105,110,
-107, 46,102,105,108,101, 40,104, 97,110,100,108,101, 44, 32,105,111, 95,101,114,
-114, 41, 10, 32, 32, 32, 32,105,102, 32,104, 97,110,100,108,101, 32,116,104,101,
-110, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110,
- 99,116,105,111,110, 40, 99,104,117,110,107, 44, 32,101,114,114, 41, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 99,104,117,
-110,107, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,104, 97,110,100,108,101, 58, 99,108,111,115,101, 40, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,
-110, 32, 49, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101,
- 32,114,101,116,117,114,110, 32,104, 97,110,100,108,101, 58,119,114,105,116,101,
- 40, 99,104,117,110,107, 41, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,
-115,105,110,107, 46,101,114,114,111,114, 40,105,111, 95,101,114,114, 32,111,114,
- 32, 34,117,110, 97, 98,108,101, 32,116,111, 32,111,112,101,110, 32,102,105,108,
-101, 34, 41, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32, 99,114,101, 97,
-116,101,115, 32, 97, 32,115,105,110,107, 32,116,104, 97,116, 32,100,105,115, 99,
- 97,114,100,115, 32,100, 97,116, 97, 10,108,111, 99, 97,108, 32,102,117,110, 99,
-116,105,111,110, 32,110,117,108,108, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32, 49, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,115,
-105,110,107, 46,110,117,108,108, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,110,117,108,108, 10,101,110,100, 10, 10, 45, 45, 32, 99,114,101, 97,116,
-101,115, 32, 97, 32,115,105,110,107, 32,116,104, 97,116, 32,106,117,115,116, 32,
-114,101,116,117,114,110,115, 32, 97,110, 32,101,114,114,111,114, 10,102,117,110,
- 99,116,105,111,110, 32,115,105,110,107, 46,101,114,114,111,114, 40,101,114,114,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,105,111,
-110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,
-105,108, 44, 32,101,114,114, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10,
- 10, 45, 45, 32, 99,104, 97,105,110,115, 32, 97, 32,115,105,110,107, 32,119,105,
-116,104, 32, 97, 32,102,105,108,116,101,114, 10,102,117,110, 99,116,105,111,110,
- 32,115,105,110,107, 46, 99,104, 97,105,110, 40,102, 44, 32,115,110,107, 41, 10,
- 32, 32, 32, 32, 98, 97,115,101, 46, 97,115,115,101,114,116, 40,102, 32, 97,110,
-100, 32,115,110,107, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,
-110, 99,116,105,111,110, 40, 99,104,117,110,107, 44, 32,101,114,114, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32,126, 61, 32, 34,
- 34, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,102,105,108,116,101,114,101,100, 32, 61, 32,102, 40, 99,104,
-117,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99,
- 97,108, 32,100,111,110,101, 32, 61, 32, 99,104,117,110,107, 32, 97,110,100, 32,
- 34, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,119,104,105,108,101,
- 32,116,114,117,101, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,116, 44, 32,115,110,107,101,
-114,114, 32, 61, 32,115,110,107, 40,102,105,108,116,101,114,101,100, 44, 32,101,
-114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-105,102, 32,110,111,116, 32,114,101,116, 32,116,104,101,110, 32,114,101,116,117,
-114,110, 32,110,105,108, 44, 32,115,110,107,101,114,114, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,102,105,
-108,116,101,114,101,100, 32, 61, 61, 32,100,111,110,101, 32,116,104,101,110, 32,
-114,101,116,117,114,110, 32, 49, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,102,105,108,116,101,114,101,100, 32, 61, 32,
-102, 40,100,111,110,101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,
-117,114,110, 32, 49, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,
-100, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 10, 45, 45, 32, 80,117,109,112, 32,115,116,117,102,102, 10, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,112,117,109,112,
-115, 32,111,110,101, 32, 99,104,117,110,107, 32,102,114,111,109, 32,116,104,101,
- 32,115,111,117,114, 99,101, 32,116,111, 32,116,104,101, 32,115,105,110,107, 10,
-102,117,110, 99,116,105,111,110, 32,112,117,109,112, 46,115,116,101,112, 40,115,
-114, 99, 44, 32,115,110,107, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,
-104,117,110,107, 44, 32,115,114, 99, 95,101,114,114, 32, 61, 32,115,114, 99, 40,
- 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,116, 44, 32,115,110,107,
- 95,101,114,114, 32, 61, 32,115,110,107, 40, 99,104,117,110,107, 44, 32,115,114,
- 99, 95,101,114,114, 41, 10, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32,
- 97,110,100, 32,114,101,116, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,
- 49, 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,110,105,
-108, 44, 32,115,114, 99, 95,101,114,114, 32,111,114, 32,115,110,107, 95,101,114,
-114, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,112,117,109,112,115, 32,
- 97,108,108, 32,100, 97,116, 97, 32,102,114,111,109, 32, 97, 32,115,111,117,114,
- 99,101, 32,116,111, 32, 97, 32,115,105,110,107, 44, 32,117,115,105,110,103, 32,
- 97, 32,115,116,101,112, 32,102,117,110, 99,116,105,111,110, 10,102,117,110, 99,
-116,105,111,110, 32,112,117,109,112, 46, 97,108,108, 40,115,114, 99, 44, 32,115,
-110,107, 44, 32,115,116,101,112, 41, 10, 32, 32, 32, 32, 98, 97,115,101, 46, 97,
-115,115,101,114,116, 40,115,114, 99, 32, 97,110,100, 32,115,110,107, 41, 10, 32,
- 32, 32, 32,115,116,101,112, 32, 61, 32,115,116,101,112, 32,111,114, 32,112,117,
-109,112, 46,115,116,101,112, 10, 32, 32, 32, 32,119,104,105,108,101, 32,116,114,
-117,101, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,
-114,101,116, 44, 32,101,114,114, 32, 61, 32,115,116,101,112, 40,115,114, 99, 44,
- 32,115,110,107, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116,
- 32,114,101,116, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,114,110,
- 32,110,105,108, 44, 32,101,114,114, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32, 49, 32,101,110,100, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,
-101,110,100, 10, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x75, 0x6e,
+ 0x70, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63,
+ 0x6b, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x75,
+ 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+ 0x69, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x68, 0x65, 0x75, 0x72, 0x69, 0x73,
+ 0x74, 0x69, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x70, 0x6f,
+ 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x67, 0x6c, 0x6f, 0x62,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x74, 0x6e,
+ 0x31, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x28, 0x22, 0x6c, 0x74, 0x6e, 0x31,
+ 0x32, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x69,
+ 0x6c, 0x74, 0x65, 0x72, 0x2c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c,
+ 0x73, 0x69, 0x6e, 0x6b, 0x2c, 0x70, 0x75, 0x6d, 0x70, 0x20, 0x3d, 0x20,
+ 0x7b, 0x7d, 0x2c, 0x7b, 0x7d, 0x2c, 0x7b, 0x7d, 0x2c, 0x7b, 0x7d, 0x0a,
+ 0x5f, 0x4d, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20,
+ 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x20, 0x3d, 0x20,
+ 0x73, 0x69, 0x6e, 0x6b, 0x0a, 0x5f, 0x4d, 0x2e, 0x70, 0x75, 0x6d, 0x70,
+ 0x20, 0x3d, 0x20, 0x70, 0x75, 0x6d, 0x70, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x75,
+ 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x2e, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x3d,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x0a, 0x5f, 0x4d, 0x2e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a,
+ 0x45, 0x20, 0x3d, 0x20, 0x32, 0x30, 0x34, 0x38, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, 0x22,
+ 0x4c, 0x54, 0x4e, 0x31, 0x32, 0x20, 0x31, 0x2e, 0x30, 0x2e, 0x33, 0x22,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69,
+ 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x28, 0x6c,
+ 0x6f, 0x77, 0x2c, 0x20, 0x63, 0x74, 0x78, 0x2c, 0x20, 0x65, 0x78, 0x74,
+ 0x72, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6c, 0x6f, 0x77, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x63,
+ 0x74, 0x78, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x77, 0x28, 0x63, 0x74, 0x78,
+ 0x2c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x78, 0x74,
+ 0x72, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x28, 0x2e, 0x2e, 0x2e,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x61, 0x72, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x2e, 0x2e, 0x2e, 0x7d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x20,
+ 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x28, 0x27, 0x23, 0x27, 0x2c, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x70,
+ 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x31, 0x2c,
+ 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x72, 0x65, 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x22, 0x22, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x72, 0x79, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65,
+ 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x74, 0x6f, 0x70,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68,
+ 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x5b, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x5d, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f,
+ 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x20, 0x2b, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f,
+ 0x70, 0x20, 0x3d, 0x20, 0x74, 0x6f, 0x70, 0x2b, 0x31, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20,
+ 0x3d, 0x20, 0x74, 0x6f, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x5b, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20,
+ 0x6f, 0x72, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x3d, 0x20, 0x22,
+ 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2d, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d,
+ 0x20, 0x72, 0x65, 0x74, 0x72, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d,
+ 0x20, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20,
+ 0x2b, 0x20, 0x31, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x28, 0x22, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61,
+ 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x6e,
+ 0x69, 0x6c, 0x22, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e,
+ 0x69, 0x6c, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x65,
+ 0x6d, 0x70, 0x74, 0x79, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x28, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x66, 0x69, 0x6c,
+ 0x65, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x6f,
+ 0x5f, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a,
+ 0x72, 0x65, 0x61, 0x64, 0x28, 0x5f, 0x4d, 0x2e, 0x42, 0x4c, 0x4f, 0x43,
+ 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x63, 0x6c, 0x6f, 0x73,
+ 0x65, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x28, 0x69, 0x6f, 0x5f, 0x65, 0x72, 0x72, 0x20, 0x6f, 0x72, 0x20,
+ 0x22, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f,
+ 0x70, 0x65, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x29, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x73,
+ 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x79, 0x28, 0x73, 0x72, 0x63, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x61, 0x73,
+ 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x72, 0x63, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68,
+ 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6f, 0x72, 0x5f,
+ 0x6e, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20,
+ 0x3d, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x65, 0x77,
+ 0x20, 0x6f, 0x72, 0x20, 0x73, 0x72, 0x63, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x65, 0x77, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x20, 0x3d,
+ 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x73, 0x2c, 0x20, 0x69, 0x2c, 0x20,
+ 0x69, 0x2b, 0x5f, 0x4d, 0x2e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49,
+ 0x5a, 0x45, 0x2d, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x69, 0x20,
+ 0x2b, 0x20, 0x5f, 0x4d, 0x2e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49,
+ 0x5a, 0x45, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20,
+ 0x7e, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x65, 0x6d, 0x70, 0x74, 0x79,
+ 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x2e, 0x72, 0x65, 0x77, 0x69, 0x6e, 0x64, 0x28, 0x73, 0x72,
+ 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x72, 0x63, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x20,
+ 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68,
+ 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
+ 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x28, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x72, 0x63, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e,
+ 0x73, 0x65, 0x72, 0x74, 0x28, 0x74, 0x2c, 0x20, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e,
+ 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x66, 0x2c, 0x20, 0x2e, 0x2e, 0x2e,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x2e, 0x2e, 0x2e,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x66, 0x3d, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x28, 0x66, 0x2c, 0x20,
+ 0x2e, 0x2e, 0x2e, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74,
+ 0x28, 0x73, 0x72, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x61,
+ 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f,
+ 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x66, 0x65, 0x65, 0x64,
+ 0x69, 0x6e, 0x67, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74,
+ 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74,
+ 0x79, 0x21, 0x27, 0x2c, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x72,
+ 0x75, 0x65, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x61,
+ 0x74, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x66, 0x65, 0x65, 0x64, 0x69,
+ 0x6e, 0x67, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d,
+ 0x20, 0x66, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c,
+ 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28,
+ 0x27, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f,
+ 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x69, 0x6c, 0x27, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20,
+ 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x7e, 0x3d, 0x20,
+ 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20,
+ 0x22, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x61, 0x73, 0x74,
+ 0x5f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x61, 0x73,
+ 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75,
+ 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f,
+ 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x28, 0x6c, 0x61, 0x73, 0x74,
+ 0x5f, 0x69, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x3d, 0x20,
+ 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f,
+ 0x69, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x66,
+ 0x65, 0x65, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x66, 0x69, 0x6c,
+ 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64,
+ 0x20, 0x22, 0x22, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x61, 0x73,
+ 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x61,
+ 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27, 0x66,
+ 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+ 0x69, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x69, 0x6c, 0x27, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c,
+ 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e,
+ 0x63, 0x61, 0x74, 0x28, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x72, 0x67, 0x20, 0x3d,
+ 0x20, 0x7b, 0x2e, 0x2e, 0x2e, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x28,
+ 0x61, 0x72, 0x67, 0x2c, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x72, 0x63, 0x20,
+ 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x72,
+ 0x63, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x72, 0x63, 0x20, 0x3d,
+ 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x28, 0x61, 0x72, 0x67, 0x2c, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2e,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63,
+ 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x74,
+ 0x2c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x66, 0x2c, 0x20, 0x74, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2e,
+ 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x79, 0x28, 0x73, 0x6e, 0x6b,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x61,
+ 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x73, 0x6e, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x74,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x65, 0x77,
+ 0x20, 0x3d, 0x20, 0x73, 0x6e, 0x6b, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x5f, 0x6f,
+ 0x72, 0x5f, 0x6e, 0x65, 0x77, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6e, 0x6b, 0x20, 0x3d, 0x20,
+ 0x65, 0x72, 0x72, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x65, 0x77, 0x20, 0x6f,
+ 0x72, 0x20, 0x73, 0x6e, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b,
+ 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x28, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65,
+ 0x2c, 0x20, 0x69, 0x6f, 0x5f, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20,
+ 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x3a, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c,
+ 0x65, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x69, 0x6f,
+ 0x5f, 0x65, 0x72, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x75, 0x6e, 0x61,
+ 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20,
+ 0x66, 0x69, 0x6c, 0x65, 0x22, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x28, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x31, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2e, 0x6e, 0x75, 0x6c, 0x6c,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b,
+ 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x65, 0x72, 0x72, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x2e,
+ 0x63, 0x68, 0x61, 0x69, 0x6e, 0x28, 0x66, 0x2c, 0x20, 0x73, 0x6e, 0x6b,
+ 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x66, 0x2c,
+ 0x20, 0x73, 0x6e, 0x6b, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x7d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6e, 0x6b, 0x20,
+ 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x72, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x23, 0x61, 0x72,
+ 0x67, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63,
+ 0x68, 0x61, 0x69, 0x6e, 0x28, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x28,
+ 0x61, 0x72, 0x67, 0x73, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x66, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x73, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66,
+ 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68,
+ 0x69, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x64, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65,
+ 0x74, 0x2c, 0x20, 0x73, 0x6e, 0x6b, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20,
+ 0x73, 0x6e, 0x6b, 0x28, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69,
+ 0x6c, 0x2c, 0x20, 0x73, 0x6e, 0x6b, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x69, 0x6c,
+ 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x64, 0x6f, 0x6e,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x31, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x66,
+ 0x28, 0x64, 0x6f, 0x6e, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x75,
+ 0x6d, 0x70, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x28, 0x73, 0x72, 0x63, 0x2c,
+ 0x20, 0x73, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x73,
+ 0x72, 0x63, 0x5f, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x73, 0x6e, 0x6b, 0x5f, 0x65, 0x72,
+ 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6e, 0x6b, 0x28, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x5f, 0x65, 0x72, 0x72, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x5f,
+ 0x65, 0x72, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6e, 0x6b, 0x5f, 0x65,
+ 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x75, 0x6d, 0x70,
+ 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x6e,
+ 0x6b, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74,
+ 0x28, 0x73, 0x72, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6e, 0x6b,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d,
+ 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x75, 0x6d,
+ 0x70, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77,
+ 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x64, 0x6f,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x65, 0x70, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20,
+ 0x73, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d,
+ 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/lua_preload.c b/Build/source/texk/web2c/luatexdir/luasocket/src/lua_preload.c
index 10b39407c80..b30f9a805fe 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/lua_preload.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/lua_preload.c
@@ -3,16 +3,17 @@
#include "lua.h"
#include "lauxlib.h"
-#include "headers_lua.c"
-#include "mbox_lua.c"
-#include "socket_lua.c"
#include "ftp_lua.c"
+#include "headers_lua.c"
#include "http_lua.c"
-#include "smtp_lua.c"
-#include "tp_lua.c"
-#include "url_lua.c"
#include "ltn12_lua.c"
+#include "mbox_lua.c"
#include "mime_lua.c"
+#include "smtp_lua.c"
+#include "socket_lua.c"
+#include "tp_lua.c"
+#include "url_lua.c"
+
#define TEST(A) do { if (A) { \
fprintf(stderr,"FATAL error while preloading lua module " #A); \
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c
index b43114e50f7..e0f3d7dc629 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c
@@ -17,10 +17,7 @@
\*=========================================================================*/
#include "lua.h"
#include "lauxlib.h"
-
-#if !defined(LUA_VERSION_NUM) || (LUA_VERSION_NUM < 501)
-#include "compat-5.1.h"
-#endif
+#include "compat.h" /* Luajittex is managed in compat.h */
/*=========================================================================*\
* LuaSocket includes
@@ -67,7 +64,7 @@ static luaL_Reg func[] = {
* Skip a few arguments
\*-------------------------------------------------------------------------*/
static int global_skip(lua_State *L) {
- int amount = luaL_checkint(L, 1);
+ int amount = luaL_checkinteger(L, 1);
int ret = lua_gettop(L) - amount - 1;
return ret >= 0 ? ret : 0;
}
@@ -87,7 +84,9 @@ static int global_unload(lua_State *L) {
static int base_open(lua_State *L) {
if (socket_open()) {
/* export functions (and leave namespace table on top of stack) */
- luaL_openlib(L, "socket", func, 0);
+ /*lua_newtable(L);*/
+ /*luaL_setfuncs(L, func, 0);*/
+ luaL_openlib(L, "socket", func, 0);
#ifdef LUASOCKET_DEBUG
lua_pushstring(L, "_DEBUG");
lua_pushboolean(L, 1);
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c.orig b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c.orig
new file mode 100644
index 00000000000..7d9c80239c8
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.c.orig
@@ -0,0 +1,114 @@
+/*=========================================================================*\
+* LuaSocket toolkit
+* Networking support for the Lua language
+* Diego Nehab
+* 26/11/1999
+*
+* This library is part of an effort to progressively increase the network
+* connectivity of the Lua language. The Lua interface to networking
+* functions follows the Sockets API closely, trying to simplify all tasks
+* involved in setting up both client and server connections. The provided
+* IO routines, however, follow the Lua style, being very similar to the
+* standard Lua read and write functions.
+\*=========================================================================*/
+
+/*=========================================================================*\
+* Standard include files
+\*=========================================================================*/
+#include "lua.h"
+#include "lauxlib.h"
+#include "compat.h"
+
+/*=========================================================================*\
+* LuaSocket includes
+\*=========================================================================*/
+#include "luasocket.h"
+#include "auxiliar.h"
+#include "except.h"
+#include "timeout.h"
+#include "buffer.h"
+#include "inet.h"
+#include "tcp.h"
+#include "udp.h"
+#include "select.h"
+
+/*-------------------------------------------------------------------------*\
+* Internal function prototypes
+\*-------------------------------------------------------------------------*/
+static int global_skip(lua_State *L);
+static int global_unload(lua_State *L);
+static int base_open(lua_State *L);
+
+/*-------------------------------------------------------------------------*\
+* Modules and functions
+\*-------------------------------------------------------------------------*/
+static const luaL_Reg mod[] = {
+ {"auxiliar", auxiliar_open},
+ {"except", except_open},
+ {"timeout", timeout_open},
+ {"buffer", buffer_open},
+ {"inet", inet_open},
+ {"tcp", tcp_open},
+ {"udp", udp_open},
+ {"select", select_open},
+ {NULL, NULL}
+};
+
+static luaL_Reg func[] = {
+ {"skip", global_skip},
+ {"__unload", global_unload},
+ {NULL, NULL}
+};
+
+/*-------------------------------------------------------------------------*\
+* Skip a few arguments
+\*-------------------------------------------------------------------------*/
+static int global_skip(lua_State *L) {
+ int amount = luaL_checkinteger(L, 1);
+ int ret = lua_gettop(L) - amount - 1;
+ return ret >= 0 ? ret : 0;
+}
+
+/*-------------------------------------------------------------------------*\
+* Unloads the library
+\*-------------------------------------------------------------------------*/
+static int global_unload(lua_State *L) {
+ (void) L;
+ socket_close();
+ return 0;
+}
+
+/*-------------------------------------------------------------------------*\
+* Setup basic stuff.
+\*-------------------------------------------------------------------------*/
+static int base_open(lua_State *L) {
+ if (socket_open()) {
+ /* export functions (and leave namespace table on top of stack) */
+ lua_newtable(L);
+ luaL_setfuncs(L, func, 0);
+#ifdef LUASOCKET_DEBUG
+ lua_pushstring(L, "_DEBUG");
+ lua_pushboolean(L, 1);
+ lua_rawset(L, -3);
+#endif
+ /* make version string available to scripts */
+ lua_pushstring(L, "_VERSION");
+ lua_pushstring(L, LUASOCKET_VERSION);
+ lua_rawset(L, -3);
+ return 1;
+ } else {
+ lua_pushstring(L, "unable to initialize library");
+ lua_error(L);
+ return 0;
+ }
+}
+
+/*-------------------------------------------------------------------------*\
+* Initializes all library modules.
+\*-------------------------------------------------------------------------*/
+LUASOCKET_API int luaopen_socket_core(lua_State *L) {
+ int i;
+ base_open(L);
+ for (i = 0; mod[i].name; i++) mod[i].func(L);
+ return 1;
+}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.h b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.h
index f2ca3c159e9..f75d21f2262 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/luasocket.h
@@ -11,9 +11,8 @@
/*-------------------------------------------------------------------------*\
* Current socket library version
\*-------------------------------------------------------------------------*/
-#define LUASOCKET_VERSION "LuaSocket 2.1-rc1"
-#define LUASOCKET_COPYRIGHT "Copyright (C) 1999-2012 Diego Nehab"
-#define LUASOCKET_AUTHORS "Diego Nehab"
+#define LUASOCKET_VERSION "LuaSocket 3.0-rc1"
+#define LUASOCKET_COPYRIGHT "Copyright (C) 1999-2013 Diego Nehab"
/*-------------------------------------------------------------------------*\
* This macro prefixes all exported API functions
@@ -22,10 +21,6 @@
#define LUASOCKET_API extern
#endif
-#if LUA_VERSION_NUM > 501 & !( defined LUA_COMPAT_MODULE)
-# error Lua 5.2 requires LUA_COMPAT_MODULE defined for luaL_openlib
-#endif
-
/*-------------------------------------------------------------------------*\
* Initializes the library.
\*-------------------------------------------------------------------------*/
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/makefile b/Build/source/texk/web2c/luatexdir/luasocket/src/makefile
new file mode 100644
index 00000000000..494baab005c
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/makefile
@@ -0,0 +1,438 @@
+# luasocket src/makefile
+#
+# Definitions in this section can be overriden on the command line or in the
+# environment.
+#
+# These are equivalent:
+#
+# export PLAT=linux DEBUG=DEBUG LUAV=5.2 prefix=/sw
+# make
+#
+# and
+#
+# make PLAT=linux DEBUG=DEBUG LUAV=5.2 prefix=/sw
+
+# PLAT: linux macosx win32 mingw
+# platform to build for
+PLAT?=linux
+
+# LUAV: 5.1 5.2
+# lua version to build against
+LUAV?=5.1
+
+# MYCFLAGS: to be set by user if needed
+MYCFLAGS?=
+
+# MYLDFLAGS: to be set by user if needed
+MYLDFLAGS?=
+
+# DEBUG: NODEBUG DEBUG
+# debug mode causes luasocket to collect and returns timing information useful
+# for testing and debugging luasocket itself
+DEBUG?=NODEBUG
+
+# where lua headers are found for macosx builds
+# LUAINC_macosx:
+# /opt/local/include
+LUAINC_macosx_base?=/opt/local/include
+LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV)
+# FIXME default should this default to fink or to macports?
+# What happens when more than one Lua version is installed?
+LUAPREFIX_macosx?=/opt/local
+CDIR_macosx?=lib/lua/$(LUAV)
+LDIR_macosx?=share/lua/$(LUAV)
+
+# LUAINC_linux:
+# /usr/include/lua$(LUAV)
+# /usr/local/include
+# /usr/local/include/lua$(LUAV)
+# where lua headers are found for linux builds
+LUAINC_linux_base?=/usr/include
+LUAINC_linux?=$(LUAINC_linux_base)/lua/$(LUAV)
+LUAPREFIX_linux?=/usr/local
+CDIR_linux?=lib/lua/$(LUAV)
+LDIR_linux?=share/lua/$(LUAV)
+
+# LUAINC_freebsd:
+# /usr/local/include/lua$(LUAV)
+# where lua headers are found for freebsd builds
+LUAINC_freebsd_base?=/usr/local/include/
+LUAINC_freebsd?=$(LUAINC_freebsd_base)/lua$(LUAV)
+LUAPREFIX_freebsd?=/usr/local/
+CDIR_freebsd?=lib/lua/$(LUAV)
+LDIR_freebsd?=share/lua/$(LUAV)
+
+# where lua headers are found for mingw builds
+# LUAINC_mingw:
+# /opt/local/include
+LUAINC_mingw_base?=/usr/include
+LUAINC_mingw?=$(LUAINC_mingw_base)/lua/$(LUAV)
+LUALIB_mingw_base?=/usr/bin
+LUALIB_mingw?=$(LUALIB_mingw_base)/lua/$(LUAV)/lua$(subst .,,$(LUAV)).dll
+LUAPREFIX_mingw?=/usr
+CDIR_mingw?=lua/$(LUAV)
+LDIR_mingw?=lua/$(LUAV)/lua
+
+
+# LUAINC_win32:
+# LUALIB_win32:
+# where lua headers and libraries are found for win32 builds
+LUAPREFIX_win32?=
+LUAINC_win32?=$(LUAPREFIX_win32)/include/lua/$(LUAV)
+PLATFORM_win32?=Release
+CDIR_win32?=bin/lua/$(LUAV)/$(PLATFORM_win32)
+LDIR_win32?=bin/lua/$(LUAV)/$(PLATFORM_win32)/lua
+LUALIB_win32?=$(LUAPREFIX_win32)/lib/lua/$(LUAV)/$(PLATFORM_win32)
+LUALIBNAME_win32?=lua$(subst .,,$(LUAV)).lib
+
+
+# LUAINC_solaris:
+LUAINC_solaris_base?=/usr/include
+LUAINC_solaris?=$(LUAINC_solaris_base)/lua/$(LUAV)
+LUAPREFIX_solaris?=/usr/local
+CDIR_solaris?=lib/lua/$(LUAV)
+LDIR_solaris?=share/lua/$(LUAV)
+
+# prefix: /usr/local /usr /opt/local /sw
+# the top of the default install tree
+prefix?=$(LUAPREFIX_$(PLAT))
+
+CDIR?=$(CDIR_$(PLAT))
+LDIR?=$(LDIR_$(PLAT))
+
+# DESTDIR: (no default)
+# used by package managers to install into a temporary destination
+DESTDIR?=
+
+#------
+# Definitions below can be overridden on the make command line, but
+# shouldn't have to be.
+
+
+#------
+# Install directories
+#
+
+INSTALL_DIR=install -d
+INSTALL_DATA=install -m644
+INSTALL_EXEC=install
+INSTALL_TOP=$(DESTDIR)$(prefix)
+
+INSTALL_TOP_LDIR=$(INSTALL_TOP)/$(LDIR)
+INSTALL_TOP_CDIR=$(INSTALL_TOP)/$(CDIR)
+
+INSTALL_SOCKET_LDIR=$(INSTALL_TOP_LDIR)/socket
+INSTALL_SOCKET_CDIR=$(INSTALL_TOP_CDIR)/socket
+INSTALL_MIME_LDIR=$(INSTALL_TOP_LDIR)/mime
+INSTALL_MIME_CDIR=$(INSTALL_TOP_CDIR)/mime
+
+print:
+ @echo PLAT=$(PLAT)
+ @echo LUAV=$(LUAV)
+ @echo DEBUG=$(DEBUG)
+ @echo prefix=$(prefix)
+ @echo LUAINC_$(PLAT)=$(LUAINC_$(PLAT))
+ @echo LUALIB_$(PLAT)=$(LUALIB_$(PLAT))
+ @echo INSTALL_TOP_CDIR=$(INSTALL_TOP_CDIR)
+ @echo INSTALL_TOP_LDIR=$(INSTALL_TOP_LDIR)
+ @echo CFLAGS=$(CFLAGS)
+ @echo LDFLAGS=$(LDFLAGS)
+
+#------
+# Supported platforms
+#
+PLATS= macosx linux win32 mingw solaris
+
+#------
+# Compiler and linker settings
+# for Mac OS X
+SO_macosx=so
+O_macosx=o
+CC_macosx=gcc
+DEF_macosx= -DLUASOCKET_$(DEBUG) -DUNIX_HAS_SUN_LEN \
+ -DLUASOCKET_API='__attribute__((visibility("default")))' \
+ -DUNIX_API='__attribute__((visibility("default")))' \
+ -DMIME_API='__attribute__((visibility("default")))'
+CFLAGS_macosx= -I$(LUAINC) $(DEF) -Wall -O2 -fno-common \
+ -fvisibility=hidden
+LDFLAGS_macosx= -bundle -undefined dynamic_lookup -o
+LD_macosx= export MACOSX_DEPLOYMENT_TARGET="10.3"; gcc
+SOCKET_macosx=usocket.o
+
+#------
+# Compiler and linker settings
+# for Linux
+SO_linux=so
+O_linux=o
+CC_linux=gcc
+DEF_linux=-DLUASOCKET_$(DEBUG) \
+ -DLUASOCKET_API='__attribute__((visibility("default")))' \
+ -DUNIX_API='__attribute__((visibility("default")))' \
+ -DMIME_API='__attribute__((visibility("default")))'
+CFLAGS_linux= -I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \
+ -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden
+LDFLAGS_linux=-O -shared -fpic -o
+LD_linux=gcc
+SOCKET_linux=usocket.o
+
+#------
+# Compiler and linker settings
+# for FreeBSD
+SO_freebsd=so
+O_freebsd=o
+CC_freebsd=gcc
+DEF_freebsd=-DLUASOCKET_$(DEBUG) \
+ -DLUASOCKET_API='__attribute__((visibility("default")))' \
+ -DUNIX_API='__attribute__((visibility("default")))' \
+ -DMIME_API='__attribute__((visibility("default")))'
+CFLAGS_freebsd= -I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \
+ -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden
+LDFLAGS_freebsd=-O -shared -fpic -o
+LD_freebsd=gcc
+SOCKET_freebsd=usocket.o
+
+#------
+# Compiler and linker settings
+# for Solaris
+SO_solaris=so
+O_solaris=o
+CC_solaris=gcc
+DEF_solaris=-DLUASOCKET_$(DEBUG) \
+ -DLUASOCKET_API='__attribute__((visibility("default")))' \
+ -DUNIX_API='__attribute__((visibility("default")))' \
+ -DMIME_API='__attribute__((visibility("default")))'
+CFLAGS_solaris=-I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \
+ -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden
+LDFLAGS_solaris=-lnsl -lsocket -lresolv -O -shared -fpic -o
+LD_solaris=gcc
+SOCKET_solaris=usocket.o
+
+#------
+# Compiler and linker settings
+# for MingW
+SO_mingw=dll
+O_mingw=o
+CC_mingw=gcc
+DEF_mingw= -DLUASOCKET_INET_PTON -DLUASOCKET_$(DEBUG) \
+ -DWINVER=0x0501 -DLUASOCKET_API='__declspec(dllexport)' \
+ -DMIME_API='__declspec(dllexport)'
+CFLAGS_mingw= -I$(LUAINC) $(DEF) -Wall -O2 -fno-common \
+ -fvisibility=hidden
+LDFLAGS_mingw= $(LUALIB) -shared -Wl,-s -lws2_32 -o
+LD_mingw=gcc
+SOCKET_mingw=wsocket.o
+
+
+#------
+# Compiler and linker settings
+# for Win32
+SO_win32=dll
+O_win32=obj
+CC_win32=cl
+DEF_win32= //D "WIN32" //D "NDEBUG" //D "_WINDOWS" //D "_USRDLL" \
+ //D "LUASOCKET_API=__declspec(dllexport)" //D "_CRT_SECURE_NO_WARNINGS" \
+ //D "_WINDLL" //D "MIME_API=__declspec(dllexport)" \
+ //D "LUASOCKET_$(DEBUG)"
+CFLAGS_win32=//I "$(LUAINC)" $(DEF) //O2 //Ot //MD //W3 //nologo
+LDFLAGS_win32= //nologo //link //NOLOGO //DLL //INCREMENTAL:NO \
+ //MANIFEST //MANIFESTFILE:"intermediate.manifest" \
+ //MANIFESTUAC:"level='asInvoker' uiAccess='false'" \
+ //SUBSYSTEM:WINDOWS //OPT:REF //OPT:ICF //DYNAMICBASE:NO \
+ //MACHINE:X86 /LIBPATH:"$(shell cmd //c echo $(LUALIB))" \
+ $(LUALIBNAME_win32) ws2_32.lib //OUT:
+LD_win32=cl
+SOCKET_win32=wsocket.obj
+
+.SUFFIXES: .obj
+
+.c.obj:
+ $(CC) $(CFLAGS) //Fo"$@" //c $<
+
+#------
+# Output file names
+#
+SO=$(SO_$(PLAT))
+O=$(O_$(PLAT))
+SOCKET_V=3.0-rc1
+MIME_V=1.0.3
+SOCKET_SO=socket-$(SOCKET_V).$(SO)
+MIME_SO=mime-$(MIME_V).$(SO)
+UNIX_SO=unix.$(SO)
+SERIAL_SO=serial.$(SO)
+SOCKET=$(SOCKET_$(PLAT))
+
+#------
+# Settings selected for platform
+#
+CC=$(CC_$(PLAT))
+DEF=$(DEF_$(PLAT))
+CFLAGS=$(MYCFLAGS) $(CFLAGS_$(PLAT))
+LDFLAGS=$(MYLDFLAGS) $(LDFLAGS_$(PLAT))
+LD=$(LD_$(PLAT))
+LUAINC= $(LUAINC_$(PLAT))
+LUALIB= $(LUALIB_$(PLAT))
+
+#------
+# Modules belonging to socket-core
+#
+SOCKET_OBJS= \
+ luasocket.$(O) \
+ timeout.$(O) \
+ buffer.$(O) \
+ io.$(O) \
+ auxiliar.$(O) \
+ compat.$(O) \
+ options.$(O) \
+ inet.$(O) \
+ $(SOCKET) \
+ except.$(O) \
+ select.$(O) \
+ tcp.$(O) \
+ udp.$(O)
+
+#------
+# Modules belonging mime-core
+#
+MIME_OBJS= \
+ mime.$(O) \
+ compat.$(O)
+
+#------
+# Modules belonging unix (local domain sockets)
+#
+UNIX_OBJS=\
+ buffer.$(O) \
+ auxiliar.$(O) \
+ options.$(O) \
+ timeout.$(O) \
+ io.$(O) \
+ usocket.$(O) \
+ unixstream.$(O) \
+ unixdgram.$(O) \
+ compat.$(O) \
+ unix.$(O)
+
+#------
+# Modules belonging to serial (device streams)
+#
+SERIAL_OBJS=\
+ buffer.$(O) \
+ auxiliar.$(O) \
+ options.$(O) \
+ timeout.$(O) \
+ io.$(O) \
+ usocket.$(O) \
+ serial.$(O)
+
+#------
+# Files to install
+#
+TO_SOCKET_LDIR= \
+ http.lua \
+ url.lua \
+ tp.lua \
+ ftp.lua \
+ headers.lua \
+ smtp.lua
+
+TO_TOP_LDIR= \
+ ltn12.lua \
+ socket.lua \
+ mime.lua
+
+#------
+# Targets
+#
+default: $(PLAT)
+
+
+freebsd:
+ $(MAKE) all-unix PLAT=freebsd
+
+macosx:
+ $(MAKE) all-unix PLAT=macosx
+
+win32:
+ $(MAKE) all PLAT=win32
+
+linux:
+ $(MAKE) all-unix PLAT=linux
+
+mingw:
+ $(MAKE) all PLAT=mingw
+
+solaris:
+ $(MAKE) all-unix PLAT=solaris
+
+none:
+ @echo "Please run"
+ @echo " make PLATFORM"
+ @echo "where PLATFORM is one of these:"
+ @echo " $(PLATS)"
+
+all: $(SOCKET_SO) $(MIME_SO)
+
+$(SOCKET_SO): $(SOCKET_OBJS)
+ $(LD) $(SOCKET_OBJS) $(LDFLAGS)$@
+
+$(MIME_SO): $(MIME_OBJS)
+ $(LD) $(MIME_OBJS) $(LDFLAGS)$@
+
+all-unix: all $(UNIX_SO) $(SERIAL_SO)
+
+$(UNIX_SO): $(UNIX_OBJS)
+ $(LD) $(UNIX_OBJS) $(LDFLAGS)$@
+
+$(SERIAL_SO): $(SERIAL_OBJS)
+ $(LD) $(SERIAL_OBJS) $(LDFLAGS)$@
+
+install:
+ $(INSTALL_DIR) $(INSTALL_TOP_LDIR)
+ $(INSTALL_DATA) $(TO_TOP_LDIR) $(INSTALL_TOP_LDIR)
+ $(INSTALL_DIR) $(INSTALL_SOCKET_LDIR)
+ $(INSTALL_DATA) $(TO_SOCKET_LDIR) $(INSTALL_SOCKET_LDIR)
+ $(INSTALL_DIR) $(INSTALL_SOCKET_CDIR)
+ $(INSTALL_EXEC) $(SOCKET_SO) $(INSTALL_SOCKET_CDIR)/core.$(SO)
+ $(INSTALL_DIR) $(INSTALL_MIME_CDIR)
+ $(INSTALL_EXEC) $(MIME_SO) $(INSTALL_MIME_CDIR)/core.$(SO)
+
+install-unix: install
+ $(INSTALL_EXEC) $(UNIX_SO) $(INSTALL_SOCKET_CDIR)/$(UNIX_SO)
+ $(INSTALL_EXEC) $(SERIAL_SO) $(INSTALL_SOCKET_CDIR)/$(SERIAL_SO)
+
+local:
+ $(MAKE) install INSTALL_TOP_CDIR=.. INSTALL_TOP_LDIR=..
+
+clean:
+ rm -f $(SOCKET_SO) $(SOCKET_OBJS) $(SERIAL_OBJS)
+ rm -f $(MIME_SO) $(UNIX_SO) $(SERIAL_SO) $(MIME_OBJS) $(UNIX_OBJS)
+
+.PHONY: all $(PLATS) default clean echo none
+
+#------
+# List of dependencies
+#
+compat.$(O): compat.c compat.h
+auxiliar.$(O): auxiliar.c auxiliar.h
+buffer.$(O): buffer.c buffer.h io.h timeout.h
+except.$(O): except.c except.h
+inet.$(O): inet.c inet.h socket.h io.h timeout.h usocket.h
+io.$(O): io.c io.h timeout.h
+luasocket.$(O): luasocket.c luasocket.h auxiliar.h except.h \
+ timeout.h buffer.h io.h inet.h socket.h usocket.h tcp.h \
+ udp.h select.h
+mime.$(O): mime.c mime.h
+options.$(O): options.c auxiliar.h options.h socket.h io.h \
+ timeout.h usocket.h inet.h
+select.$(O): select.c socket.h io.h timeout.h usocket.h select.h
+serial.$(O): serial.c auxiliar.h socket.h io.h timeout.h usocket.h \
+ options.h unix.h buffer.h
+tcp.$(O): tcp.c auxiliar.h socket.h io.h timeout.h usocket.h \
+ inet.h options.h tcp.h buffer.h
+timeout.$(O): timeout.c auxiliar.h timeout.h
+udp.$(O): udp.c auxiliar.h socket.h io.h timeout.h usocket.h \
+ inet.h options.h udp.h
+unix.$(O): unix.c auxiliar.h socket.h io.h timeout.h usocket.h \
+ options.h unix.h buffer.h
+usocket.$(O): usocket.c socket.h io.h timeout.h usocket.h
+wsocket.$(O): wsocket.c socket.h io.h timeout.h usocket.h
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua
index 35adf4ea70a..ed9e7814e60 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua
@@ -1,8 +1,10 @@
-local Public = {}
+local _M = {}
-mbox = Public
+if module then
+ mbox = _M
+end
-function Public.split_message(message_s)
+function _M.split_message(message_s)
local message = {}
message_s = string.gsub(message_s, "\r\n", "\n")
string.gsub(message_s, "^(.-\n)\n", function (h) message.headers = h end)
@@ -16,7 +18,7 @@ function Public.split_message(message_s)
return message.headers or "", message.body or ""
end
-function Public.split_headers(headers_s)
+function _M.split_headers(headers_s)
local headers = {}
headers_s = string.gsub(headers_s, "\r\n", "\n")
headers_s = string.gsub(headers_s, "\n[ ]+", " ")
@@ -24,18 +26,18 @@ function Public.split_headers(headers_s)
return headers
end
-function Public.parse_header(header_s)
+function _M.parse_header(header_s)
header_s = string.gsub(header_s, "\n[ ]+", " ")
header_s = string.gsub(header_s, "\n+", "")
local _, __, name, value = string.find(header_s, "([^%s:]-):%s*(.*)")
return name, value
end
-function Public.parse_headers(headers_s)
- local headers_t = Public.split_headers(headers_s)
+function _M.parse_headers(headers_s)
+ local headers_t = _M.split_headers(headers_s)
local headers = {}
for i = 1, #headers_t do
- local name, value = Public.parse_header(headers_t[i])
+ local name, value = _M.parse_header(headers_t[i])
if name then
name = string.lower(name)
if headers[name] then
@@ -46,7 +48,7 @@ function Public.parse_headers(headers_s)
return headers
end
-function Public.parse_from(from)
+function _M.parse_from(from)
local _, __, name, address = string.find(from, "^%s*(.-)%s*%<(.-)%>")
if not address then
_, __, address = string.find(from, "%s*(.+)%s*")
@@ -58,8 +60,8 @@ function Public.parse_from(from)
return name, address
end
-function Public.split_mbox(mbox_s)
- mbox = {}
+function _M.split_mbox(mbox_s)
+ local mbox = {}
mbox_s = string.gsub(mbox_s, "\r\n", "\n") .."\n\nFrom \n"
local nj, i, j = 1, 1, 1
while 1 do
@@ -72,17 +74,19 @@ function Public.split_mbox(mbox_s)
return mbox
end
-function Public.parse(mbox_s)
- local mbox = Public.split_mbox(mbox_s)
+function _M.parse(mbox_s)
+ local mbox = _M.split_mbox(mbox_s)
for i = 1, #mbox do
- mbox[i] = Public.parse_message(mbox[i])
+ mbox[i] = _M.parse_message(mbox[i])
end
return mbox
end
-function Public.parse_message(message_s)
+function _M.parse_message(message_s)
local message = {}
- message.headers, message.body = Public.split_message(message_s)
- message.headers = Public.parse_headers(message.headers)
+ message.headers, message.body = _M.split_message(message_s)
+ message.headers = _M.parse_headers(message.headers)
return message
end
+
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mbox_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox_lua.c
index bbe4d504b67..22f14793743 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mbox_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mbox_lua.c
@@ -1,147 +1,231 @@
/*
- * This file is auto-generated by "lua2c mbox.lua mbox_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_mbox_lua_open (lua_State *L) {
static unsigned char B[] = {
- 108,111, 99, 97,108, 32, 80,117, 98,108,105, 99, 32, 61, 32,123,125, 10, 10,109,
- 98,111,120, 32, 61, 32, 80,117, 98,108,105, 99, 10, 10,102,117,110, 99,116,105,
-111,110, 32, 80,117, 98,108,105, 99, 46,115,112,108,105,116, 95,109,101,115,115,
- 97,103,101, 40,109,101,115,115, 97,103,101, 95,115, 41, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,109,101,115,115, 97,103,101, 32, 61, 32,123,125, 10, 32, 32,
- 32, 32,109,101,115,115, 97,103,101, 95,115, 32, 61, 32,115,116,114,105,110,103,
- 46,103,115,117, 98, 40,109,101,115,115, 97,103,101, 95,115, 44, 32, 34, 92,114,
- 92,110, 34, 44, 32, 34, 92,110, 34, 41, 10, 32, 32, 32, 32,115,116,114,105,110,
-103, 46,103,115,117, 98, 40,109,101,115,115, 97,103,101, 95,115, 44, 32, 34, 94,
- 40, 46, 45, 92,110, 41, 92,110, 34, 44, 32,102,117,110, 99,116,105,111,110, 32,
- 40,104, 41, 32,109,101,115,115, 97,103,101, 46,104,101, 97,100,101,114,115, 32,
- 61, 32,104, 32,101,110,100, 41, 10, 32, 32, 32, 32,115,116,114,105,110,103, 46,
-103,115,117, 98, 40,109,101,115,115, 97,103,101, 95,115, 44, 32, 34, 94, 46, 45,
- 92,110, 92,110, 40, 46, 42, 41, 34, 44, 32,102,117,110, 99,116,105,111,110, 32,
- 40, 98, 41, 32,109,101,115,115, 97,103,101, 46, 98,111,100,121, 32, 61, 32, 98,
- 32,101,110,100, 41, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,109,101,115,
-115, 97,103,101, 46, 98,111,100,121, 32,116,104,101,110, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,109,101,115,115, 97,
-103,101, 95,115, 44, 32, 34, 94, 92,110, 40, 46, 42, 41, 34, 44, 32,102,117,110,
- 99,116,105,111,110, 32, 40, 98, 41, 32,109,101,115,115, 97,103,101, 46, 98,111,
-100,121, 32, 61, 32, 98, 32,101,110,100, 41, 10, 32, 32, 32, 32,101,110,100, 10,
- 32, 32, 32, 32,105,102, 32,110,111,116, 32,109,101,115,115, 97,103,101, 46,104,
-101, 97,100,101,114,115, 32, 97,110,100, 32,110,111,116, 32,109,101,115,115, 97,
-103,101, 46, 98,111,100,121, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,109,101,115,115, 97,103,101, 46,104,101, 97,100,101,114,115, 32, 61, 32,109,
-101,115,115, 97,103,101, 95,115, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,109,101,115,115, 97,103,101, 46,104,101, 97,100,
-101,114,115, 32,111,114, 32, 34, 34, 44, 32,109,101,115,115, 97,103,101, 46, 98,
-111,100,121, 32,111,114, 32, 34, 34, 10,101,110,100, 10, 10,102,117,110, 99,116,
-105,111,110, 32, 80,117, 98,108,105, 99, 46,115,112,108,105,116, 95,104,101, 97,
-100,101,114,115, 40,104,101, 97,100,101,114,115, 95,115, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32,104,101, 97,100,101,114,115, 32, 61, 32,123,125, 10, 32,
- 32, 32, 32,104,101, 97,100,101,114,115, 95,115, 32, 61, 32,115,116,114,105,110,
-103, 46,103,115,117, 98, 40,104,101, 97,100,101,114,115, 95,115, 44, 32, 34, 92,
-114, 92,110, 34, 44, 32, 34, 92,110, 34, 41, 10, 32, 32, 32, 32,104,101, 97,100,
-101,114,115, 95,115, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,
-104,101, 97,100,101,114,115, 95,115, 44, 32, 34, 92,110, 91, 32, 93, 43, 34, 44,
- 32, 34, 32, 34, 41, 10, 32, 32, 32, 32,115,116,114,105,110,103, 46,103,115,117,
- 98, 40, 34, 92,110, 34, 32, 46, 46, 32,104,101, 97,100,101,114,115, 95,115, 44,
- 32, 34, 92,110, 40, 91, 94, 92,110, 93, 43, 41, 34, 44, 32,102,117,110, 99,116,
-105,111,110, 32, 40,104, 41, 32,116, 97, 98,108,101, 46,105,110,115,101,114,116,
- 40,104,101, 97,100,101,114,115, 44, 32,104, 41, 32,101,110,100, 41, 10, 32, 32,
- 32, 32,114,101,116,117,114,110, 32,104,101, 97,100,101,114,115, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32, 80,117, 98,108,105, 99, 46,112, 97,
-114,115,101, 95,104,101, 97,100,101,114, 40,104,101, 97,100,101,114, 95,115, 41,
- 10, 32, 32, 32, 32,104,101, 97,100,101,114, 95,115, 32, 61, 32,115,116,114,105,
-110,103, 46,103,115,117, 98, 40,104,101, 97,100,101,114, 95,115, 44, 32, 34, 92,
-110, 91, 32, 93, 43, 34, 44, 32, 34, 32, 34, 41, 10, 32, 32, 32, 32,104,101, 97,
-100,101,114, 95,115, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,
-104,101, 97,100,101,114, 95,115, 44, 32, 34, 92,110, 43, 34, 44, 32, 34, 34, 41,
- 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 95, 44, 32, 95, 95, 44, 32,110, 97,
-109,101, 44, 32,118, 97,108,117,101, 32, 61, 32,115,116,114,105,110,103, 46,102,
-105,110,100, 40,104,101, 97,100,101,114, 95,115, 44, 32, 34, 40, 91, 94, 37,115,
- 58, 93, 45, 41, 58, 37,115, 42, 40, 46, 42, 41, 34, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,110, 97,109,101, 44, 32,118, 97,108,117,101, 10,101,110,
-100, 10, 10,102,117,110, 99,116,105,111,110, 32, 80,117, 98,108,105, 99, 46,112,
- 97,114,115,101, 95,104,101, 97,100,101,114,115, 40,104,101, 97,100,101,114,115,
- 95,115, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,104,101, 97,100,101,114,
-115, 95,116, 32, 61, 32, 80,117, 98,108,105, 99, 46,115,112,108,105,116, 95,104,
-101, 97,100,101,114,115, 40,104,101, 97,100,101,114,115, 95,115, 41, 10, 32, 32,
- 32, 32,108,111, 99, 97,108, 32,104,101, 97,100,101,114,115, 32, 61, 32,123,125,
- 10, 32, 32, 32, 32,102,111,114, 32,105, 32, 61, 32, 49, 44, 32, 35,104,101, 97,
-100,101,114,115, 95,116, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,110, 97,109,101, 44, 32,118, 97,108,117,101, 32, 61, 32, 80,117,
- 98,108,105, 99, 46,112, 97,114,115,101, 95,104,101, 97,100,101,114, 40,104,101,
- 97,100,101,114,115, 95,116, 91,105, 93, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-105,102, 32,110, 97,109,101, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,110, 97,109,101, 32, 61, 32,115,116,114,105,110,103, 46,108,
-111,119,101,114, 40,110, 97,109,101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,104,101, 97,100,101,114,115, 91,110, 97,109,101, 93, 32,
-116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,104,101, 97,100,101,114,115, 91,110, 97,109,101, 93, 32, 61, 32,104,101, 97,
-100,101,114,115, 91,110, 97,109,101, 93, 32, 46, 46, 32, 34, 44, 32, 34, 32, 46,
- 46, 32,118, 97,108,117,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-101,108,115,101, 32,104,101, 97,100,101,114,115, 91,110, 97,109,101, 93, 32, 61,
- 32,118, 97,108,117,101, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,
-110,100, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,104,101, 97,100,101,114,115, 10,101,110,100, 10, 10,102,117,110, 99,116,
-105,111,110, 32, 80,117, 98,108,105, 99, 46,112, 97,114,115,101, 95,102,114,111,
-109, 40,102,114,111,109, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 95, 44,
- 32, 95, 95, 44, 32,110, 97,109,101, 44, 32, 97,100,100,114,101,115,115, 32, 61,
- 32,115,116,114,105,110,103, 46,102,105,110,100, 40,102,114,111,109, 44, 32, 34,
- 94, 37,115, 42, 40, 46, 45, 41, 37,115, 42, 37, 60, 40, 46, 45, 41, 37, 62, 34,
- 41, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 97,100,100,114,101,115,115,
- 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 95, 44, 32, 95, 95, 44,
- 32, 97,100,100,114,101,115,115, 32, 61, 32,115,116,114,105,110,103, 46,102,105,
-110,100, 40,102,114,111,109, 44, 32, 34, 37,115, 42, 40, 46, 43, 41, 37,115, 42,
- 34, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,110, 97,109,101, 32,
- 61, 32,110, 97,109,101, 32,111,114, 32, 34, 34, 10, 32, 32, 32, 32, 97,100,100,
-114,101,115,115, 32, 61, 32, 97,100,100,114,101,115,115, 32,111,114, 32, 34, 34,
- 10, 32, 32, 32, 32,105,102, 32,110, 97,109,101, 32, 61, 61, 32, 34, 34, 32,116,
-104,101,110, 32,110, 97,109,101, 32, 61, 32, 97,100,100,114,101,115,115, 32,101,
-110,100, 10, 32, 32, 32, 32,110, 97,109,101, 32, 61, 32,115,116,114,105,110,103,
- 46,103,115,117, 98, 40,110, 97,109,101, 44, 32, 39, 34, 39, 44, 32, 34, 34, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,110, 97,109,101, 44, 32, 97,100,
-100,114,101,115,115, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,
- 80,117, 98,108,105, 99, 46,115,112,108,105,116, 95,109, 98,111,120, 40,109, 98,
-111,120, 95,115, 41, 10, 32, 32, 32, 32,109, 98,111,120, 32, 61, 32,123,125, 10,
- 32, 32, 32, 32,109, 98,111,120, 95,115, 32, 61, 32,115,116,114,105,110,103, 46,
-103,115,117, 98, 40,109, 98,111,120, 95,115, 44, 32, 34, 92,114, 92,110, 34, 44,
- 32, 34, 92,110, 34, 41, 32, 46, 46, 34, 92,110, 92,110, 70,114,111,109, 32, 92,
-110, 34, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,110,106, 44, 32,105, 44, 32,
-106, 32, 61, 32, 49, 44, 32, 49, 44, 32, 49, 10, 32, 32, 32, 32,119,104,105,108,
-101, 32, 49, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,105, 44, 32,110,106,
- 32, 61, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,109, 98,111,120, 95,
-115, 44, 32, 34, 92,110, 92,110, 70,114,111,109, 32, 46, 45, 92,110, 34, 44, 32,
-106, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,105, 32,
-116,104,101,110, 32, 98,114,101, 97,107, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,109,101,115,115, 97,103,101, 32, 61, 32,115,
-116,114,105,110,103, 46,115,117, 98, 40,109, 98,111,120, 95,115, 44, 32,106, 44,
- 32,105, 45, 49, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,116, 97, 98,108,101, 46,
-105,110,115,101,114,116, 40,109, 98,111,120, 44, 32,109,101,115,115, 97,103,101,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,106, 32, 61, 32,110,106, 43, 49, 10, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,109, 98,
-111,120, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32, 80,117, 98,
-108,105, 99, 46,112, 97,114,115,101, 40,109, 98,111,120, 95,115, 41, 10, 32, 32,
- 32, 32,108,111, 99, 97,108, 32,109, 98,111,120, 32, 61, 32, 80,117, 98,108,105,
- 99, 46,115,112,108,105,116, 95,109, 98,111,120, 40,109, 98,111,120, 95,115, 41,
- 10, 32, 32, 32, 32,102,111,114, 32,105, 32, 61, 32, 49, 44, 32, 35,109, 98,111,
-120, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,109, 98,111,120, 91,105, 93,
- 32, 61, 32, 80,117, 98,108,105, 99, 46,112, 97,114,115,101, 95,109,101,115,115,
- 97,103,101, 40,109, 98,111,120, 91,105, 93, 41, 10, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,109, 98,111,120, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32, 80,117, 98,108,105, 99, 46,112, 97,
-114,115,101, 95,109,101,115,115, 97,103,101, 40,109,101,115,115, 97,103,101, 95,
-115, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,109,101,115,115, 97,103,101,
- 32, 61, 32,123,125, 10, 32, 32, 32, 32,109,101,115,115, 97,103,101, 46,104,101,
- 97,100,101,114,115, 44, 32,109,101,115,115, 97,103,101, 46, 98,111,100,121, 32,
- 61, 32, 80,117, 98,108,105, 99, 46,115,112,108,105,116, 95,109,101,115,115, 97,
-103,101, 40,109,101,115,115, 97,103,101, 95,115, 41, 10, 32, 32, 32, 32,109,101,
-115,115, 97,103,101, 46,104,101, 97,100,101,114,115, 32, 61, 32, 80,117, 98,108,
-105, 99, 46,112, 97,114,115,101, 95,104,101, 97,100,101,114,115, 40,109,101,115,
-115, 97,103,101, 46,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32,114,101,
-116,117,114,110, 32,109,101,115,115, 97,103,101, 10,101,110,100, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x7b,
+ 0x7d, 0x0a, 0x69, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x62, 0x6f,
+ 0x78, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x0a, 0x65, 0x6e, 0x64, 0x20, 0x0a,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
+ 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67,
+ 0x73, 0x75, 0x62, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
+ 0x73, 0x2c, 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x22,
+ 0x5c, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5e, 0x28, 0x2e,
+ 0x2d, 0x5c, 0x6e, 0x29, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x68, 0x29, 0x20, 0x6d, 0x65,
+ 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x20, 0x3d, 0x20, 0x68, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73,
+ 0x75, 0x62, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73,
+ 0x2c, 0x20, 0x22, 0x5e, 0x2e, 0x2d, 0x5c, 0x6e, 0x5c, 0x6e, 0x28, 0x2e,
+ 0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x28, 0x62, 0x29, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x3d, 0x20, 0x62, 0x20, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x62,
+ 0x6f, 0x64, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x67, 0x73, 0x75, 0x62, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5e, 0x5c, 0x6e, 0x28, 0x2e, 0x2a, 0x29,
+ 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x28, 0x62, 0x29, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+ 0x62, 0x6f, 0x64, 0x79, 0x20, 0x3d, 0x20, 0x62, 0x20, 0x65, 0x6e, 0x64,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x5f, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65,
+ 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x72,
+ 0x20, 0x22, 0x22, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x73, 0x70, 0x6c, 0x69,
+ 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x20, 0x3d, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x2c, 0x20, 0x22,
+ 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x22, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x5f, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x5b, 0x20, 0x5d, 0x2b, 0x22,
+ 0x2c, 0x20, 0x22, 0x20, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x22,
+ 0x5c, 0x6e, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x28, 0x5b, 0x5e,
+ 0x5c, 0x6e, 0x5d, 0x2b, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x68, 0x29, 0x20, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x68, 0x29, 0x20, 0x65, 0x6e,
+ 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f,
+ 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67,
+ 0x73, 0x75, 0x62, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73,
+ 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x5b, 0x20, 0x5d, 0x2b, 0x22, 0x2c, 0x20,
+ 0x22, 0x20, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x5f, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x2b, 0x22, 0x2c,
+ 0x20, 0x22, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x5f, 0x2c, 0x20, 0x5f, 0x5f, 0x2c, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x28,
+ 0x5b, 0x5e, 0x25, 0x73, 0x3a, 0x5d, 0x2d, 0x29, 0x3a, 0x25, 0x73, 0x2a,
+ 0x28, 0x2e, 0x2a, 0x29, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20,
+ 0x31, 0x2c, 0x20, 0x23, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f,
+ 0x74, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x74, 0x5b, 0x69,
+ 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x2e, 0x2e,
+ 0x20, 0x22, 0x2c, 0x20, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x66,
+ 0x72, 0x6f, 0x6d, 0x28, 0x66, 0x72, 0x6f, 0x6d, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x2c, 0x20, 0x5f,
+ 0x5f, 0x2c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x66, 0x72, 0x6f, 0x6d, 0x2c,
+ 0x20, 0x22, 0x5e, 0x25, 0x73, 0x2a, 0x28, 0x2e, 0x2d, 0x29, 0x25, 0x73,
+ 0x2a, 0x25, 0x3c, 0x28, 0x2e, 0x2d, 0x29, 0x25, 0x3e, 0x22, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x20, 0x5f,
+ 0x5f, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3d,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64,
+ 0x28, 0x66, 0x72, 0x6f, 0x6d, 0x2c, 0x20, 0x22, 0x25, 0x73, 0x2a, 0x28,
+ 0x2e, 0x2b, 0x29, 0x25, 0x73, 0x2a, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20,
+ 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x6f, 0x72, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d,
+ 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x27, 0x22, 0x27, 0x2c, 0x20, 0x22,
+ 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x73, 0x70, 0x6c, 0x69,
+ 0x74, 0x5f, 0x6d, 0x62, 0x6f, 0x78, 0x28, 0x6d, 0x62, 0x6f, 0x78, 0x5f,
+ 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x6d, 0x62, 0x6f, 0x78, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6d, 0x62, 0x6f, 0x78, 0x5f, 0x73, 0x20, 0x3d, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28,
+ 0x6d, 0x62, 0x6f, 0x78, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5c, 0x72, 0x5c,
+ 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x22, 0x29, 0x20, 0x2e, 0x2e,
+ 0x22, 0x5c, 0x6e, 0x5c, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x5c, 0x6e,
+ 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x6e, 0x6a, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6a, 0x20, 0x3d, 0x20, 0x31,
+ 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77,
+ 0x68, 0x69, 0x6c, 0x65, 0x20, 0x31, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x2c, 0x20, 0x6e, 0x6a, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e,
+ 0x64, 0x28, 0x6d, 0x62, 0x6f, 0x78, 0x5f, 0x73, 0x2c, 0x20, 0x22, 0x5c,
+ 0x6e, 0x5c, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x2e, 0x2d, 0x5c, 0x6e,
+ 0x22, 0x2c, 0x20, 0x6a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62,
+ 0x28, 0x6d, 0x62, 0x6f, 0x78, 0x5f, 0x73, 0x2c, 0x20, 0x6a, 0x2c, 0x20,
+ 0x69, 0x2d, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72,
+ 0x74, 0x28, 0x6d, 0x62, 0x6f, 0x78, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x6a, 0x20, 0x3d, 0x20, 0x6e, 0x6a, 0x2b, 0x31, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x62, 0x6f, 0x78, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x6d, 0x62, 0x6f, 0x78,
+ 0x5f, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x6d, 0x62, 0x6f, 0x78, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6d, 0x62, 0x6f, 0x78, 0x28, 0x6d,
+ 0x62, 0x6f, 0x78, 0x5f, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x23, 0x6d,
+ 0x62, 0x6f, 0x78, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6d, 0x62, 0x6f, 0x78, 0x5b, 0x69, 0x5d, 0x20, 0x3d,
+ 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6d, 0x65,
+ 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x6d, 0x62, 0x6f, 0x78, 0x5b, 0x69,
+ 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x62,
+ 0x6f, 0x78, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x2c, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+ 0x62, 0x6f, 0x64, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x73, 0x70,
+ 0x6c, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28,
+ 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x28, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.c b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.c
index dddd3d66ea0..ed441046f0f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.c
@@ -6,10 +6,7 @@
#include "lua.h"
#include "lauxlib.h"
-
-#if !defined(LUA_VERSION_NUM) || (LUA_VERSION_NUM < 501)
-#include "compat-5.1.h"
-#endif
+#include "compat.h"
#include "mime.h"
@@ -41,7 +38,7 @@ static size_t b64decode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
static void qpsetup(UC *class, UC *unbase);
static void qpquote(UC c, luaL_Buffer *buffer);
static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
-static size_t qpencode(UC c, UC *input, size_t size,
+static size_t qpencode(UC c, UC *input, size_t size,
const char *marker, luaL_Buffer *buffer);
static size_t qppad(UC *input, size_t size, luaL_Buffer *buffer);
@@ -81,7 +78,8 @@ static UC b64unbase[256];
\*-------------------------------------------------------------------------*/
MIME_API int luaopen_mime_core(lua_State *L)
{
- luaL_openlib(L, "mime", func, 0);
+ lua_newtable(L);
+ luaL_setfuncs(L, func, 0);
/* make version string available to scripts */
lua_pushstring(L, "_VERSION");
lua_pushstring(L, MIME_VERSION);
@@ -98,15 +96,15 @@ MIME_API int luaopen_mime_core(lua_State *L)
/*-------------------------------------------------------------------------*\
* Incrementaly breaks a string into lines. The string can have CRLF breaks.
* A, n = wrp(l, B, length)
-* A is a copy of B, broken into lines of at most 'length' bytes.
-* 'l' is how many bytes are left for the first line of B.
-* 'n' is the number of bytes left in the last line of A.
+* A is a copy of B, broken into lines of at most 'length' bytes.
+* 'l' is how many bytes are left for the first line of B.
+* 'n' is the number of bytes left in the last line of A.
\*-------------------------------------------------------------------------*/
static int mime_global_wrp(lua_State *L)
{
size_t size = 0;
int left = (int) luaL_checknumber(L, 1);
- const UC *input = (UC *) luaL_optlstring(L, 2, NULL, &size);
+ const UC *input = (const UC *) luaL_optlstring(L, 2, NULL, &size);
const UC *last = input + size;
int length = (int) luaL_optnumber(L, 3, 76);
luaL_Buffer buffer;
@@ -118,7 +116,7 @@ static int mime_global_wrp(lua_State *L)
else lua_pushnil(L);
lua_pushnumber(L, length);
return 2;
- }
+ }
luaL_buffinit(L, &buffer);
while (input < last) {
switch (*input) {
@@ -145,9 +143,9 @@ static int mime_global_wrp(lua_State *L)
}
/*-------------------------------------------------------------------------*\
-* Fill base64 decode map.
+* Fill base64 decode map.
\*-------------------------------------------------------------------------*/
-static void b64setup(UC *unbase)
+static void b64setup(UC *unbase)
{
int i;
for (i = 0; i <= 255; i++) unbase[i] = (UC) 255;
@@ -156,11 +154,11 @@ static void b64setup(UC *unbase)
}
/*-------------------------------------------------------------------------*\
-* Acumulates bytes in input buffer until 3 bytes are available.
+* Acumulates bytes in input buffer until 3 bytes are available.
* Translate the 3 bytes into Base64 form and append to buffer.
* Returns new number of bytes in buffer.
\*-------------------------------------------------------------------------*/
-static size_t b64encode(UC c, UC *input, size_t size,
+static size_t b64encode(UC c, UC *input, size_t size,
luaL_Buffer *buffer)
{
input[size++] = c;
@@ -169,7 +167,7 @@ static size_t b64encode(UC c, UC *input, size_t size,
unsigned long value = 0;
value += input[0]; value <<= 8;
value += input[1]; value <<= 8;
- value += input[2];
+ value += input[2];
code[3] = b64base[value & 0x3f]; value >>= 6;
code[2] = b64base[value & 0x3f]; value >>= 6;
code[1] = b64base[value & 0x3f]; value >>= 6;
@@ -181,11 +179,11 @@ static size_t b64encode(UC c, UC *input, size_t size,
}
/*-------------------------------------------------------------------------*\
-* Encodes the Base64 last 1 or 2 bytes and adds padding '='
+* Encodes the Base64 last 1 or 2 bytes and adds padding '='
* Result, if any, is appended to buffer.
* Returns 0.
\*-------------------------------------------------------------------------*/
-static size_t b64pad(const UC *input, size_t size,
+static size_t b64pad(const UC *input, size_t size,
luaL_Buffer *buffer)
{
unsigned long value = 0;
@@ -198,7 +196,7 @@ static size_t b64pad(const UC *input, size_t size,
luaL_addlstring(buffer, (char *) code, 4);
break;
case 2:
- value = input[0]; value <<= 8;
+ value = input[0]; value <<= 8;
value |= input[1]; value <<= 2;
code[2] = b64base[value & 0x3f]; value >>= 6;
code[1] = b64base[value & 0x3f]; value >>= 6;
@@ -212,11 +210,11 @@ static size_t b64pad(const UC *input, size_t size,
}
/*-------------------------------------------------------------------------*\
-* Acumulates bytes in input buffer until 4 bytes are available.
+* Acumulates bytes in input buffer until 4 bytes are available.
* Translate the 4 bytes from Base64 form and append to buffer.
* Returns new number of bytes in buffer.
\*-------------------------------------------------------------------------*/
-static size_t b64decode(UC c, UC *input, size_t size,
+static size_t b64decode(UC c, UC *input, size_t size,
luaL_Buffer *buffer)
{
/* ignore invalid characters */
@@ -234,7 +232,7 @@ static size_t b64decode(UC c, UC *input, size_t size,
decoded[1] = (UC) (value & 0xff); value >>= 8;
decoded[0] = (UC) value;
/* take care of paddding */
- valid = (input[2] == '=') ? 1 : (input[3] == '=') ? 2 : 3;
+ valid = (input[2] == '=') ? 1 : (input[3] == '=') ? 2 : 3;
luaL_addlstring(buffer, (char *) decoded, valid);
return 0;
/* need more data */
@@ -246,7 +244,7 @@ static size_t b64decode(UC c, UC *input, size_t size,
* A, B = b64(C, D)
* A is the encoded version of the largest prefix of C .. D that is
* divisible by 3. B has the remaining bytes of C .. D, *without* encoding.
-* The easiest thing would be to concatenate the two strings and
+* The easiest thing would be to concatenate the two strings and
* encode the result, but we can't afford that or Lua would dupplicate
* every chunk we received.
\*-------------------------------------------------------------------------*/
@@ -254,7 +252,7 @@ static int mime_global_b64(lua_State *L)
{
UC atom[3];
size_t isize = 0, asize = 0;
- const UC *input = (UC *) luaL_optlstring(L, 1, NULL, &isize);
+ const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
const UC *last = input + isize;
luaL_Buffer buffer;
/* end-of-input blackhole */
@@ -267,9 +265,9 @@ static int mime_global_b64(lua_State *L)
lua_settop(L, 2);
/* process first part of the input */
luaL_buffinit(L, &buffer);
- while (input < last)
+ while (input < last)
asize = b64encode(*input++, atom, asize, &buffer);
- input = (UC *) luaL_optlstring(L, 2, NULL, &isize);
+ input = (const UC *) luaL_optlstring(L, 2, NULL, &isize);
/* if second part is nil, we are done */
if (!input) {
size_t osize = 0;
@@ -283,7 +281,7 @@ static int mime_global_b64(lua_State *L)
}
/* otherwise process the second part */
last = input + isize;
- while (input < last)
+ while (input < last)
asize = b64encode(*input++, atom, asize, &buffer);
luaL_pushresult(&buffer);
lua_pushlstring(L, (char *) atom, asize);
@@ -300,7 +298,7 @@ static int mime_global_unb64(lua_State *L)
{
UC atom[4];
size_t isize = 0, asize = 0;
- const UC *input = (UC *) luaL_optlstring(L, 1, NULL, &isize);
+ const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
const UC *last = input + isize;
luaL_Buffer buffer;
/* end-of-input blackhole */
@@ -313,9 +311,9 @@ static int mime_global_unb64(lua_State *L)
lua_settop(L, 2);
/* process first part of the input */
luaL_buffinit(L, &buffer);
- while (input < last)
+ while (input < last)
asize = b64decode(*input++, atom, asize, &buffer);
- input = (UC *) luaL_optlstring(L, 2, NULL, &isize);
+ input = (const UC *) luaL_optlstring(L, 2, NULL, &isize);
/* if second is nil, we are done */
if (!input) {
size_t osize = 0;
@@ -328,7 +326,7 @@ static int mime_global_unb64(lua_State *L)
}
/* otherwise, process the rest of the input */
last = input + isize;
- while (input < last)
+ while (input < last)
asize = b64decode(*input++, atom, asize, &buffer);
luaL_pushresult(&buffer);
lua_pushlstring(L, (char *) atom, asize);
@@ -344,7 +342,7 @@ static int mime_global_unb64(lua_State *L)
* 9 and 32 can be plain, unless in the end of a line, where must be =XX
* encoded lines must be no longer than 76 not counting CRLF
* soft line-break are =CRLF
-* To encode one byte, we need to see the next two.
+* To encode one byte, we need to see the next two.
* Worst case is when we see a space, and wonder if a CRLF is comming
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*\
@@ -357,7 +355,7 @@ static void qpsetup(UC *cl, UC *unbase)
for (i = 0; i < 256; i++) cl[i] = QP_QUOTED;
for (i = 33; i <= 60; i++) cl[i] = QP_PLAIN;
for (i = 62; i <= 126; i++) cl[i] = QP_PLAIN;
- cl['\t'] = QP_IF_LAST;
+ cl['\t'] = QP_IF_LAST;
cl[' '] = QP_IF_LAST;
cl['\r'] = QP_CR;
for (i = 0; i < 256; i++) unbase[i] = 255;
@@ -383,9 +381,9 @@ static void qpquote(UC c, luaL_Buffer *buffer)
/*-------------------------------------------------------------------------*\
* Accumulate characters until we are sure about how to deal with them.
-* Once we are sure, output to the buffer, in the correct form.
+* Once we are sure, output to the buffer, in the correct form.
\*-------------------------------------------------------------------------*/
-static size_t qpencode(UC c, UC *input, size_t size,
+static size_t qpencode(UC c, UC *input, size_t size,
const char *marker, luaL_Buffer *buffer)
{
input[size++] = c;
@@ -426,7 +424,7 @@ static size_t qpencode(UC c, UC *input, size_t size,
}
/*-------------------------------------------------------------------------*\
-* Deal with the final characters
+* Deal with the final characters
\*-------------------------------------------------------------------------*/
static size_t qppad(UC *input, size_t size, luaL_Buffer *buffer)
{
@@ -443,8 +441,8 @@ static size_t qppad(UC *input, size_t size, luaL_Buffer *buffer)
* Incrementally converts a string to quoted-printable
* A, B = qp(C, D, marker)
* Marker is the text to be used to replace CRLF sequences found in A.
-* A is the encoded version of the largest prefix of C .. D that
-* can be encoded without doubts.
+* A is the encoded version of the largest prefix of C .. D that
+* can be encoded without doubts.
* B has the remaining bytes of C .. D, *without* encoding.
\*-------------------------------------------------------------------------*/
static int mime_global_qp(lua_State *L)
@@ -452,7 +450,7 @@ static int mime_global_qp(lua_State *L)
size_t asize = 0, isize = 0;
UC atom[3];
- const UC *input = (UC *) luaL_optlstring(L, 1, NULL, &isize);
+ const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
const UC *last = input + isize;
const char *marker = luaL_optstring(L, 3, CRLF);
luaL_Buffer buffer;
@@ -468,7 +466,7 @@ static int mime_global_qp(lua_State *L)
luaL_buffinit(L, &buffer);
while (input < last)
asize = qpencode(*input++, atom, asize, marker, &buffer);
- input = (UC *) luaL_optlstring(L, 2, NULL, &isize);
+ input = (const UC *) luaL_optlstring(L, 2, NULL, &isize);
/* if second part is nil, we are done */
if (!input) {
asize = qppad(atom, asize, &buffer);
@@ -488,7 +486,7 @@ static int mime_global_qp(lua_State *L)
/*-------------------------------------------------------------------------*\
* Accumulate characters until we are sure about how to deal with them.
-* Once we are sure, output the to the buffer, in the correct form.
+* Once we are sure, output the to the buffer, in the correct form.
\*-------------------------------------------------------------------------*/
static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer) {
int d;
@@ -496,8 +494,8 @@ static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer) {
/* deal with all characters we can deal */
switch (input[0]) {
/* if we have an escape character */
- case '=':
- if (size < 3) return size;
+ case '=':
+ if (size < 3) return size;
/* eliminate soft line break */
if (input[1] == '\r' && input[2] == '\n') return 0;
/* decode quoted representation */
@@ -507,7 +505,7 @@ static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer) {
else luaL_addchar(buffer, (char) ((c << 4) + d));
return 0;
case '\r':
- if (size < 2) return size;
+ if (size < 2) return size;
if (input[1] == '\n') luaL_addlstring(buffer, (char *)input, 2);
return 0;
default:
@@ -520,15 +518,15 @@ static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer) {
/*-------------------------------------------------------------------------*\
* Incrementally decodes a string in quoted-printable
* A, B = qp(C, D)
-* A is the decoded version of the largest prefix of C .. D that
-* can be decoded without doubts.
+* A is the decoded version of the largest prefix of C .. D that
+* can be decoded without doubts.
* B has the remaining bytes of C .. D, *without* decoding.
\*-------------------------------------------------------------------------*/
static int mime_global_unqp(lua_State *L)
{
size_t asize = 0, isize = 0;
UC atom[3];
- const UC *input = (UC *) luaL_optlstring(L, 1, NULL, &isize);
+ const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
const UC *last = input + isize;
luaL_Buffer buffer;
/* end-of-input blackhole */
@@ -543,14 +541,14 @@ static int mime_global_unqp(lua_State *L)
luaL_buffinit(L, &buffer);
while (input < last)
asize = qpdecode(*input++, atom, asize, &buffer);
- input = (UC *) luaL_optlstring(L, 2, NULL, &isize);
+ input = (const UC *) luaL_optlstring(L, 2, NULL, &isize);
/* if second part is nil, we are done */
if (!input) {
luaL_pushresult(&buffer);
if (!(*lua_tostring(L, -1))) lua_pushnil(L);
lua_pushnil(L);
return 2;
- }
+ }
/* otherwise process rest of input */
last = input + isize;
while (input < last)
@@ -563,9 +561,9 @@ static int mime_global_unqp(lua_State *L)
/*-------------------------------------------------------------------------*\
* Incrementally breaks a quoted-printed string into lines
* A, n = qpwrp(l, B, length)
-* A is a copy of B, broken into lines of at most 'length' bytes.
-* 'l' is how many bytes are left for the first line of B.
-* 'n' is the number of bytes left in the last line of A.
+* A is a copy of B, broken into lines of at most 'length' bytes.
+* 'l' is how many bytes are left for the first line of B.
+* 'n' is the number of bytes left in the last line of A.
* There are two complications: lines can't be broken in the middle
* of an encoded =XX, and there might be line breaks already
\*-------------------------------------------------------------------------*/
@@ -573,7 +571,7 @@ static int mime_global_qpwrp(lua_State *L)
{
size_t size = 0;
int left = (int) luaL_checknumber(L, 1);
- const UC *input = (UC *) luaL_optlstring(L, 2, NULL, &size);
+ const UC *input = (const UC *) luaL_optlstring(L, 2, NULL, &size);
const UC *last = input + size;
int length = (int) luaL_optnumber(L, 3, 76);
luaL_Buffer buffer;
@@ -598,11 +596,11 @@ static int mime_global_qpwrp(lua_State *L)
if (left <= 3) {
left = length;
luaL_addstring(&buffer, EQCRLF);
- }
+ }
luaL_addchar(&buffer, *input);
left--;
break;
- default:
+ default:
if (left <= 1) {
left = length;
luaL_addstring(&buffer, EQCRLF);
@@ -630,7 +628,7 @@ static int mime_global_qpwrp(lua_State *L)
* last is the previous character
\*-------------------------------------------------------------------------*/
#define eolcandidate(c) (c == '\r' || c == '\n')
-static int eolprocess(int c, int last, const char *marker,
+static int eolprocess(int c, int last, const char *marker,
luaL_Buffer *buffer)
{
if (eolcandidate(c)) {
@@ -648,15 +646,15 @@ static int eolprocess(int c, int last, const char *marker,
}
/*-------------------------------------------------------------------------*\
-* Converts a string to uniform EOL convention.
+* Converts a string to uniform EOL convention.
* A, n = eol(o, B, marker)
* A is the converted version of the largest prefix of B that can be
-* converted unambiguously. 'o' is the context returned by the previous
+* converted unambiguously. 'o' is the context returned by the previous
* call. 'n' is the new context.
\*-------------------------------------------------------------------------*/
static int mime_global_eol(lua_State *L)
{
- int ctx = luaL_checkint(L, 1);
+ int ctx = luaL_checkinteger(L, 1);
size_t isize = 0;
const char *input = luaL_optlstring(L, 2, NULL, &isize);
const char *last = input + isize;
@@ -678,18 +676,18 @@ static int mime_global_eol(lua_State *L)
}
/*-------------------------------------------------------------------------*\
-* Takes one byte and stuff it if needed.
+* Takes one byte and stuff it if needed.
\*-------------------------------------------------------------------------*/
static size_t dot(int c, size_t state, luaL_Buffer *buffer)
{
luaL_addchar(buffer, (char) c);
switch (c) {
- case '\r':
+ case '\r':
return 1;
- case '\n':
- return (state == 1)? 2: 0;
- case '.':
- if (state == 2)
+ case '\n':
+ return (state == 1)? 2: 0;
+ case '.':
+ if (state == 2)
luaL_addchar(buffer, '.');
default:
return 0;
@@ -714,7 +712,7 @@ static int mime_global_dot(lua_State *L)
}
/* process all input */
luaL_buffinit(L, &buffer);
- while (input < last)
+ while (input < last)
state = dot(*input++, state, &buffer);
luaL_pushresult(&buffer);
lua_pushnumber(L, (lua_Number) state);
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.h b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.h
index 150e7adf912..99968a55d17 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.h
@@ -13,8 +13,8 @@
/*-------------------------------------------------------------------------*\
* Current MIME library version
\*-------------------------------------------------------------------------*/
-#define MIME_VERSION "MIME 1.0.3-rc1"
-#define MIME_COPYRIGHT "Copyright (C) 2004-2012 Diego Nehab"
+#define MIME_VERSION "MIME 1.0.3"
+#define MIME_COPYRIGHT "Copyright (C) 2004-2013 Diego Nehab"
#define MIME_AUTHORS "Diego Nehab"
/*-------------------------------------------------------------------------*\
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua
index 4aaccc8ea47..d6400965333 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua
@@ -8,15 +8,18 @@
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
-local ltn12 = require("ltn12")
+local ltn12 = ltn12 or require("ltn12")
local mime = require("mime.core")
+local io = require("io")
local string = require("string")
-module("mime")
+local _M = mime
-- encode, decode and wrap algorithm tables
-encodet = {}
-decodet = {}
-wrapt = {}
+local encodet, decodet, wrapt = {},{},{}
+
+_M.encodet = encodet
+_M.decodet = decodet
+_M.wrapt = wrapt
-- creates a function that chooses a filter by name from a given table
local function choose(table)
@@ -33,21 +36,21 @@ end
-- define the encoding filters
encodet['base64'] = function()
- return ltn12.filter.cycle(b64, "")
+ return ltn12.filter.cycle(_M.b64, "")
end
encodet['quoted-printable'] = function(mode)
- return ltn12.filter.cycle(qp, "",
+ return ltn12.filter.cycle(_M.qp, "",
(mode == "binary") and "=0D=0A" or "\r\n")
end
-- define the decoding filters
decodet['base64'] = function()
- return ltn12.filter.cycle(unb64, "")
+ return ltn12.filter.cycle(_M.unb64, "")
end
decodet['quoted-printable'] = function()
- return ltn12.filter.cycle(unqp, "")
+ return ltn12.filter.cycle(_M.unqp, "")
end
local function format(chunk)
@@ -60,26 +63,28 @@ end
-- define the line-wrap filters
wrapt['text'] = function(length)
length = length or 76
- return ltn12.filter.cycle(wrp, length, length)
+ return ltn12.filter.cycle(_M.wrp, length, length)
end
wrapt['base64'] = wrapt['text']
wrapt['default'] = wrapt['text']
wrapt['quoted-printable'] = function()
- return ltn12.filter.cycle(qpwrp, 76, 76)
+ return ltn12.filter.cycle(_M.qpwrp, 76, 76)
end
-- function that choose the encoding, decoding or wrap algorithm
-encode = choose(encodet)
-decode = choose(decodet)
-wrap = choose(wrapt)
+_M.encode = choose(encodet)
+_M.decode = choose(decodet)
+_M.wrap = choose(wrapt)
-- define the end-of-line normalization filter
-function normalize(marker)
- return ltn12.filter.cycle(eol, 0, marker)
+function _M.normalize(marker)
+ return ltn12.filter.cycle(_M.eol, 0, marker)
end
-- high level stuffing filter
-function stuff()
- return ltn12.filter.cycle(dot, 2)
+function _M.stuff()
+ return ltn12.filter.cycle(_M.dot, 2)
end
+_G['mime'] = mime
+return _M \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mime.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/mime_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/mime_lua.c
index 64e259f629c..ae407a961ce 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/mime_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/mime_lua.c
@@ -1,131 +1,152 @@
/*
- * This file is auto-generated by "lua2c mime.lua mime_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_mime_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 77, 73, 77, 69, 32,115,117,112,112,111,114,116, 32,102,111,114, 32,116,104,
-101, 32, 76,117, 97, 32,108, 97,110,103,117, 97,103,101, 46, 10, 45, 45, 32, 65,
-117,116,104,111,114, 58, 32, 68,105,101,103,111, 32, 78,101,104, 97, 98, 10, 45,
- 45, 32, 67,111,110,102,111,114,109,105,110,103, 32,116,111, 32, 82, 70, 67,115,
- 32, 50, 48, 52, 53, 45, 50, 48, 52, 57, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101, 32,109,
-111,100,117,108,101, 32, 97,110,100, 32,105,109,112,111,114,116, 32,100,101,112,
-101,110,100,101,110, 99,105,101,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32, 98, 97,115,101, 32, 61,
- 32, 95, 71, 10,108,111, 99, 97,108, 32,108,116,110, 49, 50, 32, 61, 32,114,101,
-113,117,105,114,101, 40, 34,108,116,110, 49, 50, 34, 41, 10,108,111, 99, 97,108,
- 32,109,105,109,101, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,109,105,109,
-101, 46, 99,111,114,101, 34, 41, 10,108,111, 99, 97,108, 32,115,116,114,105,110,
-103, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,116,114,105,110,103, 34,
- 41, 10,109,111,100,117,108,101, 40, 34,109,105,109,101, 34, 41, 10, 10, 45, 45,
- 32,101,110, 99,111,100,101, 44, 32,100,101, 99,111,100,101, 32, 97,110,100, 32,
-119,114, 97,112, 32, 97,108,103,111,114,105,116,104,109, 32,116, 97, 98,108,101,
-115, 10,101,110, 99,111,100,101,116, 32, 61, 32,123,125, 10,100,101, 99,111,100,
-101,116, 32, 61, 32,123,125, 10,119,114, 97,112,116, 32, 61, 32,123,125, 10, 10,
- 45, 45, 32, 99,114,101, 97,116,101,115, 32, 97, 32,102,117,110, 99,116,105,111,
-110, 32,116,104, 97,116, 32, 99,104,111,111,115,101,115, 32, 97, 32,102,105,108,
-116,101,114, 32, 98,121, 32,110, 97,109,101, 32,102,114,111,109, 32, 97, 32,103,
-105,118,101,110, 32,116, 97, 98,108,101, 10,108,111, 99, 97,108, 32,102,117,110,
- 99,116,105,111,110, 32, 99,104,111,111,115,101, 40,116, 97, 98,108,101, 41, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,116,105,111,110, 40,
-110, 97,109,101, 44, 32,111,112,116, 49, 44, 32,111,112,116, 50, 41, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,116,121,112,101, 40,110,
- 97,109,101, 41, 32,126, 61, 32, 34,115,116,114,105,110,103, 34, 32,116,104,101,
-110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,110, 97,109,101, 44, 32,
-111,112,116, 49, 44, 32,111,112,116, 50, 32, 61, 32, 34,100,101,102, 97,117,108,
-116, 34, 44, 32,110, 97,109,101, 44, 32,111,112,116, 49, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108,
- 32,102, 32, 61, 32,116, 97, 98,108,101, 91,110, 97,109,101, 32,111,114, 32, 34,
-110,105,108, 34, 93, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116,
- 32,102, 32,116,104,101,110, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 98, 97,115,101, 46,101,114,114,111,114, 40, 34,117,110,107,110,111,119,110,
- 32,107,101,121, 32, 40, 34, 32, 46, 46, 32, 98, 97,115,101, 46,116,111,115,116,
-114,105,110,103, 40,110, 97,109,101, 41, 32, 46, 46, 32, 34, 41, 34, 44, 32, 51,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,
-110, 32,102, 40,111,112,116, 49, 44, 32,111,112,116, 50, 41, 32,101,110,100, 10,
- 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,100,101,102,105,
-110,101, 32,116,104,101, 32,101,110, 99,111,100,105,110,103, 32,102,105,108,116,
-101,114,115, 10,101,110, 99,111,100,101,116, 91, 39, 98, 97,115,101, 54, 52, 39,
- 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,108,116,110, 49, 50, 46,102,105,108,116,101,114, 46, 99,
-121, 99,108,101, 40, 98, 54, 52, 44, 32, 34, 34, 41, 10,101,110,100, 10, 10,101,
-110, 99,111,100,101,116, 91, 39,113,117,111,116,101,100, 45,112,114,105,110,116,
- 97, 98,108,101, 39, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40,109,111,
-100,101, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50,
- 46,102,105,108,116,101,114, 46, 99,121, 99,108,101, 40,113,112, 44, 32, 34, 34,
- 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 40,109,111,100,101, 32, 61, 61, 32, 34,
- 98,105,110, 97,114,121, 34, 41, 32, 97,110,100, 32, 34, 61, 48, 68, 61, 48, 65,
- 34, 32,111,114, 32, 34, 92,114, 92,110, 34, 41, 10,101,110,100, 10, 10, 45, 45,
- 32,100,101,102,105,110,101, 32,116,104,101, 32,100,101, 99,111,100,105,110,103,
- 32,102,105,108,116,101,114,115, 10,100,101, 99,111,100,101,116, 91, 39, 98, 97,
-115,101, 54, 52, 39, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50, 46,102,105,108,
-116,101,114, 46, 99,121, 99,108,101, 40,117,110, 98, 54, 52, 44, 32, 34, 34, 41,
- 10,101,110,100, 10, 10,100,101, 99,111,100,101,116, 91, 39,113,117,111,116,101,
-100, 45,112,114,105,110,116, 97, 98,108,101, 39, 93, 32, 61, 32,102,117,110, 99,
-116,105,111,110, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,
-110, 49, 50, 46,102,105,108,116,101,114, 46, 99,121, 99,108,101, 40,117,110,113,
-112, 44, 32, 34, 34, 41, 10,101,110,100, 10, 10,108,111, 99, 97,108, 32,102,117,
-110, 99,116,105,111,110, 32,102,111,114,109, 97,116, 40, 99,104,117,110,107, 41,
- 10, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,105,102, 32, 99,104,117,110,107, 32, 61, 61, 32, 34,
- 34, 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 34, 39, 39, 34, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,115,
-116,114,105,110,103, 46,108,101,110, 40, 99,104,117,110,107, 41, 32,101,110,100,
- 10, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32, 34,110,105,
-108, 34, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,100,101,102,105,110,
-101, 32,116,104,101, 32,108,105,110,101, 45,119,114, 97,112, 32,102,105,108,116,
-101,114,115, 10,119,114, 97,112,116, 91, 39,116,101,120,116, 39, 93, 32, 61, 32,
-102,117,110, 99,116,105,111,110, 40,108,101,110,103,116,104, 41, 10, 32, 32, 32,
- 32,108,101,110,103,116,104, 32, 61, 32,108,101,110,103,116,104, 32,111,114, 32,
- 55, 54, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50, 46,
-102,105,108,116,101,114, 46, 99,121, 99,108,101, 40,119,114,112, 44, 32,108,101,
-110,103,116,104, 44, 32,108,101,110,103,116,104, 41, 10,101,110,100, 10,119,114,
- 97,112,116, 91, 39, 98, 97,115,101, 54, 52, 39, 93, 32, 61, 32,119,114, 97,112,
-116, 91, 39,116,101,120,116, 39, 93, 10,119,114, 97,112,116, 91, 39,100,101,102,
- 97,117,108,116, 39, 93, 32, 61, 32,119,114, 97,112,116, 91, 39,116,101,120,116,
- 39, 93, 10, 10,119,114, 97,112,116, 91, 39,113,117,111,116,101,100, 45,112,114,
-105,110,116, 97, 98,108,101, 39, 93, 32, 61, 32,102,117,110, 99,116,105,111,110,
- 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50, 46,
-102,105,108,116,101,114, 46, 99,121, 99,108,101, 40,113,112,119,114,112, 44, 32,
- 55, 54, 44, 32, 55, 54, 41, 10,101,110,100, 10, 10, 45, 45, 32,102,117,110, 99,
-116,105,111,110, 32,116,104, 97,116, 32, 99,104,111,111,115,101, 32,116,104,101,
- 32,101,110, 99,111,100,105,110,103, 44, 32,100,101, 99,111,100,105,110,103, 32,
-111,114, 32,119,114, 97,112, 32, 97,108,103,111,114,105,116,104,109, 10,101,110,
- 99,111,100,101, 32, 61, 32, 99,104,111,111,115,101, 40,101,110, 99,111,100,101,
-116, 41, 10,100,101, 99,111,100,101, 32, 61, 32, 99,104,111,111,115,101, 40,100,
-101, 99,111,100,101,116, 41, 10,119,114, 97,112, 32, 61, 32, 99,104,111,111,115,
-101, 40,119,114, 97,112,116, 41, 10, 10, 45, 45, 32,100,101,102,105,110,101, 32,
-116,104,101, 32,101,110,100, 45,111,102, 45,108,105,110,101, 32,110,111,114,109,
- 97,108,105,122, 97,116,105,111,110, 32,102,105,108,116,101,114, 10,102,117,110,
- 99,116,105,111,110, 32,110,111,114,109, 97,108,105,122,101, 40,109, 97,114,107,
-101,114, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50,
- 46,102,105,108,116,101,114, 46, 99,121, 99,108,101, 40,101,111,108, 44, 32, 48,
- 44, 32,109, 97,114,107,101,114, 41, 10,101,110,100, 10, 10, 45, 45, 32,104,105,
-103,104, 32,108,101,118,101,108, 32,115,116,117,102,102,105,110,103, 32,102,105,
-108,116,101,114, 10,102,117,110, 99,116,105,111,110, 32,115,116,117,102,102, 40,
- 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,108,116,110, 49, 50, 46,102,
-105,108,116,101,114, 46, 99,121, 99,108,101, 40,100,111,116, 44, 32, 50, 41, 10,
-101,110,100, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x74,
+ 0x6e, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x20,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x63,
+ 0x6f, 0x72, 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x69, 0x6f, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x28, 0x22, 0x69, 0x6f, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d,
+ 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x2c, 0x20, 0x64,
+ 0x65, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x2c, 0x20, 0x77, 0x72, 0x61, 0x70,
+ 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x2c, 0x7b, 0x7d, 0x2c, 0x7b, 0x7d,
+ 0x0a, 0x5f, 0x4d, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x20,
+ 0x3d, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x0a, 0x5f, 0x4d,
+ 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x64,
+ 0x65, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x0a, 0x5f, 0x4d, 0x2e, 0x77, 0x72,
+ 0x61, 0x70, 0x74, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61, 0x70,
+ 0x74, 0x20, 0x20, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73,
+ 0x65, 0x28, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f,
+ 0x70, 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65,
+ 0x29, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c,
+ 0x20, 0x6f, 0x70, 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x20,
+ 0x3d, 0x20, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x2c,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x31, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x6e, 0x69, 0x6c,
+ 0x22, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x28, 0x22, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x6b, 0x65,
+ 0x79, 0x20, 0x28, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6e, 0x61,
+ 0x6d, 0x65, 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x29, 0x22, 0x2c, 0x20,
+ 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66,
+ 0x28, 0x6f, 0x70, 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x74,
+ 0x5b, 0x27, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x27, 0x5d, 0x20, 0x3d,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c,
+ 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e,
+ 0x63, 0x79, 0x63, 0x6c, 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x62, 0x36, 0x34,
+ 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x65, 0x74, 0x5b, 0x27, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x64, 0x2d, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27,
+ 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e,
+ 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c, 0x65,
+ 0x28, 0x5f, 0x4d, 0x2e, 0x71, 0x70, 0x2c, 0x20, 0x22, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6d, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79,
+ 0x22, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x3d, 0x30, 0x44, 0x3d,
+ 0x30, 0x41, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e,
+ 0x22, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x64, 0x65, 0x63, 0x6f, 0x64,
+ 0x65, 0x74, 0x5b, 0x27, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x27, 0x5d,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x75,
+ 0x6e, 0x62, 0x36, 0x34, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x5b, 0x27, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x64, 0x2d, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x27, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e,
+ 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c, 0x65,
+ 0x28, 0x5f, 0x4d, 0x2e, 0x75, 0x6e, 0x71, 0x70, 0x2c, 0x20, 0x22, 0x22,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x3d, 0x3d,
+ 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x22, 0x27, 0x27, 0x22, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x6c, 0x65, 0x6e, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x6e, 0x69, 0x6c, 0x22,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x77, 0x72, 0x61,
+ 0x70, 0x74, 0x5b, 0x27, 0x74, 0x65, 0x78, 0x74, 0x27, 0x5d, 0x20, 0x3d,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x20, 0x6f, 0x72, 0x20, 0x37, 0x36, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c,
+ 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x77, 0x72, 0x70, 0x2c, 0x20, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x74, 0x5b,
+ 0x27, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x27, 0x5d, 0x20, 0x3d, 0x20,
+ 0x77, 0x72, 0x61, 0x70, 0x74, 0x5b, 0x27, 0x74, 0x65, 0x78, 0x74, 0x27,
+ 0x5d, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x74, 0x5b, 0x27, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x27, 0x5d, 0x20, 0x3d, 0x20, 0x77, 0x72, 0x61,
+ 0x70, 0x74, 0x5b, 0x27, 0x74, 0x65, 0x78, 0x74, 0x27, 0x5d, 0x0a, 0x77,
+ 0x72, 0x61, 0x70, 0x74, 0x5b, 0x27, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64,
+ 0x2d, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x5d,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x71,
+ 0x70, 0x77, 0x72, 0x70, 0x2c, 0x20, 0x37, 0x36, 0x2c, 0x20, 0x37, 0x36,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65,
+ 0x28, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x74, 0x29, 0x0a, 0x5f, 0x4d,
+ 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x68,
+ 0x6f, 0x6f, 0x73, 0x65, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x74,
+ 0x29, 0x0a, 0x5f, 0x4d, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20,
+ 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x28, 0x77, 0x72, 0x61, 0x70, 0x74,
+ 0x29, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28,
+ 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63, 0x6c,
+ 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x65, 0x6f, 0x6c, 0x2c, 0x20, 0x30, 0x2c,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x29, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d,
+ 0x2e, 0x73, 0x74, 0x75, 0x66, 0x66, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x74, 0x6e, 0x31,
+ 0x32, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x79, 0x63,
+ 0x6c, 0x65, 0x28, 0x5f, 0x4d, 0x2e, 0x64, 0x6f, 0x74, 0x2c, 0x20, 0x32,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x47, 0x5b, 0x27, 0x6d, 0x69,
+ 0x6d, 0x65, 0x27, 0x5d, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x0a,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/options.c b/Build/source/texk/web2c/luatexdir/luasocket/src/options.c
index 6cae7eeb924..20f4c280250 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/options.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/options.c
@@ -1,8 +1,8 @@
/*=========================================================================*\
-* Common option interface
+* Common option interface
* LuaSocket toolkit
\*=========================================================================*/
-#include <string.h>
+#include <string.h>
#include "lauxlib.h"
@@ -10,15 +10,19 @@
#include "options.h"
#include "inet.h"
+
/*=========================================================================*\
* Internal functions prototypes
\*=========================================================================*/
static int opt_setmembership(lua_State *L, p_socket ps, int level, int name);
+static int opt_ip6_setmembership(lua_State *L, p_socket ps, int level, int name);
static int opt_setboolean(lua_State *L, p_socket ps, int level, int name);
static int opt_getboolean(lua_State *L, p_socket ps, int level, int name);
-static int opt_set(lua_State *L, p_socket ps, int level, int name,
+static int opt_setint(lua_State *L, p_socket ps, int level, int name);
+static int opt_getint(lua_State *L, p_socket ps, int level, int name);
+static int opt_set(lua_State *L, p_socket ps, int level, int name,
void *val, int len);
-static int opt_get(lua_State *L, p_socket ps, int level, int name,
+static int opt_get(lua_State *L, p_socket ps, int level, int name,
void *val, int* len);
/*=========================================================================*\
@@ -56,29 +60,29 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket ps)
/* enables reuse of local address */
int opt_set_reuseaddr(lua_State *L, p_socket ps)
{
- return opt_setboolean(L, ps, SOL_SOCKET, SO_REUSEADDR);
+ return opt_setboolean(L, ps, SOL_SOCKET, SO_REUSEADDR);
}
int opt_get_reuseaddr(lua_State *L, p_socket ps)
{
- return opt_getboolean(L, ps, SOL_SOCKET, SO_REUSEADDR);
+ return opt_getboolean(L, ps, SOL_SOCKET, SO_REUSEADDR);
}
/* enables reuse of local port */
int opt_set_reuseport(lua_State *L, p_socket ps)
{
- return opt_setboolean(L, ps, SOL_SOCKET, SO_REUSEPORT);
+ return opt_setboolean(L, ps, SOL_SOCKET, SO_REUSEPORT);
}
int opt_get_reuseport(lua_State *L, p_socket ps)
{
- return opt_getboolean(L, ps, SOL_SOCKET, SO_REUSEPORT);
+ return opt_getboolean(L, ps, SOL_SOCKET, SO_REUSEPORT);
}
/* disables the Naggle algorithm */
int opt_set_tcp_nodelay(lua_State *L, p_socket ps)
{
- return opt_setboolean(L, ps, IPPROTO_TCP, TCP_NODELAY);
+ return opt_setboolean(L, ps, IPPROTO_TCP, TCP_NODELAY);
}
int opt_get_tcp_nodelay(lua_State *L, p_socket ps)
@@ -88,12 +92,12 @@ int opt_get_tcp_nodelay(lua_State *L, p_socket ps)
int opt_set_keepalive(lua_State *L, p_socket ps)
{
- return opt_setboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE);
+ return opt_setboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE);
}
int opt_get_keepalive(lua_State *L, p_socket ps)
{
- return opt_getboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE);
+ return opt_getboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE);
}
int opt_set_dontroute(lua_State *L, p_socket ps)
@@ -101,11 +105,41 @@ int opt_set_dontroute(lua_State *L, p_socket ps)
return opt_setboolean(L, ps, SOL_SOCKET, SO_DONTROUTE);
}
+int opt_get_dontroute(lua_State *L, p_socket ps)
+{
+ return opt_getboolean(L, ps, SOL_SOCKET, SO_DONTROUTE);
+}
+
int opt_set_broadcast(lua_State *L, p_socket ps)
{
return opt_setboolean(L, ps, SOL_SOCKET, SO_BROADCAST);
}
+int opt_get_broadcast(lua_State *L, p_socket ps)
+{
+ return opt_getboolean(L, ps, SOL_SOCKET, SO_BROADCAST);
+}
+
+int opt_set_ip6_unicast_hops(lua_State *L, p_socket ps)
+{
+ return opt_setint(L, ps, IPPROTO_IPV6, IPV6_UNICAST_HOPS);
+}
+
+int opt_get_ip6_unicast_hops(lua_State *L, p_socket ps)
+{
+ return opt_getint(L, ps, IPPROTO_IPV6, IPV6_UNICAST_HOPS);
+}
+
+int opt_set_ip6_multicast_hops(lua_State *L, p_socket ps)
+{
+ return opt_setint(L, ps, IPPROTO_IPV6, IPV6_MULTICAST_HOPS);
+}
+
+int opt_get_ip6_multicast_hops(lua_State *L, p_socket ps)
+{
+ return opt_getint(L, ps, IPPROTO_IPV6, IPV6_MULTICAST_HOPS);
+}
+
int opt_set_ip_multicast_loop(lua_State *L, p_socket ps)
{
return opt_setboolean(L, ps, IPPROTO_IP, IP_MULTICAST_LOOP);
@@ -116,18 +150,28 @@ int opt_get_ip_multicast_loop(lua_State *L, p_socket ps)
return opt_getboolean(L, ps, IPPROTO_IP, IP_MULTICAST_LOOP);
}
+int opt_set_ip6_multicast_loop(lua_State *L, p_socket ps)
+{
+ return opt_setboolean(L, ps, IPPROTO_IPV6, IPV6_MULTICAST_LOOP);
+}
+
+int opt_get_ip6_multicast_loop(lua_State *L, p_socket ps)
+{
+ return opt_getboolean(L, ps, IPPROTO_IPV6, IPV6_MULTICAST_LOOP);
+}
+
int opt_set_linger(lua_State *L, p_socket ps)
{
struct linger li; /* obj, name, table */
if (!lua_istable(L, 3)) auxiliar_typeerror(L,3,lua_typename(L, LUA_TTABLE));
lua_pushstring(L, "on");
lua_gettable(L, 3);
- if (!lua_isboolean(L, -1))
+ if (!lua_isboolean(L, -1))
luaL_argerror(L, 3, "boolean 'on' field expected");
li.l_onoff = (u_short) lua_toboolean(L, -1);
lua_pushstring(L, "timeout");
lua_gettable(L, 3);
- if (!lua_isnumber(L, -1))
+ if (!lua_isnumber(L, -1))
luaL_argerror(L, 3, "number 'timeout' field expected");
li.l_linger = (u_short) lua_tonumber(L, -1);
return opt_set(L, ps, SOL_SOCKET, SO_LINGER, (char *) &li, sizeof(li));
@@ -150,9 +194,7 @@ int opt_get_linger(lua_State *L, p_socket ps)
int opt_set_ip_multicast_ttl(lua_State *L, p_socket ps)
{
- int val = (int) luaL_checknumber(L, 3); /* obj, name, int */
- return opt_set(L, ps, IPPROTO_IP, IP_MULTICAST_TTL,
- (char *) &val, sizeof(val));
+ return opt_setint(L, ps, IPPROTO_IP, IP_MULTICAST_TTL);
}
int opt_set_ip_multicast_if(lua_State *L, p_socket ps)
@@ -162,7 +204,7 @@ int opt_set_ip_multicast_if(lua_State *L, p_socket ps)
val.s_addr = htonl(INADDR_ANY);
if (strcmp(address, "*") && !inet_aton(address, &val))
luaL_argerror(L, 3, "ip expected");
- return opt_set(L, ps, IPPROTO_IP, IP_MULTICAST_IF,
+ return opt_set(L, ps, IPPROTO_IP, IP_MULTICAST_IF,
(char *) &val, sizeof(val));
}
@@ -189,6 +231,21 @@ int opt_set_ip_drop_membersip(lua_State *L, p_socket ps)
return opt_setmembership(L, ps, IPPROTO_IP, IP_DROP_MEMBERSHIP);
}
+int opt_set_ip6_add_membership(lua_State *L, p_socket ps)
+{
+ return opt_ip6_setmembership(L, ps, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP);
+}
+
+int opt_set_ip6_drop_membersip(lua_State *L, p_socket ps)
+{
+ return opt_ip6_setmembership(L, ps, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP);
+}
+
+int opt_get_ip6_v6only(lua_State *L, p_socket ps)
+{
+ return opt_getboolean(L, ps, IPPROTO_IPV6, IPV6_V6ONLY);
+}
+
int opt_set_ip6_v6only(lua_State *L, p_socket ps)
{
return opt_setboolean(L, ps, IPPROTO_IPV6, IPV6_V6ONLY);
@@ -203,22 +260,48 @@ static int opt_setmembership(lua_State *L, p_socket ps, int level, int name)
if (!lua_istable(L, 3)) auxiliar_typeerror(L,3,lua_typename(L, LUA_TTABLE));
lua_pushstring(L, "multiaddr");
lua_gettable(L, 3);
- if (!lua_isstring(L, -1))
+ if (!lua_isstring(L, -1))
luaL_argerror(L, 3, "string 'multiaddr' field expected");
- if (!inet_aton(lua_tostring(L, -1), &val.imr_multiaddr))
+ if (!inet_aton(lua_tostring(L, -1), &val.imr_multiaddr))
luaL_argerror(L, 3, "invalid 'multiaddr' ip address");
lua_pushstring(L, "interface");
lua_gettable(L, 3);
- if (!lua_isstring(L, -1))
+ if (!lua_isstring(L, -1))
luaL_argerror(L, 3, "string 'interface' field expected");
val.imr_interface.s_addr = htonl(INADDR_ANY);
if (strcmp(lua_tostring(L, -1), "*") &&
- !inet_aton(lua_tostring(L, -1), &val.imr_interface))
+ !inet_aton(lua_tostring(L, -1), &val.imr_interface))
luaL_argerror(L, 3, "invalid 'interface' ip address");
return opt_set(L, ps, level, name, (char *) &val, sizeof(val));
}
-static
+static int opt_ip6_setmembership(lua_State *L, p_socket ps, int level, int name)
+{
+ struct ipv6_mreq val; /* obj, opt-name, table */
+ memset(&val, 0, sizeof(val));
+ if (!lua_istable(L, 3)) auxiliar_typeerror(L,3,lua_typename(L, LUA_TTABLE));
+ lua_pushstring(L, "multiaddr");
+ lua_gettable(L, 3);
+ if (!lua_isstring(L, -1))
+ luaL_argerror(L, 3, "string 'multiaddr' field expected");
+ if (!inet_pton(AF_INET6, lua_tostring(L, -1), &val.ipv6mr_multiaddr))
+ luaL_argerror(L, 3, "invalid 'multiaddr' ip address");
+ lua_pushstring(L, "interface");
+ lua_gettable(L, 3);
+ /* By default we listen to interface on default route
+ * (sigh). However, interface= can override it. We should
+ * support either number, or name for it. Waiting for
+ * windows port of if_nametoindex */
+ if (!lua_isnil(L, -1)) {
+ if (lua_isnumber(L, -1)) {
+ val.ipv6mr_interface = (unsigned int) lua_tonumber(L, -1);
+ } else
+ luaL_argerror(L, -1, "number 'interface' field expected");
+ }
+ return opt_set(L, ps, level, name, (char *) &val, sizeof(val));
+}
+
+static
int opt_get(lua_State *L, p_socket ps, int level, int name, void *val, int* len)
{
socklen_t socklen = *len;
@@ -231,7 +314,7 @@ int opt_get(lua_State *L, p_socket ps, int level, int name, void *val, int* len)
return 0;
}
-static
+static
int opt_set(lua_State *L, p_socket ps, int level, int name, void *val, int len)
{
if (setsockopt(*ps, level, name, (char *) val, len) < 0) {
@@ -254,9 +337,38 @@ static int opt_getboolean(lua_State *L, p_socket ps, int level, int name)
return 1;
}
+int opt_get_error(lua_State *L, p_socket ps)
+{
+ int val = 0;
+ socklen_t len = sizeof(val);
+ if (getsockopt(*ps, SOL_SOCKET, SO_ERROR, (char *) &val, &len) < 0) {
+ lua_pushnil(L);
+ lua_pushstring(L, "getsockopt failed");
+ return 2;
+ }
+ lua_pushstring(L, socket_strerror(val));
+ return 1;
+}
+
static int opt_setboolean(lua_State *L, p_socket ps, int level, int name)
{
int val = auxiliar_checkboolean(L, 3); /* obj, name, bool */
return opt_set(L, ps, level, name, (char *) &val, sizeof(val));
}
+static int opt_getint(lua_State *L, p_socket ps, int level, int name)
+{
+ int val = 0;
+ int len = sizeof(val);
+ int err = opt_get(L, ps, level, name, (char *) &val, &len);
+ if (err)
+ return err;
+ lua_pushnumber(L, val);
+ return 1;
+}
+
+static int opt_setint(lua_State *L, p_socket ps, int level, int name)
+{
+ int val = (int) lua_tonumber(L, 3); /* obj, name, int */
+ return opt_set(L, ps, level, name, (char *) &val, sizeof(val));
+}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/options.h b/Build/source/texk/web2c/luatexdir/luasocket/src/options.h
index 33825c8d25c..19ba0dfc2c3 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/options.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/options.h
@@ -18,14 +18,9 @@ typedef struct t_opt {
} t_opt;
typedef t_opt *p_opt;
-#ifndef IPV6_V6ONLY
-#define IPV6_V6ONLY 27
-#endif
-
/* supported options for setoption */
int opt_set_dontroute(lua_State *L, p_socket ps);
int opt_set_broadcast(lua_State *L, p_socket ps);
-int opt_set_reuseaddr(lua_State *L, p_socket ps);
int opt_set_tcp_nodelay(lua_State *L, p_socket ps);
int opt_set_keepalive(lua_State *L, p_socket ps);
int opt_set_linger(lua_State *L, p_socket ps);
@@ -36,16 +31,29 @@ int opt_set_ip_multicast_ttl(lua_State *L, p_socket ps);
int opt_set_ip_multicast_loop(lua_State *L, p_socket ps);
int opt_set_ip_add_membership(lua_State *L, p_socket ps);
int opt_set_ip_drop_membersip(lua_State *L, p_socket ps);
+int opt_set_ip6_unicast_hops(lua_State *L, p_socket ps);
+int opt_set_ip6_multicast_hops(lua_State *L, p_socket ps);
+int opt_set_ip6_multicast_loop(lua_State *L, p_socket ps);
+int opt_set_ip6_add_membership(lua_State *L, p_socket ps);
+int opt_set_ip6_drop_membersip(lua_State *L, p_socket ps);
int opt_set_ip6_v6only(lua_State *L, p_socket ps);
/* supported options for getoption */
+int opt_get_dontroute(lua_State *L, p_socket ps);
+int opt_get_broadcast(lua_State *L, p_socket ps);
int opt_get_reuseaddr(lua_State *L, p_socket ps);
+int opt_get_reuseport(lua_State *L, p_socket ps);
int opt_get_tcp_nodelay(lua_State *L, p_socket ps);
int opt_get_keepalive(lua_State *L, p_socket ps);
int opt_get_linger(lua_State *L, p_socket ps);
-int opt_get_reuseaddr(lua_State *L, p_socket ps);
int opt_get_ip_multicast_loop(lua_State *L, p_socket ps);
int opt_get_ip_multicast_if(lua_State *L, p_socket ps);
+int opt_get_error(lua_State *L, p_socket ps);
+int opt_get_ip6_multicast_loop(lua_State *L, p_socket ps);
+int opt_get_ip6_multicast_hops(lua_State *L, p_socket ps);
+int opt_get_ip6_unicast_hops(lua_State *L, p_socket ps);
+int opt_get_ip6_v6only(lua_State *L, p_socket ps);
+int opt_get_reuseport(lua_State *L, p_socket ps);
/* invokes the appropriate option handler */
int opt_meth_setoption(lua_State *L, p_opt opt, p_socket ps);
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/pierror.h b/Build/source/texk/web2c/luatexdir/luasocket/src/pierror.h
new file mode 100644
index 00000000000..cb773ab7f40
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/pierror.h
@@ -0,0 +1,28 @@
+#ifndef PIERROR_H
+#define PIERROR_H
+/*=========================================================================*\
+* Error messages
+* Defines platform independent error messages
+\*=========================================================================*/
+
+#define PIE_HOST_NOT_FOUND "host not found"
+#define PIE_ADDRINUSE "address already in use"
+#define PIE_ISCONN "already connected"
+#define PIE_ACCESS "permission denied"
+#define PIE_CONNREFUSED "connection refused"
+#define PIE_CONNABORTED "closed"
+#define PIE_CONNRESET "closed"
+#define PIE_TIMEDOUT "timeout"
+#define PIE_AGAIN "temporary failure in name resolution"
+#define PIE_BADFLAGS "invalid value for ai_flags"
+#define PIE_BADHINTS "invalid value for hints"
+#define PIE_FAIL "non-recoverable failure in name resolution"
+#define PIE_FAMILY "ai_family not supported"
+#define PIE_MEMORY "memory allocation failure"
+#define PIE_NONAME "host or service not provided, or not known"
+#define PIE_OVERFLOW "argument buffer overflow"
+#define PIE_PROTOCOL "resolved protocol is unknown"
+#define PIE_SERVICE "service not supported for socket type"
+#define PIE_SOCKTYPE "ai_socktype not supported"
+
+#endif
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/select.c b/Build/source/texk/web2c/luatexdir/luasocket/src/select.c
index 51fb198611a..9d133b7ab46 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/select.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/select.c
@@ -6,6 +6,7 @@
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "socket.h"
#include "timeout.h"
@@ -16,10 +17,10 @@
\*=========================================================================*/
static t_socket getfd(lua_State *L);
static int dirty(lua_State *L);
-static void collect_fd(lua_State *L, int tab, int itab,
+static void collect_fd(lua_State *L, int tab, int itab,
fd_set *set, t_socket *max_fd);
static int check_dirty(lua_State *L, int tab, int dtab, fd_set *set);
-static void return_fd(lua_State *L, fd_set *set, t_socket max_fd,
+static void return_fd(lua_State *L, fd_set *set, t_socket max_fd,
int itab, int tab, int start);
static void make_assoc(lua_State *L, int tab);
static int global_select(lua_State *L);
@@ -38,9 +39,12 @@ static luaL_Reg func[] = {
\*-------------------------------------------------------------------------*/
int select_open(lua_State *L) {
lua_pushstring(L, "_SETSIZE");
- lua_pushnumber(L, FD_SETSIZE);
+ lua_pushinteger(L, FD_SETSIZE);
lua_rawset(L, -3);
- luaL_openlib(L, NULL, func, 0);
+ lua_pushstring(L, "_SOCKETINVALID");
+ lua_pushinteger(L, SOCKET_INVALID);
+ lua_rawset(L, -3);
+ luaL_setfuncs(L, func, 0);
return 0;
}
@@ -94,10 +98,10 @@ static t_socket getfd(lua_State *L) {
lua_pushvalue(L, -2);
lua_call(L, 1, 1);
if (lua_isnumber(L, -1)) {
- double numfd = lua_tonumber(L, -1);
+ double numfd = lua_tonumber(L, -1);
fd = (numfd >= 0.0)? (t_socket) numfd: SOCKET_INVALID;
}
- }
+ }
lua_pop(L, 1);
return fd;
}
@@ -110,12 +114,12 @@ static int dirty(lua_State *L) {
lua_pushvalue(L, -2);
lua_call(L, 1, 1);
is = lua_toboolean(L, -1);
- }
+ }
lua_pop(L, 1);
return is;
}
-static void collect_fd(lua_State *L, int tab, int itab,
+static void collect_fd(lua_State *L, int tab, int itab,
fd_set *set, t_socket *max_fd) {
int i = 1, n = 0;
/* nil is the same as an empty table */
@@ -135,16 +139,16 @@ static void collect_fd(lua_State *L, int tab, int itab,
if (fd != SOCKET_INVALID) {
/* make sure we don't overflow the fd_set */
#ifdef _WIN32
- if (n >= FD_SETSIZE)
+ if (n >= FD_SETSIZE)
luaL_argerror(L, tab, "too many sockets");
#else
- if (fd >= FD_SETSIZE)
+ if (fd >= FD_SETSIZE)
luaL_argerror(L, tab, "descriptor too large for set size");
#endif
FD_SET(fd, set);
n++;
/* keep track of the largest descriptor so far */
- if (*max_fd == SOCKET_INVALID || *max_fd < fd)
+ if (*max_fd == SOCKET_INVALID || *max_fd < fd)
*max_fd = fd;
/* make sure we can map back from descriptor to the object */
lua_pushnumber(L, (lua_Number) fd);
@@ -158,9 +162,9 @@ static void collect_fd(lua_State *L, int tab, int itab,
static int check_dirty(lua_State *L, int tab, int dtab, fd_set *set) {
int ndirty = 0, i = 1;
- if (lua_isnil(L, tab))
+ if (lua_isnil(L, tab))
return 0;
- for ( ;; ) {
+ for ( ;; ) {
t_socket fd;
lua_pushnumber(L, i);
lua_gettable(L, tab);
@@ -181,7 +185,7 @@ static int check_dirty(lua_State *L, int tab, int dtab, fd_set *set) {
return ndirty;
}
-static void return_fd(lua_State *L, fd_set *set, t_socket max_fd,
+static void return_fd(lua_State *L, fd_set *set, t_socket max_fd,
int itab, int tab, int start) {
t_socket fd;
for (fd = 0; fd < max_fd; fd++) {
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/serial.c b/Build/source/texk/web2c/luatexdir/luasocket/src/serial.c
index acee67181dd..f121bbf0a61 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/serial.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/serial.c
@@ -2,7 +2,7 @@
* Serial stream
* LuaSocket toolkit
\*=========================================================================*/
-#include <string.h>
+#include <string.h>
#include "lua.h"
#include "lauxlib.h"
@@ -58,13 +58,6 @@ static luaL_Reg serial_methods[] = {
{NULL, NULL}
};
-/* our socket creation function */
-static luaL_Reg func[] = {
- {"serial", global_create},
- {NULL, NULL}
-};
-
-
/*-------------------------------------------------------------------------*\
* Initializes module
\*-------------------------------------------------------------------------*/
@@ -73,11 +66,7 @@ LUASOCKET_API int luaopen_socket_serial(lua_State *L) {
auxiliar_newclass(L, "serial{client}", serial_methods);
/* create class groups */
auxiliar_add2group(L, "serial{client}", "serial{any}");
- /* make sure the function ends up in the package table */
- luaL_openlib(L, "socket", func, 0);
- /* return the function instead of the 'socket' table */
- lua_pushstring(L, "serial");
- lua_gettable(L, -2);
+ lua_pushcfunction(L, global_create);
return 1;
}
@@ -119,7 +108,7 @@ static int meth_getfd(lua_State *L) {
/* this is very dangerous, but can be handy for those that are brave enough */
static int meth_setfd(lua_State *L) {
p_unix un = (p_unix) auxiliar_checkgroup(L, "serial{any}", 1);
- un->sock = (t_socket) luaL_checknumber(L, 2);
+ un->sock = (t_socket) luaL_checknumber(L, 2);
return 0;
}
@@ -130,7 +119,7 @@ static int meth_dirty(lua_State *L) {
}
/*-------------------------------------------------------------------------*\
-* Closes socket used by object
+* Closes socket used by object
\*-------------------------------------------------------------------------*/
static int meth_close(lua_State *L)
{
@@ -155,7 +144,7 @@ static int meth_settimeout(lua_State *L) {
/*-------------------------------------------------------------------------*\
-* Creates a serial object
+* Creates a serial object
\*-------------------------------------------------------------------------*/
static int global_create(lua_State *L) {
const char* path = luaL_checkstring(L, 1);
@@ -164,7 +153,7 @@ static int global_create(lua_State *L) {
p_unix un = (p_unix) lua_newuserdata(L, sizeof(t_unix));
/* open serial device */
-#ifdef __MINGW32__
+#if defined(_WIN32)
t_socket sock = open(path, O_RDWR);
#else
t_socket sock = open(path, O_NOCTTY|O_RDWR);
@@ -183,7 +172,7 @@ static int global_create(lua_State *L) {
/* initialize remaining structure fields */
socket_setnonblocking(&sock);
un->sock = sock;
- io_init(&un->io, (p_send) socket_write, (p_recv) socket_read,
+ io_init(&un->io, (p_send) socket_write, (p_recv) socket_read,
(p_error) socket_ioerror, &un->sock);
timeout_init(&un->tm, -1, -1);
buffer_init(&un->buf, &un->io, &un->tm);
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua
index 896b536b1ab..c19838b841c 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua
@@ -12,27 +12,29 @@ local coroutine = require("coroutine")
local string = require("string")
local math = require("math")
local os = require("os")
-local socket = require("socket")
-local tp = require("socket.tp")
-local ltn12 = require("ltn12")
-local headers = require("socket.headers")
-local mime = require("mime")
-module("socket.smtp")
+local socket = socket or require("socket") ;
+local tp = socket.tp or require("socket.tp");
+local ltn12 = ltn12 or require("ltn12");
+local headers = socket.headers or require("socket.headers");
+local mime = mime or require("mime");
+
+socket.smtp = {}
+local _M = socket.smtp
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- timeout for connection
-TIMEOUT = 60
+_M.TIMEOUT = 60
-- default server used to send e-mails
-SERVER = "localhost"
+_M.SERVER = "localhost"
-- default port
-PORT = 25
+_M.PORT = 25
-- domain used in HELO command and default sendmail
-- If we are under a CGI, try to get from environment
-DOMAIN = os.getenv("SERVER_NAME") or "localhost"
+_M.DOMAIN = os.getenv("SERVER_NAME") or "localhost"
-- default time zone (means we don't know)
-ZONE = "-0000"
+_M.ZONE = "-0000"
---------------------------------------------------------------------------
-- Low level SMTP API
@@ -41,7 +43,7 @@ local metat = { __index = {} }
function metat.__index:greet(domain)
self.try(self.tp:check("2.."))
- self.try(self.tp:command("EHLO", domain or DOMAIN))
+ self.try(self.tp:command("EHLO", domain or _M.DOMAIN))
return socket.skip(1, self.try(self.tp:check("2..")))
end
@@ -111,9 +113,9 @@ function metat.__index:send(mailt)
self:data(ltn12.source.chain(mailt.source, mime.stuff()), mailt.step)
end
-function open(server, port, create)
- local tp = socket.try(tp.connect(server or SERVER, port or PORT,
- TIMEOUT, create))
+function _M.open(server, port, create)
+ local tp = socket.try(tp.connect(server or _M.SERVER, port or _M.PORT,
+ _M.TIMEOUT, create))
local s = base.setmetatable({tp = tp}, metat)
-- make sure tp is closed if we get an exception
s.try = socket.newtry(function()
@@ -221,14 +223,14 @@ end
local function adjust_headers(mesgt)
local lower = lower_headers(mesgt.headers)
lower["date"] = lower["date"] or
- os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or ZONE)
+ os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or _M.ZONE)
lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
-- this can't be overriden
lower["mime-version"] = "1.0"
return lower
end
-function message(mesgt)
+function _M.message(mesgt)
mesgt.headers = adjust_headers(mesgt)
-- create and return message source
local co = coroutine.create(function() send_message(mesgt) end)
@@ -242,11 +244,13 @@ end
---------------------------------------------------------------------------
-- High level SMTP API
-----------------------------------------------------------------------------
-send = socket.protect(function(mailt)
- local s = open(mailt.server, mailt.port, mailt.create)
+_M.send = socket.protect(function(mailt)
+ local s = _M.open(mailt.server, mailt.port, mailt.create)
local ext = s:greet(mailt.domain)
s:auth(mailt.user, mailt.password, ext)
s:send(mailt)
s:quit()
return s:close()
end)
+
+return _M \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/smtp_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp_lua.c
index a481ba61191..6e7ec8bb4a7 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/smtp_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/smtp_lua.c
@@ -1,414 +1,504 @@
/*
- * This file is auto-generated by "lua2c smtp.lua smtp_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_smtp_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 83, 77, 84, 80, 32, 99,108,105,101,110,116, 32,115,117,112,112,111,114,116,
- 32,102,111,114, 32,116,104,101, 32, 76,117, 97, 32,108, 97,110,103,117, 97,103,
-101, 46, 10, 45, 45, 32, 76,117, 97, 83,111, 99,107,101,116, 32,116,111,111,108,
-107,105,116, 46, 10, 45, 45, 32, 65,117,116,104,111,114, 58, 32, 68,105,101,103,
-111, 32, 78,101,104, 97, 98, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101, 32,109,111,100,117,
-108,101, 32, 97,110,100, 32,105,109,112,111,114,116, 32,100,101,112,101,110,100,
-101,110, 99,105,101,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 10,108,111, 99, 97,108, 32, 98, 97,115,101, 32, 61, 32, 95, 71,
- 10,108,111, 99, 97,108, 32, 99,111,114,111,117,116,105,110,101, 32, 61, 32,114,
-101,113,117,105,114,101, 40, 34, 99,111,114,111,117,116,105,110,101, 34, 41, 10,
-108,111, 99, 97,108, 32,115,116,114,105,110,103, 32, 61, 32,114,101,113,117,105,
-114,101, 40, 34,115,116,114,105,110,103, 34, 41, 10,108,111, 99, 97,108, 32,109,
- 97,116,104, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,109, 97,116,104, 34,
- 41, 10,108,111, 99, 97,108, 32,111,115, 32, 61, 32,114,101,113,117,105,114,101,
- 40, 34,111,115, 34, 41, 10,108,111, 99, 97,108, 32,115,111, 99,107,101,116, 32,
- 61, 32,114,101,113,117,105,114,101, 40, 34,115,111, 99,107,101,116, 34, 41, 10,
-108,111, 99, 97,108, 32,116,112, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,
-115,111, 99,107,101,116, 46,116,112, 34, 41, 10,108,111, 99, 97,108, 32,108,116,
-110, 49, 50, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,116,110, 49, 50,
- 34, 41, 10,108,111, 99, 97,108, 32,104,101, 97,100,101,114,115, 32, 61, 32,114,
-101,113,117,105,114,101, 40, 34,115,111, 99,107,101,116, 46,104,101, 97,100,101,
-114,115, 34, 41, 10,108,111, 99, 97,108, 32,109,105,109,101, 32, 61, 32,114,101,
-113,117,105,114,101, 40, 34,109,105,109,101, 34, 41, 10,109,111,100,117,108,101,
- 40, 34,115,111, 99,107,101,116, 46,115,109,116,112, 34, 41, 10, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 80,114,
-111,103,114, 97,109, 32, 99,111,110,115,116, 97,110,116,115, 10, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,116,105,109,
-101,111,117,116, 32,102,111,114, 32, 99,111,110,110,101, 99,116,105,111,110, 10,
- 84, 73, 77, 69, 79, 85, 84, 32, 61, 32, 54, 48, 10, 45, 45, 32,100,101,102, 97,
-117,108,116, 32,115,101,114,118,101,114, 32,117,115,101,100, 32,116,111, 32,115,
-101,110,100, 32,101, 45,109, 97,105,108,115, 10, 83, 69, 82, 86, 69, 82, 32, 61,
- 32, 34,108,111, 99, 97,108,104,111,115,116, 34, 10, 45, 45, 32,100,101,102, 97,
-117,108,116, 32,112,111,114,116, 10, 80, 79, 82, 84, 32, 61, 32, 50, 53, 10, 45,
- 45, 32,100,111,109, 97,105,110, 32,117,115,101,100, 32,105,110, 32, 72, 69, 76,
- 79, 32, 99,111,109,109, 97,110,100, 32, 97,110,100, 32,100,101,102, 97,117,108,
-116, 32,115,101,110,100,109, 97,105,108, 10, 45, 45, 32, 73,102, 32,119,101, 32,
- 97,114,101, 32,117,110,100,101,114, 32, 97, 32, 67, 71, 73, 44, 32,116,114,121,
- 32,116,111, 32,103,101,116, 32,102,114,111,109, 32,101,110,118,105,114,111,110,
-109,101,110,116, 10, 68, 79, 77, 65, 73, 78, 32, 61, 32,111,115, 46,103,101,116,
-101,110,118, 40, 34, 83, 69, 82, 86, 69, 82, 95, 78, 65, 77, 69, 34, 41, 32,111,
-114, 32, 34,108,111, 99, 97,108,104,111,115,116, 34, 10, 45, 45, 32,100,101,102,
- 97,117,108,116, 32,116,105,109,101, 32,122,111,110,101, 32, 40,109,101, 97,110,
-115, 32,119,101, 32,100,111,110, 39,116, 32,107,110,111,119, 41, 10, 90, 79, 78,
- 69, 32, 61, 32, 34, 45, 48, 48, 48, 48, 34, 10, 10, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 76,111,119, 32,108,101,118,101,
-108, 32, 83, 77, 84, 80, 32, 65, 80, 73, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,109,101,116, 97,116,
- 32, 61, 32,123, 32, 95, 95,105,110,100,101,120, 32, 61, 32,123,125, 32,125, 10,
- 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,
-100,101,120, 58,103,114,101,101,116, 40,100,111,109, 97,105,110, 41, 10, 32, 32,
- 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,
-104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10, 32, 32, 32, 32,115,101,108,
-102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,
-100, 40, 34, 69, 72, 76, 79, 34, 44, 32,100,111,109, 97,105,110, 32,111,114, 32,
- 68, 79, 77, 65, 73, 78, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-115,111, 99,107,101,116, 46,115,107,105,112, 40, 49, 44, 32,115,101,108,102, 46,
-116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 50,
- 46, 46, 34, 41, 41, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110,
- 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,109, 97,105,108, 40,
-102,114,111,109, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,
-101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40, 34, 77, 65, 73, 76,
- 34, 44, 32, 34, 70, 82, 79, 77, 58, 34, 32, 46, 46, 32,102,114,111,109, 41, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46,116,114,121,
- 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34,
- 41, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116,
- 97,116, 46, 95, 95,105,110,100,101,120, 58,114, 99,112,116, 40,116,111, 41, 10,
- 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112,
- 58, 99,111,109,109, 97,110,100, 40, 34, 82, 67, 80, 84, 34, 44, 32, 34, 84, 79,
- 58, 34, 32, 46, 46, 32,116,111, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,
-104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10,101,110,100, 10, 10,102,117,
-110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120,
- 58,100, 97,116, 97, 40,115,114, 99, 44, 32,115,116,101,112, 41, 10, 32, 32, 32,
- 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,111,
-109,109, 97,110,100, 40, 34, 68, 65, 84, 65, 34, 41, 41, 10, 32, 32, 32, 32,115,
-101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,
-107, 40, 34, 51, 46, 46, 34, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,
-114,121, 40,115,101,108,102, 46,116,112, 58,115,111,117,114, 99,101, 40,115,114,
- 99, 44, 32,115,116,101,112, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,
-114,121, 40,115,101,108,102, 46,116,112, 58,115,101,110,100, 40, 34, 92,114, 92,
-110, 46, 92,114, 92,110, 34, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110,
- 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,
-101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10,101,110,100, 10, 10,102,117,110,
- 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,
-113,117,105,116, 40, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,
-115,101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40, 34, 81, 85, 73,
- 84, 34, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102,
- 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34,
- 50, 46, 46, 34, 41, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110,
- 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58, 99,108,111,115,101,
- 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46,116,
-112, 58, 99,108,111,115,101, 40, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,
-105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,108,111,
-103,105,110, 40,117,115,101,114, 44, 32,112, 97,115,115,119,111,114,100, 41, 10,
- 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112,
- 58, 99,111,109,109, 97,110,100, 40, 34, 65, 85, 84, 72, 34, 44, 32, 34, 76, 79,
- 71, 73, 78, 34, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,
-115,101,108,102, 46,116,112, 58, 99,104,101, 99,107, 40, 34, 51, 46, 46, 34, 41,
- 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,
-116,112, 58,115,101,110,100, 40,109,105,109,101, 46, 98, 54, 52, 40,117,115,101,
-114, 41, 32, 46, 46, 32, 34, 92,114, 92,110, 34, 41, 41, 10, 32, 32, 32, 32,115,
-101,108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,
-107, 40, 34, 51, 46, 46, 34, 41, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,116,
-114,121, 40,115,101,108,102, 46,116,112, 58,115,101,110,100, 40,109,105,109,101,
- 46, 98, 54, 52, 40,112, 97,115,115,119,111,114,100, 41, 32, 46, 46, 32, 34, 92,
-114, 92,110, 34, 41, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,
-108,102, 46,116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,104,101, 99,107,
- 40, 34, 50, 46, 46, 34, 41, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,
-111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,112,108, 97,
-105,110, 40,117,115,101,114, 44, 32,112, 97,115,115,119,111,114,100, 41, 10, 32,
- 32, 32, 32,108,111, 99, 97,108, 32, 97,117,116,104, 32, 61, 32, 34, 80, 76, 65,
- 73, 78, 32, 34, 32, 46, 46, 32,109,105,109,101, 46, 98, 54, 52, 40, 34, 92, 48,
- 34, 32, 46, 46, 32,117,115,101,114, 32, 46, 46, 32, 34, 92, 48, 34, 32, 46, 46,
- 32,112, 97,115,115,119,111,114,100, 41, 10, 32, 32, 32, 32,115,101,108,102, 46,
-116,114,121, 40,115,101,108,102, 46,116,112, 58, 99,111,109,109, 97,110,100, 40,
- 34, 65, 85, 84, 72, 34, 44, 32, 97,117,116,104, 41, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32,115,101,108,102, 46,116,114,121, 40,115,101,108,102, 46,
-116,112, 58, 99,104,101, 99,107, 40, 34, 50, 46, 46, 34, 41, 41, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,
-110,100,101,120, 58, 97,117,116,104, 40,117,115,101,114, 44, 32,112, 97,115,115,
-119,111,114,100, 44, 32,101,120,116, 41, 10, 32, 32, 32, 32,105,102, 32,110,111,
-116, 32,117,115,101,114, 32,111,114, 32,110,111,116, 32,112, 97,115,115,119,111,
-114,100, 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 49, 32,101,110,100,
- 10, 32, 32, 32, 32,105,102, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,
-101,120,116, 44, 32, 34, 65, 85, 84, 72, 91, 94, 92,110, 93, 43, 76, 79, 71, 73,
- 78, 34, 41, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,
-117,114,110, 32,115,101,108,102, 58,108,111,103,105,110, 40,117,115,101,114, 44,
- 32,112, 97,115,115,119,111,114,100, 41, 10, 32, 32, 32, 32,101,108,115,101,105,
-102, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,101,120,116, 44, 32, 34,
- 65, 85, 84, 72, 91, 94, 92,110, 93, 43, 80, 76, 65, 73, 78, 34, 41, 32,116,104,
-101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,
-108,102, 58,112,108, 97,105,110, 40,117,115,101,114, 44, 32,112, 97,115,115,119,
-111,114,100, 41, 10, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,115,101,108,102, 46,116,114,121, 40,110,105,108, 44, 32, 34, 97,117,116,
-104,101,110,116,105, 99, 97,116,105,111,110, 32,110,111,116, 32,115,117,112,112,
-111,114,116,101,100, 34, 41, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10,
- 10, 45, 45, 32,115,101,110,100, 32,109,101,115,115, 97,103,101, 32,111,114, 32,
-116,104,114,111,119, 32, 97,110, 32,101,120, 99,101,112,116,105,111,110, 10,102,
-117,110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,
-120, 58,115,101,110,100, 40,109, 97,105,108,116, 41, 10, 32, 32, 32, 32,115,101,
-108,102, 58,109, 97,105,108, 40,109, 97,105,108,116, 46,102,114,111,109, 41, 10,
- 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,116,121,112,101, 40,109, 97,105,
-108,116, 46,114, 99,112,116, 41, 32, 61, 61, 32, 34,116, 97, 98,108,101, 34, 32,
-116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,111,114, 32,105, 44,118,
- 32,105,110, 32, 98, 97,115,101, 46,105,112, 97,105,114,115, 40,109, 97,105,108,
-116, 46,114, 99,112,116, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,115,101,108,102, 58,114, 99,112,116, 40,118, 41, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,115,101,108,102, 58,114, 99,112,116, 40,109, 97,105,108,116,
- 46,114, 99,112,116, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,115,
-101,108,102, 58,100, 97,116, 97, 40,108,116,110, 49, 50, 46,115,111,117,114, 99,
-101, 46, 99,104, 97,105,110, 40,109, 97,105,108,116, 46,115,111,117,114, 99,101,
- 44, 32,109,105,109,101, 46,115,116,117,102,102, 40, 41, 41, 44, 32,109, 97,105,
-108,116, 46,115,116,101,112, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,
-111,110, 32,111,112,101,110, 40,115,101,114,118,101,114, 44, 32,112,111,114,116,
- 44, 32, 99,114,101, 97,116,101, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,
-116,112, 32, 61, 32,115,111, 99,107,101,116, 46,116,114,121, 40,116,112, 46, 99,
-111,110,110,101, 99,116, 40,115,101,114,118,101,114, 32,111,114, 32, 83, 69, 82,
- 86, 69, 82, 44, 32,112,111,114,116, 32,111,114, 32, 80, 79, 82, 84, 44, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 84, 73, 77, 69, 79, 85, 84, 44, 32, 99,114,101, 97,
-116,101, 41, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115, 32, 61, 32, 98,
- 97,115,101, 46,115,101,116,109,101,116, 97,116, 97, 98,108,101, 40,123,116,112,
- 32, 61, 32,116,112,125, 44, 32,109,101,116, 97,116, 41, 10, 32, 32, 32, 32, 45,
- 45, 32,109, 97,107,101, 32,115,117,114,101, 32,116,112, 32,105,115, 32, 99,108,
-111,115,101,100, 32,105,102, 32,119,101, 32,103,101,116, 32, 97,110, 32,101,120,
- 99,101,112,116,105,111,110, 10, 32, 32, 32, 32,115, 46,116,114,121, 32, 61, 32,
-115,111, 99,107,101,116, 46,110,101,119,116,114,121, 40,102,117,110, 99,116,105,
-111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,115, 58, 99,108,111,115,101,
- 40, 41, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32,115, 10,101,110,100, 10, 10, 45, 45, 32, 99,111,110,118,101,114,116,
- 32,104,101, 97,100,101,114,115, 32,116,111, 32,108,111,119,101,114, 99, 97,115,
-101, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,108,111,119,
-101,114, 95,104,101, 97,100,101,114,115, 40,104,101, 97,100,101,114,115, 41, 10,
- 32, 32, 32, 32,108,111, 99, 97,108, 32,108,111,119,101,114, 32, 61, 32,123,125,
- 10, 32, 32, 32, 32,102,111,114, 32,105, 44,118, 32,105,110, 32, 98, 97,115,101,
- 46,112, 97,105,114,115, 40,104,101, 97,100,101,114,115, 32,111,114, 32,108,111,
-119,101,114, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111,119,101,
-114, 91,115,116,114,105,110,103, 46,108,111,119,101,114, 40,105, 41, 93, 32, 61,
- 32,118, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,108,111,119,101,114, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 77,117,108,116,105,112, 97,114,
-116, 32,109,101,115,115, 97,103,101, 32,115,111,117,114, 99,101, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,114,101,
-116,117,114,110,115, 32, 97, 32,104,111,112,101,102,117,108,108,121, 32,117,110,
-105,113,117,101, 32,109,105,109,101, 32, 98,111,117,110,100, 97,114,121, 10,108,
-111, 99, 97,108, 32,115,101,113,110,111, 32, 61, 32, 48, 10,108,111, 99, 97,108,
- 32,102,117,110, 99,116,105,111,110, 32,110,101,119, 98,111,117,110,100, 97,114,
-121, 40, 41, 10, 32, 32, 32, 32,115,101,113,110,111, 32, 61, 32,115,101,113,110,
-111, 32, 43, 32, 49, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,116,114,
-105,110,103, 46,102,111,114,109, 97,116, 40, 39, 37,115, 37, 48, 53,100, 61, 61,
- 37, 48, 53,117, 39, 44, 32,111,115, 46,100, 97,116,101, 40, 39, 37,100, 37,109,
- 37, 89, 37, 72, 37, 77, 37, 83, 39, 41, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-109, 97,116,104, 46,114, 97,110,100,111,109, 40, 48, 44, 32, 57, 57, 57, 57, 57,
- 41, 44, 32,115,101,113,110,111, 41, 10,101,110,100, 10, 10, 45, 45, 32,115,101,
-110,100, 95,109,101,115,115, 97,103,101, 32,102,111,114,119, 97,114,100, 32,100,
-101, 99,108, 97,114, 97,116,105,111,110, 10,108,111, 99, 97,108, 32,115,101,110,
-100, 95,109,101,115,115, 97,103,101, 10, 10, 45, 45, 32,121,105,101,108,100, 32,
-116,104,101, 32,104,101, 97,100,101,114,115, 32, 97,108,108, 32, 97,116, 32,111,
-110, 99,101, 44, 32,105,116, 39,115, 32,102, 97,115,116,101,114, 10,108,111, 99,
- 97,108, 32,102,117,110, 99,116,105,111,110, 32,115,101,110,100, 95,104,101, 97,
-100,101,114,115, 40,116,111,115,101,110,100, 41, 10, 32, 32, 32, 32,108,111, 99,
- 97,108, 32, 99, 97,110,111,110,105, 99, 32, 61, 32,104,101, 97,100,101,114,115,
- 46, 99, 97,110,111,110,105, 99, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,104,
- 32, 61, 32, 34, 92,114, 92,110, 34, 10, 32, 32, 32, 32,102,111,114, 32,102, 44,
-118, 32,105,110, 32, 98, 97,115,101, 46,112, 97,105,114,115, 40,116,111,115,101,
-110,100, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,104, 32, 61, 32, 40,
- 99, 97,110,111,110,105, 99, 91,102, 93, 32,111,114, 32,102, 41, 32, 46, 46, 32,
- 39, 58, 32, 39, 32, 46, 46, 32,118, 32, 46, 46, 32, 34, 92,114, 92,110, 34, 32,
- 46, 46, 32,104, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 99,111,114,
-111,117,116,105,110,101, 46,121,105,101,108,100, 40,104, 41, 10,101,110,100, 10,
- 10, 45, 45, 32,121,105,101,108,100, 32,109,117,108,116,105,112, 97,114,116, 32,
-109,101,115,115, 97,103,101, 32, 98,111,100,121, 32,102,114,111,109, 32, 97, 32,
-109,117,108,116,105,112, 97,114,116, 32,109,101,115,115, 97,103,101, 32,116, 97,
- 98,108,101, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,115,
-101,110,100, 95,109,117,108,116,105,112, 97,114,116, 40,109,101,115,103,116, 41,
- 10, 32, 32, 32, 32, 45, 45, 32,109, 97,107,101, 32,115,117,114,101, 32,119,101,
- 32,104, 97,118,101, 32,111,117,114, 32, 98,111,117,110,100, 97,114,121, 32, 97,
-110,100, 32,115,101,110,100, 32,104,101, 97,100,101,114,115, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32, 98,100, 32, 61, 32,110,101,119, 98,111,117,110,100, 97,
-114,121, 40, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,104,101, 97,100,101,
-114,115, 32, 61, 32,108,111,119,101,114, 95,104,101, 97,100,101,114,115, 40,109,
-101,115,103,116, 46,104,101, 97,100,101,114,115, 32,111,114, 32,123,125, 41, 10,
- 32, 32, 32, 32,104,101, 97,100,101,114,115, 91, 39, 99,111,110,116,101,110,116,
- 45,116,121,112,101, 39, 93, 32, 61, 32,104,101, 97,100,101,114,115, 91, 39, 99,
-111,110,116,101,110,116, 45,116,121,112,101, 39, 93, 32,111,114, 32, 39,109,117,
-108,116,105,112, 97,114,116, 47,109,105,120,101,100, 39, 10, 32, 32, 32, 32,104,
-101, 97,100,101,114,115, 91, 39, 99,111,110,116,101,110,116, 45,116,121,112,101,
- 39, 93, 32, 61, 32,104,101, 97,100,101,114,115, 91, 39, 99,111,110,116,101,110,
-116, 45,116,121,112,101, 39, 93, 32, 46, 46, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 39, 59, 32, 98,111,117,110,100, 97,114,121, 61, 34, 39, 32, 46, 46, 32, 32, 98,
-100, 32, 46, 46, 32, 39, 34, 39, 10, 32, 32, 32, 32,115,101,110,100, 95,104,101,
- 97,100,101,114,115, 40,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32, 45,
- 45, 32,115,101,110,100, 32,112,114,101, 97,109, 98,108,101, 10, 32, 32, 32, 32,
-105,102, 32,109,101,115,103,116, 46, 98,111,100,121, 46,112,114,101, 97,109, 98,
-108,101, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 99,111,114,111,
-117,116,105,110,101, 46,121,105,101,108,100, 40,109,101,115,103,116, 46, 98,111,
-100,121, 46,112,114,101, 97,109, 98,108,101, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 99,111,114,111,117,116,105,110,101, 46,121,105,101,108,100, 40, 34, 92,114,
- 92,110, 34, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 45, 45, 32,
-115,101,110,100, 32,101, 97, 99,104, 32,112, 97,114,116, 32,115,101,112, 97,114,
- 97,116,101,100, 32, 98,121, 32, 97, 32, 98,111,117,110,100, 97,114,121, 10, 32,
- 32, 32, 32,102,111,114, 32,105, 44, 32,109, 32,105,110, 32, 98, 97,115,101, 46,
-105,112, 97,105,114,115, 40,109,101,115,103,116, 46, 98,111,100,121, 41, 32,100,
-111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 99,111,114,111,117,116,105,110,101, 46,
-121,105,101,108,100, 40, 34, 92,114, 92,110, 45, 45, 34, 32, 46, 46, 32, 98,100,
- 32, 46, 46, 32, 34, 92,114, 92,110, 34, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-115,101,110,100, 95,109,101,115,115, 97,103,101, 40,109, 41, 10, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32, 45, 45, 32,115,101,110,100, 32,108, 97,115,116,
- 32, 98,111,117,110,100, 97,114,121, 10, 32, 32, 32, 32, 99,111,114,111,117,116,
-105,110,101, 46,121,105,101,108,100, 40, 34, 92,114, 92,110, 45, 45, 34, 32, 46,
- 46, 32, 98,100, 32, 46, 46, 32, 34, 45, 45, 92,114, 92,110, 92,114, 92,110, 34,
- 41, 10, 32, 32, 32, 32, 45, 45, 32,115,101,110,100, 32,101,112,105,108,111,103,
-117,101, 10, 32, 32, 32, 32,105,102, 32,109,101,115,103,116, 46, 98,111,100,121,
- 46,101,112,105,108,111,103,117,101, 32,116,104,101,110, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 99,111,114,111,117,116,105,110,101, 46,121,105,101,108,100, 40,109,
-101,115,103,116, 46, 98,111,100,121, 46,101,112,105,108,111,103,117,101, 41, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 99,111,114,111,117,116,105,110,101, 46,121,105,
-101,108,100, 40, 34, 92,114, 92,110, 34, 41, 10, 32, 32, 32, 32,101,110,100, 10,
-101,110,100, 10, 10, 45, 45, 32,121,105,101,108,100, 32,109,101,115,115, 97,103,
-101, 32, 98,111,100,121, 32,102,114,111,109, 32, 97, 32,115,111,117,114, 99,101,
- 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,115,101,110,100,
- 95,115,111,117,114, 99,101, 40,109,101,115,103,116, 41, 10, 32, 32, 32, 32, 45,
- 45, 32,109, 97,107,101, 32,115,117,114,101, 32,119,101, 32,104, 97,118,101, 32,
- 97, 32, 99,111,110,116,101,110,116, 45,116,121,112,101, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,104,101, 97,100,101,114,115, 32, 61, 32,108,111,119,101,114,
- 95,104,101, 97,100,101,114,115, 40,109,101,115,103,116, 46,104,101, 97,100,101,
-114,115, 32,111,114, 32,123,125, 41, 10, 32, 32, 32, 32,104,101, 97,100,101,114,
-115, 91, 39, 99,111,110,116,101,110,116, 45,116,121,112,101, 39, 93, 32, 61, 32,
-104,101, 97,100,101,114,115, 91, 39, 99,111,110,116,101,110,116, 45,116,121,112,
-101, 39, 93, 32,111,114, 10, 32, 32, 32, 32, 32, 32, 32, 32, 39,116,101,120,116,
- 47,112,108, 97,105,110, 59, 32, 99,104, 97,114,115,101,116, 61, 34,105,115,111,
- 45, 56, 56, 53, 57, 45, 49, 34, 39, 10, 32, 32, 32, 32,115,101,110,100, 95,104,
-101, 97,100,101,114,115, 40,104,101, 97,100,101,114,115, 41, 10, 32, 32, 32, 32,
- 45, 45, 32,115,101,110,100, 32, 98,111,100,121, 32,102,114,111,109, 32,115,111,
-117,114, 99,101, 10, 32, 32, 32, 32,119,104,105,108,101, 32,116,114,117,101, 32,
-100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,104,117,
-110,107, 44, 32,101,114,114, 32, 61, 32,109,101,115,103,116, 46, 98,111,100,121,
- 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,101,114,114, 32,116,104,
-101,110, 32, 99,111,114,111,117,116,105,110,101, 46,121,105,101,108,100, 40,110,
-105,108, 44, 32,101,114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,
-101,105,102, 32, 99,104,117,110,107, 32,116,104,101,110, 32, 99,111,114,111,117,
-116,105,110,101, 46,121,105,101,108,100, 40, 99,104,117,110,107, 41, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,101,108,115,101, 32, 98,114,101, 97,107, 32,101,110,100,
- 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,121,105,101,
-108,100, 32,109,101,115,115, 97,103,101, 32, 98,111,100,121, 32,102,114,111,109,
- 32, 97, 32,115,116,114,105,110,103, 10,108,111, 99, 97,108, 32,102,117,110, 99,
-116,105,111,110, 32,115,101,110,100, 95,115,116,114,105,110,103, 40,109,101,115,
-103,116, 41, 10, 32, 32, 32, 32, 45, 45, 32,109, 97,107,101, 32,115,117,114,101,
- 32,119,101, 32,104, 97,118,101, 32, 97, 32, 99,111,110,116,101,110,116, 45,116,
-121,112,101, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,104,101, 97,100,101,114,
-115, 32, 61, 32,108,111,119,101,114, 95,104,101, 97,100,101,114,115, 40,109,101,
-115,103,116, 46,104,101, 97,100,101,114,115, 32,111,114, 32,123,125, 41, 10, 32,
- 32, 32, 32,104,101, 97,100,101,114,115, 91, 39, 99,111,110,116,101,110,116, 45,
-116,121,112,101, 39, 93, 32, 61, 32,104,101, 97,100,101,114,115, 91, 39, 99,111,
-110,116,101,110,116, 45,116,121,112,101, 39, 93, 32,111,114, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 39,116,101,120,116, 47,112,108, 97,105,110, 59, 32, 99,104, 97,
-114,115,101,116, 61, 34,105,115,111, 45, 56, 56, 53, 57, 45, 49, 34, 39, 10, 32,
- 32, 32, 32,115,101,110,100, 95,104,101, 97,100,101,114,115, 40,104,101, 97,100,
-101,114,115, 41, 10, 32, 32, 32, 32, 45, 45, 32,115,101,110,100, 32, 98,111,100,
-121, 32,102,114,111,109, 32,115,116,114,105,110,103, 10, 32, 32, 32, 32, 99,111,
-114,111,117,116,105,110,101, 46,121,105,101,108,100, 40,109,101,115,103,116, 46,
- 98,111,100,121, 41, 10,101,110,100, 10, 10, 45, 45, 32,109,101,115,115, 97,103,
-101, 32,115,111,117,114, 99,101, 10,102,117,110, 99,116,105,111,110, 32,115,101,
-110,100, 95,109,101,115,115, 97,103,101, 40,109,101,115,103,116, 41, 10, 32, 32,
- 32, 32,105,102, 32, 98, 97,115,101, 46,116,121,112,101, 40,109,101,115,103,116,
- 46, 98,111,100,121, 41, 32, 61, 61, 32, 34,116, 97, 98,108,101, 34, 32,116,104,
-101,110, 32,115,101,110,100, 95,109,117,108,116,105,112, 97,114,116, 40,109,101,
-115,103,116, 41, 10, 32, 32, 32, 32,101,108,115,101,105,102, 32, 98, 97,115,101,
- 46,116,121,112,101, 40,109,101,115,103,116, 46, 98,111,100,121, 41, 32, 61, 61,
- 32, 34,102,117,110, 99,116,105,111,110, 34, 32,116,104,101,110, 32,115,101,110,
-100, 95,115,111,117,114, 99,101, 40,109,101,115,103,116, 41, 10, 32, 32, 32, 32,
-101,108,115,101, 32,115,101,110,100, 95,115,116,114,105,110,103, 40,109,101,115,
-103,116, 41, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 32,115,101,116, 32,
-100,101,102, 97,117,108, 32,104,101, 97,100,101,114,115, 10,108,111, 99, 97,108,
- 32,102,117,110, 99,116,105,111,110, 32, 97,100,106,117,115,116, 95,104,101, 97,
-100,101,114,115, 40,109,101,115,103,116, 41, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,108,111,119,101,114, 32, 61, 32,108,111,119,101,114, 95,104,101, 97,100,
-101,114,115, 40,109,101,115,103,116, 46,104,101, 97,100,101,114,115, 41, 10, 32,
- 32, 32, 32,108,111,119,101,114, 91, 34,100, 97,116,101, 34, 93, 32, 61, 32,108,
-111,119,101,114, 91, 34,100, 97,116,101, 34, 93, 32,111,114, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,111,115, 46,100, 97,116,101, 40, 34, 33, 37, 97, 44, 32, 37,100,
- 32, 37, 98, 32, 37, 89, 32, 37, 72, 58, 37, 77, 58, 37, 83, 32, 34, 41, 32, 46,
- 46, 32, 40,109,101,115,103,116, 46,122,111,110,101, 32,111,114, 32, 90, 79, 78,
- 69, 41, 10, 32, 32, 32, 32,108,111,119,101,114, 91, 34,120, 45,109, 97,105,108,
-101,114, 34, 93, 32, 61, 32,108,111,119,101,114, 91, 34,120, 45,109, 97,105,108,
-101,114, 34, 93, 32,111,114, 32,115,111, 99,107,101,116, 46, 95, 86, 69, 82, 83,
- 73, 79, 78, 10, 32, 32, 32, 32, 45, 45, 32,116,104,105,115, 32, 99, 97,110, 39,
-116, 32, 98,101, 32,111,118,101,114,114,105,100,101,110, 10, 32, 32, 32, 32,108,
-111,119,101,114, 91, 34,109,105,109,101, 45,118,101,114,115,105,111,110, 34, 93,
- 32, 61, 32, 34, 49, 46, 48, 34, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-108,111,119,101,114, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,
-109,101,115,115, 97,103,101, 40,109,101,115,103,116, 41, 10, 32, 32, 32, 32,109,
-101,115,103,116, 46,104,101, 97,100,101,114,115, 32, 61, 32, 97,100,106,117,115,
-116, 95,104,101, 97,100,101,114,115, 40,109,101,115,103,116, 41, 10, 32, 32, 32,
- 32, 45, 45, 32, 99,114,101, 97,116,101, 32, 97,110,100, 32,114,101,116,117,114,
-110, 32,109,101,115,115, 97,103,101, 32,115,111,117,114, 99,101, 10, 32, 32, 32,
- 32,108,111, 99, 97,108, 32, 99,111, 32, 61, 32, 99,111,114,111,117,116,105,110,
-101, 46, 99,114,101, 97,116,101, 40,102,117,110, 99,116,105,111,110, 40, 41, 32,
-115,101,110,100, 95,109,101,115,115, 97,103,101, 40,109,101,115,103,116, 41, 32,
-101,110,100, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,
-116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108,
- 32,114,101,116, 44, 32, 97, 44, 32, 98, 32, 61, 32, 99,111,114,111,117,116,105,
-110,101, 46,114,101,115,117,109,101, 40, 99,111, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,114,101,116, 32,116,104,101,110, 32,114,101,116,117,114,110,
- 32, 97, 44, 32, 98, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,
-101,116,117,114,110, 32,110,105,108, 44, 32, 97, 32,101,110,100, 10, 32, 32, 32,
- 32,101,110,100, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 45, 45, 32, 72,105,103,104, 32,108,101,118,101,108, 32,
- 83, 77, 84, 80, 32, 65, 80, 73, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 10,115,101,110,100, 32, 61, 32,115,111, 99,107,101,116,
- 46,112,114,111,116,101, 99,116, 40,102,117,110, 99,116,105,111,110, 40,109, 97,
-105,108,116, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115, 32, 61, 32,111,
-112,101,110, 40,109, 97,105,108,116, 46,115,101,114,118,101,114, 44, 32,109, 97,
-105,108,116, 46,112,111,114,116, 44, 32,109, 97,105,108,116, 46, 99,114,101, 97,
-116,101, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,101,120,116, 32, 61, 32,
-115, 58,103,114,101,101,116, 40,109, 97,105,108,116, 46,100,111,109, 97,105,110,
- 41, 10, 32, 32, 32, 32,115, 58, 97,117,116,104, 40,109, 97,105,108,116, 46,117,
-115,101,114, 44, 32,109, 97,105,108,116, 46,112, 97,115,115,119,111,114,100, 44,
- 32,101,120,116, 41, 10, 32, 32, 32, 32,115, 58,115,101,110,100, 40,109, 97,105,
-108,116, 41, 10, 32, 32, 32, 32,115, 58,113,117,105,116, 40, 41, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,115, 58, 99,108,111,115,101, 40, 41, 10,101,110,
-100, 41, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f,
+ 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x63, 0x6f, 0x72, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x61,
+ 0x74, 0x68, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x28, 0x22, 0x6d, 0x61, 0x74, 0x68, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x28, 0x22, 0x6f, 0x73, 0x22, 0x29, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d,
+ 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x22, 0x29, 0x20, 0x3b, 0x20, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x74, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x74, 0x70, 0x22, 0x29, 0x3b, 0x20, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x74, 0x6e,
+ 0x31, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x28, 0x22, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x22, 0x29, 0x3b, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x29, 0x3b,
+ 0x20, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x69, 0x6d, 0x65,
+ 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d, 0x69, 0x6d, 0x65,
+ 0x22, 0x29, 0x3b, 0x20, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x73, 0x6d, 0x74, 0x70, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6d, 0x74, 0x70, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x20, 0x3d, 0x20, 0x36, 0x30,
+ 0x0a, 0x5f, 0x4d, 0x2e, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x20, 0x3d,
+ 0x20, 0x22, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x22,
+ 0x0a, 0x5f, 0x4d, 0x2e, 0x50, 0x4f, 0x52, 0x54, 0x20, 0x3d, 0x20, 0x32,
+ 0x35, 0x0a, 0x5f, 0x4d, 0x2e, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x20,
+ 0x3d, 0x20, 0x6f, 0x73, 0x2e, 0x67, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x28,
+ 0x22, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45,
+ 0x22, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x68, 0x6f, 0x73, 0x74, 0x22, 0x0a, 0x5f, 0x4d, 0x2e, 0x5a, 0x4f, 0x4e,
+ 0x45, 0x20, 0x3d, 0x20, 0x22, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x22, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x20,
+ 0x3d, 0x20, 0x7b, 0x20, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20,
+ 0x3d, 0x20, 0x7b, 0x7d, 0x20, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x67, 0x72, 0x65, 0x65, 0x74, 0x28,
+ 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22,
+ 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28,
+ 0x22, 0x45, 0x48, 0x4c, 0x4f, 0x22, 0x2c, 0x20, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x44, 0x4f, 0x4d,
+ 0x41, 0x49, 0x4e, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x73, 0x6b, 0x69, 0x70, 0x28, 0x31, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22,
+ 0x29, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x6d, 0x61, 0x69, 0x6c, 0x28,
+ 0x66, 0x72, 0x6f, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22,
+ 0x4d, 0x41, 0x49, 0x4c, 0x22, 0x2c, 0x20, 0x22, 0x46, 0x52, 0x4f, 0x4d,
+ 0x3a, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22,
+ 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61,
+ 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x63,
+ 0x70, 0x74, 0x28, 0x74, 0x6f, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28,
+ 0x22, 0x52, 0x43, 0x50, 0x54, 0x22, 0x2c, 0x20, 0x22, 0x54, 0x4f, 0x3a,
+ 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x74, 0x6f, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e,
+ 0x22, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x64, 0x61, 0x74, 0x61, 0x28,
+ 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x28, 0x22, 0x44, 0x41, 0x54, 0x41, 0x22, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68,
+ 0x65, 0x63, 0x6b, 0x28, 0x22, 0x33, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x28, 0x73, 0x72, 0x63, 0x2c, 0x20, 0x73, 0x74, 0x65,
+ 0x70, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70,
+ 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x2e,
+ 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a,
+ 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79,
+ 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x51, 0x55, 0x49, 0x54, 0x22, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28,
+ 0x22, 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63,
+ 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,
+ 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x3a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x28, 0x75, 0x73, 0x65, 0x72, 0x2c,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x28, 0x22, 0x41, 0x55, 0x54, 0x48, 0x22, 0x2c, 0x20,
+ 0x22, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b,
+ 0x28, 0x22, 0x33, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x6d,
+ 0x69, 0x6d, 0x65, 0x2e, 0x62, 0x36, 0x34, 0x28, 0x75, 0x73, 0x65, 0x72,
+ 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x33, 0x2e, 0x2e, 0x22, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72,
+ 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x73, 0x65,
+ 0x6e, 0x64, 0x28, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x62, 0x36, 0x34, 0x28,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x29, 0x20, 0x2e, 0x2e,
+ 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22, 0x32, 0x2e, 0x2e,
+ 0x22, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x70, 0x6c, 0x61, 0x69, 0x6e,
+ 0x28, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x61, 0x75, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x22, 0x50,
+ 0x4c, 0x41, 0x49, 0x4e, 0x20, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x6d, 0x69,
+ 0x6d, 0x65, 0x2e, 0x62, 0x36, 0x34, 0x28, 0x22, 0x5c, 0x30, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x2e, 0x2e, 0x20, 0x22,
+ 0x5c, 0x30, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
+ 0x70, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x28, 0x22, 0x41,
+ 0x55, 0x54, 0x48, 0x22, 0x2c, 0x20, 0x61, 0x75, 0x74, 0x68, 0x29, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x73, 0x65, 0x6c,
+ 0x66, 0x2e, 0x74, 0x70, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x22,
+ 0x32, 0x2e, 0x2e, 0x22, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61,
+ 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x61, 0x75,
+ 0x74, 0x68, 0x28, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x65, 0x78, 0x74, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70,
+ 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x65, 0x78, 0x74,
+ 0x2c, 0x20, 0x22, 0x41, 0x55, 0x54, 0x48, 0x5b, 0x5e, 0x5c, 0x6e, 0x5d,
+ 0x2b, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x6c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x28, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x65, 0x78, 0x74, 0x2c, 0x20,
+ 0x22, 0x41, 0x55, 0x54, 0x48, 0x5b, 0x5e, 0x5c, 0x6e, 0x5d, 0x2b, 0x50,
+ 0x4c, 0x41, 0x49, 0x4e, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x70, 0x6c, 0x61, 0x69,
+ 0x6e, 0x28, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x74, 0x72, 0x79, 0x28, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70,
+ 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e,
+ 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73, 0x65, 0x6e, 0x64,
+ 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x6d, 0x61, 0x69, 0x6c, 0x28, 0x6d, 0x61,
+ 0x69, 0x6c, 0x74, 0x2e, 0x66, 0x72, 0x6f, 0x6d, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79,
+ 0x70, 0x65, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x72, 0x63, 0x70,
+ 0x74, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x76, 0x20, 0x69,
+ 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72,
+ 0x73, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x72, 0x63, 0x70, 0x74,
+ 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x72, 0x63,
+ 0x70, 0x74, 0x28, 0x76, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x3a, 0x72, 0x63, 0x70, 0x74, 0x28, 0x6d, 0x61, 0x69,
+ 0x6c, 0x74, 0x2e, 0x72, 0x63, 0x70, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c,
+ 0x66, 0x3a, 0x64, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x74, 0x6e, 0x31, 0x32,
+ 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x69,
+ 0x6e, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x2c, 0x20, 0x6d, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x75,
+ 0x66, 0x66, 0x28, 0x29, 0x29, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6c, 0x74,
+ 0x2e, 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x6f,
+ 0x70, 0x65, 0x6e, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20,
+ 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x74, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x74, 0x72, 0x79, 0x28, 0x74, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+ 0x63, 0x74, 0x28, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6f, 0x72,
+ 0x20, 0x5f, 0x4d, 0x2e, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x2c, 0x20,
+ 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x50,
+ 0x4f, 0x52, 0x54, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x2c,
+ 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x20, 0x3d, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x74, 0x70, 0x20, 0x3d, 0x20,
+ 0x74, 0x70, 0x7d, 0x2c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x2e, 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x6e, 0x65, 0x77, 0x74, 0x72,
+ 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x3a, 0x63,
+ 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x73, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x6f, 0x77,
+ 0x65, 0x72, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x77,
+ 0x65, 0x72, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x69, 0x29,
+ 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x71, 0x6e, 0x6f, 0x20, 0x3d,
+ 0x20, 0x30, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x62, 0x6f, 0x75,
+ 0x6e, 0x64, 0x61, 0x72, 0x79, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x65, 0x71, 0x6e, 0x6f, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x71, 0x6e,
+ 0x6f, 0x20, 0x2b, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x27, 0x25, 0x73, 0x25, 0x30,
+ 0x35, 0x64, 0x3d, 0x3d, 0x25, 0x30, 0x35, 0x75, 0x27, 0x2c, 0x20, 0x6f,
+ 0x73, 0x2e, 0x64, 0x61, 0x74, 0x65, 0x28, 0x27, 0x25, 0x64, 0x25, 0x6d,
+ 0x25, 0x59, 0x25, 0x48, 0x25, 0x4d, 0x25, 0x53, 0x27, 0x29, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x74, 0x68,
+ 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x30, 0x2c, 0x20, 0x39,
+ 0x39, 0x39, 0x39, 0x39, 0x29, 0x2c, 0x20, 0x73, 0x65, 0x71, 0x6e, 0x6f,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x28, 0x74, 0x6f, 0x73, 0x65, 0x6e, 0x64, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63,
+ 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68,
+ 0x20, 0x3d, 0x20, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x2c, 0x76, 0x20, 0x69, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28,
+ 0x74, 0x6f, 0x73, 0x65, 0x6e, 0x64, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x28,
+ 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x5b, 0x66, 0x5d, 0x20, 0x6f,
+ 0x72, 0x20, 0x66, 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x27, 0x3a, 0x20, 0x27,
+ 0x20, 0x2e, 0x2e, 0x20, 0x76, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5c, 0x72,
+ 0x5c, 0x6e, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x68, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x72,
+ 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64,
+ 0x28, 0x68, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73,
+ 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72,
+ 0x74, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x64, 0x20, 0x3d, 0x20,
+ 0x6e, 0x65, 0x77, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f,
+ 0x77, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28,
+ 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x27, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x27, 0x5d,
+ 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x27,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65,
+ 0x27, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x27, 0x6d, 0x75, 0x6c, 0x74, 0x69,
+ 0x70, 0x61, 0x72, 0x74, 0x2f, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x27, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b,
+ 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70,
+ 0x65, 0x27, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74,
+ 0x79, 0x70, 0x65, 0x27, 0x5d, 0x20, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x3b, 0x20, 0x62, 0x6f, 0x75, 0x6e,
+ 0x64, 0x61, 0x72, 0x79, 0x3d, 0x22, 0x27, 0x20, 0x2e, 0x2e, 0x20, 0x20,
+ 0x62, 0x64, 0x20, 0x2e, 0x2e, 0x20, 0x27, 0x22, 0x27, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6d, 0x65, 0x73, 0x67, 0x74,
+ 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62,
+ 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x6d, 0x65, 0x73, 0x67,
+ 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x65, 0x61, 0x6d,
+ 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79,
+ 0x69, 0x65, 0x6c, 0x64, 0x28, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x20, 0x6d, 0x20, 0x69, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73,
+ 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x29,
+ 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69,
+ 0x65, 0x6c, 0x64, 0x28, 0x22, 0x5c, 0x72, 0x5c, 0x6e, 0x2d, 0x2d, 0x22,
+ 0x20, 0x2e, 0x2e, 0x20, 0x62, 0x64, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5c,
+ 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74,
+ 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x22, 0x5c,
+ 0x72, 0x5c, 0x6e, 0x2d, 0x2d, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x62, 0x64,
+ 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2d, 0x2d, 0x5c, 0x72, 0x5c, 0x6e, 0x5c,
+ 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e,
+ 0x65, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f,
+ 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c,
+ 0x64, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79,
+ 0x2e, 0x65, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x22,
+ 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65,
+ 0x6e, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x6d, 0x65,
+ 0x73, 0x67, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d,
+ 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b,
+ 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70,
+ 0x65, 0x27, 0x5d, 0x20, 0x3d, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74,
+ 0x79, 0x70, 0x65, 0x27, 0x5d, 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70,
+ 0x6c, 0x61, 0x69, 0x6e, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
+ 0x74, 0x3d, 0x22, 0x69, 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d,
+ 0x31, 0x22, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64,
+ 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68,
+ 0x69, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x64, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64,
+ 0x79, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x79, 0x69,
+ 0x65, 0x6c, 0x64, 0x28, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x69, 0x66, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x77, 0x65,
+ 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6d, 0x65,
+ 0x73, 0x67, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20,
+ 0x6f, 0x72, 0x20, 0x7b, 0x7d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x27, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x27, 0x5d, 0x20, 0x3d,
+ 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x5b, 0x27, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x27, 0x5d,
+ 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3b,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x69, 0x73,
+ 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x22, 0x27, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x28, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x65, 0x2e, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x6d, 0x65, 0x73,
+ 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65,
+ 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x6d,
+ 0x65, 0x73, 0x67, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6d,
+ 0x65, 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x61, 0x72, 0x74, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6d, 0x65,
+ 0x73, 0x67, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x29, 0x20, 0x3d, 0x3d,
+ 0x20, 0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x73, 0x65, 0x6e,
+ 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6d, 0x65, 0x73,
+ 0x67, 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x5f, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72,
+ 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6d, 0x65, 0x73,
+ 0x67, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x64,
+ 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x77, 0x65,
+ 0x72, 0x5b, 0x22, 0x64, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x20, 0x6f, 0x72,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e,
+ 0x64, 0x61, 0x74, 0x65, 0x28, 0x22, 0x21, 0x25, 0x61, 0x2c, 0x20, 0x25,
+ 0x64, 0x20, 0x25, 0x62, 0x20, 0x25, 0x59, 0x20, 0x25, 0x48, 0x3a, 0x25,
+ 0x4d, 0x3a, 0x25, 0x53, 0x20, 0x22, 0x29, 0x20, 0x2e, 0x2e, 0x20, 0x28,
+ 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
+ 0x72, 0x20, 0x5f, 0x4d, 0x2e, 0x5a, 0x4f, 0x4e, 0x45, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x78, 0x2d,
+ 0x6d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x78, 0x2d, 0x6d, 0x61, 0x69, 0x6c,
+ 0x65, 0x72, 0x22, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x6d,
+ 0x69, 0x6d, 0x65, 0x2d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x77,
+ 0x65, 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x28, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x6d, 0x65, 0x73, 0x67, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74,
+ 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x28, 0x6d, 0x65, 0x73,
+ 0x67, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x63, 0x6f, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x28,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x73,
+ 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28,
+ 0x6d, 0x65, 0x73, 0x67, 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x72, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x2c, 0x20, 0x62, 0x20, 0x3d, 0x20,
+ 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x2e, 0x72, 0x65,
+ 0x73, 0x75, 0x6d, 0x65, 0x28, 0x63, 0x6f, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x72, 0x65, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x61, 0x2c, 0x20, 0x62, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x61, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x5f, 0x4d, 0x2e, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74,
+ 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x61,
+ 0x69, 0x6c, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x2e, 0x63,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x73,
+ 0x3a, 0x67, 0x72, 0x65, 0x65, 0x74, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74,
+ 0x2e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x3a, 0x61, 0x75, 0x74, 0x68, 0x28, 0x6d, 0x61, 0x69, 0x6c,
+ 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x61, 0x69, 0x6c,
+ 0x74, 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c, 0x20,
+ 0x65, 0x78, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x3a, 0x71, 0x75, 0x69, 0x74, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x65, 0x6e, 0x64,
+ 0x29, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/socket.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/socket.lua
index e8def759f47..d1c0b164924 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/socket.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/socket.lua
@@ -10,20 +10,21 @@ local base = _G
local string = require("string")
local math = require("math")
local socket = require("socket.core")
-module("socket")
+
+local _M = socket
-----------------------------------------------------------------------------
-- Exported auxiliar functions
-----------------------------------------------------------------------------
-function connect4(address, port, laddress, lport)
+function _M.connect4(address, port, laddress, lport)
return socket.connect(address, port, laddress, lport, "inet")
end
-function connect6(address, port, laddress, lport)
+function _M.connect6(address, port, laddress, lport)
return socket.connect(address, port, laddress, lport, "inet6")
end
-function bind(host, port, backlog)
+function _M.bind(host, port, backlog)
if host == "*" then host = "0.0.0.0" end
local addrinfo, err = socket.dns.getaddrinfo(host);
if not addrinfo then return nil, err end
@@ -31,30 +32,30 @@ function bind(host, port, backlog)
err = "no info on address"
for i, alt in base.ipairs(addrinfo) do
if alt.family == "inet" then
- sock, err = socket.tcp()
+ sock, err = socket.tcp4()
else
sock, err = socket.tcp6()
end
if not sock then return nil, err end
sock:setoption("reuseaddr", true)
res, err = sock:bind(alt.addr, port)
- if not res then
+ if not res then
sock:close()
- else
+ else
res, err = sock:listen(backlog)
- if not res then
+ if not res then
sock:close()
else
return sock
end
- end
+ end
end
return nil, err
end
-try = newtry()
+_M.try = _M.newtry()
-function choose(table)
+function _M.choose(table)
return function(name, opt1, opt2)
if base.type(name) ~= "string" then
name, opt1, opt2 = "default", name, opt1
@@ -69,10 +70,11 @@ end
-- Socket sources and sinks, conforming to LTN12
-----------------------------------------------------------------------------
-- create namespaces inside LuaSocket namespace
-sourcet = {}
-sinkt = {}
+local sourcet, sinkt = {}, {}
+_M.sourcet = sourcet
+_M.sinkt = sinkt
-BLOCKSIZE = 2048
+_M.BLOCKSIZE = 2048
sinkt["close-when-done"] = function(sock)
return base.setmetatable({
@@ -102,7 +104,7 @@ end
sinkt["default"] = sinkt["keep-open"]
-sink = choose(sinkt)
+_M.sink = _M.choose(sinkt)
sourcet["by-length"] = function(sock, length)
return base.setmetatable({
@@ -142,5 +144,6 @@ end
sourcet["default"] = sourcet["until-closed"]
-source = choose(sourcet)
+_M.source = _M.choose(sourcet)
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c
index bf645579cc7..55ebf35a91d 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c
@@ -1,232 +1,309 @@
/*
- * This file is auto-generated by "lua2c socket.lua socket_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_socket_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 76,117, 97, 83,111, 99,107,101,116, 32,104,101,108,112,101,114, 32,109,111,
-100,117,108,101, 10, 45, 45, 32, 65,117,116,104,111,114, 58, 32, 68,105,101,103,
-111, 32, 78,101,104, 97, 98, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101, 32,109,111,100,117,
-108,101, 32, 97,110,100, 32,105,109,112,111,114,116, 32,100,101,112,101,110,100,
-101,110, 99,105,101,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 10,108,111, 99, 97,108, 32, 98, 97,115,101, 32, 61, 32, 95, 71,
- 10,108,111, 99, 97,108, 32,115,116,114,105,110,103, 32, 61, 32,114,101,113,117,
-105,114,101, 40, 34,115,116,114,105,110,103, 34, 41, 10,108,111, 99, 97,108, 32,
-109, 97,116,104, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,109, 97,116,104,
- 34, 41, 10,108,111, 99, 97,108, 32,115,111, 99,107,101,116, 32, 61, 32,114,101,
-113,117,105,114,101, 40, 34,115,111, 99,107,101,116, 46, 99,111,114,101, 34, 41,
- 10,109,111,100,117,108,101, 40, 34,115,111, 99,107,101,116, 34, 41, 10, 10, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,
- 69,120,112,111,114,116,101,100, 32, 97,117,120,105,108,105, 97,114, 32,102,117,
-110, 99,116,105,111,110,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 10,102,117,110, 99,116,105,111,110, 32, 99,111,110,110,101,
- 99,116, 52, 40, 97,100,100,114,101,115,115, 44, 32,112,111,114,116, 44, 32,108,
- 97,100,100,114,101,115,115, 44, 32,108,112,111,114,116, 41, 10, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,115,111, 99,107,101,116, 46, 99,111,110,110,101, 99,
-116, 40, 97,100,100,114,101,115,115, 44, 32,112,111,114,116, 44, 32,108, 97,100,
-100,114,101,115,115, 44, 32,108,112,111,114,116, 44, 32, 34,105,110,101,116, 34,
- 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32, 99,111,110,110,
-101, 99,116, 54, 40, 97,100,100,114,101,115,115, 44, 32,112,111,114,116, 44, 32,
-108, 97,100,100,114,101,115,115, 44, 32,108,112,111,114,116, 41, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,115,111, 99,107,101,116, 46, 99,111,110,110,101,
- 99,116, 40, 97,100,100,114,101,115,115, 44, 32,112,111,114,116, 44, 32,108, 97,
-100,100,114,101,115,115, 44, 32,108,112,111,114,116, 44, 32, 34,105,110,101,116,
- 54, 34, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32, 98,105,
-110,100, 40,104,111,115,116, 44, 32,112,111,114,116, 44, 32, 98, 97, 99,107,108,
-111,103, 41, 10, 32, 32, 32, 32,105,102, 32,104,111,115,116, 32, 61, 61, 32, 34,
- 42, 34, 32,116,104,101,110, 32,104,111,115,116, 32, 61, 32, 34, 48, 46, 48, 46,
- 48, 46, 48, 34, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 97,
-100,100,114,105,110,102,111, 44, 32,101,114,114, 32, 61, 32,115,111, 99,107,101,
-116, 46,100,110,115, 46,103,101,116, 97,100,100,114,105,110,102,111, 40,104,111,
-115,116, 41, 59, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 97,100,100,114,
-105,110,102,111, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108,
- 44, 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,
-115,111, 99,107, 44, 32,114,101,115, 10, 32, 32, 32, 32,101,114,114, 32, 61, 32,
- 34,110,111, 32,105,110,102,111, 32,111,110, 32, 97,100,100,114,101,115,115, 34,
- 10, 32, 32, 32, 32,102,111,114, 32,105, 44, 32, 97,108,116, 32,105,110, 32, 98,
- 97,115,101, 46,105,112, 97,105,114,115, 40, 97,100,100,114,105,110,102,111, 41,
- 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32, 97,108,116, 46,102,
- 97,109,105,108,121, 32, 61, 61, 32, 34,105,110,101,116, 34, 32,116,104,101,110,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,111, 99,107, 44, 32,101,
-114,114, 32, 61, 32,115,111, 99,107,101,116, 46,116, 99,112, 40, 41, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,115,111, 99,107, 44, 32,101,114,114, 32, 61, 32,115,111, 99,107,101,
-116, 46,116, 99,112, 54, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,115,111, 99,107,
- 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,
-114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,115,111, 99,107, 58,115,
-101,116,111,112,116,105,111,110, 40, 34,114,101,117,115,101, 97,100,100,114, 34,
- 44, 32,116,114,117,101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115, 44,
- 32,101,114,114, 32, 61, 32,115,111, 99,107, 58, 98,105,110,100, 40, 97,108,116,
- 46, 97,100,100,114, 44, 32,112,111,114,116, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,105,102, 32,110,111,116, 32,114,101,115, 32,116,104,101,110, 32, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,111, 99,107, 58, 99,108,111,115,101,
- 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115, 44, 32,101,114,114, 32, 61, 32,
-115,111, 99,107, 58,108,105,115,116,101,110, 40, 98, 97, 99,107,108,111,103, 41,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,
-114,101,115, 32,116,104,101,110, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32,115,111, 99,107, 58, 99,108,111,115,101, 40, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,
-111, 99,107, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 32, 10, 32, 32, 32, 32,101,110,100,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,114,
- 10,101,110,100, 10, 10,116,114,121, 32, 61, 32,110,101,119,116,114,121, 40, 41,
- 10, 10,102,117,110, 99,116,105,111,110, 32, 99,104,111,111,115,101, 40,116, 97,
- 98,108,101, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,102,117,110, 99,
-116,105,111,110, 40,110, 97,109,101, 44, 32,111,112,116, 49, 44, 32,111,112,116,
- 50, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32, 98, 97,115,101, 46,116,
-121,112,101, 40,110, 97,109,101, 41, 32,126, 61, 32, 34,115,116,114,105,110,103,
- 34, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,110,
- 97,109,101, 44, 32,111,112,116, 49, 44, 32,111,112,116, 50, 32, 61, 32, 34,100,
-101,102, 97,117,108,116, 34, 44, 32,110, 97,109,101, 44, 32,111,112,116, 49, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-108,111, 99, 97,108, 32,102, 32, 61, 32,116, 97, 98,108,101, 91,110, 97,109,101,
- 32,111,114, 32, 34,110,105,108, 34, 93, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,
-102, 32,110,111,116, 32,102, 32,116,104,101,110, 32, 98, 97,115,101, 46,101,114,
-114,111,114, 40, 34,117,110,107,110,111,119,110, 32,107,101,121, 32, 40, 34, 46,
- 46, 32, 98, 97,115,101, 46,116,111,115,116,114,105,110,103, 40,110, 97,109,101,
- 41, 32, 46, 46, 34, 41, 34, 44, 32, 51, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,108,115,101, 32,114,101,116,117,114,110, 32,102, 40,111,112,116, 49, 44, 32,
-111,112,116, 50, 41, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10,101,110,
-100, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 10, 45, 45, 32, 83,111, 99,107,101,116, 32,115,111,117,114, 99,101,115, 32, 97,
-110,100, 32,115,105,110,107,115, 44, 32, 99,111,110,102,111,114,109,105,110,103,
- 32,116,111, 32, 76, 84, 78, 49, 50, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 99,114,101, 97,116,101, 32,110, 97,
-109,101,115,112, 97, 99,101,115, 32,105,110,115,105,100,101, 32, 76,117, 97, 83,
-111, 99,107,101,116, 32,110, 97,109,101,115,112, 97, 99,101, 10,115,111,117,114,
- 99,101,116, 32, 61, 32,123,125, 10,115,105,110,107,116, 32, 61, 32,123,125, 10,
- 10, 66, 76, 79, 67, 75, 83, 73, 90, 69, 32, 61, 32, 50, 48, 52, 56, 10, 10,115,
-105,110,107,116, 91, 34, 99,108,111,115,101, 45,119,104,101,110, 45,100,111,110,
-101, 34, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40,115,111, 99,107, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,
-109,101,116, 97,116, 97, 98,108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-103,101,116,102,100, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,
-101,116,117,114,110, 32,115,111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,
-110,100, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,
-102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,111,
- 99,107, 58,100,105,114,116,121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125,
- 44, 32,123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61,
- 32,102,117,110, 99,116,105,111,110, 40,115,101,108,102, 44, 32, 99,104,117,110,
-107, 44, 32,101,114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-105,102, 32,110,111,116, 32, 99,104,117,110,107, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,111, 99,107, 58, 99,
-108,111,115,101, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,114,101,116,117,114,110, 32, 49, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,115,111, 99,107,
- 58,115,101,110,100, 40, 99,104,117,110,107, 41, 32,101,110,100, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,125, 41, 10,101,110,100, 10,
- 10,115,105,110,107,116, 91, 34,107,101,101,112, 45,111,112,101,110, 34, 93, 32,
- 61, 32,102,117,110, 99,116,105,111,110, 40,115,111, 99,107, 41, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,
-116, 97, 98,108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,103,101,116,102,
-100, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,
-110, 32,115,111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,110,100, 44, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,102,117,110, 99,
-116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,111, 99,107, 58,100,
-105,114,116,121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125, 44, 32,123, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61, 32,102,117,110,
- 99,116,105,111,110, 40,115,101,108,102, 44, 32, 99,104,117,110,107, 44, 32,101,
-114,114, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32, 99,
-104,117,110,107, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,115,111, 99,
-107, 58,115,101,110,100, 40, 99,104,117,110,107, 41, 10, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32, 49, 32,
-101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,
-125, 41, 10,101,110,100, 10, 10,115,105,110,107,116, 91, 34,100,101,102, 97,117,
-108,116, 34, 93, 32, 61, 32,115,105,110,107,116, 91, 34,107,101,101,112, 45,111,
-112,101,110, 34, 93, 10, 10,115,105,110,107, 32, 61, 32, 99,104,111,111,115,101,
- 40,115,105,110,107,116, 41, 10, 10,115,111,117,114, 99,101,116, 91, 34, 98,121,
- 45,108,101,110,103,116,104, 34, 93, 32, 61, 32,102,117,110, 99,116,105,111,110,
- 40,115,111, 99,107, 44, 32,108,101,110,103,116,104, 41, 10, 32, 32, 32, 32,114,
-101,116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,109,101,116, 97,116, 97,
- 98,108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,103,101,116,102,100, 32,
- 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,
-115,111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,110,100, 44, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,102,117,110, 99,116,105,
-111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,111, 99,107, 58,100,105,114,
-116,121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125, 44, 32,123, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61, 32,102,117,110, 99,116,
-105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102,
- 32,108,101,110,103,116,104, 32, 60, 61, 32, 48, 32,116,104,101,110, 32,114,101,
-116,117,114,110, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,115,105,122,101, 32, 61, 32,109, 97,
-116,104, 46,109,105,110, 40,115,111, 99,107,101,116, 46, 66, 76, 79, 67, 75, 83,
- 73, 90, 69, 44, 32,108,101,110,103,116,104, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,
-114, 32, 61, 32,115,111, 99,107, 58,114,101, 99,101,105,118,101, 40,115,105,122,
-101, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,101,114,
-114, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,
-114,114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,108,
-101,110,103,116,104, 32, 61, 32,108,101,110,103,116,104, 32, 45, 32,115,116,114,
-105,110,103, 46,108,101,110, 40, 99,104,117,110,107, 41, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32, 99,104,117,110,107, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,125, 41, 10,101,
-110,100, 10, 10,115,111,117,114, 99,101,116, 91, 34,117,110,116,105,108, 45, 99,
-108,111,115,101,100, 34, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 40,115,
-111, 99,107, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,100,111,110,101, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32, 98, 97,115,101, 46,115,101,116,109,
-101,116, 97,116, 97, 98,108,101, 40,123, 10, 32, 32, 32, 32, 32, 32, 32, 32,103,
-101,116,102,100, 32, 61, 32,102,117,110, 99,116,105,111,110, 40, 41, 32,114,101,
-116,117,114,110, 32,115,111, 99,107, 58,103,101,116,102,100, 40, 41, 32,101,110,
-100, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,100,105,114,116,121, 32, 61, 32,102,
-117,110, 99,116,105,111,110, 40, 41, 32,114,101,116,117,114,110, 32,115,111, 99,
-107, 58,100,105,114,116,121, 40, 41, 32,101,110,100, 10, 32, 32, 32, 32,125, 44,
- 32,123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 95, 95, 99, 97,108,108, 32, 61, 32,
-102,117,110, 99,116,105,111,110, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,100,111,110,101, 32,116,104,101,110, 32,114,101,116,117,
-114,110, 32,110,105,108, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,108,111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,114, 44,
- 32,112, 97,114,116,105, 97,108, 32, 61, 32,115,111, 99,107, 58,114,101, 99,101,
-105,118,101, 40,115,111, 99,107,101,116, 46, 66, 76, 79, 67, 75, 83, 73, 90, 69,
- 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116,
- 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 99,104,117,
-110,107, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101,105,
-102, 32,101,114,114, 32, 61, 61, 32, 34, 99,108,111,115,101,100, 34, 32,116,104,
-101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115,
-111, 99,107, 58, 99,108,111,115,101, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,100,111,110,101, 32, 61, 32, 49, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-112, 97,114,116,105, 97,108, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-101,108,115,101, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,114,
- 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32,
- 32,125, 41, 10,101,110,100, 10, 10, 10,115,111,117,114, 99,101,116, 91, 34,100,
-101,102, 97,117,108,116, 34, 93, 32, 61, 32,115,111,117,114, 99,101,116, 91, 34,
-117,110,116,105,108, 45, 99,108,111,115,101,100, 34, 93, 10, 10,115,111,117,114,
- 99,101, 32, 61, 32, 99,104,111,111,115,101, 40,115,111,117,114, 99,101,116, 41,
- 10, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x28, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x20,
+ 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d,
+ 0x61, 0x74, 0x68, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x34, 0x28, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20,
+ 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20,
+ 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x6c, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x65, 0x74, 0x22, 0x29,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+ 0x36, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x2c, 0x20, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72,
+ 0x74, 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c,
+ 0x20, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x65,
+ 0x74, 0x36, 0x22, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x62, 0x69, 0x6e,
+ 0x64, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x2c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x6c, 0x6f, 0x67, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x2a, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x68,
+ 0x6f, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x30, 0x2e, 0x30, 0x2e, 0x30,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e,
+ 0x66, 0x6f, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x64, 0x6e, 0x73, 0x2e, 0x67, 0x65, 0x74,
+ 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x28, 0x68, 0x6f, 0x73,
+ 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x22, 0x6e, 0x6f, 0x20, 0x69,
+ 0x6e, 0x66, 0x6f, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x69, 0x2c, 0x20, 0x61, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x61, 0x64,
+ 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6c,
+ 0x74, 0x2e, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x3d, 0x3d, 0x20,
+ 0x22, 0x69, 0x6e, 0x65, 0x74, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, 0x34, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x63,
+ 0x70, 0x36, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x3a, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x22, 0x72, 0x65, 0x75, 0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x22,
+ 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x62, 0x69, 0x6e, 0x64,
+ 0x28, 0x61, 0x6c, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x2c, 0x20, 0x70,
+ 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20,
+ 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x6c,
+ 0x69, 0x73, 0x74, 0x65, 0x6e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x6c, 0x6f,
+ 0x67, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x65, 0x72, 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6e, 0x65, 0x77,
+ 0x74, 0x72, 0x79, 0x28, 0x29, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65,
+ 0x28, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x70,
+ 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29,
+ 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20,
+ 0x6f, 0x70, 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x20, 0x3d,
+ 0x20, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x2c, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x31, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x66, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x6e, 0x69, 0x6c, 0x22,
+ 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22,
+ 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x20,
+ 0x28, 0x22, 0x2e, 0x2e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29,
+ 0x20, 0x2e, 0x2e, 0x22, 0x29, 0x22, 0x2c, 0x20, 0x33, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x28, 0x6f, 0x70, 0x74,
+ 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x20, 0x3d, 0x20,
+ 0x7b, 0x7d, 0x2c, 0x20, 0x7b, 0x7d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x74, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x74,
+ 0x20, 0x3d, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x3d, 0x20,
+ 0x32, 0x30, 0x34, 0x38, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2d, 0x77, 0x68, 0x65, 0x6e, 0x2d, 0x64,
+ 0x6f, 0x6e, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x67, 0x65, 0x74,
+ 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72, 0x74, 0x79, 0x20,
+ 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x7b, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c,
+ 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f,
+ 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x6b, 0x65, 0x65,
+ 0x70, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20, 0x3d,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a,
+ 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72,
+ 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x7b,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x6f,
+ 0x70, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x69, 0x6e,
+ 0x6b, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73,
+ 0x65, 0x28, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x29, 0x0a, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x74, 0x5b, 0x22, 0x62, 0x79, 0x2d, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x6c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73,
+ 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28,
+ 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65,
+ 0x74, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x64, 0x69, 0x72, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72,
+ 0x74, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x7d, 0x2c, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x3d, 0x20, 0x30,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x61,
+ 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x2c,
+ 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x28,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x5b, 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x6f,
+ 0x6e, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65,
+ 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20,
+ 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69,
+ 0x72, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20,
+ 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f,
+ 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x64, 0x6f, 0x6e,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x20,
+ 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x42, 0x4c,
+ 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
+ 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x5b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x5b,
+ 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x64, 0x22, 0x5d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73,
+ 0x65, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x29, 0x0a, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c.module b/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c.module
new file mode 100644
index 00000000000..6a8b4340575
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/socket_lua.c.module
@@ -0,0 +1,317 @@
+/*
+ * This file is generated with xxd -i and bit of bash script.
+*/
+#include "lua.h"
+#include "lauxlib.h"
+
+int luatex_socket_lua_open (lua_State *L) {
+ int res;
+ static unsigned char B[] = {
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x28, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x20,
+ 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d,
+ 0x61, 0x74, 0x68, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x34, 0x28, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20,
+ 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20,
+ 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x6c, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x65, 0x74, 0x22, 0x29,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+ 0x36, 0x28, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70,
+ 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x2c, 0x20, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x70, 0x6f, 0x72,
+ 0x74, 0x2c, 0x20, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c,
+ 0x20, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x65,
+ 0x74, 0x36, 0x22, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x62, 0x69, 0x6e,
+ 0x64, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x2c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x6c, 0x6f, 0x67, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x2a, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x68,
+ 0x6f, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x30, 0x2e, 0x30, 0x2e, 0x30,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e,
+ 0x66, 0x6f, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x64, 0x6e, 0x73, 0x2e, 0x67, 0x65, 0x74,
+ 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x28, 0x68, 0x6f, 0x73,
+ 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x22, 0x6e, 0x6f, 0x20, 0x69,
+ 0x6e, 0x66, 0x6f, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x69, 0x2c, 0x20, 0x61, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x61, 0x64,
+ 0x64, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6c,
+ 0x74, 0x2e, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x3d, 0x3d, 0x20,
+ 0x22, 0x69, 0x6e, 0x65, 0x74, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, 0x34, 0x28,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x63,
+ 0x70, 0x36, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x3a, 0x73, 0x65, 0x74, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x28, 0x22, 0x72, 0x65, 0x75, 0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x22,
+ 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x62, 0x69, 0x6e, 0x64,
+ 0x28, 0x61, 0x6c, 0x74, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x2c, 0x20, 0x70,
+ 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20,
+ 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x6c,
+ 0x69, 0x73, 0x74, 0x65, 0x6e, 0x28, 0x62, 0x61, 0x63, 0x6b, 0x6c, 0x6f,
+ 0x67, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x65, 0x72, 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x74, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x6e, 0x65, 0x77,
+ 0x74, 0x72, 0x79, 0x28, 0x29, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65,
+ 0x28, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x70,
+ 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29,
+ 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20,
+ 0x6f, 0x70, 0x74, 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x20, 0x3d,
+ 0x20, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x2c, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x31, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x66, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x6e, 0x69, 0x6c, 0x22,
+ 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x22,
+ 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x20,
+ 0x28, 0x22, 0x2e, 0x2e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29,
+ 0x20, 0x2e, 0x2e, 0x22, 0x29, 0x22, 0x2c, 0x20, 0x33, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x28, 0x6f, 0x70, 0x74,
+ 0x31, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x32, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x20, 0x3d, 0x20,
+ 0x7b, 0x7d, 0x2c, 0x20, 0x7b, 0x7d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x74, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x74,
+ 0x20, 0x3d, 0x20, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x0a, 0x5f, 0x4d, 0x2e,
+ 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x20, 0x3d, 0x20,
+ 0x32, 0x30, 0x34, 0x38, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x2d, 0x77, 0x68, 0x65, 0x6e, 0x2d, 0x64,
+ 0x6f, 0x6e, 0x65, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x67, 0x65, 0x74,
+ 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72, 0x74, 0x79, 0x20,
+ 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x7b, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c,
+ 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c,
+ 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f,
+ 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x6b, 0x65, 0x65,
+ 0x70, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20, 0x3d,
+ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a,
+ 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x2c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x72,
+ 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x7b,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x63, 0x68, 0x75,
+ 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x74, 0x5b, 0x22, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x6f,
+ 0x70, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x69, 0x6e,
+ 0x6b, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73,
+ 0x65, 0x28, 0x73, 0x69, 0x6e, 0x6b, 0x74, 0x29, 0x0a, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x74, 0x5b, 0x22, 0x62, 0x79, 0x2d, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x6c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73,
+ 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28,
+ 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65,
+ 0x74, 0x66, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x64, 0x69, 0x72, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72,
+ 0x74, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x7d, 0x2c, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x3d, 0x20, 0x30,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x61,
+ 0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x2c,
+ 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x28,
+ 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x5b, 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x64, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x6f,
+ 0x6e, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65,
+ 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x28, 0x7b, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x66, 0x64, 0x20,
+ 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x63, 0x6b,
+ 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69,
+ 0x72, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20,
+ 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f,
+ 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x64, 0x6f, 0x6e,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x20,
+ 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x28, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x42, 0x4c,
+ 0x4f, 0x43, 0x4b, 0x53, 0x49, 0x5a, 0x45, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x68, 0x75, 0x6e,
+ 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72,
+ 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
+ 0x63, 0x6b, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
+ 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x7d, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x74, 0x5b, 0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22,
+ 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x5b,
+ 0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x2d, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x64, 0x22, 0x5d, 0x0a, 0x5f, 0x4d, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x63, 0x68, 0x6f, 0x6f, 0x73,
+ 0x65, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x29, 0x0a, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d, 0x0a,0x0};
+/*
+ lua_getglobal(L, "package");
+ lua_getfield(L,-1,"loaded");
+ res = luaL_dostring(L, (const char*)B);
+ lua_setfield(L,-2,"socket");
+ lua_settop(L,0);
+ return res;*/
+ return luaL_dostring(L, (const char*)B);
+} /* end of embedded lua code */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c b/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c
index e7334031478..ef9ee6f9c2f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c
@@ -6,6 +6,7 @@
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "auxiliar.h"
#include "socket.h"
@@ -17,6 +18,7 @@
* Internal function prototypes
\*=========================================================================*/
static int global_create(lua_State *L);
+static int global_create4(lua_State *L);
static int global_create6(lua_State *L);
static int global_connect(lua_State *L);
static int meth_connect(lua_State *L);
@@ -34,6 +36,7 @@ static int meth_accept(lua_State *L);
static int meth_close(lua_State *L);
static int meth_getoption(lua_State *L);
static int meth_setoption(lua_State *L);
+static int meth_gettimeout(lua_State *L);
static int meth_settimeout(lua_State *L);
static int meth_getfd(lua_State *L);
static int meth_setfd(lua_State *L);
@@ -63,6 +66,7 @@ static luaL_Reg tcp_methods[] = {
{"setpeername", meth_connect},
{"setsockname", meth_bind},
{"settimeout", meth_settimeout},
+ {"gettimeout", meth_gettimeout},
{"shutdown", meth_shutdown},
{NULL, NULL}
};
@@ -71,14 +75,17 @@ static luaL_Reg tcp_methods[] = {
static t_opt optget[] = {
{"keepalive", opt_get_keepalive},
{"reuseaddr", opt_get_reuseaddr},
+ {"reuseport", opt_get_reuseport},
{"tcp-nodelay", opt_get_tcp_nodelay},
{"linger", opt_get_linger},
+ {"error", opt_get_error},
{NULL, NULL}
};
static t_opt optset[] = {
{"keepalive", opt_set_keepalive},
{"reuseaddr", opt_set_reuseaddr},
+ {"reuseport", opt_set_reuseport},
{"tcp-nodelay", opt_set_tcp_nodelay},
{"ipv6-v6only", opt_set_ip6_v6only},
{"linger", opt_set_linger},
@@ -88,6 +95,7 @@ static t_opt optset[] = {
/* functions in library namespace */
static luaL_Reg func[] = {
{"tcp", global_create},
+ {"tcp4", global_create4},
{"tcp6", global_create6},
{"connect", global_connect},
{NULL, NULL}
@@ -99,15 +107,15 @@ static luaL_Reg func[] = {
int tcp_open(lua_State *L)
{
/* create classes */
- auxiliar_newclass(L, "tcp.master", tcp_methods);
- auxiliar_newclass(L, "tcp.client", tcp_methods);
- auxiliar_newclass(L, "tcp.server", tcp_methods);
+ auxiliar_newclass(L, "tcp{master}", tcp_methods);
+ auxiliar_newclass(L, "tcp{client}", tcp_methods);
+ auxiliar_newclass(L, "tcp{server}", tcp_methods);
/* create class groups */
- auxiliar_add2group(L, "tcp.master", "tcp{any}");
- auxiliar_add2group(L, "tcp.client", "tcp{any}");
- auxiliar_add2group(L, "tcp.server", "tcp{any}");
+ auxiliar_add2group(L, "tcp{master}", "tcp{any}");
+ auxiliar_add2group(L, "tcp{client}", "tcp{any}");
+ auxiliar_add2group(L, "tcp{server}", "tcp{any}");
/* define library functions */
- luaL_openlib(L, NULL, func, 0);
+ luaL_setfuncs(L, func, 0);
return 0;
}
@@ -118,22 +126,22 @@ int tcp_open(lua_State *L)
* Just call buffered IO methods
\*-------------------------------------------------------------------------*/
static int meth_send(lua_State *L) {
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
return buffer_meth_send(L, &tcp->buf);
}
static int meth_receive(lua_State *L) {
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
return buffer_meth_receive(L, &tcp->buf);
}
static int meth_getstats(lua_State *L) {
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
return buffer_meth_getstats(L, &tcp->buf);
}
static int meth_setstats(lua_State *L) {
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
return buffer_meth_setstats(L, &tcp->buf);
}
@@ -183,14 +191,14 @@ static int meth_dirty(lua_State *L)
\*-------------------------------------------------------------------------*/
static int meth_accept(lua_State *L)
{
- p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp.server", 1);
+ p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1);
p_timeout tm = timeout_markstart(&server->tm);
t_socket sock;
const char *err = inet_tryaccept(&server->sock, server->family, &sock, tm);
/* if successful, push client socket */
if (err == NULL) {
p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp));
- auxiliar_setclass(L, "tcp.client", -1);
+ auxiliar_setclass(L, "tcp{client}", -1);
/* initialize structure fields */
memset(clnt, 0, sizeof(t_tcp));
socket_setnonblocking(&sock);
@@ -211,9 +219,8 @@ static int meth_accept(lua_State *L)
/*-------------------------------------------------------------------------*\
* Binds an object to an address
\*-------------------------------------------------------------------------*/
-static int meth_bind(lua_State *L)
-{
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.master", 1);
+static int meth_bind(lua_State *L) {
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1);
const char *address = luaL_checkstring(L, 2);
const char *port = luaL_checkstring(L, 3);
const char *err;
@@ -222,8 +229,7 @@ static int meth_bind(lua_State *L)
bindhints.ai_socktype = SOCK_STREAM;
bindhints.ai_family = tcp->family;
bindhints.ai_flags = AI_PASSIVE;
- address = strcmp(address, "*")? address: NULL;
- err = inet_trybind(&tcp->sock, address, port, &bindhints);
+ err = inet_trybind(&tcp->sock, &tcp->family, address, port, &bindhints);
if (err) {
lua_pushnil(L);
lua_pushstring(L, err);
@@ -236,8 +242,7 @@ static int meth_bind(lua_State *L)
/*-------------------------------------------------------------------------*\
* Turns a master tcp object into a client object.
\*-------------------------------------------------------------------------*/
-static int meth_connect(lua_State *L)
-{
+static int meth_connect(lua_State *L) {
p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
const char *address = luaL_checkstring(L, 2);
const char *port = luaL_checkstring(L, 3);
@@ -248,9 +253,10 @@ static int meth_connect(lua_State *L)
/* make sure we try to connect only to the same family */
connecthints.ai_family = tcp->family;
timeout_markstart(&tcp->tm);
- err = inet_tryconnect(&tcp->sock, address, port, &tcp->tm, &connecthints);
+ err = inet_tryconnect(&tcp->sock, &tcp->family, address, port,
+ &tcp->tm, &connecthints);
/* have to set the class even if it failed due to non-blocking connects */
- auxiliar_setclass(L, "tcp.client", 1);
+ auxiliar_setclass(L, "tcp{client}", 1);
if (err) {
lua_pushnil(L);
lua_pushstring(L, err);
@@ -277,9 +283,12 @@ static int meth_close(lua_State *L)
static int meth_getfamily(lua_State *L)
{
p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
- if (tcp->family == PF_INET6) {
+ if (tcp->family == AF_INET6) {
lua_pushliteral(L, "inet6");
return 1;
+ } else if (tcp->family == AF_INET) {
+ lua_pushliteral(L, "inet4");
+ return 1;
} else {
lua_pushliteral(L, "inet4");
return 1;
@@ -291,7 +300,7 @@ static int meth_getfamily(lua_State *L)
\*-------------------------------------------------------------------------*/
static int meth_listen(lua_State *L)
{
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.master", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1);
int backlog = (int) luaL_optnumber(L, 2, 32);
int err = socket_listen(&tcp->sock, backlog);
if (err != IO_DONE) {
@@ -300,7 +309,7 @@ static int meth_listen(lua_State *L)
return 2;
}
/* turn master object into a server object */
- auxiliar_setclass(L, "tcp.server", 1);
+ auxiliar_setclass(L, "tcp{server}", 1);
lua_pushnumber(L, 1);
return 1;
}
@@ -312,7 +321,7 @@ static int meth_shutdown(lua_State *L)
{
/* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */
static const char* methods[] = { "receive", "send", "both", NULL };
- p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1);
+ p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
int how = luaL_checkoption(L, 2, "both", methods);
socket_shutdown(&tcp->sock, how);
lua_pushnumber(L, 1);
@@ -343,6 +352,12 @@ static int meth_settimeout(lua_State *L)
return timeout_meth_settimeout(L, &tcp->tm);
}
+static int meth_gettimeout(lua_State *L)
+{
+ p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
+ return timeout_meth_gettimeout(L, &tcp->tm);
+}
+
/*=========================================================================*\
* Library functions
\*=========================================================================*/
@@ -350,37 +365,36 @@ static int meth_settimeout(lua_State *L)
* Creates a master tcp object
\*-------------------------------------------------------------------------*/
static int tcp_create(lua_State *L, int family) {
- t_socket sock;
- const char *err = inet_trycreate(&sock, family, SOCK_STREAM);
- /* try to allocate a system socket */
- if (!err) {
- /* allocate tcp object */
- p_tcp tcp = (p_tcp) lua_newuserdata(L, sizeof(t_tcp));
- memset(tcp, 0, sizeof(t_tcp));
- /* set its type as master object */
- auxiliar_setclass(L, "tcp.master", -1);
- /* initialize remaining structure fields */
- socket_setnonblocking(&sock);
- if (family == PF_INET6) {
- int yes = 1;
- setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- (void *)&yes, sizeof(yes));
+ p_tcp tcp = (p_tcp) lua_newuserdata(L, sizeof(t_tcp));
+ memset(tcp, 0, sizeof(t_tcp));
+ /* set its type as master object */
+ auxiliar_setclass(L, "tcp{master}", -1);
+ /* if family is AF_UNSPEC, we leave the socket invalid and
+ * store AF_UNSPEC into family. This will allow it to later be
+ * replaced with an AF_INET6 or AF_INET socket upon first use. */
+ tcp->sock = SOCKET_INVALID;
+ tcp->family = family;
+ io_init(&tcp->io, (p_send) socket_send, (p_recv) socket_recv,
+ (p_error) socket_ioerror, &tcp->sock);
+ timeout_init(&tcp->tm, -1, -1);
+ buffer_init(&tcp->buf, &tcp->io, &tcp->tm);
+ if (family != AF_UNSPEC) {
+ const char *err = inet_trycreate(&tcp->sock, family, SOCK_STREAM, 0);
+ if (err != NULL) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
}
- tcp->sock = sock;
- io_init(&tcp->io, (p_send) socket_send, (p_recv) socket_recv,
- (p_error) socket_ioerror, &tcp->sock);
- timeout_init(&tcp->tm, -1, -1);
- buffer_init(&tcp->buf, &tcp->io, &tcp->tm);
- tcp->family = family;
- return 1;
- } else {
- lua_pushnil(L);
- lua_pushstring(L, err);
- return 2;
+ socket_setnonblocking(&tcp->sock);
}
+ return 1;
}
static int global_create(lua_State *L) {
+ return tcp_create(L, AF_UNSPEC);
+}
+
+static int global_create4(lua_State *L) {
return tcp_create(L, AF_INET);
}
@@ -388,46 +402,6 @@ static int global_create6(lua_State *L) {
return tcp_create(L, AF_INET6);
}
-static const char *tryconnect6(const char *remoteaddr, const char *remoteserv,
- struct addrinfo *connecthints, p_tcp tcp) {
- struct addrinfo *iterator = NULL, *resolved = NULL;
- const char *err = NULL;
- /* try resolving */
- err = socket_gaistrerror(getaddrinfo(remoteaddr, remoteserv,
- connecthints, &resolved));
- if (err != NULL) {
- if (resolved) freeaddrinfo(resolved);
- return err;
- }
- /* iterate over all returned addresses trying to connect */
- for (iterator = resolved; iterator; iterator = iterator->ai_next) {
- p_timeout tm = timeout_markstart(&tcp->tm);
- /* create new socket if one wasn't created by the bind stage */
- if (tcp->sock == SOCKET_INVALID) {
- err = socket_strerror(socket_create(&tcp->sock,
- iterator->ai_family, iterator->ai_socktype,
- iterator->ai_protocol));
- if (err != NULL) {
- freeaddrinfo(resolved);
- return err;
- }
- tcp->family = iterator->ai_family;
- /* all sockets initially non-blocking */
- socket_setnonblocking(&tcp->sock);
- }
- /* finally try connecting to remote address */
- err = socket_strerror(socket_connect(&tcp->sock,
- (SA *) iterator->ai_addr,
- (socklen_t) iterator->ai_addrlen, tm));
- /* if success, break out of loop */
- if (err == NULL) break;
- }
-
- freeaddrinfo(resolved);
- /* here, if err is set, we failed */
- return err;
-}
-
static int global_connect(lua_State *L) {
const char *remoteaddr = luaL_checkstring(L, 1);
const char *remoteserv = luaL_checkstring(L, 2);
@@ -444,32 +418,34 @@ static int global_connect(lua_State *L) {
timeout_init(&tcp->tm, -1, -1);
buffer_init(&tcp->buf, &tcp->io, &tcp->tm);
tcp->sock = SOCKET_INVALID;
+ tcp->family = AF_UNSPEC;
/* allow user to pick local address and port */
memset(&bindhints, 0, sizeof(bindhints));
bindhints.ai_socktype = SOCK_STREAM;
bindhints.ai_family = family;
bindhints.ai_flags = AI_PASSIVE;
if (localaddr) {
- err = inet_trybind(&tcp->sock, localaddr, localserv, &bindhints);
+ err = inet_trybind(&tcp->sock, &tcp->family, localaddr,
+ localserv, &bindhints);
if (err) {
lua_pushnil(L);
lua_pushstring(L, err);
return 2;
}
- tcp->family = bindhints.ai_family;
}
/* try to connect to remote address and port */
memset(&connecthints, 0, sizeof(connecthints));
connecthints.ai_socktype = SOCK_STREAM;
/* make sure we try to connect only to the same family */
- connecthints.ai_family = bindhints.ai_family;
- err = tryconnect6(remoteaddr, remoteserv, &connecthints, tcp);
+ connecthints.ai_family = tcp->family;
+ err = inet_tryconnect(&tcp->sock, &tcp->family, remoteaddr, remoteserv,
+ &tcp->tm, &connecthints);
if (err) {
socket_destroy(&tcp->sock);
lua_pushnil(L);
lua_pushstring(L, err);
return 2;
}
- auxiliar_setclass(L, "tcp.client", -1);
+ auxiliar_setclass(L, "tcp{client}", -1);
return 1;
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.c b/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.c
index c7354b52f38..5a601d5410a 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.c
@@ -8,6 +8,7 @@
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "auxiliar.h"
#include "timeout.h"
@@ -52,7 +53,7 @@ void timeout_init(p_timeout tm, double block, double total) {
/*-------------------------------------------------------------------------*\
* Determines how much time we have left for the next system call,
-* if the previous call was successful
+* if the previous call was successful
* Input
* tm: timeout control structure
* Returns
@@ -107,7 +108,7 @@ double timeout_getretry(p_timeout tm) {
}
/*-------------------------------------------------------------------------*\
-* Marks the operation start time in structure
+* Marks the operation start time in structure
* Input
* tm: timeout control structure
\*-------------------------------------------------------------------------*/
@@ -117,7 +118,7 @@ p_timeout timeout_markstart(p_timeout tm) {
}
/*-------------------------------------------------------------------------*\
-* Gets time in s, relative to January 1, 1970 (UTC)
+* Gets time in s, relative to January 1, 1970 (UTC)
* Returns
* time in s.
\*-------------------------------------------------------------------------*/
@@ -144,7 +145,7 @@ double timeout_gettime(void) {
* Initializes module
\*-------------------------------------------------------------------------*/
int timeout_open(lua_State *L) {
- luaL_openlib(L, NULL, func, 0);
+ luaL_setfuncs(L, func, 0);
return 0;
}
@@ -159,7 +160,7 @@ int timeout_meth_settimeout(lua_State *L, p_timeout tm) {
const char *mode = luaL_optstring(L, 3, "b");
switch (*mode) {
case 'b':
- tm->block = t;
+ tm->block = t;
break;
case 'r': case 't':
tm->total = t;
@@ -172,6 +173,16 @@ int timeout_meth_settimeout(lua_State *L, p_timeout tm) {
return 1;
}
+/*-------------------------------------------------------------------------*\
+* Gets timeout values for IO operations
+* Lua Output: block, total
+\*-------------------------------------------------------------------------*/
+int timeout_meth_gettimeout(lua_State *L, p_timeout tm) {
+ lua_pushnumber(L, tm->block);
+ lua_pushnumber(L, tm->total);
+ return 2;
+}
+
/*=========================================================================*\
* Test support functions
\*=========================================================================*/
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.h b/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.h
index 6715ca70a1b..af902318b0a 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/timeout.h
@@ -22,6 +22,7 @@ p_timeout timeout_markstart(p_timeout tm);
double timeout_getstart(p_timeout tm);
double timeout_gettime(void);
int timeout_meth_settimeout(lua_State *L, p_timeout tm);
+int timeout_meth_gettimeout(lua_State *L, p_timeout tm);
#define timeout_iszero(tm) ((tm)->block == 0.0)
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua
index 2ffe9a45818..ea88353838d 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua
@@ -9,14 +9,16 @@
-----------------------------------------------------------------------------
local base = _G
local string = require("string")
-local socket = require("socket")
-local ltn12 = require("ltn12")
-module("socket.tp")
+local socket = socket or require("socket")
+local ltn12 = ltn12 or require("ltn12")
+
+socket.tp = {}
+local _M = socket.tp
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-TIMEOUT = 60
+_M.TIMEOUT = 60
-----------------------------------------------------------------------------
-- Implementation
@@ -44,6 +46,14 @@ end
-- metatable for sock object
local metat = { __index = {} }
+function metat.__index:getpeername()
+ return self.c:getpeername()
+end
+
+function metat.__index:getsockname()
+ return self.c:getpeername()
+end
+
function metat.__index:check(ok)
local code, reply = get_reply(self.c)
if not code then return nil, reply end
@@ -72,7 +82,7 @@ function metat.__index:command(cmd, arg)
end
function metat.__index:sink(snk, pat)
- local chunk, err = c:receive(pat)
+ local chunk, err = self.c:receive(pat)
return snk(chunk, err)
end
@@ -109,10 +119,10 @@ function metat.__index:close()
end
-- connect with server and return c object
-function connect(host, port, timeout, create)
+function _M.connect(host, port, timeout, create)
local c, e = (create or socket.tcp)()
if not c then return nil, e end
- c:settimeout(timeout or TIMEOUT)
+ c:settimeout(timeout or _M.TIMEOUT)
local r, e = c:connect(host, port)
if not r then
c:close()
@@ -121,3 +131,4 @@ function connect(host, port, timeout, create)
return base.setmetatable({c = c}, metat)
end
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/tp.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/tp_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/tp_lua.c
index 78ae2111e02..02c7e005310 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/tp_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/tp_lua.c
@@ -1,192 +1,244 @@
/*
- * This file is auto-generated by "lua2c tp.lua tp_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_tp_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 85,110,105,102,105,101,100, 32, 83, 77, 84, 80, 47, 70, 84, 80, 32,115,117,
- 98,115,121,115,116,101,109, 10, 45, 45, 32, 76,117, 97, 83,111, 99,107,101,116,
- 32,116,111,111,108,107,105,116, 46, 10, 45, 45, 32, 65,117,116,104,111,114, 58,
- 32, 68,105,101,103,111, 32, 78,101,104, 97, 98, 10, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,101, 99,108, 97,114,101,
- 32,109,111,100,117,108,101, 32, 97,110,100, 32,105,109,112,111,114,116, 32,100,
-101,112,101,110,100,101,110, 99,105,101,115, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32, 98, 97,115,101,
- 32, 61, 32, 95, 71, 10,108,111, 99, 97,108, 32,115,116,114,105,110,103, 32, 61,
- 32,114,101,113,117,105,114,101, 40, 34,115,116,114,105,110,103, 34, 41, 10,108,
-111, 99, 97,108, 32,115,111, 99,107,101,116, 32, 61, 32,114,101,113,117,105,114,
-101, 40, 34,115,111, 99,107,101,116, 34, 41, 10,108,111, 99, 97,108, 32,108,116,
-110, 49, 50, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,116,110, 49, 50,
- 34, 41, 10,109,111,100,117,108,101, 40, 34,115,111, 99,107,101,116, 46,116,112,
- 34, 41, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 10, 45, 45, 32, 80,114,111,103,114, 97,109, 32, 99,111,110,115,116, 97,110,
-116,115, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 10, 84, 73, 77, 69, 79, 85, 84, 32, 61, 32, 54, 48, 10, 10, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 73,109,112,108,
-101,109,101,110,116, 97,116,105,111,110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32,103,101,116,115, 32,115,101,114,
-118,101,114, 32,114,101,112,108,121, 32, 40,119,111,114,107,115, 32,102,111,114,
- 32, 83, 77, 84, 80, 32, 97,110,100, 32, 70, 84, 80, 41, 10,108,111, 99, 97,108,
- 32,102,117,110, 99,116,105,111,110, 32,103,101,116, 95,114,101,112,108,121, 40,
- 99, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,111,100,101, 44, 32, 99,
-117,114,114,101,110,116, 44, 32,115,101,112, 10, 32, 32, 32, 32,108,111, 99, 97,
-108, 32,108,105,110,101, 44, 32,101,114,114, 32, 61, 32, 99, 58,114,101, 99,101,
-105,118,101, 40, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,112,108,
-121, 32, 61, 32,108,105,110,101, 10, 32, 32, 32, 32,105,102, 32,101,114,114, 32,
-116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,114,114,
- 32,101,110,100, 10, 32, 32, 32, 32, 99,111,100,101, 44, 32,115,101,112, 32, 61,
- 32,115,111, 99,107,101,116, 46,115,107,105,112, 40, 50, 44, 32,115,116,114,105,
-110,103, 46,102,105,110,100, 40,108,105,110,101, 44, 32, 34, 94, 40, 37,100, 37,
-100, 37,100, 41, 40, 46, 63, 41, 34, 41, 41, 10, 32, 32, 32, 32,105,102, 32,110,
-111,116, 32, 99,111,100,101, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,
-110,105,108, 44, 32, 34,105,110,118, 97,108,105,100, 32,115,101,114,118,101,114,
- 32,114,101,112,108,121, 34, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,115,
-101,112, 32, 61, 61, 32, 34, 45, 34, 32,116,104,101,110, 32, 45, 45, 32,114,101,
-112,108,121, 32,105,115, 32,109,117,108,116,105,108,105,110,101, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,114,101,112,101, 97,116, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,108,105,110,101, 44, 32,101,114,114, 32, 61, 32, 99, 58,114,101,
- 99,101,105,118,101, 40, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-105,102, 32,101,114,114, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,
-105,108, 44, 32,101,114,114, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 99,117,114,114,101,110,116, 44, 32,115,101,112, 32, 61, 32,115,
-111, 99,107,101,116, 46,115,107,105,112, 40, 50, 44, 32,115,116,114,105,110,103,
- 46,102,105,110,100, 40,108,105,110,101, 44, 32, 34, 94, 40, 37,100, 37,100, 37,
-100, 41, 40, 46, 63, 41, 34, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,114,101,112,108,121, 32, 61, 32,114,101,112,108,121, 32, 46, 46, 32, 34,
- 92,110, 34, 32, 46, 46, 32,108,105,110,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 45, 45, 32,114,101,112,108,121, 32,101,110,100,115, 32,119,105,116,104, 32,115,
- 97,109,101, 32, 99,111,100,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,117,110,116,
-105,108, 32, 99,111,100,101, 32, 61, 61, 32, 99,117,114,114,101,110,116, 32, 97,
-110,100, 32,115,101,112, 32, 61, 61, 32, 34, 32, 34, 10, 32, 32, 32, 32,101,110,
-100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 99,111,100,101, 44, 32,114,
-101,112,108,121, 10,101,110,100, 10, 10, 45, 45, 32,109,101,116, 97,116, 97, 98,
-108,101, 32,102,111,114, 32,115,111, 99,107, 32,111, 98,106,101, 99,116, 10,108,
-111, 99, 97,108, 32,109,101,116, 97,116, 32, 61, 32,123, 32, 95, 95,105,110,100,
-101,120, 32, 61, 32,123,125, 32,125, 10, 10,102,117,110, 99,116,105,111,110, 32,
-109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58, 99,104,101, 99,107, 40,
-111,107, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99,111,100,101, 44, 32,
-114,101,112,108,121, 32, 61, 32,103,101,116, 95,114,101,112,108,121, 40,115,101,
-108,102, 46, 99, 41, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32, 99,111,100,
-101, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,114,
-101,112,108,121, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32, 98, 97,115,101,
- 46,116,121,112,101, 40,111,107, 41, 32,126, 61, 32, 34,102,117,110, 99,116,105,
-111,110, 34, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,
- 98, 97,115,101, 46,116,121,112,101, 40,111,107, 41, 32, 61, 61, 32, 34,116, 97,
- 98,108,101, 34, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,102,111,114, 32,105, 44, 32,118, 32,105,110, 32, 98, 97,115,101, 46,105,
-112, 97,105,114,115, 40,111,107, 41, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,115,116,114,105,110,103, 46,102,
-105,110,100, 40, 99,111,100,101, 44, 32,118, 41, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,
-116,117,114,110, 32, 98, 97,115,101, 46,116,111,110,117,109, 98,101,114, 40, 99,
-111,100,101, 41, 44, 32,114,101,112,108,121, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,110,105,108, 44, 32,114,101,112,108,121, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,115,116,114,105,110,103, 46,102,105,110,100, 40, 99,111,
-100,101, 44, 32,111,107, 41, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,
- 98, 97,115,101, 46,116,111,110,117,109, 98,101,114, 40, 99,111,100,101, 41, 44,
- 32,114,101,112,108,121, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,
-108,115,101, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,114,101,112,108,
-121, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32,
- 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,111,107, 40, 98, 97,115,
-101, 46,116,111,110,117,109, 98,101,114, 40, 99,111,100,101, 41, 44, 32,114,101,
-112,108,121, 41, 32,101,110,100, 10,101,110,100, 10, 10,102,117,110, 99,116,105,
-111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58, 99,111,109,
-109, 97,110,100, 40, 99,109,100, 44, 32, 97,114,103, 41, 10, 32, 32, 32, 32, 99,
-109,100, 32, 61, 32,115,116,114,105,110,103, 46,117,112,112,101,114, 40, 99,109,
-100, 41, 10, 32, 32, 32, 32,105,102, 32, 97,114,103, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46, 99,
- 58,115,101,110,100, 40, 99,109,100, 32, 46, 46, 32, 34, 32, 34, 32, 46, 46, 32,
- 97,114,103, 46, 46, 32, 34, 92,114, 92,110, 34, 41, 10, 32, 32, 32, 32,101,108,
-115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,
-108,102, 46, 99, 58,115,101,110,100, 40, 99,109,100, 32, 46, 46, 32, 34, 92,114,
- 92,110, 34, 41, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10,102,117,
-110, 99,116,105,111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120,
- 58,115,105,110,107, 40,115,110,107, 44, 32,112, 97,116, 41, 10, 32, 32, 32, 32,
-108,111, 99, 97,108, 32, 99,104,117,110,107, 44, 32,101,114,114, 32, 61, 32, 99,
- 58,114,101, 99,101,105,118,101, 40,112, 97,116, 41, 10, 32, 32, 32, 32,114,101,
-116,117,114,110, 32,115,110,107, 40, 99,104,117,110,107, 44, 32,101,114,114, 41,
- 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116,
- 46, 95, 95,105,110,100,101,120, 58,115,101,110,100, 40,100, 97,116, 97, 41, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46, 99, 58,115,101,
-110,100, 40,100, 97,116, 97, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,
-111,110, 32,109,101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,114,101, 99,
-101,105,118,101, 40,112, 97,116, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110,
- 32,115,101,108,102, 46, 99, 58,114,101, 99,101,105,118,101, 40,112, 97,116, 41,
- 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116, 97,116,
- 46, 95, 95,105,110,100,101,120, 58,103,101,116,102,100, 40, 41, 10, 32, 32, 32,
- 32,114,101,116,117,114,110, 32,115,101,108,102, 46, 99, 58,103,101,116,102,100,
- 40, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,116,
- 97,116, 46, 95, 95,105,110,100,101,120, 58,100,105,114,116,121, 40, 41, 10, 32,
- 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,102, 46, 99, 58,100,105,114,
-116,121, 40, 41, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,
-101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58,103,101,116, 99,111,110,116,
-114,111,108, 40, 41, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,101,108,
-102, 46, 99, 10,101,110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,109,101,
-116, 97,116, 46, 95, 95,105,110,100,101,120, 58,115,111,117,114, 99,101, 40,115,
-111,117,114, 99,101, 44, 32,115,116,101,112, 41, 10, 32, 32, 32, 32,108,111, 99,
- 97,108, 32,115,105,110,107, 32, 61, 32,115,111, 99,107,101,116, 46,115,105,110,
-107, 40, 34,107,101,101,112, 45,111,112,101,110, 34, 44, 32,115,101,108,102, 46,
- 99, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,116, 44, 32,101,114,
-114, 32, 61, 32,108,116,110, 49, 50, 46,112,117,109,112, 46, 97,108,108, 40,115,
-111,117,114, 99,101, 44, 32,115,105,110,107, 44, 32,115,116,101,112, 32,111,114,
- 32,108,116,110, 49, 50, 46,112,117,109,112, 46,115,116,101,112, 41, 10, 32, 32,
- 32, 32,114,101,116,117,114,110, 32,114,101,116, 44, 32,101,114,114, 10,101,110,
-100, 10, 10, 45, 45, 32, 99,108,111,115,101,115, 32,116,104,101, 32,117,110,100,
-101,114,108,121,105,110,103, 32, 99, 10,102,117,110, 99,116,105,111,110, 32,109,
-101,116, 97,116, 46, 95, 95,105,110,100,101,120, 58, 99,108,111,115,101, 40, 41,
- 10, 32, 32, 32, 32,115,101,108,102, 46, 99, 58, 99,108,111,115,101, 40, 41, 10,
- 32, 32, 32, 32,114,101,116,117,114,110, 32, 49, 10,101,110,100, 10, 10, 45, 45,
- 32, 99,111,110,110,101, 99,116, 32,119,105,116,104, 32,115,101,114,118,101,114,
- 32, 97,110,100, 32,114,101,116,117,114,110, 32, 99, 32,111, 98,106,101, 99,116,
- 10,102,117,110, 99,116,105,111,110, 32, 99,111,110,110,101, 99,116, 40,104,111,
-115,116, 44, 32,112,111,114,116, 44, 32,116,105,109,101,111,117,116, 44, 32, 99,
-114,101, 97,116,101, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32, 99, 44, 32,
-101, 32, 61, 32, 40, 99,114,101, 97,116,101, 32,111,114, 32,115,111, 99,107,101,
-116, 46,116, 99,112, 41, 40, 41, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,
- 99, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101,
- 32,101,110,100, 10, 32, 32, 32, 32, 99, 58,115,101,116,116,105,109,101,111,117,
-116, 40,116,105,109,101,111,117,116, 32,111,114, 32, 84, 73, 77, 69, 79, 85, 84,
- 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114, 44, 32,101, 32, 61, 32, 99,
- 58, 99,111,110,110,101, 99,116, 40,104,111,115,116, 44, 32,112,111,114,116, 41,
- 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,114, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 99, 58, 99,108,111,115,101, 40, 41, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,110,105,108, 44, 32,101, 10, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32, 98, 97,
-115,101, 46,115,101,116,109,101,116, 97,116, 97, 98,108,101, 40,123, 99, 32, 61,
- 32, 99,125, 44, 32,109,101,116, 97,116, 41, 10,101,110,100, 10, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d,
+ 0x20, 0x5f, 0x47, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x28, 0x22, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
+ 0x74, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6f,
+ 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x74,
+ 0x6e, 0x31, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x28, 0x22, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x22, 0x29, 0x0a,
+ 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x70, 0x20, 0x3d, 0x20,
+ 0x7b, 0x7d, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x5f, 0x4d, 0x20,
+ 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x74, 0x70, 0x0a,
+ 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x20, 0x3d,
+ 0x20, 0x36, 0x30, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x5f, 0x72,
+ 0x65, 0x70, 0x6c, 0x79, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20,
+ 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x65, 0x70,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c,
+ 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x63,
+ 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70,
+ 0x6c, 0x79, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x70, 0x20,
+ 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x6b, 0x69,
+ 0x70, 0x28, 0x32, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x66, 0x69, 0x6e, 0x64, 0x28, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x22,
+ 0x5e, 0x28, 0x25, 0x64, 0x25, 0x64, 0x25, 0x64, 0x29, 0x28, 0x2e, 0x3f,
+ 0x29, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x22,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x73, 0x65, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x2d, 0x22, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79,
+ 0x20, 0x69, 0x73, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x70, 0x65, 0x61, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65,
+ 0x72, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x65,
+ 0x70, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73,
+ 0x6b, 0x69, 0x70, 0x28, 0x32, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x6c, 0x69, 0x6e, 0x65, 0x2c,
+ 0x20, 0x22, 0x5e, 0x28, 0x25, 0x64, 0x25, 0x64, 0x25, 0x64, 0x29, 0x28,
+ 0x2e, 0x3f, 0x29, 0x22, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x20, 0x2e, 0x2e, 0x20,
+ 0x22, 0x5c, 0x6e, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x6c, 0x69, 0x6e, 0x65,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x74,
+ 0x69, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73,
+ 0x65, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x20, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72,
+ 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x7b,
+ 0x20, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x7b,
+ 0x7d, 0x20, 0x7d, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x3a, 0x67, 0x65, 0x74, 0x70, 0x65, 0x65, 0x72, 0x6e, 0x61,
+ 0x6d, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x67,
+ 0x65, 0x74, 0x70, 0x65, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x29,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x3a, 0x67, 0x65, 0x74, 0x73, 0x6f, 0x63, 0x6b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a,
+ 0x67, 0x65, 0x74, 0x70, 0x65, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x28,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f,
+ 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79,
+ 0x20, 0x3d, 0x20, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x79,
+ 0x28, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x6f, 0x6b, 0x29,
+ 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x74, 0x79, 0x70, 0x65, 0x28, 0x6f, 0x6b, 0x29, 0x20, 0x3d, 0x3d, 0x20,
+ 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73,
+ 0x28, 0x6f, 0x6b, 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69,
+ 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x76, 0x29, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f,
+ 0x64, 0x65, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x72,
+ 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x63, 0x6f, 0x64,
+ 0x65, 0x2c, 0x20, 0x6f, 0x6b, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e,
+ 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f, 0x64,
+ 0x65, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69,
+ 0x6c, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6b, 0x28, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x63, 0x6f,
+ 0x64, 0x65, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x29, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f,
+ 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x28, 0x63, 0x6d, 0x64, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6d, 0x64, 0x20, 0x3d, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x75, 0x70, 0x70, 0x65, 0x72, 0x28,
+ 0x63, 0x6d, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x61, 0x72, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28,
+ 0x63, 0x6d, 0x64, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x20, 0x22, 0x20, 0x2e,
+ 0x2e, 0x20, 0x61, 0x72, 0x67, 0x2e, 0x2e, 0x20, 0x22, 0x5c, 0x72, 0x5c,
+ 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x73,
+ 0x65, 0x6e, 0x64, 0x28, 0x63, 0x6d, 0x64, 0x20, 0x2e, 0x2e, 0x20, 0x22,
+ 0x5c, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73, 0x69, 0x6e, 0x6b, 0x28, 0x73,
+ 0x6e, 0x6b, 0x2c, 0x20, 0x70, 0x61, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x63, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x70,
+ 0x61, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x73, 0x6e, 0x6b, 0x28, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+ 0x2c, 0x20, 0x65, 0x72, 0x72, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61,
+ 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x73, 0x65,
+ 0x6e, 0x64, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x2e, 0x63, 0x3a, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x64, 0x61, 0x74, 0x61,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
+ 0x28, 0x70, 0x61, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x70, 0x61, 0x74, 0x29,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x67, 0x65, 0x74, 0x66, 0x64, 0x28,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79, 0x28, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a, 0x64, 0x69, 0x72, 0x74, 0x79,
+ 0x28, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x67, 0x65, 0x74, 0x63, 0x6f, 0x6e,
+ 0x74, 0x72, 0x6f, 0x6c, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63,
+ 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x3a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x28, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x73, 0x69, 0x6e, 0x6b, 0x28, 0x22, 0x6b, 0x65, 0x65, 0x70, 0x2d,
+ 0x6f, 0x70, 0x65, 0x6e, 0x22, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e,
+ 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20,
+ 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e, 0x61,
+ 0x6c, 0x6c, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x73,
+ 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x6f, 0x72,
+ 0x20, 0x6c, 0x74, 0x6e, 0x31, 0x32, 0x2e, 0x70, 0x75, 0x6d, 0x70, 0x2e,
+ 0x73, 0x74, 0x65, 0x70, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x65, 0x72,
+ 0x72, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x3a,
+ 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d,
+ 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x28, 0x68, 0x6f, 0x73,
+ 0x74, 0x2c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x74, 0x69, 0x6d,
+ 0x65, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x63, 0x2c, 0x20, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x74, 0x63, 0x70, 0x29, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x63, 0x3a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
+ 0x28, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x72, 0x20,
+ 0x5f, 0x4d, 0x2e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x2c,
+ 0x20, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x3a, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+ 0x63, 0x74, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x6f, 0x72,
+ 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x3a, 0x63, 0x6c, 0x6f, 0x73, 0x65,
+ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x65,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x73, 0x65, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x28, 0x7b, 0x63, 0x20, 0x3d, 0x20, 0x63, 0x7d, 0x2c, 0x20, 0x6d,
+ 0x65, 0x74, 0x61, 0x74, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c
index 8e88b1784a2..605c1950f2b 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c
@@ -3,9 +3,11 @@
* LuaSocket toolkit
\*=========================================================================*/
#include <string.h>
+#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
+#include "compat.h"
#include "auxiliar.h"
#include "socket.h"
@@ -25,6 +27,7 @@
* Internal function prototypes
\*=========================================================================*/
static int global_create(lua_State *L);
+static int global_create4(lua_State *L);
static int global_create6(lua_State *L);
static int meth_send(lua_State *L);
static int meth_sendto(lua_State *L);
@@ -33,6 +36,7 @@ static int meth_receivefrom(lua_State *L);
static int meth_getfamily(lua_State *L);
static int meth_getsockname(lua_State *L);
static int meth_getpeername(lua_State *L);
+static int meth_gettimeout(lua_State *L);
static int meth_setsockname(lua_State *L);
static int meth_setpeername(lua_State *L);
static int meth_close(lua_State *L);
@@ -63,34 +67,50 @@ static luaL_Reg udp_methods[] = {
{"setpeername", meth_setpeername},
{"setsockname", meth_setsockname},
{"settimeout", meth_settimeout},
+ {"gettimeout", meth_gettimeout},
{NULL, NULL}
};
/* socket options for setoption */
static t_opt optset[] = {
- {"dontroute", opt_set_dontroute},
- {"broadcast", opt_set_broadcast},
- {"reuseaddr", opt_set_reuseaddr},
- {"reuseport", opt_set_reuseport},
- {"ip-multicast-if", opt_set_ip_multicast_if},
- {"ip-multicast-ttl", opt_set_ip_multicast_ttl},
- {"ip-multicast-loop", opt_set_ip_multicast_loop},
- {"ip-add-membership", opt_set_ip_add_membership},
- {"ip-drop-membership", opt_set_ip_drop_membersip},
- {"ipv6-v6only", opt_set_ip6_v6only},
- {NULL, NULL}
+ {"dontroute", opt_set_dontroute},
+ {"broadcast", opt_set_broadcast},
+ {"reuseaddr", opt_set_reuseaddr},
+ {"reuseport", opt_set_reuseport},
+ {"ip-multicast-if", opt_set_ip_multicast_if},
+ {"ip-multicast-ttl", opt_set_ip_multicast_ttl},
+ {"ip-multicast-loop", opt_set_ip_multicast_loop},
+ {"ip-add-membership", opt_set_ip_add_membership},
+ {"ip-drop-membership", opt_set_ip_drop_membersip},
+ {"ipv6-unicast-hops", opt_set_ip6_unicast_hops},
+ {"ipv6-multicast-hops", opt_set_ip6_unicast_hops},
+ {"ipv6-multicast-loop", opt_set_ip6_multicast_loop},
+ {"ipv6-add-membership", opt_set_ip6_add_membership},
+ {"ipv6-drop-membership", opt_set_ip6_drop_membersip},
+ {"ipv6-v6only", opt_set_ip6_v6only},
+ {NULL, NULL}
};
/* socket options for getoption */
static t_opt optget[] = {
- {"ip-multicast-if", opt_get_ip_multicast_if},
- {"ip-multicast-loop", opt_get_ip_multicast_loop},
- {NULL, NULL}
+ {"dontroute", opt_get_dontroute},
+ {"broadcast", opt_get_broadcast},
+ {"reuseaddr", opt_get_reuseaddr},
+ {"reuseport", opt_get_reuseport},
+ {"ip-multicast-if", opt_get_ip_multicast_if},
+ {"ip-multicast-loop", opt_get_ip_multicast_loop},
+ {"error", opt_get_error},
+ {"ipv6-unicast-hops", opt_get_ip6_unicast_hops},
+ {"ipv6-multicast-hops", opt_get_ip6_unicast_hops},
+ {"ipv6-multicast-loop", opt_get_ip6_multicast_loop},
+ {"ipv6-v6only", opt_get_ip6_v6only},
+ {NULL, NULL}
};
/* functions in library namespace */
static luaL_Reg func[] = {
{"udp", global_create},
+ {"udp4", global_create4},
{"udp6", global_create6},
{NULL, NULL}
};
@@ -98,25 +118,28 @@ static luaL_Reg func[] = {
/*-------------------------------------------------------------------------*\
* Initializes module
\*-------------------------------------------------------------------------*/
-int udp_open(lua_State *L)
-{
+int udp_open(lua_State *L) {
/* create classes */
- auxiliar_newclass(L, "udp.connected", udp_methods);
- auxiliar_newclass(L, "udp.unconnected", udp_methods);
+ auxiliar_newclass(L, "udp{connected}", udp_methods);
+ auxiliar_newclass(L, "udp{unconnected}", udp_methods);
/* create class groups */
- auxiliar_add2group(L, "udp.connected", "udp{any}");
- auxiliar_add2group(L, "udp.unconnected", "udp{any}");
- auxiliar_add2group(L, "udp.connected", "select{able}");
- auxiliar_add2group(L, "udp.unconnected", "select{able}");
+ auxiliar_add2group(L, "udp{connected}", "udp{any}");
+ auxiliar_add2group(L, "udp{unconnected}", "udp{any}");
+ auxiliar_add2group(L, "udp{connected}", "select{able}");
+ auxiliar_add2group(L, "udp{unconnected}", "select{able}");
/* define library functions */
- luaL_openlib(L, NULL, func, 0);
+ luaL_setfuncs(L, func, 0);
+ /* export default UDP size */
+ lua_pushliteral(L, "_DATAGRAMSIZE");
+ lua_pushinteger(L, UDP_DATAGRAMSIZE);
+ lua_rawset(L, -3);
return 0;
}
/*=========================================================================*\
* Lua methods
\*=========================================================================*/
-const char *udp_strerror(int err) {
+static const char *udp_strerror(int err) {
/* a 'closed' error on an unconnected means the target address was not
* accepted by the transport layer */
if (err == IO_CLOSED) return "refused";
@@ -127,7 +150,7 @@ const char *udp_strerror(int err) {
* Send data through connected udp socket
\*-------------------------------------------------------------------------*/
static int meth_send(lua_State *L) {
- p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.connected", 1);
+ p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{connected}", 1);
p_timeout tm = &udp->tm;
size_t count, sent = 0;
int err;
@@ -147,43 +170,50 @@ static int meth_send(lua_State *L) {
* Send data through unconnected udp socket
\*-------------------------------------------------------------------------*/
static int meth_sendto(lua_State *L) {
- p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1);
+ p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1);
size_t count, sent = 0;
const char *data = luaL_checklstring(L, 2, &count);
const char *ip = luaL_checkstring(L, 3);
- unsigned short port = (unsigned short) luaL_checknumber(L, 4);
+ const char *port = luaL_checkstring(L, 4);
p_timeout tm = &udp->tm;
int err;
- switch (udp->family) {
- case PF_INET: {
- struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
- if (!inet_pton(AF_INET, ip, &addr.sin_addr))
- luaL_argerror(L, 3, "invalid ip address");
- addr.sin_family = AF_INET;
- addr.sin_port = htons(port);
- timeout_markstart(tm);
- err = socket_sendto(&udp->sock, data, count, &sent,
- (SA *) &addr, sizeof(addr), tm);
- break;
- }
- case PF_INET6: {
- struct sockaddr_in6 addr;
- memset(&addr, 0, sizeof(addr));
- if (!inet_pton(AF_INET6, ip, &addr.sin6_addr))
- luaL_argerror(L, 3, "invalid ip address");
- addr.sin6_family = AF_INET6;
- addr.sin6_port = htons(port);
- timeout_markstart(tm);
- err = socket_sendto(&udp->sock, data, count, &sent,
- (SA *) &addr, sizeof(addr), tm);
- break;
- }
- default:
+ struct addrinfo aihint;
+ struct addrinfo *ai;
+ memset(&aihint, 0, sizeof(aihint));
+ aihint.ai_family = udp->family;
+ aihint.ai_socktype = SOCK_DGRAM;
+ aihint.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
+ err = getaddrinfo(ip, port, &aihint, &ai);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, gai_strerror(err));
+ return 2;
+ }
+
+ /* create socket if on first sendto if AF_UNSPEC was set */
+ if (udp->family == AF_UNSPEC && udp->sock == SOCKET_INVALID) {
+ struct addrinfo *ap;
+ const char *errstr = NULL;
+ for (ap = ai; ap != NULL; ap = ap->ai_next) {
+ errstr = inet_trycreate(&udp->sock, ap->ai_family, SOCK_DGRAM, 0);
+ if (errstr == NULL) {
+ socket_setnonblocking(&udp->sock);
+ udp->family = ap->ai_family;
+ break;
+ }
+ }
+ if (errstr != NULL) {
lua_pushnil(L);
- lua_pushfstring(L, "unknown family %d", udp->family);
+ lua_pushstring(L, errstr);
+ freeaddrinfo(ai);
return 2;
+ }
}
+
+ timeout_markstart(tm);
+ err = socket_sendto(&udp->sock, data, count, &sent, ai->ai_addr,
+ (socklen_t) ai->ai_addrlen, tm);
+ freeaddrinfo(ai);
if (err != IO_DONE) {
lua_pushnil(L);
lua_pushstring(L, udp_strerror(err));
@@ -198,22 +228,27 @@ static int meth_sendto(lua_State *L) {
\*-------------------------------------------------------------------------*/
static int meth_receive(lua_State *L) {
p_udp udp = (p_udp) auxiliar_checkgroup(L, "udp{any}", 1);
- char buffer[UDP_DATAGRAMSIZE];
- size_t got, count = (size_t) luaL_optnumber(L, 2, sizeof(buffer));
+ char buf[UDP_DATAGRAMSIZE];
+ size_t got, wanted = (size_t) luaL_optnumber(L, 2, sizeof(buf));
+ char *dgram = wanted > sizeof(buf)? (char *) malloc(wanted): buf;
int err;
p_timeout tm = &udp->tm;
- count = MIN(count, sizeof(buffer));
timeout_markstart(tm);
- err = socket_recv(&udp->sock, buffer, count, &got, tm);
+ if (!dgram) {
+ lua_pushnil(L);
+ lua_pushliteral(L, "out of memory");
+ return 2;
+ }
+ err = socket_recv(&udp->sock, dgram, wanted, &got, tm);
/* Unlike TCP, recv() of zero is not closed, but a zero-length packet. */
- if (err == IO_CLOSED)
- err = IO_DONE;
- if (err != IO_DONE) {
+ if (err != IO_DONE && err != IO_CLOSED) {
lua_pushnil(L);
lua_pushstring(L, udp_strerror(err));
+ if (wanted > sizeof(buf)) free(dgram);
return 2;
}
- lua_pushlstring(L, buffer, got);
+ lua_pushlstring(L, dgram, got);
+ if (wanted > sizeof(buf)) free(dgram);
return 1;
}
@@ -221,77 +256,52 @@ static int meth_receive(lua_State *L) {
* Receives data and sender from a UDP socket
\*-------------------------------------------------------------------------*/
static int meth_receivefrom(lua_State *L) {
- p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1);
- char buffer[UDP_DATAGRAMSIZE];
- size_t got, count = (size_t) luaL_optnumber(L, 2, sizeof(buffer));
+ p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1);
+ char buf[UDP_DATAGRAMSIZE];
+ size_t got, wanted = (size_t) luaL_optnumber(L, 2, sizeof(buf));
+ char *dgram = wanted > sizeof(buf)? (char *) malloc(wanted): buf;
+ struct sockaddr_storage addr;
+ socklen_t addr_len = sizeof(addr);
+ char addrstr[INET6_ADDRSTRLEN];
+ char portstr[6];
int err;
p_timeout tm = &udp->tm;
timeout_markstart(tm);
- count = MIN(count, sizeof(buffer));
- switch (udp->family) {
- case PF_INET: {
- struct sockaddr_in addr;
- socklen_t addr_len = sizeof(addr);
- err = socket_recvfrom(&udp->sock, buffer, count, &got,
- (SA *) &addr, &addr_len, tm);
- /* Unlike TCP, recv() of zero is not closed, but a zero-length packet. */
- if (err == IO_CLOSED)
- err = IO_DONE;
- if (err == IO_DONE) {
- char addrstr[INET_ADDRSTRLEN];
- lua_pushlstring(L, buffer, got);
- if (!inet_ntop(AF_INET, &addr.sin_addr,
- addrstr, sizeof(addrstr))) {
- lua_pushnil(L);
- lua_pushstring(L, "invalid source address");
- return 2;
- }
- lua_pushstring(L, addrstr);
- lua_pushnumber(L, ntohs(addr.sin_port));
- return 3;
- }
- break;
- }
- case PF_INET6: {
- struct sockaddr_in6 addr;
- socklen_t addr_len = sizeof(addr);
- err = socket_recvfrom(&udp->sock, buffer, count, &got,
- (SA *) &addr, &addr_len, tm);
- /* Unlike TCP, recv() of zero is not closed, but a zero-length packet. */
- if (err == IO_CLOSED)
- err = IO_DONE;
- if (err == IO_DONE) {
- char addrstr[INET6_ADDRSTRLEN];
- lua_pushlstring(L, buffer, got);
- if (!inet_ntop(AF_INET6, &addr.sin6_addr,
- addrstr, sizeof(addrstr))) {
- lua_pushnil(L);
- lua_pushstring(L, "invalid source address");
- return 2;
- }
- lua_pushstring(L, addrstr);
- lua_pushnumber(L, ntohs(addr.sin6_port));
- return 3;
- }
- break;
- }
- default:
+ if (!dgram) {
+ lua_pushnil(L);
+ lua_pushliteral(L, "out of memory");
+ return 2;
+ }
+ err = socket_recvfrom(&udp->sock, dgram, wanted, &got, (SA *) &addr,
+ &addr_len, tm);
+ /* Unlike TCP, recv() of zero is not closed, but a zero-length packet. */
+ if (err != IO_DONE && err != IO_CLOSED) {
+ lua_pushnil(L);
+ lua_pushstring(L, udp_strerror(err));
+ if (wanted > sizeof(buf)) free(dgram);
+ return 2;
+ }
+ err = getnameinfo((struct sockaddr *)&addr, addr_len, addrstr,
+ INET6_ADDRSTRLEN, portstr, 6, NI_NUMERICHOST | NI_NUMERICSERV);
+ if (err) {
lua_pushnil(L);
- lua_pushfstring(L, "unknown family %d", udp->family);
+ lua_pushstring(L, gai_strerror(err));
+ if (wanted > sizeof(buf)) free(dgram);
return 2;
}
- lua_pushnil(L);
- lua_pushstring(L, udp_strerror(err));
- return 2;
+ lua_pushlstring(L, dgram, got);
+ lua_pushstring(L, addrstr);
+ lua_pushinteger(L, (int) strtol(portstr, (char **) NULL, 10));
+ if (wanted > sizeof(buf)) free(dgram);
+ return 3;
}
/*-------------------------------------------------------------------------*\
* Returns family as string
\*-------------------------------------------------------------------------*/
-static int meth_getfamily(lua_State *L)
-{
+static int meth_getfamily(lua_State *L) {
p_udp udp = (p_udp) auxiliar_checkgroup(L, "udp{any}", 1);
- if (udp->family == PF_INET6) {
+ if (udp->family == AF_INET6) {
lua_pushliteral(L, "inet6");
return 1;
} else {
@@ -327,7 +337,7 @@ static int meth_dirty(lua_State *L) {
* Just call inet methods
\*-------------------------------------------------------------------------*/
static int meth_getpeername(lua_State *L) {
- p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.connected", 1);
+ p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{connected}", 1);
return inet_meth_getpeername(L, &udp->sock, udp->family);
}
@@ -360,6 +370,11 @@ static int meth_settimeout(lua_State *L) {
return timeout_meth_settimeout(L, &udp->tm);
}
+static int meth_gettimeout(lua_State *L) {
+ p_udp udp = (p_udp) auxiliar_checkgroup(L, "udp{any}", 1);
+ return timeout_meth_gettimeout(L, &udp->tm);
+}
+
/*-------------------------------------------------------------------------*\
* Turns a master udp object into a client object.
\*-------------------------------------------------------------------------*/
@@ -376,20 +391,20 @@ static int meth_setpeername(lua_State *L) {
/* make sure we try to connect only to the same family */
connecthints.ai_family = udp->family;
if (connecting) {
- err = inet_tryconnect(&udp->sock, address, port, tm, &connecthints);
+ err = inet_tryconnect(&udp->sock, &udp->family, address,
+ port, tm, &connecthints);
if (err) {
lua_pushnil(L);
lua_pushstring(L, err);
return 2;
}
- auxiliar_setclass(L, "udp.connected", 1);
+ auxiliar_setclass(L, "udp{connected}", 1);
} else {
/* we ignore possible errors because Mac OS X always
* returns EAFNOSUPPORT */
inet_trydisconnect(&udp->sock, udp->family, tm);
- auxiliar_setclass(L, "udp.unconnected", 1);
+ auxiliar_setclass(L, "udp{unconnected}", 1);
}
- /* change class to connected or unconnected depending on address */
lua_pushnumber(L, 1);
return 1;
}
@@ -408,16 +423,16 @@ static int meth_close(lua_State *L) {
* Turns a master object into a server object
\*-------------------------------------------------------------------------*/
static int meth_setsockname(lua_State *L) {
- p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1);
+ p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1);
const char *address = luaL_checkstring(L, 2);
const char *port = luaL_checkstring(L, 3);
const char *err;
- struct addrinfo bindhints;
+ struct addrinfo bindhints;
memset(&bindhints, 0, sizeof(bindhints));
bindhints.ai_socktype = SOCK_DGRAM;
bindhints.ai_family = udp->family;
bindhints.ai_flags = AI_PASSIVE;
- err = inet_trybind(&udp->sock, address, port, &bindhints);
+ err = inet_trybind(&udp->sock, &udp->family, address, port, &bindhints);
if (err) {
lua_pushnil(L);
lua_pushstring(L, err);
@@ -434,35 +449,35 @@ static int meth_setsockname(lua_State *L) {
* Creates a master udp object
\*-------------------------------------------------------------------------*/
static int udp_create(lua_State *L, int family) {
- t_socket sock;
- const char *err = inet_trycreate(&sock, family, SOCK_DGRAM);
- /* try to allocate a system socket */
- if (!err) {
- /* allocate udp object */
- p_udp udp = (p_udp) lua_newuserdata(L, sizeof(t_udp));
- auxiliar_setclass(L, "udp.unconnected", -1);
- /* initialize remaining structure fields */
- socket_setnonblocking(&sock);
- if (family == PF_INET6) {
- int yes = 1;
- setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- (void *)&yes, sizeof(yes));
+ /* allocate udp object */
+ p_udp udp = (p_udp) lua_newuserdata(L, sizeof(t_udp));
+ auxiliar_setclass(L, "udp{unconnected}", -1);
+ /* if family is AF_UNSPEC, we leave the socket invalid and
+ * store AF_UNSPEC into family. This will allow it to later be
+ * replaced with an AF_INET6 or AF_INET socket upon first use. */
+ udp->sock = SOCKET_INVALID;
+ timeout_init(&udp->tm, -1, -1);
+ udp->family = family;
+ if (family != AF_UNSPEC) {
+ const char *err = inet_trycreate(&udp->sock, family, SOCK_DGRAM, 0);
+ if (err != NULL) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
}
- udp->sock = sock;
- timeout_init(&udp->tm, -1, -1);
- udp->family = family;
- return 1;
- } else {
- lua_pushnil(L);
- lua_pushstring(L, err);
- return 2;
+ socket_setnonblocking(&udp->sock);
}
+ return 1;
}
static int global_create(lua_State *L) {
- return udp_create(L, AF_INET);
+ return udp_create(L, AF_UNSPEC);
+}
+
+static int global_create4(lua_State *L) {
+ return udp_create(L, AF_INET);
}
static int global_create6(lua_State *L) {
- return udp_create(L, AF_INET6);
+ return udp_create(L, AF_INET6);
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.h b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.h
index 2b831a53716..be9b6a5530f 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.h
@@ -8,7 +8,7 @@
* (AF_INET, SOCK_DGRAM).
*
* Two classes are defined: connected and unconnected. UDP objects are
-* originally unconnected. They can be "connected" to a given address
+* originally unconnected. They can be "connected" to a given address
* with a call to the setpeername function. The same function can be used to
* break the connection.
\*=========================================================================*/
@@ -17,7 +17,6 @@
#include "timeout.h"
#include "socket.h"
-/* can't be larger than wsocket.c MAXCHUNK!!! */
#define UDP_DATAGRAMSIZE 8192
typedef struct t_udp_ {
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unix.c b/Build/source/texk/web2c/luatexdir/luasocket/src/unix.c
index 73e7b69544c..dbc87100da3 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/unix.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unix.c
@@ -1,340 +1,70 @@
/*=========================================================================*\
-* Unix domain socket
+* Unix domain socket
* LuaSocket toolkit
\*=========================================================================*/
-#include <string.h>
-
#include "lua.h"
#include "lauxlib.h"
-#include "auxiliar.h"
-#include "socket.h"
-#include "options.h"
-#include "unix.h"
-#include <sys/un.h>
-
-/*=========================================================================*\
-* Internal function prototypes
-\*=========================================================================*/
-static int global_create(lua_State *L);
-static int meth_connect(lua_State *L);
-static int meth_listen(lua_State *L);
-static int meth_bind(lua_State *L);
-static int meth_send(lua_State *L);
-static int meth_shutdown(lua_State *L);
-static int meth_receive(lua_State *L);
-static int meth_accept(lua_State *L);
-static int meth_close(lua_State *L);
-static int meth_setoption(lua_State *L);
-static int meth_settimeout(lua_State *L);
-static int meth_getfd(lua_State *L);
-static int meth_setfd(lua_State *L);
-static int meth_dirty(lua_State *L);
-static int meth_getstats(lua_State *L);
-static int meth_setstats(lua_State *L);
-
-static const char *unix_tryconnect(p_unix un, const char *path);
-static const char *unix_trybind(p_unix un, const char *path);
-
-/* unix object methods */
-static luaL_Reg unix_methods[] = {
- {"__gc", meth_close},
- {"__tostring", auxiliar_tostring},
- {"accept", meth_accept},
- {"bind", meth_bind},
- {"close", meth_close},
- {"connect", meth_connect},
- {"dirty", meth_dirty},
- {"getfd", meth_getfd},
- {"getstats", meth_getstats},
- {"setstats", meth_setstats},
- {"listen", meth_listen},
- {"receive", meth_receive},
- {"send", meth_send},
- {"setfd", meth_setfd},
- {"setoption", meth_setoption},
- {"setpeername", meth_connect},
- {"setsockname", meth_bind},
- {"settimeout", meth_settimeout},
- {"shutdown", meth_shutdown},
- {NULL, NULL}
-};
-
-/* socket option handlers */
-static t_opt optset[] = {
- {"keepalive", opt_set_keepalive},
- {"reuseaddr", opt_set_reuseaddr},
- {"linger", opt_set_linger},
- {NULL, NULL}
-};
-
-/* our socket creation function */
-static luaL_Reg func[] = {
- {"unix", global_create},
- {NULL, NULL}
-};
-
-
-/*-------------------------------------------------------------------------*\
-* Initializes module
-\*-------------------------------------------------------------------------*/
-int luaopen_socket_unix(lua_State *L) {
- /* create classes */
- auxiliar_newclass(L, "unix{master}", unix_methods);
- auxiliar_newclass(L, "unix{client}", unix_methods);
- auxiliar_newclass(L, "unix{server}", unix_methods);
- /* create class groups */
- auxiliar_add2group(L, "unix{master}", "unix{any}");
- auxiliar_add2group(L, "unix{client}", "unix{any}");
- auxiliar_add2group(L, "unix{server}", "unix{any}");
- /* make sure the function ends up in the package table */
- luaL_openlib(L, "socket", func, 0);
- /* return the function instead of the 'socket' table */
- lua_pushstring(L, "unix");
- lua_gettable(L, -2);
- return 1;
-}
+#include "unixstream.h"
+#include "unixdgram.h"
-/*=========================================================================*\
-* Lua methods
-\*=========================================================================*/
/*-------------------------------------------------------------------------*\
-* Just call buffered IO methods
+* Modules and functions
\*-------------------------------------------------------------------------*/
-static int meth_send(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- return buffer_meth_send(L, &un->buf);
-}
-
-static int meth_receive(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- return buffer_meth_receive(L, &un->buf);
-}
-
-static int meth_getstats(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- return buffer_meth_getstats(L, &un->buf);
-}
-
-static int meth_setstats(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- return buffer_meth_setstats(L, &un->buf);
-}
-
-/*-------------------------------------------------------------------------*\
-* Just call option handler
-\*-------------------------------------------------------------------------*/
-static int meth_setoption(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- return opt_meth_setoption(L, optset, &un->sock);
-}
-
-/*-------------------------------------------------------------------------*\
-* Select support methods
-\*-------------------------------------------------------------------------*/
-static int meth_getfd(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- lua_pushnumber(L, (int) un->sock);
- return 1;
-}
-
-/* this is very dangerous, but can be handy for those that are brave enough */
-static int meth_setfd(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- un->sock = (t_socket) luaL_checknumber(L, 2);
- return 0;
-}
+static const luaL_Reg mod[] = {
+ {"stream", unixstream_open},
+ {"dgram", unixdgram_open},
+ {NULL, NULL}
+};
-static int meth_dirty(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- lua_pushboolean(L, !buffer_isempty(&un->buf));
- return 1;
+static void add_alias(lua_State *L, int index, const char *name, const char *target)
+{
+ lua_getfield(L, index, target);
+ lua_setfield(L, index, name);
}
-/*-------------------------------------------------------------------------*\
-* Waits for and returns a client object attempting connection to the
-* server object
-\*-------------------------------------------------------------------------*/
-static int meth_accept(lua_State *L) {
- p_unix server = (p_unix) auxiliar_checkclass(L, "unix{server}", 1);
- p_timeout tm = timeout_markstart(&server->tm);
- t_socket sock;
- int err = socket_accept(&server->sock, &sock, NULL, NULL, tm);
- /* if successful, push client socket */
- if (err == IO_DONE) {
- p_unix clnt = (p_unix) lua_newuserdata(L, sizeof(t_unix));
- auxiliar_setclass(L, "unix{client}", -1);
- /* initialize structure fields */
- socket_setnonblocking(&sock);
- clnt->sock = sock;
- io_init(&clnt->io, (p_send)socket_send, (p_recv)socket_recv,
- (p_error) socket_ioerror, &clnt->sock);
- timeout_init(&clnt->tm, -1, -1);
- buffer_init(&clnt->buf, &clnt->io, &clnt->tm);
- return 1;
- } else {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(err));
- return 2;
- }
-}
+static int compat_socket_unix_call(lua_State *L)
+{
+ /* Look up socket.unix.stream in the socket.unix table (which is the first
+ * argument). */
+ lua_getfield(L, 1, "stream");
-/*-------------------------------------------------------------------------*\
-* Binds an object to an address
-\*-------------------------------------------------------------------------*/
-static const char *unix_trybind(p_unix un, const char *path) {
- struct sockaddr_un local;
- size_t len = strlen(path);
- int err;
- if (len >= sizeof(local.sun_path)) return "path too long";
- memset(&local, 0, sizeof(local));
- strcpy(local.sun_path, path);
- local.sun_family = AF_UNIX;
-#ifdef UNIX_HAS_SUN_LEN
- local.sun_len = sizeof(local.sun_family) + sizeof(local.sun_len)
- + len + 1;
- err = socket_bind(&un->sock, (SA *) &local, local.sun_len);
+ /* Replace the stack entry for the socket.unix table with the
+ * socket.unix.stream function. */
+ lua_replace(L, 1);
-#else
- err = socket_bind(&un->sock, (SA *) &local,
- sizeof(local.sun_family) + len);
-#endif
- if (err != IO_DONE) socket_destroy(&un->sock);
- return socket_strerror(err);
-}
+ /* Call socket.unix.stream, passing along any arguments. */
+ int n = lua_gettop(L);
+ lua_call(L, n-1, LUA_MULTRET);
-static int meth_bind(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{master}", 1);
- const char *path = luaL_checkstring(L, 2);
- const char *err = unix_trybind(un, path);
- if (err) {
- lua_pushnil(L);
- lua_pushstring(L, err);
- return 2;
- }
- lua_pushnumber(L, 1);
- return 1;
+ /* Pass along the return values from socket.unix.stream. */
+ n = lua_gettop(L);
+ return n;
}
/*-------------------------------------------------------------------------*\
-* Turns a master unix object into a client object.
+* Initializes module
\*-------------------------------------------------------------------------*/
-static const char *unix_tryconnect(p_unix un, const char *path)
+int luaopen_socket_unix(lua_State *L)
{
- struct sockaddr_un remote;
- int err;
- size_t len = strlen(path);
- if (len >= sizeof(remote.sun_path)) return "path too long";
- memset(&remote, 0, sizeof(remote));
- strcpy(remote.sun_path, path);
- remote.sun_family = AF_UNIX;
- timeout_markstart(&un->tm);
-#ifdef UNIX_HAS_SUN_LEN
- remote.sun_len = sizeof(remote.sun_family) + sizeof(remote.sun_len)
- + len + 1;
- err = socket_connect(&un->sock, (SA *) &remote, remote.sun_len, &un->tm);
-#else
- err = socket_connect(&un->sock, (SA *) &remote,
- sizeof(remote.sun_family) + len, &un->tm);
-#endif
- if (err != IO_DONE) socket_destroy(&un->sock);
- return socket_strerror(err);
-}
+ int i;
+ lua_newtable(L);
+ int socket_unix_table = lua_gettop(L);
-static int meth_connect(lua_State *L)
-{
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{master}", 1);
- const char *path = luaL_checkstring(L, 2);
- const char *err = unix_tryconnect(un, path);
- if (err) {
- lua_pushnil(L);
- lua_pushstring(L, err);
- return 2;
- }
- /* turn master object into a client object */
- auxiliar_setclass(L, "unix{client}", 1);
- lua_pushnumber(L, 1);
- return 1;
-}
+ for (i = 0; mod[i].name; i++)
+ mod[i].func(L);
-/*-------------------------------------------------------------------------*\
-* Closes socket used by object
-\*-------------------------------------------------------------------------*/
-static int meth_close(lua_State *L)
-{
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- socket_destroy(&un->sock);
- lua_pushnumber(L, 1);
- return 1;
-}
+ /* Add backwards compatibility aliases "tcp" and "udp" for the "stream" and
+ * "dgram" functions. */
+ add_alias(L, socket_unix_table, "tcp", "stream");
+ add_alias(L, socket_unix_table, "udp", "dgram");
-/*-------------------------------------------------------------------------*\
-* Puts the sockt in listen mode
-\*-------------------------------------------------------------------------*/
-static int meth_listen(lua_State *L)
-{
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{master}", 1);
- int backlog = (int) luaL_optnumber(L, 2, 32);
- int err = socket_listen(&un->sock, backlog);
- if (err != IO_DONE) {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(err));
- return 2;
- }
- /* turn master object into a server object */
- auxiliar_setclass(L, "unix{server}", 1);
- lua_pushnumber(L, 1);
- return 1;
-}
+ /* Add a backwards compatibility function and a metatable setup to call it
+ * for the old socket.unix() interface. */
+ lua_pushcfunction(L, compat_socket_unix_call);
+ lua_setfield(L, socket_unix_table, "__call");
+ lua_pushvalue(L, socket_unix_table);
+ lua_setmetatable(L, socket_unix_table);
-/*-------------------------------------------------------------------------*\
-* Shuts the connection down partially
-\*-------------------------------------------------------------------------*/
-static int meth_shutdown(lua_State *L)
-{
- /* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */
- static const char* methods[] = { "receive", "send", "both", NULL };
- p_unix tcp = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- int how = luaL_checkoption(L, 2, "both", methods);
- socket_shutdown(&tcp->sock, how);
- lua_pushnumber(L, 1);
return 1;
}
-
-/*-------------------------------------------------------------------------*\
-* Just call tm methods
-\*-------------------------------------------------------------------------*/
-static int meth_settimeout(lua_State *L) {
- p_unix un = (p_unix) auxiliar_checkgroup(L, "unix{any}", 1);
- return timeout_meth_settimeout(L, &un->tm);
-}
-
-/*=========================================================================*\
-* Library functions
-\*=========================================================================*/
-/*-------------------------------------------------------------------------*\
-* Creates a master unix object
-\*-------------------------------------------------------------------------*/
-static int global_create(lua_State *L) {
- t_socket sock;
- int err = socket_create(&sock, AF_UNIX, SOCK_STREAM, 0);
- /* try to allocate a system socket */
- if (err == IO_DONE) {
- /* allocate unix object */
- p_unix un = (p_unix) lua_newuserdata(L, sizeof(t_unix));
- /* set its type as master object */
- auxiliar_setclass(L, "unix{master}", -1);
- /* initialize remaining structure fields */
- socket_setnonblocking(&sock);
- un->sock = sock;
- io_init(&un->io, (p_send) socket_send, (p_recv) socket_recv,
- (p_error) socket_ioerror, &un->sock);
- timeout_init(&un->tm, -1, -1);
- buffer_init(&un->buf, &un->io, &un->tm);
- return 1;
- } else {
- lua_pushnil(L);
- lua_pushstring(L, socket_strerror(err));
- return 2;
- }
-}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unix.h b/Build/source/texk/web2c/luatexdir/luasocket/src/unix.h
index ad305079dd7..d55444fe575 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/unix.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unix.h
@@ -14,6 +14,10 @@
#include "socket.h"
#include "luasocket.h"
+#ifndef UNIX_API
+#define UNIX_API extern
+#endif
+
typedef struct t_unix_ {
t_socket sock;
t_io io;
@@ -22,6 +26,6 @@ typedef struct t_unix_ {
} t_unix;
typedef t_unix *p_unix;
-LUASOCKET_API int luaopen_socket_unix(lua_State *L);
+UNIX_API int luaopen_socket_unix(lua_State *L);
#endif /* UNIX_H */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.c b/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.c
new file mode 100644
index 00000000000..4645892fbe9
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.c
@@ -0,0 +1,408 @@
+/*=========================================================================*\
+* Unix domain socket dgram submodule
+* LuaSocket toolkit
+\*=========================================================================*/
+#include <string.h>
+#include <stdlib.h>
+
+#include "lua.h"
+#include "lauxlib.h"
+#include "compat.h"
+
+#include "auxiliar.h"
+#include "socket.h"
+#include "options.h"
+#include "unix.h"
+#include <sys/un.h>
+
+#define UNIXDGRAM_DATAGRAMSIZE 8192
+
+/*=========================================================================*\
+* Internal function prototypes
+\*=========================================================================*/
+static int global_create(lua_State *L);
+static int meth_connect(lua_State *L);
+static int meth_bind(lua_State *L);
+static int meth_send(lua_State *L);
+static int meth_receive(lua_State *L);
+static int meth_close(lua_State *L);
+static int meth_setoption(lua_State *L);
+static int meth_settimeout(lua_State *L);
+static int meth_gettimeout(lua_State *L);
+static int meth_getfd(lua_State *L);
+static int meth_setfd(lua_State *L);
+static int meth_dirty(lua_State *L);
+static int meth_receivefrom(lua_State *L);
+static int meth_sendto(lua_State *L);
+static int meth_getsockname(lua_State *L);
+
+static const char *unixdgram_tryconnect(p_unix un, const char *path);
+static const char *unixdgram_trybind(p_unix un, const char *path);
+
+/* unixdgram object methods */
+static luaL_Reg unixdgram_methods[] = {
+ {"__gc", meth_close},
+ {"__tostring", auxiliar_tostring},
+ {"bind", meth_bind},
+ {"close", meth_close},
+ {"connect", meth_connect},
+ {"dirty", meth_dirty},
+ {"getfd", meth_getfd},
+ {"send", meth_send},
+ {"sendto", meth_sendto},
+ {"receive", meth_receive},
+ {"receivefrom", meth_receivefrom},
+ {"setfd", meth_setfd},
+ {"setoption", meth_setoption},
+ {"setpeername", meth_connect},
+ {"setsockname", meth_bind},
+ {"getsockname", meth_getsockname},
+ {"settimeout", meth_settimeout},
+ {"gettimeout", meth_gettimeout},
+ {NULL, NULL}
+};
+
+/* socket option handlers */
+static t_opt optset[] = {
+ {"reuseaddr", opt_set_reuseaddr},
+ {NULL, NULL}
+};
+
+/* functions in library namespace */
+static luaL_Reg func[] = {
+ {"dgram", global_create},
+ {NULL, NULL}
+};
+
+/*-------------------------------------------------------------------------*\
+* Initializes module
+\*-------------------------------------------------------------------------*/
+int unixdgram_open(lua_State *L)
+{
+ /* create classes */
+ auxiliar_newclass(L, "unixdgram{connected}", unixdgram_methods);
+ auxiliar_newclass(L, "unixdgram{unconnected}", unixdgram_methods);
+ /* create class groups */
+ auxiliar_add2group(L, "unixdgram{connected}", "unixdgram{any}");
+ auxiliar_add2group(L, "unixdgram{unconnected}", "unixdgram{any}");
+ auxiliar_add2group(L, "unixdgram{connected}", "select{able}");
+ auxiliar_add2group(L, "unixdgram{unconnected}", "select{able}");
+
+ luaL_setfuncs(L, func, 0);
+ return 0;
+}
+
+/*=========================================================================*\
+* Lua methods
+\*=========================================================================*/
+static const char *unixdgram_strerror(int err)
+{
+ /* a 'closed' error on an unconnected means the target address was not
+ * accepted by the transport layer */
+ if (err == IO_CLOSED) return "refused";
+ else return socket_strerror(err);
+}
+
+static int meth_send(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixdgram{connected}", 1);
+ p_timeout tm = &un->tm;
+ size_t count, sent = 0;
+ int err;
+ const char *data = luaL_checklstring(L, 2, &count);
+ timeout_markstart(tm);
+ err = socket_send(&un->sock, data, count, &sent, tm);
+ if (err != IO_DONE) {
+ lua_pushnil(L);
+ lua_pushstring(L, unixdgram_strerror(err));
+ return 2;
+ }
+ lua_pushnumber(L, (lua_Number) sent);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Send data through unconnected unixdgram socket
+\*-------------------------------------------------------------------------*/
+static int meth_sendto(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixdgram{unconnected}", 1);
+ size_t count, sent = 0;
+ const char *data = luaL_checklstring(L, 2, &count);
+ const char *path = luaL_checkstring(L, 3);
+ p_timeout tm = &un->tm;
+ int err;
+ struct sockaddr_un remote;
+ size_t len = strlen(path);
+
+ if (len >= sizeof(remote.sun_path)) {
+ lua_pushnil(L);
+ lua_pushstring(L, "path too long");
+ return 2;
+ }
+
+ memset(&remote, 0, sizeof(remote));
+ strcpy(remote.sun_path, path);
+ remote.sun_family = AF_UNIX;
+ timeout_markstart(tm);
+#ifdef UNIX_HAS_SUN_LEN
+ remote.sun_len = sizeof(remote.sun_family) + sizeof(remote.sun_len)
+ + len + 1;
+ err = socket_sendto(&un->sock, data, count, &sent, (SA *) &remote, remote.sun_len, tm);
+#else
+ err = socket_sendto(&un->sock, data, count, &sent, (SA *) &remote,
+ sizeof(remote.sun_family) + len, tm);
+#endif
+ if (err != IO_DONE) {
+ lua_pushnil(L);
+ lua_pushstring(L, unixdgram_strerror(err));
+ return 2;
+ }
+ lua_pushnumber(L, (lua_Number) sent);
+ return 1;
+}
+
+static int meth_receive(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ char buf[UNIXDGRAM_DATAGRAMSIZE];
+ size_t got, wanted = (size_t) luaL_optnumber(L, 2, sizeof(buf));
+ char *dgram = wanted > sizeof(buf)? (char *) malloc(wanted): buf;
+ int err;
+ p_timeout tm = &un->tm;
+ timeout_markstart(tm);
+ if (!dgram) {
+ lua_pushnil(L);
+ lua_pushliteral(L, "out of memory");
+ return 2;
+ }
+ err = socket_recv(&un->sock, dgram, wanted, &got, tm);
+ /* Unlike STREAM, recv() of zero is not closed, but a zero-length packet. */
+ if (err != IO_DONE && err != IO_CLOSED) {
+ lua_pushnil(L);
+ lua_pushstring(L, unixdgram_strerror(err));
+ if (wanted > sizeof(buf)) free(dgram);
+ return 2;
+ }
+ lua_pushlstring(L, dgram, got);
+ if (wanted > sizeof(buf)) free(dgram);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Receives data and sender from a DGRAM socket
+\*-------------------------------------------------------------------------*/
+static int meth_receivefrom(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixdgram{unconnected}", 1);
+ char buf[UNIXDGRAM_DATAGRAMSIZE];
+ size_t got, wanted = (size_t) luaL_optnumber(L, 2, sizeof(buf));
+ char *dgram = wanted > sizeof(buf)? (char *) malloc(wanted): buf;
+ struct sockaddr_un addr;
+ socklen_t addr_len = sizeof(addr);
+ int err;
+ p_timeout tm = &un->tm;
+ timeout_markstart(tm);
+ if (!dgram) {
+ lua_pushnil(L);
+ lua_pushliteral(L, "out of memory");
+ return 2;
+ }
+ addr.sun_path[0] = '\0';
+ err = socket_recvfrom(&un->sock, dgram, wanted, &got, (SA *) &addr,
+ &addr_len, tm);
+ /* Unlike STREAM, recv() of zero is not closed, but a zero-length packet. */
+ if (err != IO_DONE && err != IO_CLOSED) {
+ lua_pushnil(L);
+ lua_pushstring(L, unixdgram_strerror(err));
+ if (wanted > sizeof(buf)) free(dgram);
+ return 2;
+ }
+
+ lua_pushlstring(L, dgram, got);
+ /* the path may be empty, when client send without bind */
+ lua_pushstring(L, addr.sun_path);
+ if (wanted > sizeof(buf)) free(dgram);
+ return 2;
+}
+
+/*-------------------------------------------------------------------------*\
+* Just call option handler
+\*-------------------------------------------------------------------------*/
+static int meth_setoption(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ return opt_meth_setoption(L, optset, &un->sock);
+}
+
+/*-------------------------------------------------------------------------*\
+* Select support methods
+\*-------------------------------------------------------------------------*/
+static int meth_getfd(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ lua_pushnumber(L, (int) un->sock);
+ return 1;
+}
+
+/* this is very dangerous, but can be handy for those that are brave enough */
+static int meth_setfd(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ un->sock = (t_socket) luaL_checknumber(L, 2);
+ return 0;
+}
+
+static int meth_dirty(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ (void) un;
+ lua_pushboolean(L, 0);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Binds an object to an address
+\*-------------------------------------------------------------------------*/
+static const char *unixdgram_trybind(p_unix un, const char *path) {
+ struct sockaddr_un local;
+ size_t len = strlen(path);
+ int err;
+ if (len >= sizeof(local.sun_path)) return "path too long";
+ memset(&local, 0, sizeof(local));
+ strcpy(local.sun_path, path);
+ local.sun_family = AF_UNIX;
+#ifdef UNIX_HAS_SUN_LEN
+ local.sun_len = sizeof(local.sun_family) + sizeof(local.sun_len)
+ + len + 1;
+ err = socket_bind(&un->sock, (SA *) &local, local.sun_len);
+
+#else
+ err = socket_bind(&un->sock, (SA *) &local,
+ sizeof(local.sun_family) + len);
+#endif
+ if (err != IO_DONE) socket_destroy(&un->sock);
+ return socket_strerror(err);
+}
+
+static int meth_bind(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixdgram{unconnected}", 1);
+ const char *path = luaL_checkstring(L, 2);
+ const char *err = unixdgram_trybind(un, path);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
+ }
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+static int meth_getsockname(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ struct sockaddr_un peer = {0};
+ socklen_t peer_len = sizeof(peer);
+
+ if (getsockname(un->sock, (SA *) &peer, &peer_len) < 0) {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(errno));
+ return 2;
+ }
+
+ lua_pushstring(L, peer.sun_path);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Turns a master unixdgram object into a client object.
+\*-------------------------------------------------------------------------*/
+static const char *unixdgram_tryconnect(p_unix un, const char *path)
+{
+ struct sockaddr_un remote;
+ int err;
+ size_t len = strlen(path);
+ if (len >= sizeof(remote.sun_path)) return "path too long";
+ memset(&remote, 0, sizeof(remote));
+ strcpy(remote.sun_path, path);
+ remote.sun_family = AF_UNIX;
+ timeout_markstart(&un->tm);
+#ifdef UNIX_HAS_SUN_LEN
+ remote.sun_len = sizeof(remote.sun_family) + sizeof(remote.sun_len)
+ + len + 1;
+ err = socket_connect(&un->sock, (SA *) &remote, remote.sun_len, &un->tm);
+#else
+ err = socket_connect(&un->sock, (SA *) &remote,
+ sizeof(remote.sun_family) + len, &un->tm);
+#endif
+ if (err != IO_DONE) socket_destroy(&un->sock);
+ return socket_strerror(err);
+}
+
+static int meth_connect(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ const char *path = luaL_checkstring(L, 2);
+ const char *err = unixdgram_tryconnect(un, path);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
+ }
+ /* turn unconnected object into a connected object */
+ auxiliar_setclass(L, "unixdgram{connected}", 1);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Closes socket used by object
+\*-------------------------------------------------------------------------*/
+static int meth_close(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ socket_destroy(&un->sock);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Just call tm methods
+\*-------------------------------------------------------------------------*/
+static int meth_settimeout(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ return timeout_meth_settimeout(L, &un->tm);
+}
+
+static int meth_gettimeout(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixdgram{any}", 1);
+ return timeout_meth_gettimeout(L, &un->tm);
+}
+
+/*=========================================================================*\
+* Library functions
+\*=========================================================================*/
+/*-------------------------------------------------------------------------*\
+* Creates a master unixdgram object
+\*-------------------------------------------------------------------------*/
+static int global_create(lua_State *L)
+{
+ t_socket sock;
+ int err = socket_create(&sock, AF_UNIX, SOCK_DGRAM, 0);
+ /* try to allocate a system socket */
+ if (err == IO_DONE) {
+ /* allocate unixdgram object */
+ p_unix un = (p_unix) lua_newuserdata(L, sizeof(t_unix));
+ /* set its type as master object */
+ auxiliar_setclass(L, "unixdgram{unconnected}", -1);
+ /* initialize remaining structure fields */
+ socket_setnonblocking(&sock);
+ un->sock = sock;
+ io_init(&un->io, (p_send) socket_send, (p_recv) socket_recv,
+ (p_error) socket_ioerror, &un->sock);
+ timeout_init(&un->tm, -1, -1);
+ buffer_init(&un->buf, &un->io, &un->tm);
+ return 1;
+ } else {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(err));
+ return 2;
+ }
+}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.h b/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.h
new file mode 100644
index 00000000000..7187966d48d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unixdgram.h
@@ -0,0 +1,20 @@
+#ifndef UNIXDGRAM_H
+#define UNIXDGRAM_H
+/*=========================================================================*\
+* DGRAM object
+* LuaSocket toolkit
+*
+* The dgram.h module provides LuaSocket with support for DGRAM protocol
+* (AF_INET, SOCK_DGRAM).
+*
+* Two classes are defined: connected and unconnected. DGRAM objects are
+* originally unconnected. They can be "connected" to a given address
+* with a call to the setpeername function. The same function can be used to
+* break the connection.
+\*=========================================================================*/
+
+#include "unix.h"
+
+int unixdgram_open(lua_State *L);
+
+#endif /* UNIXDGRAM_H */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.c b/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.c
new file mode 100644
index 00000000000..0b9055ccbce
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.c
@@ -0,0 +1,357 @@
+/*=========================================================================*\
+* Unix domain socket stream sub module
+* LuaSocket toolkit
+\*=========================================================================*/
+#include <string.h>
+
+#include "lua.h"
+#include "lauxlib.h"
+#include "compat.h"
+
+#include "auxiliar.h"
+#include "socket.h"
+#include "options.h"
+#include "unixstream.h"
+#include <sys/un.h>
+
+/*=========================================================================*\
+* Internal function prototypes
+\*=========================================================================*/
+static int global_create(lua_State *L);
+static int meth_connect(lua_State *L);
+static int meth_listen(lua_State *L);
+static int meth_bind(lua_State *L);
+static int meth_send(lua_State *L);
+static int meth_shutdown(lua_State *L);
+static int meth_receive(lua_State *L);
+static int meth_accept(lua_State *L);
+static int meth_close(lua_State *L);
+static int meth_setoption(lua_State *L);
+static int meth_settimeout(lua_State *L);
+static int meth_getfd(lua_State *L);
+static int meth_setfd(lua_State *L);
+static int meth_dirty(lua_State *L);
+static int meth_getstats(lua_State *L);
+static int meth_setstats(lua_State *L);
+static int meth_getsockname(lua_State *L);
+
+static const char *unixstream_tryconnect(p_unix un, const char *path);
+static const char *unixstream_trybind(p_unix un, const char *path);
+
+/* unixstream object methods */
+static luaL_Reg unixstream_methods[] = {
+ {"__gc", meth_close},
+ {"__tostring", auxiliar_tostring},
+ {"accept", meth_accept},
+ {"bind", meth_bind},
+ {"close", meth_close},
+ {"connect", meth_connect},
+ {"dirty", meth_dirty},
+ {"getfd", meth_getfd},
+ {"getstats", meth_getstats},
+ {"setstats", meth_setstats},
+ {"listen", meth_listen},
+ {"receive", meth_receive},
+ {"send", meth_send},
+ {"setfd", meth_setfd},
+ {"setoption", meth_setoption},
+ {"setpeername", meth_connect},
+ {"setsockname", meth_bind},
+ {"getsockname", meth_getsockname},
+ {"settimeout", meth_settimeout},
+ {"shutdown", meth_shutdown},
+ {NULL, NULL}
+};
+
+/* socket option handlers */
+static t_opt optset[] = {
+ {"keepalive", opt_set_keepalive},
+ {"reuseaddr", opt_set_reuseaddr},
+ {"linger", opt_set_linger},
+ {NULL, NULL}
+};
+
+/* functions in library namespace */
+static luaL_Reg func[] = {
+ {"stream", global_create},
+ {NULL, NULL}
+};
+
+/*-------------------------------------------------------------------------*\
+* Initializes module
+\*-------------------------------------------------------------------------*/
+int unixstream_open(lua_State *L)
+{
+ /* create classes */
+ auxiliar_newclass(L, "unixstream{master}", unixstream_methods);
+ auxiliar_newclass(L, "unixstream{client}", unixstream_methods);
+ auxiliar_newclass(L, "unixstream{server}", unixstream_methods);
+
+ /* create class groups */
+ auxiliar_add2group(L, "unixstream{master}", "unixstream{any}");
+ auxiliar_add2group(L, "unixstream{client}", "unixstream{any}");
+ auxiliar_add2group(L, "unixstream{server}", "unixstream{any}");
+
+ luaL_setfuncs(L, func, 0);
+ return 0;
+}
+
+/*=========================================================================*\
+* Lua methods
+\*=========================================================================*/
+/*-------------------------------------------------------------------------*\
+* Just call buffered IO methods
+\*-------------------------------------------------------------------------*/
+static int meth_send(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{client}", 1);
+ return buffer_meth_send(L, &un->buf);
+}
+
+static int meth_receive(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{client}", 1);
+ return buffer_meth_receive(L, &un->buf);
+}
+
+static int meth_getstats(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{client}", 1);
+ return buffer_meth_getstats(L, &un->buf);
+}
+
+static int meth_setstats(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{client}", 1);
+ return buffer_meth_setstats(L, &un->buf);
+}
+
+/*-------------------------------------------------------------------------*\
+* Just call option handler
+\*-------------------------------------------------------------------------*/
+static int meth_setoption(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ return opt_meth_setoption(L, optset, &un->sock);
+}
+
+/*-------------------------------------------------------------------------*\
+* Select support methods
+\*-------------------------------------------------------------------------*/
+static int meth_getfd(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ lua_pushnumber(L, (int) un->sock);
+ return 1;
+}
+
+/* this is very dangerous, but can be handy for those that are brave enough */
+static int meth_setfd(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ un->sock = (t_socket) luaL_checknumber(L, 2);
+ return 0;
+}
+
+static int meth_dirty(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ lua_pushboolean(L, !buffer_isempty(&un->buf));
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Waits for and returns a client object attempting connection to the
+* server object
+\*-------------------------------------------------------------------------*/
+static int meth_accept(lua_State *L) {
+ p_unix server = (p_unix) auxiliar_checkclass(L, "unixstream{server}", 1);
+ p_timeout tm = timeout_markstart(&server->tm);
+ t_socket sock;
+ int err = socket_accept(&server->sock, &sock, NULL, NULL, tm);
+ /* if successful, push client socket */
+ if (err == IO_DONE) {
+ p_unix clnt = (p_unix) lua_newuserdata(L, sizeof(t_unix));
+ auxiliar_setclass(L, "unixstream{client}", -1);
+ /* initialize structure fields */
+ socket_setnonblocking(&sock);
+ clnt->sock = sock;
+ io_init(&clnt->io, (p_send)socket_send, (p_recv)socket_recv,
+ (p_error) socket_ioerror, &clnt->sock);
+ timeout_init(&clnt->tm, -1, -1);
+ buffer_init(&clnt->buf, &clnt->io, &clnt->tm);
+ return 1;
+ } else {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(err));
+ return 2;
+ }
+}
+
+/*-------------------------------------------------------------------------*\
+* Binds an object to an address
+\*-------------------------------------------------------------------------*/
+static const char *unixstream_trybind(p_unix un, const char *path) {
+ struct sockaddr_un local;
+ size_t len = strlen(path);
+ int err;
+ if (len >= sizeof(local.sun_path)) return "path too long";
+ memset(&local, 0, sizeof(local));
+ strcpy(local.sun_path, path);
+ local.sun_family = AF_UNIX;
+#ifdef UNIX_HAS_SUN_LEN
+ local.sun_len = sizeof(local.sun_family) + sizeof(local.sun_len)
+ + len + 1;
+ err = socket_bind(&un->sock, (SA *) &local, local.sun_len);
+
+#else
+ err = socket_bind(&un->sock, (SA *) &local,
+ sizeof(local.sun_family) + len);
+#endif
+ if (err != IO_DONE) socket_destroy(&un->sock);
+ return socket_strerror(err);
+}
+
+static int meth_bind(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{master}", 1);
+ const char *path = luaL_checkstring(L, 2);
+ const char *err = unixstream_trybind(un, path);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
+ }
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+static int meth_getsockname(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ struct sockaddr_un peer = {0};
+ socklen_t peer_len = sizeof(peer);
+
+ if (getsockname(un->sock, (SA *) &peer, &peer_len) < 0) {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(errno));
+ return 2;
+ }
+
+ lua_pushstring(L, peer.sun_path);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Turns a master unixstream object into a client object.
+\*-------------------------------------------------------------------------*/
+static const char *unixstream_tryconnect(p_unix un, const char *path)
+{
+ struct sockaddr_un remote;
+ int err;
+ size_t len = strlen(path);
+ if (len >= sizeof(remote.sun_path)) return "path too long";
+ memset(&remote, 0, sizeof(remote));
+ strcpy(remote.sun_path, path);
+ remote.sun_family = AF_UNIX;
+ timeout_markstart(&un->tm);
+#ifdef UNIX_HAS_SUN_LEN
+ remote.sun_len = sizeof(remote.sun_family) + sizeof(remote.sun_len)
+ + len + 1;
+ err = socket_connect(&un->sock, (SA *) &remote, remote.sun_len, &un->tm);
+#else
+ err = socket_connect(&un->sock, (SA *) &remote,
+ sizeof(remote.sun_family) + len, &un->tm);
+#endif
+ if (err != IO_DONE) socket_destroy(&un->sock);
+ return socket_strerror(err);
+}
+
+static int meth_connect(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{master}", 1);
+ const char *path = luaL_checkstring(L, 2);
+ const char *err = unixstream_tryconnect(un, path);
+ if (err) {
+ lua_pushnil(L);
+ lua_pushstring(L, err);
+ return 2;
+ }
+ /* turn master object into a client object */
+ auxiliar_setclass(L, "unixstream{client}", 1);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Closes socket used by object
+\*-------------------------------------------------------------------------*/
+static int meth_close(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ socket_destroy(&un->sock);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Puts the sockt in listen mode
+\*-------------------------------------------------------------------------*/
+static int meth_listen(lua_State *L)
+{
+ p_unix un = (p_unix) auxiliar_checkclass(L, "unixstream{master}", 1);
+ int backlog = (int) luaL_optnumber(L, 2, 32);
+ int err = socket_listen(&un->sock, backlog);
+ if (err != IO_DONE) {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(err));
+ return 2;
+ }
+ /* turn master object into a server object */
+ auxiliar_setclass(L, "unixstream{server}", 1);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Shuts the connection down partially
+\*-------------------------------------------------------------------------*/
+static int meth_shutdown(lua_State *L)
+{
+ /* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */
+ static const char* methods[] = { "receive", "send", "both", NULL };
+ p_unix stream = (p_unix) auxiliar_checkclass(L, "unixstream{client}", 1);
+ int how = luaL_checkoption(L, 2, "both", methods);
+ socket_shutdown(&stream->sock, how);
+ lua_pushnumber(L, 1);
+ return 1;
+}
+
+/*-------------------------------------------------------------------------*\
+* Just call tm methods
+\*-------------------------------------------------------------------------*/
+static int meth_settimeout(lua_State *L) {
+ p_unix un = (p_unix) auxiliar_checkgroup(L, "unixstream{any}", 1);
+ return timeout_meth_settimeout(L, &un->tm);
+}
+
+/*=========================================================================*\
+* Library functions
+\*=========================================================================*/
+/*-------------------------------------------------------------------------*\
+* Creates a master unixstream object
+\*-------------------------------------------------------------------------*/
+static int global_create(lua_State *L) {
+ t_socket sock;
+ int err = socket_create(&sock, AF_UNIX, SOCK_STREAM, 0);
+ /* try to allocate a system socket */
+ if (err == IO_DONE) {
+ /* allocate unixstream object */
+ p_unix un = (p_unix) lua_newuserdata(L, sizeof(t_unix));
+ /* set its type as master object */
+ auxiliar_setclass(L, "unixstream{master}", -1);
+ /* initialize remaining structure fields */
+ socket_setnonblocking(&sock);
+ un->sock = sock;
+ io_init(&un->io, (p_send) socket_send, (p_recv) socket_recv,
+ (p_error) socket_ioerror, &un->sock);
+ timeout_init(&un->tm, -1, -1);
+ buffer_init(&un->buf, &un->io, &un->tm);
+ return 1;
+ } else {
+ lua_pushnil(L);
+ lua_pushstring(L, socket_strerror(err));
+ return 2;
+ }
+}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.h b/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.h
new file mode 100644
index 00000000000..ef1d071ec76
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/unixstream.h
@@ -0,0 +1,21 @@
+#ifndef UNIXSTREAM_H
+#define UNIXSTREAM_H
+/*=========================================================================*\
+* UNIX STREAM object
+* LuaSocket toolkit
+*
+* The unixstream.h module is basicly a glue that puts together modules buffer.h,
+* timeout.h socket.h and inet.h to provide the LuaSocket UNIX STREAM (AF_UNIX,
+* SOCK_STREAM) support.
+*
+* Three classes are defined: master, client and server. The master class is
+* a newly created unixstream object, that has not been bound or connected. Server
+* objects are unixstream objects bound to some local address. Client objects are
+* unixstream objects either connected to some address or returned by the accept
+* method of a server object.
+\*=========================================================================*/
+#include "unix.h"
+
+int unixstream_open(lua_State *L);
+
+#endif /* UNIXSTREAM_H */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua b/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua
index 6ca6d684499..2dd90545cfd 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua
@@ -10,12 +10,15 @@
local string = require("string")
local base = _G
local table = require("table")
-module("socket.url")
+local socket = socket or require("socket")
+
+socket.url = {}
+local _M = socket.url
-----------------------------------------------------------------------------
-- Module version
-----------------------------------------------------------------------------
-_VERSION = "URL 1.0.2"
+_M._VERSION = "URL 1.0.3"
-----------------------------------------------------------------------------
-- Encodes a string into its escaped hexadecimal representation
@@ -24,7 +27,7 @@ _VERSION = "URL 1.0.2"
-- Returns
-- escaped representation of string binary
-----------------------------------------------------------------------------
-function escape(s)
+function _M.escape(s)
return (string.gsub(s, "([^A-Za-z0-9_])", function(c)
return string.format("%%%02x", string.byte(c))
end))
@@ -46,7 +49,7 @@ local function make_set(t)
return s
end
--- these are allowed withing a path segment, along with alphanum
+-- these are allowed within a path segment, along with alphanum
-- other characters must be escaped
local segment_set = make_set {
"-", "_", ".", "!", "~", "*", "'", "(",
@@ -56,18 +59,18 @@ local segment_set = make_set {
local function protect_segment(s)
return string.gsub(s, "([^A-Za-z0-9_])", function (c)
if segment_set[c] then return c
- else return string.format("%%%02x", string.byte(c)) end
+ else return string.format("%%%02X", string.byte(c)) end
end)
end
-----------------------------------------------------------------------------
--- Encodes a string into its escaped hexadecimal representation
+-- Unencodes a escaped hexadecimal string into its binary representation
-- Input
--- s: binary string to be encoded
+-- s: escaped hexadecimal string to be unencoded
-- Returns
--- escaped representation of string binary
+-- unescaped binary representation of escaped hexadecimal binary
-----------------------------------------------------------------------------
-function unescape(s)
+function _M.unescape(s)
return (string.gsub(s, "%%(%x%x)", function(hex)
return string.char(base.tonumber(hex, 16))
end))
@@ -120,7 +123,7 @@ end
-- Obs:
-- the leading '/' in {/<path>} is considered part of <path>
-----------------------------------------------------------------------------
-function parse(url, default)
+function _M.parse(url, default)
-- initialize default parameters
local parsed = {}
for i,v in base.pairs(default or parsed) do parsed[i] = v end
@@ -179,9 +182,10 @@ end
-- Returns
-- a stringing with the corresponding URL
-----------------------------------------------------------------------------
-function build(parsed)
- local ppath = parse_path(parsed.path or "")
- local url = build_path(ppath)
+function _M.build(parsed)
+ --local ppath = _M.parse_path(parsed.path or "")
+ --local url = _M.build_path(ppath)
+ local url = parsed.path or ""
if parsed.params then url = url .. ";" .. parsed.params end
if parsed.query then url = url .. "?" .. parsed.query end
local authority = parsed.authority
@@ -190,7 +194,7 @@ function build(parsed)
if string.find(authority, ":") then -- IPv6?
authority = "[" .. authority .. "]"
end
- if parsed.port then authority = authority .. ":" .. parsed.port end
+ if parsed.port then authority = authority .. ":" .. base.tostring(parsed.port) end
local userinfo = parsed.userinfo
if parsed.user then
userinfo = parsed.user
@@ -215,14 +219,15 @@ end
-- Returns
-- corresponding absolute url
-----------------------------------------------------------------------------
-function absolute(base_url, relative_url)
+function _M.absolute(base_url, relative_url)
+ local base_parsed
if base.type(base_url) == "table" then
base_parsed = base_url
- base_url = build(base_parsed)
+ base_url = _M.build(base_parsed)
else
- base_parsed = parse(base_url)
+ base_parsed = _M.parse(base_url)
end
- local relative_parsed = parse(relative_url)
+ local relative_parsed = _M.parse(relative_url)
if not base_parsed then return relative_url
elseif not relative_parsed then return base_url
elseif relative_parsed.scheme then return relative_url
@@ -243,7 +248,7 @@ function absolute(base_url, relative_url)
relative_parsed.path)
end
end
- return build(relative_parsed)
+ return _M.build(relative_parsed)
end
end
@@ -254,13 +259,13 @@ end
-- Returns
-- segment: a table with one entry per segment
-----------------------------------------------------------------------------
-function parse_path(path)
+function _M.parse_path(path)
local parsed = {}
path = path or ""
--path = string.gsub(path, "%s", "")
string.gsub(path, "([^/]+)", function (s) table.insert(parsed, s) end)
for i = 1, #parsed do
- parsed[i] = unescape(parsed[i])
+ parsed[i] = _M.unescape(parsed[i])
end
if string.sub(path, 1, 1) == "/" then parsed.is_absolute = 1 end
if string.sub(path, -1, -1) == "/" then parsed.is_directory = 1 end
@@ -275,7 +280,7 @@ end
-- Returns
-- path: corresponding path stringing
-----------------------------------------------------------------------------
-function build_path(parsed, unsafe)
+function _M.build_path(parsed, unsafe)
local path = ""
local n = #parsed
if unsafe then
@@ -300,3 +305,5 @@ function build_path(parsed, unsafe)
if parsed.is_absolute then path = "/" .. path end
return path
end
+
+return _M
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua_lua.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/url.lua_lua.c
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/url_lua.c b/Build/source/texk/web2c/luatexdir/luasocket/src/url_lua.c
index 803d365444e..372691b82d1 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/url_lua.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/url_lua.c
@@ -1,560 +1,554 @@
/*
- * This file is auto-generated by "lua2c url.lua url_lua"
- */
-
+ * This file is generated with xxd -i and bit of bash script.
+*/
#include "lua.h"
#include "lauxlib.h"
-
+
int luatex_url_lua_open (lua_State *L) {
static unsigned char B[] = {
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 85, 82, 73, 32,112, 97,114,115,105,110,103, 44, 32, 99,111,109,112,111,115,
-105,116,105,111,110, 32, 97,110,100, 32,114,101,108, 97,116,105,118,101, 32, 85,
- 82, 76, 32,114,101,115,111,108,117,116,105,111,110, 10, 45, 45, 32, 76,117, 97,
- 83,111, 99,107,101,116, 32,116,111,111,108,107,105,116, 46, 10, 45, 45, 32, 65,
-117,116,104,111,114, 58, 32, 68,105,101,103,111, 32, 78,101,104, 97, 98, 10, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 10, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 68,
-101, 99,108, 97,114,101, 32,109,111,100,117,108,101, 10, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108, 32,115,116,
-114,105,110,103, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,115,116,114,105,
-110,103, 34, 41, 10,108,111, 99, 97,108, 32, 98, 97,115,101, 32, 61, 32, 95, 71,
- 10,108,111, 99, 97,108, 32,116, 97, 98,108,101, 32, 61, 32,114,101,113,117,105,
-114,101, 40, 34,116, 97, 98,108,101, 34, 41, 10,109,111,100,117,108,101, 40, 34,
-115,111, 99,107,101,116, 46,117,114,108, 34, 41, 10, 10, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 77,111,100,117,108,
-101, 32,118,101,114,115,105,111,110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 10, 95, 86, 69, 82, 83, 73, 79, 78, 32, 61, 32, 34,
- 85, 82, 76, 32, 49, 46, 48, 46, 50, 34, 10, 10, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 69,110, 99,111,100,101,115,
- 32, 97, 32,115,116,114,105,110,103, 32,105,110,116,111, 32,105,116,115, 32,101,
-115, 99, 97,112,101,100, 32,104,101,120, 97,100,101, 99,105,109, 97,108, 32,114,
-101,112,114,101,115,101,110,116, 97,116,105,111,110, 10, 45, 45, 32, 73,110,112,
-117,116, 10, 45, 45, 32, 32, 32,115, 58, 32, 98,105,110, 97,114,121, 32,115,116,
-114,105,110,103, 32,116,111, 32, 98,101, 32,101,110, 99,111,100,101,100, 10, 45,
- 45, 32, 82,101,116,117,114,110,115, 10, 45, 45, 32, 32, 32,101,115, 99, 97,112,
-101,100, 32,114,101,112,114,101,115,101,110,116, 97,116,105,111,110, 32,111,102,
- 32,115,116,114,105,110,103, 32, 98,105,110, 97,114,121, 10, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,102,117,110, 99,116,105,111,
-110, 32,101,115, 99, 97,112,101, 40,115, 41, 10, 32, 32, 32, 32,114,101,116,117,
-114,110, 32, 40,115,116,114,105,110,103, 46,103,115,117, 98, 40,115, 44, 32, 34,
- 40, 91, 94, 65, 45, 90, 97, 45,122, 48, 45, 57, 95, 93, 41, 34, 44, 32,102,117,
-110, 99,116,105,111,110, 40, 99, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,
-116,117,114,110, 32,115,116,114,105,110,103, 46,102,111,114,109, 97,116, 40, 34,
- 37, 37, 37, 48, 50,120, 34, 44, 32,115,116,114,105,110,103, 46, 98,121,116,101,
- 40, 99, 41, 41, 10, 32, 32, 32, 32,101,110,100, 41, 41, 10,101,110,100, 10, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45,
- 32, 80,114,111,116,101, 99,116,115, 32, 97, 32,112, 97,116,104, 32,115,101,103,
-109,101,110,116, 44, 32,116,111, 32,112,114,101,118,101,110,116, 32,105,116, 32,
-102,114,111,109, 32,105,110,116,101,114,102,101,114,105,110,103, 32,119,105,116,
-104, 32,116,104,101, 10, 45, 45, 32,117,114,108, 32,112, 97,114,115,105,110,103,
- 46, 10, 45, 45, 32, 73,110,112,117,116, 10, 45, 45, 32, 32, 32,115, 58, 32, 98,
-105,110, 97,114,121, 32,115,116,114,105,110,103, 32,116,111, 32, 98,101, 32,101,
-110, 99,111,100,101,100, 10, 45, 45, 32, 82,101,116,117,114,110,115, 10, 45, 45,
- 32, 32, 32,101,115, 99, 97,112,101,100, 32,114,101,112,114,101,115,101,110,116,
- 97,116,105,111,110, 32,111,102, 32,115,116,114,105,110,103, 32, 98,105,110, 97,
-114,121, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,110, 32,109, 97,107,101,
- 95,115,101,116, 40,116, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,115, 32,
- 61, 32,123,125, 10, 32, 32, 32, 32,102,111,114, 32,105, 44,118, 32,105,110, 32,
- 98, 97,115,101, 46,105,112, 97,105,114,115, 40,116, 41, 32,100,111, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,115, 91,116, 91,105, 93, 93, 32, 61, 32, 49, 10, 32, 32,
- 32, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115, 10,101,
-110,100, 10, 10, 45, 45, 32,116,104,101,115,101, 32, 97,114,101, 32, 97,108,108,
-111,119,101,100, 32,119,105,116,104,105,110,103, 32, 97, 32,112, 97,116,104, 32,
-115,101,103,109,101,110,116, 44, 32, 97,108,111,110,103, 32,119,105,116,104, 32,
- 97,108,112,104, 97,110,117,109, 10, 45, 45, 32,111,116,104,101,114, 32, 99,104,
- 97,114, 97, 99,116,101,114,115, 32,109,117,115,116, 32, 98,101, 32,101,115, 99,
- 97,112,101,100, 10,108,111, 99, 97,108, 32,115,101,103,109,101,110,116, 95,115,
-101,116, 32, 61, 32,109, 97,107,101, 95,115,101,116, 32,123, 10, 32, 32, 32, 32,
- 34, 45, 34, 44, 32, 34, 95, 34, 44, 32, 34, 46, 34, 44, 32, 34, 33, 34, 44, 32,
- 34,126, 34, 44, 32, 34, 42, 34, 44, 32, 34, 39, 34, 44, 32, 34, 40, 34, 44, 10,
- 32, 32, 32, 32, 34, 41, 34, 44, 32, 34, 58, 34, 44, 32, 34, 64, 34, 44, 32, 34,
- 38, 34, 44, 32, 34, 61, 34, 44, 32, 34, 43, 34, 44, 32, 34, 36, 34, 44, 32, 34,
- 44, 34, 44, 10,125, 10, 10,108,111, 99, 97,108, 32,102,117,110, 99,116,105,111,
-110, 32,112,114,111,116,101, 99,116, 95,115,101,103,109,101,110,116, 40,115, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,115,116,114,105,110,103, 46,103,
-115,117, 98, 40,115, 44, 32, 34, 40, 91, 94, 65, 45, 90, 97, 45,122, 48, 45, 57,
- 95, 93, 41, 34, 44, 32,102,117,110, 99,116,105,111,110, 32, 40, 99, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,105,102, 32,115,101,103,109,101,110,116, 95,115,101,
-116, 91, 99, 93, 32,116,104,101,110, 32,114,101,116,117,114,110, 32, 99, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32,114,101,116,117,114,110, 32,115,
-116,114,105,110,103, 46,102,111,114,109, 97,116, 40, 34, 37, 37, 37, 48, 50,120,
- 34, 44, 32,115,116,114,105,110,103, 46, 98,121,116,101, 40, 99, 41, 41, 32,101,
-110,100, 10, 32, 32, 32, 32,101,110,100, 41, 10,101,110,100, 10, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 69,110,
- 99,111,100,101,115, 32, 97, 32,115,116,114,105,110,103, 32,105,110,116,111, 32,
-105,116,115, 32,101,115, 99, 97,112,101,100, 32,104,101,120, 97,100,101, 99,105,
-109, 97,108, 32,114,101,112,114,101,115,101,110,116, 97,116,105,111,110, 10, 45,
- 45, 32, 73,110,112,117,116, 10, 45, 45, 32, 32, 32,115, 58, 32, 98,105,110, 97,
-114,121, 32,115,116,114,105,110,103, 32,116,111, 32, 98,101, 32,101,110, 99,111,
-100,101,100, 10, 45, 45, 32, 82,101,116,117,114,110,115, 10, 45, 45, 32, 32, 32,
-101,115, 99, 97,112,101,100, 32,114,101,112,114,101,115,101,110,116, 97,116,105,
-111,110, 32,111,102, 32,115,116,114,105,110,103, 32, 98,105,110, 97,114,121, 10,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,102,117,
-110, 99,116,105,111,110, 32,117,110,101,115, 99, 97,112,101, 40,115, 41, 10, 32,
- 32, 32, 32,114,101,116,117,114,110, 32, 40,115,116,114,105,110,103, 46,103,115,
-117, 98, 40,115, 44, 32, 34, 37, 37, 40, 37,120, 37,120, 41, 34, 44, 32,102,117,
-110, 99,116,105,111,110, 40,104,101,120, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,115,116,114,105,110,103, 46, 99,104, 97,114, 40, 98,
- 97,115,101, 46,116,111,110,117,109, 98,101,114, 40,104,101,120, 44, 32, 49, 54,
- 41, 41, 10, 32, 32, 32, 32,101,110,100, 41, 41, 10,101,110,100, 10, 10, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 66,
-117,105,108,100,115, 32, 97, 32,112, 97,116,104, 32,102,114,111,109, 32, 97, 32,
- 98, 97,115,101, 32,112, 97,116,104, 32, 97,110,100, 32, 97, 32,114,101,108, 97,
-116,105,118,101, 32,112, 97,116,104, 10, 45, 45, 32, 73,110,112,117,116, 10, 45,
- 45, 32, 32, 32, 98, 97,115,101, 95,112, 97,116,104, 10, 45, 45, 32, 32, 32,114,
-101,108, 97,116,105,118,101, 95,112, 97,116,104, 10, 45, 45, 32, 82,101,116,117,
-114,110,115, 10, 45, 45, 32, 32, 32, 99,111,114,114,101,115,112,111,110,100,105,
-110,103, 32, 97, 98,115,111,108,117,116,101, 32,112, 97,116,104, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,108,111, 99, 97,108,
- 32,102,117,110, 99,116,105,111,110, 32, 97, 98,115,111,108,117,116,101, 95,112,
- 97,116,104, 40, 98, 97,115,101, 95,112, 97,116,104, 44, 32,114,101,108, 97,116,
-105,118,101, 95,112, 97,116,104, 41, 10, 32, 32, 32, 32,105,102, 32,115,116,114,
-105,110,103, 46,115,117, 98, 40,114,101,108, 97,116,105,118,101, 95,112, 97,116,
-104, 44, 32, 49, 44, 32, 49, 41, 32, 61, 61, 32, 34, 47, 34, 32,116,104,101,110,
- 32,114,101,116,117,114,110, 32,114,101,108, 97,116,105,118,101, 95,112, 97,116,
-104, 32,101,110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112, 97,116,104,
- 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40, 98, 97,115,101, 95,
-112, 97,116,104, 44, 32, 34, 91, 94, 47, 93, 42, 36, 34, 44, 32, 34, 34, 41, 10,
- 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104, 32, 46, 46, 32,114,
-101,108, 97,116,105,118,101, 95,112, 97,116,104, 10, 32, 32, 32, 32,112, 97,116,
-104, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,112, 97,116,104,
- 44, 32, 34, 40, 91, 94, 47, 93, 42, 37, 46, 47, 41, 34, 44, 32,102,117,110, 99,
-116,105,111,110, 32, 40,115, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,
-115, 32,126, 61, 32, 34, 46, 47, 34, 32,116,104,101,110, 32,114,101,116,117,114,
-110, 32,115, 32,101,108,115,101, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,
-110,100, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32, 32, 32, 32,112, 97,116,104,
- 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,112, 97,116,104, 44,
- 32, 34, 47, 37, 46, 36, 34, 44, 32, 34, 47, 34, 41, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32,114,101,100,117, 99,101,100, 10, 32, 32, 32, 32,119,104,105,108,
-101, 32,114,101,100,117, 99,101,100, 32,126, 61, 32,112, 97,116,104, 32,100,111,
- 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,100,117, 99,101,100, 32, 61, 32,112,
- 97,116,104, 10, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,115,
-116,114,105,110,103, 46,103,115,117, 98, 40,114,101,100,117, 99,101,100, 44, 32,
- 34, 40, 91, 94, 47, 93, 42, 47, 37, 46, 37, 46, 47, 41, 34, 44, 32,102,117,110,
- 99,116,105,111,110, 32, 40,115, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,105,102, 32,115, 32,126, 61, 32, 34, 46, 46, 47, 46, 46, 47, 34, 32,116,
-104,101,110, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,108,115,101, 32,114,
-101,116,117,114,110, 32,115, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,112, 97,116,
-104, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,114,101,100,117,
- 99,101,100, 44, 32, 34, 40, 91, 94, 47, 93, 42, 47, 37, 46, 37, 46, 41, 36, 34,
- 44, 32,102,117,110, 99,116,105,111,110, 32, 40,115, 41, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,105,102, 32,115, 32,126, 61, 32, 34, 46, 46, 47, 46, 46, 34, 32,116,
-104,101,110, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,108,115,101, 32,114,
-101,116,117,114,110, 32,115, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 41,
- 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,112, 97,116,104, 10,101,110,100,
- 10, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,
- 45, 45, 32, 80, 97,114,115,101,115, 32, 97, 32,117,114,108, 32, 97,110,100, 32,
-114,101,116,117,114,110,115, 32, 97, 32,116, 97, 98,108,101, 32,119,105,116,104,
- 32, 97,108,108, 32,105,116,115, 32,112, 97,114,116,115, 32, 97, 99, 99,111,114,
-100,105,110,103, 32,116,111, 32, 82, 70, 67, 32, 50, 51, 57, 54, 10, 45, 45, 32,
- 84,104,101, 32,102,111,108,108,111,119,105,110,103, 32,103,114, 97,109,109, 97,
-114, 32,100,101,115, 99,114,105, 98,101,115, 32,116,104,101, 32,110, 97,109,101,
-115, 32,103,105,118,101,110, 32,116,111, 32,116,104,101, 32, 85, 82, 76, 32,112,
- 97,114,116,115, 10, 45, 45, 32, 60,117,114,108, 62, 32, 58, 58, 61, 32, 60,115,
- 99,104,101,109,101, 62, 58, 47, 47, 60, 97,117,116,104,111,114,105,116,121, 62,
- 47, 60,112, 97,116,104, 62, 59, 60,112, 97,114, 97,109,115, 62, 63, 60,113,117,
-101,114,121, 62, 35, 60,102,114, 97,103,109,101,110,116, 62, 10, 45, 45, 32, 60,
- 97,117,116,104,111,114,105,116,121, 62, 32, 58, 58, 61, 32, 60,117,115,101,114,
-105,110,102,111, 62, 64, 60,104,111,115,116, 62, 58, 60,112,111,114,116, 62, 10,
- 45, 45, 32, 60,117,115,101,114,105,110,102,111, 62, 32, 58, 58, 61, 32, 60,117,
-115,101,114, 62, 91, 58, 60,112, 97,115,115,119,111,114,100, 62, 93, 10, 45, 45,
- 32, 60,112, 97,116,104, 62, 32, 58, 58, 32, 61, 32,123, 60,115,101,103,109,101,
-110,116, 62, 47,125, 60,115,101,103,109,101,110,116, 62, 10, 45, 45, 32, 73,110,
-112,117,116, 10, 45, 45, 32, 32, 32,117,114,108, 58, 32,117,110,105,102,111,114,
-109, 32,114,101,115,111,117,114, 99,101, 32,108,111, 99, 97,116,111,114, 32,111,
-102, 32,114,101,113,117,101,115,116, 10, 45, 45, 32, 32, 32,100,101,102, 97,117,
-108,116, 58, 32,116, 97, 98,108,101, 32,119,105,116,104, 32,100,101,102, 97,117,
-108,116, 32,118, 97,108,117,101,115, 32,102,111,114, 32,101, 97, 99,104, 32,102,
-105,101,108,100, 10, 45, 45, 32, 82,101,116,117,114,110,115, 10, 45, 45, 32, 32,
- 32,116, 97, 98,108,101, 32,119,105,116,104, 32,116,104,101, 32,102,111,108,108,
-111,119,105,110,103, 32,102,105,101,108,100,115, 44, 32,119,104,101,114,101, 32,
- 82, 70, 67, 32,110, 97,109,105,110,103, 32, 99,111,110,118,101,110,116,105,111,
-110,115, 32,104, 97,118,101, 10, 45, 45, 32, 32, 32, 98,101,101,110, 32,112,114,
-101,115,101,114,118,101,100, 58, 10, 45, 45, 32, 32, 32, 32, 32,115, 99,104,101,
-109,101, 44, 32, 97,117,116,104,111,114,105,116,121, 44, 32,117,115,101,114,105,
-110,102,111, 44, 32,117,115,101,114, 44, 32,112, 97,115,115,119,111,114,100, 44,
- 32,104,111,115,116, 44, 32,112,111,114,116, 44, 10, 45, 45, 32, 32, 32, 32, 32,
-112, 97,116,104, 44, 32,112, 97,114, 97,109,115, 44, 32,113,117,101,114,121, 44,
- 32,102,114, 97,103,109,101,110,116, 10, 45, 45, 32, 79, 98,115, 58, 10, 45, 45,
- 32, 32, 32,116,104,101, 32,108,101, 97,100,105,110,103, 32, 39, 47, 39, 32,105,
-110, 32,123, 47, 60,112, 97,116,104, 62,125, 32,105,115, 32, 99,111,110,115,105,
-100,101,114,101,100, 32,112, 97,114,116, 32,111,102, 32, 60,112, 97,116,104, 62,
- 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,102,
-117,110, 99,116,105,111,110, 32,112, 97,114,115,101, 40,117,114,108, 44, 32,100,
-101,102, 97,117,108,116, 41, 10, 32, 32, 32, 32, 45, 45, 32,105,110,105,116,105,
- 97,108,105,122,101, 32,100,101,102, 97,117,108,116, 32,112, 97,114, 97,109,101,
-116,101,114,115, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112, 97,114,115,101,
-100, 32, 61, 32,123,125, 10, 32, 32, 32, 32,102,111,114, 32,105, 44,118, 32,105,
-110, 32, 98, 97,115,101, 46,112, 97,105,114,115, 40,100,101,102, 97,117,108,116,
- 32,111,114, 32,112, 97,114,115,101,100, 41, 32,100,111, 32,112, 97,114,115,101,
-100, 91,105, 93, 32, 61, 32,118, 32,101,110,100, 10, 32, 32, 32, 32, 45, 45, 32,
-101,109,112,116,121, 32,117,114,108, 32,105,115, 32,112, 97,114,115,101,100, 32,
-116,111, 32,110,105,108, 10, 32, 32, 32, 32,105,102, 32,110,111,116, 32,117,114,
-108, 32,111,114, 32,117,114,108, 32, 61, 61, 32, 34, 34, 32,116,104,101,110, 32,
-114,101,116,117,114,110, 32,110,105,108, 44, 32, 34,105,110,118, 97,108,105,100,
- 32,117,114,108, 34, 32,101,110,100, 10, 32, 32, 32, 32, 45, 45, 32,114,101,109,
-111,118,101, 32,119,104,105,116,101,115,112, 97, 99,101, 10, 32, 32, 32, 32, 45,
- 45, 32,117,114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,
-117,114,108, 44, 32, 34, 37,115, 34, 44, 32, 34, 34, 41, 10, 32, 32, 32, 32, 45,
- 45, 32,103,101,116, 32,102,114, 97,103,109,101,110,116, 10, 32, 32, 32, 32,117,
-114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,117,114,108,
- 44, 32, 34, 35, 40, 46, 42, 41, 36, 34, 44, 32,102,117,110, 99,116,105,111,110,
- 40,102, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,114,115,101,100, 46,102,
-114, 97,103,109,101,110,116, 32, 61, 32,102, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-114,101,116,117,114,110, 32, 34, 34, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32,
- 32, 32, 32, 45, 45, 32,103,101,116, 32,115, 99,104,101,109,101, 10, 32, 32, 32,
- 32,117,114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,117,
-114,108, 44, 32, 34, 94, 40, 91, 37,119, 93, 91, 37,119, 37, 43, 37, 45, 37, 46,
- 93, 42, 41, 37, 58, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,117,110, 99,
-116,105,111,110, 40,115, 41, 32,112, 97,114,115,101,100, 46,115, 99,104,101,109,
-101, 32, 61, 32,115, 59, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,110,100,
- 41, 10, 32, 32, 32, 32, 45, 45, 32,103,101,116, 32, 97,117,116,104,111,114,105,
-116,121, 10, 32, 32, 32, 32,117,114,108, 32, 61, 32,115,116,114,105,110,103, 46,
-103,115,117, 98, 40,117,114,108, 44, 32, 34, 94, 47, 47, 40, 91, 94, 47, 93, 42,
- 41, 34, 44, 32,102,117,110, 99,116,105,111,110, 40,110, 41, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,112, 97,114,115,101,100, 46, 97,117,116,104,111,114,105,116,121,
- 32, 61, 32,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,110, 32,
- 34, 34, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32, 32, 32, 32, 45, 45, 32,103,
-101,116, 32,113,117,101,114,121, 32,115,116,114,105,110,103, 10, 32, 32, 32, 32,
-117,114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,117,114,
-108, 44, 32, 34, 37, 63, 40, 46, 42, 41, 34, 44, 32,102,117,110, 99,116,105,111,
-110, 40,113, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,114,115,101,100, 46,
-113,117,101,114,121, 32, 61, 32,113, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,
-116,117,114,110, 32, 34, 34, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32, 32, 32,
- 32, 45, 45, 32,103,101,116, 32,112, 97,114, 97,109,115, 10, 32, 32, 32, 32,117,
-114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,117,114,108,
- 44, 32, 34, 37, 59, 40, 46, 42, 41, 34, 44, 32,102,117,110, 99,116,105,111,110,
- 40,112, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,114,115,101,100, 46,112,
- 97,114, 97,109,115, 32, 61, 32,112, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,
-116,117,114,110, 32, 34, 34, 10, 32, 32, 32, 32,101,110,100, 41, 10, 32, 32, 32,
- 32, 45, 45, 32,112, 97,116,104, 32,105,115, 32,119,104, 97,116,101,118,101,114,
- 32,119, 97,115, 32,108,101,102,116, 10, 32, 32, 32, 32,105,102, 32,117,114,108,
- 32,126, 61, 32, 34, 34, 32,116,104,101,110, 32,112, 97,114,115,101,100, 46,112,
- 97,116,104, 32, 61, 32,117,114,108, 32,101,110,100, 10, 32, 32, 32, 32,108,111,
- 99, 97,108, 32, 97,117,116,104,111,114,105,116,121, 32, 61, 32,112, 97,114,115,
-101,100, 46, 97,117,116,104,111,114,105,116,121, 10, 32, 32, 32, 32,105,102, 32,
-110,111,116, 32, 97,117,116,104,111,114,105,116,121, 32,116,104,101,110, 32,114,
-101,116,117,114,110, 32,112, 97,114,115,101,100, 32,101,110,100, 10, 32, 32, 32,
- 32, 97,117,116,104,111,114,105,116,121, 32, 61, 32,115,116,114,105,110,103, 46,
-103,115,117, 98, 40, 97,117,116,104,111,114,105,116,121, 44, 34, 94, 40, 91, 94,
- 64, 93, 42, 41, 64, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,117,110, 99,
-116,105,111,110, 40,117, 41, 32,112, 97,114,115,101,100, 46,117,115,101,114,105,
-110,102,111, 32, 61, 32,117, 59, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,
-110,100, 41, 10, 32, 32, 32, 32, 97,117,116,104,111,114,105,116,121, 32, 61, 32,
-115,116,114,105,110,103, 46,103,115,117, 98, 40, 97,117,116,104,111,114,105,116,
-121, 44, 32, 34, 58, 40, 91, 94, 58, 37, 93, 93, 42, 41, 36, 34, 44, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,102,117,110, 99,116,105,111,110, 40,112, 41, 32,112, 97,
-114,115,101,100, 46,112,111,114,116, 32, 61, 32,112, 59, 32,114,101,116,117,114,
-110, 32, 34, 34, 32,101,110,100, 41, 10, 32, 32, 32, 32,105,102, 32, 97,117,116,
-104,111,114,105,116,121, 32,126, 61, 32, 34, 34, 32,116,104,101,110, 32, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 45, 45, 32, 73, 80,118, 54, 63, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,112, 97,114,115,101,100, 46,104,111,115,116, 32, 61, 32,115,116,
-114,105,110,103, 46,109, 97,116, 99,104, 40, 97,117,116,104,111,114,105,116,121,
- 44, 32, 34, 94, 37, 91, 40, 46, 43, 41, 37, 93, 36, 34, 41, 32,111,114, 32, 97,
-117,116,104,111,114,105,116,121, 32, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32,
- 32, 32,108,111, 99, 97,108, 32,117,115,101,114,105,110,102,111, 32, 61, 32,112,
- 97,114,115,101,100, 46,117,115,101,114,105,110,102,111, 10, 32, 32, 32, 32,105,
-102, 32,110,111,116, 32,117,115,101,114,105,110,102,111, 32,116,104,101,110, 32,
-114,101,116,117,114,110, 32,112, 97,114,115,101,100, 32,101,110,100, 10, 32, 32,
- 32, 32,117,115,101,114,105,110,102,111, 32, 61, 32,115,116,114,105,110,103, 46,
-103,115,117, 98, 40,117,115,101,114,105,110,102,111, 44, 32, 34, 58, 40, 91, 94,
- 58, 93, 42, 41, 36, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,117,110, 99,
-116,105,111,110, 40,112, 41, 32,112, 97,114,115,101,100, 46,112, 97,115,115,119,
-111,114,100, 32, 61, 32,112, 59, 32,114,101,116,117,114,110, 32, 34, 34, 32,101,
-110,100, 41, 10, 32, 32, 32, 32,112, 97,114,115,101,100, 46,117,115,101,114, 32,
- 61, 32,117,115,101,114,105,110,102,111, 10, 32, 32, 32, 32,114,101,116,117,114,
-110, 32,112, 97,114,115,101,100, 10,101,110,100, 10, 10, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 82,101, 98,117,105,
-108,100,115, 32, 97, 32,112, 97,114,115,101,100, 32, 85, 82, 76, 32,102,114,111,
-109, 32,105,116,115, 32, 99,111,109,112,111,110,101,110,116,115, 46, 10, 45, 45,
- 32, 67,111,109,112,111,110,101,110,116,115, 32, 97,114,101, 32,112,114,111,116,
-101, 99,116,101,100, 32,105,102, 32, 97,110,121, 32,114,101,115,101,114,118,101,
-100, 32,111,114, 32,117,110, 97,108,108,111,119,101,100, 32, 99,104, 97,114, 97,
- 99,116,101,114,115, 32, 97,114,101, 32,102,111,117,110,100, 10, 45, 45, 32, 73,
-110,112,117,116, 10, 45, 45, 32, 32, 32,112, 97,114,115,101,100, 58, 32,112, 97,
-114,115,101,100, 32, 85, 82, 76, 44, 32, 97,115, 32,114,101,116,117,114,110,101,
-100, 32, 98,121, 32,112, 97,114,115,101, 10, 45, 45, 32, 82,101,116,117,114,110,
-115, 10, 45, 45, 32, 32, 32, 97, 32,115,116,114,105,110,103,105,110,103, 32,119,
-105,116,104, 32,116,104,101, 32, 99,111,114,114,101,115,112,111,110,100,105,110,
-103, 32, 85, 82, 76, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 10,102,117,110, 99,116,105,111,110, 32, 98,117,105,108,100, 40,112,
- 97,114,115,101,100, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112,112, 97,
-116,104, 32, 61, 32,112, 97,114,115,101, 95,112, 97,116,104, 40,112, 97,114,115,
-101,100, 46,112, 97,116,104, 32,111,114, 32, 34, 34, 41, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32,117,114,108, 32, 61, 32, 98,117,105,108,100, 95,112, 97,116,
-104, 40,112,112, 97,116,104, 41, 10, 32, 32, 32, 32,105,102, 32,112, 97,114,115,
-101,100, 46,112, 97,114, 97,109,115, 32,116,104,101,110, 32,117,114,108, 32, 61,
- 32,117,114,108, 32, 46, 46, 32, 34, 59, 34, 32, 46, 46, 32,112, 97,114,115,101,
-100, 46,112, 97,114, 97,109,115, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,
-112, 97,114,115,101,100, 46,113,117,101,114,121, 32,116,104,101,110, 32,117,114,
-108, 32, 61, 32,117,114,108, 32, 46, 46, 32, 34, 63, 34, 32, 46, 46, 32,112, 97,
-114,115,101,100, 46,113,117,101,114,121, 32,101,110,100, 10, 32, 32, 32, 32,108,
-111, 99, 97,108, 32, 97,117,116,104,111,114,105,116,121, 32, 61, 32,112, 97,114,
-115,101,100, 46, 97,117,116,104,111,114,105,116,121, 10, 32, 32, 32, 32,105,102,
- 32,112, 97,114,115,101,100, 46,104,111,115,116, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 97,117,116,104,111,114,105,116,121, 32, 61, 32,112, 97,
-114,115,101,100, 46,104,111,115,116, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102,
- 32,115,116,114,105,110,103, 46,102,105,110,100, 40, 97,117,116,104,111,114,105,
-116,121, 44, 32, 34, 58, 34, 41, 32,116,104,101,110, 32, 45, 45, 32, 73, 80,118,
- 54, 63, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,117,116,104,111,
-114,105,116,121, 32, 61, 32, 34, 91, 34, 32, 46, 46, 32, 97,117,116,104,111,114,
-105,116,121, 32, 46, 46, 32, 34, 93, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,
-110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,112, 97,114,115,101,100,
- 46,112,111,114,116, 32,116,104,101,110, 32, 97,117,116,104,111,114,105,116,121,
- 32, 61, 32, 97,117,116,104,111,114,105,116,121, 32, 46, 46, 32, 34, 58, 34, 32,
- 46, 46, 32,112, 97,114,115,101,100, 46,112,111,114,116, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,108,111, 99, 97,108, 32,117,115,101,114,105,110,102,
-111, 32, 61, 32,112, 97,114,115,101,100, 46,117,115,101,114,105,110,102,111, 10,
- 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,112, 97,114,115,101,100, 46,117,115,
-101,114, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-117,115,101,114,105,110,102,111, 32, 61, 32,112, 97,114,115,101,100, 46,117,115,
-101,114, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,112, 97,
-114,115,101,100, 46,112, 97,115,115,119,111,114,100, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,117,115,101,114,105,
-110,102,111, 32, 61, 32,117,115,101,114,105,110,102,111, 32, 46, 46, 32, 34, 58,
- 34, 32, 46, 46, 32,112, 97,114,115,101,100, 46,112, 97,115,115,119,111,114,100,
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32,
- 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,
-117,115,101,114,105,110,102,111, 32,116,104,101,110, 32, 97,117,116,104,111,114,
-105,116,121, 32, 61, 32,117,115,101,114,105,110,102,111, 32, 46, 46, 32, 34, 64,
- 34, 32, 46, 46, 32, 97,117,116,104,111,114,105,116,121, 32,101,110,100, 10, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32, 97,117,116,104,111,114,
-105,116,121, 32,116,104,101,110, 32,117,114,108, 32, 61, 32, 34, 47, 47, 34, 32,
- 46, 46, 32, 97,117,116,104,111,114,105,116,121, 32, 46, 46, 32,117,114,108, 32,
-101,110,100, 10, 32, 32, 32, 32,105,102, 32,112, 97,114,115,101,100, 46,115, 99,
-104,101,109,101, 32,116,104,101,110, 32,117,114,108, 32, 61, 32,112, 97,114,115,
-101,100, 46,115, 99,104,101,109,101, 32, 46, 46, 32, 34, 58, 34, 32, 46, 46, 32,
-117,114,108, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,112, 97,114,115,101,
-100, 46,102,114, 97,103,109,101,110,116, 32,116,104,101,110, 32,117,114,108, 32,
- 61, 32,117,114,108, 32, 46, 46, 32, 34, 35, 34, 32, 46, 46, 32,112, 97,114,115,
-101,100, 46,102,114, 97,103,109,101,110,116, 32,101,110,100, 10, 32, 32, 32, 32,
- 45, 45, 32,117,114,108, 32, 61, 32,115,116,114,105,110,103, 46,103,115,117, 98,
- 40,117,114,108, 44, 32, 34, 37,115, 34, 44, 32, 34, 34, 41, 10, 32, 32, 32, 32,
-114,101,116,117,114,110, 32,117,114,108, 10,101,110,100, 10, 10, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 66,117,105,
-108,100,115, 32, 97, 32, 97, 98,115,111,108,117,116,101, 32, 85, 82, 76, 32,102,
-114,111,109, 32, 97, 32, 98, 97,115,101, 32, 97,110,100, 32, 97, 32,114,101,108,
- 97,116,105,118,101, 32, 85, 82, 76, 32, 97, 99, 99,111,114,100,105,110,103, 32,
-116,111, 32, 82, 70, 67, 32, 50, 51, 57, 54, 10, 45, 45, 32, 73,110,112,117,116,
- 10, 45, 45, 32, 32, 32, 98, 97,115,101, 95,117,114,108, 10, 45, 45, 32, 32, 32,
-114,101,108, 97,116,105,118,101, 95,117,114,108, 10, 45, 45, 32, 82,101,116,117,
-114,110,115, 10, 45, 45, 32, 32, 32, 99,111,114,114,101,115,112,111,110,100,105,
-110,103, 32, 97, 98,115,111,108,117,116,101, 32,117,114,108, 10, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,102,117,110, 99,116,105,
-111,110, 32, 97, 98,115,111,108,117,116,101, 40, 98, 97,115,101, 95,117,114,108,
- 44, 32,114,101,108, 97,116,105,118,101, 95,117,114,108, 41, 10, 32, 32, 32, 32,
-105,102, 32, 98, 97,115,101, 46,116,121,112,101, 40, 98, 97,115,101, 95,117,114,
-108, 41, 32, 61, 61, 32, 34,116, 97, 98,108,101, 34, 32,116,104,101,110, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 98, 97,115,101, 95,112, 97,114,115,101,100, 32, 61,
- 32, 98, 97,115,101, 95,117,114,108, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 97,
-115,101, 95,117,114,108, 32, 61, 32, 98,117,105,108,100, 40, 98, 97,115,101, 95,
-112, 97,114,115,101,100, 41, 10, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 98, 97,115,101, 95,112, 97,114,115,101,100, 32, 61, 32,112,
- 97,114,115,101, 40, 98, 97,115,101, 95,117,114,108, 41, 10, 32, 32, 32, 32,101,
-110,100, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,114,101,108, 97,116,105,118,
-101, 95,112, 97,114,115,101,100, 32, 61, 32,112, 97,114,115,101, 40,114,101,108,
- 97,116,105,118,101, 95,117,114,108, 41, 10, 32, 32, 32, 32,105,102, 32,110,111,
-116, 32, 98, 97,115,101, 95,112, 97,114,115,101,100, 32,116,104,101,110, 32,114,
-101,116,117,114,110, 32,114,101,108, 97,116,105,118,101, 95,117,114,108, 10, 32,
- 32, 32, 32,101,108,115,101,105,102, 32,110,111,116, 32,114,101,108, 97,116,105,
-118,101, 95,112, 97,114,115,101,100, 32,116,104,101,110, 32,114,101,116,117,114,
-110, 32, 98, 97,115,101, 95,117,114,108, 10, 32, 32, 32, 32,101,108,115,101,105,
-102, 32,114,101,108, 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,115, 99,
-104,101,109,101, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,114,101,108,
- 97,116,105,118,101, 95,117,114,108, 10, 32, 32, 32, 32,101,108,115,101, 10, 32,
- 32, 32, 32, 32, 32, 32, 32,114,101,108, 97,116,105,118,101, 95,112, 97,114,115,
-101,100, 46,115, 99,104,101,109,101, 32, 61, 32, 98, 97,115,101, 95,112, 97,114,
-115,101,100, 46,115, 99,104,101,109,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,
-102, 32,110,111,116, 32,114,101,108, 97,116,105,118,101, 95,112, 97,114,115,101,
-100, 46, 97,117,116,104,111,114,105,116,121, 32,116,104,101,110, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,108, 97,116,105,118,101, 95,112, 97,
-114,115,101,100, 46, 97,117,116,104,111,114,105,116,121, 32, 61, 32, 98, 97,115,
-101, 95,112, 97,114,115,101,100, 46, 97,117,116,104,111,114,105,116,121, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,116, 32,114,101,
-108, 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,112, 97,116,104, 32,116,
-104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
-114,101,108, 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,112, 97,116,104,
- 32, 61, 32, 98, 97,115,101, 95,112, 97,114,115,101,100, 46,112, 97,116,104, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,
-111,116, 32,114,101,108, 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,112,
- 97,114, 97,109,115, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,108, 97,116,105,118,101, 95,
-112, 97,114,115,101,100, 46,112, 97,114, 97,109,115, 32, 61, 32, 98, 97,115,101,
- 95,112, 97,114,115,101,100, 46,112, 97,114, 97,109,115, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,105,102, 32,110,111,
-116, 32,114,101,108, 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,113,117,
-101,114,121, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,108, 97,116,105,118,
-101, 95,112, 97,114,115,101,100, 46,113,117,101,114,121, 32, 61, 32, 98, 97,115,
-101, 95,112, 97,114,115,101,100, 46,113,117,101,114,121, 10, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,108,115,101, 32, 32, 32, 32, 10,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,108, 97,
-116,105,118,101, 95,112, 97,114,115,101,100, 46,112, 97,116,104, 32, 61, 32, 97,
- 98,115,111,108,117,116,101, 95,112, 97,116,104, 40, 98, 97,115,101, 95,112, 97,
-114,115,101,100, 46,112, 97,116,104, 32,111,114, 32, 34, 34, 44, 10, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,114,101,108,
- 97,116,105,118,101, 95,112, 97,114,115,101,100, 46,112, 97,116,104, 41, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,116,117,114,
-110, 32, 98,117,105,108,100, 40,114,101,108, 97,116,105,118,101, 95,112, 97,114,
-115,101,100, 41, 10, 32, 32, 32, 32,101,110,100, 10,101,110,100, 10, 10, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 66,
-114,101, 97,107,115, 32, 97, 32,112, 97,116,104, 32,105,110,116,111, 32,105,116,
-115, 32,115,101,103,109,101,110,116,115, 44, 32,117,110,101,115, 99, 97,112,105,
-110,103, 32,116,104,101, 32,115,101,103,109,101,110,116,115, 10, 45, 45, 32, 73,
-110,112,117,116, 10, 45, 45, 32, 32, 32,112, 97,116,104, 10, 45, 45, 32, 82,101,
-116,117,114,110,115, 10, 45, 45, 32, 32, 32,115,101,103,109,101,110,116, 58, 32,
- 97, 32,116, 97, 98,108,101, 32,119,105,116,104, 32,111,110,101, 32,101,110,116,
-114,121, 32,112,101,114, 32,115,101,103,109,101,110,116, 10, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10,102,117,110, 99,116,105,111,
-110, 32,112, 97,114,115,101, 95,112, 97,116,104, 40,112, 97,116,104, 41, 10, 32,
- 32, 32, 32,108,111, 99, 97,108, 32,112, 97,114,115,101,100, 32, 61, 32,123,125,
- 10, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104, 32,111,114, 32,
- 34, 34, 10, 32, 32, 32, 32, 45, 45,112, 97,116,104, 32, 61, 32,115,116,114,105,
-110,103, 46,103,115,117, 98, 40,112, 97,116,104, 44, 32, 34, 37,115, 34, 44, 32,
- 34, 34, 41, 10, 32, 32, 32, 32,115,116,114,105,110,103, 46,103,115,117, 98, 40,
-112, 97,116,104, 44, 32, 34, 40, 91, 94, 47, 93, 43, 41, 34, 44, 32,102,117,110,
- 99,116,105,111,110, 32, 40,115, 41, 32,116, 97, 98,108,101, 46,105,110,115,101,
-114,116, 40,112, 97,114,115,101,100, 44, 32,115, 41, 32,101,110,100, 41, 10, 32,
- 32, 32, 32,102,111,114, 32,105, 32, 61, 32, 49, 44, 32, 35,112, 97,114,115,101,
-100, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,114,115,101,100, 91,
-105, 93, 32, 61, 32,117,110,101,115, 99, 97,112,101, 40,112, 97,114,115,101,100,
- 91,105, 93, 41, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,105,102, 32,
-115,116,114,105,110,103, 46,115,117, 98, 40,112, 97,116,104, 44, 32, 49, 44, 32,
- 49, 41, 32, 61, 61, 32, 34, 47, 34, 32,116,104,101,110, 32,112, 97,114,115,101,
-100, 46,105,115, 95, 97, 98,115,111,108,117,116,101, 32, 61, 32, 49, 32,101,110,
-100, 10, 32, 32, 32, 32,105,102, 32,115,116,114,105,110,103, 46,115,117, 98, 40,
-112, 97,116,104, 44, 32, 45, 49, 44, 32, 45, 49, 41, 32, 61, 61, 32, 34, 47, 34,
- 32,116,104,101,110, 32,112, 97,114,115,101,100, 46,105,115, 95,100,105,114,101,
- 99,116,111,114,121, 32, 61, 32, 49, 32,101,110,100, 10, 32, 32, 32, 32,114,101,
-116,117,114,110, 32,112, 97,114,115,101,100, 10,101,110,100, 10, 10, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 10, 45, 45, 32, 66,117,
-105,108,100,115, 32, 97, 32,112, 97,116,104, 32, 99,111,109,112,111,110,101,110,
-116, 32,102,114,111,109, 32,105,116,115, 32,115,101,103,109,101,110,116,115, 44,
- 32,101,115, 99, 97,112,105,110,103, 32,112,114,111,116,101, 99,116,101,100, 32,
- 99,104, 97,114, 97, 99,116,101,114,115, 46, 10, 45, 45, 32, 73,110,112,117,116,
- 10, 45, 45, 32, 32, 32,112, 97,114,115,101,100, 58, 32,112, 97,116,104, 32,115,
-101,103,109,101,110,116,115, 10, 45, 45, 32, 32, 32,117,110,115, 97,102,101, 58,
- 32,105,102, 32,116,114,117,101, 44, 32,115,101,103,109,101,110,116,115, 32, 97,
-114,101, 32,110,111,116, 32,112,114,111,116,101, 99,116,101,100, 32, 98,101,102,
-111,114,101, 32,112, 97,116,104, 32,105,115, 32, 98,117,105,108,116, 10, 45, 45,
- 32, 82,101,116,117,114,110,115, 10, 45, 45, 32, 32, 32,112, 97,116,104, 58, 32,
- 99,111,114,114,101,115,112,111,110,100,105,110,103, 32,112, 97,116,104, 32,115,
-116,114,105,110,103,105,110,103, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 10,102,117,110, 99,116,105,111,110, 32, 98,117,105,108,
-100, 95,112, 97,116,104, 40,112, 97,114,115,101,100, 44, 32,117,110,115, 97,102,
-101, 41, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,112, 97,116,104, 32, 61, 32,
- 34, 34, 10, 32, 32, 32, 32,108,111, 99, 97,108, 32,110, 32, 61, 32, 35,112, 97,
-114,115,101,100, 10, 32, 32, 32, 32,105,102, 32,117,110,115, 97,102,101, 32,116,
-104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,111,114, 32,105, 32, 61, 32,
- 49, 44, 32,110, 45, 49, 32,100,111, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104, 32, 46, 46, 32,112, 97,114,
-115,101,100, 91,105, 93, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,112,
- 97,116,104, 32, 61, 32,112, 97,116,104, 32, 46, 46, 32, 34, 47, 34, 10, 32, 32,
- 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,105,102,
- 32,110, 32, 62, 32, 48, 32,116,104,101,110, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104, 32, 46, 46, 32,112,
- 97,114,115,101,100, 91,110, 93, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32,105,102, 32,112, 97,114,115,101,100, 46,105,115, 95,100,105,114,101, 99,116,
-111,114,121, 32,116,104,101,110, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104,
- 32, 46, 46, 32, 34, 47, 34, 32,101,110,100, 10, 32, 32, 32, 32, 32, 32, 32, 32,
-101,110,100, 10, 32, 32, 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32,
- 32,102,111,114, 32,105, 32, 61, 32, 49, 44, 32,110, 45, 49, 32,100,111, 10, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,
-116,104, 32, 46, 46, 32,112,114,111,116,101, 99,116, 95,115,101,103,109,101,110,
-116, 40,112, 97,114,115,101,100, 91,105, 93, 41, 10, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,104, 32, 46, 46, 32,
- 34, 47, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,
- 32, 32, 32, 32,105,102, 32,110, 32, 62, 32, 48, 32,116,104,101,110, 10, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,112, 97,116,104, 32, 61, 32,112, 97,116,
-104, 32, 46, 46, 32,112,114,111,116,101, 99,116, 95,115,101,103,109,101,110,116,
- 40,112, 97,114,115,101,100, 91,110, 93, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32,105,102, 32,112, 97,114,115,101,100, 46,105,115, 95,100,105,114,
-101, 99,116,111,114,121, 32,116,104,101,110, 32,112, 97,116,104, 32, 61, 32,112,
- 97,116,104, 32, 46, 46, 32, 34, 47, 34, 32,101,110,100, 10, 32, 32, 32, 32, 32,
- 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,101,110,100, 10, 32, 32, 32, 32,105,
-102, 32,112, 97,114,115,101,100, 46,105,115, 95, 97, 98,115,111,108,117,116,101,
- 32,116,104,101,110, 32,112, 97,116,104, 32, 61, 32, 34, 47, 34, 32, 46, 46, 32,
-112, 97,116,104, 32,101,110,100, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,
-112, 97,116,104, 10,101,110,100, 10,
- 0 };
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x47,
+ 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73,
+ 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x71,
+ 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x22, 0x29, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x75, 0x72,
+ 0x6c, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x5f, 0x4d, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x75, 0x72, 0x6c, 0x0a, 0x5f, 0x4d, 0x2e, 0x5f, 0x56, 0x45, 0x52,
+ 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, 0x22, 0x55, 0x52, 0x4c, 0x20,
+ 0x31, 0x2e, 0x30, 0x2e, 0x33, 0x22, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x65, 0x73, 0x63, 0x61, 0x70,
+ 0x65, 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x2c, 0x20, 0x22, 0x28, 0x5b, 0x5e,
+ 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x5d, 0x29,
+ 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
+ 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x25, 0x25,
+ 0x30, 0x32, 0x78, 0x22, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x28,
+ 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x74,
+ 0x29, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x5b, 0x74, 0x5b, 0x69, 0x5d, 0x5d, 0x20, 0x3d, 0x20, 0x31,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x0a, 0x65, 0x6e,
+ 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d,
+ 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61,
+ 0x6b, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x22, 0x2d, 0x22, 0x2c, 0x20, 0x22, 0x5f, 0x22, 0x2c, 0x20, 0x22,
+ 0x2e, 0x22, 0x2c, 0x20, 0x22, 0x21, 0x22, 0x2c, 0x20, 0x22, 0x7e, 0x22,
+ 0x2c, 0x20, 0x22, 0x2a, 0x22, 0x2c, 0x20, 0x22, 0x27, 0x22, 0x2c, 0x20,
+ 0x22, 0x28, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x29, 0x22,
+ 0x2c, 0x20, 0x22, 0x3a, 0x22, 0x2c, 0x20, 0x22, 0x40, 0x22, 0x2c, 0x20,
+ 0x22, 0x26, 0x22, 0x2c, 0x20, 0x22, 0x3d, 0x22, 0x2c, 0x20, 0x22, 0x2b,
+ 0x22, 0x2c, 0x20, 0x22, 0x24, 0x22, 0x2c, 0x20, 0x22, 0x2c, 0x22, 0x2c,
+ 0x0a, 0x7d, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63,
+ 0x74, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x73, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28,
+ 0x73, 0x2c, 0x20, 0x22, 0x28, 0x5b, 0x5e, 0x41, 0x2d, 0x5a, 0x61, 0x2d,
+ 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x5d, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x63, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x65,
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x5b, 0x63, 0x5d,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x63, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x28, 0x22, 0x25, 0x25, 0x25, 0x30, 0x32, 0x58, 0x22, 0x2c, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63,
+ 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x75, 0x6e, 0x65, 0x73,
+ 0x63, 0x61, 0x70, 0x65, 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x2c, 0x20, 0x22,
+ 0x25, 0x25, 0x28, 0x25, 0x78, 0x25, 0x78, 0x29, 0x22, 0x2c, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x68, 0x65, 0x78, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x63,
+ 0x68, 0x61, 0x72, 0x28, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x68, 0x65, 0x78, 0x2c, 0x20, 0x31,
+ 0x36, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29,
+ 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x73,
+ 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x28, 0x62,
+ 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x72, 0x65,
+ 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x72, 0x65, 0x6c, 0x61, 0x74,
+ 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x31, 0x2c,
+ 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x2f, 0x22, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72,
+ 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x62, 0x61,
+ 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x22, 0x5b, 0x5e,
+ 0x2f, 0x5d, 0x2a, 0x24, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c,
+ 0x20, 0x22, 0x28, 0x5b, 0x5e, 0x2f, 0x5d, 0x2a, 0x25, 0x2e, 0x2f, 0x29,
+ 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x73, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x2e, 0x2f, 0x22,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x73, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x22, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70,
+ 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20,
+ 0x22, 0x2f, 0x25, 0x2e, 0x24, 0x22, 0x2c, 0x20, 0x22, 0x2f, 0x22, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72,
+ 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77,
+ 0x68, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64,
+ 0x20, 0x7e, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x64, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x64, 0x75,
+ 0x63, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75,
+ 0x62, 0x28, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x2c, 0x20, 0x22,
+ 0x28, 0x5b, 0x5e, 0x2f, 0x5d, 0x2a, 0x2f, 0x25, 0x2e, 0x25, 0x2e, 0x2f,
+ 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x20, 0x7e, 0x3d,
+ 0x20, 0x22, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x22, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68,
+ 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73,
+ 0x75, 0x62, 0x28, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x2c, 0x20,
+ 0x22, 0x28, 0x5b, 0x5e, 0x2f, 0x5d, 0x2a, 0x2f, 0x25, 0x2e, 0x25, 0x2e,
+ 0x29, 0x24, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x28, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x2e,
+ 0x2e, 0x2f, 0x2e, 0x2e, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72,
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x20, 0x65, 0x6c, 0x73,
+ 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70,
+ 0x61, 0x74, 0x68, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75,
+ 0x6c, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x7b,
+ 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x2c,
+ 0x76, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x61,
+ 0x69, 0x72, 0x73, 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
+ 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x29, 0x20, 0x64,
+ 0x6f, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x5b, 0x69, 0x5d, 0x20,
+ 0x3d, 0x20, 0x76, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x6f,
+ 0x72, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x22, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69,
+ 0x64, 0x20, 0x75, 0x72, 0x6c, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c,
+ 0x2c, 0x20, 0x22, 0x23, 0x28, 0x2e, 0x2a, 0x29, 0x24, 0x22, 0x2c, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x3d, 0x20, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75,
+ 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x67, 0x73, 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x22, 0x5e,
+ 0x28, 0x5b, 0x25, 0x77, 0x5d, 0x5b, 0x25, 0x77, 0x25, 0x2b, 0x25, 0x2d,
+ 0x25, 0x2e, 0x5d, 0x2a, 0x29, 0x25, 0x3a, 0x22, 0x2c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x73, 0x29, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x3b,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x20, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75,
+ 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x22, 0x5e, 0x2f, 0x2f, 0x28,
+ 0x5b, 0x5e, 0x2f, 0x5d, 0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c,
+ 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73,
+ 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x22, 0x25, 0x3f, 0x28,
+ 0x2e, 0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x28, 0x71, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x20, 0x3d, 0x20, 0x71, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c,
+ 0x20, 0x22, 0x25, 0x3b, 0x28, 0x2e, 0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66,
+ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x70,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x75,
+ 0x72, 0x6c, 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x74,
+ 0x68, 0x20, 0x3d, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
+ 0x74, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79,
+ 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73,
+ 0x75, 0x62, 0x28, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79,
+ 0x2c, 0x22, 0x5e, 0x28, 0x5b, 0x5e, 0x40, 0x5d, 0x2a, 0x29, 0x40, 0x22,
+ 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75,
+ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x75, 0x29, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66,
+ 0x6f, 0x20, 0x3d, 0x20, 0x75, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
+ 0x6e, 0x20, 0x22, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20,
+ 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75,
+ 0x62, 0x28, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2c,
+ 0x20, 0x22, 0x3a, 0x28, 0x5b, 0x5e, 0x3a, 0x25, 0x5d, 0x5d, 0x2a, 0x29,
+ 0x24, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x29, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20,
+ 0x3d, 0x20, 0x70, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x22, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79,
+ 0x20, 0x7e, 0x3d, 0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x22,
+ 0x5e, 0x25, 0x5b, 0x28, 0x2e, 0x2b, 0x29, 0x25, 0x5d, 0x24, 0x22, 0x29,
+ 0x20, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x75, 0x73,
+ 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x2c, 0x20, 0x22, 0x3a, 0x28, 0x5b,
+ 0x5e, 0x3a, 0x5d, 0x2a, 0x29, 0x24, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x28, 0x70, 0x29, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x70,
+ 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x20,
+ 0x65, 0x6e, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x2d, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x70, 0x61, 0x74,
+ 0x68, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x5f, 0x70, 0x61, 0x74, 0x68, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x22, 0x29,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x62, 0x75,
+ 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x28, 0x70, 0x70, 0x61,
+ 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x22,
+ 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x72,
+ 0x6c, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3b, 0x22, 0x20, 0x2e, 0x2e, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x73, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d,
+ 0x20, 0x75, 0x72, 0x6c, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3f, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x71, 0x75,
+ 0x65, 0x72, 0x79, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x69, 0x74, 0x79, 0x2c, 0x20, 0x22, 0x3a, 0x22, 0x29, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x49, 0x50, 0x76, 0x36, 0x3f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20,
+ 0x22, 0x5b, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x5d, 0x22, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x20, 0x3d, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3a, 0x22, 0x20, 0x2e, 0x2e, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x6f, 0x72,
+ 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f,
+ 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x75, 0x73,
+ 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x73, 0x65, 0x72, 0x69,
+ 0x6e, 0x66, 0x6f, 0x20, 0x3d, 0x20, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e,
+ 0x66, 0x6f, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x3a, 0x22, 0x20, 0x2e, 0x2e,
+ 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72,
+ 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x75, 0x73,
+ 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x40,
+ 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
+ 0x74, 0x79, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
+ 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x22, 0x2f, 0x2f, 0x22, 0x20,
+ 0x2e, 0x2e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79,
+ 0x20, 0x2e, 0x2e, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x2e, 0x2e,
+ 0x20, 0x22, 0x3a, 0x22, 0x20, 0x2e, 0x2e, 0x20, 0x75, 0x72, 0x6c, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x72, 0x6c, 0x20,
+ 0x3d, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x23, 0x22,
+ 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x66,
+ 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75,
+ 0x72, 0x6c, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e, 0x61, 0x62, 0x73, 0x6f, 0x6c,
+ 0x75, 0x74, 0x65, 0x28, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c,
+ 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x75,
+ 0x72, 0x6c, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x28, 0x62, 0x61, 0x73, 0x65, 0x5f,
+ 0x75, 0x72, 0x6c, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x22, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f,
+ 0x75, 0x72, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28, 0x62, 0x61, 0x73, 0x65,
+ 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x20, 0x3d, 0x20, 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x28, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x29, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x5f,
+ 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x72, 0x65, 0x6c, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x61, 0x73,
+ 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72,
+ 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66,
+ 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x75, 0x72, 0x6c,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x73, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x71, 0x75, 0x65,
+ 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e,
+ 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x73, 0x65,
+ 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c,
+ 0x73, 0x65, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
+ 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61, 0x62,
+ 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x28,
+ 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x22, 0x2c, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e,
+ 0x70, 0x61, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x5f, 0x4d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x28, 0x72, 0x65,
+ 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65,
+ 0x6e, 0x64, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x5f, 0x4d, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74,
+ 0x68, 0x28, 0x70, 0x61, 0x74, 0x68, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x72,
+ 0x20, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
+ 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x22,
+ 0x25, 0x73, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62,
+ 0x28, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x22, 0x28, 0x5b, 0x5e, 0x2f,
+ 0x5d, 0x2b, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x29, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x2c, 0x20, 0x73, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20,
+ 0x31, 0x2c, 0x20, 0x23, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x64,
+ 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x5f, 0x4d,
+ 0x2e, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x5b, 0x69, 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x70,
+ 0x61, 0x74, 0x68, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x3d,
+ 0x3d, 0x20, 0x22, 0x2f, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x69, 0x73, 0x5f, 0x61, 0x62, 0x73,
+ 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x70, 0x61, 0x74, 0x68,
+ 0x2c, 0x20, 0x2d, 0x31, 0x2c, 0x20, 0x2d, 0x31, 0x29, 0x20, 0x3d, 0x3d,
+ 0x20, 0x22, 0x2f, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x2e, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+ 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5f, 0x4d, 0x2e,
+ 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x28, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x73, 0x61, 0x66,
+ 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
+ 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x22, 0x22, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x20, 0x3d,
+ 0x20, 0x23, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x6e,
+ 0x2d, 0x31, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d,
+ 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x5b, 0x69, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2f,
+ 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e,
+ 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x5b, 0x6e, 0x5d,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x66, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x69,
+ 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2f, 0x22, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x6e, 0x2d, 0x31, 0x20,
+ 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63,
+ 0x74, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x5b, 0x69, 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x74,
+ 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x2e, 0x2e, 0x20,
+ 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x69, 0x66, 0x20, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74,
+ 0x68, 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74,
+ 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x5b, 0x6e, 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x2e, 0x2e, 0x20, 0x22, 0x2f, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x66, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x69, 0x73, 0x5f,
+ 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x6e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x22, 0x2f, 0x22,
+ 0x20, 0x2e, 0x2e, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x65, 0x6e, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x70, 0x61, 0x74, 0x68, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x72, 0x65, 0x74,
+ 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x4d, 0x0a,0x0};
return luaL_dostring(L, (const char*)B);
} /* end of embedded lua code */
-
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.c b/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.c
index a2a2c3ec23c..6e7f8f67479 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.c
@@ -4,12 +4,13 @@
*
* The code is now interrupt-safe.
* The penalty of calling select to avoid busy-wait is only paid when
-* the I/O call fail in the first place.
+* the I/O call fail in the first place.
\*=========================================================================*/
-#include <string.h>
+#include <string.h>
#include <signal.h>
#include "socket.h"
+#include "pierror.h"
/*-------------------------------------------------------------------------*\
* Wait for readable/writable/connected socket with timeout
@@ -72,16 +73,16 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
/*-------------------------------------------------------------------------*\
-* Initializes module
+* Initializes module
\*-------------------------------------------------------------------------*/
int socket_open(void) {
- /* instals a handler to ignore sigpipe or it will crash us */
+ /* installs a handler to ignore sigpipe or it will crash us */
signal(SIGPIPE, SIG_IGN);
return 1;
}
/*-------------------------------------------------------------------------*\
-* Close module
+* Close module
\*-------------------------------------------------------------------------*/
int socket_close(void) {
return 1;
@@ -92,7 +93,6 @@ int socket_close(void) {
\*-------------------------------------------------------------------------*/
void socket_destroy(p_socket ps) {
if (*ps != SOCKET_INVALID) {
- socket_setblocking(ps);
close(*ps);
*ps = SOCKET_INVALID;
}
@@ -101,7 +101,7 @@ void socket_destroy(p_socket ps) {
/*-------------------------------------------------------------------------*\
* Select with timeout control
\*-------------------------------------------------------------------------*/
-int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
+int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
p_timeout tm) {
int ret;
do {
@@ -120,8 +120,8 @@ int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
\*-------------------------------------------------------------------------*/
int socket_create(p_socket ps, int domain, int type, int protocol) {
*ps = socket(domain, type, protocol);
- if (*ps != SOCKET_INVALID) return IO_DONE;
- else return errno;
+ if (*ps != SOCKET_INVALID) return IO_DONE;
+ else return errno;
}
/*-------------------------------------------------------------------------*\
@@ -130,29 +130,25 @@ int socket_create(p_socket ps, int domain, int type, int protocol) {
int socket_bind(p_socket ps, SA *addr, socklen_t len) {
int err = IO_DONE;
socket_setblocking(ps);
- if (bind(*ps, addr, len) < 0) err = errno;
+ if (bind(*ps, addr, len) < 0) err = errno;
socket_setnonblocking(ps);
return err;
}
/*-------------------------------------------------------------------------*\
-*
+*
\*-------------------------------------------------------------------------*/
int socket_listen(p_socket ps, int backlog) {
- int err = IO_DONE;
- socket_setblocking(ps);
- if (listen(*ps, backlog)) err = errno;
- socket_setnonblocking(ps);
+ int err = IO_DONE;
+ if (listen(*ps, backlog)) err = errno;
return err;
}
/*-------------------------------------------------------------------------*\
-*
+*
\*-------------------------------------------------------------------------*/
void socket_shutdown(p_socket ps, int how) {
- socket_setblocking(ps);
shutdown(*ps, how);
- socket_setnonblocking(ps);
}
/*-------------------------------------------------------------------------*\
@@ -166,7 +162,7 @@ int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
do if (connect(*ps, addr, len) == 0) return IO_DONE;
while ((err = errno) == EINTR);
/* if connection failed immediately, return error code */
- if (err != EINPROGRESS && err != EAGAIN) return err;
+ if (err != EINPROGRESS && err != EAGAIN) return err;
/* zero timeout case optimization */
if (timeout_iszero(tm)) return IO_TIMEOUT;
/* wait until we have the result of the connection attempt or timeout */
@@ -181,7 +177,7 @@ int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
* Accept with timeout
\*-------------------------------------------------------------------------*/
int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) {
- if (*ps == SOCKET_INVALID) return IO_CLOSED;
+ if (*ps == SOCKET_INVALID) return IO_CLOSED;
for ( ;; ) {
int err;
if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;
@@ -197,7 +193,7 @@ int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout
/*-------------------------------------------------------------------------*\
* Send with timeout
\*-------------------------------------------------------------------------*/
-int socket_send(p_socket ps, const char *data, size_t count,
+int socket_send(p_socket ps, const char *data, size_t count,
size_t *sent, p_timeout tm)
{
int err;
@@ -215,6 +211,8 @@ int socket_send(p_socket ps, const char *data, size_t count,
err = errno;
/* EPIPE means the connection was closed */
if (err == EPIPE) return IO_CLOSED;
+ /* EPROTOTYPE means the connection is being closed (on Yosemite!)*/
+ if (err == EPROTOTYPE) continue;
/* we call was interrupted, just try again */
if (err == EINTR) continue;
/* if failed fatal reason, report error */
@@ -229,20 +227,21 @@ int socket_send(p_socket ps, const char *data, size_t count,
/*-------------------------------------------------------------------------*\
* Sendto with timeout
\*-------------------------------------------------------------------------*/
-int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
+int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
SA *addr, socklen_t len, p_timeout tm)
{
int err;
*sent = 0;
if (*ps == SOCKET_INVALID) return IO_CLOSED;
for ( ;; ) {
- long put = (long) sendto(*ps, data, count, 0, addr, len);
+ long put = (long) sendto(*ps, data, count, 0, addr, len);
if (put >= 0) {
*sent = put;
return IO_DONE;
}
err = errno;
if (err == EPIPE) return IO_CLOSED;
+ if (err == EPROTOTYPE) continue;
if (err == EINTR) continue;
if (err != EAGAIN) return err;
if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;
@@ -266,8 +265,8 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
err = errno;
if (taken == 0) return IO_CLOSED;
if (err == EINTR) continue;
- if (err != EAGAIN) return err;
- if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
+ if (err != EAGAIN) return err;
+ if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
return IO_UNKNOWN;
}
@@ -275,7 +274,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
/*-------------------------------------------------------------------------*\
* Recvfrom with timeout
\*-------------------------------------------------------------------------*/
-int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
+int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
SA *addr, socklen_t *len, p_timeout tm) {
int err;
*got = 0;
@@ -289,8 +288,8 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
err = errno;
if (taken == 0) return IO_CLOSED;
if (err == EINTR) continue;
- if (err != EAGAIN) return err;
- if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
+ if (err != EAGAIN) return err;
+ if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
return IO_UNKNOWN;
}
@@ -303,7 +302,7 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
* with send/recv replaced with write/read. We can't just use write/read
* in the socket version, because behaviour when size is zero is different.
\*-------------------------------------------------------------------------*/
-int socket_write(p_socket ps, const char *data, size_t count,
+int socket_write(p_socket ps, const char *data, size_t count,
size_t *sent, p_timeout tm)
{
int err;
@@ -321,6 +320,8 @@ int socket_write(p_socket ps, const char *data, size_t count,
err = errno;
/* EPIPE means the connection was closed */
if (err == EPIPE) return IO_CLOSED;
+ /* EPROTOTYPE means the connection is being closed (on Yosemite!)*/
+ if (err == EPROTOTYPE) continue;
/* we call was interrupted, just try again */
if (err == EINTR) continue;
/* if failed fatal reason, report error */
@@ -349,8 +350,8 @@ int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
err = errno;
if (taken == 0) return IO_CLOSED;
if (err == EINTR) continue;
- if (err != EAGAIN) return err;
- if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
+ if (err != EAGAIN) return err;
+ if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
return IO_UNKNOWN;
}
@@ -374,7 +375,7 @@ void socket_setnonblocking(p_socket ps) {
}
/*-------------------------------------------------------------------------*\
-* DNS helpers
+* DNS helpers
\*-------------------------------------------------------------------------*/
int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) {
*hp = gethostbyaddr(addr, len, AF_INET);
@@ -399,7 +400,7 @@ int socket_gethostbyname(const char *addr, struct hostent **hp) {
const char *socket_hoststrerror(int err) {
if (err <= 0) return io_strerror(err);
switch (err) {
- case HOST_NOT_FOUND: return "host not found";
+ case HOST_NOT_FOUND: return PIE_HOST_NOT_FOUND;
default: return hstrerror(err);
}
}
@@ -407,44 +408,43 @@ const char *socket_hoststrerror(int err) {
const char *socket_strerror(int err) {
if (err <= 0) return io_strerror(err);
switch (err) {
- case EADDRINUSE: return "address already in use";
- case EISCONN: return "already connected";
- case EACCES: return "permission denied";
- case ECONNREFUSED: return "connection refused";
- case ECONNABORTED: return "closed";
- case ECONNRESET: return "closed";
- case ETIMEDOUT: return "timeout";
- default: return strerror(err);
+ case EADDRINUSE: return PIE_ADDRINUSE;
+ case EISCONN: return PIE_ISCONN;
+ case EACCES: return PIE_ACCESS;
+ case ECONNREFUSED: return PIE_CONNREFUSED;
+ case ECONNABORTED: return PIE_CONNABORTED;
+ case ECONNRESET: return PIE_CONNRESET;
+ case ETIMEDOUT: return PIE_TIMEDOUT;
+ default: {
+ return strerror(err);
+ }
}
}
const char *socket_ioerror(p_socket ps, int err) {
(void) ps;
return socket_strerror(err);
-}
+}
const char *socket_gaistrerror(int err) {
- if (err == 0) return NULL;
+ if (err == 0) return NULL;
switch (err) {
- case EAI_AGAIN: return "temporary failure in name resolution";
- case EAI_BADFLAGS: return "invalid value for ai_flags";
+ case EAI_AGAIN: return PIE_AGAIN;
+ case EAI_BADFLAGS: return PIE_BADFLAGS;
#ifdef EAI_BADHINTS
- case EAI_BADHINTS: return "invalid value for hints";
-#endif
- case EAI_FAIL: return "non-recoverable failure in name resolution";
- case EAI_FAMILY: return "ai_family not supported";
- case EAI_MEMORY: return "memory allocation failure";
- case EAI_NONAME:
- return "host or service not provided, or not known";
-#ifdef EAI_OVERFLOW
- case EAI_OVERFLOW: return "argument buffer overflow";
+ case EAI_BADHINTS: return PIE_BADHINTS;
#endif
+ case EAI_FAIL: return PIE_FAIL;
+ case EAI_FAMILY: return PIE_FAMILY;
+ case EAI_MEMORY: return PIE_MEMORY;
+ case EAI_NONAME: return PIE_NONAME;
+ case EAI_OVERFLOW: return PIE_OVERFLOW;
#ifdef EAI_PROTOCOL
- case EAI_PROTOCOL: return "resolved protocol is unknown";
+ case EAI_PROTOCOL: return PIE_PROTOCOL;
#endif
- case EAI_SERVICE: return "service not supported for socket type";
- case EAI_SOCKTYPE: return "ai_socktype not supported";
- case EAI_SYSTEM: return strerror(errno);
+ case EAI_SERVICE: return PIE_SERVICE;
+ case EAI_SOCKTYPE: return PIE_SOCKTYPE;
+ case EAI_SYSTEM: return strerror(errno);
default: return gai_strerror(err);
}
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.h b/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.h
index 8b3241bf3c2..45f2f99f7fb 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/usocket.h
@@ -29,11 +29,27 @@
#include <arpa/inet.h>
/* TCP options (nagle algorithm disable) */
#include <netinet/tcp.h>
+#include <net/if.h>
#ifndef SO_REUSEPORT
#define SO_REUSEPORT SO_REUSEADDR
#endif
+/* Some platforms use IPV6_JOIN_GROUP instead if
+ * IPV6_ADD_MEMBERSHIP. The semantics are same, though. */
+#ifndef IPV6_ADD_MEMBERSHIP
+#ifdef IPV6_JOIN_GROUP
+#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
+#endif /* IPV6_JOIN_GROUP */
+#endif /* !IPV6_ADD_MEMBERSHIP */
+
+/* Same with IPV6_DROP_MEMBERSHIP / IPV6_LEAVE_GROUP. */
+#ifndef IPV6_DROP_MEMBERSHIP
+#ifdef IPV6_LEAVE_GROUP
+#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
+#endif /* IPV6_LEAVE_GROUP */
+#endif /* !IPV6_DROP_MEMBERSHIP */
+
typedef int t_socket;
typedef t_socket *p_socket;
typedef struct sockaddr_storage t_sockaddr_storage;
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
index d6dd004e7e2..8ecb0fc7a8e 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
@@ -3,33 +3,34 @@
* LuaSocket toolkit
*
* The penalty of calling select to avoid busy-wait is only paid when
-* the I/O call fail in the first place.
+* the I/O call fail in the first place.
\*=========================================================================*/
#include <string.h>
#include "socket.h"
+#include "pierror.h"
/* WinSock doesn't have a strerror... */
static const char *wstrerror(int err);
/*-------------------------------------------------------------------------*\
-* Initializes module
+* Initializes module
\*-------------------------------------------------------------------------*/
int socket_open(void) {
WSADATA wsaData;
- WORD wVersionRequested = MAKEWORD(2, 0);
+ WORD wVersionRequested = MAKEWORD(2, 0);
int err = WSAStartup(wVersionRequested, &wsaData );
if (err != 0) return 0;
if ((LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0) &&
(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)) {
WSACleanup();
- return 0;
+ return 0;
}
return 1;
}
/*-------------------------------------------------------------------------*\
-* Close module
+* Close module
\*-------------------------------------------------------------------------*/
int socket_close(void) {
WSACleanup();
@@ -50,10 +51,10 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
struct timeval tv, *tp = NULL;
double t;
if (timeout_iszero(tm)) return IO_TIMEOUT; /* optimize timeout == 0 case */
- if (sw & WAITFD_R) {
- FD_ZERO(&rfds);
+ if (sw & WAITFD_R) {
+ FD_ZERO(&rfds);
FD_SET(*ps, &rfds);
- rp = &rfds;
+ rp = &rfds;
}
if (sw & WAITFD_W) { FD_ZERO(&wfds); FD_SET(*ps, &wfds); wp = &wfds; }
if (sw & WAITFD_C) { FD_ZERO(&efds); FD_SET(*ps, &efds); ep = &efds; }
@@ -72,9 +73,9 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
/*-------------------------------------------------------------------------*\
* Select with int timeout in ms
\*-------------------------------------------------------------------------*/
-int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
+int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
p_timeout tm) {
- struct timeval tv;
+ struct timeval tv;
double t = timeout_get(tm);
tv.tv_sec = (int) t;
tv.tv_usec = (int) ((t - tv.tv_sec) * 1.0e6);
@@ -96,7 +97,7 @@ void socket_destroy(p_socket ps) {
}
/*-------------------------------------------------------------------------*\
-*
+*
\*-------------------------------------------------------------------------*/
void socket_shutdown(p_socket ps, int how) {
socket_setblocking(ps);
@@ -134,10 +135,10 @@ int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
/* give windows time to set the error (yes, disgusting) */
Sleep(10);
/* find out why we failed */
- getsockopt(*ps, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
+ getsockopt(*ps, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
/* we KNOW there was an error. if 'why' is 0, we will return
* "unknown error", but it's not really our fault */
- return err > 0? err: IO_UNKNOWN;
+ return err > 0? err: IO_UNKNOWN;
} else return err;
}
@@ -154,7 +155,7 @@ int socket_bind(p_socket ps, SA *addr, socklen_t len) {
}
/*-------------------------------------------------------------------------*\
-*
+*
\*-------------------------------------------------------------------------*/
int socket_listen(p_socket ps, int backlog) {
int err = IO_DONE;
@@ -167,7 +168,7 @@ int socket_listen(p_socket ps, int backlog) {
/*-------------------------------------------------------------------------*\
* Accept with timeout
\*-------------------------------------------------------------------------*/
-int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
+int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
p_timeout tm) {
if (*ps == SOCKET_INVALID) return IO_CLOSED;
for ( ;; ) {
@@ -175,21 +176,21 @@ int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
/* try to get client socket */
if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;
/* find out why we failed */
- err = WSAGetLastError();
+ err = WSAGetLastError();
/* if we failed because there was no connectoin, keep trying */
if (err != WSAEWOULDBLOCK && err != WSAECONNABORTED) return err;
/* call select to avoid busy wait */
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
- }
+ }
}
/*-------------------------------------------------------------------------*\
* Send with timeout
-* On windows, if you try to send 10MB, the OS will buffer EVERYTHING
-* this can take an awful lot of time and we will end up blocked.
+* On windows, if you try to send 10MB, the OS will buffer EVERYTHING
+* this can take an awful lot of time and we will end up blocked.
* Therefore, whoever calls this function should not pass a huge buffer.
\*-------------------------------------------------------------------------*/
-int socket_send(p_socket ps, const char *data, size_t count,
+int socket_send(p_socket ps, const char *data, size_t count,
size_t *sent, p_timeout tm)
{
int err;
@@ -206,18 +207,18 @@ int socket_send(p_socket ps, const char *data, size_t count,
return IO_DONE;
}
/* deal with failure */
- err = WSAGetLastError();
+ err = WSAGetLastError();
/* we can only proceed if there was no serious error */
if (err != WSAEWOULDBLOCK) return err;
/* avoid busy wait */
if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;
- }
+ }
}
/*-------------------------------------------------------------------------*\
* Sendto with timeout
\*-------------------------------------------------------------------------*/
-int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
+int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
SA *addr, socklen_t len, p_timeout tm)
{
int err;
@@ -229,17 +230,19 @@ int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
*sent = put;
return IO_DONE;
}
- err = WSAGetLastError();
+ err = WSAGetLastError();
if (err != WSAEWOULDBLOCK) return err;
if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;
- }
+ }
}
/*-------------------------------------------------------------------------*\
* Receive with timeout
\*-------------------------------------------------------------------------*/
-int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) {
- int err;
+int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
+ p_timeout tm)
+{
+ int err, prev = IO_DONE;
*got = 0;
if (*ps == SOCKET_INVALID) return IO_CLOSED;
for ( ;; ) {
@@ -250,7 +253,14 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
}
if (taken == 0) return IO_CLOSED;
err = WSAGetLastError();
- if (err != WSAEWOULDBLOCK) return err;
+ /* On UDP, a connreset simply means the previous send failed.
+ * So we try again.
+ * On TCP, it means our socket is now useless, so the error passes.
+ * (We will loop again, exiting because the same error will happen) */
+ if (err != WSAEWOULDBLOCK) {
+ if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
+ prev = err;
+ }
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
}
@@ -258,9 +268,10 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
/*-------------------------------------------------------------------------*\
* Recvfrom with timeout
\*-------------------------------------------------------------------------*/
-int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
- SA *addr, socklen_t *len, p_timeout tm) {
- int err;
+int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
+ SA *addr, socklen_t *len, p_timeout tm)
+{
+ int err, prev = IO_DONE;
*got = 0;
if (*ps == SOCKET_INVALID) return IO_CLOSED;
for ( ;; ) {
@@ -271,7 +282,14 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
}
if (taken == 0) return IO_CLOSED;
err = WSAGetLastError();
- if (err != WSAEWOULDBLOCK) return err;
+ /* On UDP, a connreset simply means the previous send failed.
+ * So we try again.
+ * On TCP, it means our socket is now useless, so the error passes.
+ * (We will loop again, exiting because the same error will happen) */
+ if (err != WSAEWOULDBLOCK) {
+ if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
+ prev = err;
+ }
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
}
@@ -293,7 +311,7 @@ void socket_setnonblocking(p_socket ps) {
}
/*-------------------------------------------------------------------------*\
-* DNS helpers
+* DNS helpers
\*-------------------------------------------------------------------------*/
int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) {
*hp = gethostbyaddr(addr, len, AF_INET);
@@ -313,21 +331,21 @@ int socket_gethostbyname(const char *addr, struct hostent **hp) {
const char *socket_hoststrerror(int err) {
if (err <= 0) return io_strerror(err);
switch (err) {
- case WSAHOST_NOT_FOUND: return "host not found";
- default: return wstrerror(err);
+ case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND;
+ default: return wstrerror(err);
}
}
const char *socket_strerror(int err) {
if (err <= 0) return io_strerror(err);
switch (err) {
- case WSAEADDRINUSE: return "address already in use";
- case WSAECONNREFUSED: return "connection refused";
- case WSAEISCONN: return "already connected";
- case WSAEACCES: return "permission denied";
- case WSAECONNABORTED: return "closed";
- case WSAECONNRESET: return "closed";
- case WSAETIMEDOUT: return "timeout";
+ case WSAEADDRINUSE: return PIE_ADDRINUSE;
+ case WSAECONNREFUSED : return PIE_CONNREFUSED;
+ case WSAEISCONN: return PIE_ISCONN;
+ case WSAEACCES: return PIE_ACCESS;
+ case WSAECONNABORTED: return PIE_CONNABORTED;
+ case WSAECONNRESET: return PIE_CONNRESET;
+ case WSAETIMEDOUT: return PIE_TIMEDOUT;
default: return wstrerror(err);
}
}
@@ -340,7 +358,7 @@ const char *socket_ioerror(p_socket ps, int err) {
static const char *wstrerror(int err) {
switch (err) {
case WSAEINTR: return "Interrupted function call";
- case WSAEACCES: return "Permission denied";
+ case WSAEACCES: return PIE_ACCESS; // "Permission denied";
case WSAEFAULT: return "Bad address";
case WSAEINVAL: return "Invalid argument";
case WSAEMFILE: return "Too many open files";
@@ -353,60 +371,62 @@ static const char *wstrerror(int err) {
case WSAEPROTOTYPE: return "Protocol wrong type for socket";
case WSAENOPROTOOPT: return "Bad protocol option";
case WSAEPROTONOSUPPORT: return "Protocol not supported";
- case WSAESOCKTNOSUPPORT: return "Socket type not supported";
+ case WSAESOCKTNOSUPPORT: return PIE_SOCKTYPE; // "Socket type not supported";
case WSAEOPNOTSUPP: return "Operation not supported";
case WSAEPFNOSUPPORT: return "Protocol family not supported";
- case WSAEAFNOSUPPORT:
- return "Address family not supported by protocol family";
- case WSAEADDRINUSE: return "Address already in use";
+ case WSAEAFNOSUPPORT: return PIE_FAMILY; // "Address family not supported by protocol family";
+ case WSAEADDRINUSE: return PIE_ADDRINUSE; // "Address already in use";
case WSAEADDRNOTAVAIL: return "Cannot assign requested address";
case WSAENETDOWN: return "Network is down";
case WSAENETUNREACH: return "Network is unreachable";
case WSAENETRESET: return "Network dropped connection on reset";
case WSAECONNABORTED: return "Software caused connection abort";
- case WSAECONNRESET: return "Connection reset by peer";
+ case WSAECONNRESET: return PIE_CONNRESET; // "Connection reset by peer";
case WSAENOBUFS: return "No buffer space available";
- case WSAEISCONN: return "Socket is already connected";
+ case WSAEISCONN: return PIE_ISCONN; // "Socket is already connected";
case WSAENOTCONN: return "Socket is not connected";
case WSAESHUTDOWN: return "Cannot send after socket shutdown";
- case WSAETIMEDOUT: return "Connection timed out";
- case WSAECONNREFUSED: return "Connection refused";
+ case WSAETIMEDOUT: return PIE_TIMEDOUT; // "Connection timed out";
+ case WSAECONNREFUSED: return PIE_CONNREFUSED; // "Connection refused";
case WSAEHOSTDOWN: return "Host is down";
case WSAEHOSTUNREACH: return "No route to host";
case WSAEPROCLIM: return "Too many processes";
case WSASYSNOTREADY: return "Network subsystem is unavailable";
case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range";
- case WSANOTINITIALISED:
+ case WSANOTINITIALISED:
return "Successful WSAStartup not yet performed";
case WSAEDISCON: return "Graceful shutdown in progress";
- case WSAHOST_NOT_FOUND: return "Host not found";
+ case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; // "Host not found";
case WSATRY_AGAIN: return "Nonauthoritative host not found";
- case WSANO_RECOVERY: return "Nonrecoverable name lookup error";
+ case WSANO_RECOVERY: return PIE_FAIL; // "Nonrecoverable name lookup error";
case WSANO_DATA: return "Valid name, no data record of requested type";
default: return "Unknown error";
}
}
const char *socket_gaistrerror(int err) {
- if (err == 0) return NULL;
+ if (err == 0) return NULL;
switch (err) {
- case EAI_AGAIN: return "temporary failure in name resolution";
- case EAI_BADFLAGS: return "invalid value for ai_flags";
+ case EAI_AGAIN: return PIE_AGAIN;
+ case EAI_BADFLAGS: return PIE_BADFLAGS;
#ifdef EAI_BADHINTS
- case EAI_BADHINTS: return "invalid value for hints";
+ case EAI_BADHINTS: return PIE_BADHINTS;
+#endif
+ case EAI_FAIL: return PIE_FAIL;
+ case EAI_FAMILY: return PIE_FAMILY;
+ case EAI_MEMORY: return PIE_MEMORY;
+ case EAI_NONAME: return PIE_NONAME;
+#ifdef EAI_OVERFLOW
+ case EAI_OVERFLOW: return PIE_OVERFLOW;
#endif
- case EAI_FAIL: return "non-recoverable failure in name resolution";
- case EAI_FAMILY: return "ai_family not supported";
- case EAI_MEMORY: return "memory allocation failure";
- case EAI_NONAME:
- return "host or service not provided, or not known";
-// case EAI_OVERFLOW: return "argument buffer overflow";
#ifdef EAI_PROTOCOL
- case EAI_PROTOCOL: return "resolved protocol is unknown";
+ case EAI_PROTOCOL: return PIE_PROTOCOL;
+#endif
+ case EAI_SERVICE: return PIE_SERVICE;
+ case EAI_SOCKTYPE: return PIE_SOCKTYPE;
+#ifdef EAI_SYSTEM
+ case EAI_SYSTEM: return strerror(errno);
#endif
- case EAI_SERVICE: return "service not supported for socket type";
- case EAI_SOCKTYPE: return "ai_socktype not supported";
-// case EAI_SYSTEM: return strerror(errno);
default: return gai_strerror(err);
}
}
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.h b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.h
index 624dd79bf17..398664026fc 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.h
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.h
@@ -8,9 +8,6 @@
/*=========================================================================*\
* WinSock include files
\*=========================================================================*/
-#if defined(__MINGW32__) && (!defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0501))
-#define _WIN32_WINNT 0x0501
-#endif
#include <winsock2.h>
#include <ws2tcpip.h>
@@ -19,10 +16,18 @@ typedef SOCKADDR_STORAGE t_sockaddr_storage;
typedef SOCKET t_socket;
typedef t_socket *p_socket;
+#ifndef IPV6_V6ONLY
+#define IPV6_V6ONLY 27
+#endif
+
#define SOCKET_INVALID (INVALID_SOCKET)
#ifndef SO_REUSEPORT
#define SO_REUSEPORT SO_REUSEADDR
#endif
+#ifndef AI_NUMERICSERV
+#define AI_NUMERICSERV (0)
+#endif
+
#endif /* WSOCKET_H */
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htaccess b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htaccess
new file mode 100644
index 00000000000..2509ae36aa6
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htaccess
@@ -0,0 +1,4 @@
+AuthName "test-auth"
+ AuthType Basic
+ AuthUserFile /home/diego/impa/luasocket/test/auth/.htpasswd
+ Require valid-user
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htpasswd b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htpasswd
new file mode 100644
index 00000000000..cfb26034b78
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/.htpasswd
@@ -0,0 +1 @@
+luasocket:$apr1$47u2O.Me$.m/5BWAtt7GVoxsouIPBR1
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/auth/index.html b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/index.html
new file mode 100644
index 00000000000..786694ef6a0
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/auth/index.html
@@ -0,0 +1,3002 @@
+<html>
+<body>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+</body>
+</html>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat
new file mode 100755
index 00000000000..8d41255ea91
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat
@@ -0,0 +1,6 @@
+#!/bin/sh
+echo Content-type: text/plain
+echo
+
+cat > /tmp/luasocket.cat.tmp
+cat /tmp/luasocket.cat.tmp
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat-index-html b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat-index-html
new file mode 100755
index 00000000000..7595043b1fb
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/cat-index-html
@@ -0,0 +1,5 @@
+#!/bin/sh
+echo Content-type: text/plain
+echo
+
+cat ../index.html
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/env b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/env
new file mode 100755
index 00000000000..412a716ea94
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/env
@@ -0,0 +1,5 @@
+#!/bin/sh
+echo Content-type: text/plain
+echo
+
+env
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/query-string b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/query-string
new file mode 100755
index 00000000000..2342af53292
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/query-string
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo Content-type: text/plain
+echo
+echo $QUERY_STRING
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/redirect-loop b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/redirect-loop
new file mode 100755
index 00000000000..bd32f2048f4
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/redirect-loop
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo Location: http://$HTTP_HOST$REQUEST_URI
+echo
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/request-uri b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/request-uri
new file mode 100755
index 00000000000..20ebe9fedb9
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/cgi/request-uri
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo Content-type: text/plain
+echo
+echo $REQUEST_URI
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/dicttest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/dicttest.lua
new file mode 100644
index 00000000000..a0da2e18432
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/dicttest.lua
@@ -0,0 +1,5 @@
+local dict = require"socket.dict"
+
+print(dict.get("dict://localhost/d:teste"))
+
+for i,v in pairs(dict.get("dict://localhost/d:teste")) do print(v) end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/excepttest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/excepttest.lua
new file mode 100644
index 00000000000..80c9cb80a49
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/excepttest.lua
@@ -0,0 +1,30 @@
+local socket = require("socket")
+
+local finalizer_called
+
+local func = socket.protect(function(err, ...)
+ local try = socket.newtry(function()
+ finalizer_called = true
+ end)
+
+ if err then
+ return error(err, 0)
+ else
+ return try(...)
+ end
+end)
+
+local ret1, ret2, ret3 = func(false, 1, 2, 3)
+assert(not finalizer_called, "unexpected finalizer call")
+assert(ret1 == 1 and ret2 == 2 and ret3 == 3, "incorrect return values")
+
+ret1, ret2, ret3 = func(false, false, "error message")
+assert(finalizer_called, "finalizer not called")
+assert(ret1 == nil and ret2 == "error message" and ret3 == nil, "incorrect return values")
+
+local err = {key = "value"}
+ret1, ret2 = pcall(func, err)
+assert(not ret1, "error not rethrown")
+assert(ret2 == err, "incorrect error rethrown")
+
+print("OK")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/find-connect-limit b/Build/source/texk/web2c/luatexdir/luasocket/test/find-connect-limit
new file mode 100755
index 00000000000..ad0c3f55302
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/find-connect-limit
@@ -0,0 +1,32 @@
+#!/usr/bin/env lua
+--[[
+Find out how many TCP connections we can make.
+
+Use ulimit to increase the max number of descriptors:
+
+ulimit -n 10000
+ulimit -n
+
+You'll probably need to be root to do this.
+]]
+
+require "socket"
+
+host = arg[1] or "google.com"
+port = arg[2] or 80
+
+connections = {}
+
+repeat
+ c = assert(socket.connect(hostip or host, 80))
+ table.insert(connections, c)
+
+ if not hostip then
+ hostip = c:getpeername()
+ print("resolved", host, "to", hostip)
+ end
+
+ print("connection #", #connections, c, "fd", c:getfd())
+
+until false
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/ftptest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/ftptest.lua
new file mode 100644
index 00000000000..3ea0d395909
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/ftptest.lua
@@ -0,0 +1,122 @@
+local socket = require("socket")
+local ftp = require("socket.ftp")
+local url = require("socket.url")
+local ltn12 = require("ltn12")
+
+-- use dscl to create user "luasocket" with password "password"
+-- with home in /Users/diego/luasocket/test/ftp
+-- with group com.apple.access_ftp
+-- with shell set to /sbin/nologin
+-- set /etc/ftpchroot to chroot luasocket
+-- must set group com.apple.access_ftp on user _ftp (for anonymous access)
+-- copy index.html to /var/empty/pub (home of user ftp)
+-- start ftp server with
+-- sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
+-- copy index.html to /Users/diego/luasocket/test/ftp
+-- stop with
+-- sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
+
+-- override protection to make sure we see all errors
+--socket.protect = function(s) return s end
+
+dofile("testsupport.lua")
+
+local host = host or "localhost"
+local port, index_file, index, back, err, ret
+
+local t = socket.gettime()
+
+index_file = "index.html"
+
+-- a function that returns a directory listing
+local function nlst(u)
+ local t = {}
+ local p = url.parse(u)
+ p.command = "nlst"
+ p.sink = ltn12.sink.table(t)
+ local r, e = ftp.get(p)
+ return r and table.concat(t), e
+end
+
+-- function that removes a remote file
+local function dele(u)
+ local p = url.parse(u)
+ p.command = "dele"
+ p.argument = string.gsub(p.path, "^/", "")
+ if p.argumet == "" then p.argument = nil end
+ p.check = 250
+ return ftp.command(p)
+end
+
+-- read index with CRLF convention
+index = readfile(index_file)
+
+io.write("testing wrong scheme: ")
+back, err = ftp.get("wrong://banana.com/lixo")
+assert(not back and err == "wrong scheme 'wrong'", err)
+print("ok")
+
+io.write("testing invalid url: ")
+back, err = ftp.get("localhost/dir1/index.html;type=i")
+assert(not back and err)
+print("ok")
+
+io.write("testing anonymous file download: ")
+back, err = socket.ftp.get("ftp://" .. host .. "/pub/index.html;type=i")
+assert(not err and back == index, err)
+print("ok")
+
+io.write("erasing before upload: ")
+ret, err = dele("ftp://luasocket:password@" .. host .. "/index.up.html")
+if not ret then print(err)
+else print("ok") end
+
+io.write("testing upload: ")
+ret, err = ftp.put("ftp://luasocket:password@" .. host .. "/index.up.html;type=i", index)
+assert(ret and not err, err)
+print("ok")
+
+io.write("downloading uploaded file: ")
+back, err = ftp.get("ftp://luasocket:password@" .. host .. "/index.up.html;type=i")
+assert(ret and not err and index == back, err)
+print("ok")
+
+io.write("erasing after upload/download: ")
+ret, err = dele("ftp://luasocket:password@" .. host .. "/index.up.html")
+assert(ret and not err, err)
+print("ok")
+
+io.write("testing weird-character translation: ")
+back, err = ftp.get("ftp://luasocket:password@" .. host .. "/%23%3f;type=i")
+assert(not err and back == index, err)
+print("ok")
+
+io.write("testing parameter overriding: ")
+local back = {}
+ret, err = ftp.get{
+ url = "//stupid:mistake@" .. host .. "/index.html",
+ user = "luasocket",
+ password = "password",
+ type = "i",
+ sink = ltn12.sink.table(back)
+}
+assert(ret and not err and table.concat(back) == index, err)
+print("ok")
+
+io.write("testing upload denial: ")
+ret, err = ftp.put("ftp://" .. host .. "/index.up.html;type=a", index)
+assert(not ret and err, "should have failed")
+print(err)
+
+io.write("testing authentication failure: ")
+ret, err = ftp.get("ftp://luasocket:wrong@".. host .. "/index.html;type=a")
+assert(not ret and err, "should have failed")
+print(err)
+
+io.write("testing wrong file: ")
+back, err = ftp.get("ftp://".. host .. "/index.wrong.html;type=a")
+assert(not back and err, "should have failed")
+print(err)
+
+print("passed all tests")
+print(string.format("done in %.2fs", socket.gettime() - t))
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/hello.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/hello.lua
new file mode 100644
index 00000000000..3f385dc2424
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/hello.lua
@@ -0,0 +1,3 @@
+local socket = require"socket"
+local mime = require"mime"
+print("Hello from " .. socket._VERSION .. " and " .. mime._VERSION .. "!")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/httptest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/httptest.lua
new file mode 100644
index 00000000000..63ff9217620
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/httptest.lua
@@ -0,0 +1,441 @@
+-- needs Alias from /home/c/diego/tec/luasocket/test to
+-- "/luasocket-test" and "/luasocket-test/"
+-- needs ScriptAlias from /home/c/diego/tec/luasocket/test/cgi
+-- to "/luasocket-test-cgi" and "/luasocket-test-cgi/"
+-- needs "AllowOverride AuthConfig" on /home/c/diego/tec/luasocket/test/auth
+local socket = require("socket")
+local http = require("socket.http")
+local url = require("socket.url")
+
+local mime = require("mime")
+local ltn12 = require("ltn12")
+
+-- override protection to make sure we see all errors
+-- socket.protect = function(s) return s end
+
+dofile("testsupport.lua")
+
+local host, proxy, request, response, index_file
+local ignore, expect, index, prefix, cgiprefix, index_crlf
+
+http.TIMEOUT = 10
+
+local t = socket.gettime()
+
+--host = host or "diego.student.princeton.edu"
+--host = host or "diego.student.princeton.edu"
+host = host or "localhost"
+proxy = proxy or "http://localhost:3128"
+prefix = prefix or "/luasocket-test"
+cgiprefix = cgiprefix or "/luasocket-test-cgi"
+index_file = "index.html"
+
+-- read index with CRLF convention
+index = readfile(index_file)
+
+local check_result = function(response, expect, ignore)
+ for i,v in pairs(response) do
+ if not ignore[i] then
+ if v ~= expect[i] then
+ local f = io.open("err", "w")
+ f:write(tostring(v), "\n\n versus\n\n", tostring(expect[i]))
+ f:close()
+ fail(i .. " differs!")
+ end
+ end
+ end
+ for i,v in pairs(expect) do
+ if not ignore[i] then
+ if v ~= response[i] then
+ local f = io.open("err", "w")
+ f:write(tostring(response[i]), "\n\n versus\n\n", tostring(v))
+ v = string.sub(type(v) == "string" and v or "", 1, 70)
+ f:close()
+ fail(i .. " differs!")
+ end
+ end
+ end
+ print("ok")
+end
+
+local check_request = function(request, expect, ignore)
+ local t
+ if not request.sink then request.sink, t = ltn12.sink.table() end
+ request.source = request.source or
+ (request.body and ltn12.source.string(request.body))
+ local response = {}
+ response.code, response.headers, response.status =
+ socket.skip(1, http.request(request))
+ if t and #t > 0 then response.body = table.concat(t) end
+ check_result(response, expect, ignore)
+end
+
+------------------------------------------------------------------------
+io.write("testing request uri correctness: ")
+local forth = cgiprefix .. "/request-uri?" .. "this+is+the+query+string"
+local back, c, h = http.request("http://" .. host .. forth)
+if not back then fail(c) end
+back = url.parse(back)
+if similar(back.query, "this+is+the+query+string") then print("ok")
+else fail(back.query) end
+
+------------------------------------------------------------------------
+io.write("testing query string correctness: ")
+forth = "this+is+the+query+string"
+back = http.request("http://" .. host .. cgiprefix ..
+ "/query-string?" .. forth)
+if similar(back, forth) then print("ok")
+else fail("failed!") end
+
+------------------------------------------------------------------------
+io.write("testing document retrieval: ")
+request = {
+ url = "http://" .. host .. prefix .. "/index.html"
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing redirect loop: ")
+request = {
+ url = "http://" .. host .. cgiprefix .. "/redirect-loop"
+}
+expect = {
+ code = 302
+}
+ignore = {
+ status = 1,
+ headers = 1,
+ body = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing invalid url: ")
+local r, e = http.request{url = host .. prefix}
+assert(r == nil and e == "invalid host ''")
+r, re = http.request(host .. prefix)
+assert(r == nil and e == re, tostring(r) ..", " .. tostring(re) ..
+ " vs " .. tostring(e))
+print("ok")
+
+io.write("testing invalid empty port: ")
+request = {
+ url = "http://" .. host .. ":" .. prefix .. "/index.html"
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing post method: ")
+-- wanted to test chunked post, but apache doesn't support it...
+request = {
+ url = "http://" .. host .. cgiprefix .. "/cat",
+ method = "POST",
+ body = index,
+ -- remove content-length header to send chunked body
+ headers = { ["content-length"] = string.len(index) }
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+--[[
+io.write("testing proxy with post method: ")
+request = {
+ url = "http://" .. host .. cgiprefix .. "/cat",
+ method = "POST",
+ body = index,
+ headers = { ["content-length"] = string.len(index) },
+ proxy= proxy
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+]]
+
+------------------------------------------------------------------------
+io.write("testing simple post function: ")
+back = http.request("http://" .. host .. cgiprefix .. "/cat", index)
+assert(back == index)
+print("ok")
+
+------------------------------------------------------------------------
+io.write("testing ltn12.(sink|source).file: ")
+request = {
+ url = "http://" .. host .. cgiprefix .. "/cat",
+ method = "POST",
+ source = ltn12.source.file(io.open(index_file, "rb")),
+ sink = ltn12.sink.file(io.open(index_file .. "-back", "wb")),
+ headers = { ["content-length"] = string.len(index) }
+}
+expect = {
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+back = readfile(index_file .. "-back")
+assert(back == index)
+os.remove(index_file .. "-back")
+
+------------------------------------------------------------------------
+io.write("testing ltn12.(sink|source).chain and mime.(encode|decode): ")
+
+local function b64length(len)
+ local a = math.ceil(len/3)*4
+ local l = math.ceil(a/76)
+ return a + l*2
+end
+
+local source = ltn12.source.chain(
+ ltn12.source.file(io.open(index_file, "rb")),
+ ltn12.filter.chain(
+ mime.encode("base64"),
+ mime.wrap("base64")
+ )
+)
+
+local sink = ltn12.sink.chain(
+ mime.decode("base64"),
+ ltn12.sink.file(io.open(index_file .. "-back", "wb"))
+)
+
+request = {
+ url = "http://" .. host .. cgiprefix .. "/cat",
+ method = "POST",
+ source = source,
+ sink = sink,
+ headers = { ["content-length"] = b64length(string.len(index)) }
+}
+expect = {
+ code = 200
+}
+ignore = {
+ body_cb = 1,
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+back = readfile(index_file .. "-back")
+assert(back == index)
+os.remove(index_file .. "-back")
+
+------------------------------------------------------------------------
+io.write("testing http redirection: ")
+request = {
+ url = "http://" .. host .. prefix
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+--[[
+io.write("testing proxy with redirection: ")
+request = {
+ url = "http://" .. host .. prefix,
+ proxy = proxy
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+]]
+
+------------------------------------------------------------------------
+io.write("testing automatic auth failure: ")
+request = {
+ url = "http://really:wrong@" .. host .. prefix .. "/auth/index.html"
+}
+expect = {
+ code = 401
+}
+ignore = {
+ body = 1,
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing http redirection failure: ")
+request = {
+ url = "http://" .. host .. prefix,
+ redirect = false
+}
+expect = {
+ code = 301
+}
+ignore = {
+ body = 1,
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing document not found: ")
+request = {
+ url = "http://" .. host .. "/wrongdocument.html"
+}
+expect = {
+ code = 404
+}
+ignore = {
+ body = 1,
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing auth failure: ")
+request = {
+ url = "http://" .. host .. prefix .. "/auth/index.html"
+}
+expect = {
+ code = 401
+}
+ignore = {
+ body = 1,
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing manual basic auth: ")
+request = {
+ url = "http://" .. host .. prefix .. "/auth/index.html",
+ headers = {
+ authorization = "Basic " .. (mime.b64("luasocket:password"))
+ }
+}
+expect = {
+ code = 200,
+ body = index
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing automatic basic auth: ")
+request = {
+ url = "http://luasocket:password@" .. host .. prefix .. "/auth/index.html"
+}
+expect = {
+ code = 200,
+ body = index
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing auth info overriding: ")
+request = {
+ url = "http://really:wrong@" .. host .. prefix .. "/auth/index.html",
+ user = "luasocket",
+ password = "password"
+}
+expect = {
+ code = 200,
+ body = index
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+io.write("testing cgi output retrieval (probably chunked...): ")
+request = {
+ url = "http://" .. host .. cgiprefix .. "/cat-index-html"
+}
+expect = {
+ body = index,
+ code = 200
+}
+ignore = {
+ status = 1,
+ headers = 1
+}
+check_request(request, expect, ignore)
+
+------------------------------------------------------------------------
+local body
+io.write("testing simple request function: ")
+body = http.request("http://" .. host .. prefix .. "/index.html")
+assert(body == index)
+print("ok")
+
+------------------------------------------------------------------------
+io.write("testing HEAD method: ")
+local r, c, h = http.request {
+ method = "HEAD",
+ url = "http://www.tecgraf.puc-rio.br/~diego/"
+}
+assert(r and h and (c == 200), c)
+print("ok")
+
+------------------------------------------------------------------------
+io.write("testing host not found: ")
+local c, e = socket.connect("example.invalid", 80)
+local r, re = http.request{url = "http://example.invalid/does/not/exist"}
+assert(r == nil and e == re, tostring(r) .. " " .. tostring(re))
+r, re = http.request("http://example.invalid/does/not/exist")
+assert(r == nil and e == re)
+print("ok")
+
+------------------------------------------------------------------------
+print("passed all tests")
+os.remove("err")
+
+print(string.format("done in %.2fs", socket.gettime() - t))
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/index.html b/Build/source/texk/web2c/luatexdir/luasocket/test/index.html
new file mode 100644
index 00000000000..786694ef6a0
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/index.html
@@ -0,0 +1,3002 @@
+<html>
+<body>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+This document can contain anything, as long as it is long enough! <br>
+</body>
+</html>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/ltn12test.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/ltn12test.lua
new file mode 100644
index 00000000000..e3f85fb40a4
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/ltn12test.lua
@@ -0,0 +1,299 @@
+local ltn12 = require("ltn12")
+
+dofile("testsupport.lua")
+
+local function format(chunk)
+ if chunk then
+ if chunk == "" then return "''"
+ else return string.len(chunk) end
+ else return "nil" end
+end
+
+local function show(name, input, output)
+ local sin = format(input)
+ local sout = format(output)
+ io.write(name, ": ", sin, " -> ", sout, "\n")
+end
+
+local function chunked(length)
+ local tmp
+ return function(chunk)
+ local ret
+ if chunk and chunk ~= "" then
+ tmp = chunk
+ end
+ ret = string.sub(tmp, 1, length)
+ tmp = string.sub(tmp, length+1)
+ if not chunk and ret == "" then ret = nil end
+ return ret
+ end
+end
+
+local function named(f, name)
+ return function(chunk)
+ local ret = f(chunk)
+ show(name, chunk, ret)
+ return ret
+ end
+end
+
+--------------------------------
+local function split(size)
+ local buffer = ""
+ local last_out = ""
+ local last_in = ""
+ local function output(chunk)
+ local part = string.sub(buffer, 1, size)
+ buffer = string.sub(buffer, size+1)
+ last_out = (part ~= "" or chunk) and part
+ last_in = chunk
+ return last_out
+ end
+ return function(chunk, done)
+ if done then
+ return not last_in and not last_out
+ end
+ -- check if argument is consistent with state
+ if not chunk then
+ if last_in and last_in ~= "" and last_out ~= "" then
+ error("nil chunk following data chunk", 2)
+ end
+ if not last_out then error("extra nil chunk", 2) end
+ return output(chunk)
+ elseif chunk == "" then
+ if last_out == "" then error('extra "" chunk', 2) end
+ if not last_out then error('"" chunk following nil return', 2) end
+ if not last_in then error('"" chunk following nil chunk', 2) end
+ return output(chunk)
+ else
+ if not last_in then error("data chunk following nil chunk", 2) end
+ if last_in ~= "" and last_out ~= "" then
+ error("data chunk following data chunk", 2)
+ end
+ buffer = chunk
+ return output(chunk)
+ end
+ end
+end
+
+--------------------------------
+local function format(chunk)
+ if chunk then
+ if chunk == "" then return "''"
+ else return string.len(chunk) end
+ else return "nil" end
+end
+
+--------------------------------
+local function merge(size)
+ local buffer = ""
+ local last_out = ""
+ local last_in = ""
+ local function output(chunk)
+ local part
+ if string.len(buffer) >= size or not chunk then
+ part = buffer
+ buffer = ""
+ else
+ part = ""
+ end
+ last_out = (part ~= "" or chunk) and part
+ last_in = chunk
+ return last_out
+ end
+ return function(chunk, done)
+ if done then
+ return not last_in and not last_out
+ end
+ -- check if argument is consistent with state
+ if not chunk then
+ if last_in and last_in ~= "" and last_out ~= "" then
+ error("nil chunk following data chunk", 2)
+ end
+ if not last_out then error("extra nil chunk", 2) end
+ return output(chunk)
+ elseif chunk == "" then
+ if last_out == "" then error('extra "" chunk', 2) end
+ if not last_out then error('"" chunk following nil return', 2) end
+ if not last_in then error('"" chunk following nil chunk', 2) end
+ return output(chunk)
+ else
+ if not last_in then error("data chunk following nil chunk", 2) end
+ if last_in ~= "" and last_out ~= "" then
+ error("data chunk following data chunk", 2)
+ end
+ buffer = buffer .. chunk
+ return output(chunk)
+ end
+ end
+end
+
+--------------------------------
+io.write("testing sink.table: ")
+local sink, t = ltn12.sink.table()
+local s, c = "", ""
+for i = 0, 10 do
+ c = string.rep(string.char(i), i)
+ s = s .. c
+ assert(sink(c), "returned error")
+end
+assert(sink(nil), "returned error")
+assert(table.concat(t) == s, "mismatch")
+print("ok")
+
+--------------------------------
+io.write("testing sink.chain (with split): ")
+sink, t = ltn12.sink.table()
+local filter = split(3)
+sink = ltn12.sink.chain(filter, sink)
+s = "123456789012345678901234567890"
+assert(sink(s), "returned error")
+assert(sink(s), "returned error")
+assert(sink(nil), "returned error")
+assert(table.concat(t) == s .. s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+print("ok")
+
+--------------------------------
+io.write("testing sink.chain (with merge): ")
+sink, t = ltn12.sink.table()
+filter = merge(10)
+sink = ltn12.sink.chain(filter, sink)
+s = string.rep("123", 30)
+s = s .. string.rep("4321", 30)
+for i = 1, 30 do
+ assert(sink("123"), "returned error")
+end
+for i = 1, 30 do
+ assert(sink("4321"), "returned error")
+end
+assert(sink(nil), "returned error")
+assert(filter(nil, 1), "filter not empty")
+assert(table.concat(t) == s, "mismatch")
+print("ok")
+
+--------------------------------
+io.write("testing source.string and pump.all: ")
+local source = ltn12.source.string(s)
+sink, t = ltn12.sink.table()
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == s, "mismatch")
+print("ok")
+
+--------------------------------
+io.write("testing source.chain (with split): ")
+source = ltn12.source.string(s)
+filter = split(5)
+source = ltn12.source.chain(source, filter)
+sink, t = ltn12.sink.table()
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+print("ok")
+
+--------------------------------
+io.write("testing source.chain (with several filters): ")
+local function double(x) -- filter turning "ABC" into "AABBCC"
+ if not x then return end
+ local b={}
+ for k in x:gmatch'.' do table.insert(b, k..k) end
+ return table.concat(b)
+end
+source = ltn12.source.string(s)
+source = ltn12.source.chain(source, double, double, double)
+sink, t = ltn12.sink.table()
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == double(double(double(s))), "mismatch")
+print("ok")
+
+--------------------------------
+io.write("testing source.chain (with split) and sink.chain (with merge): ")
+source = ltn12.source.string(s)
+filter = split(5)
+source = ltn12.source.chain(source, filter)
+local filter2 = merge(13)
+sink, t = ltn12.sink.table()
+sink = ltn12.sink.chain(filter2, sink)
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+assert(filter2(nil, 1), "filter2 not empty")
+print("ok")
+
+--------------------------------
+io.write("testing sink.chain (with several filters): ")
+source = ltn12.source.string(s)
+sink, t = ltn12.sink.table()
+sink = ltn12.sink.chain(double, double, double, sink)
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == double(double(double(s))), "mismatch")
+print("ok")
+
+--------------------------------
+io.write("testing filter.chain (and sink.chain, with split, merge): ")
+source = ltn12.source.string(s)
+filter = split(5)
+filter2 = merge(13)
+local chain = ltn12.filter.chain(filter, filter2)
+sink, t = ltn12.sink.table()
+sink = ltn12.sink.chain(chain, sink)
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+assert(filter2(nil, 1), "filter2 not empty")
+print("ok")
+
+--------------------------------
+io.write("testing filter.chain (and sink.chain, a bunch): ")
+source = ltn12.source.string(s)
+filter = split(5)
+filter2 = merge(13)
+local filter3 = split(7)
+local filter4 = merge(11)
+local filter5 = split(10)
+chain = ltn12.filter.chain(filter, filter2, filter3, filter4, filter5)
+sink, t = ltn12.sink.table()
+sink = ltn12.sink.chain(chain, sink)
+assert(ltn12.pump.all(source, sink))
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+assert(filter2(nil, 1), "filter2 not empty")
+assert(filter3(nil, 1), "filter3 not empty")
+assert(filter4(nil, 1), "filter4 not empty")
+assert(filter5(nil, 1), "filter5 not empty")
+print("ok")
+
+--------------------------------
+io.write("testing filter.chain (and source.chain, with split, merge): ")
+source = ltn12.source.string(s)
+filter = split(5)
+filter2 = merge(13)
+local chain = ltn12.filter.chain(filter, filter2)
+sink, t = ltn12.sink.table()
+source = ltn12.source.chain(source, chain)
+assert(ltn12.pump.all(source, sink), "returned error")
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+assert(filter2(nil, 1), "filter2 not empty")
+print("ok")
+
+--------------------------------
+io.write("testing filter.chain (and source.chain, a bunch): ")
+source = ltn12.source.string(s)
+filter = split(5)
+filter2 = merge(13)
+local filter3 = split(7)
+local filter4 = merge(11)
+local filter5 = split(10)
+chain = ltn12.filter.chain(filter, filter2, filter3, filter4, filter5)
+sink, t = ltn12.sink.table()
+source = ltn12.source.chain(source, chain)
+assert(ltn12.pump.all(source, sink))
+assert(table.concat(t) == s, "mismatch")
+assert(filter(nil, 1), "filter not empty")
+assert(filter2(nil, 1), "filter2 not empty")
+assert(filter3(nil, 1), "filter3 not empty")
+assert(filter4(nil, 1), "filter4 not empty")
+assert(filter5(nil, 1), "filter5 not empty")
+print("ok")
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/luasocket.png b/Build/source/texk/web2c/luatexdir/luasocket/test/luasocket.png
new file mode 100644
index 00000000000..d24a95495b5
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/luasocket.png
Binary files differ
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/mimetest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/mimetest.lua
new file mode 100644
index 00000000000..f5b37471e04
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/mimetest.lua
@@ -0,0 +1,299 @@
+local socket = require("socket")
+local ltn12 = require("ltn12")
+local mime = require("mime")
+
+local unpack = unpack or table.unpack
+
+dofile("testsupport.lua")
+
+local qptest = "qptest.bin"
+local eqptest = "qptest.bin2"
+local dqptest = "qptest.bin3"
+
+local b64test = "b64test.bin"
+local eb64test = "b64test.bin2"
+local db64test = "b64test.bin3"
+
+
+-- from Machado de Assis, "A Mão e a Rosa"
+local mao = [[
+ Cursavam estes dois moços a academia de S. Paulo, estando
+ Luís Alves no quarto ano e Estêvão no terceiro.
+ Conheceram-se na academia, e ficaram amigos íntimos, tanto
+ quanto podiam sê-lo dois espíritos diferentes, ou talvez por
+ isso mesmo que o eram. Estêvão, dotado de extrema
+ sensibilidade, e não menor fraqueza de ânimo, afetuoso e
+ bom, não daquela bondade varonil, que é apanágio de uma alma
+ forte, mas dessa outra bondade mole e de cera, que vai à
+ mercê de todas as circunstâncias, tinha, além de tudo isso,
+ o infortúnio de trazer ainda sobre o nariz os óculos
+ cor-de-rosa de suas virginais ilusões. Luís Alves via bem
+ com os olhos da cara. Não era mau rapaz, mas tinha o seu
+ grão de egoísmo, e se não era incapaz de afeições, sabia
+ regê-las, moderá-las, e sobretudo guiá-las ao seu próprio
+ interesse. Entre estes dois homens travara-se amizade
+ íntima, nascida para um na simpatia, para outro no costume.
+ Eram eles os naturais confidentes um do outro, com a
+ diferença que Luís Alves dava menos do que recebia, e, ainda
+ assim, nem tudo o que dava exprimia grande confiança.
+]]
+
+local function random(handle, io_err)
+ if handle then
+ return function()
+ if not handle then error("source is empty!", 2) end
+ local len = math.random(0, 1024)
+ local chunk = handle:read(len)
+ if not chunk then
+ handle:close()
+ handle = nil
+ end
+ return chunk
+ end
+ else return ltn12.source.empty(io_err or "unable to open file") end
+end
+
+
+local function named(f)
+ return f
+end
+
+local what = nil
+local function transform(input, output, filter)
+ local source = random(io.open(input, "rb"))
+ local sink = ltn12.sink.file(io.open(output, "wb"))
+ if what then
+ sink = ltn12.sink.chain(filter, sink)
+ else
+ source = ltn12.source.chain(source, filter)
+ end
+ --what = not what
+ ltn12.pump.all(source, sink)
+end
+
+local function encode_qptest(mode)
+ local encode = mime.encode("quoted-printable", mode)
+ local split = mime.wrap("quoted-printable")
+ local chain = ltn12.filter.chain(encode, split)
+ transform(qptest, eqptest, chain)
+end
+
+local function compare_qptest()
+io.write("testing qp encoding and wrap: ")
+ compare(qptest, dqptest)
+end
+
+local function decode_qptest()
+ local decode = mime.decode("quoted-printable")
+ transform(eqptest, dqptest, decode)
+end
+
+local function create_qptest()
+ local f, err = io.open(qptest, "wb")
+ if not f then fail(err) end
+ -- try all characters
+ for i = 0, 255 do
+ f:write(string.char(i))
+ end
+ -- try all characters and different line sizes
+ for i = 0, 255 do
+ for j = 0, i do
+ f:write(string.char(i))
+ end
+ f:write("\r\n")
+ end
+ -- test latin text
+ f:write(mao)
+ -- force soft line breaks and treatment of space/tab in end of line
+ local tab
+ f:write(string.gsub(mao, "(%s)", function(c)
+ if tab then
+ tab = nil
+ return "\t"
+ else
+ tab = 1
+ return " "
+ end
+ end))
+ -- test crazy end of line conventions
+ local eol = { "\r\n", "\r", "\n", "\n\r" }
+ local which = 0
+ f:write(string.gsub(mao, "(\n)", function(c)
+ which = which + 1
+ if which > 4 then which = 1 end
+ return eol[which]
+ end))
+ for i = 1, 4 do
+ for j = 1, 4 do
+ f:write(eol[i])
+ f:write(eol[j])
+ end
+ end
+ -- try long spaced and tabbed lines
+ f:write("\r\n")
+ for i = 0, 255 do
+ f:write(string.char(9))
+ end
+ f:write("\r\n")
+ for i = 0, 255 do
+ f:write(' ')
+ end
+ f:write("\r\n")
+ for i = 0, 255 do
+ f:write(string.char(9),' ')
+ end
+ f:write("\r\n")
+ for i = 0, 255 do
+ f:write(' ',string.char(32))
+ end
+ f:write("\r\n")
+
+ f:close()
+end
+
+local function cleanup_qptest()
+ os.remove(qptest)
+ os.remove(eqptest)
+ os.remove(dqptest)
+end
+
+-- create test file
+local function create_b64test()
+ local f = assert(io.open(b64test, "wb"))
+ local t = {}
+ for j = 1, 100 do
+ for i = 1, 100 do
+ t[i] = math.random(0, 255)
+ end
+ f:write(string.char(unpack(t)))
+ end
+ f:close()
+end
+
+local function encode_b64test()
+ local e1 = mime.encode("base64")
+ local e2 = mime.encode("base64")
+ local e3 = mime.encode("base64")
+ local e4 = mime.encode("base64")
+ local sp4 = mime.wrap()
+ local sp3 = mime.wrap(59)
+ local sp2 = mime.wrap("base64", 30)
+ local sp1 = mime.wrap(27)
+ local chain = ltn12.filter.chain(e1, sp1, e2, sp2, e3, sp3, e4, sp4)
+ transform(b64test, eb64test, chain)
+end
+
+local function decode_b64test()
+ local d1 = named(mime.decode("base64"), "d1")
+ local d2 = named(mime.decode("base64"), "d2")
+ local d3 = named(mime.decode("base64"), "d3")
+ local d4 = named(mime.decode("base64"), "d4")
+ local chain = named(ltn12.filter.chain(d1, d2, d3, d4), "chain")
+ transform(eb64test, db64test, chain)
+end
+
+local function cleanup_b64test()
+ os.remove(b64test)
+ os.remove(eb64test)
+ os.remove(db64test)
+end
+
+local function compare_b64test()
+io.write("testing b64 chained encode: ")
+ compare(b64test, db64test)
+end
+
+local function identity_test()
+io.write("testing identity: ")
+ local chain = named(ltn12.filter.chain(
+ named(mime.encode("quoted-printable"), "1 eq"),
+ named(mime.encode("base64"), "2 eb"),
+ named(mime.decode("base64"), "3 db"),
+ named(mime.decode("quoted-printable"), "4 dq")
+ ), "chain")
+ transform(b64test, eb64test, chain)
+ compare(b64test, eb64test)
+ os.remove(eb64test)
+end
+
+
+local function padcheck(original, encoded)
+ local e = (mime.b64(original))
+ local d = (mime.unb64(encoded))
+ if e ~= encoded then fail("encoding failed") end
+ if d ~= original then fail("decoding failed") end
+end
+
+local function chunkcheck(original, encoded)
+ local len = string.len(original)
+ for i = 0, len do
+ local a = string.sub(original, 1, i)
+ local b = string.sub(original, i+1)
+ local e, r = mime.b64(a, b)
+ local f = (mime.b64(r))
+ if (e .. (f or "") ~= encoded) then fail(e .. (f or "")) end
+ end
+end
+
+local function padding_b64test()
+io.write("testing b64 padding: ")
+ padcheck("a", "YQ==")
+ padcheck("ab", "YWI=")
+ padcheck("abc", "YWJj")
+ padcheck("abcd", "YWJjZA==")
+ padcheck("abcde", "YWJjZGU=")
+ padcheck("abcdef", "YWJjZGVm")
+ padcheck("abcdefg", "YWJjZGVmZw==")
+ padcheck("abcdefgh", "YWJjZGVmZ2g=")
+ padcheck("abcdefghi", "YWJjZGVmZ2hp")
+ padcheck("abcdefghij", "YWJjZGVmZ2hpag==")
+ chunkcheck("abcdefgh", "YWJjZGVmZ2g=")
+ chunkcheck("abcdefghi", "YWJjZGVmZ2hp")
+ chunkcheck("abcdefghij", "YWJjZGVmZ2hpag==")
+ print("ok")
+end
+
+local function test_b64lowlevel()
+io.write("testing b64 low-level: ")
+ local a, b
+ a, b = mime.b64("", "")
+ assert(a == "" and b == "")
+ a, b = mime.b64(nil, "blablabla")
+ assert(a == nil and b == nil)
+ a, b = mime.b64("", nil)
+ assert(a == nil and b == nil)
+ a, b = mime.unb64("", "")
+ assert(a == "" and b == "")
+ a, b = mime.unb64(nil, "blablabla")
+ assert(a == nil and b == nil)
+ a, b = mime.unb64("", nil)
+ assert(a == nil and b == nil)
+ local binary=string.char(0x00,0x44,0x1D,0x14,0x0F,0xF4,0xDA,0x11,0xA9,0x78,0x00,0x14,0x38,0x50,0x60,0xCE)
+ local encoded = mime.b64(binary)
+ local decoded=mime.unb64(encoded)
+ assert(binary == decoded)
+ print("ok")
+end
+
+local t = socket.gettime()
+
+create_b64test()
+identity_test()
+encode_b64test()
+decode_b64test()
+compare_b64test()
+cleanup_b64test()
+padding_b64test()
+test_b64lowlevel()
+
+create_qptest()
+encode_qptest()
+decode_qptest()
+compare_qptest()
+encode_qptest("binary")
+decode_qptest()
+compare_qptest()
+cleanup_qptest()
+
+
+print(string.format("done in %.2fs", socket.gettime() - t))
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/smtptest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/smtptest.lua
new file mode 100644
index 00000000000..b5380ffc65a
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/smtptest.lua
@@ -0,0 +1,259 @@
+local sent = {}
+
+local from = "diego@localhost"
+local server = "localhost"
+local rcpt = "luasocket@localhost"
+
+local files = {
+ "/var/spool/mail/luasocket",
+ "/var/spool/mail/luasock1",
+ "/var/spool/mail/luasock2",
+ "/var/spool/mail/luasock3",
+}
+
+local t = socket.time()
+local err
+
+dofile("mbox.lua")
+local parse = mbox.parse
+dofile("testsupport.lua")
+
+local total = function()
+ local t = 0
+ for i = 1, #sent do
+ t = t + sent[i].count
+ end
+ return t
+end
+
+local similar = function(s1, s2)
+ return
+ string.lower(string.gsub(s1, "%s", "")) ==
+ string.lower(string.gsub(s2, "%s", ""))
+end
+
+local fail = function(s)
+ s = s or "failed!"
+ print(s)
+ os.exit()
+end
+
+local readfile = function(name)
+ local f = io.open(name, "r")
+ if not f then
+ fail("unable to open file!")
+ return nil
+ end
+ local s = f:read("*a")
+ f:close()
+ return s
+end
+
+local empty = function()
+ for i,v in ipairs(files) do
+ local f = io.open(v, "w")
+ if not f then
+ fail("unable to open file!")
+ end
+ f:close()
+ end
+end
+
+local get = function()
+ local s = ""
+ for i,v in ipairs(files) do
+ s = s .. "\n" .. readfile(v)
+ end
+ return s
+end
+
+local check_headers = function(sent, got)
+ sent = sent or {}
+ got = got or {}
+ for i,v in pairs(sent) do
+ if not similar(v, got[i]) then fail("header " .. v .. "failed!") end
+ end
+end
+
+local check_body = function(sent, got)
+ sent = sent or ""
+ got = got or ""
+ if not similar(sent, got) then fail("bodies differ!") end
+end
+
+local check = function(sent, m)
+ io.write("checking ", m.headers.title, ": ")
+ for i = 1, #sent do
+ local s = sent[i]
+ if s.title == m.headers.title and s.count > 0 then
+ check_headers(s.headers, m.headers)
+ check_body(s.body, m.body)
+ s.count = s.count - 1
+ print("ok")
+ return
+ end
+ end
+ fail("not found")
+end
+
+local insert = function(sent, message)
+ if type(message.rcpt) == "table" then
+ message.count = #message.rcpt
+ else message.count = 1 end
+ message.headers = message.headers or {}
+ message.headers.title = message.title
+ table.insert(sent, message)
+end
+
+local mark = function()
+ local time = socket.time()
+ return { time = time }
+end
+
+local wait = function(sentinel, n)
+ local to
+ io.write("waiting for ", n, " messages: ")
+ while 1 do
+ local mbox = parse(get())
+ if n == #mbox then break end
+ if socket.time() - sentinel.time > 50 then
+ to = 1
+ break
+ end
+ socket.sleep(1)
+ io.write(".")
+ io.stdout:flush()
+ end
+ if to then fail("timeout")
+ else print("ok") end
+end
+
+local stuffed_body = [[
+This message body needs to be
+stuffed because it has a dot
+.
+by itself on a line.
+Otherwise the mailer would
+think that the dot
+.
+is the end of the message
+and the remaining text would cause
+a lot of trouble.
+]]
+
+insert(sent, {
+ from = from,
+ rcpt = {
+ "luasocket@localhost",
+ "luasock3@dell-diego.cs.princeton.edu",
+ "luasock1@dell-diego.cs.princeton.edu"
+ },
+ body = "multiple rcpt body",
+ title = "multiple rcpt",
+})
+
+insert(sent, {
+ from = from,
+ rcpt = {
+ "luasock2@localhost",
+ "luasock3",
+ "luasock1"
+ },
+ headers = {
+ header1 = "header 1",
+ header2 = "header 2",
+ header3 = "header 3",
+ header4 = "header 4",
+ header5 = "header 5",
+ header6 = "header 6",
+ },
+ body = stuffed_body,
+ title = "complex message",
+})
+
+insert(sent, {
+ from = from,
+ rcpt = rcpt,
+ server = server,
+ body = "simple message body",
+ title = "simple message"
+})
+
+insert(sent, {
+ from = from,
+ rcpt = rcpt,
+ server = server,
+ body = stuffed_body,
+ title = "stuffed message body"
+})
+
+insert(sent, {
+ from = from,
+ rcpt = rcpt,
+ headers = {
+ header1 = "header 1",
+ header2 = "header 2",
+ header3 = "header 3",
+ header4 = "header 4",
+ header5 = "header 5",
+ header6 = "header 6",
+ },
+ title = "multiple headers"
+})
+
+insert(sent, {
+ from = from,
+ rcpt = rcpt,
+ title = "minimum message"
+})
+
+io.write("testing host not found: ")
+local c, e = socket.connect("wrong.host", 25)
+local ret, err = socket.smtp.mail{
+ from = from,
+ rcpt = rcpt,
+ server = "wrong.host"
+}
+if ret or e ~= err then fail("wrong error message")
+else print("ok") end
+
+io.write("testing invalid from: ")
+local ret, err = socket.smtp.mail{
+ from = ' " " (( _ * ',
+ rcpt = rcpt,
+}
+if ret or not err then fail("wrong error message")
+else print(err) end
+
+io.write("testing no rcpt: ")
+local ret, err = socket.smtp.mail{
+ from = from,
+}
+if ret or not err then fail("wrong error message")
+else print(err) end
+
+io.write("clearing mailbox: ")
+empty()
+print("ok")
+
+io.write("sending messages: ")
+for i = 1, #sent do
+ ret, err = socket.smtp.mail(sent[i])
+ if not ret then fail(err) end
+ io.write("+")
+ io.stdout:flush()
+end
+print("ok")
+
+wait(mark(), total())
+
+io.write("parsing mailbox: ")
+local mbox = parse(get())
+print(#mbox .. " messages found!")
+
+for i = 1, #mbox do
+ check(sent, mbox[i])
+end
+
+print("passed all tests")
+print(string.format("done in %.2fs", socket.time() - t))
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/stufftest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/stufftest.lua
new file mode 100644
index 00000000000..490053f2805
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/stufftest.lua
@@ -0,0 +1,21 @@
+local mime = require("mime")
+
+function test_dot(original, right)
+ local result, n = mime.dot(2, original)
+ assert(result == right, "->" .. result .. "<-")
+ print("ok")
+end
+
+function test_stuff(original, right)
+ local result, n = mime.dot(2, original)
+ assert(result == right, "->" .. result .. "<-")
+ print("ok")
+end
+
+test_dot("abc", "abc")
+test_dot("", "")
+test_dot("\r\n", "\r\n")
+test_dot("\r\n.", "\r\n..")
+test_dot(".\r\n.", "..\r\n..")
+test_dot(".\r\n.", "..\r\n..")
+test_dot("abcd.\r\n.", "abcd.\r\n..")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/tcp-getoptions b/Build/source/texk/web2c/luatexdir/luasocket/test/tcp-getoptions
new file mode 100755
index 00000000000..f9b3d1bb8a4
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/tcp-getoptions
@@ -0,0 +1,41 @@
+#!/usr/bin/env lua
+
+require"socket"
+
+port = 8765
+
+function options(o)
+ print("options for", o)
+
+ for _, opt in ipairs{"keepalive", "reuseaddr", "tcp-nodelay"} do
+ print("getoption", opt, o:getoption(opt))
+ end
+
+ print("getoption", "linger",
+ "on", o:getoption("linger").on,
+ "timeout", o:getoption("linger").timeout)
+end
+
+local m = socket.tcp()
+
+options(m)
+
+assert(m:bind("*", port))
+assert(m:listen())
+
+options(m)
+
+m:close()
+
+local m = socket.bind("*", port)
+
+options(m)
+
+local c = socket.connect("localhost", port)
+
+options(c)
+
+local s = m:accept()
+
+options(s)
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/test_bind.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/test_bind.lua
new file mode 100644
index 00000000000..93c42d7291e
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/test_bind.lua
@@ -0,0 +1,6 @@
+local socket = require "socket"
+local u = socket.udp() assert(u:setsockname("*", 5088)) u:close()
+local u = socket.udp() assert(u:setsockname("*", 0)) u:close()
+local t = socket.tcp() assert(t:bind("*", 5088)) t:close()
+local t = socket.tcp() assert(t:bind("*", 0)) t:close()
+print("done!") \ No newline at end of file
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/test_getaddrinfo.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/test_getaddrinfo.lua
new file mode 100644
index 00000000000..4b52ff924fc
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/test_getaddrinfo.lua
@@ -0,0 +1,15 @@
+local socket = require "socket"
+local addresses = assert(socket.dns.getaddrinfo("localhost"))
+assert(type(addresses) == 'table')
+
+local ipv4mask = "^%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?$"
+
+for i, alt in ipairs(addresses) do
+ if alt.family == 'inet' then
+ assert(type(alt.addr) == 'string')
+ assert(alt.addr:find(ipv4mask))
+ assert(alt.addr == '127.0.0.1')
+ end
+end
+
+print("done!")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/test_socket_error.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/test_socket_error.lua
new file mode 100644
index 00000000000..bda64081d07
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/test_socket_error.lua
@@ -0,0 +1,31 @@
+local socket = require "socket"
+
+local host, port = "127.0.0.1", "5462"
+
+assert(socket.bind(host, port)):close()
+
+local sock = socket.tcp()
+sock:settimeout(0)
+
+local ok, err = sock:connect(host, port)
+assert(not ok)
+assert('timeout' == err)
+
+for i = 1, 10 do
+ -- select pass even if socket has error
+ local _, rec, err = socket.select(nil, {sock}, 1)
+ local _, ss = next(rec)
+ if ss then
+ assert(ss == sock)
+ else
+ assert('timeout' == err, 'unexpected error :' .. tostring(err))
+ end
+ err = sock:getoption("error") -- i get 'connection refused' on WinXP
+ if err then
+ print("Passed! Error is '" .. err .. "'.")
+ os.exit(0)
+ end
+end
+
+print("Fail! No error detected!")
+os.exit(1)
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/testclnt.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/testclnt.lua
index 8acb3d04bac..170e1878b03 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/test/testclnt.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/testclnt.lua
@@ -8,7 +8,7 @@ function printf(...)
end
function pass(...)
- printf(...)
+ printf(...)
io.stderr:write("\n")
end
@@ -45,30 +45,30 @@ function check_timeout(tm, sl, elapsed, err, opp, mode, alldone)
if not err then warn("must be buffered")
elseif err == "timeout" then pass("proper timeout")
else fail("unexpected error '%s'", err) end
- else
- if err ~= "timeout" then fail("should have timed out")
+ else
+ if err ~= "timeout" then fail("should have timed out")
else pass("proper timeout") end
end
else
if mode == "total" then
- if elapsed > tm then
+ if elapsed > tm then
if err ~= "timeout" then fail("should have timed out")
else pass("proper timeout") end
elseif elapsed < tm then
- if err then fail(err)
+ if err then fail(err)
else pass("ok") end
- else
- if alldone then
- if err then fail("unexpected error '%s'", err)
+ else
+ if alldone then
+ if err then fail("unexpected error '%s'", err)
else pass("ok") end
else
- if err ~= "timeout" then fail(err)
+ if err ~= "timeout" then fail(err)
else pass("proper timeoutk") end
end
end
- else
- if err then fail(err)
- else pass("ok") end
+ else
+ if err then fail(err)
+ else pass("ok") end
end
end
end
@@ -104,8 +104,8 @@ control:setoption("tcp-nodelay", true)
------------------------------------------------------------------------
function test_methods(sock, methods)
for _, v in pairs(methods) do
- if type(sock[v]) ~= "function" then
- fail(sock.class .. " method '" .. v .. "' not registered")
+ if type(sock[v]) ~= "function" then
+ fail(sock.class .. " method '" .. v .. "' not registered")
end
end
pass(sock.class .. " methods are ok")
@@ -121,7 +121,7 @@ function test_mixed(len)
local p3 = "raw " .. string.rep("z", inter) .. "bytes"
local p4 = "end" .. string.rep("w", inter) .. "bytes"
local bp1, bp2, bp3, bp4
-remote (string.format("str = data:receive(%d)",
+remote (string.format("str = data:receive(%d)",
string.len(p1)+string.len(p2)+string.len(p3)+string.len(p4)))
sent, err = data:send(p1..p2..p3..p4)
if err then fail(err) end
@@ -166,7 +166,7 @@ function test_rawline(len)
io.stderr:write("length " .. len .. ": ")
local str, str10, back, err
str = string.rep(string.char(47), math.mod(len, 10))
- str10 = string.rep(string.char(120,21,77,4,5,0,7,36,44,100),
+ str10 = string.rep(string.char(120,21,77,4,5,0,7,36,44,100),
math.floor(len/10))
str = str .. str10
remote "str = data:receive()"
@@ -216,7 +216,7 @@ function test_totaltimeoutreceive(len, tm, sl)
data:settimeout(tm, "total")
local t = socket.gettime()
str, err, partial, elapsed = data:receive(2*len)
- check_timeout(tm, sl, elapsed, err, "receive", "total",
+ check_timeout(tm, sl, elapsed, err, "receive", "total",
string.len(str or partial) == 2*len)
end
@@ -236,7 +236,7 @@ function test_totaltimeoutsend(len, tm, sl)
data:settimeout(tm, "total")
str = string.rep("a", 2*len)
total, err, partial, elapsed = data:send(str)
- check_timeout(tm, sl, elapsed, err, "send", "total",
+ check_timeout(tm, sl, elapsed, err, "send", "total",
total == 2*len)
end
@@ -256,7 +256,7 @@ function test_blockingtimeoutreceive(len, tm, sl)
]], 2*tm, len, sl, sl))
data:settimeout(tm)
str, err, partial, elapsed = data:receive(2*len)
- check_timeout(tm, sl, elapsed, err, "receive", "blocking",
+ check_timeout(tm, sl, elapsed, err, "receive", "blocking",
string.len(str or partial) == 2*len)
end
@@ -290,10 +290,10 @@ function empty_connect()
data = server:accept()
]]
data, err = socket.connect("", port)
- if not data then
+ if not data then
pass("ok")
data = socket.connect(host, port)
- else
+ else
pass("gethostbyname returns localhost on empty string...")
end
end
@@ -304,15 +304,20 @@ function isclosed(c)
end
function active_close()
- reconnect()
- if isclosed(data) then fail("should not be closed") end
- data:close()
- if not isclosed(data) then fail("should be closed") end
- data = nil
- local udp = socket.udp()
+ local tcp = socket.tcp4()
+ if isclosed(tcp) then fail("should not be closed") end
+ tcp:close()
+ if not isclosed(tcp) then fail("should be closed") end
+ tcp = socket.tcp()
+ if not isclosed(tcp) then fail("should be closed") end
+ tcp = nil
+ local udp = socket.udp4()
if isclosed(udp) then fail("should not be closed") end
udp:close()
if not isclosed(udp) then fail("should be closed") end
+ udp = socket.udp()
+ if not isclosed(udp) then fail("should be closed") end
+ udp = nil
pass("ok")
end
@@ -327,7 +332,7 @@ function test_closed()
data:close()
data = nil
]], str))
- -- try to get a line
+ -- try to get a line
back, err, partial = data:receive()
if not err then fail("should have gotten 'closed'.")
elseif err ~= "closed" then fail("got '"..err.."' instead of 'closed'.")
@@ -340,25 +345,25 @@ function test_closed()
data = nil
]]
total, err, partial = data:send(string.rep("ugauga", 100000))
- if not err then
+ if not err then
pass("failed: output buffer is at least %d bytes long!", total)
- elseif err ~= "closed" then
+ elseif err ~= "closed" then
fail("got '"..err.."' instead of 'closed'.")
- else
- pass("graceful 'closed' received after %d bytes were sent", partial)
+ else
+ pass("graceful 'closed' received after %d bytes were sent", partial)
end
end
------------------------------------------------------------------------
function test_selectbugs()
local r, s, e = socket.select(nil, nil, 0.1)
- assert(type(r) == "table" and type(s) == "table" and
+ assert(type(r) == "table" and type(s) == "table" and
(e == "timeout" or e == "error"))
pass("both nil: ok")
local udp = socket.udp()
udp:close()
r, s, e = socket.select({ udp }, { udp }, 0.1)
- assert(type(r) == "table" and type(s) == "table" and
+ assert(type(r) == "table" and type(s) == "table" and
(e == "timeout" or e == "error"))
pass("closed sockets: ok")
e = pcall(socket.select, "wrong", 1, 0.1)
@@ -368,7 +373,7 @@ function test_selectbugs()
pass("invalid input: ok")
local toomany = {}
for i = 1, socket._SETSIZE+1 do
- toomany[#toomany+1] = socket.udp()
+ toomany[#toomany+1] = socket.udp4()
end
if #toomany > socket._SETSIZE then
local e = pcall(socket.select, toomany, nil, 0.1)
@@ -389,7 +394,7 @@ function accept_timeout()
local t = socket.gettime()
s:settimeout(1)
local c, e = s:accept()
- assert(not c, "should not accept")
+ assert(not c, "should not accept")
assert(e == "timeout", string.format("wrong error message (%s)", e))
t = socket.gettime() - t
assert(t < 2, string.format("took to long to give up (%gs)", t))
@@ -407,9 +412,9 @@ function connect_timeout()
local t = socket.gettime()
local r, e = c:connect("10.0.0.1", 81)
assert(not r, "should not connect")
- assert(socket.gettime() - t < 2, "took too long to give up.")
+ assert(socket.gettime() - t < 2, "took too long to give up.")
c:close()
- pass("ok")
+ pass("ok")
end
------------------------------------------------------------------------
@@ -447,16 +452,14 @@ end
------------------------------------------------------------------------
function rebind_test()
- --local c ,c1 = socket.bind("localhost", 0)
local c ,c1 = socket.bind("127.0.0.1", 0)
if not c then pass ("failed to bind! " .. tostring(c) .. ' ' .. tostring(c1)) return end
assert(c,c1)
-
local i, p = c:getsockname()
local s, e = socket.tcp()
assert(s, e)
s:setoption("reuseaddr", false)
- r, e = s:bind("localhost", p)
+ r, e = s:bind(i, p)
assert(not r, "managed to rebind!")
assert(e)
pass("ok")
@@ -476,9 +479,9 @@ function getstats_test()
data:receive(c)
t = t + c
local r, s, a = data:getstats()
- assert(r == t, "received count failed" .. tostring(r)
+ assert(r == t, "received count failed" .. tostring(r)
.. "/" .. tostring(t))
- assert(s == t, "sent count failed" .. tostring(s)
+ assert(s == t, "sent count failed" .. tostring(s)
.. "/" .. tostring(t))
end
pass("ok")
@@ -486,7 +489,7 @@ end
------------------------------------------------------------------------
-function test_nonblocking(size)
+function test_nonblocking(size)
reconnect()
printf("testing " .. 2*size .. " bytes: ")
remote(string.format([[
@@ -545,7 +548,7 @@ function test_readafterclose()
data:close()
data = nil
]]))
- data:close()
+ data:close()
back, err, partial = data:receive("*a")
assert(back == nil and err == "closed", "should have returned 'closed'")
pass("ok")
@@ -555,7 +558,7 @@ function test_readafterclose()
data:close()
data = nil
]]))
- data:close()
+ data:close()
back, err, partial = data:receive()
assert(back == nil and err == "closed", "should have returned 'closed'")
pass("ok")
@@ -565,7 +568,7 @@ function test_readafterclose()
data:close()
data = nil
]]))
- data:close()
+ data:close()
back, err, partial = data:receive(1)
assert(back == nil and err == "closed", "should have returned 'closed'")
pass("ok")
@@ -575,7 +578,7 @@ function test_readafterclose()
data:close()
data = nil
]]))
- data:close()
+ data:close()
back, err, partial = data:receive(0)
assert(back == nil and err == "closed", "should have returned 'closed'")
pass("ok")
@@ -590,10 +593,10 @@ function test_writeafterclose()
data = nil
]]))
local sent, err, errsent
- while not err do
+ while not err do
sent, err, errsent, time = data:send(str)
end
- assert(err == "closed", "should have returned 'closed'")
+ assert(err == "closed", "got " .. err .. " instead of 'closed'")
pass("ok")
end
@@ -642,31 +645,39 @@ local tcp_methods = {
"shutdown",
}
test_methods(socket.tcp(), tcp_methods)
-test_methods(socket.tcp6(), tcp_methods)
+do local sock = socket.tcp6()
+if sock then test_methods(socket.tcp6(), tcp_methods)
+else io.stderr:write("Warning! IPv6 does not support!\n") end
+end
local udp_methods = {
- "close",
+ "close",
"dirty",
"getfamily",
"getfd",
"getoption",
"getpeername",
"getsockname",
- "receive",
- "receivefrom",
- "send",
- "sendto",
- "setfd",
+ "receive",
+ "receivefrom",
+ "send",
+ "sendto",
+ "setfd",
"setoption",
"setpeername",
"setsockname",
"settimeout"
}
-
------------------------------------------------------------------------
test_methods(socket.udp(), udp_methods)
-test_methods(socket.udp6(), udp_methods)
+do local sock = socket.tcp6()
+if sock then test_methods(socket.udp6(), udp_methods)
+else io.stderr:write("Warning! IPv6 does not support!\n") end
+end
+
+test("closed connection detection: ")
+test_closed()
test("partial receive")
test_partialrecv()
@@ -691,9 +702,6 @@ rebind_test()
test("active close: ")
active_close()
-test("closed connection detection: ")
-test_closed()
-
test("accept function: ")
accept_timeout()
accept_errors()
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/testmesg.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/testmesg.lua
new file mode 100644
index 00000000000..135a008d664
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/testmesg.lua
@@ -0,0 +1,96 @@
+-- load the smtp support and its friends
+local smtp = require("socket.smtp")
+local mime = require("mime")
+local ltn12 = require("ltn12")
+
+function filter(s)
+ if s then io.write(s) end
+ return s
+end
+
+source = smtp.message {
+ headers = { ['content-type'] = 'multipart/alternative' },
+ body = {
+ [1] = {
+ headers = { ['Content-type'] = 'text/html' },
+ body = "<html> <body> Hi, <b>there</b>...</body> </html>"
+ },
+ [2] = {
+ headers = { ['content-type'] = 'text/plain' },
+ body = "Hi, there..."
+ }
+ }
+}
+
+r, e = smtp.send{
+ rcpt = {"<diego@tecgraf.puc-rio.br>",
+ "<diego@princeton.edu>" },
+ from = "<diego@princeton.edu>",
+ source = ltn12.source.chain(source, filter),
+ --server = "mail.cs.princeton.edu"
+ server = "localhost",
+ port = 2525
+}
+
+print(r, e)
+
+-- creates a source to send a message with two parts. The first part is
+-- plain text, the second part is a PNG image, encoded as base64.
+source = smtp.message{
+ headers = {
+ -- Remember that headers are *ignored* by smtp.send.
+ from = "Sicrano <sicrano@tecgraf.puc-rio.br>",
+ to = "Fulano <fulano@tecgraf.puc-rio.br>",
+ subject = "Here is a message with attachments"
+ },
+ body = {
+ preamble = "If your client doesn't understand attachments, \r\n" ..
+ "it will still display the preamble and the epilogue.\r\n" ..
+ "Preamble might show up even in a MIME enabled client.",
+ -- first part: No headers means plain text, us-ascii.
+ -- The mime.eol low-level filter normalizes end-of-line markers.
+ [1] = {
+ body = mime.eol(0, [[
+ Lines in a message body should always end with CRLF.
+ The smtp module will *NOT* perform translation. It will
+ perform necessary stuffing, though.
+ ]])
+ },
+ -- second part: Headers describe content the to be an image,
+ -- sent under the base64 transfer content encoding.
+ -- Notice that nothing happens until the message is sent. Small
+ -- chunks are loaded into memory and translation happens on the fly.
+ [2] = {
+ headers = {
+ ["ConTenT-tYpE"] = 'image/png; name="luasocket.png"',
+ ["content-disposition"] = 'attachment; filename="luasocket.png"',
+ ["content-description"] = 'our logo',
+ ["content-transfer-encoding"] = "BASE64"
+ },
+ body = ltn12.source.chain(
+ ltn12.source.file(io.open("luasocket.png", "rb")),
+ ltn12.filter.chain(
+ mime.encode("base64"),
+ mime.wrap()
+ )
+ )
+ },
+ epilogue = "This might also show up, but after the attachments"
+ }
+}
+
+
+r, e = smtp.send{
+ rcpt = {"<diego@tecgraf.puc-rio.br>",
+ "<diego@princeton.edu>" },
+ from = "<diego@princeton.edu>",
+ source = ltn12.source.chain(source, filter),
+ --server = "mail.cs.princeton.edu",
+ --port = 25
+ server = "localhost",
+ port = 2525
+}
+
+print(r, e)
+
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/testsrvr.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/testsrvr.lua
index 72b93abe66e..1eb2d5b1f76 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/test/testsrvr.lua
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/testsrvr.lua
@@ -6,7 +6,7 @@ ack = "\n";
while 1 do
print("server: waiting for client connection...");
control = assert(server:accept());
- while 1 do
+ while 1 do
command, emsg = control:receive();
if emsg == "closed" then
control:close()
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/tftptest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/tftptest.lua
new file mode 100644
index 00000000000..35078e83654
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/tftptest.lua
@@ -0,0 +1,20 @@
+-- load tftpclnt.lua
+local tftp = require("socket.tftp")
+
+-- needs tftp server running on localhost, with root pointing to
+-- a directory with index.html in it
+
+function readfile(file)
+ local f = io.open(file, "r")
+ if not f then return nil end
+ local a = f:read("*a")
+ f:close()
+ return a
+end
+
+host = host or "diego.student.princeton.edu"
+retrieved, err = tftp.get("tftp://" .. host .."/index.html")
+assert(not err, err)
+original = readfile("test/index.html")
+assert(original == retrieved, "files differ!")
+print("passed")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send b/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send
new file mode 100755
index 00000000000..a594944c833
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send
@@ -0,0 +1,25 @@
+#!/usr/bin/lua
+
+--[[
+Show that luasocket returns an error message on zero-length UDP sends,
+even though the send is valid, and in fact the UDP packet is sent
+to the peer:
+
+% sudo tcpdump -i lo -n
+tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
+listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
+13:40:16.652808 IP 127.0.0.1.56573 > 127.0.0.1.5432: UDP, length 0
+
+]]
+
+require"socket"
+
+s = assert(socket.udp())
+r = assert(socket.udp())
+assert(r:setsockname("*", 5432))
+assert(s:setpeername("127.0.0.1", 5432))
+
+ssz, emsg = s:send("")
+
+print(ssz == 0 and "OK" or "FAIL",[[send:("")]], ssz, emsg)
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send-recv b/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send-recv
new file mode 100755
index 00000000000..541efd43259
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/udp-zero-length-send-recv
@@ -0,0 +1,37 @@
+#!/usr/bin/lua
+
+--[[
+Show that luasocket returns an error message on zero-length UDP sends,
+even though the send is valid, and in fact the UDP packet is sent
+to the peer:
+
+% sudo tcpdump -i lo -n
+tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
+listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
+13:40:16.652808 IP 127.0.0.1.56573 > 127.0.0.1.5432: UDP, length 0
+
+]]
+
+require"socket"
+
+s = assert(socket.udp())
+r = assert(socket.udp())
+assert(r:setsockname("*", 5432))
+assert(s:setpeername("127.0.0.1", 5432))
+
+ok, emsg = s:send("")
+if ok ~= 0 then
+ print("send of zero failed with:", ok, emsg)
+end
+
+assert(r:settimeout(2))
+
+ok, emsg = r:receive()
+
+if not ok or string.len(ok) ~= 0 then
+ print("fail - receive of zero failed with:", ok, emsg)
+ os.exit(1)
+end
+
+print"ok"
+
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectclnt.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectclnt.lua
new file mode 100644
index 00000000000..ad6ab6a459d
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectclnt.lua
@@ -0,0 +1,19 @@
+local socket = require"socket"
+local udp = socket.udp
+local localhost = "127.0.0.1"
+local port = assert(arg[1], "missing port argument")
+
+se = udp(); se:setoption("reuseaddr", true)
+se:setsockname(localhost, 5062)
+print("se", se:getsockname())
+sc = udp(); sc:setoption("reuseaddr", true)
+sc:setsockname(localhost, 5061)
+print("sc", sc:getsockname())
+
+se:sendto("this is a test from se", localhost, port)
+socket.sleep(1)
+sc:sendto("this is a test from sc", localhost, port)
+socket.sleep(1)
+se:sendto("this is a test from se", localhost, port)
+socket.sleep(1)
+sc:sendto("this is a test from sc", localhost, port)
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectsrvr.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectsrvr.lua
new file mode 100644
index 00000000000..5a9772ec6c4
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/udpconnectsrvr.lua
@@ -0,0 +1,16 @@
+local socket = require"socket"
+local udp = socket.udp
+local localhost = "127.0.0.1"
+local s = assert(udp())
+assert(tostring(s):find("udp{unconnected}"))
+print("setpeername", s:setpeername(localhost, 5061))
+print("getsockname", s:getsockname())
+assert(tostring(s):find("udp{connected}"))
+print(s:receive())
+print("setpeername", s:setpeername("*"))
+print("getsockname", s:getsockname())
+s:sendto("a", localhost, 12345)
+print("getsockname", s:getsockname())
+assert(tostring(s):find("udp{unconnected}"))
+print(s:receivefrom())
+s:close()
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramclnt.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramclnt.lua
new file mode 100644
index 00000000000..9bd60f7f7bd
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramclnt.lua
@@ -0,0 +1,9 @@
+socket = require"socket"
+socket.unix = require"socket.unix"
+c = assert(socket.unix.dgram())
+print(c:bind("/tmp/bar"))
+while 1 do
+ local l = io.read("*l")
+ assert(c:sendto(l, "/tmp/foo"))
+ print(assert(c:receivefrom()))
+end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramsrvr.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramsrvr.lua
new file mode 100644
index 00000000000..4c11f552c64
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/unixdgramsrvr.lua
@@ -0,0 +1,9 @@
+ socket = require"socket"
+ socket.unix = require"socket.unix"
+ u = assert(socket.unix.dgram())
+ assert(u:bind("/tmp/foo"))
+ while 1 do
+ x, r = assert(u:receivefrom())
+ print(x, r)
+ assert(u:sendto(">" .. x, r))
+ end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamclnt.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamclnt.lua
new file mode 100644
index 00000000000..4f2e1e3c187
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamclnt.lua
@@ -0,0 +1,8 @@
+socket = require"socket"
+socket.unix = require"socket.unix"
+c = assert(socket.unix.stream())
+assert(c:connect("/tmp/foo"))
+while 1 do
+ local l = io.read()
+ assert(c:send(l .. "\n"))
+end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamsrvr.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamsrvr.lua
new file mode 100644
index 00000000000..0a5c644be48
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/unixstreamsrvr.lua
@@ -0,0 +1,9 @@
+ socket = require"socket"
+ socket.unix = require"socket.unix"
+ u = assert(socket.unix.stream())
+ assert(u:bind("/tmp/foo"))
+ assert(u:listen())
+ c = assert(u:accept())
+ while 1 do
+ print(assert(c:receive()))
+ end
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/upload.html b/Build/source/texk/web2c/luatexdir/luasocket/test/upload.html
new file mode 100644
index 00000000000..b4674a88503
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/upload.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+<title>POST test</title>
+</head>
+<body>
+
+<form action='http://localhost/luasocket-cgi-bin/cat-stdin' enctype='multipart/form-data' method=POST>
+<center>
+<input type="file" name="attach">
+<p>
+<input type=submit name=sendmail value="send">
+</center>
+</form>
+</body>
+</html>
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/urltest.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/urltest.lua
new file mode 100644
index 00000000000..32cb348deb6
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/urltest.lua
@@ -0,0 +1,635 @@
+local socket = require("socket")
+socket.url = require("socket.url")
+dofile("testsupport.lua")
+
+local check_build_url = function(parsed)
+ local built = socket.url.build(parsed)
+ if built ~= parsed.url then
+ print("built is different from expected")
+ print(built)
+ print(expected)
+ os.exit()
+ end
+end
+
+local check_protect = function(parsed, path, unsafe)
+ local built = socket.url.build_path(parsed, unsafe)
+ if built ~= path then
+ print(built, path)
+ print("path composition failed.")
+ os.exit()
+ end
+end
+
+local check_invert = function(url)
+ local parsed = socket.url.parse(url)
+ parsed.path = socket.url.build_path(socket.url.parse_path(parsed.path))
+ local rebuilt = socket.url.build(parsed)
+ if rebuilt ~= url then
+ print(url, rebuilt)
+ print("original and rebuilt are different")
+ os.exit()
+ end
+end
+
+local check_parse_path = function(path, expect)
+ local parsed = socket.url.parse_path(path)
+ for i = 1, math.max(#parsed, #expect) do
+ if parsed[i] ~= expect[i] then
+ print(path)
+ os.exit()
+ end
+ end
+ if expect.is_directory ~= parsed.is_directory then
+ print(path)
+ print("is_directory mismatch")
+ os.exit()
+ end
+ if expect.is_absolute ~= parsed.is_absolute then
+ print(path)
+ print("is_absolute mismatch")
+ os.exit()
+ end
+ local built = socket.url.build_path(expect)
+ if built ~= path then
+ print(built, path)
+ print("path composition failed.")
+ os.exit()
+ end
+end
+
+local check_absolute_url = function(base, relative, absolute)
+ local res = socket.url.absolute(base, relative)
+ if res ~= absolute then
+ io.write("absolute: In test for '", relative, "' expected '",
+ absolute, "' but got '", res, "'\n")
+ os.exit()
+ end
+end
+
+local check_parse_url = function(gaba)
+ local url = gaba.url
+ gaba.url = nil
+ local parsed = socket.url.parse(url)
+ for i, v in pairs(gaba) do
+ if v ~= parsed[i] then
+ io.write("parse: In test for '", url, "' expected ", i, " = '",
+ v, "' but got '", tostring(parsed[i]), "'\n")
+ for i,v in pairs(parsed) do print(i,v) end
+ os.exit()
+ end
+ end
+ for i, v in pairs(parsed) do
+ if v ~= gaba[i] then
+ io.write("parse: In test for '", url, "' expected ", i, " = '",
+ tostring(gaba[i]), "' but got '", v, "'\n")
+ for i,v in pairs(parsed) do print(i,v) end
+ os.exit()
+ end
+ end
+end
+
+print("testing URL parsing")
+check_parse_url{
+ url = "scheme://userinfo@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ authority = "user:password@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "user:password",
+ user = "user",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment",
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/path;params?query#",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = ""
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/path;params?#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/path;params#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/path;?query#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/path?query#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port/;params?query#fragment",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://userinfo@host:port",
+ scheme = "scheme",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+}
+
+check_parse_url{
+ url = "//userinfo@host:port/path;params?query#fragment",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "//userinfo@host:port/path",
+ authority = "userinfo@host:port",
+ host = "host",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//userinfo@host/path",
+ authority = "userinfo@host",
+ host = "host",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//user:password@host/path",
+ authority = "user:password@host",
+ host = "host",
+ userinfo = "user:password",
+ password = "password",
+ user = "user",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//user:@host/path",
+ authority = "user:@host",
+ host = "host",
+ userinfo = "user:",
+ password = "",
+ user = "user",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//user@host:port/path",
+ authority = "user@host:port",
+ host = "host",
+ userinfo = "user",
+ user = "user",
+ port = "port",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//host:port/path",
+ authority = "host:port",
+ port = "port",
+ host = "host",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//host/path",
+ authority = "host",
+ host = "host",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "//host",
+ authority = "host",
+ host = "host",
+}
+
+check_parse_url{
+ url = "/path",
+ path = "/path",
+}
+
+check_parse_url{
+ url = "path",
+ path = "path",
+}
+
+-- IPv6 tests
+
+check_parse_url{
+ url = "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html",
+ scheme = "http",
+ host = "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210",
+ authority = "[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80",
+ port = "80",
+ path = "/index.html"
+}
+
+check_parse_url{
+ url = "http://[1080:0:0:0:8:800:200C:417A]/index.html",
+ scheme = "http",
+ host = "1080:0:0:0:8:800:200C:417A",
+ authority = "[1080:0:0:0:8:800:200C:417A]",
+ path = "/index.html"
+}
+
+check_parse_url{
+ url = "http://[3ffe:2a00:100:7031::1]",
+ scheme = "http",
+ host = "3ffe:2a00:100:7031::1",
+ authority = "[3ffe:2a00:100:7031::1]",
+}
+
+check_parse_url{
+ url = "http://[1080::8:800:200C:417A]/foo",
+ scheme = "http",
+ host = "1080::8:800:200C:417A",
+ authority = "[1080::8:800:200C:417A]",
+ path = "/foo"
+}
+
+check_parse_url{
+ url = "http://[::192.9.5.5]/ipng",
+ scheme = "http",
+ host = "::192.9.5.5",
+ authority = "[::192.9.5.5]",
+ path = "/ipng"
+}
+
+check_parse_url{
+ url = "http://[::FFFF:129.144.52.38]:80/index.html",
+ scheme = "http",
+ host = "::FFFF:129.144.52.38",
+ port = "80",
+ authority = "[::FFFF:129.144.52.38]:80",
+ path = "/index.html"
+}
+
+check_parse_url{
+ url = "http://[2010:836B:4179::836B:4179]",
+ scheme = "http",
+ host = "2010:836B:4179::836B:4179",
+ authority = "[2010:836B:4179::836B:4179]",
+}
+
+check_parse_url{
+ url = "//userinfo@[::FFFF:129.144.52.38]:port/path;params?query#fragment",
+ authority = "userinfo@[::FFFF:129.144.52.38]:port",
+ host = "::FFFF:129.144.52.38",
+ port = "port",
+ userinfo = "userinfo",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_parse_url{
+ url = "scheme://user:password@[::192.9.5.5]:port/path;params?query#fragment",
+ scheme = "scheme",
+ authority = "user:password@[::192.9.5.5]:port",
+ host = "::192.9.5.5",
+ port = "port",
+ userinfo = "user:password",
+ user = "user",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+print("testing URL building")
+check_build_url {
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ port = "port",
+ user = "user",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url{
+ url = "//userinfo@[::FFFF:129.144.52.38]:port/path;params?query#fragment",
+ host = "::FFFF:129.144.52.38",
+ port = "port",
+ user = "userinfo",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url{
+ url = "scheme://user:password@[::192.9.5.5]:port/path;params?query#fragment",
+ scheme = "scheme",
+ host = "::192.9.5.5",
+ port = "port",
+ user = "user",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://user:password@host/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ user = "user",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://user@host/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ user = "user",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://host/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://host/path;params#fragment",
+ scheme = "scheme",
+ host = "host",
+ path = "/path",
+ params = "params",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://host/path#fragment",
+ scheme = "scheme",
+ host = "host",
+ path = "/path",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://host/path",
+ scheme = "scheme",
+ host = "host",
+ path = "/path",
+}
+
+check_build_url {
+ url = "//host/path",
+ host = "host",
+ path = "/path",
+}
+
+check_build_url {
+ url = "/path",
+ path = "/path",
+}
+
+check_build_url {
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ port = "port",
+ user = "user",
+ userinfo = "not used",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ port = "port",
+ user = "user",
+ userinfo = "not used",
+ authority = "not used",
+ password = "password",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ host = "host",
+ port = "port",
+ userinfo = "user:password",
+ authority = "not used",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+check_build_url {
+ url = "scheme://user:password@host:port/path;params?query#fragment",
+ scheme = "scheme",
+ authority = "user:password@host:port",
+ path = "/path",
+ params = "params",
+ query = "query",
+ fragment = "fragment"
+}
+
+-- standard RFC tests
+print("testing absolute resolution")
+check_absolute_url("http://a/b/c/d;p?q#f", "g:h", "g:h")
+check_absolute_url("http://a/b/c/d;p?q#f", "g", "http://a/b/c/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "./g", "http://a/b/c/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "g/", "http://a/b/c/g/")
+check_absolute_url("http://a/b/c/d;p?q#f", "/g", "http://a/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "//g", "http://g")
+check_absolute_url("http://a/b/c/d;p?q#f", "?y", "http://a/b/c/d;p?y")
+check_absolute_url("http://a/b/c/d;p?q#f", "g?y", "http://a/b/c/g?y")
+check_absolute_url("http://a/b/c/d;p?q#f", "g?y/./x", "http://a/b/c/g?y/./x")
+check_absolute_url("http://a/b/c/d;p?q#f", "#s", "http://a/b/c/d;p?q#s")
+check_absolute_url("http://a/b/c/d;p?q#f", "g#s", "http://a/b/c/g#s")
+check_absolute_url("http://a/b/c/d;p?q#f", "g#s/./x", "http://a/b/c/g#s/./x")
+check_absolute_url("http://a/b/c/d;p?q#f", "g?y#s", "http://a/b/c/g?y#s")
+check_absolute_url("http://a/b/c/d;p?q#f", ";x", "http://a/b/c/d;x")
+check_absolute_url("http://a/b/c/d;p?q#f", "g;x", "http://a/b/c/g;x")
+check_absolute_url("http://a/b/c/d;p?q#f", "g;x?y#s", "http://a/b/c/g;x?y#s")
+check_absolute_url("http://a/b/c/d;p?q#f", ".", "http://a/b/c/")
+check_absolute_url("http://a/b/c/d;p?q#f", "./", "http://a/b/c/")
+check_absolute_url("http://a/b/c/d;p?q#f", "..", "http://a/b/")
+check_absolute_url("http://a/b/c/d;p?q#f", "../", "http://a/b/")
+check_absolute_url("http://a/b/c/d;p?q#f", "../g", "http://a/b/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "../..", "http://a/")
+check_absolute_url("http://a/b/c/d;p?q#f", "../../", "http://a/")
+check_absolute_url("http://a/b/c/d;p?q#f", "../../g", "http://a/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "", "http://a/b/c/d;p?q#f")
+check_absolute_url("http://a/b/c/d;p?q#f", "/./g", "http://a/./g")
+check_absolute_url("http://a/b/c/d;p?q#f", "/../g", "http://a/../g")
+check_absolute_url("http://a/b/c/d;p?q#f", "g.", "http://a/b/c/g.")
+check_absolute_url("http://a/b/c/d;p?q#f", ".g", "http://a/b/c/.g")
+check_absolute_url("http://a/b/c/d;p?q#f", "g..", "http://a/b/c/g..")
+check_absolute_url("http://a/b/c/d;p?q#f", "..g", "http://a/b/c/..g")
+check_absolute_url("http://a/b/c/d;p?q#f", "./../g", "http://a/b/g")
+check_absolute_url("http://a/b/c/d;p?q#f", "./g/.", "http://a/b/c/g/")
+check_absolute_url("http://a/b/c/d;p?q#f", "g/./h", "http://a/b/c/g/h")
+check_absolute_url("http://a/b/c/d;p?q#f", "g/../h", "http://a/b/c/h")
+
+-- extra tests
+check_absolute_url("//a/b/c/d;p?q#f", "d/e/f", "//a/b/c/d/e/f")
+check_absolute_url("/a/b/c/d;p?q#f", "d/e/f", "/a/b/c/d/e/f")
+check_absolute_url("a/b/c/d", "d/e/f", "a/b/c/d/e/f")
+check_absolute_url("a/b/c/d/../", "d/e/f", "a/b/c/d/e/f")
+check_absolute_url("http://velox.telemar.com.br", "/dashboard/index.html",
+ "http://velox.telemar.com.br/dashboard/index.html")
+
+print("testing path parsing and composition")
+check_parse_path("/eu/tu/ele", { "eu", "tu", "ele"; is_absolute = 1 })
+check_parse_path("/eu/", { "eu"; is_absolute = 1, is_directory = 1 })
+check_parse_path("eu/tu/ele/nos/vos/eles/",
+ { "eu", "tu", "ele", "nos", "vos", "eles"; is_directory = 1})
+check_parse_path("/", { is_absolute = 1, is_directory = 1})
+check_parse_path("", { })
+check_parse_path("eu%01/%02tu/e%03l%04e/nos/vos%05/e%12les/",
+ { "eu\1", "\2tu", "e\3l\4e", "nos", "vos\5", "e\18les"; is_directory = 1})
+check_parse_path("eu/tu", { "eu", "tu" })
+
+print("testing path protection")
+check_protect({ "eu", "-_.!~*'():@&=+$,", "tu" }, "eu/-_.!~*'():@&=+$,/tu")
+check_protect({ "eu ", "~diego" }, "eu%20/~diego")
+check_protect({ "/eu>", "<diego?" }, "%2feu%3e/%3cdiego%3f")
+check_protect({ "\\eu]", "[diego`" }, "%5ceu%5d/%5bdiego%60")
+check_protect({ "{eu}", "|diego\127" }, "%7beu%7d/%7cdiego%7f")
+check_protect({ "eu ", "~diego" }, "eu /~diego", 1)
+check_protect({ "/eu>", "<diego?" }, "/eu>/<diego?", 1)
+check_protect({ "\\eu]", "[diego`" }, "\\eu]/[diego`", 1)
+check_protect({ "{eu}", "|diego\127" }, "{eu}/|diego\127", 1)
+
+print("testing inversion")
+check_invert("http:")
+check_invert("a/b/c/d.html")
+check_invert("//net_loc")
+check_invert("http:a/b/d/c.html")
+check_invert("//net_loc/a/b/d/c.html")
+check_invert("http://net_loc/a/b/d/c.html")
+check_invert("//who:isit@net_loc")
+check_invert("http://he:man@boo.bar/a/b/c/i.html;type=moo?this=that#mark")
+check_invert("/b/c/d#fragment")
+check_invert("/b/c/d;param#fragment")
+check_invert("/b/c/d;param?query#fragment")
+check_invert("/b/c/d?query")
+check_invert("/b/c/d;param?query")
+check_invert("http://he:man@[::192.168.1.1]/a/b/c/i.html;type=moo?this=that#mark")
+
+print("the library passed all tests")
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/utestclnt.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/utestclnt.lua
new file mode 100644
index 00000000000..34a0718b0ae
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/utestclnt.lua
@@ -0,0 +1,644 @@
+local socket = require"socket"
+socket.unix = require"socket.unix"
+
+host = host or "luasocket"
+
+function pass(...)
+ local s = string.format(...)
+ io.stderr:write(s, "\n")
+end
+
+function fail(...)
+ local s = string.format(...)
+ io.stderr:write("ERROR: ", s, "!\n")
+socket.sleep(3)
+ os.exit()
+end
+
+function warn(...)
+ local s = string.format(...)
+ io.stderr:write("WARNING: ", s, "\n")
+end
+
+function remote(...)
+ local s = string.format(...)
+ s = string.gsub(s, "\n", ";")
+ s = string.gsub(s, "%s+", " ")
+ s = string.gsub(s, "^%s*", "")
+ control:send(s .. "\n")
+ control:receive()
+end
+
+function test(test)
+ io.stderr:write("----------------------------------------------\n",
+ "testing: ", test, "\n",
+ "----------------------------------------------\n")
+end
+
+function uconnect(path)
+ local u = assert(socket.unix())
+ assert(u:connect(path))
+ return u
+end
+
+function ubind(path)
+ local u = assert(socket.unix())
+ assert(u:bind(path))
+ assert(u:listen(5))
+ return u
+end
+
+function check_timeout(tm, sl, elapsed, err, opp, mode, alldone)
+ if tm < sl then
+ if opp == "send" then
+ if not err then warn("must be buffered")
+ elseif err == "timeout" then pass("proper timeout")
+ else fail("unexpected error '%s'", err) end
+ else
+ if err ~= "timeout" then fail("should have timed out")
+ else pass("proper timeout") end
+ end
+ else
+ if mode == "total" then
+ if elapsed > tm then
+ if err ~= "timeout" then fail("should have timed out")
+ else pass("proper timeout") end
+ elseif elapsed < tm then
+ if err then fail(err)
+ else pass("ok") end
+ else
+ if alldone then
+ if err then fail("unexpected error '%s'", err)
+ else pass("ok") end
+ else
+ if err ~= "timeout" then fail(err)
+ else pass("proper timeoutk") end
+ end
+ end
+ else
+ if err then fail(err)
+ else pass("ok") end
+ end
+ end
+end
+
+if not socket._DEBUG then
+ fail("Please define LUASOCKET_DEBUG and recompile LuaSocket")
+end
+
+io.stderr:write("----------------------------------------------\n",
+"LuaSocket Test Procedures\n",
+"----------------------------------------------\n")
+
+start = socket.gettime()
+
+function reconnect()
+ io.stderr:write("attempting data connection... ")
+ if data then data:close() end
+ remote [[
+ i = i or 1
+ if data then data:close() data = nil end
+ print("accepting")
+ data = server:accept()
+ i = i + 1
+ print("done " .. i)
+ ]]
+ data, err = uconnect(host, port)
+ if not data then fail(err)
+ else pass("connected!") end
+end
+
+pass("attempting control connection...")
+control, err = uconnect(host, port)
+if err then fail(err)
+else pass("connected!") end
+
+------------------------------------------------------------------------
+function test_methods(sock, methods)
+ for _, v in pairs(methods) do
+ if type(sock[v]) ~= "function" then
+ fail(sock.class .. " method '" .. v .. "' not registered")
+ end
+ end
+ pass(sock.class .. " methods are ok")
+end
+
+------------------------------------------------------------------------
+function test_mixed(len)
+ reconnect()
+ local inter = math.ceil(len/4)
+ local p1 = "unix " .. string.rep("x", inter) .. "line\n"
+ local p2 = "dos " .. string.rep("y", inter) .. "line\r\n"
+ local p3 = "raw " .. string.rep("z", inter) .. "bytes"
+ local p4 = "end" .. string.rep("w", inter) .. "bytes"
+ local bp1, bp2, bp3, bp4
+remote (string.format("str = data:receive(%d)",
+ string.len(p1)+string.len(p2)+string.len(p3)+string.len(p4)))
+ sent, err = data:send(p1..p2..p3..p4)
+ if err then fail(err) end
+remote "data:send(str); data:close()"
+ bp1, err = data:receive()
+ if err then fail(err) end
+ bp2, err = data:receive()
+ if err then fail(err) end
+ bp3, err = data:receive(string.len(p3))
+ if err then fail(err) end
+ bp4, err = data:receive("*a")
+ if err then fail(err) end
+ if bp1.."\n" == p1 and bp2.."\r\n" == p2 and bp3 == p3 and bp4 == p4 then
+ pass("patterns match")
+ else fail("patterns don't match") end
+end
+
+------------------------------------------------------------------------
+function test_asciiline(len)
+ reconnect()
+ local str, str10, back, err
+ str = string.rep("x", math.mod(len, 10))
+ str10 = string.rep("aZb.c#dAe?", math.floor(len/10))
+ str = str .. str10
+remote "str = data:receive()"
+ sent, err = data:send(str.."\n")
+ if err then fail(err) end
+remote "data:send(str ..'\\n')"
+ back, err = data:receive()
+ if err then fail(err) end
+ if back == str then pass("lines match")
+ else fail("lines don't match") end
+end
+
+------------------------------------------------------------------------
+function test_rawline(len)
+ reconnect()
+ local str, str10, back, err
+ str = string.rep(string.char(47), math.mod(len, 10))
+ str10 = string.rep(string.char(120,21,77,4,5,0,7,36,44,100),
+ math.floor(len/10))
+ str = str .. str10
+remote "str = data:receive()"
+ sent, err = data:send(str.."\n")
+ if err then fail(err) end
+remote "data:send(str..'\\n')"
+ back, err = data:receive()
+ if err then fail(err) end
+ if back == str then pass("lines match")
+ else fail("lines don't match") end
+end
+
+------------------------------------------------------------------------
+function test_raw(len)
+ reconnect()
+ local half = math.floor(len/2)
+ local s1, s2, back, err
+ s1 = string.rep("x", half)
+ s2 = string.rep("y", len-half)
+remote (string.format("str = data:receive(%d)", len))
+ sent, err = data:send(s1)
+ if err then fail(err) end
+ sent, err = data:send(s2)
+ if err then fail(err) end
+remote "data:send(str)"
+ back, err = data:receive(len)
+ if err then fail(err) end
+ if back == s1..s2 then pass("blocks match")
+ else fail("blocks don't match") end
+end
+
+------------------------------------------------------------------------
+function test_totaltimeoutreceive(len, tm, sl)
+ reconnect()
+ local str, err, partial
+ pass("%d bytes, %ds total timeout, %ds pause", len, tm, sl)
+ remote (string.format ([[
+ data:settimeout(%d)
+ str = string.rep('a', %d)
+ data:send(str)
+ print('server: sleeping for %ds')
+ socket.sleep(%d)
+ print('server: woke up')
+ data:send(str)
+ ]], 2*tm, len, sl, sl))
+ data:settimeout(tm, "total")
+local t = socket.gettime()
+ str, err, partial, elapsed = data:receive(2*len)
+ check_timeout(tm, sl, elapsed, err, "receive", "total",
+ string.len(str or partial) == 2*len)
+end
+
+------------------------------------------------------------------------
+function test_totaltimeoutsend(len, tm, sl)
+ reconnect()
+ local str, err, total
+ pass("%d bytes, %ds total timeout, %ds pause", len, tm, sl)
+ remote (string.format ([[
+ data:settimeout(%d)
+ str = data:receive(%d)
+ print('server: sleeping for %ds')
+ socket.sleep(%d)
+ print('server: woke up')
+ str = data:receive(%d)
+ ]], 2*tm, len, sl, sl, len))
+ data:settimeout(tm, "total")
+ str = string.rep("a", 2*len)
+ total, err, partial, elapsed = data:send(str)
+ check_timeout(tm, sl, elapsed, err, "send", "total",
+ total == 2*len)
+end
+
+------------------------------------------------------------------------
+function test_blockingtimeoutreceive(len, tm, sl)
+ reconnect()
+ local str, err, partial
+ pass("%d bytes, %ds blocking timeout, %ds pause", len, tm, sl)
+ remote (string.format ([[
+ data:settimeout(%d)
+ str = string.rep('a', %d)
+ data:send(str)
+ print('server: sleeping for %ds')
+ socket.sleep(%d)
+ print('server: woke up')
+ data:send(str)
+ ]], 2*tm, len, sl, sl))
+ data:settimeout(tm)
+ str, err, partial, elapsed = data:receive(2*len)
+ check_timeout(tm, sl, elapsed, err, "receive", "blocking",
+ string.len(str or partial) == 2*len)
+end
+
+------------------------------------------------------------------------
+function test_blockingtimeoutsend(len, tm, sl)
+ reconnect()
+ local str, err, total
+ pass("%d bytes, %ds blocking timeout, %ds pause", len, tm, sl)
+ remote (string.format ([[
+ data:settimeout(%d)
+ str = data:receive(%d)
+ print('server: sleeping for %ds')
+ socket.sleep(%d)
+ print('server: woke up')
+ str = data:receive(%d)
+ ]], 2*tm, len, sl, sl, len))
+ data:settimeout(tm)
+ str = string.rep("a", 2*len)
+ total, err, partial, elapsed = data:send(str)
+ check_timeout(tm, sl, elapsed, err, "send", "blocking",
+ total == 2*len)
+end
+
+------------------------------------------------------------------------
+function empty_connect()
+ reconnect()
+ if data then data:close() data = nil end
+ remote [[
+ if data then data:close() data = nil end
+ data = server:accept()
+ ]]
+ data, err = socket.connect("", port)
+ if not data then
+ pass("ok")
+ data = socket.connect(host, port)
+ else
+ pass("gethostbyname returns localhost on empty string...")
+ end
+end
+
+------------------------------------------------------------------------
+function isclosed(c)
+ return c:getfd() == -1 or c:getfd() == (2^32-1)
+end
+
+function active_close()
+ reconnect()
+ if isclosed(data) then fail("should not be closed") end
+ data:close()
+ if not isclosed(data) then fail("should be closed") end
+ data = nil
+ local udp = socket.udp()
+ if isclosed(udp) then fail("should not be closed") end
+ udp:close()
+ if not isclosed(udp) then fail("should be closed") end
+ pass("ok")
+end
+
+------------------------------------------------------------------------
+function test_closed()
+ local back, partial, err
+ local str = 'little string'
+ reconnect()
+ pass("trying read detection")
+ remote (string.format ([[
+ data:send('%s')
+ data:close()
+ data = nil
+ ]], str))
+ -- try to get a line
+ back, err, partial = data:receive()
+ if not err then fail("should have gotten 'closed'.")
+ elseif err ~= "closed" then fail("got '"..err.."' instead of 'closed'.")
+ elseif str ~= partial then fail("didn't receive partial result.")
+ else pass("graceful 'closed' received") end
+ reconnect()
+ pass("trying write detection")
+ remote [[
+ data:close()
+ data = nil
+ ]]
+ total, err, partial = data:send(string.rep("ugauga", 100000))
+ if not err then
+ pass("failed: output buffer is at least %d bytes long!", total)
+ elseif err ~= "closed" then
+ fail("got '"..err.."' instead of 'closed'.")
+ else
+ pass("graceful 'closed' received after %d bytes were sent", partial)
+ end
+end
+
+------------------------------------------------------------------------
+function test_selectbugs()
+ local r, s, e = socket.select(nil, nil, 0.1)
+ assert(type(r) == "table" and type(s) == "table" and
+ (e == "timeout" or e == "error"))
+ pass("both nil: ok")
+ local udp = socket.udp()
+ udp:close()
+ r, s, e = socket.select({ udp }, { udp }, 0.1)
+ assert(type(r) == "table" and type(s) == "table" and
+ (e == "timeout" or e == "error"))
+ pass("closed sockets: ok")
+ e = pcall(socket.select, "wrong", 1, 0.1)
+ assert(e == false)
+ e = pcall(socket.select, {}, 1, 0.1)
+ assert(e == false)
+ pass("invalid input: ok")
+end
+
+------------------------------------------------------------------------
+function accept_timeout()
+ io.stderr:write("accept with timeout (if it hangs, it failed): ")
+ local s, e = socket.bind("*", 0, 0)
+ assert(s, e)
+ local t = socket.gettime()
+ s:settimeout(1)
+ local c, e = s:accept()
+ assert(not c, "should not accept")
+ assert(e == "timeout", string.format("wrong error message (%s)", e))
+ t = socket.gettime() - t
+ assert(t < 2, string.format("took to long to give up (%gs)", t))
+ s:close()
+ pass("good")
+end
+
+------------------------------------------------------------------------
+function connect_timeout()
+ io.stderr:write("connect with timeout (if it hangs, it failed!): ")
+ local t = socket.gettime()
+ local c, e = socket.tcp()
+ assert(c, e)
+ c:settimeout(0.1)
+ local t = socket.gettime()
+ local r, e = c:connect("127.0.0.2", 80)
+ assert(not r, "should not connect")
+ assert(socket.gettime() - t < 2, "took too long to give up.")
+ c:close()
+ print("ok")
+end
+
+------------------------------------------------------------------------
+function accept_errors()
+ io.stderr:write("not listening: ")
+ local d, e = socket.bind("*", 0)
+ assert(d, e);
+ local c, e = socket.tcp();
+ assert(c, e);
+ d:setfd(c:getfd())
+ d:settimeout(2)
+ local r, e = d:accept()
+ assert(not r and e)
+ print("ok: ", e)
+ io.stderr:write("not supported: ")
+ local c, e = socket.udp()
+ assert(c, e);
+ d:setfd(c:getfd())
+ local r, e = d:accept()
+ assert(not r and e)
+ print("ok: ", e)
+end
+
+------------------------------------------------------------------------
+function connect_errors()
+ io.stderr:write("connection refused: ")
+ local c, e = socket.connect("localhost", 1);
+ assert(not c and e)
+ print("ok: ", e)
+ io.stderr:write("host not found: ")
+ local c, e = socket.connect("host.is.invalid", 1);
+ assert(not c and e, e)
+ print("ok: ", e)
+end
+
+------------------------------------------------------------------------
+function rebind_test()
+ local c = socket.bind("localhost", 0)
+ local i, p = c:getsockname()
+ local s, e = socket.tcp()
+ assert(s, e)
+ s:setoption("reuseaddr", false)
+ r, e = s:bind("localhost", p)
+ assert(not r, "managed to rebind!")
+ assert(e)
+ print("ok: ", e)
+end
+
+------------------------------------------------------------------------
+function getstats_test()
+ reconnect()
+ local t = 0
+ for i = 1, 25 do
+ local c = math.random(1, 100)
+ remote (string.format ([[
+ str = data:receive(%d)
+ data:send(str)
+ ]], c))
+ data:send(string.rep("a", c))
+ data:receive(c)
+ t = t + c
+ local r, s, a = data:getstats()
+ assert(r == t, "received count failed" .. tostring(r)
+ .. "/" .. tostring(t))
+ assert(s == t, "sent count failed" .. tostring(s)
+ .. "/" .. tostring(t))
+ end
+ print("ok")
+end
+
+
+------------------------------------------------------------------------
+function test_nonblocking(size)
+ reconnect()
+print("Testing " .. 2*size .. " bytes")
+remote(string.format([[
+ data:send(string.rep("a", %d))
+ socket.sleep(0.5)
+ data:send(string.rep("b", %d) .. "\n")
+]], size, size))
+ local err = "timeout"
+ local part = ""
+ local str
+ data:settimeout(0)
+ while 1 do
+ str, err, part = data:receive("*l", part)
+ if err ~= "timeout" then break end
+ end
+ assert(str == (string.rep("a", size) .. string.rep("b", size)))
+ reconnect()
+remote(string.format([[
+ str = data:receive(%d)
+ socket.sleep(0.5)
+ str = data:receive(%d, str)
+ data:send(str)
+]], size, size))
+ data:settimeout(0)
+ local start = 0
+ while 1 do
+ ret, err, start = data:send(str, start+1)
+ if err ~= "timeout" then break end
+ end
+ data:send("\n")
+ data:settimeout(-1)
+ local back = data:receive(2*size)
+ assert(back == str, "'" .. back .. "' vs '" .. str .. "'")
+ print("ok")
+end
+
+------------------------------------------------------------------------
+
+test("method registration")
+test_methods(socket.unix(), {
+ "accept",
+ "bind",
+ "close",
+ "connect",
+ "dirty",
+ "getfd",
+ "getstats",
+ "setstats",
+ "listen",
+ "receive",
+ "send",
+ "setfd",
+ "setoption",
+ "setpeername",
+ "setsockname",
+ "settimeout",
+ "shutdown",
+})
+
+test("connect function")
+--connect_timeout()
+--empty_connect()
+--connect_errors()
+
+--test("rebinding: ")
+--rebind_test()
+
+test("active close: ")
+active_close()
+
+test("closed connection detection: ")
+test_closed()
+
+test("accept function: ")
+accept_timeout()
+accept_errors()
+
+test("getstats test")
+getstats_test()
+
+test("character line")
+test_asciiline(1)
+test_asciiline(17)
+test_asciiline(200)
+test_asciiline(4091)
+test_asciiline(80199)
+test_asciiline(8000000)
+test_asciiline(80199)
+test_asciiline(4091)
+test_asciiline(200)
+test_asciiline(17)
+test_asciiline(1)
+
+test("mixed patterns")
+test_mixed(1)
+test_mixed(17)
+test_mixed(200)
+test_mixed(4091)
+test_mixed(801990)
+test_mixed(4091)
+test_mixed(200)
+test_mixed(17)
+test_mixed(1)
+
+test("binary line")
+test_rawline(1)
+test_rawline(17)
+test_rawline(200)
+test_rawline(4091)
+test_rawline(80199)
+test_rawline(8000000)
+test_rawline(80199)
+test_rawline(4091)
+test_rawline(200)
+test_rawline(17)
+test_rawline(1)
+
+test("raw transfer")
+test_raw(1)
+test_raw(17)
+test_raw(200)
+test_raw(4091)
+test_raw(80199)
+test_raw(8000000)
+test_raw(80199)
+test_raw(4091)
+test_raw(200)
+test_raw(17)
+test_raw(1)
+
+test("non-blocking transfer")
+test_nonblocking(1)
+test_nonblocking(17)
+test_nonblocking(200)
+test_nonblocking(4091)
+test_nonblocking(80199)
+test_nonblocking(8000000)
+test_nonblocking(80199)
+test_nonblocking(4091)
+test_nonblocking(200)
+test_nonblocking(17)
+test_nonblocking(1)
+
+test("total timeout on send")
+test_totaltimeoutsend(800091, 1, 3)
+test_totaltimeoutsend(800091, 2, 3)
+test_totaltimeoutsend(800091, 5, 2)
+test_totaltimeoutsend(800091, 3, 1)
+
+test("total timeout on receive")
+test_totaltimeoutreceive(800091, 1, 3)
+test_totaltimeoutreceive(800091, 2, 3)
+test_totaltimeoutreceive(800091, 3, 2)
+test_totaltimeoutreceive(800091, 3, 1)
+
+test("blocking timeout on send")
+test_blockingtimeoutsend(800091, 1, 3)
+test_blockingtimeoutsend(800091, 2, 3)
+test_blockingtimeoutsend(800091, 3, 2)
+test_blockingtimeoutsend(800091, 3, 1)
+
+test("blocking timeout on receive")
+test_blockingtimeoutreceive(800091, 1, 3)
+test_blockingtimeoutreceive(800091, 2, 3)
+test_blockingtimeoutreceive(800091, 3, 2)
+test_blockingtimeoutreceive(800091, 3, 1)
+
+test(string.format("done in %.2fs", socket.gettime() - start))
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/test/utestsrvr.lua b/Build/source/texk/web2c/luatexdir/luasocket/test/utestsrvr.lua
new file mode 100644
index 00000000000..a96b570e1b9
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luasocket/test/utestsrvr.lua
@@ -0,0 +1,17 @@
+socket=require("socket");
+os.remove("/tmp/luasocket")
+socket.unix = require("socket.unix");
+host = host or "luasocket";
+server = assert(socket.unix())
+assert(server:bind(host))
+assert(server:listen(5))
+ack = "\n";
+while 1 do
+ print("server: waiting for client connection...");
+ control = assert(server:accept());
+ while 1 do
+ command = assert(control:receive());
+ assert(control:send(ack));
+ ((loadstring or load)(command))();
+ end
+end