*.a
*.bck
-*.cgi
+/cgi-bin/*.cgi
*.o
autom4te.cache
config.h
- exclude: cpp/integer-multiplication-cast-to-long
- exclude: cpp/missing-header-guard
- exclude: cpp/short-global-name
+ - exclude: cpp/tainted-format-string
+ - exclude: cpp/toctou-race-condition
+ - exclude: cpp/constant-comparison
-CHANGES - 2.3.2 - 2019-12-18
-============================
+Change History
+==============
+
+Changes in CUPS v2.3.6
+----------------------
+- CVE-2022-26691: An incorrect comparison in local admin authentication.
+
+
+Changes in CUPS v2.3.5
+----------------------
+
+- The automated test suite can now be activated using `make test` for
+ consistency with other projects and CI environments - the old `make check`
+ continues to work as well, and the previous test server behavior can be
+ accessed by running `make testserver`.
+- ippeveprinter now supports multiple icons and strings files.
+- ippeveprinter now uses the system's FQDN with Avahi.
+- ippeveprinter now supports Get-Printer-Attributes on "/".
+- ippeveprinter now uses a deterministic "printer-uuid" value.
+- ippeveprinter now uses system sounds on macOS for Identify-Printer.
+- Updated ippfind to look for files in "~/Desktop" on Windows.
+- Updated ippfind to honor `SKIP-XXX` directives with `PAUSE`.
+- Updated IPP Everywhere support to work around printers that only advertise
+ color raster support but really also support grayscale (OpenPrinting #1)
+- ipptool now supports DNS-SD URIs like `ipps://My%20Printer._ipps._tcp.local`
+ (OpenPrinting #5)
+- ipptool now supports monitoring the printer state while submitting a job
+ with the `MONITOR-PRINTER-STATE` directive (OpenPrinting #153)
+- ipptool now supports testing for unique values with the `WITH-DISTINCT-VALUES`
+ predicate (OpenPrinting #153)
+- ipptool now supports retrying requests on a `server-error-busy` status code
+ (OpenPrinting #153)
+- ipptool now supports `value-tag(MAX)` and `value-tag(MIN:MAX)` for the
+ `OF-TYPE` predicate (OpenPrinting #153)
+- The scheduler now allows root backends to have world read permissions but not
+ world execute permissions (OpenPrinting #21)
+- Failures to bind IPv6 listener sockets no longer cause errors if IPv6 is
+ disabled on the host (OpenPrinting #25)
+- The SNMP backend now supports the HP and Ricoh vendor MIBs (OpenPrinting #28)
+- The scheduler no longer includes a timestamp in files it writes (OpenPrinting #29)
+- IPP Everywhere PPDs could have an "unknown" default InputSlot (OpenPrinting #44)
+- The `httpAddrListen` function now uses a listen backlog of 128.
+- The PPD functions now treat boolean values as case-insensitive (OpenPrinting #106)
+- Temporary queue names no longer end with an underscore (OpenPrinting #110)
+- Added USB quirks (Issue #5789, #5766, #5823, #5831, #5838, #5843, #5867)
+- Fixed IPP Everywhere v1.1 conformance issues in ippeveprinter.
+- Fixed DNS-SD name collision support in ippeveprinter.
+- Fixed compiler and code analyzer warnings.
+- Fixed TLS support on Windows.
+- Fixed ippfind sub-type searches with Avahi.
+- Fixed the default hostname used by ippeveprinter on macOS.
+- Fixed resolution of local IPP-USB printers with Avahi.
+- Fixed coverity issues (OpenPrinting #2)
+- Fixed `httpAddrConnect` issues (OpenPrinting #3)
+- Fixed web interface device URI issue (OpenPrinting #4)
+- Fixed lp/lpr "printer/class not found" error reporting (OpenPrinting #6)
+- Fixed a memory leak in the scheduler (OpenPrinting #12)
+- Fixed a potential integer overflow in the PPD hashing code (OpenPrinting #13)
+- Fixed output-bin and print-quality handling issues (OpenPrinting #18)
+- Fixed PPD options getting mapped to odd IPP values like "tray---4" (OpenPrinting #23)
+- Fixed remote access to the cupsd.conf and log files (OpenPrinting #24)
+- Fixed a logging regression caused by a previous change for Issue #5604
+ (OpenPrinting #25)
+- Fixed the "uri-security-supported" value from the scheduler (OpenPrinting #42)
+- Fixed IPP backend crash bug with "printer-alert" values (OpenPrinting #43)
+- Fixed default options that incorrectly use the "custom" prefix (OpenPrinting #48)
+- Fixed a memory leak when resolving DNS-SD URIs (OpenPrinting #49)
+- Fixed cupsManualCopies values in IPP Everywhere PPDs (Issue #5807)
+- Fixed duplicate ColorModel entries for AirPrint printers (Issue 59)
+- Fixed crash bug in `ppdOpen` (OpenPrinting #64, OpenPrinting #78)
+- Fixed regression in `snprintf` emulation function (OpenPrinting #67)
+- Fixed reporting of printer instances when enumerating and when no options are
+ set for the main instance (OpenPrinting #71)
+- Fixed segfault in help.cgi when searching in man pages (OpenPrinting #81)
+- Fixed a bug in ipptool that caused the reuse of request IDs when repeating a
+ test (OpenPrinting #153)
+- Root certificates were incorrectly stored in "~/.cups/ssl".
+- Fixed a PPD memory leak caused by emulator definitions (OpenPrinting #124)
+- Fixed a `DISPLAY` bug in `ipptool` (OpenPrinting #139)
+- `httpReconnect2` did not reset the socket file descriptor when the TLS
+ negotiation failed (Issue #5907)
+- `httpUpdate` did not reset the socket file descriptor when the TLS
+ negotiation failed (Apple #5915)
+- The `ippeveprinter` tool now automatically uses an available port.
+- The IPP backend now retries Validate-Job requests (OpenPrinting #132)
+- Removed support for the (long deprecated and unused) `KeepAliveTimeout`
+ directive in `cupsd.conf` (Issue #5733)
+- Fixed `@IF(name)` handling in `cupsd.conf` (Issue #5918)
+- The scheduler now supports the "everywhere" model directly (Issue #5919)
+- Fixed documentation and added examples for CUPS' limited CGI support
+ (Issue #5940)
+- Fixed the `lpc` command prompt (Issue #5946)
+- Fixed `job-pages-per-set` value for duplex print jobs.
+
+
+Changes in CUPS v2.3.4
+----------------------
+
+- CVE-2020-10001: Fixed a buffer (read) overflow in the `ippReadIO` function.
+
+
+Changes in CUPS v2.3.3
+----------------------
+
+- CVE-2020-3898: The `ppdOpen` function did not handle invalid UI
+ constraint. `ppdcSource::get_resolution` function did not handle
+ invalid resolution strings.
+- CVE-2019-8842: The `ippReadIO` function may under-read an extension
+ field.
+- Fixed WARNING_OPTIONS support for GCC 9.x
Changes in CUPS v2.3.2
-INSTALL - CUPS v2.3.1 - 2019-12-13
+INSTALL - CUPS v2.3.6 - 2022-05-25
==================================
This file describes how to compile and install CUPS from source code. For more
#
# Top-level Makefile for CUPS.
#
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2021 by Apple Inc.
# Copyright © 1997-2007 by Easy Software Products, all rights reserved.
#
# Licensed under Apache License v2.0. See the file "LICENSE" for more
# Run the test suite...
#
-test: all unittests
- echo Running CUPS test suite...
+testserver: all unittests
+ echo Running CUPS test server...
cd test; ./run-stp-tests.sh $(TESTOPTIONS)
-check: all unittests
+check test: all unittests
echo Running CUPS test suite with defaults...
cd test; ./run-stp-tests.sh 1 0 n n
-debugcheck: all unittests
+debugcheck debugtest: all unittests
echo Running CUPS test suite with debug printfs...
cd test; ./run-stp-tests.sh 1 0 n y
-README - CUPS v2.3.1 - 2019-12-13
-=================================
+README - Apple CUPS v2.3.6 - 2022-05-25
+=======================================
+
+> Note: Apple CUPS is the version of CUPS that is shipped with macOS and iOS.
+> For the current version of CUPS that is used on other operating systems, see
+> <https://openprinting.github.io/cups> for details.
+
INTRODUCTION
------------
LEGAL STUFF
-----------
-Copyright © 2007-2019 by Apple Inc.
+Copyright © 2007-2021 by Apple Inc.
Copyright © 1997-2007 by Easy Software Products.
CUPS is provided under the terms of the Apache License, Version 2.0 with
/*
* Backend support definitions for CUPS.
*
- * Copyright © 2007-2014 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
# endif /* __cplusplus */
+/*
+ * Log messages in backend signal handlers or other places where stdio cannot
+ * be used...
+ */
+
+# define backendMessage(msg) {const char *s = msg; write(2, s, strlen(s));}
+
+
/*
* OID constants...
*/
extern int backendWaitLoop(int snmp_fd, http_addr_t *addr,
int use_bc, _cups_sccb_t side_cb);
-
# ifdef __cplusplus
}
# endif /* __cplusplus */
/*
* IPP backend for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
get_job_attrs = 0, /* Does printer support Get-Job-Attributes? */
send_document = 0, /* Does printer support Send-Document? */
validate_job = 0, /* Does printer support Validate-Job? */
+ validate_retried = 0, /* Was Validate-Job request retried? */
copies, /* Number of copies for job */
copies_remaining; /* Number of copies remaining */
const char *content_type, /* CONTENT_TYPE environment variable */
ipp_status == IPP_STATUS_ERROR_BAD_REQUEST)
break;
else if (job_auth == NULL && ipp_status > IPP_STATUS_ERROR_BAD_REQUEST)
+ {
+ if (!validate_retried)
+ {
+ // Retry Validate-Job operation once, to work around known printer bug...
+ validate_retried = 1;
+ sleep(10);
+ continue;
+ }
+
goto cleanup;
+ }
}
/*
else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
fputs("JOBSTATE: account-authorization-failed\n", stderr);
- if (job_canceled)
+ // job_canceled can be -1 which should not be treated as CUPS_BACKEND_OK
+ if (job_canceled > 0)
return (CUPS_BACKEND_OK);
else if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
return (CUPS_BACKEND_AUTH_REQUIRED);
*/
_httpDecodeURI(phone, keyword, sizeof(phone));
- for (ptr = phone; *ptr;)
+ ptr = phone;
+
+ /*
+ * Weed out "Custom." in the beginning, this allows to put the
+ * "phone" option as custom string option into the PPD so that
+ * print dialogs not supporting fax display the option and
+ * allow entering the phone number. Print dialogs also send "None"
+ * if no phone number got entered, filter this, too.
+ */
+ if (!_cups_strcasecmp(phone, "None"))
+ *ptr = '\0';
+ if (!_cups_strncasecmp(phone, "Custom.", 7))
+ _cups_strcpy(ptr, ptr + 7);
+
+ for (; *ptr;)
{
if (*ptr == ',')
*ptr = 'p';
ptr ++;
}
- httpAssembleURI(HTTP_URI_CODING_ALL, tel_uri, sizeof(tel_uri), "tel", NULL, NULL, 0, phone);
- ippAddString(destination, IPP_TAG_JOB, IPP_TAG_URI, "destination-uri", NULL, tel_uri);
-
- if ((keyword = cupsGetOption("faxPrefix", num_options,
- options)) != NULL && *keyword)
+ if (strlen(phone) > 0)
{
- char predial[1024]; /* Pre-dial string */
+ httpAssembleURI(HTTP_URI_CODING_ALL, tel_uri, sizeof(tel_uri), "tel", NULL, NULL, 0, phone);
+ ippAddString(destination, IPP_TAG_JOB, IPP_TAG_URI, "destination-uri", NULL, tel_uri);
+ fprintf(stderr, "DEBUG: Faxing to phone %s; destination-uri: %s\n", phone, tel_uri);
- _httpDecodeURI(predial, keyword, sizeof(predial));
- ippAddString(destination, IPP_TAG_JOB, IPP_TAG_TEXT, "pre-dial-string", NULL, predial);
- }
+ if ((keyword = cupsGetOption("faxPrefix", num_options, options)) != NULL && *keyword)
+ {
+ char predial[1024]; /* Pre-dial string */
+
+ _httpDecodeURI(predial, keyword, sizeof(predial));
+ ptr = predial;
+ if (!_cups_strcasecmp(ptr, "None"))
+ *ptr = '\0';
+ if (!_cups_strncasecmp(ptr, "Custom.", 7))
+ ptr += 7;
+ if (strlen(ptr) > 0)
+ {
+ ippAddString(destination, IPP_TAG_JOB, IPP_TAG_TEXT, "pre-dial-string", NULL, ptr);
+ fprintf(stderr, "DEBUG: Pre-dialing %s; pre-dial-string: %s\n", ptr, ptr);
+ }
+ else
+ fprintf(stderr, "WARNING: Pre-dial number for fax not valid! Sending fax without pre-dial number.\n");
+ }
- ippAddCollection(request, IPP_TAG_JOB, "destination-uris", destination);
- ippDelete(destination);
+ ippAddCollection(request, IPP_TAG_JOB, "destination-uris", destination);
+ ippDelete(destination);
+ }
+ else
+ fprintf(stderr, "ERROR: Phone number for fax not valid! Fax cannot be sent.\n");
}
}
else
* Report alerts and messages...
*/
- if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_TEXT)) != NULL)
+ if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_STRING)) != NULL)
report_attr(pa);
if ((pam = ippFindAttribute(ipp, "printer-alert-message",
if (*ptr < ' ' && *ptr > 0 && *ptr != '\t')
{
/*
- * Substitute "<XX>" for the control character; sprintf is safe because
- * we always leave 6 chars free at the end...
+ * Substitute "<XX>" for the control character...
*/
- sprintf(valptr, "<%02X>", *ptr);
+ snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "<%02X>", *ptr);
valptr += 4;
}
else
const char *device_uri, /* I - Device URI */
int fd) /* I - File to print */
{
- const char *auth_negotiate;/* AUTH_NEGOTIATE env var */
+ const char *auth_negotiate,/* AUTH_NEGOTIATE env var */
+ *content_type; /* [FINAL_]CONTENT_TYPE env vars */
xpc_connection_t conn; /* Connection to XPC service */
xpc_object_t request; /* Request message dictionary */
__block xpc_object_t response; /* Response message dictionary */
getenv("AUTH_INFO_REQUIRED"));
if ((auth_negotiate = getenv("AUTH_NEGOTIATE")) != NULL)
xpc_dictionary_set_string(request, "auth-negotiate", auth_negotiate);
+ if ((content_type = getenv("CONTENT_TYPE")) != NULL)
+ xpc_dictionary_set_string(request, "content-type", content_type);
+ if ((content_type = getenv("FINAL_CONTENT_TYPE")) != NULL)
+ xpc_dictionary_set_string(request, "final-content-type", content_type);
xpc_dictionary_set_fd(request, "stdin", fd);
xpc_dictionary_set_fd(request, "stderr", 2);
xpc_dictionary_set_fd(request, "side-channel", CUPS_SC_FD);
{
(void)sig; /* remove compiler warnings... */
- write(2, "DEBUG: Got SIGTERM.\n", 20);
+ backendMessage("DEBUG: Got SIGTERM.\n");
#if defined(HAVE_GSSAPI) && defined(HAVE_XPC)
if (child_pid)
* Flag that the job should be canceled...
*/
- write(2, "DEBUG: sigterm_handler: job_canceled = 1.\n", 25);
+ backendMessage("DEBUG: sigterm_handler: job_canceled = 1.\n");
job_canceled = 1;
return;
i < packet.object_value.string.num_bytes &&
dataptr < (data + sizeof(data) - 3);
i ++, dataptr += 2)
- sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]);
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%02X", packet.object_value.string.bytes[i]);
datalen += (int)strlen(dataptr);
break;
# Canon, Inc. PIXMA iP6000D Printer (https://bugs.launchpad.net/bugs/1160638)
0x04a9 0x1095 unidir
-# Canon, Inc. PIXMA iP4200 Printer (Issue #4155)
+# Canon, Inc. PIXMA iP4200 Printer (Apple #4155)
0x04a9 0x10a2 unidir
# Canon, Inc. PIXMA iP4300 Printer (https://bugs.launchpad.net/bugs/1032385)
# Canon, Inc. MP540 Printer, https://bugzilla.redhat.com/967873
0x04a9 0x1730 unidir
-# Canon, Inc. MP550 Printer (Issue #4155)
+# Canon, Inc. MP550 Printer (Apple #4155)
0x04a9 0x173d unidir
-# Canon, Inc. MP560 Printer (Issue #4155)
+# Canon, Inc. MP560 Printer (Apple #4155)
0x04a9 0x173e unidir
+# Canon, Inc. PIXMA G1501 Printer (Apple #5831)
+0x04a9 0x1796 unidir
+
# Canon, Inc. MF4150 Printer (https://bugs.launchpad.net/bugs/1160638)
0x04a9 0x26a3 no-reattach
# Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123)
0x04e8 0x330f unidir
-# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Issue #5395)
+# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Apple #5395)
0x0a5f unidir no-reattach
# Canon CP-10
# Lexmark E238 (<rdar://problem/14493054>)
0x043d 0x00d7 no-reattach
-# Lexmark E238 (Issue #4448)
+# Lexmark E238 (Apple #4448)
0x043d 0x009a no-reattach
-# Canon MX310 (Issue #4482)
+# Canon MX310 (Apple #4482)
0x04a9 0x1728 unidir
-# Canon MX320 (Issue #4482)
+# Canon MX320 (Apple #4482)
0x04A9 0x1736 unidir
-# All Intermec devices (Issue #4553)
+# All Intermec devices (Apple #4553)
0x067e no-reattach
-# HP LaserJet 1015 (Issue #5617)
+# HP LaserJet 1010 (Apple #5789)
+0x03f0 0x0c17 delay-close
+
+# HP LaserJet 1015 (Apple #5617)
0x03f0 0x0e17 delay-close
-# HP LaserJet 1150 (Issue #4549)
+# HP LaserJet 1150 (Apple #4549)
0x03f0 0x0f17 delay-close
-# HP LaserJet 1300 (Issue #4549)
+# HP LaserJet 1300 (Apple #4549)
0x03f0 0x1017 delay-close
0x03f0 0x1117 delay-close
-# HP LaserJet 1320 (Issue #4549)
+# HP LaserJet 1320 (Apple #4549)
0x03f0 0x1d17 delay-close
# Canon, Inc. MP530 Printer
0x04a9 0x1712 unidir
-# Xerox WorkCentre 3220 (https://bugs.launchpad.net/bugs/1406203, Issue #4789)
+# Xerox WorkCentre 3220 (https://bugs.launchpad.net/bugs/1406203, Apple #4789)
0x0924 0x4294 no-reattach
-# Lexmark C540n (Issue #4778)
+# Lexmark C540n (Apple #4778)
0x043d 0x0139 no-reattach
-# Kyocera Ecosys P6026cdn (Issue #4900)
+# Kyocera Ecosys P6026cdn (Apple #4900)
0x0482 0x063f no-reattach
-# Kyocera Ecosys P6130cdn (Issue #5102)
+# Kyocera Ecosys P6130cdn (Apple #5102)
0x0482 0x0677 no-reattach
-# Lexmark E260dn (Issue #4994)
+# Lexmark E260dn (Apple #4994)
0x043d 0x0123 no-reattach
-# HP LaserJet 1160 (Issue #5121)
+# HP LaserJet 1160 (Apple #5121)
0x03f0 0x1e17 delay-close
-# Canon, Inc. MP280 series (Issue #5221)
+# Canon, Inc. MP280 series (Apple #5221)
0x04a9 0x1746 unidir
-# Star Micronics printers (Issue #5251)
+# Star Micronics printers (Apple #5251)
0x0519 unidir
-# Lexmark Optra E310 (Issue #5259)
+# Lexmark Optra E310 (Apple #5259)
0x043d 0x000c no-reattach
-# HP LaserJet P1102 (Issue #5310)
+# HP LaserJet P1102 (Apple #5310)
0x03F0 0x002A no-reattach
# Lexmark MS317dn
0x043d 0x0226 no-reattach
-# Star TSP743 (Issue #5443)
+# Star TSP743 (Apple #5443)
0x0519 0x0001 delay-close
-# Lexmark E120n (Issue #5478)
+# Lexmark E120n (Apple #5478)
0x043d 0x00cc no-reattach
-# All Xerox printers (Issue #5523)
+# Lexmark E120n MT4506-100 (Apple #5766)
+0x043d 0x00cd no-reattach
+
+# All Xerox printers (Apple #5523)
0x0924 no-reattach
-# Dymo 450 Turbo (Issue #5521)
-0x0922 0x0021 unidir
+# Citizen CT-S4000 (Apple #5823)
+0x2730 0x2008 unidir delay-close
+
+# All Arkscan label printers (Apple #5867)
+0x2d84 unidir no-reattach
+
+# HP DesignJet 130 (Apple #5838)
+0x03f0 0x0314 no-reattach
static const int LexmarkProductOID[] = { 1,3,6,1,4,1,641,2,1,2,1,2,1,-1 };
static const int LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 };
static const int LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 };
+static const int HPDeviceIdOID[] = { 1,3,6,1,4,1,11,2,3,9,1,1,7,0,-1 };
+static const int RicohDeviceIdOID[] = { 1,3,6,1,4,1,367,3,2,1,1,1,11,0,-1 };
static const int XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 };
static cups_array_t *DeviceURIs = NULL;
static int HostNameLookups = 0;
#endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
if (DebugLevel)
- write(2, "DEBUG: ALARM!\n", 14);
+ backendMessage("DEBUG: ALARM!\n");
}
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_ID, LexmarkDeviceIdOID);
+ _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+ packet.community, CUPS_ASN1_GET_REQUEST,
+ DEVICE_ID, RicohDeviceIdOID);
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_PRODUCT, XeroxProductOID);
+ _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+ packet.community, CUPS_ASN1_GET_REQUEST,
+ DEVICE_ID, HPDeviceIdOID);
break;
case DEVICE_DESCRIPTION :
#include <fcntl.h>
#include <sys/wait.h>
#include <signal.h>
+#include "backend-private.h"
/*
data = ps_data;
write(1, data, strlen(data));
- write(2, "DEBUG: START\n", 13);
+ backendMessage("DEBUG: START\n");
timeout = 60.0;
while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer),
timeout)) > 0)
write(2, buffer, (size_t)bytes);
timeout = 5.0;
}
- write(2, "\nDEBUG: END\n", 12);
+ backendMessage("\nDEBUG: END\n");
}
exit(0);
/*
- * Copyright 2005-2016 Apple Inc. All rights reserved.
+ * USB backend for macOS.
+ *
+ * Copyright © 2005-2021 Apple Inc. All rights reserved.
*
* IMPORTANT: This Apple software is supplied to you by Apple Computer,
* Inc. ("Apple") in consideration of your agreement to the following
#define IS_64BIT 1
#define IS_NOT_64BIT 0
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
static pid_t child_pid; /* Child PID */
-static void run_legacy_backend(int argc, char *argv[], int fd) _CUPS_NORETURN; /* Starts child backend process running as a ppc executable */
-#endif /* __i386__ || __x86_64__ */
-static void sigterm_handler(int sig); /* SIGTERM handler */
+static void run_legacy_backend(int argc, char *argv[], int fd) _CUPS_NORETURN; /* Starts child backend process running as a x86_64 executable */
+static void sigterm_handler(int sig); /* SIGTERM handler */
+#endif /* __arm64e__ */
static void sigquit_handler(int sig, siginfo_t *si, void *unused) _CUPS_NORETURN;
#ifdef PARSE_PS_ERRORS
(void)uri;
+ (void)argc;
+ (void)argv;
/*
* Catch SIGQUIT to determine who is sending it...
status = registry_open(&driverBundlePath);
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
/*
* If we were unable to load the class drivers for this printer it's
- * probably because they're ppc or i386. In this case try to run this
- * backend as i386 or ppc executables so we can use them...
+ * probably because they're x86_64 (or older). In this case try to run this
+ * backend as x86_64 so we can use them...
*/
if (status == -2)
{
run_legacy_backend(argc, argv, print_fd);
/* Never returns here */
}
-#endif /* __i386__ || __x86_64__ */
+#endif /* __arm64e__ */
if (status == -2)
{
SInt32 score;
kern_return_t kr;
printer_interface_t interface;
- HRESULT res;
kr = IOCreatePlugInInterfaceForService(g.printer_obj, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score);
if (kr == kIOReturnSuccess)
{
- if ((res = (*iodev)->QueryInterface(iodev, USB_INTERFACE_KIND, (LPVOID *) &interface)) == noErr)
+ if ((*iodev)->QueryInterface(iodev, USB_INTERFACE_KIND, (LPVOID *) &interface) == noErr)
{
*driverBundlePath = IORegistryEntryCreateCFProperty(g.printer_obj, kUSBClassDriverProperty, NULL, kNilOptions);
/* This request takes the 0 based configuration index. IOKit returns a 1 based configuration index */
configurationIndex -= 1;
- bzero(&request, sizeof(request));
+ memset(&request, 0, sizeof(request));
request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBClass, kUSBInterface);
request.bRequest = kUSBPrintClassGetDeviceID;
if (actualLength > 2 && actualLength <= bufferLength - 2)
{
- ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false);
+ ret = CFStringCreateWithBytes(NULL, (const UInt8 *)request.pData + 2, actualLength - 2, kCFStringEncodingUTF8, false);
}
else if (actualLength > 2) {
err = sendRequest(actualLength);
if (err == kIOReturnSuccess && request.wLenDone > 0)
{
actualLength = OSSwapBigToHostInt16(*((UInt16 *)request.pData));
- ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false);
+ ret = CFStringCreateWithBytes(NULL, (const UInt8 *)request.pData + 2, actualLength - 2, kCFStringEncodingUTF8, false);
}
}
}
IOUSBDevRequestTO request;
IOUSBDeviceDescriptor desc;
- bzero(&request, sizeof(request));
+ memset(&request, 0, sizeof(request));
request.bmRequestType = USBmakebmRequestType( kUSBIn, kUSBStandard, kUSBDevice );
request.bRequest = kUSBRqGetDescriptor;
CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), model);
}
- if (serial == NULL && desc.iSerialNumber != 0)
+ if (desc.iSerialNumber != 0)
{
- serial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
- if (serial && CFStringGetLength(serial) > 0)
- CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), serial);
+ // Always look at the USB serial number since some printers
+ // incorrectly include a bogus static serial number in their
+ // IEEE-1284 device ID string...
+ CFStringRef userial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
+ if (userial && CFStringGetLength(userial) > 0 && (serial == NULL || CFStringCompare(serial, userial, kCFCompareCaseInsensitive) != kCFCompareEqualTo))
+ {
+ if (serial != NULL)
+ {
+ // 1284 serial number doesn't match USB serial number, so replace the existing SERN: in device ID
+ CFRange range = CFStringFind(ret, serial, 0);
+ CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
+ CFStringReplace(deviceIDString, range, userial);
+ CFRelease(ret);
+ ret = deviceIDString;
+
+ CFRelease(serial);
+ }
+ else
+ {
+ // No 1284 serial number so add SERN: with USB serial number to device ID
+ CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), userial);
+ }
+ serial = userial;
+ }
+ else if (userial != NULL)
+ CFRelease(userial);
}
if (ret != NULL)
{
CFStringAppend(extras, ret);
CFRelease(ret);
-
- ret = extras;
- }
- else
- {
- ret = extras;
}
+ ret = extras;
}
}
if (ret != NULL)
{
- /* Remove special characters from the serial number */
- CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
- if (range.length == 1)
- {
- range = CFStringFind(ret, serial, 0);
+ /* Remove special characters from the serial number */
+ CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
+ if (range.length == 1)
+ {
+ range = CFStringFind(ret, serial, 0);
- CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
- CFRelease(ret);
+ CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
+ CFRelease(ret);
- ret = deviceIDString;
- CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
- }
+ ret = deviceIDString;
+ CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
+ }
}
if (manufacturer != NULL)
UInt8 description[256]; // Max possible descriptor length
IOUSBDevRequestTO request;
- bzero(description, 2);
+ memset(description, 0, 2);
request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice);
request.bRequest = kUSBRqGetDescriptor;
err = (*printer)->ControlRequestTO(printer, 0, &request);
if (err != kIOReturnSuccess && err != kIOReturnOverrun)
{
- bzero(description, request.wLength);
+ memset(description, 0, request.wLength);
// Let's try again full length. Here's why:
// On USB 2.0 controllers, we will not get an overrun error. We just get a "babble" error
request.wValue = (kUSBStringDesc << 8) | index;
request.wIndex = language;
- bzero(description, length);
+ memset(description, 0, length);
request.wLength = (UInt16)length;
request.pData = &description;
request.completionTimeout = 0;
if ((description[0] & 1) != 0)
description[0] &= 0xfe;
- char buffer[258] = {};
+ char buffer[258] = {0};
unsigned int maxLength = sizeof buffer;
if (description[0] > 1)
{
}
#pragma mark -
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
/*!
* @function run_legacy_backend
*
- * @abstract Starts child backend process running as a ppc or i386 executable.
+ * @abstract Starts child backend process running as a x86_64 executable.
*
* @result Never returns; always calls exit().
*
/*
- * If we're running as x86_64 or i386 and couldn't load the class driver
- * (because it's ppc or i386), then try to re-exec ourselves in ppc or i386
- * mode to try again. If we don't have a ppc or i386 architecture we may be
+ * If we're running as ARM and couldn't load the class driver
+ * (because it's x86_64, i386 or ppc), then try to re-exec ourselves in x86_64
+ * mode to try again. If we don't have that architecture we may be
* running with the same architecture again so guard against this by setting
* and testing an environment variable...
*/
-# ifdef __x86_64__
- usb_legacy_status = getenv("USB_I386_STATUS");
-# else
- usb_legacy_status = getenv("USB_PPC_STATUS");
-# endif /* __x86_64__ */
+ usb_legacy_status = getenv("USB_LEGACY_STATUS");
if (!usb_legacy_status)
{
* Set the environment variable...
*/
-# ifdef __x86_64__
- setenv("USB_I386_STATUS", "1", false);
-# else
- setenv("USB_PPC_STATUS", "1", false);
-# endif /* __x86_64__ */
+ setenv("USB_LEGACY_STATUS", "1", false);
/*
* Tell the kernel to use the specified CPU architecture...
*/
-# ifdef __x86_64__
- cpu_type_t cpu = CPU_TYPE_I386;
-# else
- cpu_type_t cpu = CPU_TYPE_POWERPC;
-# endif /* __x86_64__ */
+ cpu_type_t cpu = CPU_TYPE_X86_64;
size_t ocount = 1;
posix_spawnattr_t attrs;
posix_spawnattr_setsigdefault(&attrs, &oldmask);
if (posix_spawnattr_setbinpref_np(&attrs, 1, &cpu, &ocount) || ocount != 1)
{
-# ifdef __x86_64__
- perror("DEBUG: Unable to set binary preference to i386");
-# else
- perror("DEBUG: Unable to set binary preference to ppc");
-# endif /* __x86_64__ */
+ perror("DEBUG: Unable to set binary preference to X86_64");
_cupsLangPrintFilter(stderr, "ERROR",
_("Unable to use legacy USB class driver."));
exit(CUPS_BACKEND_STOP);
exit(exitstatus);
}
-#endif /* __i386__ || __x86_64__ */
-
/*
* 'sigterm_handler()' - SIGTERM handler.
static void
sigterm_handler(int sig) /* I - Signal */
{
-#if defined(__i386__) || defined(__x86_64__)
/*
* If we started a child process pass the signal on to it...
*/
_exit(0);
else
{
- write(2, "DEBUG: Child crashed.\n", 22);
+ backendMessage("DEBUG: Child crashed.\n");
_exit(CUPS_BACKEND_STOP);
}
}
-#endif /* __i386__ || __x86_64__ */
}
+#endif /* __arm64e__ */
/*
/*
* LIBUSB interface code for CUPS.
*
- * Copyright 2007-2019 by Apple Inc.
+ * Copyright 2007-2020 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* information.
* for USB printer devices. We get the honor of trying them all...
*/
- sprintf(device, "/dev/usblp%d", i);
+ snprintf(device, sizeof(device), "/dev/usblp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
{
if (errno != ENOENT)
continue;
- sprintf(device, "/dev/usb/lp%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/lp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
{
if (errno != ENOENT)
continue;
- sprintf(device, "/dev/usb/usblp%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/usblp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
continue;
for (i = 0; i < 8; i ++)
{
- sprintf(device, "/dev/usb/printer%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/printer%d", i);
if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
{
for (i = 0; i < 8; i ++)
{
- sprintf(device, "/dev/ulpt%d", i);
+ snprintf(device, sizeof(device), "/dev/ulpt%d", i);
if (!access(device, 0))
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
- sprintf(device, "/dev/unlpt%d", i);
+ snprintf(device, sizeof(device), "/dev/unlpt%d", i);
if (!access(device, 0))
printf("direct usb:%s \"Unknown\" \"USB Printer #%d (no reset)\"\n", device, i + 1);
}
* for USB printer devices. We get the honor of trying them all...
*/
- sprintf(device, "/dev/usblp%d", i);
+ snprintf(device, sizeof(device), "/dev/usblp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
{
- sprintf(device, "/dev/usb/lp%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/lp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
{
- sprintf(device, "/dev/usb/usblp%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/usblp%d", i);
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
continue;
{
for (i = 0, busy = 0; i < 8; i ++)
{
- sprintf(device, "/dev/usb/printer%d", i);
+ snprintf(device, sizeof(device), "/dev/usb/printer%d", i);
if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
backendGetDeviceID(fd, device_id, sizeof(device_id),
static int compare_strings(const char *, const char *, size_t);
static void do_command(http_t *, const char *, const char *);
static void show_help(const char *);
+static void show_prompt(const char *message);
static void show_status(http_t *, const char *);
* Do the command prompt thing...
*/
- _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no-newline version */
+ show_prompt(_("lpc> "));
while (fgets(line, sizeof(line), stdin) != NULL)
{
/*
* Nothing left, just show a prompt...
*/
- _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */
+ show_prompt(_("lpc> "));
continue;
}
* Put another prompt out to the user...
*/
- _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */
+ show_prompt(_("lpc> "));
}
}
}
+/*
+ * 'show_prompt()' - Show a localized prompt message.
+ */
+
+static void
+show_prompt(const char *message) /* I - Message string to use */
+{
+ ssize_t bytes; /* Number of bytes formatted */
+ char output[8192]; /* Message buffer */
+ cups_lang_t *lang = cupsLangDefault();
+ /* Default language */
+
+ /*
+ * Transcode to the destination charset and write the prompt...
+ */
+
+ if ((bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)_cupsLangString(lang, message), sizeof(output), lang->encoding)) > 0)
+ {
+ fwrite(output, 1, (size_t)bytes, stdout);
+ fflush(stdout);
+ }
+}
+
+
/*
* 'show_status()' - Show printers.
*/
/*
* Administration CGI for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
static char *get_option_value(ppd_file_t *ppd, const char *name,
char *buffer, size_t bufsize);
static double get_points(double number, const char *uval);
-static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
/*
* bytes left in the array...
*/
- sprintf(ptr, "%%%02X", *url & 255);
+ snprintf(ptr, sizeof(encoded) - (size_t)(ptr - encoded), "%%%02X", *url & 255);
ptr += 3;
}
else
cgiSetVariable("TEMPLATE_NAME", template);
}
+
+ /*
+ * Set DEVICE_URI to the actual device uri, without make and model from
+ * html form.
+ */
+
+ cgiSetVariable("DEVICE_URI", var);
}
}
break;
else
{
- sprintf(baudrate, "%d", baudrates[i]);
+ snprintf(baudrate, sizeof(baudrate), "%d", baudrates[i]);
cgiSetArray("BAUDRATES", i, baudrate);
}
if (!file)
{
var = cgiGetVariable("PPD_NAME");
- if (!strcmp(var, "everywhere"))
- get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile));
- else if (strcmp(var, "__no_change__"))
+ if (strcmp(var, "__no_change__"))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
NULL, var);
}
else /* Points */
return (number);
}
-
-
-/*
- * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
- */
-
-static char * /* O - Filename or NULL */
-get_printer_ppd(const char *uri, /* I - Printer URI */
- char *buffer, /* I - Filename buffer */
- size_t bufsize) /* I - Size of filename buffer */
-{
- http_t *http; /* Connection to printer */
- ipp_t *request, /* Get-Printer-Attributes request */
- *response; /* Get-Printer-Attributes response */
- char resolved[1024], /* Resolved URI */
- scheme[32], /* URI scheme */
- userpass[256], /* Username:password */
- host[256], /* Hostname */
- resource[256]; /* Resource path */
- int port; /* Port number */
- static const char * const pattrs[] = /* Printer attributes we need */
- {
- "all",
- "media-col-database"
- };
-
-
- /*
- * Connect to the printer...
- */
-
- if (strstr(uri, "._tcp"))
- {
- /*
- * Resolve URI...
- */
-
- if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
- {
- fprintf(stderr, "ERROR: Unable to resolve \"%s\".\n", uri);
- return (NULL);
- }
-
- uri = resolved;
- }
-
- if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
- {
- fprintf(stderr, "ERROR: Bad printer URI \"%s\".\n", uri);
- return (NULL);
- }
-
- http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
- if (!http)
- {
- fprintf(stderr, "ERROR: Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
- return (NULL);
- }
-
- /*
- * Send a Get-Printer-Attributes request...
- */
-
- request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
- response = cupsDoRequest(http, request, resource);
-
- if (!_ppdCreateFromIPP(buffer, bufsize, response))
- fprintf(stderr, "ERROR: Unable to create PPD file: %s\n", strerror(errno));
-
- ippDelete(response);
- httpClose(http);
-
- if (buffer[0])
- return (buffer);
- else
- return (NULL);
-}
if (first < 0)
first = 0;
- sprintf(val, "%d", count);
+ snprintf(val, sizeof(val), "%d", count);
cgiSetVariable("TOTAL", val);
for (i = 0, pclass = (ipp_attribute_t *)cupsArrayIndex(classes, first);
if (first > 0)
{
- sprintf(val, "%d", first - CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
cgiSetVariable("PREV", val);
}
if ((first + CUPS_PAGE_MAX) < count)
{
- sprintf(val, "%d", first + CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
cgiSetVariable("NEXT", val);
}
*/
for (; node; node = (help_node_t *)cupsArrayNext(hi->nodes))
- if (section && strcmp(node->section, section))
+ if (node->section && section && strcmp(node->section, section))
continue;
else if (filename && strcmp(node->filename, filename))
continue;
char buf[255]; /* Number buffer */
- sprintf(buf, "%d", attr->values[i].integer);
+ snprintf(buf, sizeof(buf), "%d", attr->values[i].integer);
if (cgiDoSearch(search, buf))
add = 1;
char temp[255]; /* Temporary string */
- sprintf(temp, "%d", job_id);
+ snprintf(temp, sizeof(temp), "%d", job_id);
cgiSetVariable("JOB_ID", temp);
}
cgiSetVariable("SECTION", section);
- sprintf(val, "%d", count);
+ snprintf(val, sizeof(val), "%d", count);
cgiSetVariable("TOTAL", val);
if (which_jobs)
if (first > 0)
{
- sprintf(val, "%d", first - CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
cgiSetVariable("PREV", val);
}
if ((first + CUPS_PAGE_MAX) < count)
{
- sprintf(val, "%d", first + CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
cgiSetVariable("NEXT", val);
}
if (first < 0)
first = 0;
- sprintf(val, "%d", count);
+ snprintf(val, sizeof(val), "%d", count);
cgiSetVariable("TOTAL", val);
for (i = 0, printer = (ipp_attribute_t *)cupsArrayIndex(printers, first);
if (first > 0)
{
- sprintf(val, "%d", first - CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
cgiSetVariable("PREV", val);
}
if ((first + CUPS_PAGE_MAX) < count)
{
- sprintf(val, "%d", first + CUPS_PAGE_MAX);
+ snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
cgiSetVariable("NEXT", val);
}
{
FILE *in; /* Input file */
-
fprintf(stderr, "DEBUG2: cgiCopyTemplateFile(out=%p, tmpl=\"%s\")\n", out,
tmpl ? tmpl : "(null)");
if ((in = fopen(tmpl, "r")) == NULL)
{
fprintf(stderr, "ERROR: Unable to open template file \"%s\" - %s\n",
- tmpl ? tmpl : "(null)", strerror(errno));
+ tmpl, strerror(errno));
return;
}
* Convert the language to a locale name...
*/
- locale[0] = '\0';
-
if ((lang = getenv("LANG")) != NULL)
{
locale[0] = '/';
if ((locptr = strchr(locale, '.')) != NULL)
*locptr = '\0'; /* Strip charset */
}
+ else
+ {
+ locale[0] = '\0';
+ }
fprintf(stderr, "DEBUG2: lang=\"%s\", locale=\"%s\"...\n",
lang ? lang : "(null)", locale);
*/
if (name[1])
- sprintf(outval, "%d", cgiGetSize(name + 1));
+ snprintf(outval, sizeof(outval), "%d", cgiGetSize(name + 1));
else
- sprintf(outval, "%d", element + 1);
+ snprintf(outval, sizeof(outval), "%d", element + 1);
outptr = outval;
}
continue;
else if (ch == '#')
{
- sprintf(s, "%d", element + 1);
+ snprintf(s, sizeof(compare) - (size_t)(s - compare), "%d", element + 1);
s += strlen(s);
}
else if (ch == '{')
*innerptr = '\0';
if (innername[0] == '#')
- sprintf(s, "%d", cgiGetSize(innername + 1));
+ snprintf(s, sizeof(compare) - (size_t)(s - compare), "%d", cgiGetSize(innername + 1));
else if ((innerptr = strrchr(innername, '-')) != NULL &&
isdigit(innerptr[1] & 255))
{
/*
* CGI form variable and array functions for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2020 by Apple Inc.
* Copyright © 1997-2005 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
if (boundary)
boundary += 9;
- if (content_type && !strncmp(content_type, "multipart/form-data; ", 21))
+ if (!strncmp(content_type, "multipart/form-data; ", 21))
{
if (!cgi_initialize_multipart(boundary))
return (0);
--- /dev/null
+application/x-httpd-cgi cgi php
dnl
dnl Compiler stuff for CUPS.
dnl
-dnl Copyright 2007-2018 by Apple Inc.
+dnl Copyright 2007-2020 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl Licensed under Apache License v2.0. See the file "LICENSE" for more information.
fi
# Add useful warning options for tracking down problems...
- WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion"
+ WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion -Wno-unused-but-set-variable -Wno-unused-variable"
# Test GCC version for certain warning flags since -Werror
# doesn't trigger...
gccversion=`$CC --version | head -1 | awk '{print $NF}'`
case "$gccversion" in
- 1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
- ;;
- *)
- WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
+ 7.* | 8.* | 9.*)
+ WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-tautological-compare"
;;
esac
# Additional warning options for development testing...
if test -d .git; then
- WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations $WARNING_OPTIONS"
+ WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations -Wno-unknown-warning-option $WARNING_OPTIONS"
fi
else
# Add vendor-specific compiler options...
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for CUPS 2.3.2.
+# Generated by GNU Autoconf 2.69 for CUPS 2.3.6.
#
# Report bugs to <https://github.com/apple/cups/issues>.
#
# Identity of this package.
PACKAGE_NAME='CUPS'
PACKAGE_TARNAME='cups'
-PACKAGE_VERSION='2.3.2'
-PACKAGE_STRING='CUPS 2.3.2'
+PACKAGE_VERSION='2.3.6'
+PACKAGE_STRING='CUPS 2.3.6'
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
PACKAGE_URL='https://www.cups.org/'
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures CUPS 2.3.2 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.3.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of CUPS 2.3.2:";;
+ short | recursive ) echo "Configuration of CUPS 2.3.6:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-CUPS configure 2.3.2
+CUPS configure 2.3.6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by CUPS $as_me 2.3.2, which was
+It was created by CUPS $as_me 2.3.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION="2.3.2"
+CUPS_VERSION="2.3.6"
CUPS_REVISION=""
CUPS_BUILD="cups-$CUPS_VERSION"
fi
# Add useful warning options for tracking down problems...
- WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion"
+ WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion -Wno-unused-but-set-variable -Wno-unused-variable"
# Test GCC version for certain warning flags since -Werror
# doesn't trigger...
gccversion=`$CC --version | head -1 | awk '{print $NF}'`
case "$gccversion" in
- 1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
- ;;
- *)
+ 7.* | 8.* | 9.*)
WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
;;
esac
# Additional warning options for development testing...
if test -d .git; then
- WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations $WARNING_OPTIONS"
+ WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations -Wno-unknown-warning-option $WARNING_OPTIONS"
fi
else
# Add vendor-specific compiler options...
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by CUPS $as_me 2.3.2, which was
+This file was extended by CUPS $as_me 2.3.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-CUPS config.status 2.3.2
+CUPS config.status 2.3.6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
dnl
dnl Configuration script for CUPS.
dnl
-dnl Copyright © 2007-2019 by Apple Inc.
+dnl Copyright © 2007-2021 by Apple Inc.
dnl Copyright © 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl Licensed under Apache License v2.0. See the file "LICENSE" for more
AC_PREREQ(2.60)
dnl Package name and version...
-AC_INIT([CUPS], [2.3.2], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.3.6], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
sinclude(config-scripts/cups-opsys.m4)
sinclude(config-scripts/cups-common.m4)
# define cups_gss_printf(major, minor, message)
# endif /* DEBUG */
#endif /* HAVE_GSSAPI */
+static int cups_is_local_connection(http_t *http);
static int cups_local_auth(http_t *http);
DEBUG_printf(("2cupsDoAuthentication: Trying scheme \"%s\"...", scheme));
#ifdef HAVE_GSSAPI
- if (!_cups_strcasecmp(scheme, "Negotiate"))
+ if (!_cups_strcasecmp(scheme, "Negotiate") && !cups_is_local_connection(http))
{
/*
- * Kerberos authentication...
+ * Kerberos authentication to remote server...
*/
int gss_status; /* Auth status */
}
else
#endif /* HAVE_GSSAPI */
- if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
+ if (_cups_strcasecmp(scheme, "Basic") &&
+ _cups_strcasecmp(scheme, "Digest") &&
+ _cups_strcasecmp(scheme, "Negotiate"))
{
/*
* Other schemes not yet supported...
* See if we should retry the current username:password...
*/
- if ((http->digest_tries > 1 || !http->userpass[0]) && (!_cups_strcasecmp(scheme, "Basic") || (!_cups_strcasecmp(scheme, "Digest"))))
+ if (http->digest_tries > 1 || !http->userpass[0])
{
/*
* Nope - get a new password from the user...
}
}
- if (http->authstring)
+ if (http->authstring && http->authstring[0])
{
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\".", http->authstring));
gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
/* Output token */
-
- (void)method;
- (void)resource;
-
# ifdef __APPLE__
/*
* If the weak-linked GSSAPI/Kerberos library is not present, don't try
}
}
}
+# else
+ (void)method;
+ (void)resource;
# endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
if (major_status == GSS_S_NO_CRED)
* Skip quoted value...
*/
- www_authenticate ++;
- while (*www_authenticate && *www_authenticate != '\"')
+ do
www_authenticate ++;
+ while (*www_authenticate && *www_authenticate != '\"');
DEBUG_printf(("9cups_auth_find: After quoted: \"%s\"", www_authenticate));
}
# endif /* DEBUG */
#endif /* HAVE_GSSAPI */
+static int /* O - 0 if not a local connection */
+ /* 1 if local connection */
+cups_is_local_connection(http_t *http) /* I - HTTP connection to server */
+{
+ if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
+ return 0;
+ return 1;
+}
/*
* 'cups_local_auth()' - Get the local authorization certificate if
* See if we are accessing localhost...
*/
- if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
+ if (!cups_is_local_connection(http))
{
DEBUG_puts("8cups_local_auth: Not a local connection!");
return (1);
}
# endif /* HAVE_AUTHORIZATION_H */
-# ifdef HAVE_GSSAPI
- if (cups_auth_find(www_auth, "Negotiate"))
- return (1);
-# endif /* HAVE_GSSAPI */
-
# if defined(SO_PEERCRED) && defined(AF_LOCAL)
/*
* See if we can authenticate using the peer credentials provided over a
/*
* API definitions for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2022 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* Constants...
*/
-# define CUPS_VERSION 2.0302
+# define CUPS_VERSION 2.0306
# define CUPS_VERSION_MAJOR 2
# define CUPS_VERSION_MINOR 3
-# define CUPS_VERSION_PATCH 2
+# define CUPS_VERSION_PATCH 6
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
---
title: CUPS Programming Manual
author: Michael R Sweet
-copyright: Copyright © 2007-2019 by Apple Inc. All Rights Reserved.
-version: 2.3.1
+copyright: Copyright © 2007-2022 by Apple Inc. All Rights Reserved.
+version: 2.3.6
...
> Please [file issues on Github](https://github.com/apple/cups/issues) to
if (!cupsGetDest(name, instance, num_dests, *dests))
{
if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
- return (num_dests);
+ {
+ // Add destination first...
+ if ((dest = cups_add_dest(name, NULL, &num_dests, dests)) == NULL)
+ return (num_dests);
+ }
if ((dest = cups_add_dest(name, instance, &num_dests, dests)) == NULL)
return (num_dests);
cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_name_cb, &data);
if (!data.dest)
+ {
+ _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("The printer or class does not exist."), 1);
return (NULL);
+ }
dest = data.dest;
}
cups_dest_cb_t cb, /* I - Callback function */
void *user_data) /* I - User data */
{
- int i, j, /* Looping vars */
+ int i, j, k, /* Looping vars */
num_dests; /* Number of destinations */
cups_dest_t *dests = NULL, /* Destinations */
*dest; /* Current destination */
const char *device_uri; /* Device URI */
#endif /* HAVE_DNSSD || HAVE_AVAHI */
- if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
+ if ((user_dest = cupsGetDest(dest->name, NULL, data.num_dests, data.dests)) != NULL)
{
/*
- * Apply user defaults to this destination...
+ * Apply user defaults to this destination for all instances...
*/
- for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
- dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
- }
+ for (j = user_dest - data.dests; j < data.num_dests; j ++, user_dest ++)
+ {
+ if (_cups_strcasecmp(user_dest->name, dest->name))
+ {
+ j = data.num_dests;
+ break;
+ }
- if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
+ for (k = dest->num_options, option = dest->options; k > 0; k --, option ++)
+ user_dest->num_options = cupsAddOption(option->name, option->value, user_dest->num_options, &user_dest->options);
+
+ if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, user_dest))
+ break;
+ }
+
+ if (j < data.num_dests)
+ break;
+ }
+ else if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
break;
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
{
/*
- * Apply user defaults to this destination...
+ * Apply user defaults to this destination for all instances...
*/
- for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
- dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
- }
+ for (j = user_dest - data.dests; j < data.num_dests; j ++, user_dest ++)
+ {
+ if (_cups_strcasecmp(user_dest->name, dest->name))
+ {
+ j = data.num_dests;
+ break;
+ }
- if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
- {
- DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
- dest->is_default = 1;
+ for (k = dest->num_options, option = dest->options; k > 0; k --, option ++)
+ user_dest->num_options = cupsAddOption(option->name, option->value, user_dest->num_options, &user_dest->options);
+
+ if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, user_dest))
+ break;
+ }
+
+ if (j < data.num_dests)
+ {
+ remaining = -1;
+ break;
+ }
}
+ else
+ {
+ if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
+ {
+ DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
+ dest->is_default = 1;
+ }
- DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
- if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
- {
- remaining = -1;
- break;
- }
+ DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
+ if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
+ {
+ remaining = -1;
+ break;
+ }
+ }
}
device->state = _CUPS_DNSSD_ACTIVE;
* Out of memory!
*/
- DEBUG_puts("9cups_get_dests: Out of memory!");
+ DEBUG_puts("9cups_get_dests: Could not find destination after adding, must be out of memory.");
break;
}
}
*nameptr++ = '_';
}
+ /*
+ * Remove an underscore if it is the last character and isn't the only
+ * character in the name...
+ */
+
+ if (nameptr > (name + 1) && nameptr[-1] == '_')
+ nameptr --;
+
*nameptr = '\0';
}
httpBlocking(http, blocking);
httpFlush(http);
- if (status == HTTP_STATUS_ERROR)
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0);
- else
- {
- attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
+ attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
- DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"",
- ippErrorString(response->request.status.status_code),
- attr ? attr->values[0].string.text : ""));
+ DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"",
+ ippErrorString(response->request.status.status_code),
+ attr ? attr->values[0].string.text : ""));
- _cupsSetError(response->request.status.status_code,
- attr ? attr->values[0].string.text :
- ippErrorString(response->request.status.status_code), 0);
- }
+ _cupsSetError(response->request.status.status_code,
+ attr ? attr->values[0].string.text : ippErrorString(response->request.status.status_code), 0);
ippDelete(response);
# include <unistd.h>
# include <fcntl.h>
# include <sys/socket.h>
+# include <netinet/in.h>
# define CUPS_SOCAST
# endif /* _WIN32 */
goto too_small;
_cupsMD5Init(&state);
- _cupsMD5Append(&state, data, datalen);
+ _cupsMD5Append(&state, data, (int)datalen);
_cupsMD5Finish(&state, hash);
return (16);
* Listen...
*/
- if (listen(fd, 5))
+ if (listen(fd, 128))
{
_cupsSetHTTPError(HTTP_STATUS_ERROR);
}
if (!addrlist && nfds == 0)
+ {
+#ifdef _WIN32
+ errno = WSAEHOSTDOWN;
+#else
+ errno = EHOSTDOWN;
+#endif // _WIN32
break;
+ }
/*
* See if we can connect to any of the addresses so far...
remaining -= 250;
}
+ if (remaining <= 0)
+ errno = ETIMEDOUT;
+
while (nfds > 0)
{
nfds --;
DEBUG_printf(("4httpGetDateTime: day=%d, mon=\"%s\", year=%d, hour=%d, "
"min=%d, sec=%d", day, mon, year, hour, min, sec));
+ /*
+ * Check for invalid year (RFC 7231 says it's 4DIGIT)
+ */
+
+ if (year > 9999)
+ return (0);
+
/*
* Convert the month name to a number from 0 to 11.
*/
/*
* HTTP routines for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
if (_httpTLSStart(http) != 0)
{
httpAddrClose(NULL, http->fd);
+ http->fd = -1;
return (-1);
}
if (_httpTLSStart(http) != 0)
{
httpAddrClose(NULL, http->fd);
+ http->fd = -1;
*status = http->status = HTTP_STATUS_ERROR;
return (0);
HTTP_TRUST_CHANGED, /* Credentials have changed */
HTTP_TRUST_EXPIRED, /* Credentials are expired */
HTTP_TRUST_RENEWED, /* Credentials have been renewed */
- HTTP_TRUST_UNKNOWN, /* Credentials are unknown/new */
+ HTTP_TRUST_UNKNOWN /* Credentials are unknown/new */
} http_trust_t;
typedef enum http_uri_status_e /**** URI separation status @since CUPS 1.2@ ****/
* Start of quoted text or regular expression...
*/
- if (ch == '<')
- quote = '>';
- else
- quote = ch;
+ quote = ch;
DEBUG_printf(("1_ippFileReadToken: Start of quoted string, quote=%c, pos=%ld", quote, (long)cupsFileTell(f->fp)));
}
{
case IPP_TAG_BOOLEAN :
return (ippSetBoolean(ipp, attr, element, !_cups_strcasecmp(value, "true")));
- break;
case IPP_TAG_ENUM :
case IPP_TAG_INTEGER :
return (ippSetInteger(ipp, attr, element, (int)strtol(value, NULL, 0)));
- break;
case IPP_TAG_DATE :
{
return (ippSetDate(ipp, attr, element, date));
}
- break;
case IPP_TAG_RESOLUTION :
{
else
return (ippSetResolution(ipp, attr, element, (ipp_res_t)0, xres, yres));
}
- break;
case IPP_TAG_RANGE :
{
return (ippSetRange(ipp, attr, element, lower, upper));
}
- break;
case IPP_TAG_STRING :
valuelen = strlen(value);
}
else
return (ippSetOctetString(ipp, attr, element, value, (int)valuelen));
- break;
case IPP_TAG_TEXTLANG :
case IPP_TAG_NAMELANG :
case IPP_TAG_LANGUAGE :
case IPP_TAG_MIMETYPE :
return (ippSetString(ipp, attr, element, value));
- break;
case IPP_TAG_BEGIN_COLLECTION :
{
return (status);
}
- break;
default :
report_error(f, v, user_data, "Unsupported value on line %d of \"%s\".", f->linenum, f->filename);
return (0);
}
-
- return (1);
}
* No, build an "0xxxxx" error string...
*/
- sprintf(cg->ipp_unknown, "0x%04x", error);
+ snprintf(cg->ipp_unknown, sizeof(cg->ipp_unknown), "0x%04x", error);
return (cg->ipp_unknown);
}
* No, build an "0xxxxx" operation string...
*/
- sprintf(cg->ipp_unknown, "0x%04x", op);
+ snprintf(cg->ipp_unknown, sizeof(cg->ipp_unknown), "0x%04x", op);
return (cg->ipp_unknown);
}
* Include necessary headers...
*/
-#include <cups/cups.h>
+#include "cups-private.h"
#include "ipp-private.h"
#include "string-private.h"
#include "debug-internal.h"
{
if (!strcmp(name, "uri"))
{
- char uri[1024]; /* New printer URI */
- http_uri_status_t uri_status; /* URI status */
+ char uri[1024]; /* New printer URI */
+ char resolved[1024]; /* Resolved mDNS URI */
- if ((uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, value, v->scheme, sizeof(v->scheme), v->username, sizeof(v->username), v->host, sizeof(v->host), &(v->port), v->resource, sizeof(v->resource))) < HTTP_URI_STATUS_OK)
+ if (strstr(value, "._tcp"))
+ {
+ /*
+ * Resolve URI...
+ */
+
+ if (!_httpResolveURI(value, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
+ return (0);
+
+ value = resolved;
+ }
+
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, value, v->scheme, sizeof(v->scheme), v->username, sizeof(v->username), v->host, sizeof(v->host), &(v->port), v->resource, sizeof(v->resource)) < HTTP_URI_STATUS_OK)
return (0);
if (v->username[0])
/*
* Internet Printing Protocol functions for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
unsigned char *buffer, /* Data buffer */
string[IPP_MAX_TEXT],
/* Small string buffer */
- *bufptr; /* Pointer into buffer */
- ipp_attribute_t *attr; /* Current attribute */
+ *bufptr, /* Pointer into buffer */
+ *bufend; /* End of buffer */
+ ipp_attribute_t *attr = NULL; /* Current attribute */
ipp_tag_t tag; /* Current tag */
ipp_tag_t value_tag; /* Current value tag */
_ipp_value_t *value; /* Current value */
if ((*cb)(src, buffer, 8) < 8)
{
DEBUG_puts("1ippReadIO: Unable to read header.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
/*
if ((*cb)(src, buffer, 1) < 1)
{
DEBUG_puts("1ippReadIO: Callback returned EOF/error");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
* Read 32-bit "extension" tag...
*/
- if ((*cb)(src, buffer, 4) < 1)
+ if ((*cb)(src, buffer, 4) < 4)
{
DEBUG_puts("1ippReadIO: Callback returned EOF/error");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
tag = (ipp_tag_t)((((((buffer[0] << 8) | buffer[1]) << 8) |
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP extension tag larger than 0x7FFFFFFF."), 1);
DEBUG_printf(("1ippReadIO: bad tag 0x%x.", tag));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
}
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
{
* Group tag... Set the current group and continue...
*/
- if (ipp->curtag == tag)
+ if (parent)
+ {
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
+ DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
+ goto rollback;
+ }
+ else if (ipp->curtag == tag)
ipp->prev = ippAddSeparator(ipp);
else if (ipp->current)
ipp->prev = ipp->current;
ipp->curtag = tag;
ipp->current = NULL;
+ attr = NULL;
DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag, ippTagString(tag), (void *)ipp->prev));
continue;
}
if ((*cb)(src, buffer, 2) < 2)
{
DEBUG_puts("1ippReadIO: unable to read name length.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
n = (buffer[0] << 8) | buffer[1];
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP name larger than 32767 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad name length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
DEBUG_printf(("2ippReadIO: name length=%d", n));
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid named IPP attribute in collection."), 1);
DEBUG_puts("1ippReadIO: bad attribute name in collection.");
- return (IPP_STATE_ERROR);
+ goto rollback;
}
else if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION)
{
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP attribute has no name."), 1);
DEBUG_puts("1ippReadIO: Attribute without name and no current.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
attr = ipp->current;
DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)",
value_tag, ippTagString(value_tag), tag,
ippTagString(tag)));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if (value_tag != tag)
DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)",
value_tag, ippTagString(value_tag), tag,
ippTagString(tag)));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if (value_tag == IPP_TAG_INTEGER && tag == IPP_TAG_RANGE)
DEBUG_printf(("1ippReadIO: value tag %x(%s) != %x(%s)",
value_tag, ippTagString(value_tag), tag,
ippTagString(tag)));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
/*
*/
if ((value = ipp_set_value(ipp, &attr, attr->num_values)) == NULL)
- {
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
- }
+ goto rollback;
}
else if (tag == IPP_TAG_MEMBERNAME)
{
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP member name is not empty."), 1);
DEBUG_puts("1ippReadIO: member name not empty.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
+ }
+ else if (!parent)
+ {
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP member attribute outside of collection."), 1);
+ DEBUG_puts("1ippReadIO: member attribute outside of collection.");
+ goto rollback;
}
if (ipp->current)
{
_cupsSetHTTPError(HTTP_STATUS_ERROR);
DEBUG_puts("1ippReadIO: unable to allocate attribute.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
if ((*cb)(src, buffer, (size_t)n) < n)
{
DEBUG_puts("1ippReadIO: unable to read name.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
buffer[n] = '\0';
{
_cupsSetHTTPError(HTTP_STATUS_ERROR);
DEBUG_puts("1ippReadIO: unable to allocate attribute.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, ipp->prev=%p", buffer, (void *)ipp->current, (void *)ipp->prev));
if ((*cb)(src, buffer, 2) < 2)
{
DEBUG_puts("1ippReadIO: unable to read value length.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
n = (buffer[0] << 8) | buffer[1];
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP value larger than 32767 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
switch (tag)
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP enum value not 4 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad integer value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, buffer, 4) < 4)
{
DEBUG_puts("1ippReadIO: Unable to read integer value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
n = (((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) |
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP boolean value not 1 byte."),
1);
DEBUG_printf(("1ippReadIO: bad boolean value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, buffer, 1) < 1)
{
DEBUG_puts("1ippReadIO: Unable to read boolean value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
value->boolean = (char)buffer[0];
if ((*cb)(src, buffer, (size_t)n) < n)
{
DEBUG_puts("1ippReadIO: unable to read string value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
}
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP date value not 11 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad date value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, value->date, 11) < 11)
{
DEBUG_puts("1ippReadIO: Unable to read date value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
break;
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP resolution value not 9 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad resolution value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, buffer, 9) < 9)
{
DEBUG_puts("1ippReadIO: Unable to read resolution value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
value->resolution.xres =
_("IPP rangeOfInteger value not 8 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad rangeOfInteger value length "
"%d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, buffer, 8) < 8)
{
DEBUG_puts("1ippReadIO: Unable to read range value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
value->range.lower =
"minimum 4 bytes."), 1);
DEBUG_printf(("1ippReadIO: bad stringWithLanguage value "
"length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, buffer, (size_t)n) < n)
{
DEBUG_puts("1ippReadIO: Unable to read string w/language "
"value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
bufptr = buffer;
+ bufend = buffer + n;
/*
* text-with-language and name-with-language are composite
n = (bufptr[0] << 8) | bufptr[1];
- if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string))
+ if ((bufptr + 2 + n + 2) > bufend || n >= (int)sizeof(string))
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP language length overflows value."), 1);
DEBUG_printf(("1ippReadIO: bad language value length %d.",
n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
else if (n >= IPP_MAX_LANGUAGE)
{
_("IPP language length too large."), 1);
DEBUG_printf(("1ippReadIO: bad language value length %d.",
n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
memcpy(string, bufptr + 2, (size_t)n);
bufptr += 2 + n;
n = (bufptr[0] << 8) | bufptr[1];
- if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE))
+ if ((bufptr + 2 + n) > bufend)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP string length overflows value."), 1);
DEBUG_printf(("1ippReadIO: bad string value length %d.", n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
bufptr[2 + n] = '\0';
_("IPP begCollection value not 0 bytes."), 1);
DEBUG_puts("1ippReadIO: begCollection tag with value length "
"> 0.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if (ippReadIO(src, cb, 1, ipp, value->collection) == IPP_STATE_ERROR)
{
DEBUG_puts("1ippReadIO: Unable to read collection value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
break;
case IPP_TAG_END_COLLECTION :
- _cupsBufferRelease((char *)buffer);
-
if (n > 0)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP endCollection value not 0 bytes."), 1);
DEBUG_puts("1ippReadIO: endCollection tag with value length "
"> 0.");
- return (IPP_STATE_ERROR);
+ goto rollback;
}
+ _cupsBufferRelease((char *)buffer);
+
DEBUG_puts("1ippReadIO: endCollection tag...");
return (ipp->state = IPP_STATE_DATA);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP memberName with no attribute."), 1);
DEBUG_puts("1ippReadIO: Member name without attribute.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
else if (n == 0)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("IPP memberName value is empty."), 1);
DEBUG_puts("1ippReadIO: Empty member name value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
else if ((*cb)(src, buffer, (size_t)n) < n)
{
DEBUG_puts("1ippReadIO: Unable to read member name value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
buffer[n] = '\0';
_("IPP octetString length too large."), 1);
DEBUG_printf(("1ippReadIO: bad octetString value length %d.",
n));
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
value->unknown.length = n;
{
_cupsSetHTTPError(HTTP_STATUS_ERROR);
DEBUG_puts("1ippReadIO: Unable to allocate value");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
if ((*cb)(src, value->unknown.data, (size_t)n) < n)
{
DEBUG_puts("1ippReadIO: Unable to read unsupported value.");
- _cupsBufferRelease((char *)buffer);
- return (IPP_STATE_ERROR);
+ goto rollback;
}
}
else
_cupsBufferRelease((char *)buffer);
return (ipp->state);
+
+ // If we get here, there was an error that required us to roll back the last
+ // attribute read in order to keep the IPP message valid...
+ rollback:
+
+ _cupsBufferRelease((char *)buffer);
+
+ if (attr)
+ ippDeleteAttribute(ipp, attr);
+
+ return (IPP_STATE_ERROR);
}
if (ptr < (value + sizeof(value) - 1))
*ptr++ = *device_id;
- if (!*device_id)
- break;
-
while (ptr > value && _cups_isspace(ptr[-1]))
ptr --;
*ptr = '\0';
- device_id ++;
-
num_values = cupsAddOption(key, value, num_values, values);
+
+ if (!*device_id)
+ break;
+ device_id ++;
}
return (num_values);
int num_finishings = 0, /* Number of finishing values */
finishings[10]; /* Finishing enum values */
ppd_choice_t *choice; /* Marked choice */
- int finishings_copies = copies;
+ int finishings_copies = copies,
/* Number of copies for finishings */
+ job_pages = 0, /* job-pages value */
+ number_up = 1; /* number-up value */
+ const char *value; /* Option value */
/*
* Map finishing options...
*/
+ if (copies != finishings_copies)
+ {
+ // Figure out the proper job-pages-per-set value...
+ if ((value = cupsGetOption("job-pages", num_options, options)) == NULL)
+ value = cupsGetOption("com.apple.print.PrintSettings.PMTotalBeginPages..n.", num_options, options);
+
+ if (value)
+ job_pages = atoi(value);
+
+ // Adjust for number-up
+ if ((value = cupsGetOption("number-up", num_options, options)) != NULL)
+ number_up = atoi(value);
+
+ job_pages = (job_pages + number_up - 1) / number_up;
+
+ // When duplex printing, raster data will include an extra (blank) page to
+ // make the total number of pages even. Make sure this is reflected in the
+ // page count...
+ if ((job_pages & 1) && (keyword = cupsGetOption("sides", num_options, options)) != NULL && strcmp(keyword, "one-sided"))
+ job_pages ++;
+ }
+
if ((finishing_template = cupsGetOption("cupsFinishingTemplate", num_options, options)) == NULL)
finishing_template = cupsGetOption("finishing-template", num_options, options);
ippAddCollection(request, IPP_TAG_JOB, "finishings-col", fin_col);
ippDelete(fin_col);
- if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
+ if (copies != finishings_copies && job_pages > 0)
{
/*
* Send job-pages-per-set attribute to apply finishings correctly...
*/
- ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies);
+ ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", job_pages);
}
}
else
{
ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings);
- if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
+ if (copies != finishings_copies && job_pages > 0)
{
/*
* Send job-pages-per-set attribute to apply finishings correctly...
*/
- ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies);
+ ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", job_pages);
}
}
}
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
}
else
- cupsFilePuts(fp, "*cupsManualCopies: true\n");
+ cupsFilePuts(fp, "*cupsManualCopies: True\n");
if (is_apple)
cupsFilePuts(fp, "*cupsFilter2: \"image/urf image/urf 100 -\"\n");
if (is_pwg)
if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-source", IPP_TAG_ZERO)) != NULL)
pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
else
- strlcpy(ppdname, "Unknown", sizeof(ppdname));
+ ppdname[0] = '\0';
if ((attr = ippFindAttribute(response, "media-source-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1)
{
+ int have_default = ppdname[0] != '\0';
+ /* Do we have a default InputSlot? */
static const char * const sources[] =
{ /* Standard "media-source" strings */
"auto",
"roll-10"
};
- cupsFilePrintf(fp, "*OpenUI *InputSlot: PickOne\n"
- "*OrderDependency: 10 AnySetup *InputSlot\n"
- "*DefaultInputSlot: %s\n", ppdname);
- for (i = 0, count = ippGetCount(attr); i < count; i ++)
+ cupsFilePuts(fp, "*OpenUI *InputSlot: PickOne\n"
+ "*OrderDependency: 10 AnySetup *InputSlot\n");
+ if (have_default)
+ cupsFilePrintf(fp, "*DefaultInputSlot: %s\n", ppdname);
+
+ for (i = 0; i < count; i ++)
{
keyword = ippGetString(attr, i, NULL);
pwg_ppdize_name(keyword, ppdname, sizeof(ppdname));
+ if (i == 0 && !have_default)
+ cupsFilePrintf(fp, "*DefaultInputSlot: %s\n", ppdname);
+
for (j = 0; j < (int)(sizeof(sources) / sizeof(sources[0])); j ++)
if (!strcmp(sources[j], keyword))
{
snprintf(msgid, sizeof(msgid), "media-source.%s", keyword);
+
+ if ((msgstr = _cupsLangString(lang, msgid)) == msgid || !strcmp(msgid, msgstr))
+ if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
+ msgstr = keyword;
+
cupsFilePrintf(fp, "*InputSlot %s: \"<</MediaPosition %d>>setpagedevice\"\n", ppdname, j);
- cupsFilePrintf(fp, "*%s.InputSlot %s/%s: \"\"\n", lang->language, ppdname, _cupsLangString(lang, msgid));
+ cupsFilePrintf(fp, "*%s.InputSlot %s/%s: \"\"\n", lang->language, ppdname, msgstr);
break;
}
}
int wrote_color = 0;
const char *default_color = NULL; /* Default */
+ cupsFilePrintf(fp, "*%% ColorModel from %s\n", ippGetName(attr));
+
for (i = 0, count = ippGetCount(attr); i < count; i ++)
{
keyword = ippGetString(attr, i, NULL);
PRINTF_COLOROPTION("RGB", _("Color"), CUPS_CSPACE_SRGB, 8)
default_color = "RGB";
+
+ // Apparently some printers only advertise color support, so make sure
+ // we also do grayscale for these printers...
+ if (!ippContainsString(attr, "sgray_8") && !ippContainsString(attr, "black_1") && !ippContainsString(attr, "black_8") && !ippContainsString(attr, "W8") && !ippContainsString(attr, "W8-16"))
+ PRINTF_COLOROPTION("Gray", _("GrayScale"), CUPS_CSPACE_SW, 8)
}
else if (!strcasecmp(keyword, "adobe-rgb_16") || !strcmp(keyword, "ADOBERGB48") || !strcmp(keyword, "ADOBERGB24-48"))
{
else
strlcpy(ppdname, "Unknown", sizeof(ppdname));
- if ((attr = ippFindAttribute(response, "output-bin-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1)
+ if ((attr = ippFindAttribute(response, "output-bin-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 0)
{
ipp_attribute_t *trays = ippFindAttribute(response, "printer-output-tray", IPP_TAG_STRING);
/* printer-output-tray attribute, if any */
{
char *ptr, /* Pointer into name buffer */
*end; /* End of name buffer */
+ int nodash = 1; /* Next char in IPP name cannot be a
+ dash (first char or after a dash) */
if (_cups_islower(*ppd))
const char *ppdptr; /* Pointer into PPD keyword */
for (ppdptr = ppd + 1; *ppdptr; ppdptr ++)
- if (_cups_isupper(*ppdptr) || strchr(dashchars, *ppdptr))
+ if (_cups_isupper(*ppdptr) || strchr(dashchars, *ppdptr) ||
+ (*ppdptr == '-' && *(ppdptr - 1) == '-') ||
+ (*ppdptr == '-' && *(ppdptr + 1) == '\0'))
break;
if (!*ppdptr)
for (ptr = name, end = name + namesize - 1; *ppd && ptr < end; ppd ++)
{
- if (_cups_isalnum(*ppd) || *ppd == '-')
+ if (_cups_isalnum(*ppd))
+ {
*ptr++ = (char)tolower(*ppd & 255);
- else if (strchr(dashchars, *ppd))
- *ptr++ = '-';
+ nodash = 0;
+ }
+ else if (*ppd == '-' || strchr(dashchars, *ppd))
+ {
+ if (nodash == 0)
+ {
+ *ptr++ = '-';
+ nodash = 1;
+ }
+ }
else
+ {
*ptr++ = *ppd;
+ nodash = 0;
+ }
- if (!_cups_isupper(*ppd) && _cups_isalnum(*ppd) &&
- _cups_isupper(ppd[1]) && ptr < end)
- *ptr++ = '-';
- else if (!isdigit(*ppd & 255) && isdigit(ppd[1] & 255))
- *ptr++ = '-';
+ if (nodash == 0)
+ {
+ if (!_cups_isupper(*ppd) && _cups_isalnum(*ppd) &&
+ _cups_isupper(ppd[1]) && ptr < end)
+ {
+ *ptr++ = '-';
+ nodash = 1;
+ }
+ else if (!isdigit(*ppd & 255) && isdigit(ppd[1] & 255))
+ {
+ *ptr++ = '-';
+ nodash = 1;
+ }
+ }
}
+ /* Remove trailing dashes */
+ while (ptr > name && *(ptr - 1) == '-')
+ ptr --;
+
*ptr = '\0';
}
* Look it up in the PPD file...
*/
- sprintf(s, "%d", j);
+ snprintf(s, sizeof(s), "%d", j);
if ((attr = ppdFindAttr(ppd, "cupsIPPFinishings", s)) == NULL)
continue;
* Constants...
*/
-# define _PPD_CACHE_VERSION 9 /* Version number in cache file */
+# define _PPD_CACHE_VERSION 10 /* Version number in cache file */
/*
free(ppd->lang_encoding);
free(ppd->nickname);
free(ppd->patches);
+ free(ppd->emulations);
free(ppd->jcl_begin);
free(ppd->jcl_end);
free(ppd->jcl_ps);
ppd_decode(ppd->jcl_ps); /* Decode quoted string */
}
else if (!strcmp(keyword, "AccurateScreensSupport"))
- ppd->accurate_screens = !strcmp(string, "True");
+ ppd->accurate_screens = !strcasecmp(string, "True");
else if (!strcmp(keyword, "ColorDevice"))
- ppd->color_device = !strcmp(string, "True");
+ ppd->color_device = !strcasecmp(string, "True");
else if (!strcmp(keyword, "ContoneOnly"))
- ppd->contone_only = !strcmp(string, "True");
+ ppd->contone_only = !strcasecmp(string, "True");
else if (!strcmp(keyword, "cupsFlipDuplex"))
- ppd->flip_duplex = !strcmp(string, "True");
+ ppd->flip_duplex = !strcasecmp(string, "True");
else if (!strcmp(keyword, "cupsManualCopies"))
- ppd->manual_copies = !strcmp(string, "True");
+ ppd->manual_copies = !strcasecmp(string, "True");
else if (!strcmp(keyword, "cupsModelNumber"))
ppd->model_number = atoi(string);
else if (!strcmp(keyword, "cupsColorProfile"))
goto error;
}
+ if (option && (!_cups_strcasecmp(option->defchoice, "custom") || !_cups_strncasecmp(option->defchoice, "custom.", 7)))
+ {
+ /*
+ * "*DefaultOption: Custom..." may set the default to a custom value
+ * or (for a very small number of incompatible PPD files) select a
+ * standard choice for the option, which CUPS renames to "_Custom..."
+ * to avoid compatibility issues. See which this is...
+ */
+
+ char tchoice[PPD_MAX_NAME]; /* Temporary choice name */
+
+ snprintf(tchoice, sizeof(tchoice), "_%s", option->defchoice);
+
+ if (ppdFindChoice(option, tchoice))
+ {
+ strlcpy(option->defchoice, tchoice, sizeof(option->defchoice));
+
+ DEBUG_printf(("2_ppdOpen: Reset Default%s to %s...", option->keyword, tchoice));
+ }
+ }
+
option = NULL;
free(string);
goto error;
}
+ if (option && (!_cups_strcasecmp(option->defchoice, "custom") || !_cups_strncasecmp(option->defchoice, "custom.", 7)))
+ {
+ /*
+ * "*DefaultOption: Custom..." may set the default to a custom value
+ * or (for a very small number of incompatible PPD files) select a
+ * standard choice for the option, which CUPS renames to "_Custom..."
+ * to avoid compatibility issues. See which this is...
+ */
+
+ char tchoice[PPD_MAX_NAME]; /* Temporary choice name */
+
+ snprintf(tchoice, sizeof(tchoice), "_%s", option->defchoice);
+
+ if (ppdFindChoice(option, tchoice))
+ {
+ strlcpy(option->defchoice, tchoice, sizeof(option->defchoice));
+
+ DEBUG_printf(("2_ppdOpen: Reset Default%s to %s...", option->keyword, tchoice));
+ }
+ }
+
option = NULL;
free(string);
* Set the default as part of the current option...
*/
- DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string));
-
- strlcpy(option->defchoice, string, sizeof(option->defchoice));
+ strlcpy(option->defchoice, string, sizeof(option->defchoice));
- DEBUG_printf(("2_ppdOpen: %s is now %s...", keyword, option->defchoice));
+ DEBUG_printf(("2_ppdOpen: Set %s to %s...", keyword, option->defchoice));
}
else
{
ppd_option_t *toption; /* Temporary option */
-
if ((toption = ppdFindOption(ppd, keyword + 7)) != NULL)
{
- DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string));
- strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+ if (!_cups_strcasecmp(string, "custom") || !_cups_strncasecmp(string, "custom.", 7))
+ {
+ /*
+ * "*DefaultOption: Custom..." may set the default to a custom value
+ * or (for a very small number of incompatible PPD files) select a
+ * standard choice for the option, which CUPS renames to "_Custom..."
+ * to avoid compatibility issues. See which this is...
+ */
+
+ snprintf(toption->defchoice, sizeof(toption->defchoice), "_%s", string);
+ if (!ppdFindChoice(toption, toption->defchoice))
+ strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+ }
+ else
+ {
+ strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+ }
+
+ DEBUG_printf(("2_ppdOpen: Set %s to %s...", keyword, toption->defchoice));
}
}
}
constraint->choice1, constraint->option2,
constraint->choice2))
{
- case 0 : /* Error */
- case 1 : /* Error */
+ default : /* Error */
pg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
goto error;
* Copy data over...
*/
+ if (!_cups_strcasecmp(spec, "custom") || !_cups_strncasecmp(spec, "custom.", 7))
+ {
+ temp->spec[0] = '_';
+ strlcpy(temp->spec + 1, spec, sizeof(temp->spec) - 1);
+ }
+ else {
+ strlcpy(temp->spec, spec, sizeof(temp->spec));
+ }
+
strlcpy(temp->name, name, sizeof(temp->name));
- strlcpy(temp->spec, spec, sizeof(temp->spec));
strlcpy(temp->text, text, sizeof(temp->text));
temp->value = (char *)value;
for (hash = option->keyword[0], k = option->keyword + 1; *k;)
- hash = 33 * hash + *k++;
+ hash = (int)(33U * (unsigned)hash) + *k++;
return (hash & 511);
}
size->width = x_dimension->values[0].integer;
size->length = y_dimension->values[0].integer;
}
- else if (!x_dimension)
+ else if (!x_dimension) /* x_dimension is missing */
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("Missing x-dimension in media-size."), 1);
return (0);
}
- else if (!y_dimension)
+ else /* y_dimension must be missing */
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
_("Missing y-dimension in media-size."), 1);
ippDelete(response);
response = NULL;
- http->status = status = HTTP_STATUS_ERROR;
+ http->status = HTTP_STATUS_ERROR;
http->error = EINVAL;
}
}
if (!cupsDoAuthentication(http, "POST", resource))
httpReconnect2(http, 30000, NULL);
else
- http->status = status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
+ http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
}
#ifdef HAVE_SSL
/*
* snprintf functions for CUPS.
*
+ * Copyright © 2021 by OpenPrinting
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
format ++;
width = va_arg(ap, int);
- snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width);
+ /* Note: Can't use snprintf here since we are implementing this function... */
+ sprintf(tptr, "%d", width);
tptr += strlen(tptr);
}
else
format ++;
prec = va_arg(ap, int);
- snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec);
+ /* Note: Can't use snprintf here since we are implementing this function... */
+ sprintf(tptr, "%d", prec);
tptr += strlen(tptr);
}
else
if ((width + 2) > sizeof(temp))
break;
+ /* Note: Can't use snprintf here since we are implementing this function... */
sprintf(temp, tformat, va_arg(ap, double));
templen = strlen(temp);
if ((width + 2) > sizeof(temp))
break;
+ /* Note: Can't use snprintf here since we are implementing this function... */
sprintf(temp, tformat, va_arg(ap, int));
templen = strlen(temp);
if ((width + 2) > sizeof(temp))
break;
+ /* Note: Can't use snprintf here since we are implementing this function... */
sprintf(temp, tformat, va_arg(ap, void *));
templen = strlen(temp);
* Nul-terminate the string and return the number of characters needed.
*/
- *bufptr = '\0';
+ if (bufptr && bufptr < bufend)
+ *bufptr = '\0';
return (bytes);
}
* Constants...
*/
-#define MAX_CLIENTS 16 /* Maximum number of client threads */
+#define MAX_CLIENTS 100 /* Maximum number of client threads */
/*
int grayscale, /* Force grayscale? */
keepfile; /* Keep temporary file? */
ipp_pstate_t printer_state; /* Current printer state */
- char printer_state_reasons[1024];
- /* Current printer-state-reasons */
+ char printer_state_reasons[1024];
+ /* Current printer-state-reasons */
int job_id; /* Job ID for submitted job */
ipp_jstate_t job_state; /* Current job state */
- char job_state_reasons[1024];
- /* Current job-state-reasons */
+ char job_state_reasons[1024];
+ /* Current job-state-reasons */
} _client_data_t;
* Local functions...
*/
-static const char *make_raster_file(ipp_t *response, int grayscale, char *tempname, size_t tempsize, const char **format);
-static void *monitor_printer(_client_data_t *data);
+static const char *make_raster_file(ipp_t *response, int grayscale, char *tempname, size_t tempsize, const char **format);
+static void *monitor_printer(_client_data_t *data);
static void *run_client(_client_data_t *data);
-static void show_attributes(const char *title, int request, ipp_t *ipp);
-static void show_capabilities(ipp_t *response);
-static void usage(void);
+static void show_attributes(const char *title, int request, ipp_t *ipp);
+static void show_capabilities(ipp_t *response);
+static void usage(void);
/*
* Figure out the the media, resolution, and color mode...
*/
- if ((attr = ippFindAttribute(response, "media-default", IPP_TAG_KEYWORD)) != NULL)
- {
- /*
- * Use default media...
- */
-
- media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
- }
- else if ((attr = ippFindAttribute(response, "media-ready", IPP_TAG_KEYWORD)) != NULL)
+ if ((attr = ippFindAttribute(response, "media-ready", IPP_TAG_KEYWORD)) != NULL)
{
/*
* Use ready media...
else
media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
}
+ else if ((attr = ippFindAttribute(response, "media-default", IPP_TAG_KEYWORD)) != NULL)
+ {
+ /*
+ * Use default media...
+ */
+
+ media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
+ }
else
{
puts("No default or ready media reported by printer, aborting.");
header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = 1;
- if (header.cupsWidth > (4 * header.HWResolution[0]))
+ if (header.cupsWidth > (2 * header.HWResolution[0]))
{
xoff = header.HWResolution[0] / 2;
yoff = header.HWResolution[1] / 2;
}
else
{
- xoff = 0;
- yoff = 0;
+ xoff = header.HWResolution[0] / 4;
+ yoff = header.HWResolution[1] / 4;
}
xrep = (header.cupsWidth - 2 * xoff) / 140;
for (y = 0; y < header.cupsHeight; y ++)
cupsRasterWritePixels(ras, line, header.cupsBytesPerLine);
+ free(line);
+
cupsRasterClose(ras);
close(fd);
ipp_attribute_t *attr; /* Attribute in response */
static const char * const pattrs[] = /* Printer attributes we are interested in */
{
- "job-template",
- "printer-defaults",
- "printer-description",
- "media-col-database",
- "media-col-ready"
+ "all",
+ "media-col-database"
};
{
cups_file_t *fp; /* File to print */
int job_id; /* Job ID */
- ipp_status_t status; /* Submission status */
const char *title; /* Title of job */
char buffer[32768]; /* File buffer */
ssize_t bytes; /* Bytes read/to write */
else
title = filename;
- if ((status = cupsCreateDestJob(http, dest, dinfo, &job_id, title, num_options, options)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
+ if (cupsCreateDestJob(http, dest, dinfo, &job_id, title, num_options, options) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
{
printf("Unable to create job: %s\n", cupsLastErrorString());
cupsFileClose(fp);
cupsFileClose(fp);
- if ((status = cupsFinishDestDocument(http, dest, dinfo)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
+ if (cupsFinishDestDocument(http, dest, dinfo) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
{
printf("Unable to send document: %s\n", cupsLastErrorString());
return;
/*
* TLS support code for CUPS on macOS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
else
tls_selfsigned = ident;
- _cupsMutexLock(&tls_mutex);
+ _cupsMutexUnlock(&tls_mutex);
# if 0 /* Someday perhaps SecItemCopyMatching will work for identities, at which point */
CFTypeRef itemKeys[] = { kSecClass, kSecAttrLabel, kSecValueRef };
if (!buffer)
return (0);
- if (buffer && bufsize > 0)
+ if (bufsize > 0)
*buffer = '\0';
if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL &&
/* Pointer to library globals */
- if (cg->home)
+ if (cg->home && getuid())
{
snprintf(buffer, bufsize, "%s/.cups", cg->home);
if (access(buffer, 0))
DEBUG_printf(("4_httpTLSStart: Using certificate \"%s\" and private key \"%s\".", crtfile, keyfile));
- if (!status)
- status = gnutls_certificate_set_x509_key_file(*credentials, crtfile, keyfile, GNUTLS_X509_FMT_PEM);
+ status = gnutls_certificate_set_x509_key_file(*credentials, crtfile, keyfile, GNUTLS_X509_FMT_PEM);
}
if (!status)
SecBufferDesc outBuffer; /* Array of SecBuffer structs */
SecBuffer outBuffers[1]; /* Security package buffer */
int ret = 0; /* Return value */
- char username[1024], /* Current username */
- common_name[1024]; /* CN=username */
DEBUG_printf(("4http_sspi_client(http=%p, hostname=\"%s\")", http, hostname));
* Lookup the client certificate...
*/
- dwSize = sizeof(username);
- GetUserNameA(username, &dwSize);
- snprintf(common_name, sizeof(common_name), "CN=%s", username);
-
- if (!http_sspi_find_credentials(http, L"ClientContainer", common_name))
- if (!http_sspi_make_credentials(http->tls, L"ClientContainer", common_name, _HTTP_MODE_CLIENT, 10))
- {
- DEBUG_puts("5http_sspi_client: Unable to get client credentials.");
- return (-1);
- }
+ if (!http_sspi_find_credentials(http, L"ClientContainer", NULL))
+ {
+ DEBUG_puts("5http_sspi_client: Unable to get client credentials.");
+ return (-1);
+ }
/*
* Initiate a ClientHello message and generate a token.
goto cleanup;
}
- dwSize = 0;
-
- if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL))
+ if (common_name)
{
- DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
- ok = FALSE;
- goto cleanup;
- }
+ dwSize = 0;
- p = (PBYTE)malloc(dwSize);
+ if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL))
+ {
+ DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
+ ok = FALSE;
+ goto cleanup;
+ }
- if (!p)
- {
- DEBUG_printf(("5http_sspi_find_credentials: malloc failed for %d bytes.", dwSize));
- ok = FALSE;
- goto cleanup;
- }
+ p = (PBYTE)malloc(dwSize);
- if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL))
- {
- DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
- ok = FALSE;
- goto cleanup;
- }
+ if (!p)
+ {
+ DEBUG_printf(("5http_sspi_find_credentials: malloc failed for %d bytes.", dwSize));
+ ok = FALSE;
+ goto cleanup;
+ }
- sib.cbData = dwSize;
- sib.pbData = p;
+ if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL))
+ {
+ DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
+ ok = FALSE;
+ goto cleanup;
+ }
- storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL);
+ sib.cbData = dwSize;
+ sib.pbData = p;
- if (!storedContext)
- {
- DEBUG_printf(("5http_sspi_find_credentials: Unable to find credentials for \"%s\".", common_name));
- ok = FALSE;
- goto cleanup;
+ storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL);
+
+ if (!storedContext)
+ {
+ DEBUG_printf(("5http_sspi_find_credentials: Unable to find credentials for \"%s\".", common_name));
+ ok = FALSE;
+ goto cleanup;
+ }
}
ZeroMemory(&SchannelCred, sizeof(SchannelCred));
SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;
- SchannelCred.cCreds = 1;
- SchannelCred.paCred = &storedContext;
+
+ if (common_name)
+ {
+ SchannelCred.cCreds = 1;
+ SchannelCred.paCred = &storedContext;
+ }
/*
* Set supported protocols (can also be overriden in the registry...)
SchannelCred.cCreds = 1;
SchannelCred.paCred = &storedContext;
- /*
- * SSPI doesn't seem to like it if grbitEnabledProtocols is set for a client.
- */
-
- if (mode == _HTTP_MODE_SERVER)
- SchannelCred.grbitEnabledProtocols = SP_PROT_SSL3TLS1;
-
/*
* Create an SSPI credential.
*/
* Local functions...
*/
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
/*
-<HTML>
+<!DOCTYPE html>
+<html>
<!-- SECTION: Getting Started -->
-<HEAD>
- <TITLE>Using CGI Programs</TITLE>
- <LINK REL="STYLESHEET" TYPE="text/css" HREF="../cups-printable.css">
-</HEAD>
-<BODY>
+ <head>
+ <title>Using CGI Programs</title>
+ <link rel="stylesheet" type="text/css" href="../cups-printable.css">
+ </head>
+ <body>
+ <h1 class="title">Using CGI Programs</h1>
-<H1 CLASS="title">Using CGI Programs</H1>
+ <p>CUPS provides a dynamic web interface through dedicated CGI programs that are executed when users open special directories on the CUPS server. Each CGI performs administration, class, help, job, and printer functions as directed by the user, but the actual programs that are run and functions that are available are limited to those that were originally designed into the scheduler.</p>
-<P>CUPS provides a dynamic web interface through dedicated CGI programs that
-are executed when users open special directories on the CUPS server. Each CGI
-performs administration, class, help, job, and printer functions as directed by
-the user, but the actual programs that are run and functions that are available
-are limited to those that were originally designed into the scheduler.</P>
+ <p>CUPS also supports CGI scripts/programs for pages you want to provide, although this functionality is disabled by default. The "application/x-httpd-cgi" MIME media type is used to identify CGI content and can be associated with any filename extension. The scheduler requires CGI content to have the execute bit set, not have world or group write permissions, and any CGI scripts need to include a <tt>#!</tt> line as the first line of a script to identify the script interpreter. For example, a PHP script would look like:</p>
-<P>CUPS also supports CGI programs and specific scripting languages (Java, Perl,
-PHP, and Python) for pages you want to provide. The interpreters for these
-languages are currently configured at compile time and are associated with
-MIME media types. <a href="#TABLE1">Table 1</a> shows the MIME media types that
-are reserved for each type of page and are the same as those used by the Apache
-web server.</P>
+ <pre class="example">
+#!/usr/bin/php -fn
+<?php
+...
+?>
+</pre>
-<DIV CLASS="table"><TABLE SUMMARY="CGI MIME Media Types">
-<CAPTION><A NAME="TABLE1">Table 1</A>: CGI MIME Media Types</CAPTION>
-<TR>
- <TH>MIME Media Type</TH>
- <TH>Description</TH>
-</TR>
-<TR>
- <TD>application/x-httpd-cgi</TD>
- <TD>CGI script/program</TD>
-</TR>
-<TR>
- <TD>application/x-httpd-java</TD>
- <TD>Java program</TD>
-</TR>
-<TR>
- <TD>application/x-httpd-perl</TD>
- <TD>Perl script</TD>
-</TR>
-<TR>
- <TD>application/x-httpd-php</TD>
- <TD>PHP script</TD>
-</TR>
-<TR>
- <TD>application/x-httpd-python</TD>
- <TD>Python script</TD>
-</TR>
-</TABLE></DIV>
-<H2><A NAME="CONFIG">Configuring the Server</A></H2>
+ <h2><a name="CONFIG">Configuring the Server</a></h2>
-<P>In order to enable the corresponding type, you must create a
-new <VAR>/etc/cups/cgi.types</VAR> file which maps the filename
-extensions to the appropriate MIME types, for example:</P>
+ <p>In order to enable the corresponding type, you must create a new <var>/etc/cups/cgi.types</var> file which maps the filename extensions you use to the appropriate MIME types. For example, the following will support CGI programs/scripts with the "cgi" extension:</p>
-<PRE CLASS="command">
+ <pre class="command">
application/x-httpd-cgi cgi
-application/x-httpd-java class
-application/x-httpd-perl pl
-application/x-httpd-php php
-application/x-httpd-python py
-</PRE>
+</pre>
-<P>CGI scripts/programs (application/x-httpd-cgi) also must be owned by root, have execution permissions, and not have world or group write permissions to be treated as a CGI script or program.</P>
-<H2><A NAME="LIMITS">Limitations</A></H2>
+ <h2><a name="LIMITS">Limitations</a></h2>
-<P>CUPS implements most of the CGI/1.1 specification, with the
-following exceptions:</P>
+ <p>CUPS implements most of the CGI/1.1 specification, with the following exceptions:</p>
-<UL>
-
- <LI>No PATH_INFO or PATH_TRANSLATED support</LI>
-
- <LI>Limited HTTP field support; only the Content-Length (CONTENT_LENGTH), Content-Type (CONTENT_TYPE), Cookie (HTTP_COOKIE), Referrer (HTTP_REFERRER), and User-Agent (HTTP_USER_AGENT) fields are placed in environment variables at this time</LI>
-
-</UL>
-
-</BODY>
-</HTML>
+ <ul>
+ <li>No PATH_INFO or PATH_TRANSLATED support</li>
+ <li>Limited HTTP field support; only the Content-Length (<tt>CONTENT_LENGTH</tt>), Content-Type (<tt>CONTENT_TYPE</tt>), Cookie (<tt>HTTP_COOKIE</tt>), Referrer (<tt>HTTP_REFERRER</tt>), and User-Agent (<tt>HTTP_USER_AGENT</tt>) fields are placed in environment variables at this time</li>
+ </ul>
+ </body>
+</html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="creator" content="codedoc v3.1">
<meta name="author" content="Michael R Sweet">
- <meta name="copyright" content="Copyright © 2007-2019 by Apple Inc. All Rights Reserved.">
- <meta name="version" content="2.3.1">
+ <meta name="copyright" content="Copyright © 2007-2022 by Apple Inc. All Rights Reserved.">
+ <meta name="version" content="2.3.6">
<style type="text/css"><!--
body, p, h1, h2, h3, h4 {
font-family: sans-serif;
<body>
<h1 class="title">CUPS Programming Manual</h1>
<p>Michael R Sweet</p>
- <p>Copyright © 2007-2019 by Apple Inc. All Rights Reserved.</p>
+ <p>Copyright © 2007-2020 by Apple Inc. All Rights Reserved.</p>
<div class="contents">
<h2 class="title">Contents</h2>
<ul class="contents">
<dd style="margin-left: 5.0em"><dt><b>KeepAlive No</b>
<dd style="margin-left: 5.0em">Specifies whether to support HTTP keep-alive connections.
The default is "Yes".
-<dt><a name="KeepAliveTimeout"></a><b>KeepAliveTimeout </b><i>seconds</i>
-<dd style="margin-left: 5.0em">Specifies how long an idle client connection remains open.
-The default is "30".
<dt><a name="LimitIPP"></a><b><Limit </b><i>operation </i>...<b>> </b>... <b></Limit></b>
<dd style="margin-left: 5.0em">Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATION NAMES".
<dt><a name="Limit"></a><b><Limit </b><i>method </i>...<b>> </b>... <b></Limit></b>
<dd style="margin-left: 5.0em">Listens to the specified address and port or domain socket path for connections.
Multiple Listen directives can be provided to listen on multiple addresses.
The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.
-<dt><a name="ListenBackLog"></a><b>ListenBackLog </b><i>number</i>
-<dd style="margin-left: 5.0em">Specifies the number of pending connections that will be allowed.
-This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections.
-When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones.
-The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems.
<dt><a name="Location"></a><b><Location </b><i>/path</i><b>> </b>... <b></Location></b>
<dd style="margin-left: 5.0em">Specifies access control for the named location.
Paths are documented below in the section "LOCATION PATHS".
<dd style="margin-left: 5.0em"><br>
Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option.
The default is "No".
+<dt><a name="ListenBackLog"></a><b>ListenBackLog </b><i>number</i>
+<dd style="margin-left: 5.0em">Specified the number of pending connections that will be allowed.
+The scheduler now uses the value "128" on all platforms.
<dt><a name="PageLogFormat"></a><b>PageLogFormat </b><i>format-string</i>
<dd style="margin-left: 5.0em">Specifies the format of PageLog lines.
Sequences beginning with percent (%) characters are replaced with the corresponding information, while all other characters are copied literally.
<b>subscriptions.conf</b>(5),
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
+Copyright © 2007-2021 by Apple Inc.
</body>
</html>
<b>-P</b>
<i>filename.plist</i>
] [
+<b>-R</b>
+] [
<b>-S</b>
] [
<b>-T</b>
<dt><b>-P</b><i> filename.plist</i>
<dd style="margin-left: 5.0em">Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (<b>-t</b>).
This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dt><b>-R</b>
+<dd style="margin-left: 5.0em">Retries tests when the "server-error-busy" status code is returned.
<dt><b>-S</b>
<dd style="margin-left: 5.0em">Forces (dedicated) TLS encryption when connecting to the server.
<dt><b>-T</b><i> seconds</i>
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp">http://www.pwg.org/ipp</a>)
RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011)">http://tools.ietf.org/html/rfc8011)</a>,
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
+Copyright © 2007-2021 by Apple Inc.
</body>
</html>
<dd style="margin-left: 5.0em">Specifies whether
<b>ipptool</b>(8)
will ignore errors and continue with subsequent tests.
+<dt><b>MONITOR-PRINTER-STATE </b>[ <i>printer-uri </i>] <b>{ EXPECT </b><i>attribute-name </i>[ <i>predicate(s) </i>] <b>}</b>
+<dd style="margin-left: 5.0em">Specifies printer state monitoring tests to run in parallel with the test operation.
+The monitoring tests will run until all of the <b>EXPECT</b> conditions are satisfied or the primary test operation has completed, whichever occurs first.
<dt><b>NAME "</b><i>literal string</i><b>"</b>
<dd style="margin-left: 5.0em">Specifies the human-readable name of the test.
<dt><b>OPERATION </b><i>operation-code</i>
<dt><b>COUNT </b><i>number</i>
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to have the specified number of values.
<dt><b>DEFINE-MATCH </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition matches. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition matches.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
<dt><b>DEFINE-NO-MATCH </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition does not match. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition does not match.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
<dt><b>DEFINE-VALUE </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to the value of the attribute when the <b>EXPECT</b> condition matches. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to the value of the attribute when the <b>EXPECT</b> condition matches.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dt><b>DISPLAY-MATCH </b><i>"message"</i>
+<dd style="margin-left: 5.0em">Displays the specified message when the <b>EXPECT</b> condition matches.
<dt><b>IF-DEFINED </b><i>variable-name</i>
<dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is defined.
<dt><b>IF-NOT-DEFINED </b><i>variable-name</i>
<dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is not defined.
<dt><b>IN-GROUP </b><i>tag</i>
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to be in the specified group tag.
-<dt><b>OF-TYPE </b><i>tag[|tag,...]</i>
+<dt><b>OF-TYPE </b><i>tag[(limits)|tag|...]</i>
<dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to use one of the specified value tag(s).
+Most value tags also support the specification of limits in parenthesis, for example "name(42)" would allow nameWith/WithoutLanguage strings up to 42 octets in length, "name(4:MAX)" would allow nameWith/WithoutLanguage strings between 4 and 255 octets in length, and "integer(-273:MAX)" would allow integers between -273 and 2147483647.
<dt><b>REPEAT-LIMIT </b><i>number</i>
<dd style="margin-left: 5.0em"><br>
Specifies the maximum number of times to repeat if the <b>REPEAT-MATCH</b> or <b>REPEAT-NO-MATCH</b> predicate is specified. The default value is 1000.
<dd style="margin-left: 5.0em"><dt><b>WITH-ALL-VALUES "true"</b>
<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the boolean value given.
<dt><b>WITH-ALL-VALUES "/</b><i>regular expression</i><b>/"</b>
-<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the regular expression, which must conform to the POSIX regular expression syntax.
+Comparisons are case-sensitive.
+<dt><b>WITH-DISTINCT-VALUES</b>
+<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute are unique.
+Comparisons are case-sensitive.
+Only charset, collection, enum, integer, keyword, mimeMediaType, naturalLanguage, rangeOfInteger, resolution, uriScheme attributes support this predicate.
<dt><b>WITH-HOSTNAME "</b><i>literal string</i><b>"</b>
<dd style="margin-left: 5.0em"><dt><b>WITH-HOSTNAME "/</b><i>regular expression</i><b>/"</b>
<dd style="margin-left: 5.0em">Requires that at least one URI value contains a matching hostname.
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
+Copyright © 2007-2021 by Apple Inc.
</body>
</html>
<!--
IPP specification for CUPS.
- Copyright © 2007-2016 by Apple Inc.
+ Copyright © 2007-2023 by Apple Inc.
Copyright © 1997-2007 by Easy Software Products.
Licensed under Apache License v2.0. See the file "LICENSE" for more
<h4>printer-type-mask (type2 enum)<span class='info'>CUPS 1.1</span></h4>
<p>The "printer-type-mask" attribute is used to choose printers or classes with the CUPS-Get-Printers and CUPS-Get-Classes operations. The bits are defined identically to the printer-type attribute and default to all 1's.
+</p>
+
+<h4>printer-wifi-password (octetString(MAX))</h4>
+
+<p>The optional "printer-wifi-password" description attribute provides the wireless network password for a printer.
+Printers must not return this attribute in the response to a Get-Printer-Attributes request.
+This attribute can only be set via an authenticated Set-Printer-Attributes request over a secure channel,
+or via an unauthenticated IPP USB connection when the printer is in its initial setup state.
+When a value for this attribute is not set, the 'wifi-not-configured-report' keyword must be present in the
+"printer-state-reasons" printer attribute values. If a printer supports this attribute, it must also support
+the "printer-wifi-ssid" and "printer-wifi-state" attributes.</p>
+
+<h4>printer-wifi-ssid (name(MAX))</h4>
+
+<p>The optional "printer-wifi-ssid" description attribute specifies the wireless network name for the printer.
+When set to the empty string, the printer must not join infrastructure or ad-hoc networks.
+This attribute can only be set via an authenticated Set-Printer-Attributes request over a secure channel,
+or via an unauthenticated IPP USB connection when the printer is in its initial setup state.
+This attribute also must reflect any configuration done by the user through the printer's web interface,
+control panel, or other interface. When a value for this attribute is not set, the 'wifi-not-configured-report'
+keyword must be present in the "printer-state-reasons" printer attribute values.
+If a printer supports this attribute, it must also support the "printer-wifi-password" and
+"printer-wifi-state" attributes.</p>
+
+<p>Printers that support the Set-Printer-Attribtes operation and "printer-wifi-password" and "printer-wifi-ssid"
+printer description attributes must also support unauthenticated Set-Printer-Attributes requests over USB when Wi-Fi
+networking has not yet been configured. This allows a client to configure the Wi-Fi networking of a printer over USB.</p>
+
+<p>When configuring a wireless network, clients must send both the "printer-wifi-ssid" and "printer-wifi-password"
+printer description attributes. If only one attribute is supplied, the printer must reject the request with the
+client-error-bad-request status code. If either attribute is supplied with an invalid value,
+the printer must reject the request with the client-error-attributes-or-values-not-supported status code.</p>
+
+In addition to other defined printer-state-reasons, the 'wifi-not-configured-report' reason is returned when the
+"printer-wifi-password" and "printer-wifi-ssid" printer description attributes are not set,
+regardless of the value of the "printer-wifi-state" printer status attribute.
+
+<h4>printer-wifi-state (type2 enum)</h4>
+
+<p>The optional "printer-wifi-state" status attribute specifies a printer's current wireless network state as
+an enumerated value. The following values are currently defined:</p>
+
+<div class='table'><table align='center' border='1' width='80%' summary='Wireless Networking State'>
+<tbody>
+<tr>
+ <td>3</td>
+ <td>(off) wireless networking is turned off</td>
+</tr>
+<tr>
+ <td>4</td>
+ <td>(not-configured) wireless networking is not yet configured</td>
+</tr>
+<tr>
+ <td>5</td>
+ <td>(not-visible) the configured wireless network is not visible</td>
+</tr>
+<tr>
+ <td>6</td>
+ <td>(cannot-join) unable to join the configured wireless network</td>
+</tr>
+<tr>
+ <td>7</td>
+ <td>(joining) joining the configured wireless network</td>
+</tr>
+<tr>
+ <td>8</td>
+ <td>(on) joined to the configured wireless network</td>
+</tr>
+</tbody>
+</table></div>
<h4>requesting-user-name-allowed (1setof name(127))<span class='info'>CUPS 1.1</span></h4>
--- /dev/null
+#!/bin/sh
+echo "Content-Type: text/plain"
+echo ""
+echo "POSIX shell CGI test page."
+echo ""
+echo "ps ax"
+ps ax
--- /dev/null
+#!/usr/bin/php -nf
+<?php
+print("Content-Type: text/html\n\n");
+print("<!DOCTYPE html>\n"
+ ."<html>\n"
+ ." <head>\n"
+ ." <title>PHP script CGI test page</title>\n"
+ ." </head>\n"
+ ." <body>\n"
+ ." <h1>PHP script CGI test page</h1>\n"
+ ." <pre><kbd>ps ax</kbd>\n");
+$fp = popen("ps ax", "r");
+while ($line = fgets($fp, 1024))
+{
+ print(htmlspecialchars($line));
+}
+print("</pre>\n"
+ ." </body>\n"
+ ."</html>\n");
+?>
-All work and no play makes Johhny a dull boy. All work and no\r
-play makes Johhny a dull boy. All work and no play makes Johhny\r
-a dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy.\r
+All work and no play makes Johhny a dull boy. All work and no
+play makes Johhny a dull boy. All work and no play makes Johhny
+a dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy.
if ((classification = getenv("CLASSIFICATION")) == NULL)
classification = "";
- if (strcmp(classification, "none") == 0)
+ else if (strcmp(classification, "none") == 0)
classification = "";
/*
Shutdown();
- if (ppd)
- ppdClose(ppd);
+ ppdClose(ppd);
/*
* Close the raster stream...
--- /dev/null
+/*
+ * Raster filter to pdf
+ *
+ * Copyright © 2022 by Apple Inc.
+ *
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more
+ * information.
+ *
+ * see <https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf> for complete spec
+ * see <https://zlib.net/manual.html> for zlib documentation
+ *
+ * To build with zlib:
+ * g++ -c -g -Os -o rastertopdf.o rastertopdf.cpp
+ * cc -o rasterToPDF rastertopdf.o -lz -lstdc++ `cups-config --libs`
+ *
+ * To build without zlib: This will produce very large pdf files.
+ * g++ -DDeflateData=0 -c -g -Os -o rastertopdf.o rastertopdf.cpp
+ * cc -o rasterToPDF rastertopdf.o -lstdc++ `cups-config --libs`
+ */
+
+#include <cups/cups.h>
+#include <cups/raster.h>
+#include <cups/backend.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libgen.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <vector>
+
+
+#ifndef __has_include
+ static_assert(false, "__has_include not supported");
+#endif
+
+#if ( !defined(DeflateData) )
+ #if __has_include(<zlib.h>)
+ #define DeflateData 1
+ #include <zlib.h>
+ #else
+ #define DeflateData 0
+ #endif
+#elif ( DeflateData )
+ #if __has_include(<zlib.h>)
+ #include <zlib.h>
+ #else
+ #warning 'zlib.h' does not exits.
+ #undef DeflateData
+ #define DeflateData 0
+ #endif
+#endif
+
+static int Canceled = 0; /* Has the current job been canceled? */
+
+// MARK: - Misc -
+static int rasterToPDFColorSpace( cups_cspace_t colorSpace, int bitsPerPixel, int *bitsPerComponent, char *cs, size_t csLen )
+{
+ switch (colorSpace)
+ {
+ case CUPS_CSPACE_W:
+ case CUPS_CSPACE_SW:
+ *bitsPerComponent = bitsPerPixel;
+ strncpy( cs, "[/CalGray << /Gamma 2.2 /WhitePoint[ 0.9505 1.0 1.089 ] >>]", csLen );
+ break;
+
+ case CUPS_CSPACE_RGB:
+ case CUPS_CSPACE_SRGB:
+ *bitsPerComponent = bitsPerPixel/3;
+ strncpy( cs, "[/CalRGB <<\n"
+ " /Gamma[ 2.2 2.2 2.2 ]\n"
+ " /Matrix[ 0.4124 0.2126 0.0193\n"
+ " 0.3576 0.7152 0.1192\n"
+ " 0.1805 0.0722 0.9505 ]\n"
+ " /WhitePoint[ 0.9505 1.0 1.089 ]\n"
+ ">>]", csLen );
+ break;
+
+ default :
+ // AirPrint only requires sRGB and 2.2 gray.
+ // NOTE: This is not a general solution.
+ fprintf(stderr, "DEBUG: Unsupported colorspace %u.\n", colorSpace);
+ return -1;
+ }
+ return 0;
+}
+
+static void compressImageData(const unsigned char *inData,
+ size_t inSize,
+ unsigned char **outData,
+ size_t *outSize )
+{
+ if (outData == NULL || outSize == NULL)
+ {
+ fprintf(stderr, "Invalid Parameters, Line:%d\n", __LINE__);
+ exit( EXIT_FAILURE );
+ }
+#if DeflateData
+ int err = ENOMEM;
+
+ *outSize = compressBound( (uLongf)inSize );
+ *outData = (unsigned char *)malloc( *outSize );
+
+ if (*outData != NULL) err = compress( *outData, outSize, inData, inSize );
+
+ if (err != 0)
+ {
+ fprintf( stderr, "Failed to %s data, Line:%d\n", (*outData ? "compress" : "allocate"), __LINE__);
+
+ if (*outData) free( *outData );
+
+ *outData = (unsigned char *)inData;
+ *outSize = inSize;
+ }
+#else
+ *outData = (unsigned char *)inData;
+ *outSize = inSize;
+#endif
+}
+
+// MARK: - PDF Stuff -
+static long writeImageObject(FILE *pdfFile,
+ unsigned int imageReference,
+ unsigned int width,
+ unsigned int height,
+ int interpolate,
+ int bitsPerComponent,
+ char colorspace[64],
+ const unsigned char *rasterData,
+ size_t rasterDataSize )
+{
+ unsigned char *data = NULL;
+ size_t size;
+ long objectOffset = 0;
+
+ compressImageData( rasterData, rasterDataSize, &data, &size );
+
+ fprintf(pdfFile, "\n%u 0 obj\n", imageReference );
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /Type /XObject\n"
+ " /Subtype /Image\n"
+ " /Width %u\n"
+ " /Height %u\n"
+ " /Interpolate %s\n"
+ " /ColorSpace %s\n"
+ " /BitsPerComponent %d\n"
+ " /Length %zu\n", width, height, (interpolate ? "true" : "false"), colorspace, bitsPerComponent, rasterDataSize );
+
+ if (rasterData != data)
+ fprintf(pdfFile, " /Filter /FlateDecode\n");
+
+ fprintf(pdfFile, ">>\nstream\n" );
+ fwrite( data, size, 1, pdfFile );
+ fprintf(pdfFile, "\nendstream"
+ "\nendobj\n");
+
+ // free the data the was allocated in compressImageData
+ if (rasterData != data) free( data );
+
+ return objectOffset;
+}
+
+static long writePageStream(FILE *pdfFile,
+ unsigned int streamReference,
+ int width,
+ int height,
+ int pageNumber)
+{
+ long objectOffset = 0;
+ char imageStream[64];
+
+ snprintf( imageStream, sizeof( imageStream ), "q %d 0 0 %d 0 0 cm /Im%u Do Q", width, height, pageNumber );
+
+ fprintf(pdfFile, "\n%u 0 obj\n", streamReference );
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /Length %zu >>\n"
+ "stream\n"
+ "%s"
+ "\nendstream"
+ "\nendobj\n", strlen(imageStream), imageStream );
+
+ return objectOffset;
+}
+
+static long writePageObject(FILE *pdfFile,
+ unsigned int pageReference,
+ unsigned int resouceReference,
+ unsigned int contentReference,
+ int width,
+ int height)
+{
+ long objectOffset = 0;
+
+ fprintf(pdfFile, "\n%u 0 obj\n", pageReference );
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /Type /Page\n"
+ " /Parent 2 0 R\n"
+ " /Resources %u 0 R\n"
+ " /Contents %u 0 R\n"
+ " /MediaBox [0 0 %d %d]\n"
+ ">>\nendobj\n", resouceReference, contentReference, width, height );
+
+ return objectOffset;
+}
+
+static long writeResourceObject(FILE *pdfFile,
+ unsigned int rsrcReference,
+ unsigned int contentReference,
+ unsigned int page )
+{
+ long objectOffset = 0;
+
+ fprintf(pdfFile, "\n%u 0 obj\n", rsrcReference );
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im%u %u 0 R >> >>\nendobj\n", page, contentReference );
+
+ return objectOffset;
+}
+
+static long writePagesObject( FILE *pdfFile, std::vector<unsigned int> pages )
+{
+ long objectOffset = 0;
+
+ fprintf(pdfFile, "\n2 0 obj\n");
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /Type /Pages /Count %lu /Kids [", (unsigned long)pages.size());
+ for (unsigned int i : pages )
+ {
+ fprintf( pdfFile, " %d 0 R", i );
+ }
+ fprintf(pdfFile, " ] >>\nendobj\n");
+
+ return objectOffset;
+}
+
+static long writeCatalogObject( FILE *pdfFile, unsigned int objectReference )
+{
+ long objectOffset = 0;
+
+ fprintf(pdfFile, "\n%u 0 obj\n", objectReference);
+ objectOffset = ftell(pdfFile);
+ fprintf(pdfFile, "<< /Type /Catalog /Pages 2 0 R >>\n");
+ fprintf(pdfFile, "endobj\n");
+
+ return objectOffset;
+}
+
+static void writeTrailerObject(FILE *pdfFile,
+ unsigned int catalogReference,
+ unsigned long numObjects,
+ long startXOffset)
+{
+ fprintf( pdfFile, "trailer\n"
+ "<< /Root %u 0 R\n"
+ " /Size %lu >>\n"
+ "startxref\n"
+ "%ld\n"
+ "%%%%EOF\n", catalogReference, numObjects, startXOffset);
+}
+
+static long writeXRefTable( FILE *pdfFile, std::vector<long> offsets, long startOffset )
+{
+ long objectOffset = ftell(pdfFile);
+ fprintf( pdfFile, "xref\n"
+ "0 %lu\n"
+ "0000000000 65535 f\n", (unsigned long)(offsets.size() + 1) );
+ for (long offset : offsets )
+ {
+ fprintf( pdfFile, "%010ld 00000 n\n", offset - startOffset );
+ }
+ return objectOffset;
+}
+
+static long writeHeader( FILE *pdfFile )
+{
+ fprintf(pdfFile, "%%PDF-1.3\n");
+
+ return ftell(pdfFile);
+}
+
+// MARK: - Work -
+static int convertCUPSRasterToPDF( int rasterIn )
+{
+ #define kInitialImageReferenceID 10
+ int err = 0;
+ int pages = 0;
+ unsigned int objectReference = kInitialImageReferenceID;
+ unsigned int catalogReference = objectReference++;
+
+ long startOffset;
+ long offset;
+
+ float width = 0;
+ float height = 0;
+
+ size_t largestAllocatedMemory = 0;
+ unsigned char *rasterData = NULL;
+
+ std::vector<unsigned int> pageReferences;
+ std::vector<long> objectOffsets;
+ cups_raster_t *rasterFile = NULL;
+ cups_page_header2_t pageHeader;
+
+ FILE *pdfFile = stdout;
+
+ rasterFile = cupsRasterOpen(rasterIn, CUPS_RASTER_READ);
+ if (rasterFile == NULL)
+ {
+ err = errno;
+ fprintf(stderr, "ERROR: Error reading raster data.\n");
+ perror("DEBUG: cupsRasterOpen failed to open the file");
+ goto bail;
+ }
+
+ startOffset = writeHeader( pdfFile );
+ while ( !Canceled && cupsRasterReadHeader2(rasterFile, &pageHeader) )
+ {
+ char colorspace[256];
+ int bitsPerComponent = 8;
+
+ fprintf(stderr, "PAGE: %d %d\n", pages+1, pageHeader.NumCopies);
+ fprintf(stderr, "DEBUG:%04d] pageHeader.colorSpace=%u, .bitsPerPixel=%u, .duplexMode=%u\n",
+ pages, pageHeader.cupsColorSpace, pageHeader.cupsBitsPerPixel, pageHeader.Duplex);
+ fprintf(stderr, "DEBUG: pageHeader.width=%u, .height=%u, .resolution=%u x %u\n",
+ pageHeader.cupsWidth, pageHeader.cupsHeight, pageHeader.HWResolution[0], pageHeader.HWResolution[1]);
+
+ int status = rasterToPDFColorSpace( pageHeader.cupsColorSpace, pageHeader.cupsBitsPerPixel, &bitsPerComponent, colorspace, sizeof(colorspace) );
+ if (status)
+ {
+ fprintf( stderr, "INFO: Unable to determine a colorspace. skipping this page.\n" );
+ continue;
+ }
+
+ size_t imageSize = pageHeader.cupsHeight * pageHeader.cupsBytesPerLine;
+ if (imageSize > largestAllocatedMemory)
+ {
+ rasterData = (unsigned char *)(rasterData == NULL ? malloc(imageSize) : realloc(rasterData, imageSize));
+ largestAllocatedMemory = imageSize;
+ }
+
+ if (rasterData == NULL)
+ {
+ fprintf(stderr, "ERROR: Unable to allocate memory for page info\n");
+ err = -1;
+ break;
+ }
+
+ size_t result = (size_t) cupsRasterReadPixels(rasterFile, rasterData, (unsigned int)imageSize);
+ if (result != imageSize)
+ {
+ err = -2;
+ fprintf(stderr, "ERROR: Unable to read print data.\n");
+ fprintf(stderr, "DEBUG: cupsRasterReadPixels faild on page:%d (%zu of %zu bytes read)\n", pages+1, result, imageSize );
+ break;
+ }
+
+ width = 72.0 * pageHeader.cupsWidth / pageHeader.HWResolution[1];
+ height = 72.0 * pageHeader.cupsHeight / pageHeader.HWResolution[0];
+
+ unsigned int pageReference = objectReference++;
+ unsigned int rsrcReference = objectReference++;
+ unsigned int streamReference = objectReference++;
+ unsigned int imageReference = objectReference++;
+ int interpolate = 0;
+
+ offset = writePageStream(pdfFile, streamReference, width, height, pages+1 );
+ objectOffsets.push_back( offset );
+
+ offset = writePageObject(pdfFile,
+ pageReference,
+ rsrcReference,
+ streamReference,
+ width,
+ height);
+ objectOffsets.push_back( offset );
+
+ offset = writeResourceObject(pdfFile, rsrcReference, imageReference, pages+1 );
+ objectOffsets.push_back( offset );
+
+ offset = writeImageObject(pdfFile,
+ imageReference,
+ pageHeader.cupsWidth,
+ pageHeader.cupsHeight,
+ interpolate,
+ bitsPerComponent,
+ colorspace,
+ rasterData,
+ imageSize);
+ objectOffsets.push_back( offset );
+
+ pageReferences.push_back( pageReference );
+ pages++;
+ }
+
+ offset = writePagesObject( pdfFile, pageReferences );
+ objectOffsets.push_back( offset );
+
+ offset = writeCatalogObject( pdfFile, catalogReference );
+ objectOffsets.push_back( offset );
+
+ offset = writeXRefTable( pdfFile, objectOffsets, startOffset );
+
+ writeTrailerObject( pdfFile, catalogReference,
+ objectOffsets.size() + 1, offset - startOffset );
+bail:
+ if ( pdfFile != NULL ) fclose( pdfFile );
+ if ( rasterFile != NULL ) cupsRasterClose(rasterFile);
+ if ( rasterIn != -1 ) close( rasterIn );
+ if ( rasterData ) free( rasterData );
+
+ return err;
+}
+
+static void sigterm_handler(int sig)
+{
+ (void)sig;
+
+ Canceled = 1;
+}
+
+static void installSignalHandler( void )
+{
+#ifdef HAVE_SIGSET
+ sigset(SIGTERM, sigterm_handler);
+#elif defined(HAVE_SIGACTION)
+ struct sigaction action; /* Actions for POSIX signals */
+ memset(&action, 0, sizeof(action));
+
+ sigemptyset(&action.sa_mask);
+ sigaddset(&action.sa_mask, SIGTERM);
+
+ action.sa_handler = sigterm_handler;
+ sigaction(SIGTERM, &action, NULL);
+#else
+ signal(SIGTERM, sigterm_handler);
+#endif /* HAVE_SIGSET */
+}
+
+// MARK: -
+int main(int argc, const char * argv[])
+{
+ int err = 0;
+
+ /*
+ * Make sure status messages are not buffered...
+ */
+ setbuf(stderr, NULL);
+
+ /*
+ * Check the command-line...
+ */
+ if (argc < 6 || argc > 7)
+ {
+ fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
+ argv[0]);
+ return (CUPS_BACKEND_FAILED);
+ }
+
+ /*
+ * Register a signal handler to eject the current page if the
+ * job is cancelled.
+ */
+ installSignalHandler();
+
+ int fd = fileno(stdin);
+ if (argc == 7)
+ {
+ if ((fd = open(argv[6], O_RDONLY)) < 0)
+ {
+ perror("ERROR: Unable to open file");
+ return (1);
+ }
+ }
+
+ err = convertCUPSRasterToPDF( fd );
+ return err;
+}
#
# Message catalog template for CUPS.
#
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2020 by Apple Inc.
# Copyright © 2005-2007 by Easy Software Products.
#
# Licensed under Apache License v2.0. See the file "LICENSE" for more
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: CUPS 2.3.1\n"
+"Project-Id-Version: CUPS 2.3.6\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
-#. TRANSLATORS: Continuous
+#. TRANSLATORS: Premium Matte Presentation Paper
#: locale/ipp-strings.c:1610
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
+#. TRANSLATORS: Continuous
+#: locale/ipp-strings.c:1612
msgid "media-type.continuous"
msgstr ""
#. TRANSLATORS: Continuous Long
-#: locale/ipp-strings.c:1612
+#: locale/ipp-strings.c:1614
msgid "media-type.continuous-long"
msgstr ""
#. TRANSLATORS: Continuous Short
-#: locale/ipp-strings.c:1614
+#: locale/ipp-strings.c:1616
msgid "media-type.continuous-short"
msgstr ""
#. TRANSLATORS: Corrugated Board
-#: locale/ipp-strings.c:1616
+#: locale/ipp-strings.c:1618
msgid "media-type.corrugated-board"
msgstr ""
#. TRANSLATORS: Optical Disc
-#: locale/ipp-strings.c:1618
+#: locale/ipp-strings.c:1620
msgid "media-type.disc"
msgstr ""
#. TRANSLATORS: Glossy Optical Disc
-#: locale/ipp-strings.c:1620
+#: locale/ipp-strings.c:1622
msgid "media-type.disc-glossy"
msgstr ""
#. TRANSLATORS: High Gloss Optical Disc
-#: locale/ipp-strings.c:1622
+#: locale/ipp-strings.c:1624
msgid "media-type.disc-high-gloss"
msgstr ""
#. TRANSLATORS: Matte Optical Disc
-#: locale/ipp-strings.c:1624
+#: locale/ipp-strings.c:1626
msgid "media-type.disc-matte"
msgstr ""
#. TRANSLATORS: Satin Optical Disc
-#: locale/ipp-strings.c:1626
+#: locale/ipp-strings.c:1628
msgid "media-type.disc-satin"
msgstr ""
#. TRANSLATORS: Semi-Gloss Optical Disc
-#: locale/ipp-strings.c:1628
+#: locale/ipp-strings.c:1630
msgid "media-type.disc-semi-gloss"
msgstr ""
#. TRANSLATORS: Double Wall
-#: locale/ipp-strings.c:1630
+#: locale/ipp-strings.c:1632
msgid "media-type.double-wall"
msgstr ""
#. TRANSLATORS: Dry Film
-#: locale/ipp-strings.c:1632
+#: locale/ipp-strings.c:1634
msgid "media-type.dry-film"
msgstr ""
#. TRANSLATORS: DVD
-#: locale/ipp-strings.c:1634
+#: locale/ipp-strings.c:1636
msgid "media-type.dvd"
msgstr ""
#. TRANSLATORS: Embossing Foil
-#: locale/ipp-strings.c:1636
+#: locale/ipp-strings.c:1638
msgid "media-type.embossing-foil"
msgstr ""
#. TRANSLATORS: End Board
-#: locale/ipp-strings.c:1638
+#: locale/ipp-strings.c:1640
msgid "media-type.end-board"
msgstr ""
#. TRANSLATORS: Envelope
-#: locale/ipp-strings.c:1640
+#: locale/ipp-strings.c:1642
msgid "media-type.envelope"
msgstr ""
#. TRANSLATORS: Archival Envelope
-#: locale/ipp-strings.c:1642
+#: locale/ipp-strings.c:1644
msgid "media-type.envelope-archival"
msgstr ""
#. TRANSLATORS: Bond Envelope
-#: locale/ipp-strings.c:1644
+#: locale/ipp-strings.c:1646
msgid "media-type.envelope-bond"
msgstr ""
#. TRANSLATORS: Coated Envelope
-#: locale/ipp-strings.c:1646
+#: locale/ipp-strings.c:1648
msgid "media-type.envelope-coated"
msgstr ""
#. TRANSLATORS: Cotton Envelope
-#: locale/ipp-strings.c:1648
+#: locale/ipp-strings.c:1650
msgid "media-type.envelope-cotton"
msgstr ""
#. TRANSLATORS: Fine Envelope
-#: locale/ipp-strings.c:1650
+#: locale/ipp-strings.c:1652
msgid "media-type.envelope-fine"
msgstr ""
#. TRANSLATORS: Heavyweight Envelope
-#: locale/ipp-strings.c:1652
+#: locale/ipp-strings.c:1654
msgid "media-type.envelope-heavyweight"
msgstr ""
#. TRANSLATORS: Inkjet Envelope
-#: locale/ipp-strings.c:1654
+#: locale/ipp-strings.c:1656
msgid "media-type.envelope-inkjet"
msgstr ""
#. TRANSLATORS: Lightweight Envelope
-#: locale/ipp-strings.c:1656
+#: locale/ipp-strings.c:1658
msgid "media-type.envelope-lightweight"
msgstr ""
#. TRANSLATORS: Plain Envelope
-#: locale/ipp-strings.c:1658
+#: locale/ipp-strings.c:1660
msgid "media-type.envelope-plain"
msgstr ""
#. TRANSLATORS: Preprinted Envelope
-#: locale/ipp-strings.c:1660
+#: locale/ipp-strings.c:1662
msgid "media-type.envelope-preprinted"
msgstr ""
#. TRANSLATORS: Windowed Envelope
-#: locale/ipp-strings.c:1662
+#: locale/ipp-strings.c:1664
msgid "media-type.envelope-window"
msgstr ""
#. TRANSLATORS: Fabric
-#: locale/ipp-strings.c:1664
+#: locale/ipp-strings.c:1666
msgid "media-type.fabric"
msgstr ""
#. TRANSLATORS: Archival Fabric
-#: locale/ipp-strings.c:1666
+#: locale/ipp-strings.c:1668
msgid "media-type.fabric-archival"
msgstr ""
#. TRANSLATORS: Glossy Fabric
-#: locale/ipp-strings.c:1668
+#: locale/ipp-strings.c:1670
msgid "media-type.fabric-glossy"
msgstr ""
#. TRANSLATORS: High Gloss Fabric
-#: locale/ipp-strings.c:1670
+#: locale/ipp-strings.c:1672
msgid "media-type.fabric-high-gloss"
msgstr ""
#. TRANSLATORS: Matte Fabric
-#: locale/ipp-strings.c:1672
+#: locale/ipp-strings.c:1674
msgid "media-type.fabric-matte"
msgstr ""
#. TRANSLATORS: Semi-Gloss Fabric
-#: locale/ipp-strings.c:1674
+#: locale/ipp-strings.c:1676
msgid "media-type.fabric-semi-gloss"
msgstr ""
#. TRANSLATORS: Waterproof Fabric
-#: locale/ipp-strings.c:1676
+#: locale/ipp-strings.c:1678
msgid "media-type.fabric-waterproof"
msgstr ""
#. TRANSLATORS: Film
-#: locale/ipp-strings.c:1678
+#: locale/ipp-strings.c:1680
msgid "media-type.film"
msgstr ""
#. TRANSLATORS: Flexo Base
-#: locale/ipp-strings.c:1680
+#: locale/ipp-strings.c:1682
msgid "media-type.flexo-base"
msgstr ""
#. TRANSLATORS: Flexo Photo Polymer
-#: locale/ipp-strings.c:1682
+#: locale/ipp-strings.c:1684
msgid "media-type.flexo-photo-polymer"
msgstr ""
#. TRANSLATORS: Flute
-#: locale/ipp-strings.c:1684
+#: locale/ipp-strings.c:1686
msgid "media-type.flute"
msgstr ""
#. TRANSLATORS: Foil
-#: locale/ipp-strings.c:1686
+#: locale/ipp-strings.c:1688
msgid "media-type.foil"
msgstr ""
#. TRANSLATORS: Full Cut Tabs
-#: locale/ipp-strings.c:1688
+#: locale/ipp-strings.c:1690
msgid "media-type.full-cut-tabs"
msgstr ""
#. TRANSLATORS: Glass
-#: locale/ipp-strings.c:1690
+#: locale/ipp-strings.c:1692
msgid "media-type.glass"
msgstr ""
#. TRANSLATORS: Glass Colored
-#: locale/ipp-strings.c:1692
+#: locale/ipp-strings.c:1694
msgid "media-type.glass-colored"
msgstr ""
#. TRANSLATORS: Glass Opaque
-#: locale/ipp-strings.c:1694
+#: locale/ipp-strings.c:1696
msgid "media-type.glass-opaque"
msgstr ""
#. TRANSLATORS: Glass Surfaced
-#: locale/ipp-strings.c:1696
+#: locale/ipp-strings.c:1698
msgid "media-type.glass-surfaced"
msgstr ""
#. TRANSLATORS: Glass Textured
-#: locale/ipp-strings.c:1698
+#: locale/ipp-strings.c:1700
msgid "media-type.glass-textured"
msgstr ""
#. TRANSLATORS: Gravure Cylinder
-#: locale/ipp-strings.c:1700
+#: locale/ipp-strings.c:1702
msgid "media-type.gravure-cylinder"
msgstr ""
#. TRANSLATORS: Image Setter Paper
-#: locale/ipp-strings.c:1702
+#: locale/ipp-strings.c:1704
msgid "media-type.image-setter-paper"
msgstr ""
#. TRANSLATORS: Imaging Cylinder
-#: locale/ipp-strings.c:1704
+#: locale/ipp-strings.c:1706
msgid "media-type.imaging-cylinder"
msgstr ""
#. TRANSLATORS: Photo Paper Plus Glossy II
-#: locale/ipp-strings.c:1706
+#: locale/ipp-strings.c:1708
msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
msgstr ""
#. TRANSLATORS: Photo Paper Pro Platinum
-#: locale/ipp-strings.c:1708
+#: locale/ipp-strings.c:1710
msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
msgstr ""
#. TRANSLATORS: Photo Paper Plus Glossy II
-#: locale/ipp-strings.c:1710
+#: locale/ipp-strings.c:1712
msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
msgstr ""
#. TRANSLATORS: Photo Paper Pro Platinum
-#: locale/ipp-strings.c:1712
+#: locale/ipp-strings.c:1714
msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
msgstr ""
#. TRANSLATORS: Labels
-#: locale/ipp-strings.c:1714
+#: locale/ipp-strings.c:1716
msgid "media-type.labels"
msgstr ""
#. TRANSLATORS: Colored Labels
-#: locale/ipp-strings.c:1716
+#: locale/ipp-strings.c:1718
msgid "media-type.labels-colored"
msgstr ""
#. TRANSLATORS: Glossy Labels
-#: locale/ipp-strings.c:1718
+#: locale/ipp-strings.c:1720
msgid "media-type.labels-glossy"
msgstr ""
#. TRANSLATORS: High Gloss Labels
-#: locale/ipp-strings.c:1720
+#: locale/ipp-strings.c:1722
msgid "media-type.labels-high-gloss"
msgstr ""
#. TRANSLATORS: Inkjet Labels
-#: locale/ipp-strings.c:1722
+#: locale/ipp-strings.c:1724
msgid "media-type.labels-inkjet"
msgstr ""
#. TRANSLATORS: Matte Labels
-#: locale/ipp-strings.c:1724
+#: locale/ipp-strings.c:1726
msgid "media-type.labels-matte"
msgstr ""
#. TRANSLATORS: Permanent Labels
-#: locale/ipp-strings.c:1726
+#: locale/ipp-strings.c:1728
msgid "media-type.labels-permanent"
msgstr ""
#. TRANSLATORS: Satin Labels
-#: locale/ipp-strings.c:1728
+#: locale/ipp-strings.c:1730
msgid "media-type.labels-satin"
msgstr ""
#. TRANSLATORS: Security Labels
-#: locale/ipp-strings.c:1730
+#: locale/ipp-strings.c:1732
msgid "media-type.labels-security"
msgstr ""
#. TRANSLATORS: Semi-Gloss Labels
-#: locale/ipp-strings.c:1732
+#: locale/ipp-strings.c:1734
msgid "media-type.labels-semi-gloss"
msgstr ""
#. TRANSLATORS: Laminating Foil
-#: locale/ipp-strings.c:1734
+#: locale/ipp-strings.c:1736
msgid "media-type.laminating-foil"
msgstr ""
#. TRANSLATORS: Letterhead
-#: locale/ipp-strings.c:1736
+#: locale/ipp-strings.c:1738
msgid "media-type.letterhead"
msgstr ""
#. TRANSLATORS: Metal
-#: locale/ipp-strings.c:1738
+#: locale/ipp-strings.c:1740
msgid "media-type.metal"
msgstr ""
#. TRANSLATORS: Metal Glossy
-#: locale/ipp-strings.c:1740
+#: locale/ipp-strings.c:1742
msgid "media-type.metal-glossy"
msgstr ""
#. TRANSLATORS: Metal High Gloss
-#: locale/ipp-strings.c:1742
+#: locale/ipp-strings.c:1744
msgid "media-type.metal-high-gloss"
msgstr ""
#. TRANSLATORS: Metal Matte
-#: locale/ipp-strings.c:1744
+#: locale/ipp-strings.c:1746
msgid "media-type.metal-matte"
msgstr ""
#. TRANSLATORS: Metal Satin
-#: locale/ipp-strings.c:1746
+#: locale/ipp-strings.c:1748
msgid "media-type.metal-satin"
msgstr ""
#. TRANSLATORS: Metal Semi Gloss
-#: locale/ipp-strings.c:1748
+#: locale/ipp-strings.c:1750
msgid "media-type.metal-semi-gloss"
msgstr ""
#. TRANSLATORS: Mounting Tape
-#: locale/ipp-strings.c:1750
+#: locale/ipp-strings.c:1752
msgid "media-type.mounting-tape"
msgstr ""
#. TRANSLATORS: Multi Layer
-#: locale/ipp-strings.c:1752
+#: locale/ipp-strings.c:1754
msgid "media-type.multi-layer"
msgstr ""
#. TRANSLATORS: Multi Part Form
-#: locale/ipp-strings.c:1754
+#: locale/ipp-strings.c:1756
msgid "media-type.multi-part-form"
msgstr ""
#. TRANSLATORS: Other
-#: locale/ipp-strings.c:1756
+#: locale/ipp-strings.c:1758
msgid "media-type.other"
msgstr ""
#. TRANSLATORS: Paper
-#: locale/ipp-strings.c:1758
+#: locale/ipp-strings.c:1760
msgid "media-type.paper"
msgstr ""
#. TRANSLATORS: Photo Paper
-#: locale/ipp-strings.c:1760
+#: locale/ipp-strings.c:1762
msgid "media-type.photographic"
msgstr ""
#. TRANSLATORS: Photographic Archival
-#: locale/ipp-strings.c:1762
+#: locale/ipp-strings.c:1764
msgid "media-type.photographic-archival"
msgstr ""
#. TRANSLATORS: Photo Film
-#: locale/ipp-strings.c:1764
+#: locale/ipp-strings.c:1766
msgid "media-type.photographic-film"
msgstr ""
#. TRANSLATORS: Glossy Photo Paper
-#: locale/ipp-strings.c:1766
+#: locale/ipp-strings.c:1768
msgid "media-type.photographic-glossy"
msgstr ""
#. TRANSLATORS: High Gloss Photo Paper
-#: locale/ipp-strings.c:1768
+#: locale/ipp-strings.c:1770
msgid "media-type.photographic-high-gloss"
msgstr ""
#. TRANSLATORS: Matte Photo Paper
-#: locale/ipp-strings.c:1770
+#: locale/ipp-strings.c:1772
msgid "media-type.photographic-matte"
msgstr ""
#. TRANSLATORS: Satin Photo Paper
-#: locale/ipp-strings.c:1772
+#: locale/ipp-strings.c:1774
msgid "media-type.photographic-satin"
msgstr ""
#. TRANSLATORS: Semi-Gloss Photo Paper
-#: locale/ipp-strings.c:1774
+#: locale/ipp-strings.c:1776
msgid "media-type.photographic-semi-gloss"
msgstr ""
#. TRANSLATORS: Plastic
-#: locale/ipp-strings.c:1776
+#: locale/ipp-strings.c:1778
msgid "media-type.plastic"
msgstr ""
#. TRANSLATORS: Plastic Archival
-#: locale/ipp-strings.c:1778
+#: locale/ipp-strings.c:1780
msgid "media-type.plastic-archival"
msgstr ""
#. TRANSLATORS: Plastic Colored
-#: locale/ipp-strings.c:1780
+#: locale/ipp-strings.c:1782
msgid "media-type.plastic-colored"
msgstr ""
#. TRANSLATORS: Plastic Glossy
-#: locale/ipp-strings.c:1782
+#: locale/ipp-strings.c:1784
msgid "media-type.plastic-glossy"
msgstr ""
#. TRANSLATORS: Plastic High Gloss
-#: locale/ipp-strings.c:1784
+#: locale/ipp-strings.c:1786
msgid "media-type.plastic-high-gloss"
msgstr ""
#. TRANSLATORS: Plastic Matte
-#: locale/ipp-strings.c:1786
+#: locale/ipp-strings.c:1788
msgid "media-type.plastic-matte"
msgstr ""
#. TRANSLATORS: Plastic Satin
-#: locale/ipp-strings.c:1788
+#: locale/ipp-strings.c:1790
msgid "media-type.plastic-satin"
msgstr ""
#. TRANSLATORS: Plastic Semi Gloss
-#: locale/ipp-strings.c:1790
+#: locale/ipp-strings.c:1792
msgid "media-type.plastic-semi-gloss"
msgstr ""
#. TRANSLATORS: Plate
-#: locale/ipp-strings.c:1792
+#: locale/ipp-strings.c:1794
msgid "media-type.plate"
msgstr ""
#. TRANSLATORS: Polyester
-#: locale/ipp-strings.c:1794
+#: locale/ipp-strings.c:1796
msgid "media-type.polyester"
msgstr ""
#. TRANSLATORS: Pre Cut Tabs
-#: locale/ipp-strings.c:1796
+#: locale/ipp-strings.c:1798
msgid "media-type.pre-cut-tabs"
msgstr ""
#. TRANSLATORS: Roll
-#: locale/ipp-strings.c:1798
+#: locale/ipp-strings.c:1800
msgid "media-type.roll"
msgstr ""
#. TRANSLATORS: Screen
-#: locale/ipp-strings.c:1800
+#: locale/ipp-strings.c:1802
msgid "media-type.screen"
msgstr ""
#. TRANSLATORS: Screen Paged
-#: locale/ipp-strings.c:1802
+#: locale/ipp-strings.c:1804
msgid "media-type.screen-paged"
msgstr ""
#. TRANSLATORS: Self Adhesive
-#: locale/ipp-strings.c:1804
+#: locale/ipp-strings.c:1806
msgid "media-type.self-adhesive"
msgstr ""
#. TRANSLATORS: Self Adhesive Film
-#: locale/ipp-strings.c:1806
+#: locale/ipp-strings.c:1808
msgid "media-type.self-adhesive-film"
msgstr ""
#. TRANSLATORS: Shrink Foil
-#: locale/ipp-strings.c:1808
+#: locale/ipp-strings.c:1810
msgid "media-type.shrink-foil"
msgstr ""
#. TRANSLATORS: Single Face
-#: locale/ipp-strings.c:1810
+#: locale/ipp-strings.c:1812
msgid "media-type.single-face"
msgstr ""
#. TRANSLATORS: Single Wall
-#: locale/ipp-strings.c:1812
+#: locale/ipp-strings.c:1814
msgid "media-type.single-wall"
msgstr ""
#. TRANSLATORS: Sleeve
-#: locale/ipp-strings.c:1814
+#: locale/ipp-strings.c:1816
msgid "media-type.sleeve"
msgstr ""
#. TRANSLATORS: Stationery
-#: locale/ipp-strings.c:1816
+#: locale/ipp-strings.c:1818
msgid "media-type.stationery"
msgstr ""
#. TRANSLATORS: Stationery Archival
-#: locale/ipp-strings.c:1818
+#: locale/ipp-strings.c:1820
msgid "media-type.stationery-archival"
msgstr ""
#. TRANSLATORS: Coated Paper
-#: locale/ipp-strings.c:1820
+#: locale/ipp-strings.c:1822
msgid "media-type.stationery-coated"
msgstr ""
#. TRANSLATORS: Stationery Cotton
-#: locale/ipp-strings.c:1822
+#: locale/ipp-strings.c:1824
msgid "media-type.stationery-cotton"
msgstr ""
#. TRANSLATORS: Vellum Paper
-#: locale/ipp-strings.c:1824
+#: locale/ipp-strings.c:1826
msgid "media-type.stationery-fine"
msgstr ""
#. TRANSLATORS: Heavyweight Paper
-#: locale/ipp-strings.c:1826
+#: locale/ipp-strings.c:1828
msgid "media-type.stationery-heavyweight"
msgstr ""
#. TRANSLATORS: Stationery Heavyweight Coated
-#: locale/ipp-strings.c:1828
+#: locale/ipp-strings.c:1830
msgid "media-type.stationery-heavyweight-coated"
msgstr ""
#. TRANSLATORS: Stationery Inkjet Paper
-#: locale/ipp-strings.c:1830
+#: locale/ipp-strings.c:1832
msgid "media-type.stationery-inkjet"
msgstr ""
#. TRANSLATORS: Letterhead
-#: locale/ipp-strings.c:1832
+#: locale/ipp-strings.c:1834
msgid "media-type.stationery-letterhead"
msgstr ""
#. TRANSLATORS: Lightweight Paper
-#: locale/ipp-strings.c:1834
+#: locale/ipp-strings.c:1836
msgid "media-type.stationery-lightweight"
msgstr ""
#. TRANSLATORS: Preprinted Paper
-#: locale/ipp-strings.c:1836
+#: locale/ipp-strings.c:1838
msgid "media-type.stationery-preprinted"
msgstr ""
#. TRANSLATORS: Punched Paper
-#: locale/ipp-strings.c:1838
+#: locale/ipp-strings.c:1840
msgid "media-type.stationery-prepunched"
msgstr ""
#. TRANSLATORS: Tab Stock
-#: locale/ipp-strings.c:1840
+#: locale/ipp-strings.c:1842
msgid "media-type.tab-stock"
msgstr ""
#. TRANSLATORS: Tractor
-#: locale/ipp-strings.c:1842
+#: locale/ipp-strings.c:1844
msgid "media-type.tractor"
msgstr ""
#. TRANSLATORS: Transfer
-#: locale/ipp-strings.c:1844
+#: locale/ipp-strings.c:1846
msgid "media-type.transfer"
msgstr ""
#. TRANSLATORS: Transparency
-#: locale/ipp-strings.c:1846
+#: locale/ipp-strings.c:1848
msgid "media-type.transparency"
msgstr ""
#. TRANSLATORS: Triple Wall
-#: locale/ipp-strings.c:1848
+#: locale/ipp-strings.c:1850
msgid "media-type.triple-wall"
msgstr ""
#. TRANSLATORS: Wet Film
-#: locale/ipp-strings.c:1850
+#: locale/ipp-strings.c:1852
msgid "media-type.wet-film"
msgstr ""
#. TRANSLATORS: Media Weight (grams per m²)
-#: locale/ipp-strings.c:1852
+#: locale/ipp-strings.c:1854
msgid "media-weight-metric"
msgstr ""
#. TRANSLATORS: 28 x 40″
-#: locale/ipp-strings.c:1854
+#: locale/ipp-strings.c:1856
msgid "media.asme_f_28x40in"
msgstr ""
#. TRANSLATORS: A4 or US Letter
-#: locale/ipp-strings.c:1856
+#: locale/ipp-strings.c:1858
msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in"
msgstr ""
#. TRANSLATORS: 2a0
-#: locale/ipp-strings.c:1858
+#: locale/ipp-strings.c:1860
msgid "media.iso_2a0_1189x1682mm"
msgstr ""
#. TRANSLATORS: A0
-#: locale/ipp-strings.c:1860
+#: locale/ipp-strings.c:1862
msgid "media.iso_a0_841x1189mm"
msgstr ""
#. TRANSLATORS: A0x3
-#: locale/ipp-strings.c:1862
+#: locale/ipp-strings.c:1864
msgid "media.iso_a0x3_1189x2523mm"
msgstr ""
#. TRANSLATORS: A10
-#: locale/ipp-strings.c:1864
+#: locale/ipp-strings.c:1866
msgid "media.iso_a10_26x37mm"
msgstr ""
#. TRANSLATORS: A1
-#: locale/ipp-strings.c:1866
+#: locale/ipp-strings.c:1868
msgid "media.iso_a1_594x841mm"
msgstr ""
#. TRANSLATORS: A1x3
-#: locale/ipp-strings.c:1868
+#: locale/ipp-strings.c:1870
msgid "media.iso_a1x3_841x1783mm"
msgstr ""
#. TRANSLATORS: A1x4
-#: locale/ipp-strings.c:1870
+#: locale/ipp-strings.c:1872
msgid "media.iso_a1x4_841x2378mm"
msgstr ""
#. TRANSLATORS: A2
-#: locale/ipp-strings.c:1872
+#: locale/ipp-strings.c:1874
msgid "media.iso_a2_420x594mm"
msgstr ""
#. TRANSLATORS: A2x3
-#: locale/ipp-strings.c:1874
+#: locale/ipp-strings.c:1876
msgid "media.iso_a2x3_594x1261mm"
msgstr ""
#. TRANSLATORS: A2x4
-#: locale/ipp-strings.c:1876
+#: locale/ipp-strings.c:1878
msgid "media.iso_a2x4_594x1682mm"
msgstr ""
#. TRANSLATORS: A2x5
-#: locale/ipp-strings.c:1878
+#: locale/ipp-strings.c:1880
msgid "media.iso_a2x5_594x2102mm"
msgstr ""
#. TRANSLATORS: A3 (Extra)
-#: locale/ipp-strings.c:1880
+#: locale/ipp-strings.c:1882
msgid "media.iso_a3-extra_322x445mm"
msgstr ""
#. TRANSLATORS: A3
-#: locale/ipp-strings.c:1882
+#: locale/ipp-strings.c:1884
msgid "media.iso_a3_297x420mm"
msgstr ""
#. TRANSLATORS: A3x3
-#: locale/ipp-strings.c:1884
+#: locale/ipp-strings.c:1886
msgid "media.iso_a3x3_420x891mm"
msgstr ""
#. TRANSLATORS: A3x4
-#: locale/ipp-strings.c:1886
+#: locale/ipp-strings.c:1888
msgid "media.iso_a3x4_420x1189mm"
msgstr ""
#. TRANSLATORS: A3x5
-#: locale/ipp-strings.c:1888
+#: locale/ipp-strings.c:1890
msgid "media.iso_a3x5_420x1486mm"
msgstr ""
#. TRANSLATORS: A3x6
-#: locale/ipp-strings.c:1890
+#: locale/ipp-strings.c:1892
msgid "media.iso_a3x6_420x1783mm"
msgstr ""
#. TRANSLATORS: A3x7
-#: locale/ipp-strings.c:1892
+#: locale/ipp-strings.c:1894
msgid "media.iso_a3x7_420x2080mm"
msgstr ""
#. TRANSLATORS: A4 (Extra)
-#: locale/ipp-strings.c:1894
+#: locale/ipp-strings.c:1896
msgid "media.iso_a4-extra_235.5x322.3mm"
msgstr ""
#. TRANSLATORS: A4 (Tab)
-#: locale/ipp-strings.c:1896
+#: locale/ipp-strings.c:1898
msgid "media.iso_a4-tab_225x297mm"
msgstr ""
#. TRANSLATORS: A4
-#: locale/ipp-strings.c:1898
+#: locale/ipp-strings.c:1900
msgid "media.iso_a4_210x297mm"
msgstr ""
#. TRANSLATORS: A4x3
-#: locale/ipp-strings.c:1900
+#: locale/ipp-strings.c:1902
msgid "media.iso_a4x3_297x630mm"
msgstr ""
#. TRANSLATORS: A4x4
-#: locale/ipp-strings.c:1902
+#: locale/ipp-strings.c:1904
msgid "media.iso_a4x4_297x841mm"
msgstr ""
#. TRANSLATORS: A4x5
-#: locale/ipp-strings.c:1904
+#: locale/ipp-strings.c:1906
msgid "media.iso_a4x5_297x1051mm"
msgstr ""
#. TRANSLATORS: A4x6
-#: locale/ipp-strings.c:1906
+#: locale/ipp-strings.c:1908
msgid "media.iso_a4x6_297x1261mm"
msgstr ""
#. TRANSLATORS: A4x7
-#: locale/ipp-strings.c:1908
+#: locale/ipp-strings.c:1910
msgid "media.iso_a4x7_297x1471mm"
msgstr ""
#. TRANSLATORS: A4x8
-#: locale/ipp-strings.c:1910
+#: locale/ipp-strings.c:1912
msgid "media.iso_a4x8_297x1682mm"
msgstr ""
#. TRANSLATORS: A4x9
-#: locale/ipp-strings.c:1912
+#: locale/ipp-strings.c:1914
msgid "media.iso_a4x9_297x1892mm"
msgstr ""
#. TRANSLATORS: A5 (Extra)
-#: locale/ipp-strings.c:1914
+#: locale/ipp-strings.c:1916
msgid "media.iso_a5-extra_174x235mm"
msgstr ""
#. TRANSLATORS: A5
-#: locale/ipp-strings.c:1916
+#: locale/ipp-strings.c:1918
msgid "media.iso_a5_148x210mm"
msgstr ""
#. TRANSLATORS: A6
-#: locale/ipp-strings.c:1918
+#: locale/ipp-strings.c:1920
msgid "media.iso_a6_105x148mm"
msgstr ""
#. TRANSLATORS: A7
-#: locale/ipp-strings.c:1920
+#: locale/ipp-strings.c:1922
msgid "media.iso_a7_74x105mm"
msgstr ""
#. TRANSLATORS: A8
-#: locale/ipp-strings.c:1922
+#: locale/ipp-strings.c:1924
msgid "media.iso_a8_52x74mm"
msgstr ""
#. TRANSLATORS: A9
-#: locale/ipp-strings.c:1924
+#: locale/ipp-strings.c:1926
msgid "media.iso_a9_37x52mm"
msgstr ""
#. TRANSLATORS: B0
-#: locale/ipp-strings.c:1926
+#: locale/ipp-strings.c:1928
msgid "media.iso_b0_1000x1414mm"
msgstr ""
#. TRANSLATORS: B10
-#: locale/ipp-strings.c:1928
+#: locale/ipp-strings.c:1930
msgid "media.iso_b10_31x44mm"
msgstr ""
#. TRANSLATORS: B1
-#: locale/ipp-strings.c:1930
+#: locale/ipp-strings.c:1932
msgid "media.iso_b1_707x1000mm"
msgstr ""
#. TRANSLATORS: B2
-#: locale/ipp-strings.c:1932
+#: locale/ipp-strings.c:1934
msgid "media.iso_b2_500x707mm"
msgstr ""
#. TRANSLATORS: B3
-#: locale/ipp-strings.c:1934
+#: locale/ipp-strings.c:1936
msgid "media.iso_b3_353x500mm"
msgstr ""
#. TRANSLATORS: B4
-#: locale/ipp-strings.c:1936
+#: locale/ipp-strings.c:1938
msgid "media.iso_b4_250x353mm"
msgstr ""
#. TRANSLATORS: B5 (Extra)
-#: locale/ipp-strings.c:1938
+#: locale/ipp-strings.c:1940
msgid "media.iso_b5-extra_201x276mm"
msgstr ""
#. TRANSLATORS: Envelope B5
-#: locale/ipp-strings.c:1940
+#: locale/ipp-strings.c:1942
msgid "media.iso_b5_176x250mm"
msgstr ""
#. TRANSLATORS: B6
-#: locale/ipp-strings.c:1942
+#: locale/ipp-strings.c:1944
msgid "media.iso_b6_125x176mm"
msgstr ""
#. TRANSLATORS: Envelope B6/C4
-#: locale/ipp-strings.c:1944
+#: locale/ipp-strings.c:1946
msgid "media.iso_b6c4_125x324mm"
msgstr ""
#. TRANSLATORS: B7
-#: locale/ipp-strings.c:1946
+#: locale/ipp-strings.c:1948
msgid "media.iso_b7_88x125mm"
msgstr ""
#. TRANSLATORS: B8
-#: locale/ipp-strings.c:1948
+#: locale/ipp-strings.c:1950
msgid "media.iso_b8_62x88mm"
msgstr ""
#. TRANSLATORS: B9
-#: locale/ipp-strings.c:1950
+#: locale/ipp-strings.c:1952
msgid "media.iso_b9_44x62mm"
msgstr ""
#. TRANSLATORS: CEnvelope 0
-#: locale/ipp-strings.c:1952
+#: locale/ipp-strings.c:1954
msgid "media.iso_c0_917x1297mm"
msgstr ""
#. TRANSLATORS: CEnvelope 10
-#: locale/ipp-strings.c:1954
+#: locale/ipp-strings.c:1956
msgid "media.iso_c10_28x40mm"
msgstr ""
#. TRANSLATORS: CEnvelope 1
-#: locale/ipp-strings.c:1956
+#: locale/ipp-strings.c:1958
msgid "media.iso_c1_648x917mm"
msgstr ""
#. TRANSLATORS: CEnvelope 2
-#: locale/ipp-strings.c:1958
+#: locale/ipp-strings.c:1960
msgid "media.iso_c2_458x648mm"
msgstr ""
#. TRANSLATORS: CEnvelope 3
-#: locale/ipp-strings.c:1960
+#: locale/ipp-strings.c:1962
msgid "media.iso_c3_324x458mm"
msgstr ""
#. TRANSLATORS: CEnvelope 4
-#: locale/ipp-strings.c:1962
+#: locale/ipp-strings.c:1964
msgid "media.iso_c4_229x324mm"
msgstr ""
#. TRANSLATORS: CEnvelope 5
-#: locale/ipp-strings.c:1964
+#: locale/ipp-strings.c:1966
msgid "media.iso_c5_162x229mm"
msgstr ""
#. TRANSLATORS: CEnvelope 6
-#: locale/ipp-strings.c:1966
+#: locale/ipp-strings.c:1968
msgid "media.iso_c6_114x162mm"
msgstr ""
#. TRANSLATORS: CEnvelope 6c5
-#: locale/ipp-strings.c:1968
+#: locale/ipp-strings.c:1970
msgid "media.iso_c6c5_114x229mm"
msgstr ""
#. TRANSLATORS: CEnvelope 7
-#: locale/ipp-strings.c:1970
+#: locale/ipp-strings.c:1972
msgid "media.iso_c7_81x114mm"
msgstr ""
#. TRANSLATORS: CEnvelope 7c6
-#: locale/ipp-strings.c:1972
+#: locale/ipp-strings.c:1974
msgid "media.iso_c7c6_81x162mm"
msgstr ""
#. TRANSLATORS: CEnvelope 8
-#: locale/ipp-strings.c:1974
+#: locale/ipp-strings.c:1976
msgid "media.iso_c8_57x81mm"
msgstr ""
#. TRANSLATORS: CEnvelope 9
-#: locale/ipp-strings.c:1976
+#: locale/ipp-strings.c:1978
msgid "media.iso_c9_40x57mm"
msgstr ""
#. TRANSLATORS: Envelope DL
-#: locale/ipp-strings.c:1978
+#: locale/ipp-strings.c:1980
msgid "media.iso_dl_110x220mm"
msgstr ""
#. TRANSLATORS: Id-1
-#: locale/ipp-strings.c:1980
+#: locale/ipp-strings.c:1982
msgid "media.iso_id-1_53.98x85.6mm"
msgstr ""
#. TRANSLATORS: Id-3
-#: locale/ipp-strings.c:1982
+#: locale/ipp-strings.c:1984
msgid "media.iso_id-3_88x125mm"
msgstr ""
#. TRANSLATORS: ISO RA0
-#: locale/ipp-strings.c:1984
+#: locale/ipp-strings.c:1986
msgid "media.iso_ra0_860x1220mm"
msgstr ""
#. TRANSLATORS: ISO RA1
-#: locale/ipp-strings.c:1986
+#: locale/ipp-strings.c:1988
msgid "media.iso_ra1_610x860mm"
msgstr ""
#. TRANSLATORS: ISO RA2
-#: locale/ipp-strings.c:1988
+#: locale/ipp-strings.c:1990
msgid "media.iso_ra2_430x610mm"
msgstr ""
#. TRANSLATORS: ISO RA3
-#: locale/ipp-strings.c:1990
+#: locale/ipp-strings.c:1992
msgid "media.iso_ra3_305x430mm"
msgstr ""
#. TRANSLATORS: ISO RA4
-#: locale/ipp-strings.c:1992
+#: locale/ipp-strings.c:1994
msgid "media.iso_ra4_215x305mm"
msgstr ""
#. TRANSLATORS: ISO SRA0
-#: locale/ipp-strings.c:1994
+#: locale/ipp-strings.c:1996
msgid "media.iso_sra0_900x1280mm"
msgstr ""
#. TRANSLATORS: ISO SRA1
-#: locale/ipp-strings.c:1996
+#: locale/ipp-strings.c:1998
msgid "media.iso_sra1_640x900mm"
msgstr ""
#. TRANSLATORS: ISO SRA2
-#: locale/ipp-strings.c:1998
+#: locale/ipp-strings.c:2000
msgid "media.iso_sra2_450x640mm"
msgstr ""
#. TRANSLATORS: ISO SRA3
-#: locale/ipp-strings.c:2000
+#: locale/ipp-strings.c:2002
msgid "media.iso_sra3_320x450mm"
msgstr ""
#. TRANSLATORS: ISO SRA4
-#: locale/ipp-strings.c:2002
+#: locale/ipp-strings.c:2004
msgid "media.iso_sra4_225x320mm"
msgstr ""
#. TRANSLATORS: JIS B0
-#: locale/ipp-strings.c:2004
+#: locale/ipp-strings.c:2006
msgid "media.jis_b0_1030x1456mm"
msgstr ""
#. TRANSLATORS: JIS B10
-#: locale/ipp-strings.c:2006
+#: locale/ipp-strings.c:2008
msgid "media.jis_b10_32x45mm"
msgstr ""
#. TRANSLATORS: JIS B1
-#: locale/ipp-strings.c:2008
+#: locale/ipp-strings.c:2010
msgid "media.jis_b1_728x1030mm"
msgstr ""
#. TRANSLATORS: JIS B2
-#: locale/ipp-strings.c:2010
+#: locale/ipp-strings.c:2012
msgid "media.jis_b2_515x728mm"
msgstr ""
#. TRANSLATORS: JIS B3
-#: locale/ipp-strings.c:2012
+#: locale/ipp-strings.c:2014
msgid "media.jis_b3_364x515mm"
msgstr ""
#. TRANSLATORS: JIS B4
-#: locale/ipp-strings.c:2014
+#: locale/ipp-strings.c:2016
msgid "media.jis_b4_257x364mm"
msgstr ""
#. TRANSLATORS: JIS B5
-#: locale/ipp-strings.c:2016
+#: locale/ipp-strings.c:2018
msgid "media.jis_b5_182x257mm"
msgstr ""
#. TRANSLATORS: JIS B6
-#: locale/ipp-strings.c:2018
+#: locale/ipp-strings.c:2020
msgid "media.jis_b6_128x182mm"
msgstr ""
#. TRANSLATORS: JIS B7
-#: locale/ipp-strings.c:2020
+#: locale/ipp-strings.c:2022
msgid "media.jis_b7_91x128mm"
msgstr ""
#. TRANSLATORS: JIS B8
-#: locale/ipp-strings.c:2022
+#: locale/ipp-strings.c:2024
msgid "media.jis_b8_64x91mm"
msgstr ""
#. TRANSLATORS: JIS B9
-#: locale/ipp-strings.c:2024
+#: locale/ipp-strings.c:2026
msgid "media.jis_b9_45x64mm"
msgstr ""
#. TRANSLATORS: JIS Executive
-#: locale/ipp-strings.c:2026
+#: locale/ipp-strings.c:2028
msgid "media.jis_exec_216x330mm"
msgstr ""
#. TRANSLATORS: Envelope Chou 2
-#: locale/ipp-strings.c:2028
+#: locale/ipp-strings.c:2030
msgid "media.jpn_chou2_111.1x146mm"
msgstr ""
#. TRANSLATORS: Envelope Chou 3
-#: locale/ipp-strings.c:2030
+#: locale/ipp-strings.c:2032
msgid "media.jpn_chou3_120x235mm"
msgstr ""
#. TRANSLATORS: Envelope Chou 40
-#: locale/ipp-strings.c:2032
+#: locale/ipp-strings.c:2034
msgid "media.jpn_chou40_90x225mm"
msgstr ""
#. TRANSLATORS: Envelope Chou 4
-#: locale/ipp-strings.c:2034
+#: locale/ipp-strings.c:2036
msgid "media.jpn_chou4_90x205mm"
msgstr ""
#. TRANSLATORS: Hagaki
-#: locale/ipp-strings.c:2036
+#: locale/ipp-strings.c:2038
msgid "media.jpn_hagaki_100x148mm"
msgstr ""
#. TRANSLATORS: Envelope Kahu
-#: locale/ipp-strings.c:2038
+#: locale/ipp-strings.c:2040
msgid "media.jpn_kahu_240x322.1mm"
msgstr ""
#. TRANSLATORS: 270 x 382mm
-#: locale/ipp-strings.c:2040
+#: locale/ipp-strings.c:2042
msgid "media.jpn_kaku1_270x382mm"
msgstr ""
#. TRANSLATORS: Envelope Kahu 2
-#: locale/ipp-strings.c:2042
+#: locale/ipp-strings.c:2044
msgid "media.jpn_kaku2_240x332mm"
msgstr ""
#. TRANSLATORS: 216 x 277mm
-#: locale/ipp-strings.c:2044
+#: locale/ipp-strings.c:2046
msgid "media.jpn_kaku3_216x277mm"
msgstr ""
#. TRANSLATORS: 197 x 267mm
-#: locale/ipp-strings.c:2046
+#: locale/ipp-strings.c:2048
msgid "media.jpn_kaku4_197x267mm"
msgstr ""
#. TRANSLATORS: 190 x 240mm
-#: locale/ipp-strings.c:2048
+#: locale/ipp-strings.c:2050
msgid "media.jpn_kaku5_190x240mm"
msgstr ""
#. TRANSLATORS: 142 x 205mm
-#: locale/ipp-strings.c:2050
+#: locale/ipp-strings.c:2052
msgid "media.jpn_kaku7_142x205mm"
msgstr ""
#. TRANSLATORS: 119 x 197mm
-#: locale/ipp-strings.c:2052
+#: locale/ipp-strings.c:2054
msgid "media.jpn_kaku8_119x197mm"
msgstr ""
#. TRANSLATORS: Oufuku Reply Postcard
-#: locale/ipp-strings.c:2054
+#: locale/ipp-strings.c:2056
msgid "media.jpn_oufuku_148x200mm"
msgstr ""
#. TRANSLATORS: Envelope You 4
-#: locale/ipp-strings.c:2056
+#: locale/ipp-strings.c:2058
msgid "media.jpn_you4_105x235mm"
msgstr ""
#. TRANSLATORS: 10 x 11″
-#: locale/ipp-strings.c:2058
+#: locale/ipp-strings.c:2060
msgid "media.na_10x11_10x11in"
msgstr ""
#. TRANSLATORS: 10 x 13″
-#: locale/ipp-strings.c:2060
+#: locale/ipp-strings.c:2062
msgid "media.na_10x13_10x13in"
msgstr ""
#. TRANSLATORS: 10 x 14″
-#: locale/ipp-strings.c:2062
+#: locale/ipp-strings.c:2064
msgid "media.na_10x14_10x14in"
msgstr ""
#. TRANSLATORS: 10 x 15″
-#: locale/ipp-strings.c:2064
+#: locale/ipp-strings.c:2066
msgid "media.na_10x15_10x15in"
msgstr ""
#. TRANSLATORS: 11 x 12″
-#: locale/ipp-strings.c:2066
+#: locale/ipp-strings.c:2068
msgid "media.na_11x12_11x12in"
msgstr ""
#. TRANSLATORS: 11 x 15″
-#: locale/ipp-strings.c:2068
+#: locale/ipp-strings.c:2070
msgid "media.na_11x15_11x15in"
msgstr ""
#. TRANSLATORS: 12 x 19″
-#: locale/ipp-strings.c:2070
+#: locale/ipp-strings.c:2072
msgid "media.na_12x19_12x19in"
msgstr ""
#. TRANSLATORS: 5 x 7″
-#: locale/ipp-strings.c:2072
+#: locale/ipp-strings.c:2074
msgid "media.na_5x7_5x7in"
msgstr ""
#. TRANSLATORS: 6 x 9″
-#: locale/ipp-strings.c:2074
+#: locale/ipp-strings.c:2076
msgid "media.na_6x9_6x9in"
msgstr ""
#. TRANSLATORS: 7 x 9″
-#: locale/ipp-strings.c:2076
+#: locale/ipp-strings.c:2078
msgid "media.na_7x9_7x9in"
msgstr ""
#. TRANSLATORS: 9 x 11″
-#: locale/ipp-strings.c:2078
+#: locale/ipp-strings.c:2080
msgid "media.na_9x11_9x11in"
msgstr ""
#. TRANSLATORS: Envelope A2
-#: locale/ipp-strings.c:2080
+#: locale/ipp-strings.c:2082
msgid "media.na_a2_4.375x5.75in"
msgstr ""
#. TRANSLATORS: 9 x 12″
-#: locale/ipp-strings.c:2082
+#: locale/ipp-strings.c:2084
msgid "media.na_arch-a_9x12in"
msgstr ""
#. TRANSLATORS: 12 x 18″
-#: locale/ipp-strings.c:2084
+#: locale/ipp-strings.c:2086
msgid "media.na_arch-b_12x18in"
msgstr ""
#. TRANSLATORS: 18 x 24″
-#: locale/ipp-strings.c:2086
+#: locale/ipp-strings.c:2088
msgid "media.na_arch-c_18x24in"
msgstr ""
#. TRANSLATORS: 24 x 36″
-#: locale/ipp-strings.c:2088
+#: locale/ipp-strings.c:2090
msgid "media.na_arch-d_24x36in"
msgstr ""
#. TRANSLATORS: 26 x 38″
-#: locale/ipp-strings.c:2090
+#: locale/ipp-strings.c:2092
msgid "media.na_arch-e2_26x38in"
msgstr ""
#. TRANSLATORS: 27 x 39″
-#: locale/ipp-strings.c:2092
+#: locale/ipp-strings.c:2094
msgid "media.na_arch-e3_27x39in"
msgstr ""
#. TRANSLATORS: 36 x 48″
-#: locale/ipp-strings.c:2094
+#: locale/ipp-strings.c:2096
msgid "media.na_arch-e_36x48in"
msgstr ""
#. TRANSLATORS: 12 x 19.17″
-#: locale/ipp-strings.c:2096
+#: locale/ipp-strings.c:2098
msgid "media.na_b-plus_12x19.17in"
msgstr ""
#. TRANSLATORS: Envelope C5
-#: locale/ipp-strings.c:2098
+#: locale/ipp-strings.c:2100
msgid "media.na_c5_6.5x9.5in"
msgstr ""
#. TRANSLATORS: 17 x 22″
-#: locale/ipp-strings.c:2100
+#: locale/ipp-strings.c:2102
msgid "media.na_c_17x22in"
msgstr ""
#. TRANSLATORS: 22 x 34″
-#: locale/ipp-strings.c:2102
+#: locale/ipp-strings.c:2104
msgid "media.na_d_22x34in"
msgstr ""
#. TRANSLATORS: 34 x 44″
-#: locale/ipp-strings.c:2104
+#: locale/ipp-strings.c:2106
msgid "media.na_e_34x44in"
msgstr ""
#. TRANSLATORS: 11 x 14″
-#: locale/ipp-strings.c:2106
+#: locale/ipp-strings.c:2108
msgid "media.na_edp_11x14in"
msgstr ""
#. TRANSLATORS: 12 x 14″
-#: locale/ipp-strings.c:2108
+#: locale/ipp-strings.c:2110
msgid "media.na_eur-edp_12x14in"
msgstr ""
#. TRANSLATORS: Executive
-#: locale/ipp-strings.c:2110
+#: locale/ipp-strings.c:2112
msgid "media.na_executive_7.25x10.5in"
msgstr ""
#. TRANSLATORS: 44 x 68″
-#: locale/ipp-strings.c:2112
+#: locale/ipp-strings.c:2114
msgid "media.na_f_44x68in"
msgstr ""
#. TRANSLATORS: European Fanfold
-#: locale/ipp-strings.c:2114
+#: locale/ipp-strings.c:2116
msgid "media.na_fanfold-eur_8.5x12in"
msgstr ""
#. TRANSLATORS: US Fanfold
-#: locale/ipp-strings.c:2116
+#: locale/ipp-strings.c:2118
msgid "media.na_fanfold-us_11x14.875in"
msgstr ""
#. TRANSLATORS: Foolscap
-#: locale/ipp-strings.c:2118
+#: locale/ipp-strings.c:2120
msgid "media.na_foolscap_8.5x13in"
msgstr ""
#. TRANSLATORS: 8 x 13″
-#: locale/ipp-strings.c:2120
+#: locale/ipp-strings.c:2122
msgid "media.na_govt-legal_8x13in"
msgstr ""
#. TRANSLATORS: 8 x 10″
-#: locale/ipp-strings.c:2122
+#: locale/ipp-strings.c:2124
msgid "media.na_govt-letter_8x10in"
msgstr ""
#. TRANSLATORS: 3 x 5″
-#: locale/ipp-strings.c:2124
+#: locale/ipp-strings.c:2126
msgid "media.na_index-3x5_3x5in"
msgstr ""
#. TRANSLATORS: 6 x 8″
-#: locale/ipp-strings.c:2126
+#: locale/ipp-strings.c:2128
msgid "media.na_index-4x6-ext_6x8in"
msgstr ""
#. TRANSLATORS: 4 x 6″
-#: locale/ipp-strings.c:2128
+#: locale/ipp-strings.c:2130
msgid "media.na_index-4x6_4x6in"
msgstr ""
#. TRANSLATORS: 5 x 8″
-#: locale/ipp-strings.c:2130
+#: locale/ipp-strings.c:2132
msgid "media.na_index-5x8_5x8in"
msgstr ""
#. TRANSLATORS: Statement
-#: locale/ipp-strings.c:2132
+#: locale/ipp-strings.c:2134
msgid "media.na_invoice_5.5x8.5in"
msgstr ""
#. TRANSLATORS: 11 x 17″
-#: locale/ipp-strings.c:2134
+#: locale/ipp-strings.c:2136
msgid "media.na_ledger_11x17in"
msgstr ""
#. TRANSLATORS: US Legal (Extra)
-#: locale/ipp-strings.c:2136
+#: locale/ipp-strings.c:2138
msgid "media.na_legal-extra_9.5x15in"
msgstr ""
#. TRANSLATORS: US Legal
-#: locale/ipp-strings.c:2138
+#: locale/ipp-strings.c:2140
msgid "media.na_legal_8.5x14in"
msgstr ""
#. TRANSLATORS: US Letter (Extra)
-#: locale/ipp-strings.c:2140
+#: locale/ipp-strings.c:2142
msgid "media.na_letter-extra_9.5x12in"
msgstr ""
#. TRANSLATORS: US Letter (Plus)
-#: locale/ipp-strings.c:2142
+#: locale/ipp-strings.c:2144
msgid "media.na_letter-plus_8.5x12.69in"
msgstr ""
#. TRANSLATORS: US Letter
-#: locale/ipp-strings.c:2144
+#: locale/ipp-strings.c:2146
msgid "media.na_letter_8.5x11in"
msgstr ""
#. TRANSLATORS: Envelope Monarch
-#: locale/ipp-strings.c:2146
+#: locale/ipp-strings.c:2148
msgid "media.na_monarch_3.875x7.5in"
msgstr ""
#. TRANSLATORS: Envelope #10
-#: locale/ipp-strings.c:2148
+#: locale/ipp-strings.c:2150
msgid "media.na_number-10_4.125x9.5in"
msgstr ""
#. TRANSLATORS: Envelope #11
-#: locale/ipp-strings.c:2150
+#: locale/ipp-strings.c:2152
msgid "media.na_number-11_4.5x10.375in"
msgstr ""
#. TRANSLATORS: Envelope #12
-#: locale/ipp-strings.c:2152
+#: locale/ipp-strings.c:2154
msgid "media.na_number-12_4.75x11in"
msgstr ""
#. TRANSLATORS: Envelope #14
-#: locale/ipp-strings.c:2154
+#: locale/ipp-strings.c:2156
msgid "media.na_number-14_5x11.5in"
msgstr ""
#. TRANSLATORS: Envelope #9
-#: locale/ipp-strings.c:2156
+#: locale/ipp-strings.c:2158
msgid "media.na_number-9_3.875x8.875in"
msgstr ""
#. TRANSLATORS: 8.5 x 13.4″
-#: locale/ipp-strings.c:2158
+#: locale/ipp-strings.c:2160
msgid "media.na_oficio_8.5x13.4in"
msgstr ""
#. TRANSLATORS: Envelope Personal
-#: locale/ipp-strings.c:2160
+#: locale/ipp-strings.c:2162
msgid "media.na_personal_3.625x6.5in"
msgstr ""
#. TRANSLATORS: Quarto
-#: locale/ipp-strings.c:2162
+#: locale/ipp-strings.c:2164
msgid "media.na_quarto_8.5x10.83in"
msgstr ""
#. TRANSLATORS: 8.94 x 14″
-#: locale/ipp-strings.c:2164
+#: locale/ipp-strings.c:2166
msgid "media.na_super-a_8.94x14in"
msgstr ""
#. TRANSLATORS: 13 x 19″
-#: locale/ipp-strings.c:2166
+#: locale/ipp-strings.c:2168
msgid "media.na_super-b_13x19in"
msgstr ""
#. TRANSLATORS: 30 x 42″
-#: locale/ipp-strings.c:2168
+#: locale/ipp-strings.c:2170
msgid "media.na_wide-format_30x42in"
msgstr ""
#. TRANSLATORS: 12 x 16″
-#: locale/ipp-strings.c:2170
+#: locale/ipp-strings.c:2172
msgid "media.oe_12x16_12x16in"
msgstr ""
#. TRANSLATORS: 14 x 17″
-#: locale/ipp-strings.c:2172
+#: locale/ipp-strings.c:2174
msgid "media.oe_14x17_14x17in"
msgstr ""
#. TRANSLATORS: 18 x 22″
-#: locale/ipp-strings.c:2174
+#: locale/ipp-strings.c:2176
msgid "media.oe_18x22_18x22in"
msgstr ""
#. TRANSLATORS: 17 x 24″
-#: locale/ipp-strings.c:2176
+#: locale/ipp-strings.c:2178
msgid "media.oe_a2plus_17x24in"
msgstr ""
#. TRANSLATORS: 2 x 3.5″
-#: locale/ipp-strings.c:2178
+#: locale/ipp-strings.c:2180
msgid "media.oe_business-card_2x3.5in"
msgstr ""
#. TRANSLATORS: 10 x 12″
-#: locale/ipp-strings.c:2180
+#: locale/ipp-strings.c:2182
msgid "media.oe_photo-10r_10x12in"
msgstr ""
#. TRANSLATORS: 20 x 24″
-#: locale/ipp-strings.c:2182
+#: locale/ipp-strings.c:2184
msgid "media.oe_photo-20r_20x24in"
msgstr ""
#. TRANSLATORS: 3.5 x 5″
-#: locale/ipp-strings.c:2184
+#: locale/ipp-strings.c:2186
msgid "media.oe_photo-l_3.5x5in"
msgstr ""
#. TRANSLATORS: 10 x 15″
-#: locale/ipp-strings.c:2186
+#: locale/ipp-strings.c:2188
msgid "media.oe_photo-s10r_10x15in"
msgstr ""
#. TRANSLATORS: 4 x 4″
-#: locale/ipp-strings.c:2188
+#: locale/ipp-strings.c:2190
msgid "media.oe_square-photo_4x4in"
msgstr ""
#. TRANSLATORS: 5 x 5″
-#: locale/ipp-strings.c:2190
+#: locale/ipp-strings.c:2192
msgid "media.oe_square-photo_5x5in"
msgstr ""
#. TRANSLATORS: 184 x 260mm
-#: locale/ipp-strings.c:2192
+#: locale/ipp-strings.c:2194
msgid "media.om_16k_184x260mm"
msgstr ""
#. TRANSLATORS: 195 x 270mm
-#: locale/ipp-strings.c:2194
+#: locale/ipp-strings.c:2196
msgid "media.om_16k_195x270mm"
msgstr ""
#. TRANSLATORS: 55 x 85mm
-#: locale/ipp-strings.c:2196
+#: locale/ipp-strings.c:2198
msgid "media.om_business-card_55x85mm"
msgstr ""
#. TRANSLATORS: 55 x 91mm
-#: locale/ipp-strings.c:2198
+#: locale/ipp-strings.c:2200
msgid "media.om_business-card_55x91mm"
msgstr ""
#. TRANSLATORS: 54 x 86mm
-#: locale/ipp-strings.c:2200
+#: locale/ipp-strings.c:2202
msgid "media.om_card_54x86mm"
msgstr ""
#. TRANSLATORS: 275 x 395mm
-#: locale/ipp-strings.c:2202
+#: locale/ipp-strings.c:2204
msgid "media.om_dai-pa-kai_275x395mm"
msgstr ""
#. TRANSLATORS: 89 x 119mm
-#: locale/ipp-strings.c:2204
+#: locale/ipp-strings.c:2206
msgid "media.om_dsc-photo_89x119mm"
msgstr ""
#. TRANSLATORS: Folio
-#: locale/ipp-strings.c:2206
+#: locale/ipp-strings.c:2208
msgid "media.om_folio-sp_215x315mm"
msgstr ""
#. TRANSLATORS: Folio (Special)
-#: locale/ipp-strings.c:2208
+#: locale/ipp-strings.c:2210
msgid "media.om_folio_210x330mm"
msgstr ""
#. TRANSLATORS: Envelope Invitation
-#: locale/ipp-strings.c:2210
+#: locale/ipp-strings.c:2212
msgid "media.om_invite_220x220mm"
msgstr ""
#. TRANSLATORS: Envelope Italian
-#: locale/ipp-strings.c:2212
+#: locale/ipp-strings.c:2214
msgid "media.om_italian_110x230mm"
msgstr ""
#. TRANSLATORS: 198 x 275mm
-#: locale/ipp-strings.c:2214
+#: locale/ipp-strings.c:2216
msgid "media.om_juuro-ku-kai_198x275mm"
msgstr ""
#. TRANSLATORS: 200 x 300
-#: locale/ipp-strings.c:2216
+#: locale/ipp-strings.c:2218
msgid "media.om_large-photo_200x300"
msgstr ""
#. TRANSLATORS: 130 x 180mm
-#: locale/ipp-strings.c:2218
+#: locale/ipp-strings.c:2220
msgid "media.om_medium-photo_130x180mm"
msgstr ""
#. TRANSLATORS: 267 x 389mm
-#: locale/ipp-strings.c:2220
+#: locale/ipp-strings.c:2222
msgid "media.om_pa-kai_267x389mm"
msgstr ""
#. TRANSLATORS: Envelope Postfix
-#: locale/ipp-strings.c:2222
+#: locale/ipp-strings.c:2224
msgid "media.om_postfix_114x229mm"
msgstr ""
#. TRANSLATORS: 100 x 150mm
-#: locale/ipp-strings.c:2224
+#: locale/ipp-strings.c:2226
msgid "media.om_small-photo_100x150mm"
msgstr ""
#. TRANSLATORS: 89 x 89mm
-#: locale/ipp-strings.c:2226
+#: locale/ipp-strings.c:2228
msgid "media.om_square-photo_89x89mm"
msgstr ""
#. TRANSLATORS: 100 x 200mm
-#: locale/ipp-strings.c:2228
+#: locale/ipp-strings.c:2230
msgid "media.om_wide-photo_100x200mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #10
-#: locale/ipp-strings.c:2230
+#: locale/ipp-strings.c:2232
msgid "media.prc_10_324x458mm"
msgstr ""
#. TRANSLATORS: Chinese 16k
-#: locale/ipp-strings.c:2232
+#: locale/ipp-strings.c:2234
msgid "media.prc_16k_146x215mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #1
-#: locale/ipp-strings.c:2234
+#: locale/ipp-strings.c:2236
msgid "media.prc_1_102x165mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #2
-#: locale/ipp-strings.c:2236
+#: locale/ipp-strings.c:2238
msgid "media.prc_2_102x176mm"
msgstr ""
#. TRANSLATORS: Chinese 32k
-#: locale/ipp-strings.c:2238
+#: locale/ipp-strings.c:2240
msgid "media.prc_32k_97x151mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #3
-#: locale/ipp-strings.c:2240
+#: locale/ipp-strings.c:2242
msgid "media.prc_3_125x176mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #4
-#: locale/ipp-strings.c:2242
+#: locale/ipp-strings.c:2244
msgid "media.prc_4_110x208mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #5
-#: locale/ipp-strings.c:2244
+#: locale/ipp-strings.c:2246
msgid "media.prc_5_110x220mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #6
-#: locale/ipp-strings.c:2246
+#: locale/ipp-strings.c:2248
msgid "media.prc_6_120x320mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #7
-#: locale/ipp-strings.c:2248
+#: locale/ipp-strings.c:2250
msgid "media.prc_7_160x230mm"
msgstr ""
#. TRANSLATORS: Envelope Chinese #8
-#: locale/ipp-strings.c:2250
+#: locale/ipp-strings.c:2252
msgid "media.prc_8_120x309mm"
msgstr ""
#. TRANSLATORS: ROC 16k
-#: locale/ipp-strings.c:2252
+#: locale/ipp-strings.c:2254
msgid "media.roc_16k_7.75x10.75in"
msgstr ""
#. TRANSLATORS: ROC 8k
-#: locale/ipp-strings.c:2254
+#: locale/ipp-strings.c:2256
msgid "media.roc_8k_10.75x15.5in"
msgstr ""
msgstr ""
#. TRANSLATORS: Multiple Document Handling
-#: locale/ipp-strings.c:2256
+#: locale/ipp-strings.c:2258
msgid "multiple-document-handling"
msgstr ""
#. TRANSLATORS: Separate Documents Collated Copies
-#: locale/ipp-strings.c:2258
+#: locale/ipp-strings.c:2260
msgid "multiple-document-handling.separate-documents-collated-copies"
msgstr ""
#. TRANSLATORS: Separate Documents Uncollated Copies
-#: locale/ipp-strings.c:2260
+#: locale/ipp-strings.c:2262
msgid "multiple-document-handling.separate-documents-uncollated-copies"
msgstr ""
#. TRANSLATORS: Single Document
-#: locale/ipp-strings.c:2262
+#: locale/ipp-strings.c:2264
msgid "multiple-document-handling.single-document"
msgstr ""
#. TRANSLATORS: Single Document New Sheet
-#: locale/ipp-strings.c:2264
+#: locale/ipp-strings.c:2266
msgid "multiple-document-handling.single-document-new-sheet"
msgstr ""
#. TRANSLATORS: Multiple Object Handling
-#: locale/ipp-strings.c:2266
+#: locale/ipp-strings.c:2268
msgid "multiple-object-handling"
msgstr ""
#. TRANSLATORS: Multiple Object Handling Actual
-#: locale/ipp-strings.c:2268
+#: locale/ipp-strings.c:2270
msgid "multiple-object-handling-actual"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2270
+#: locale/ipp-strings.c:2272
msgid "multiple-object-handling.auto"
msgstr ""
#. TRANSLATORS: Best Fit
-#: locale/ipp-strings.c:2272
+#: locale/ipp-strings.c:2274
msgid "multiple-object-handling.best-fit"
msgstr ""
#. TRANSLATORS: Best Quality
-#: locale/ipp-strings.c:2274
+#: locale/ipp-strings.c:2276
msgid "multiple-object-handling.best-quality"
msgstr ""
#. TRANSLATORS: Best Speed
-#: locale/ipp-strings.c:2276
+#: locale/ipp-strings.c:2278
msgid "multiple-object-handling.best-speed"
msgstr ""
#. TRANSLATORS: One At A Time
-#: locale/ipp-strings.c:2278
+#: locale/ipp-strings.c:2280
msgid "multiple-object-handling.one-at-a-time"
msgstr ""
#. TRANSLATORS: On Timeout
-#: locale/ipp-strings.c:2280
+#: locale/ipp-strings.c:2282
msgid "multiple-operation-time-out-action"
msgstr ""
#. TRANSLATORS: Abort Job
-#: locale/ipp-strings.c:2282
+#: locale/ipp-strings.c:2284
msgid "multiple-operation-time-out-action.abort-job"
msgstr ""
#. TRANSLATORS: Hold Job
-#: locale/ipp-strings.c:2284
+#: locale/ipp-strings.c:2286
msgid "multiple-operation-time-out-action.hold-job"
msgstr ""
#. TRANSLATORS: Process Job
-#: locale/ipp-strings.c:2286
+#: locale/ipp-strings.c:2288
msgid "multiple-operation-time-out-action.process-job"
msgstr ""
msgstr ""
#. TRANSLATORS: Noise Removal
-#: locale/ipp-strings.c:2288
+#: locale/ipp-strings.c:2290
msgid "noise-removal"
msgstr ""
#. TRANSLATORS: Notify Attributes
-#: locale/ipp-strings.c:2290
+#: locale/ipp-strings.c:2292
msgid "notify-attributes"
msgstr ""
#. TRANSLATORS: Notify Charset
-#: locale/ipp-strings.c:2292
+#: locale/ipp-strings.c:2294
msgid "notify-charset"
msgstr ""
#. TRANSLATORS: Notify Events
-#: locale/ipp-strings.c:2294
+#: locale/ipp-strings.c:2296
msgid "notify-events"
msgstr ""
msgstr ""
#. TRANSLATORS: Document Completed
-#: locale/ipp-strings.c:2296
+#: locale/ipp-strings.c:2298
msgid "notify-events.document-completed"
msgstr ""
#. TRANSLATORS: Document Config Changed
-#: locale/ipp-strings.c:2298
+#: locale/ipp-strings.c:2300
msgid "notify-events.document-config-changed"
msgstr ""
#. TRANSLATORS: Document Created
-#: locale/ipp-strings.c:2300
+#: locale/ipp-strings.c:2302
msgid "notify-events.document-created"
msgstr ""
#. TRANSLATORS: Document Fetchable
-#: locale/ipp-strings.c:2302
+#: locale/ipp-strings.c:2304
msgid "notify-events.document-fetchable"
msgstr ""
#. TRANSLATORS: Document State Changed
-#: locale/ipp-strings.c:2304
+#: locale/ipp-strings.c:2306
msgid "notify-events.document-state-changed"
msgstr ""
#. TRANSLATORS: Document Stopped
-#: locale/ipp-strings.c:2306
+#: locale/ipp-strings.c:2308
msgid "notify-events.document-stopped"
msgstr ""
#. TRANSLATORS: Job Completed
-#: locale/ipp-strings.c:2308
+#: locale/ipp-strings.c:2310
msgid "notify-events.job-completed"
msgstr ""
#. TRANSLATORS: Job Config Changed
-#: locale/ipp-strings.c:2310
+#: locale/ipp-strings.c:2312
msgid "notify-events.job-config-changed"
msgstr ""
#. TRANSLATORS: Job Created
-#: locale/ipp-strings.c:2312
+#: locale/ipp-strings.c:2314
msgid "notify-events.job-created"
msgstr ""
#. TRANSLATORS: Job Fetchable
-#: locale/ipp-strings.c:2314
+#: locale/ipp-strings.c:2316
msgid "notify-events.job-fetchable"
msgstr ""
#. TRANSLATORS: Job Progress
-#: locale/ipp-strings.c:2316
+#: locale/ipp-strings.c:2318
msgid "notify-events.job-progress"
msgstr ""
#. TRANSLATORS: Job State Changed
-#: locale/ipp-strings.c:2318
+#: locale/ipp-strings.c:2320
msgid "notify-events.job-state-changed"
msgstr ""
#. TRANSLATORS: Job Stopped
-#: locale/ipp-strings.c:2320
+#: locale/ipp-strings.c:2322
msgid "notify-events.job-stopped"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:2322
+#: locale/ipp-strings.c:2324
msgid "notify-events.none"
msgstr ""
#. TRANSLATORS: Printer Config Changed
-#: locale/ipp-strings.c:2324
+#: locale/ipp-strings.c:2326
msgid "notify-events.printer-config-changed"
msgstr ""
#. TRANSLATORS: Printer Finishings Changed
-#: locale/ipp-strings.c:2326
+#: locale/ipp-strings.c:2328
msgid "notify-events.printer-finishings-changed"
msgstr ""
#. TRANSLATORS: Printer Media Changed
-#: locale/ipp-strings.c:2328
+#: locale/ipp-strings.c:2330
msgid "notify-events.printer-media-changed"
msgstr ""
#. TRANSLATORS: Printer Queue Order Changed
-#: locale/ipp-strings.c:2330
+#: locale/ipp-strings.c:2332
msgid "notify-events.printer-queue-order-changed"
msgstr ""
#. TRANSLATORS: Printer Restarted
-#: locale/ipp-strings.c:2332
+#: locale/ipp-strings.c:2334
msgid "notify-events.printer-restarted"
msgstr ""
#. TRANSLATORS: Printer Shutdown
-#: locale/ipp-strings.c:2334
+#: locale/ipp-strings.c:2336
msgid "notify-events.printer-shutdown"
msgstr ""
#. TRANSLATORS: Printer State Changed
-#: locale/ipp-strings.c:2336
+#: locale/ipp-strings.c:2338
msgid "notify-events.printer-state-changed"
msgstr ""
#. TRANSLATORS: Printer Stopped
-#: locale/ipp-strings.c:2338
+#: locale/ipp-strings.c:2340
msgid "notify-events.printer-stopped"
msgstr ""
#. TRANSLATORS: Notify Get Interval
-#: locale/ipp-strings.c:2340
+#: locale/ipp-strings.c:2342
msgid "notify-get-interval"
msgstr ""
#. TRANSLATORS: Notify Lease Duration
-#: locale/ipp-strings.c:2342
+#: locale/ipp-strings.c:2344
msgid "notify-lease-duration"
msgstr ""
#. TRANSLATORS: Notify Natural Language
-#: locale/ipp-strings.c:2344
+#: locale/ipp-strings.c:2346
msgid "notify-natural-language"
msgstr ""
#. TRANSLATORS: Notify Pull Method
-#: locale/ipp-strings.c:2346
+#: locale/ipp-strings.c:2348
msgid "notify-pull-method"
msgstr ""
#. TRANSLATORS: Notify Recipient
-#: locale/ipp-strings.c:2348
+#: locale/ipp-strings.c:2350
msgid "notify-recipient-uri"
msgstr ""
msgstr ""
#. TRANSLATORS: Notify Sequence Numbers
-#: locale/ipp-strings.c:2350
+#: locale/ipp-strings.c:2352
msgid "notify-sequence-numbers"
msgstr ""
#. TRANSLATORS: Notify Subscription Ids
-#: locale/ipp-strings.c:2352
+#: locale/ipp-strings.c:2354
msgid "notify-subscription-ids"
msgstr ""
#. TRANSLATORS: Notify Time Interval
-#: locale/ipp-strings.c:2354
+#: locale/ipp-strings.c:2356
msgid "notify-time-interval"
msgstr ""
#. TRANSLATORS: Notify User Data
-#: locale/ipp-strings.c:2356
+#: locale/ipp-strings.c:2358
msgid "notify-user-data"
msgstr ""
#. TRANSLATORS: Notify Wait
-#: locale/ipp-strings.c:2358
+#: locale/ipp-strings.c:2360
msgid "notify-wait"
msgstr ""
#. TRANSLATORS: Number Of Retries
-#: locale/ipp-strings.c:2360
+#: locale/ipp-strings.c:2362
msgid "number-of-retries"
msgstr ""
#. TRANSLATORS: Number-Up
-#: locale/ipp-strings.c:2362
+#: locale/ipp-strings.c:2364
msgid "number-up"
msgstr ""
#. TRANSLATORS: Object Offset
-#: locale/ipp-strings.c:2364
+#: locale/ipp-strings.c:2366
msgid "object-offset"
msgstr ""
#. TRANSLATORS: Object Size
-#: locale/ipp-strings.c:2366
+#: locale/ipp-strings.c:2368
msgid "object-size"
msgstr ""
#. TRANSLATORS: Organization Name
-#: locale/ipp-strings.c:2368
+#: locale/ipp-strings.c:2370
msgid "organization-name"
msgstr ""
#. TRANSLATORS: Orientation
-#: locale/ipp-strings.c:2370
+#: locale/ipp-strings.c:2372
msgid "orientation-requested"
msgstr ""
#. TRANSLATORS: Portrait
-#: locale/ipp-strings.c:2372
+#: locale/ipp-strings.c:2374
msgid "orientation-requested.3"
msgstr ""
#. TRANSLATORS: Landscape
-#: locale/ipp-strings.c:2374
+#: locale/ipp-strings.c:2376
msgid "orientation-requested.4"
msgstr ""
#. TRANSLATORS: Reverse Landscape
-#: locale/ipp-strings.c:2376
+#: locale/ipp-strings.c:2378
msgid "orientation-requested.5"
msgstr ""
#. TRANSLATORS: Reverse Portrait
-#: locale/ipp-strings.c:2378
+#: locale/ipp-strings.c:2380
msgid "orientation-requested.6"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:2380
+#: locale/ipp-strings.c:2382
msgid "orientation-requested.7"
msgstr ""
#. TRANSLATORS: Scanned Image Options
-#: locale/ipp-strings.c:2382
+#: locale/ipp-strings.c:2384
msgid "output-attributes"
msgstr ""
#. TRANSLATORS: Output Tray
-#: locale/ipp-strings.c:2384
+#: locale/ipp-strings.c:2386
msgid "output-bin"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2386
+#: locale/ipp-strings.c:2388
msgid "output-bin.auto"
msgstr ""
#. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:2388
+#: locale/ipp-strings.c:2390
msgid "output-bin.bottom"
msgstr ""
#. TRANSLATORS: Center
-#: locale/ipp-strings.c:2390
+#: locale/ipp-strings.c:2392
msgid "output-bin.center"
msgstr ""
#. TRANSLATORS: Face Down
-#: locale/ipp-strings.c:2392
+#: locale/ipp-strings.c:2394
msgid "output-bin.face-down"
msgstr ""
#. TRANSLATORS: Face Up
-#: locale/ipp-strings.c:2394
+#: locale/ipp-strings.c:2396
msgid "output-bin.face-up"
msgstr ""
#. TRANSLATORS: Large Capacity
-#: locale/ipp-strings.c:2396
+#: locale/ipp-strings.c:2398
msgid "output-bin.large-capacity"
msgstr ""
#. TRANSLATORS: Left
-#: locale/ipp-strings.c:2398
+#: locale/ipp-strings.c:2400
msgid "output-bin.left"
msgstr ""
#. TRANSLATORS: Mailbox 1
-#: locale/ipp-strings.c:2400
+#: locale/ipp-strings.c:2402
msgid "output-bin.mailbox-1"
msgstr ""
#. TRANSLATORS: Mailbox 10
-#: locale/ipp-strings.c:2402
+#: locale/ipp-strings.c:2404
msgid "output-bin.mailbox-10"
msgstr ""
#. TRANSLATORS: Mailbox 2
-#: locale/ipp-strings.c:2404
+#: locale/ipp-strings.c:2406
msgid "output-bin.mailbox-2"
msgstr ""
#. TRANSLATORS: Mailbox 3
-#: locale/ipp-strings.c:2406
+#: locale/ipp-strings.c:2408
msgid "output-bin.mailbox-3"
msgstr ""
#. TRANSLATORS: Mailbox 4
-#: locale/ipp-strings.c:2408
+#: locale/ipp-strings.c:2410
msgid "output-bin.mailbox-4"
msgstr ""
#. TRANSLATORS: Mailbox 5
-#: locale/ipp-strings.c:2410
+#: locale/ipp-strings.c:2412
msgid "output-bin.mailbox-5"
msgstr ""
#. TRANSLATORS: Mailbox 6
-#: locale/ipp-strings.c:2412
+#: locale/ipp-strings.c:2414
msgid "output-bin.mailbox-6"
msgstr ""
#. TRANSLATORS: Mailbox 7
-#: locale/ipp-strings.c:2414
+#: locale/ipp-strings.c:2416
msgid "output-bin.mailbox-7"
msgstr ""
#. TRANSLATORS: Mailbox 8
-#: locale/ipp-strings.c:2416
+#: locale/ipp-strings.c:2418
msgid "output-bin.mailbox-8"
msgstr ""
#. TRANSLATORS: Mailbox 9
-#: locale/ipp-strings.c:2418
+#: locale/ipp-strings.c:2420
msgid "output-bin.mailbox-9"
msgstr ""
#. TRANSLATORS: Middle
-#: locale/ipp-strings.c:2420
+#: locale/ipp-strings.c:2422
msgid "output-bin.middle"
msgstr ""
#. TRANSLATORS: My Mailbox
-#: locale/ipp-strings.c:2422
+#: locale/ipp-strings.c:2424
msgid "output-bin.my-mailbox"
msgstr ""
#. TRANSLATORS: Rear
-#: locale/ipp-strings.c:2424
+#: locale/ipp-strings.c:2426
msgid "output-bin.rear"
msgstr ""
#. TRANSLATORS: Right
-#: locale/ipp-strings.c:2426
+#: locale/ipp-strings.c:2428
msgid "output-bin.right"
msgstr ""
#. TRANSLATORS: Side
-#: locale/ipp-strings.c:2428
+#: locale/ipp-strings.c:2430
msgid "output-bin.side"
msgstr ""
#. TRANSLATORS: Stacker 1
-#: locale/ipp-strings.c:2430
+#: locale/ipp-strings.c:2432
msgid "output-bin.stacker-1"
msgstr ""
#. TRANSLATORS: Stacker 10
-#: locale/ipp-strings.c:2432
+#: locale/ipp-strings.c:2434
msgid "output-bin.stacker-10"
msgstr ""
#. TRANSLATORS: Stacker 2
-#: locale/ipp-strings.c:2434
+#: locale/ipp-strings.c:2436
msgid "output-bin.stacker-2"
msgstr ""
#. TRANSLATORS: Stacker 3
-#: locale/ipp-strings.c:2436
+#: locale/ipp-strings.c:2438
msgid "output-bin.stacker-3"
msgstr ""
#. TRANSLATORS: Stacker 4
-#: locale/ipp-strings.c:2438
+#: locale/ipp-strings.c:2440
msgid "output-bin.stacker-4"
msgstr ""
#. TRANSLATORS: Stacker 5
-#: locale/ipp-strings.c:2440
+#: locale/ipp-strings.c:2442
msgid "output-bin.stacker-5"
msgstr ""
#. TRANSLATORS: Stacker 6
-#: locale/ipp-strings.c:2442
+#: locale/ipp-strings.c:2444
msgid "output-bin.stacker-6"
msgstr ""
#. TRANSLATORS: Stacker 7
-#: locale/ipp-strings.c:2444
+#: locale/ipp-strings.c:2446
msgid "output-bin.stacker-7"
msgstr ""
#. TRANSLATORS: Stacker 8
-#: locale/ipp-strings.c:2446
+#: locale/ipp-strings.c:2448
msgid "output-bin.stacker-8"
msgstr ""
#. TRANSLATORS: Stacker 9
-#: locale/ipp-strings.c:2448
+#: locale/ipp-strings.c:2450
msgid "output-bin.stacker-9"
msgstr ""
#. TRANSLATORS: Top
-#: locale/ipp-strings.c:2450
+#: locale/ipp-strings.c:2452
msgid "output-bin.top"
msgstr ""
#. TRANSLATORS: Tray 1
-#: locale/ipp-strings.c:2452
+#: locale/ipp-strings.c:2454
msgid "output-bin.tray-1"
msgstr ""
#. TRANSLATORS: Tray 10
-#: locale/ipp-strings.c:2454
+#: locale/ipp-strings.c:2456
msgid "output-bin.tray-10"
msgstr ""
#. TRANSLATORS: Tray 2
-#: locale/ipp-strings.c:2456
+#: locale/ipp-strings.c:2458
msgid "output-bin.tray-2"
msgstr ""
#. TRANSLATORS: Tray 3
-#: locale/ipp-strings.c:2458
+#: locale/ipp-strings.c:2460
msgid "output-bin.tray-3"
msgstr ""
#. TRANSLATORS: Tray 4
-#: locale/ipp-strings.c:2460
+#: locale/ipp-strings.c:2462
msgid "output-bin.tray-4"
msgstr ""
#. TRANSLATORS: Tray 5
-#: locale/ipp-strings.c:2462
+#: locale/ipp-strings.c:2464
msgid "output-bin.tray-5"
msgstr ""
#. TRANSLATORS: Tray 6
-#: locale/ipp-strings.c:2464
+#: locale/ipp-strings.c:2466
msgid "output-bin.tray-6"
msgstr ""
#. TRANSLATORS: Tray 7
-#: locale/ipp-strings.c:2466
+#: locale/ipp-strings.c:2468
msgid "output-bin.tray-7"
msgstr ""
#. TRANSLATORS: Tray 8
-#: locale/ipp-strings.c:2468
+#: locale/ipp-strings.c:2470
msgid "output-bin.tray-8"
msgstr ""
#. TRANSLATORS: Tray 9
-#: locale/ipp-strings.c:2470
+#: locale/ipp-strings.c:2472
msgid "output-bin.tray-9"
msgstr ""
#. TRANSLATORS: Scanned Image Quality
-#: locale/ipp-strings.c:2472
+#: locale/ipp-strings.c:2474
msgid "output-compression-quality-factor"
msgstr ""
#. TRANSLATORS: Page Delivery
-#: locale/ipp-strings.c:2474
+#: locale/ipp-strings.c:2476
msgid "page-delivery"
msgstr ""
#. TRANSLATORS: Reverse Order Face-down
-#: locale/ipp-strings.c:2476
+#: locale/ipp-strings.c:2478
msgid "page-delivery.reverse-order-face-down"
msgstr ""
#. TRANSLATORS: Reverse Order Face-up
-#: locale/ipp-strings.c:2478
+#: locale/ipp-strings.c:2480
msgid "page-delivery.reverse-order-face-up"
msgstr ""
#. TRANSLATORS: Same Order Face-down
-#: locale/ipp-strings.c:2480
+#: locale/ipp-strings.c:2482
msgid "page-delivery.same-order-face-down"
msgstr ""
#. TRANSLATORS: Same Order Face-up
-#: locale/ipp-strings.c:2482
+#: locale/ipp-strings.c:2484
msgid "page-delivery.same-order-face-up"
msgstr ""
#. TRANSLATORS: System Specified
-#: locale/ipp-strings.c:2484
+#: locale/ipp-strings.c:2486
msgid "page-delivery.system-specified"
msgstr ""
#. TRANSLATORS: Page Order Received
-#: locale/ipp-strings.c:2486
+#: locale/ipp-strings.c:2488
msgid "page-order-received"
msgstr ""
#. TRANSLATORS: 1 To N
-#: locale/ipp-strings.c:2488
+#: locale/ipp-strings.c:2490
msgid "page-order-received.1-to-n-order"
msgstr ""
#. TRANSLATORS: N To 1
-#: locale/ipp-strings.c:2490
+#: locale/ipp-strings.c:2492
msgid "page-order-received.n-to-1-order"
msgstr ""
#. TRANSLATORS: Page Ranges
-#: locale/ipp-strings.c:2492
+#: locale/ipp-strings.c:2494
msgid "page-ranges"
msgstr ""
#. TRANSLATORS: Pages
-#: locale/ipp-strings.c:2494
+#: locale/ipp-strings.c:2496
msgid "pages"
msgstr ""
#. TRANSLATORS: Pages Per Subset
-#: locale/ipp-strings.c:2496
+#: locale/ipp-strings.c:2498
msgid "pages-per-subset"
msgstr ""
#. TRANSLATORS: Pclm Raster Back Side
-#: locale/ipp-strings.c:2498
+#: locale/ipp-strings.c:2500
msgid "pclm-raster-back-side"
msgstr ""
#. TRANSLATORS: Flipped
-#: locale/ipp-strings.c:2500
+#: locale/ipp-strings.c:2502
msgid "pclm-raster-back-side.flipped"
msgstr ""
#. TRANSLATORS: Normal
-#: locale/ipp-strings.c:2502
+#: locale/ipp-strings.c:2504
msgid "pclm-raster-back-side.normal"
msgstr ""
#. TRANSLATORS: Rotated
-#: locale/ipp-strings.c:2504
+#: locale/ipp-strings.c:2506
msgid "pclm-raster-back-side.rotated"
msgstr ""
#. TRANSLATORS: Pclm Source Resolution
-#: locale/ipp-strings.c:2506
+#: locale/ipp-strings.c:2508
msgid "pclm-source-resolution"
msgstr ""
msgstr ""
#. TRANSLATORS: Platform Shape
-#: locale/ipp-strings.c:2508
+#: locale/ipp-strings.c:2510
msgid "platform-shape"
msgstr ""
#. TRANSLATORS: Round
-#: locale/ipp-strings.c:2510
+#: locale/ipp-strings.c:2512
msgid "platform-shape.ellipse"
msgstr ""
#. TRANSLATORS: Rectangle
-#: locale/ipp-strings.c:2512
+#: locale/ipp-strings.c:2514
msgid "platform-shape.rectangle"
msgstr ""
#. TRANSLATORS: Platform Temperature
-#: locale/ipp-strings.c:2514
+#: locale/ipp-strings.c:2516
msgid "platform-temperature"
msgstr ""
#. TRANSLATORS: Post-dial String
-#: locale/ipp-strings.c:2516
+#: locale/ipp-strings.c:2518
msgid "post-dial-string"
msgstr ""
msgstr ""
#. TRANSLATORS: Pre-dial String
-#: locale/ipp-strings.c:2518
+#: locale/ipp-strings.c:2520
msgid "pre-dial-string"
msgstr ""
#. TRANSLATORS: Number-Up Layout
-#: locale/ipp-strings.c:2520
+#: locale/ipp-strings.c:2522
msgid "presentation-direction-number-up"
msgstr ""
#. TRANSLATORS: Top-bottom, Right-left
-#: locale/ipp-strings.c:2522
+#: locale/ipp-strings.c:2524
msgid "presentation-direction-number-up.tobottom-toleft"
msgstr ""
#. TRANSLATORS: Top-bottom, Left-right
-#: locale/ipp-strings.c:2524
+#: locale/ipp-strings.c:2526
msgid "presentation-direction-number-up.tobottom-toright"
msgstr ""
#. TRANSLATORS: Right-left, Top-bottom
-#: locale/ipp-strings.c:2526
+#: locale/ipp-strings.c:2528
msgid "presentation-direction-number-up.toleft-tobottom"
msgstr ""
#. TRANSLATORS: Right-left, Bottom-top
-#: locale/ipp-strings.c:2528
+#: locale/ipp-strings.c:2530
msgid "presentation-direction-number-up.toleft-totop"
msgstr ""
#. TRANSLATORS: Left-right, Top-bottom
-#: locale/ipp-strings.c:2530
+#: locale/ipp-strings.c:2532
msgid "presentation-direction-number-up.toright-tobottom"
msgstr ""
#. TRANSLATORS: Left-right, Bottom-top
-#: locale/ipp-strings.c:2532
+#: locale/ipp-strings.c:2534
msgid "presentation-direction-number-up.toright-totop"
msgstr ""
#. TRANSLATORS: Bottom-top, Right-left
-#: locale/ipp-strings.c:2534
+#: locale/ipp-strings.c:2536
msgid "presentation-direction-number-up.totop-toleft"
msgstr ""
#. TRANSLATORS: Bottom-top, Left-right
-#: locale/ipp-strings.c:2536
+#: locale/ipp-strings.c:2538
msgid "presentation-direction-number-up.totop-toright"
msgstr ""
#. TRANSLATORS: Print Accuracy
-#: locale/ipp-strings.c:2538
+#: locale/ipp-strings.c:2540
msgid "print-accuracy"
msgstr ""
#. TRANSLATORS: Print Base
-#: locale/ipp-strings.c:2540
+#: locale/ipp-strings.c:2542
msgid "print-base"
msgstr ""
#. TRANSLATORS: Print Base Actual
-#: locale/ipp-strings.c:2542
+#: locale/ipp-strings.c:2544
msgid "print-base-actual"
msgstr ""
#. TRANSLATORS: Brim
-#: locale/ipp-strings.c:2544
+#: locale/ipp-strings.c:2546
msgid "print-base.brim"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:2546
+#: locale/ipp-strings.c:2548
msgid "print-base.none"
msgstr ""
#. TRANSLATORS: Raft
-#: locale/ipp-strings.c:2548
+#: locale/ipp-strings.c:2550
msgid "print-base.raft"
msgstr ""
#. TRANSLATORS: Skirt
-#: locale/ipp-strings.c:2550
+#: locale/ipp-strings.c:2552
msgid "print-base.skirt"
msgstr ""
#. TRANSLATORS: Standard
-#: locale/ipp-strings.c:2552
+#: locale/ipp-strings.c:2554
msgid "print-base.standard"
msgstr ""
#. TRANSLATORS: Print Color Mode
-#: locale/ipp-strings.c:2554
+#: locale/ipp-strings.c:2556
msgid "print-color-mode"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2556
+#: locale/ipp-strings.c:2558
msgid "print-color-mode.auto"
msgstr ""
#. TRANSLATORS: Auto Monochrome
-#: locale/ipp-strings.c:2558
+#: locale/ipp-strings.c:2560
msgid "print-color-mode.auto-monochrome"
msgstr ""
#. TRANSLATORS: Text
-#: locale/ipp-strings.c:2560
+#: locale/ipp-strings.c:2562
msgid "print-color-mode.bi-level"
msgstr ""
#. TRANSLATORS: Color
-#: locale/ipp-strings.c:2562
+#: locale/ipp-strings.c:2564
msgid "print-color-mode.color"
msgstr ""
#. TRANSLATORS: Highlight
-#: locale/ipp-strings.c:2564
+#: locale/ipp-strings.c:2566
msgid "print-color-mode.highlight"
msgstr ""
#. TRANSLATORS: Monochrome
-#: locale/ipp-strings.c:2566
+#: locale/ipp-strings.c:2568
msgid "print-color-mode.monochrome"
msgstr ""
#. TRANSLATORS: Process Text
-#: locale/ipp-strings.c:2568
+#: locale/ipp-strings.c:2570
msgid "print-color-mode.process-bi-level"
msgstr ""
#. TRANSLATORS: Process Monochrome
-#: locale/ipp-strings.c:2570
+#: locale/ipp-strings.c:2572
msgid "print-color-mode.process-monochrome"
msgstr ""
#. TRANSLATORS: Print Optimization
-#: locale/ipp-strings.c:2572
+#: locale/ipp-strings.c:2574
msgid "print-content-optimize"
msgstr ""
#. TRANSLATORS: Print Content Optimize Actual
-#: locale/ipp-strings.c:2574
+#: locale/ipp-strings.c:2576
msgid "print-content-optimize-actual"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2576
+#: locale/ipp-strings.c:2578
msgid "print-content-optimize.auto"
msgstr ""
#. TRANSLATORS: Graphics
-#: locale/ipp-strings.c:2578
+#: locale/ipp-strings.c:2580
msgid "print-content-optimize.graphic"
msgstr ""
#. TRANSLATORS: Graphics
-#: locale/ipp-strings.c:2580
+#: locale/ipp-strings.c:2582
msgid "print-content-optimize.graphics"
msgstr ""
#. TRANSLATORS: Photo
-#: locale/ipp-strings.c:2582
+#: locale/ipp-strings.c:2584
msgid "print-content-optimize.photo"
msgstr ""
#. TRANSLATORS: Text
-#: locale/ipp-strings.c:2584
+#: locale/ipp-strings.c:2586
msgid "print-content-optimize.text"
msgstr ""
#. TRANSLATORS: Text and Graphics
-#: locale/ipp-strings.c:2586
+#: locale/ipp-strings.c:2588
msgid "print-content-optimize.text-and-graphic"
msgstr ""
#. TRANSLATORS: Text And Graphics
-#: locale/ipp-strings.c:2588
+#: locale/ipp-strings.c:2590
msgid "print-content-optimize.text-and-graphics"
msgstr ""
#. TRANSLATORS: Print Objects
-#: locale/ipp-strings.c:2590
+#: locale/ipp-strings.c:2592
msgid "print-objects"
msgstr ""
#. TRANSLATORS: Print Quality
-#: locale/ipp-strings.c:2592
+#: locale/ipp-strings.c:2594
msgid "print-quality"
msgstr ""
#. TRANSLATORS: Draft
-#: locale/ipp-strings.c:2594
+#: locale/ipp-strings.c:2596
msgid "print-quality.3"
msgstr ""
#. TRANSLATORS: Normal
-#: locale/ipp-strings.c:2596
+#: locale/ipp-strings.c:2598
msgid "print-quality.4"
msgstr ""
#. TRANSLATORS: High
-#: locale/ipp-strings.c:2598
+#: locale/ipp-strings.c:2600
msgid "print-quality.5"
msgstr ""
#. TRANSLATORS: Print Rendering Intent
-#: locale/ipp-strings.c:2600
+#: locale/ipp-strings.c:2602
msgid "print-rendering-intent"
msgstr ""
#. TRANSLATORS: Absolute
-#: locale/ipp-strings.c:2602
+#: locale/ipp-strings.c:2604
msgid "print-rendering-intent.absolute"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2604
+#: locale/ipp-strings.c:2606
msgid "print-rendering-intent.auto"
msgstr ""
#. TRANSLATORS: Perceptual
-#: locale/ipp-strings.c:2606
+#: locale/ipp-strings.c:2608
msgid "print-rendering-intent.perceptual"
msgstr ""
#. TRANSLATORS: Relative
-#: locale/ipp-strings.c:2608
+#: locale/ipp-strings.c:2610
msgid "print-rendering-intent.relative"
msgstr ""
#. TRANSLATORS: Relative w/Black Point Compensation
-#: locale/ipp-strings.c:2610
+#: locale/ipp-strings.c:2612
msgid "print-rendering-intent.relative-bpc"
msgstr ""
#. TRANSLATORS: Saturation
-#: locale/ipp-strings.c:2612
+#: locale/ipp-strings.c:2614
msgid "print-rendering-intent.saturation"
msgstr ""
#. TRANSLATORS: Print Scaling
-#: locale/ipp-strings.c:2614
+#: locale/ipp-strings.c:2616
msgid "print-scaling"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2616
+#: locale/ipp-strings.c:2618
msgid "print-scaling.auto"
msgstr ""
#. TRANSLATORS: Auto-fit
-#: locale/ipp-strings.c:2618
+#: locale/ipp-strings.c:2620
msgid "print-scaling.auto-fit"
msgstr ""
#. TRANSLATORS: Fill
-#: locale/ipp-strings.c:2620
+#: locale/ipp-strings.c:2622
msgid "print-scaling.fill"
msgstr ""
#. TRANSLATORS: Fit
-#: locale/ipp-strings.c:2622
+#: locale/ipp-strings.c:2624
msgid "print-scaling.fit"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:2624
+#: locale/ipp-strings.c:2626
msgid "print-scaling.none"
msgstr ""
#. TRANSLATORS: Print Supports
-#: locale/ipp-strings.c:2626
+#: locale/ipp-strings.c:2628
msgid "print-supports"
msgstr ""
#. TRANSLATORS: Print Supports Actual
-#: locale/ipp-strings.c:2628
+#: locale/ipp-strings.c:2630
msgid "print-supports-actual"
msgstr ""
#. TRANSLATORS: With Specified Material
-#: locale/ipp-strings.c:2630
+#: locale/ipp-strings.c:2632
msgid "print-supports.material"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:2632
+#: locale/ipp-strings.c:2634
msgid "print-supports.none"
msgstr ""
#. TRANSLATORS: Standard
-#: locale/ipp-strings.c:2634
+#: locale/ipp-strings.c:2636
msgid "print-supports.standard"
msgstr ""
msgstr ""
#. TRANSLATORS: Printer Kind
-#: locale/ipp-strings.c:2636
+#: locale/ipp-strings.c:2638
msgid "printer-kind"
msgstr ""
#. TRANSLATORS: Disc
-#: locale/ipp-strings.c:2638
+#: locale/ipp-strings.c:2640
msgid "printer-kind.disc"
msgstr ""
#. TRANSLATORS: Document
-#: locale/ipp-strings.c:2640
+#: locale/ipp-strings.c:2642
msgid "printer-kind.document"
msgstr ""
#. TRANSLATORS: Envelope
-#: locale/ipp-strings.c:2642
+#: locale/ipp-strings.c:2644
msgid "printer-kind.envelope"
msgstr ""
#. TRANSLATORS: Label
-#: locale/ipp-strings.c:2644
+#: locale/ipp-strings.c:2646
msgid "printer-kind.label"
msgstr ""
#. TRANSLATORS: Large Format
-#: locale/ipp-strings.c:2646
+#: locale/ipp-strings.c:2648
msgid "printer-kind.large-format"
msgstr ""
#. TRANSLATORS: Photo
-#: locale/ipp-strings.c:2648
+#: locale/ipp-strings.c:2650
msgid "printer-kind.photo"
msgstr ""
#. TRANSLATORS: Postcard
-#: locale/ipp-strings.c:2650
+#: locale/ipp-strings.c:2652
msgid "printer-kind.postcard"
msgstr ""
#. TRANSLATORS: Receipt
-#: locale/ipp-strings.c:2652
+#: locale/ipp-strings.c:2654
msgid "printer-kind.receipt"
msgstr ""
#. TRANSLATORS: Roll
-#: locale/ipp-strings.c:2654
+#: locale/ipp-strings.c:2656
msgid "printer-kind.roll"
msgstr ""
#. TRANSLATORS: Message From Operator
-#: locale/ipp-strings.c:2656
+#: locale/ipp-strings.c:2658
msgid "printer-message-from-operator"
msgstr ""
#. TRANSLATORS: Print Resolution
-#: locale/ipp-strings.c:2658
+#: locale/ipp-strings.c:2660
msgid "printer-resolution"
msgstr ""
#. TRANSLATORS: Printer State
-#: locale/ipp-strings.c:2660
+#: locale/ipp-strings.c:2662
msgid "printer-state"
msgstr ""
#. TRANSLATORS: Detailed Printer State
-#: locale/ipp-strings.c:2662
+#: locale/ipp-strings.c:2664
msgid "printer-state-reasons"
msgstr ""
#. TRANSLATORS: Old Alerts Have Been Removed
-#: locale/ipp-strings.c:2664
+#: locale/ipp-strings.c:2666
msgid "printer-state-reasons.alert-removal-of-binary-change-entry"
msgstr ""
#. TRANSLATORS: Bander Added
-#: locale/ipp-strings.c:2666
+#: locale/ipp-strings.c:2668
msgid "printer-state-reasons.bander-added"
msgstr ""
#. TRANSLATORS: Bander Almost Empty
-#: locale/ipp-strings.c:2668
+#: locale/ipp-strings.c:2670
msgid "printer-state-reasons.bander-almost-empty"
msgstr ""
#. TRANSLATORS: Bander Almost Full
-#: locale/ipp-strings.c:2670
+#: locale/ipp-strings.c:2672
msgid "printer-state-reasons.bander-almost-full"
msgstr ""
#. TRANSLATORS: Bander At Limit
-#: locale/ipp-strings.c:2672
+#: locale/ipp-strings.c:2674
msgid "printer-state-reasons.bander-at-limit"
msgstr ""
#. TRANSLATORS: Bander Closed
-#: locale/ipp-strings.c:2674
+#: locale/ipp-strings.c:2676
msgid "printer-state-reasons.bander-closed"
msgstr ""
#. TRANSLATORS: Bander Configuration Change
-#: locale/ipp-strings.c:2676
+#: locale/ipp-strings.c:2678
msgid "printer-state-reasons.bander-configuration-change"
msgstr ""
#. TRANSLATORS: Bander Cover Closed
-#: locale/ipp-strings.c:2678
+#: locale/ipp-strings.c:2680
msgid "printer-state-reasons.bander-cover-closed"
msgstr ""
#. TRANSLATORS: Bander Cover Open
-#: locale/ipp-strings.c:2680
+#: locale/ipp-strings.c:2682
msgid "printer-state-reasons.bander-cover-open"
msgstr ""
#. TRANSLATORS: Bander Empty
-#: locale/ipp-strings.c:2682
+#: locale/ipp-strings.c:2684
msgid "printer-state-reasons.bander-empty"
msgstr ""
#. TRANSLATORS: Bander Full
-#: locale/ipp-strings.c:2684
+#: locale/ipp-strings.c:2686
msgid "printer-state-reasons.bander-full"
msgstr ""
#. TRANSLATORS: Bander Interlock Closed
-#: locale/ipp-strings.c:2686
+#: locale/ipp-strings.c:2688
msgid "printer-state-reasons.bander-interlock-closed"
msgstr ""
#. TRANSLATORS: Bander Interlock Open
-#: locale/ipp-strings.c:2688
+#: locale/ipp-strings.c:2690
msgid "printer-state-reasons.bander-interlock-open"
msgstr ""
#. TRANSLATORS: Bander Jam
-#: locale/ipp-strings.c:2690
+#: locale/ipp-strings.c:2692
msgid "printer-state-reasons.bander-jam"
msgstr ""
#. TRANSLATORS: Bander Life Almost Over
-#: locale/ipp-strings.c:2692
+#: locale/ipp-strings.c:2694
msgid "printer-state-reasons.bander-life-almost-over"
msgstr ""
#. TRANSLATORS: Bander Life Over
-#: locale/ipp-strings.c:2694
+#: locale/ipp-strings.c:2696
msgid "printer-state-reasons.bander-life-over"
msgstr ""
#. TRANSLATORS: Bander Memory Exhausted
-#: locale/ipp-strings.c:2696
+#: locale/ipp-strings.c:2698
msgid "printer-state-reasons.bander-memory-exhausted"
msgstr ""
#. TRANSLATORS: Bander Missing
-#: locale/ipp-strings.c:2698
+#: locale/ipp-strings.c:2700
msgid "printer-state-reasons.bander-missing"
msgstr ""
#. TRANSLATORS: Bander Motor Failure
-#: locale/ipp-strings.c:2700
+#: locale/ipp-strings.c:2702
msgid "printer-state-reasons.bander-motor-failure"
msgstr ""
#. TRANSLATORS: Bander Near Limit
-#: locale/ipp-strings.c:2702
+#: locale/ipp-strings.c:2704
msgid "printer-state-reasons.bander-near-limit"
msgstr ""
#. TRANSLATORS: Bander Offline
-#: locale/ipp-strings.c:2704
+#: locale/ipp-strings.c:2706
msgid "printer-state-reasons.bander-offline"
msgstr ""
#. TRANSLATORS: Bander Opened
-#: locale/ipp-strings.c:2706
+#: locale/ipp-strings.c:2708
msgid "printer-state-reasons.bander-opened"
msgstr ""
#. TRANSLATORS: Bander Over Temperature
-#: locale/ipp-strings.c:2708
+#: locale/ipp-strings.c:2710
msgid "printer-state-reasons.bander-over-temperature"
msgstr ""
#. TRANSLATORS: Bander Power Saver
-#: locale/ipp-strings.c:2710
+#: locale/ipp-strings.c:2712
msgid "printer-state-reasons.bander-power-saver"
msgstr ""
#. TRANSLATORS: Bander Recoverable Failure
-#: locale/ipp-strings.c:2712
+#: locale/ipp-strings.c:2714
msgid "printer-state-reasons.bander-recoverable-failure"
msgstr ""
#. TRANSLATORS: Bander Recoverable Storage
-#: locale/ipp-strings.c:2714
+#: locale/ipp-strings.c:2716
msgid "printer-state-reasons.bander-recoverable-storage"
msgstr ""
#. TRANSLATORS: Bander Removed
-#: locale/ipp-strings.c:2716
+#: locale/ipp-strings.c:2718
msgid "printer-state-reasons.bander-removed"
msgstr ""
#. TRANSLATORS: Bander Resource Added
-#: locale/ipp-strings.c:2718
+#: locale/ipp-strings.c:2720
msgid "printer-state-reasons.bander-resource-added"
msgstr ""
#. TRANSLATORS: Bander Resource Removed
-#: locale/ipp-strings.c:2720
+#: locale/ipp-strings.c:2722
msgid "printer-state-reasons.bander-resource-removed"
msgstr ""
#. TRANSLATORS: Bander Thermistor Failure
-#: locale/ipp-strings.c:2722
+#: locale/ipp-strings.c:2724
msgid "printer-state-reasons.bander-thermistor-failure"
msgstr ""
#. TRANSLATORS: Bander Timing Failure
-#: locale/ipp-strings.c:2724
+#: locale/ipp-strings.c:2726
msgid "printer-state-reasons.bander-timing-failure"
msgstr ""
#. TRANSLATORS: Bander Turned Off
-#: locale/ipp-strings.c:2726
+#: locale/ipp-strings.c:2728
msgid "printer-state-reasons.bander-turned-off"
msgstr ""
#. TRANSLATORS: Bander Turned On
-#: locale/ipp-strings.c:2728
+#: locale/ipp-strings.c:2730
msgid "printer-state-reasons.bander-turned-on"
msgstr ""
#. TRANSLATORS: Bander Under Temperature
-#: locale/ipp-strings.c:2730
+#: locale/ipp-strings.c:2732
msgid "printer-state-reasons.bander-under-temperature"
msgstr ""
#. TRANSLATORS: Bander Unrecoverable Failure
-#: locale/ipp-strings.c:2732
+#: locale/ipp-strings.c:2734
msgid "printer-state-reasons.bander-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Bander Unrecoverable Storage Error
-#: locale/ipp-strings.c:2734
+#: locale/ipp-strings.c:2736
msgid "printer-state-reasons.bander-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Bander Warming Up
-#: locale/ipp-strings.c:2736
+#: locale/ipp-strings.c:2738
msgid "printer-state-reasons.bander-warming-up"
msgstr ""
#. TRANSLATORS: Binder Added
-#: locale/ipp-strings.c:2738
+#: locale/ipp-strings.c:2740
msgid "printer-state-reasons.binder-added"
msgstr ""
#. TRANSLATORS: Binder Almost Empty
-#: locale/ipp-strings.c:2740
+#: locale/ipp-strings.c:2742
msgid "printer-state-reasons.binder-almost-empty"
msgstr ""
#. TRANSLATORS: Binder Almost Full
-#: locale/ipp-strings.c:2742
+#: locale/ipp-strings.c:2744
msgid "printer-state-reasons.binder-almost-full"
msgstr ""
#. TRANSLATORS: Binder At Limit
-#: locale/ipp-strings.c:2744
+#: locale/ipp-strings.c:2746
msgid "printer-state-reasons.binder-at-limit"
msgstr ""
#. TRANSLATORS: Binder Closed
-#: locale/ipp-strings.c:2746
+#: locale/ipp-strings.c:2748
msgid "printer-state-reasons.binder-closed"
msgstr ""
#. TRANSLATORS: Binder Configuration Change
-#: locale/ipp-strings.c:2748
+#: locale/ipp-strings.c:2750
msgid "printer-state-reasons.binder-configuration-change"
msgstr ""
#. TRANSLATORS: Binder Cover Closed
-#: locale/ipp-strings.c:2750
+#: locale/ipp-strings.c:2752
msgid "printer-state-reasons.binder-cover-closed"
msgstr ""
#. TRANSLATORS: Binder Cover Open
-#: locale/ipp-strings.c:2752
+#: locale/ipp-strings.c:2754
msgid "printer-state-reasons.binder-cover-open"
msgstr ""
#. TRANSLATORS: Binder Empty
-#: locale/ipp-strings.c:2754
+#: locale/ipp-strings.c:2756
msgid "printer-state-reasons.binder-empty"
msgstr ""
#. TRANSLATORS: Binder Full
-#: locale/ipp-strings.c:2756
+#: locale/ipp-strings.c:2758
msgid "printer-state-reasons.binder-full"
msgstr ""
#. TRANSLATORS: Binder Interlock Closed
-#: locale/ipp-strings.c:2758
+#: locale/ipp-strings.c:2760
msgid "printer-state-reasons.binder-interlock-closed"
msgstr ""
#. TRANSLATORS: Binder Interlock Open
-#: locale/ipp-strings.c:2760
+#: locale/ipp-strings.c:2762
msgid "printer-state-reasons.binder-interlock-open"
msgstr ""
#. TRANSLATORS: Binder Jam
-#: locale/ipp-strings.c:2762
+#: locale/ipp-strings.c:2764
msgid "printer-state-reasons.binder-jam"
msgstr ""
#. TRANSLATORS: Binder Life Almost Over
-#: locale/ipp-strings.c:2764
+#: locale/ipp-strings.c:2766
msgid "printer-state-reasons.binder-life-almost-over"
msgstr ""
#. TRANSLATORS: Binder Life Over
-#: locale/ipp-strings.c:2766
+#: locale/ipp-strings.c:2768
msgid "printer-state-reasons.binder-life-over"
msgstr ""
#. TRANSLATORS: Binder Memory Exhausted
-#: locale/ipp-strings.c:2768
+#: locale/ipp-strings.c:2770
msgid "printer-state-reasons.binder-memory-exhausted"
msgstr ""
#. TRANSLATORS: Binder Missing
-#: locale/ipp-strings.c:2770
+#: locale/ipp-strings.c:2772
msgid "printer-state-reasons.binder-missing"
msgstr ""
#. TRANSLATORS: Binder Motor Failure
-#: locale/ipp-strings.c:2772
+#: locale/ipp-strings.c:2774
msgid "printer-state-reasons.binder-motor-failure"
msgstr ""
#. TRANSLATORS: Binder Near Limit
-#: locale/ipp-strings.c:2774
+#: locale/ipp-strings.c:2776
msgid "printer-state-reasons.binder-near-limit"
msgstr ""
#. TRANSLATORS: Binder Offline
-#: locale/ipp-strings.c:2776
+#: locale/ipp-strings.c:2778
msgid "printer-state-reasons.binder-offline"
msgstr ""
#. TRANSLATORS: Binder Opened
-#: locale/ipp-strings.c:2778
+#: locale/ipp-strings.c:2780
msgid "printer-state-reasons.binder-opened"
msgstr ""
#. TRANSLATORS: Binder Over Temperature
-#: locale/ipp-strings.c:2780
+#: locale/ipp-strings.c:2782
msgid "printer-state-reasons.binder-over-temperature"
msgstr ""
#. TRANSLATORS: Binder Power Saver
-#: locale/ipp-strings.c:2782
+#: locale/ipp-strings.c:2784
msgid "printer-state-reasons.binder-power-saver"
msgstr ""
#. TRANSLATORS: Binder Recoverable Failure
-#: locale/ipp-strings.c:2784
+#: locale/ipp-strings.c:2786
msgid "printer-state-reasons.binder-recoverable-failure"
msgstr ""
#. TRANSLATORS: Binder Recoverable Storage
-#: locale/ipp-strings.c:2786
+#: locale/ipp-strings.c:2788
msgid "printer-state-reasons.binder-recoverable-storage"
msgstr ""
#. TRANSLATORS: Binder Removed
-#: locale/ipp-strings.c:2788
+#: locale/ipp-strings.c:2790
msgid "printer-state-reasons.binder-removed"
msgstr ""
#. TRANSLATORS: Binder Resource Added
-#: locale/ipp-strings.c:2790
+#: locale/ipp-strings.c:2792
msgid "printer-state-reasons.binder-resource-added"
msgstr ""
#. TRANSLATORS: Binder Resource Removed
-#: locale/ipp-strings.c:2792
+#: locale/ipp-strings.c:2794
msgid "printer-state-reasons.binder-resource-removed"
msgstr ""
#. TRANSLATORS: Binder Thermistor Failure
-#: locale/ipp-strings.c:2794
+#: locale/ipp-strings.c:2796
msgid "printer-state-reasons.binder-thermistor-failure"
msgstr ""
#. TRANSLATORS: Binder Timing Failure
-#: locale/ipp-strings.c:2796
+#: locale/ipp-strings.c:2798
msgid "printer-state-reasons.binder-timing-failure"
msgstr ""
#. TRANSLATORS: Binder Turned Off
-#: locale/ipp-strings.c:2798
+#: locale/ipp-strings.c:2800
msgid "printer-state-reasons.binder-turned-off"
msgstr ""
#. TRANSLATORS: Binder Turned On
-#: locale/ipp-strings.c:2800
+#: locale/ipp-strings.c:2802
msgid "printer-state-reasons.binder-turned-on"
msgstr ""
#. TRANSLATORS: Binder Under Temperature
-#: locale/ipp-strings.c:2802
+#: locale/ipp-strings.c:2804
msgid "printer-state-reasons.binder-under-temperature"
msgstr ""
#. TRANSLATORS: Binder Unrecoverable Failure
-#: locale/ipp-strings.c:2804
+#: locale/ipp-strings.c:2806
msgid "printer-state-reasons.binder-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Binder Unrecoverable Storage Error
-#: locale/ipp-strings.c:2806
+#: locale/ipp-strings.c:2808
msgid "printer-state-reasons.binder-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Binder Warming Up
-#: locale/ipp-strings.c:2808
+#: locale/ipp-strings.c:2810
msgid "printer-state-reasons.binder-warming-up"
msgstr ""
#. TRANSLATORS: Camera Failure
-#: locale/ipp-strings.c:2810
+#: locale/ipp-strings.c:2812
msgid "printer-state-reasons.camera-failure"
msgstr ""
#. TRANSLATORS: Chamber Cooling
-#: locale/ipp-strings.c:2812
+#: locale/ipp-strings.c:2814
msgid "printer-state-reasons.chamber-cooling"
msgstr ""
#. TRANSLATORS: Chamber Failure
-#: locale/ipp-strings.c:2814
+#: locale/ipp-strings.c:2816
msgid "printer-state-reasons.chamber-failure"
msgstr ""
#. TRANSLATORS: Chamber Heating
-#: locale/ipp-strings.c:2816
+#: locale/ipp-strings.c:2818
msgid "printer-state-reasons.chamber-heating"
msgstr ""
#. TRANSLATORS: Chamber Temperature High
-#: locale/ipp-strings.c:2818
+#: locale/ipp-strings.c:2820
msgid "printer-state-reasons.chamber-temperature-high"
msgstr ""
#. TRANSLATORS: Chamber Temperature Low
-#: locale/ipp-strings.c:2820
+#: locale/ipp-strings.c:2822
msgid "printer-state-reasons.chamber-temperature-low"
msgstr ""
#. TRANSLATORS: Cleaner Life Almost Over
-#: locale/ipp-strings.c:2822
+#: locale/ipp-strings.c:2824
msgid "printer-state-reasons.cleaner-life-almost-over"
msgstr ""
#. TRANSLATORS: Cleaner Life Over
-#: locale/ipp-strings.c:2824
+#: locale/ipp-strings.c:2826
msgid "printer-state-reasons.cleaner-life-over"
msgstr ""
#. TRANSLATORS: Configuration Change
-#: locale/ipp-strings.c:2826
+#: locale/ipp-strings.c:2828
msgid "printer-state-reasons.configuration-change"
msgstr ""
#. TRANSLATORS: Connecting To Device
-#: locale/ipp-strings.c:2828
+#: locale/ipp-strings.c:2830
msgid "printer-state-reasons.connecting-to-device"
msgstr ""
#. TRANSLATORS: Cover Open
-#: locale/ipp-strings.c:2830
+#: locale/ipp-strings.c:2832
msgid "printer-state-reasons.cover-open"
msgstr ""
#. TRANSLATORS: Deactivated
-#: locale/ipp-strings.c:2832
+#: locale/ipp-strings.c:2834
msgid "printer-state-reasons.deactivated"
msgstr ""
#. TRANSLATORS: Developer Empty
-#: locale/ipp-strings.c:2834
+#: locale/ipp-strings.c:2836
msgid "printer-state-reasons.developer-empty"
msgstr ""
#. TRANSLATORS: Developer Low
-#: locale/ipp-strings.c:2836
+#: locale/ipp-strings.c:2838
msgid "printer-state-reasons.developer-low"
msgstr ""
#. TRANSLATORS: Die Cutter Added
-#: locale/ipp-strings.c:2838
+#: locale/ipp-strings.c:2840
msgid "printer-state-reasons.die-cutter-added"
msgstr ""
#. TRANSLATORS: Die Cutter Almost Empty
-#: locale/ipp-strings.c:2840
+#: locale/ipp-strings.c:2842
msgid "printer-state-reasons.die-cutter-almost-empty"
msgstr ""
#. TRANSLATORS: Die Cutter Almost Full
-#: locale/ipp-strings.c:2842
+#: locale/ipp-strings.c:2844
msgid "printer-state-reasons.die-cutter-almost-full"
msgstr ""
#. TRANSLATORS: Die Cutter At Limit
-#: locale/ipp-strings.c:2844
+#: locale/ipp-strings.c:2846
msgid "printer-state-reasons.die-cutter-at-limit"
msgstr ""
#. TRANSLATORS: Die Cutter Closed
-#: locale/ipp-strings.c:2846
+#: locale/ipp-strings.c:2848
msgid "printer-state-reasons.die-cutter-closed"
msgstr ""
#. TRANSLATORS: Die Cutter Configuration Change
-#: locale/ipp-strings.c:2848
+#: locale/ipp-strings.c:2850
msgid "printer-state-reasons.die-cutter-configuration-change"
msgstr ""
#. TRANSLATORS: Die Cutter Cover Closed
-#: locale/ipp-strings.c:2850
+#: locale/ipp-strings.c:2852
msgid "printer-state-reasons.die-cutter-cover-closed"
msgstr ""
#. TRANSLATORS: Die Cutter Cover Open
-#: locale/ipp-strings.c:2852
+#: locale/ipp-strings.c:2854
msgid "printer-state-reasons.die-cutter-cover-open"
msgstr ""
#. TRANSLATORS: Die Cutter Empty
-#: locale/ipp-strings.c:2854
+#: locale/ipp-strings.c:2856
msgid "printer-state-reasons.die-cutter-empty"
msgstr ""
#. TRANSLATORS: Die Cutter Full
-#: locale/ipp-strings.c:2856
+#: locale/ipp-strings.c:2858
msgid "printer-state-reasons.die-cutter-full"
msgstr ""
#. TRANSLATORS: Die Cutter Interlock Closed
-#: locale/ipp-strings.c:2858
+#: locale/ipp-strings.c:2860
msgid "printer-state-reasons.die-cutter-interlock-closed"
msgstr ""
#. TRANSLATORS: Die Cutter Interlock Open
-#: locale/ipp-strings.c:2860
+#: locale/ipp-strings.c:2862
msgid "printer-state-reasons.die-cutter-interlock-open"
msgstr ""
#. TRANSLATORS: Die Cutter Jam
-#: locale/ipp-strings.c:2862
+#: locale/ipp-strings.c:2864
msgid "printer-state-reasons.die-cutter-jam"
msgstr ""
#. TRANSLATORS: Die Cutter Life Almost Over
-#: locale/ipp-strings.c:2864
+#: locale/ipp-strings.c:2866
msgid "printer-state-reasons.die-cutter-life-almost-over"
msgstr ""
#. TRANSLATORS: Die Cutter Life Over
-#: locale/ipp-strings.c:2866
+#: locale/ipp-strings.c:2868
msgid "printer-state-reasons.die-cutter-life-over"
msgstr ""
#. TRANSLATORS: Die Cutter Memory Exhausted
-#: locale/ipp-strings.c:2868
+#: locale/ipp-strings.c:2870
msgid "printer-state-reasons.die-cutter-memory-exhausted"
msgstr ""
#. TRANSLATORS: Die Cutter Missing
-#: locale/ipp-strings.c:2870
+#: locale/ipp-strings.c:2872
msgid "printer-state-reasons.die-cutter-missing"
msgstr ""
#. TRANSLATORS: Die Cutter Motor Failure
-#: locale/ipp-strings.c:2872
+#: locale/ipp-strings.c:2874
msgid "printer-state-reasons.die-cutter-motor-failure"
msgstr ""
#. TRANSLATORS: Die Cutter Near Limit
-#: locale/ipp-strings.c:2874
+#: locale/ipp-strings.c:2876
msgid "printer-state-reasons.die-cutter-near-limit"
msgstr ""
#. TRANSLATORS: Die Cutter Offline
-#: locale/ipp-strings.c:2876
+#: locale/ipp-strings.c:2878
msgid "printer-state-reasons.die-cutter-offline"
msgstr ""
#. TRANSLATORS: Die Cutter Opened
-#: locale/ipp-strings.c:2878
+#: locale/ipp-strings.c:2880
msgid "printer-state-reasons.die-cutter-opened"
msgstr ""
#. TRANSLATORS: Die Cutter Over Temperature
-#: locale/ipp-strings.c:2880
+#: locale/ipp-strings.c:2882
msgid "printer-state-reasons.die-cutter-over-temperature"
msgstr ""
#. TRANSLATORS: Die Cutter Power Saver
-#: locale/ipp-strings.c:2882
+#: locale/ipp-strings.c:2884
msgid "printer-state-reasons.die-cutter-power-saver"
msgstr ""
#. TRANSLATORS: Die Cutter Recoverable Failure
-#: locale/ipp-strings.c:2884
+#: locale/ipp-strings.c:2886
msgid "printer-state-reasons.die-cutter-recoverable-failure"
msgstr ""
#. TRANSLATORS: Die Cutter Recoverable Storage
-#: locale/ipp-strings.c:2886
+#: locale/ipp-strings.c:2888
msgid "printer-state-reasons.die-cutter-recoverable-storage"
msgstr ""
#. TRANSLATORS: Die Cutter Removed
-#: locale/ipp-strings.c:2888
+#: locale/ipp-strings.c:2890
msgid "printer-state-reasons.die-cutter-removed"
msgstr ""
#. TRANSLATORS: Die Cutter Resource Added
-#: locale/ipp-strings.c:2890
+#: locale/ipp-strings.c:2892
msgid "printer-state-reasons.die-cutter-resource-added"
msgstr ""
#. TRANSLATORS: Die Cutter Resource Removed
-#: locale/ipp-strings.c:2892
+#: locale/ipp-strings.c:2894
msgid "printer-state-reasons.die-cutter-resource-removed"
msgstr ""
#. TRANSLATORS: Die Cutter Thermistor Failure
-#: locale/ipp-strings.c:2894
+#: locale/ipp-strings.c:2896
msgid "printer-state-reasons.die-cutter-thermistor-failure"
msgstr ""
#. TRANSLATORS: Die Cutter Timing Failure
-#: locale/ipp-strings.c:2896
+#: locale/ipp-strings.c:2898
msgid "printer-state-reasons.die-cutter-timing-failure"
msgstr ""
#. TRANSLATORS: Die Cutter Turned Off
-#: locale/ipp-strings.c:2898
+#: locale/ipp-strings.c:2900
msgid "printer-state-reasons.die-cutter-turned-off"
msgstr ""
#. TRANSLATORS: Die Cutter Turned On
-#: locale/ipp-strings.c:2900
+#: locale/ipp-strings.c:2902
msgid "printer-state-reasons.die-cutter-turned-on"
msgstr ""
#. TRANSLATORS: Die Cutter Under Temperature
-#: locale/ipp-strings.c:2902
+#: locale/ipp-strings.c:2904
msgid "printer-state-reasons.die-cutter-under-temperature"
msgstr ""
#. TRANSLATORS: Die Cutter Unrecoverable Failure
-#: locale/ipp-strings.c:2904
+#: locale/ipp-strings.c:2906
msgid "printer-state-reasons.die-cutter-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Die Cutter Unrecoverable Storage Error
-#: locale/ipp-strings.c:2906
+#: locale/ipp-strings.c:2908
msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Die Cutter Warming Up
-#: locale/ipp-strings.c:2908
+#: locale/ipp-strings.c:2910
msgid "printer-state-reasons.die-cutter-warming-up"
msgstr ""
#. TRANSLATORS: Door Open
-#: locale/ipp-strings.c:2910
+#: locale/ipp-strings.c:2912
msgid "printer-state-reasons.door-open"
msgstr ""
#. TRANSLATORS: Extruder Cooling
-#: locale/ipp-strings.c:2912
+#: locale/ipp-strings.c:2914
msgid "printer-state-reasons.extruder-cooling"
msgstr ""
#. TRANSLATORS: Extruder Failure
-#: locale/ipp-strings.c:2914
+#: locale/ipp-strings.c:2916
msgid "printer-state-reasons.extruder-failure"
msgstr ""
#. TRANSLATORS: Extruder Heating
-#: locale/ipp-strings.c:2916
+#: locale/ipp-strings.c:2918
msgid "printer-state-reasons.extruder-heating"
msgstr ""
#. TRANSLATORS: Extruder Jam
-#: locale/ipp-strings.c:2918
+#: locale/ipp-strings.c:2920
msgid "printer-state-reasons.extruder-jam"
msgstr ""
#. TRANSLATORS: Extruder Temperature High
-#: locale/ipp-strings.c:2920
+#: locale/ipp-strings.c:2922
msgid "printer-state-reasons.extruder-temperature-high"
msgstr ""
#. TRANSLATORS: Extruder Temperature Low
-#: locale/ipp-strings.c:2922
+#: locale/ipp-strings.c:2924
msgid "printer-state-reasons.extruder-temperature-low"
msgstr ""
#. TRANSLATORS: Fan Failure
-#: locale/ipp-strings.c:2924
+#: locale/ipp-strings.c:2926
msgid "printer-state-reasons.fan-failure"
msgstr ""
#. TRANSLATORS: Fax Modem Life Almost Over
-#: locale/ipp-strings.c:2926
+#: locale/ipp-strings.c:2928
msgid "printer-state-reasons.fax-modem-life-almost-over"
msgstr ""
#. TRANSLATORS: Fax Modem Life Over
-#: locale/ipp-strings.c:2928
+#: locale/ipp-strings.c:2930
msgid "printer-state-reasons.fax-modem-life-over"
msgstr ""
#. TRANSLATORS: Fax Modem Missing
-#: locale/ipp-strings.c:2930
+#: locale/ipp-strings.c:2932
msgid "printer-state-reasons.fax-modem-missing"
msgstr ""
#. TRANSLATORS: Fax Modem Turned Off
-#: locale/ipp-strings.c:2932
+#: locale/ipp-strings.c:2934
msgid "printer-state-reasons.fax-modem-turned-off"
msgstr ""
#. TRANSLATORS: Fax Modem Turned On
-#: locale/ipp-strings.c:2934
+#: locale/ipp-strings.c:2936
msgid "printer-state-reasons.fax-modem-turned-on"
msgstr ""
#. TRANSLATORS: Folder Added
-#: locale/ipp-strings.c:2936
+#: locale/ipp-strings.c:2938
msgid "printer-state-reasons.folder-added"
msgstr ""
#. TRANSLATORS: Folder Almost Empty
-#: locale/ipp-strings.c:2938
+#: locale/ipp-strings.c:2940
msgid "printer-state-reasons.folder-almost-empty"
msgstr ""
#. TRANSLATORS: Folder Almost Full
-#: locale/ipp-strings.c:2940
+#: locale/ipp-strings.c:2942
msgid "printer-state-reasons.folder-almost-full"
msgstr ""
#. TRANSLATORS: Folder At Limit
-#: locale/ipp-strings.c:2942
+#: locale/ipp-strings.c:2944
msgid "printer-state-reasons.folder-at-limit"
msgstr ""
#. TRANSLATORS: Folder Closed
-#: locale/ipp-strings.c:2944
+#: locale/ipp-strings.c:2946
msgid "printer-state-reasons.folder-closed"
msgstr ""
#. TRANSLATORS: Folder Configuration Change
-#: locale/ipp-strings.c:2946
+#: locale/ipp-strings.c:2948
msgid "printer-state-reasons.folder-configuration-change"
msgstr ""
#. TRANSLATORS: Folder Cover Closed
-#: locale/ipp-strings.c:2948
+#: locale/ipp-strings.c:2950
msgid "printer-state-reasons.folder-cover-closed"
msgstr ""
#. TRANSLATORS: Folder Cover Open
-#: locale/ipp-strings.c:2950
+#: locale/ipp-strings.c:2952
msgid "printer-state-reasons.folder-cover-open"
msgstr ""
#. TRANSLATORS: Folder Empty
-#: locale/ipp-strings.c:2952
+#: locale/ipp-strings.c:2954
msgid "printer-state-reasons.folder-empty"
msgstr ""
#. TRANSLATORS: Folder Full
-#: locale/ipp-strings.c:2954
+#: locale/ipp-strings.c:2956
msgid "printer-state-reasons.folder-full"
msgstr ""
#. TRANSLATORS: Folder Interlock Closed
-#: locale/ipp-strings.c:2956
+#: locale/ipp-strings.c:2958
msgid "printer-state-reasons.folder-interlock-closed"
msgstr ""
#. TRANSLATORS: Folder Interlock Open
-#: locale/ipp-strings.c:2958
+#: locale/ipp-strings.c:2960
msgid "printer-state-reasons.folder-interlock-open"
msgstr ""
#. TRANSLATORS: Folder Jam
-#: locale/ipp-strings.c:2960
+#: locale/ipp-strings.c:2962
msgid "printer-state-reasons.folder-jam"
msgstr ""
#. TRANSLATORS: Folder Life Almost Over
-#: locale/ipp-strings.c:2962
+#: locale/ipp-strings.c:2964
msgid "printer-state-reasons.folder-life-almost-over"
msgstr ""
#. TRANSLATORS: Folder Life Over
-#: locale/ipp-strings.c:2964
+#: locale/ipp-strings.c:2966
msgid "printer-state-reasons.folder-life-over"
msgstr ""
#. TRANSLATORS: Folder Memory Exhausted
-#: locale/ipp-strings.c:2966
+#: locale/ipp-strings.c:2968
msgid "printer-state-reasons.folder-memory-exhausted"
msgstr ""
#. TRANSLATORS: Folder Missing
-#: locale/ipp-strings.c:2968
+#: locale/ipp-strings.c:2970
msgid "printer-state-reasons.folder-missing"
msgstr ""
#. TRANSLATORS: Folder Motor Failure
-#: locale/ipp-strings.c:2970
+#: locale/ipp-strings.c:2972
msgid "printer-state-reasons.folder-motor-failure"
msgstr ""
#. TRANSLATORS: Folder Near Limit
-#: locale/ipp-strings.c:2972
+#: locale/ipp-strings.c:2974
msgid "printer-state-reasons.folder-near-limit"
msgstr ""
#. TRANSLATORS: Folder Offline
-#: locale/ipp-strings.c:2974
+#: locale/ipp-strings.c:2976
msgid "printer-state-reasons.folder-offline"
msgstr ""
#. TRANSLATORS: Folder Opened
-#: locale/ipp-strings.c:2976
+#: locale/ipp-strings.c:2978
msgid "printer-state-reasons.folder-opened"
msgstr ""
#. TRANSLATORS: Folder Over Temperature
-#: locale/ipp-strings.c:2978
+#: locale/ipp-strings.c:2980
msgid "printer-state-reasons.folder-over-temperature"
msgstr ""
#. TRANSLATORS: Folder Power Saver
-#: locale/ipp-strings.c:2980
+#: locale/ipp-strings.c:2982
msgid "printer-state-reasons.folder-power-saver"
msgstr ""
#. TRANSLATORS: Folder Recoverable Failure
-#: locale/ipp-strings.c:2982
+#: locale/ipp-strings.c:2984
msgid "printer-state-reasons.folder-recoverable-failure"
msgstr ""
#. TRANSLATORS: Folder Recoverable Storage
-#: locale/ipp-strings.c:2984
+#: locale/ipp-strings.c:2986
msgid "printer-state-reasons.folder-recoverable-storage"
msgstr ""
#. TRANSLATORS: Folder Removed
-#: locale/ipp-strings.c:2986
+#: locale/ipp-strings.c:2988
msgid "printer-state-reasons.folder-removed"
msgstr ""
#. TRANSLATORS: Folder Resource Added
-#: locale/ipp-strings.c:2988
+#: locale/ipp-strings.c:2990
msgid "printer-state-reasons.folder-resource-added"
msgstr ""
#. TRANSLATORS: Folder Resource Removed
-#: locale/ipp-strings.c:2990
+#: locale/ipp-strings.c:2992
msgid "printer-state-reasons.folder-resource-removed"
msgstr ""
#. TRANSLATORS: Folder Thermistor Failure
-#: locale/ipp-strings.c:2992
+#: locale/ipp-strings.c:2994
msgid "printer-state-reasons.folder-thermistor-failure"
msgstr ""
#. TRANSLATORS: Folder Timing Failure
-#: locale/ipp-strings.c:2994
+#: locale/ipp-strings.c:2996
msgid "printer-state-reasons.folder-timing-failure"
msgstr ""
#. TRANSLATORS: Folder Turned Off
-#: locale/ipp-strings.c:2996
+#: locale/ipp-strings.c:2998
msgid "printer-state-reasons.folder-turned-off"
msgstr ""
#. TRANSLATORS: Folder Turned On
-#: locale/ipp-strings.c:2998
+#: locale/ipp-strings.c:3000
msgid "printer-state-reasons.folder-turned-on"
msgstr ""
#. TRANSLATORS: Folder Under Temperature
-#: locale/ipp-strings.c:3000
+#: locale/ipp-strings.c:3002
msgid "printer-state-reasons.folder-under-temperature"
msgstr ""
#. TRANSLATORS: Folder Unrecoverable Failure
-#: locale/ipp-strings.c:3002
+#: locale/ipp-strings.c:3004
msgid "printer-state-reasons.folder-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Folder Unrecoverable Storage Error
-#: locale/ipp-strings.c:3004
+#: locale/ipp-strings.c:3006
msgid "printer-state-reasons.folder-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Folder Warming Up
-#: locale/ipp-strings.c:3006
+#: locale/ipp-strings.c:3008
msgid "printer-state-reasons.folder-warming-up"
msgstr ""
#. TRANSLATORS: Fuser temperature high
-#: locale/ipp-strings.c:3008
+#: locale/ipp-strings.c:3010
msgid "printer-state-reasons.fuser-over-temp"
msgstr ""
#. TRANSLATORS: Fuser temperature low
-#: locale/ipp-strings.c:3010
+#: locale/ipp-strings.c:3012
msgid "printer-state-reasons.fuser-under-temp"
msgstr ""
#. TRANSLATORS: Hold New Jobs
-#: locale/ipp-strings.c:3012
+#: locale/ipp-strings.c:3014
msgid "printer-state-reasons.hold-new-jobs"
msgstr ""
#. TRANSLATORS: Identify Printer
-#: locale/ipp-strings.c:3014
+#: locale/ipp-strings.c:3016
msgid "printer-state-reasons.identify-printer-requested"
msgstr ""
#. TRANSLATORS: Imprinter Added
-#: locale/ipp-strings.c:3016
+#: locale/ipp-strings.c:3018
msgid "printer-state-reasons.imprinter-added"
msgstr ""
#. TRANSLATORS: Imprinter Almost Empty
-#: locale/ipp-strings.c:3018
+#: locale/ipp-strings.c:3020
msgid "printer-state-reasons.imprinter-almost-empty"
msgstr ""
#. TRANSLATORS: Imprinter Almost Full
-#: locale/ipp-strings.c:3020
+#: locale/ipp-strings.c:3022
msgid "printer-state-reasons.imprinter-almost-full"
msgstr ""
#. TRANSLATORS: Imprinter At Limit
-#: locale/ipp-strings.c:3022
+#: locale/ipp-strings.c:3024
msgid "printer-state-reasons.imprinter-at-limit"
msgstr ""
#. TRANSLATORS: Imprinter Closed
-#: locale/ipp-strings.c:3024
+#: locale/ipp-strings.c:3026
msgid "printer-state-reasons.imprinter-closed"
msgstr ""
#. TRANSLATORS: Imprinter Configuration Change
-#: locale/ipp-strings.c:3026
+#: locale/ipp-strings.c:3028
msgid "printer-state-reasons.imprinter-configuration-change"
msgstr ""
#. TRANSLATORS: Imprinter Cover Closed
-#: locale/ipp-strings.c:3028
+#: locale/ipp-strings.c:3030
msgid "printer-state-reasons.imprinter-cover-closed"
msgstr ""
#. TRANSLATORS: Imprinter Cover Open
-#: locale/ipp-strings.c:3030
+#: locale/ipp-strings.c:3032
msgid "printer-state-reasons.imprinter-cover-open"
msgstr ""
#. TRANSLATORS: Imprinter Empty
-#: locale/ipp-strings.c:3032
+#: locale/ipp-strings.c:3034
msgid "printer-state-reasons.imprinter-empty"
msgstr ""
#. TRANSLATORS: Imprinter Full
-#: locale/ipp-strings.c:3034
+#: locale/ipp-strings.c:3036
msgid "printer-state-reasons.imprinter-full"
msgstr ""
#. TRANSLATORS: Imprinter Interlock Closed
-#: locale/ipp-strings.c:3036
+#: locale/ipp-strings.c:3038
msgid "printer-state-reasons.imprinter-interlock-closed"
msgstr ""
#. TRANSLATORS: Imprinter Interlock Open
-#: locale/ipp-strings.c:3038
+#: locale/ipp-strings.c:3040
msgid "printer-state-reasons.imprinter-interlock-open"
msgstr ""
#. TRANSLATORS: Imprinter Jam
-#: locale/ipp-strings.c:3040
+#: locale/ipp-strings.c:3042
msgid "printer-state-reasons.imprinter-jam"
msgstr ""
#. TRANSLATORS: Imprinter Life Almost Over
-#: locale/ipp-strings.c:3042
+#: locale/ipp-strings.c:3044
msgid "printer-state-reasons.imprinter-life-almost-over"
msgstr ""
#. TRANSLATORS: Imprinter Life Over
-#: locale/ipp-strings.c:3044
+#: locale/ipp-strings.c:3046
msgid "printer-state-reasons.imprinter-life-over"
msgstr ""
#. TRANSLATORS: Imprinter Memory Exhausted
-#: locale/ipp-strings.c:3046
+#: locale/ipp-strings.c:3048
msgid "printer-state-reasons.imprinter-memory-exhausted"
msgstr ""
#. TRANSLATORS: Imprinter Missing
-#: locale/ipp-strings.c:3048
+#: locale/ipp-strings.c:3050
msgid "printer-state-reasons.imprinter-missing"
msgstr ""
#. TRANSLATORS: Imprinter Motor Failure
-#: locale/ipp-strings.c:3050
+#: locale/ipp-strings.c:3052
msgid "printer-state-reasons.imprinter-motor-failure"
msgstr ""
#. TRANSLATORS: Imprinter Near Limit
-#: locale/ipp-strings.c:3052
+#: locale/ipp-strings.c:3054
msgid "printer-state-reasons.imprinter-near-limit"
msgstr ""
#. TRANSLATORS: Imprinter Offline
-#: locale/ipp-strings.c:3054
+#: locale/ipp-strings.c:3056
msgid "printer-state-reasons.imprinter-offline"
msgstr ""
#. TRANSLATORS: Imprinter Opened
-#: locale/ipp-strings.c:3056
+#: locale/ipp-strings.c:3058
msgid "printer-state-reasons.imprinter-opened"
msgstr ""
#. TRANSLATORS: Imprinter Over Temperature
-#: locale/ipp-strings.c:3058
+#: locale/ipp-strings.c:3060
msgid "printer-state-reasons.imprinter-over-temperature"
msgstr ""
#. TRANSLATORS: Imprinter Power Saver
-#: locale/ipp-strings.c:3060
+#: locale/ipp-strings.c:3062
msgid "printer-state-reasons.imprinter-power-saver"
msgstr ""
#. TRANSLATORS: Imprinter Recoverable Failure
-#: locale/ipp-strings.c:3062
+#: locale/ipp-strings.c:3064
msgid "printer-state-reasons.imprinter-recoverable-failure"
msgstr ""
#. TRANSLATORS: Imprinter Recoverable Storage
-#: locale/ipp-strings.c:3064
+#: locale/ipp-strings.c:3066
msgid "printer-state-reasons.imprinter-recoverable-storage"
msgstr ""
#. TRANSLATORS: Imprinter Removed
-#: locale/ipp-strings.c:3066
+#: locale/ipp-strings.c:3068
msgid "printer-state-reasons.imprinter-removed"
msgstr ""
#. TRANSLATORS: Imprinter Resource Added
-#: locale/ipp-strings.c:3068
+#: locale/ipp-strings.c:3070
msgid "printer-state-reasons.imprinter-resource-added"
msgstr ""
#. TRANSLATORS: Imprinter Resource Removed
-#: locale/ipp-strings.c:3070
+#: locale/ipp-strings.c:3072
msgid "printer-state-reasons.imprinter-resource-removed"
msgstr ""
#. TRANSLATORS: Imprinter Thermistor Failure
-#: locale/ipp-strings.c:3072
+#: locale/ipp-strings.c:3074
msgid "printer-state-reasons.imprinter-thermistor-failure"
msgstr ""
#. TRANSLATORS: Imprinter Timing Failure
-#: locale/ipp-strings.c:3074
+#: locale/ipp-strings.c:3076
msgid "printer-state-reasons.imprinter-timing-failure"
msgstr ""
#. TRANSLATORS: Imprinter Turned Off
-#: locale/ipp-strings.c:3076
+#: locale/ipp-strings.c:3078
msgid "printer-state-reasons.imprinter-turned-off"
msgstr ""
#. TRANSLATORS: Imprinter Turned On
-#: locale/ipp-strings.c:3078
+#: locale/ipp-strings.c:3080
msgid "printer-state-reasons.imprinter-turned-on"
msgstr ""
#. TRANSLATORS: Imprinter Under Temperature
-#: locale/ipp-strings.c:3080
+#: locale/ipp-strings.c:3082
msgid "printer-state-reasons.imprinter-under-temperature"
msgstr ""
#. TRANSLATORS: Imprinter Unrecoverable Failure
-#: locale/ipp-strings.c:3082
+#: locale/ipp-strings.c:3084
msgid "printer-state-reasons.imprinter-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Imprinter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3084
+#: locale/ipp-strings.c:3086
msgid "printer-state-reasons.imprinter-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Imprinter Warming Up
-#: locale/ipp-strings.c:3086
+#: locale/ipp-strings.c:3088
msgid "printer-state-reasons.imprinter-warming-up"
msgstr ""
#. TRANSLATORS: Input Cannot Feed Size Selected
-#: locale/ipp-strings.c:3088
+#: locale/ipp-strings.c:3090
msgid "printer-state-reasons.input-cannot-feed-size-selected"
msgstr ""
#. TRANSLATORS: Input Manual Input Request
-#: locale/ipp-strings.c:3090
+#: locale/ipp-strings.c:3092
msgid "printer-state-reasons.input-manual-input-request"
msgstr ""
#. TRANSLATORS: Input Media Color Change
-#: locale/ipp-strings.c:3092
+#: locale/ipp-strings.c:3094
msgid "printer-state-reasons.input-media-color-change"
msgstr ""
#. TRANSLATORS: Input Media Form Parts Change
-#: locale/ipp-strings.c:3094
+#: locale/ipp-strings.c:3096
msgid "printer-state-reasons.input-media-form-parts-change"
msgstr ""
#. TRANSLATORS: Input Media Size Change
-#: locale/ipp-strings.c:3096
+#: locale/ipp-strings.c:3098
msgid "printer-state-reasons.input-media-size-change"
msgstr ""
#. TRANSLATORS: Input Media Tray Failure
-#: locale/ipp-strings.c:3098
+#: locale/ipp-strings.c:3100
msgid "printer-state-reasons.input-media-tray-failure"
msgstr ""
#. TRANSLATORS: Input Media Tray Feed Error
-#: locale/ipp-strings.c:3100
+#: locale/ipp-strings.c:3102
msgid "printer-state-reasons.input-media-tray-feed-error"
msgstr ""
#. TRANSLATORS: Input Media Tray Jam
-#: locale/ipp-strings.c:3102
+#: locale/ipp-strings.c:3104
msgid "printer-state-reasons.input-media-tray-jam"
msgstr ""
#. TRANSLATORS: Input Media Type Change
-#: locale/ipp-strings.c:3104
+#: locale/ipp-strings.c:3106
msgid "printer-state-reasons.input-media-type-change"
msgstr ""
#. TRANSLATORS: Input Media Weight Change
-#: locale/ipp-strings.c:3106
+#: locale/ipp-strings.c:3108
msgid "printer-state-reasons.input-media-weight-change"
msgstr ""
#. TRANSLATORS: Input Pick Roller Failure
-#: locale/ipp-strings.c:3108
+#: locale/ipp-strings.c:3110
msgid "printer-state-reasons.input-pick-roller-failure"
msgstr ""
#. TRANSLATORS: Input Pick Roller Life Over
-#: locale/ipp-strings.c:3110
+#: locale/ipp-strings.c:3112
msgid "printer-state-reasons.input-pick-roller-life-over"
msgstr ""
#. TRANSLATORS: Input Pick Roller Life Warn
-#: locale/ipp-strings.c:3112
+#: locale/ipp-strings.c:3114
msgid "printer-state-reasons.input-pick-roller-life-warn"
msgstr ""
#. TRANSLATORS: Input Pick Roller Missing
-#: locale/ipp-strings.c:3114
+#: locale/ipp-strings.c:3116
msgid "printer-state-reasons.input-pick-roller-missing"
msgstr ""
#. TRANSLATORS: Input Tray Elevation Failure
-#: locale/ipp-strings.c:3116
+#: locale/ipp-strings.c:3118
msgid "printer-state-reasons.input-tray-elevation-failure"
msgstr ""
#. TRANSLATORS: Paper tray is missing
-#: locale/ipp-strings.c:3118
+#: locale/ipp-strings.c:3120
msgid "printer-state-reasons.input-tray-missing"
msgstr ""
#. TRANSLATORS: Input Tray Position Failure
-#: locale/ipp-strings.c:3120
+#: locale/ipp-strings.c:3122
msgid "printer-state-reasons.input-tray-position-failure"
msgstr ""
#. TRANSLATORS: Inserter Added
-#: locale/ipp-strings.c:3122
+#: locale/ipp-strings.c:3124
msgid "printer-state-reasons.inserter-added"
msgstr ""
#. TRANSLATORS: Inserter Almost Empty
-#: locale/ipp-strings.c:3124
+#: locale/ipp-strings.c:3126
msgid "printer-state-reasons.inserter-almost-empty"
msgstr ""
#. TRANSLATORS: Inserter Almost Full
-#: locale/ipp-strings.c:3126
+#: locale/ipp-strings.c:3128
msgid "printer-state-reasons.inserter-almost-full"
msgstr ""
#. TRANSLATORS: Inserter At Limit
-#: locale/ipp-strings.c:3128
+#: locale/ipp-strings.c:3130
msgid "printer-state-reasons.inserter-at-limit"
msgstr ""
#. TRANSLATORS: Inserter Closed
-#: locale/ipp-strings.c:3130
+#: locale/ipp-strings.c:3132
msgid "printer-state-reasons.inserter-closed"
msgstr ""
#. TRANSLATORS: Inserter Configuration Change
-#: locale/ipp-strings.c:3132
+#: locale/ipp-strings.c:3134
msgid "printer-state-reasons.inserter-configuration-change"
msgstr ""
#. TRANSLATORS: Inserter Cover Closed
-#: locale/ipp-strings.c:3134
+#: locale/ipp-strings.c:3136
msgid "printer-state-reasons.inserter-cover-closed"
msgstr ""
#. TRANSLATORS: Inserter Cover Open
-#: locale/ipp-strings.c:3136
+#: locale/ipp-strings.c:3138
msgid "printer-state-reasons.inserter-cover-open"
msgstr ""
#. TRANSLATORS: Inserter Empty
-#: locale/ipp-strings.c:3138
+#: locale/ipp-strings.c:3140
msgid "printer-state-reasons.inserter-empty"
msgstr ""
#. TRANSLATORS: Inserter Full
-#: locale/ipp-strings.c:3140
+#: locale/ipp-strings.c:3142
msgid "printer-state-reasons.inserter-full"
msgstr ""
#. TRANSLATORS: Inserter Interlock Closed
-#: locale/ipp-strings.c:3142
+#: locale/ipp-strings.c:3144
msgid "printer-state-reasons.inserter-interlock-closed"
msgstr ""
#. TRANSLATORS: Inserter Interlock Open
-#: locale/ipp-strings.c:3144
+#: locale/ipp-strings.c:3146
msgid "printer-state-reasons.inserter-interlock-open"
msgstr ""
#. TRANSLATORS: Inserter Jam
-#: locale/ipp-strings.c:3146
+#: locale/ipp-strings.c:3148
msgid "printer-state-reasons.inserter-jam"
msgstr ""
#. TRANSLATORS: Inserter Life Almost Over
-#: locale/ipp-strings.c:3148
+#: locale/ipp-strings.c:3150
msgid "printer-state-reasons.inserter-life-almost-over"
msgstr ""
#. TRANSLATORS: Inserter Life Over
-#: locale/ipp-strings.c:3150
+#: locale/ipp-strings.c:3152
msgid "printer-state-reasons.inserter-life-over"
msgstr ""
#. TRANSLATORS: Inserter Memory Exhausted
-#: locale/ipp-strings.c:3152
+#: locale/ipp-strings.c:3154
msgid "printer-state-reasons.inserter-memory-exhausted"
msgstr ""
#. TRANSLATORS: Inserter Missing
-#: locale/ipp-strings.c:3154
+#: locale/ipp-strings.c:3156
msgid "printer-state-reasons.inserter-missing"
msgstr ""
#. TRANSLATORS: Inserter Motor Failure
-#: locale/ipp-strings.c:3156
+#: locale/ipp-strings.c:3158
msgid "printer-state-reasons.inserter-motor-failure"
msgstr ""
#. TRANSLATORS: Inserter Near Limit
-#: locale/ipp-strings.c:3158
+#: locale/ipp-strings.c:3160
msgid "printer-state-reasons.inserter-near-limit"
msgstr ""
#. TRANSLATORS: Inserter Offline
-#: locale/ipp-strings.c:3160
+#: locale/ipp-strings.c:3162
msgid "printer-state-reasons.inserter-offline"
msgstr ""
#. TRANSLATORS: Inserter Opened
-#: locale/ipp-strings.c:3162
+#: locale/ipp-strings.c:3164
msgid "printer-state-reasons.inserter-opened"
msgstr ""
#. TRANSLATORS: Inserter Over Temperature
-#: locale/ipp-strings.c:3164
+#: locale/ipp-strings.c:3166
msgid "printer-state-reasons.inserter-over-temperature"
msgstr ""
#. TRANSLATORS: Inserter Power Saver
-#: locale/ipp-strings.c:3166
+#: locale/ipp-strings.c:3168
msgid "printer-state-reasons.inserter-power-saver"
msgstr ""
#. TRANSLATORS: Inserter Recoverable Failure
-#: locale/ipp-strings.c:3168
+#: locale/ipp-strings.c:3170
msgid "printer-state-reasons.inserter-recoverable-failure"
msgstr ""
#. TRANSLATORS: Inserter Recoverable Storage
-#: locale/ipp-strings.c:3170
+#: locale/ipp-strings.c:3172
msgid "printer-state-reasons.inserter-recoverable-storage"
msgstr ""
#. TRANSLATORS: Inserter Removed
-#: locale/ipp-strings.c:3172
+#: locale/ipp-strings.c:3174
msgid "printer-state-reasons.inserter-removed"
msgstr ""
#. TRANSLATORS: Inserter Resource Added
-#: locale/ipp-strings.c:3174
+#: locale/ipp-strings.c:3176
msgid "printer-state-reasons.inserter-resource-added"
msgstr ""
#. TRANSLATORS: Inserter Resource Removed
-#: locale/ipp-strings.c:3176
+#: locale/ipp-strings.c:3178
msgid "printer-state-reasons.inserter-resource-removed"
msgstr ""
#. TRANSLATORS: Inserter Thermistor Failure
-#: locale/ipp-strings.c:3178
+#: locale/ipp-strings.c:3180
msgid "printer-state-reasons.inserter-thermistor-failure"
msgstr ""
#. TRANSLATORS: Inserter Timing Failure
-#: locale/ipp-strings.c:3180
+#: locale/ipp-strings.c:3182
msgid "printer-state-reasons.inserter-timing-failure"
msgstr ""
#. TRANSLATORS: Inserter Turned Off
-#: locale/ipp-strings.c:3182
+#: locale/ipp-strings.c:3184
msgid "printer-state-reasons.inserter-turned-off"
msgstr ""
#. TRANSLATORS: Inserter Turned On
-#: locale/ipp-strings.c:3184
+#: locale/ipp-strings.c:3186
msgid "printer-state-reasons.inserter-turned-on"
msgstr ""
#. TRANSLATORS: Inserter Under Temperature
-#: locale/ipp-strings.c:3186
+#: locale/ipp-strings.c:3188
msgid "printer-state-reasons.inserter-under-temperature"
msgstr ""
#. TRANSLATORS: Inserter Unrecoverable Failure
-#: locale/ipp-strings.c:3188
+#: locale/ipp-strings.c:3190
msgid "printer-state-reasons.inserter-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Inserter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3190
+#: locale/ipp-strings.c:3192
msgid "printer-state-reasons.inserter-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Inserter Warming Up
-#: locale/ipp-strings.c:3192
+#: locale/ipp-strings.c:3194
msgid "printer-state-reasons.inserter-warming-up"
msgstr ""
#. TRANSLATORS: Interlock Closed
-#: locale/ipp-strings.c:3194
+#: locale/ipp-strings.c:3196
msgid "printer-state-reasons.interlock-closed"
msgstr ""
#. TRANSLATORS: Interlock Open
-#: locale/ipp-strings.c:3196
+#: locale/ipp-strings.c:3198
msgid "printer-state-reasons.interlock-open"
msgstr ""
#. TRANSLATORS: Interpreter Cartridge Added
-#: locale/ipp-strings.c:3198
+#: locale/ipp-strings.c:3200
msgid "printer-state-reasons.interpreter-cartridge-added"
msgstr ""
#. TRANSLATORS: Interpreter Cartridge Removed
-#: locale/ipp-strings.c:3200
+#: locale/ipp-strings.c:3202
msgid "printer-state-reasons.interpreter-cartridge-deleted"
msgstr ""
#. TRANSLATORS: Interpreter Complex Page Encountered
-#: locale/ipp-strings.c:3202
+#: locale/ipp-strings.c:3204
msgid "printer-state-reasons.interpreter-complex-page-encountered"
msgstr ""
#. TRANSLATORS: Interpreter Memory Decrease
-#: locale/ipp-strings.c:3204
+#: locale/ipp-strings.c:3206
msgid "printer-state-reasons.interpreter-memory-decrease"
msgstr ""
#. TRANSLATORS: Interpreter Memory Increase
-#: locale/ipp-strings.c:3206
+#: locale/ipp-strings.c:3208
msgid "printer-state-reasons.interpreter-memory-increase"
msgstr ""
#. TRANSLATORS: Interpreter Resource Added
-#: locale/ipp-strings.c:3208
+#: locale/ipp-strings.c:3210
msgid "printer-state-reasons.interpreter-resource-added"
msgstr ""
#. TRANSLATORS: Interpreter Resource Deleted
-#: locale/ipp-strings.c:3210
+#: locale/ipp-strings.c:3212
msgid "printer-state-reasons.interpreter-resource-deleted"
msgstr ""
#. TRANSLATORS: Printer resource unavailable
-#: locale/ipp-strings.c:3212
+#: locale/ipp-strings.c:3214
msgid "printer-state-reasons.interpreter-resource-unavailable"
msgstr ""
#. TRANSLATORS: Lamp At End of Life
-#: locale/ipp-strings.c:3214
+#: locale/ipp-strings.c:3216
msgid "printer-state-reasons.lamp-at-eol"
msgstr ""
#. TRANSLATORS: Lamp Failure
-#: locale/ipp-strings.c:3216
+#: locale/ipp-strings.c:3218
msgid "printer-state-reasons.lamp-failure"
msgstr ""
#. TRANSLATORS: Lamp Near End of Life
-#: locale/ipp-strings.c:3218
+#: locale/ipp-strings.c:3220
msgid "printer-state-reasons.lamp-near-eol"
msgstr ""
#. TRANSLATORS: Laser At End of Life
-#: locale/ipp-strings.c:3220
+#: locale/ipp-strings.c:3222
msgid "printer-state-reasons.laser-at-eol"
msgstr ""
#. TRANSLATORS: Laser Failure
-#: locale/ipp-strings.c:3222
+#: locale/ipp-strings.c:3224
msgid "printer-state-reasons.laser-failure"
msgstr ""
#. TRANSLATORS: Laser Near End of Life
-#: locale/ipp-strings.c:3224
+#: locale/ipp-strings.c:3226
msgid "printer-state-reasons.laser-near-eol"
msgstr ""
#. TRANSLATORS: Envelope Maker Added
-#: locale/ipp-strings.c:3226
+#: locale/ipp-strings.c:3228
msgid "printer-state-reasons.make-envelope-added"
msgstr ""
#. TRANSLATORS: Envelope Maker Almost Empty
-#: locale/ipp-strings.c:3228
+#: locale/ipp-strings.c:3230
msgid "printer-state-reasons.make-envelope-almost-empty"
msgstr ""
#. TRANSLATORS: Envelope Maker Almost Full
-#: locale/ipp-strings.c:3230
+#: locale/ipp-strings.c:3232
msgid "printer-state-reasons.make-envelope-almost-full"
msgstr ""
#. TRANSLATORS: Envelope Maker At Limit
-#: locale/ipp-strings.c:3232
+#: locale/ipp-strings.c:3234
msgid "printer-state-reasons.make-envelope-at-limit"
msgstr ""
#. TRANSLATORS: Envelope Maker Closed
-#: locale/ipp-strings.c:3234
+#: locale/ipp-strings.c:3236
msgid "printer-state-reasons.make-envelope-closed"
msgstr ""
#. TRANSLATORS: Envelope Maker Configuration Change
-#: locale/ipp-strings.c:3236
+#: locale/ipp-strings.c:3238
msgid "printer-state-reasons.make-envelope-configuration-change"
msgstr ""
#. TRANSLATORS: Envelope Maker Cover Closed
-#: locale/ipp-strings.c:3238
+#: locale/ipp-strings.c:3240
msgid "printer-state-reasons.make-envelope-cover-closed"
msgstr ""
#. TRANSLATORS: Envelope Maker Cover Open
-#: locale/ipp-strings.c:3240
+#: locale/ipp-strings.c:3242
msgid "printer-state-reasons.make-envelope-cover-open"
msgstr ""
#. TRANSLATORS: Envelope Maker Empty
-#: locale/ipp-strings.c:3242
+#: locale/ipp-strings.c:3244
msgid "printer-state-reasons.make-envelope-empty"
msgstr ""
#. TRANSLATORS: Envelope Maker Full
-#: locale/ipp-strings.c:3244
+#: locale/ipp-strings.c:3246
msgid "printer-state-reasons.make-envelope-full"
msgstr ""
#. TRANSLATORS: Envelope Maker Interlock Closed
-#: locale/ipp-strings.c:3246
+#: locale/ipp-strings.c:3248
msgid "printer-state-reasons.make-envelope-interlock-closed"
msgstr ""
#. TRANSLATORS: Envelope Maker Interlock Open
-#: locale/ipp-strings.c:3248
+#: locale/ipp-strings.c:3250
msgid "printer-state-reasons.make-envelope-interlock-open"
msgstr ""
#. TRANSLATORS: Envelope Maker Jam
-#: locale/ipp-strings.c:3250
+#: locale/ipp-strings.c:3252
msgid "printer-state-reasons.make-envelope-jam"
msgstr ""
#. TRANSLATORS: Envelope Maker Life Almost Over
-#: locale/ipp-strings.c:3252
+#: locale/ipp-strings.c:3254
msgid "printer-state-reasons.make-envelope-life-almost-over"
msgstr ""
#. TRANSLATORS: Envelope Maker Life Over
-#: locale/ipp-strings.c:3254
+#: locale/ipp-strings.c:3256
msgid "printer-state-reasons.make-envelope-life-over"
msgstr ""
#. TRANSLATORS: Envelope Maker Memory Exhausted
-#: locale/ipp-strings.c:3256
+#: locale/ipp-strings.c:3258
msgid "printer-state-reasons.make-envelope-memory-exhausted"
msgstr ""
#. TRANSLATORS: Envelope Maker Missing
-#: locale/ipp-strings.c:3258
+#: locale/ipp-strings.c:3260
msgid "printer-state-reasons.make-envelope-missing"
msgstr ""
#. TRANSLATORS: Envelope Maker Motor Failure
-#: locale/ipp-strings.c:3260
+#: locale/ipp-strings.c:3262
msgid "printer-state-reasons.make-envelope-motor-failure"
msgstr ""
#. TRANSLATORS: Envelope Maker Near Limit
-#: locale/ipp-strings.c:3262
+#: locale/ipp-strings.c:3264
msgid "printer-state-reasons.make-envelope-near-limit"
msgstr ""
#. TRANSLATORS: Envelope Maker Offline
-#: locale/ipp-strings.c:3264
+#: locale/ipp-strings.c:3266
msgid "printer-state-reasons.make-envelope-offline"
msgstr ""
#. TRANSLATORS: Envelope Maker Opened
-#: locale/ipp-strings.c:3266
+#: locale/ipp-strings.c:3268
msgid "printer-state-reasons.make-envelope-opened"
msgstr ""
#. TRANSLATORS: Envelope Maker Over Temperature
-#: locale/ipp-strings.c:3268
+#: locale/ipp-strings.c:3270
msgid "printer-state-reasons.make-envelope-over-temperature"
msgstr ""
#. TRANSLATORS: Envelope Maker Power Saver
-#: locale/ipp-strings.c:3270
+#: locale/ipp-strings.c:3272
msgid "printer-state-reasons.make-envelope-power-saver"
msgstr ""
#. TRANSLATORS: Envelope Maker Recoverable Failure
-#: locale/ipp-strings.c:3272
+#: locale/ipp-strings.c:3274
msgid "printer-state-reasons.make-envelope-recoverable-failure"
msgstr ""
#. TRANSLATORS: Envelope Maker Recoverable Storage
-#: locale/ipp-strings.c:3274
+#: locale/ipp-strings.c:3276
msgid "printer-state-reasons.make-envelope-recoverable-storage"
msgstr ""
#. TRANSLATORS: Envelope Maker Removed
-#: locale/ipp-strings.c:3276
+#: locale/ipp-strings.c:3278
msgid "printer-state-reasons.make-envelope-removed"
msgstr ""
#. TRANSLATORS: Envelope Maker Resource Added
-#: locale/ipp-strings.c:3278
+#: locale/ipp-strings.c:3280
msgid "printer-state-reasons.make-envelope-resource-added"
msgstr ""
#. TRANSLATORS: Envelope Maker Resource Removed
-#: locale/ipp-strings.c:3280
+#: locale/ipp-strings.c:3282
msgid "printer-state-reasons.make-envelope-resource-removed"
msgstr ""
#. TRANSLATORS: Envelope Maker Thermistor Failure
-#: locale/ipp-strings.c:3282
+#: locale/ipp-strings.c:3284
msgid "printer-state-reasons.make-envelope-thermistor-failure"
msgstr ""
#. TRANSLATORS: Envelope Maker Timing Failure
-#: locale/ipp-strings.c:3284
+#: locale/ipp-strings.c:3286
msgid "printer-state-reasons.make-envelope-timing-failure"
msgstr ""
#. TRANSLATORS: Envelope Maker Turned Off
-#: locale/ipp-strings.c:3286
+#: locale/ipp-strings.c:3288
msgid "printer-state-reasons.make-envelope-turned-off"
msgstr ""
#. TRANSLATORS: Envelope Maker Turned On
-#: locale/ipp-strings.c:3288
+#: locale/ipp-strings.c:3290
msgid "printer-state-reasons.make-envelope-turned-on"
msgstr ""
#. TRANSLATORS: Envelope Maker Under Temperature
-#: locale/ipp-strings.c:3290
+#: locale/ipp-strings.c:3292
msgid "printer-state-reasons.make-envelope-under-temperature"
msgstr ""
#. TRANSLATORS: Envelope Maker Unrecoverable Failure
-#: locale/ipp-strings.c:3292
+#: locale/ipp-strings.c:3294
msgid "printer-state-reasons.make-envelope-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Envelope Maker Unrecoverable Storage Error
-#: locale/ipp-strings.c:3294
+#: locale/ipp-strings.c:3296
msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Envelope Maker Warming Up
-#: locale/ipp-strings.c:3296
+#: locale/ipp-strings.c:3298
msgid "printer-state-reasons.make-envelope-warming-up"
msgstr ""
#. TRANSLATORS: Marker Adjusting Print Quality
-#: locale/ipp-strings.c:3298
+#: locale/ipp-strings.c:3300
msgid "printer-state-reasons.marker-adjusting-print-quality"
msgstr ""
#. TRANSLATORS: Marker Cleaner Missing
-#: locale/ipp-strings.c:3300
+#: locale/ipp-strings.c:3302
msgid "printer-state-reasons.marker-cleaner-missing"
msgstr ""
#. TRANSLATORS: Marker Developer Almost Empty
-#: locale/ipp-strings.c:3302
+#: locale/ipp-strings.c:3304
msgid "printer-state-reasons.marker-developer-almost-empty"
msgstr ""
#. TRANSLATORS: Marker Developer Empty
-#: locale/ipp-strings.c:3304
+#: locale/ipp-strings.c:3306
msgid "printer-state-reasons.marker-developer-empty"
msgstr ""
#. TRANSLATORS: Marker Developer Missing
-#: locale/ipp-strings.c:3306
+#: locale/ipp-strings.c:3308
msgid "printer-state-reasons.marker-developer-missing"
msgstr ""
#. TRANSLATORS: Marker Fuser Missing
-#: locale/ipp-strings.c:3308
+#: locale/ipp-strings.c:3310
msgid "printer-state-reasons.marker-fuser-missing"
msgstr ""
#. TRANSLATORS: Marker Fuser Thermistor Failure
-#: locale/ipp-strings.c:3310
+#: locale/ipp-strings.c:3312
msgid "printer-state-reasons.marker-fuser-thermistor-failure"
msgstr ""
#. TRANSLATORS: Marker Fuser Timing Failure
-#: locale/ipp-strings.c:3312
+#: locale/ipp-strings.c:3314
msgid "printer-state-reasons.marker-fuser-timing-failure"
msgstr ""
#. TRANSLATORS: Marker Ink Almost Empty
-#: locale/ipp-strings.c:3314
+#: locale/ipp-strings.c:3316
msgid "printer-state-reasons.marker-ink-almost-empty"
msgstr ""
#. TRANSLATORS: Marker Ink Empty
-#: locale/ipp-strings.c:3316
+#: locale/ipp-strings.c:3318
msgid "printer-state-reasons.marker-ink-empty"
msgstr ""
#. TRANSLATORS: Marker Ink Missing
-#: locale/ipp-strings.c:3318
+#: locale/ipp-strings.c:3320
msgid "printer-state-reasons.marker-ink-missing"
msgstr ""
#. TRANSLATORS: Marker Opc Missing
-#: locale/ipp-strings.c:3320
+#: locale/ipp-strings.c:3322
msgid "printer-state-reasons.marker-opc-missing"
msgstr ""
#. TRANSLATORS: Marker Print Ribbon Almost Empty
-#: locale/ipp-strings.c:3322
+#: locale/ipp-strings.c:3324
msgid "printer-state-reasons.marker-print-ribbon-almost-empty"
msgstr ""
#. TRANSLATORS: Marker Print Ribbon Empty
-#: locale/ipp-strings.c:3324
+#: locale/ipp-strings.c:3326
msgid "printer-state-reasons.marker-print-ribbon-empty"
msgstr ""
#. TRANSLATORS: Marker Print Ribbon Missing
-#: locale/ipp-strings.c:3326
+#: locale/ipp-strings.c:3328
msgid "printer-state-reasons.marker-print-ribbon-missing"
msgstr ""
#. TRANSLATORS: Marker Supply Almost Empty
-#: locale/ipp-strings.c:3328
+#: locale/ipp-strings.c:3330
msgid "printer-state-reasons.marker-supply-almost-empty"
msgstr ""
#. TRANSLATORS: Ink/toner empty
-#: locale/ipp-strings.c:3330
+#: locale/ipp-strings.c:3332
msgid "printer-state-reasons.marker-supply-empty"
msgstr ""
#. TRANSLATORS: Ink/toner low
-#: locale/ipp-strings.c:3332
+#: locale/ipp-strings.c:3334
msgid "printer-state-reasons.marker-supply-low"
msgstr ""
#. TRANSLATORS: Marker Supply Missing
-#: locale/ipp-strings.c:3334
+#: locale/ipp-strings.c:3336
msgid "printer-state-reasons.marker-supply-missing"
msgstr ""
#. TRANSLATORS: Marker Toner Cartridge Missing
-#: locale/ipp-strings.c:3336
+#: locale/ipp-strings.c:3338
msgid "printer-state-reasons.marker-toner-cartridge-missing"
msgstr ""
#. TRANSLATORS: Marker Toner Missing
-#: locale/ipp-strings.c:3338
+#: locale/ipp-strings.c:3340
msgid "printer-state-reasons.marker-toner-missing"
msgstr ""
#. TRANSLATORS: Ink/toner waste bin almost full
-#: locale/ipp-strings.c:3340
+#: locale/ipp-strings.c:3342
msgid "printer-state-reasons.marker-waste-almost-full"
msgstr ""
#. TRANSLATORS: Ink/toner waste bin full
-#: locale/ipp-strings.c:3342
+#: locale/ipp-strings.c:3344
msgid "printer-state-reasons.marker-waste-full"
msgstr ""
#. TRANSLATORS: Marker Waste Ink Receptacle Almost Full
-#: locale/ipp-strings.c:3344
+#: locale/ipp-strings.c:3346
msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full"
msgstr ""
#. TRANSLATORS: Marker Waste Ink Receptacle Full
-#: locale/ipp-strings.c:3346
+#: locale/ipp-strings.c:3348
msgid "printer-state-reasons.marker-waste-ink-receptacle-full"
msgstr ""
#. TRANSLATORS: Marker Waste Ink Receptacle Missing
-#: locale/ipp-strings.c:3348
+#: locale/ipp-strings.c:3350
msgid "printer-state-reasons.marker-waste-ink-receptacle-missing"
msgstr ""
#. TRANSLATORS: Marker Waste Missing
-#: locale/ipp-strings.c:3350
+#: locale/ipp-strings.c:3352
msgid "printer-state-reasons.marker-waste-missing"
msgstr ""
#. TRANSLATORS: Marker Waste Toner Receptacle Almost Full
-#: locale/ipp-strings.c:3352
+#: locale/ipp-strings.c:3354
msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full"
msgstr ""
#. TRANSLATORS: Marker Waste Toner Receptacle Full
-#: locale/ipp-strings.c:3354
+#: locale/ipp-strings.c:3356
msgid "printer-state-reasons.marker-waste-toner-receptacle-full"
msgstr ""
#. TRANSLATORS: Marker Waste Toner Receptacle Missing
-#: locale/ipp-strings.c:3356
+#: locale/ipp-strings.c:3358
msgid "printer-state-reasons.marker-waste-toner-receptacle-missing"
msgstr ""
#. TRANSLATORS: Material Empty
-#: locale/ipp-strings.c:3358
+#: locale/ipp-strings.c:3360
msgid "printer-state-reasons.material-empty"
msgstr ""
#. TRANSLATORS: Material Low
-#: locale/ipp-strings.c:3360
+#: locale/ipp-strings.c:3362
msgid "printer-state-reasons.material-low"
msgstr ""
#. TRANSLATORS: Material Needed
-#: locale/ipp-strings.c:3362
+#: locale/ipp-strings.c:3364
msgid "printer-state-reasons.material-needed"
msgstr ""
#. TRANSLATORS: Media Drying
-#: locale/ipp-strings.c:3364
+#: locale/ipp-strings.c:3366
msgid "printer-state-reasons.media-drying"
msgstr ""
#. TRANSLATORS: Paper tray is empty
-#: locale/ipp-strings.c:3366
+#: locale/ipp-strings.c:3368
msgid "printer-state-reasons.media-empty"
msgstr ""
#. TRANSLATORS: Paper jam
-#: locale/ipp-strings.c:3368
+#: locale/ipp-strings.c:3370
msgid "printer-state-reasons.media-jam"
msgstr ""
#. TRANSLATORS: Paper tray is almost empty
-#: locale/ipp-strings.c:3370
+#: locale/ipp-strings.c:3372
msgid "printer-state-reasons.media-low"
msgstr ""
#. TRANSLATORS: Load paper
-#: locale/ipp-strings.c:3372
+#: locale/ipp-strings.c:3374
msgid "printer-state-reasons.media-needed"
msgstr ""
#. TRANSLATORS: Media Path Cannot Do 2-Sided Printing
-#: locale/ipp-strings.c:3374
+#: locale/ipp-strings.c:3376
msgid "printer-state-reasons.media-path-cannot-duplex-media-selected"
msgstr ""
#. TRANSLATORS: Media Path Failure
-#: locale/ipp-strings.c:3376
+#: locale/ipp-strings.c:3378
msgid "printer-state-reasons.media-path-failure"
msgstr ""
#. TRANSLATORS: Media Path Input Empty
-#: locale/ipp-strings.c:3378
+#: locale/ipp-strings.c:3380
msgid "printer-state-reasons.media-path-input-empty"
msgstr ""
#. TRANSLATORS: Media Path Input Feed Error
-#: locale/ipp-strings.c:3380
+#: locale/ipp-strings.c:3382
msgid "printer-state-reasons.media-path-input-feed-error"
msgstr ""
#. TRANSLATORS: Media Path Input Jam
-#: locale/ipp-strings.c:3382
+#: locale/ipp-strings.c:3384
msgid "printer-state-reasons.media-path-input-jam"
msgstr ""
#. TRANSLATORS: Media Path Input Request
-#: locale/ipp-strings.c:3384
+#: locale/ipp-strings.c:3386
msgid "printer-state-reasons.media-path-input-request"
msgstr ""
#. TRANSLATORS: Media Path Jam
-#: locale/ipp-strings.c:3386
+#: locale/ipp-strings.c:3388
msgid "printer-state-reasons.media-path-jam"
msgstr ""
#. TRANSLATORS: Media Path Media Tray Almost Full
-#: locale/ipp-strings.c:3388
+#: locale/ipp-strings.c:3390
msgid "printer-state-reasons.media-path-media-tray-almost-full"
msgstr ""
#. TRANSLATORS: Media Path Media Tray Full
-#: locale/ipp-strings.c:3390
+#: locale/ipp-strings.c:3392
msgid "printer-state-reasons.media-path-media-tray-full"
msgstr ""
#. TRANSLATORS: Media Path Media Tray Missing
-#: locale/ipp-strings.c:3392
+#: locale/ipp-strings.c:3394
msgid "printer-state-reasons.media-path-media-tray-missing"
msgstr ""
#. TRANSLATORS: Media Path Output Feed Error
-#: locale/ipp-strings.c:3394
+#: locale/ipp-strings.c:3396
msgid "printer-state-reasons.media-path-output-feed-error"
msgstr ""
#. TRANSLATORS: Media Path Output Full
-#: locale/ipp-strings.c:3396
+#: locale/ipp-strings.c:3398
msgid "printer-state-reasons.media-path-output-full"
msgstr ""
#. TRANSLATORS: Media Path Output Jam
-#: locale/ipp-strings.c:3398
+#: locale/ipp-strings.c:3400
msgid "printer-state-reasons.media-path-output-jam"
msgstr ""
#. TRANSLATORS: Media Path Pick Roller Failure
-#: locale/ipp-strings.c:3400
+#: locale/ipp-strings.c:3402
msgid "printer-state-reasons.media-path-pick-roller-failure"
msgstr ""
#. TRANSLATORS: Media Path Pick Roller Life Over
-#: locale/ipp-strings.c:3402
+#: locale/ipp-strings.c:3404
msgid "printer-state-reasons.media-path-pick-roller-life-over"
msgstr ""
#. TRANSLATORS: Media Path Pick Roller Life Warn
-#: locale/ipp-strings.c:3404
+#: locale/ipp-strings.c:3406
msgid "printer-state-reasons.media-path-pick-roller-life-warn"
msgstr ""
#. TRANSLATORS: Media Path Pick Roller Missing
-#: locale/ipp-strings.c:3406
+#: locale/ipp-strings.c:3408
msgid "printer-state-reasons.media-path-pick-roller-missing"
msgstr ""
#. TRANSLATORS: Motor Failure
-#: locale/ipp-strings.c:3408
+#: locale/ipp-strings.c:3410
msgid "printer-state-reasons.motor-failure"
msgstr ""
#. TRANSLATORS: Printer going offline
-#: locale/ipp-strings.c:3410
+#: locale/ipp-strings.c:3412
msgid "printer-state-reasons.moving-to-paused"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:3412
+#: locale/ipp-strings.c:3414
msgid "printer-state-reasons.none"
msgstr ""
#. TRANSLATORS: Optical Photoconductor Life Over
-#: locale/ipp-strings.c:3414
+#: locale/ipp-strings.c:3416
msgid "printer-state-reasons.opc-life-over"
msgstr ""
#. TRANSLATORS: OPC almost at end-of-life
-#: locale/ipp-strings.c:3416
+#: locale/ipp-strings.c:3418
msgid "printer-state-reasons.opc-near-eol"
msgstr ""
#. TRANSLATORS: Check the printer for errors
-#: locale/ipp-strings.c:3418
+#: locale/ipp-strings.c:3420
msgid "printer-state-reasons.other"
msgstr ""
#. TRANSLATORS: Output bin is almost full
-#: locale/ipp-strings.c:3420
+#: locale/ipp-strings.c:3422
msgid "printer-state-reasons.output-area-almost-full"
msgstr ""
#. TRANSLATORS: Output bin is full
-#: locale/ipp-strings.c:3422
+#: locale/ipp-strings.c:3424
msgid "printer-state-reasons.output-area-full"
msgstr ""
#. TRANSLATORS: Output Mailbox Select Failure
-#: locale/ipp-strings.c:3424
+#: locale/ipp-strings.c:3426
msgid "printer-state-reasons.output-mailbox-select-failure"
msgstr ""
#. TRANSLATORS: Output Media Tray Failure
-#: locale/ipp-strings.c:3426
+#: locale/ipp-strings.c:3428
msgid "printer-state-reasons.output-media-tray-failure"
msgstr ""
#. TRANSLATORS: Output Media Tray Feed Error
-#: locale/ipp-strings.c:3428
+#: locale/ipp-strings.c:3430
msgid "printer-state-reasons.output-media-tray-feed-error"
msgstr ""
#. TRANSLATORS: Output Media Tray Jam
-#: locale/ipp-strings.c:3430
+#: locale/ipp-strings.c:3432
msgid "printer-state-reasons.output-media-tray-jam"
msgstr ""
#. TRANSLATORS: Output tray is missing
-#: locale/ipp-strings.c:3432
+#: locale/ipp-strings.c:3434
msgid "printer-state-reasons.output-tray-missing"
msgstr ""
#. TRANSLATORS: Paused
-#: locale/ipp-strings.c:3434
+#: locale/ipp-strings.c:3436
msgid "printer-state-reasons.paused"
msgstr ""
#. TRANSLATORS: Perforater Added
-#: locale/ipp-strings.c:3436
+#: locale/ipp-strings.c:3438
msgid "printer-state-reasons.perforater-added"
msgstr ""
#. TRANSLATORS: Perforater Almost Empty
-#: locale/ipp-strings.c:3438
+#: locale/ipp-strings.c:3440
msgid "printer-state-reasons.perforater-almost-empty"
msgstr ""
#. TRANSLATORS: Perforater Almost Full
-#: locale/ipp-strings.c:3440
+#: locale/ipp-strings.c:3442
msgid "printer-state-reasons.perforater-almost-full"
msgstr ""
#. TRANSLATORS: Perforater At Limit
-#: locale/ipp-strings.c:3442
+#: locale/ipp-strings.c:3444
msgid "printer-state-reasons.perforater-at-limit"
msgstr ""
#. TRANSLATORS: Perforater Closed
-#: locale/ipp-strings.c:3444
+#: locale/ipp-strings.c:3446
msgid "printer-state-reasons.perforater-closed"
msgstr ""
#. TRANSLATORS: Perforater Configuration Change
-#: locale/ipp-strings.c:3446
+#: locale/ipp-strings.c:3448
msgid "printer-state-reasons.perforater-configuration-change"
msgstr ""
#. TRANSLATORS: Perforater Cover Closed
-#: locale/ipp-strings.c:3448
+#: locale/ipp-strings.c:3450
msgid "printer-state-reasons.perforater-cover-closed"
msgstr ""
#. TRANSLATORS: Perforater Cover Open
-#: locale/ipp-strings.c:3450
+#: locale/ipp-strings.c:3452
msgid "printer-state-reasons.perforater-cover-open"
msgstr ""
#. TRANSLATORS: Perforater Empty
-#: locale/ipp-strings.c:3452
+#: locale/ipp-strings.c:3454
msgid "printer-state-reasons.perforater-empty"
msgstr ""
#. TRANSLATORS: Perforater Full
-#: locale/ipp-strings.c:3454
+#: locale/ipp-strings.c:3456
msgid "printer-state-reasons.perforater-full"
msgstr ""
#. TRANSLATORS: Perforater Interlock Closed
-#: locale/ipp-strings.c:3456
+#: locale/ipp-strings.c:3458
msgid "printer-state-reasons.perforater-interlock-closed"
msgstr ""
#. TRANSLATORS: Perforater Interlock Open
-#: locale/ipp-strings.c:3458
+#: locale/ipp-strings.c:3460
msgid "printer-state-reasons.perforater-interlock-open"
msgstr ""
#. TRANSLATORS: Perforater Jam
-#: locale/ipp-strings.c:3460
+#: locale/ipp-strings.c:3462
msgid "printer-state-reasons.perforater-jam"
msgstr ""
#. TRANSLATORS: Perforater Life Almost Over
-#: locale/ipp-strings.c:3462
+#: locale/ipp-strings.c:3464
msgid "printer-state-reasons.perforater-life-almost-over"
msgstr ""
#. TRANSLATORS: Perforater Life Over
-#: locale/ipp-strings.c:3464
+#: locale/ipp-strings.c:3466
msgid "printer-state-reasons.perforater-life-over"
msgstr ""
#. TRANSLATORS: Perforater Memory Exhausted
-#: locale/ipp-strings.c:3466
+#: locale/ipp-strings.c:3468
msgid "printer-state-reasons.perforater-memory-exhausted"
msgstr ""
#. TRANSLATORS: Perforater Missing
-#: locale/ipp-strings.c:3468
+#: locale/ipp-strings.c:3470
msgid "printer-state-reasons.perforater-missing"
msgstr ""
#. TRANSLATORS: Perforater Motor Failure
-#: locale/ipp-strings.c:3470
+#: locale/ipp-strings.c:3472
msgid "printer-state-reasons.perforater-motor-failure"
msgstr ""
#. TRANSLATORS: Perforater Near Limit
-#: locale/ipp-strings.c:3472
+#: locale/ipp-strings.c:3474
msgid "printer-state-reasons.perforater-near-limit"
msgstr ""
#. TRANSLATORS: Perforater Offline
-#: locale/ipp-strings.c:3474
+#: locale/ipp-strings.c:3476
msgid "printer-state-reasons.perforater-offline"
msgstr ""
#. TRANSLATORS: Perforater Opened
-#: locale/ipp-strings.c:3476
+#: locale/ipp-strings.c:3478
msgid "printer-state-reasons.perforater-opened"
msgstr ""
#. TRANSLATORS: Perforater Over Temperature
-#: locale/ipp-strings.c:3478
+#: locale/ipp-strings.c:3480
msgid "printer-state-reasons.perforater-over-temperature"
msgstr ""
#. TRANSLATORS: Perforater Power Saver
-#: locale/ipp-strings.c:3480
+#: locale/ipp-strings.c:3482
msgid "printer-state-reasons.perforater-power-saver"
msgstr ""
#. TRANSLATORS: Perforater Recoverable Failure
-#: locale/ipp-strings.c:3482
+#: locale/ipp-strings.c:3484
msgid "printer-state-reasons.perforater-recoverable-failure"
msgstr ""
#. TRANSLATORS: Perforater Recoverable Storage
-#: locale/ipp-strings.c:3484
+#: locale/ipp-strings.c:3486
msgid "printer-state-reasons.perforater-recoverable-storage"
msgstr ""
#. TRANSLATORS: Perforater Removed
-#: locale/ipp-strings.c:3486
+#: locale/ipp-strings.c:3488
msgid "printer-state-reasons.perforater-removed"
msgstr ""
#. TRANSLATORS: Perforater Resource Added
-#: locale/ipp-strings.c:3488
+#: locale/ipp-strings.c:3490
msgid "printer-state-reasons.perforater-resource-added"
msgstr ""
#. TRANSLATORS: Perforater Resource Removed
-#: locale/ipp-strings.c:3490
+#: locale/ipp-strings.c:3492
msgid "printer-state-reasons.perforater-resource-removed"
msgstr ""
#. TRANSLATORS: Perforater Thermistor Failure
-#: locale/ipp-strings.c:3492
+#: locale/ipp-strings.c:3494
msgid "printer-state-reasons.perforater-thermistor-failure"
msgstr ""
#. TRANSLATORS: Perforater Timing Failure
-#: locale/ipp-strings.c:3494
+#: locale/ipp-strings.c:3496
msgid "printer-state-reasons.perforater-timing-failure"
msgstr ""
#. TRANSLATORS: Perforater Turned Off
-#: locale/ipp-strings.c:3496
+#: locale/ipp-strings.c:3498
msgid "printer-state-reasons.perforater-turned-off"
msgstr ""
#. TRANSLATORS: Perforater Turned On
-#: locale/ipp-strings.c:3498
+#: locale/ipp-strings.c:3500
msgid "printer-state-reasons.perforater-turned-on"
msgstr ""
#. TRANSLATORS: Perforater Under Temperature
-#: locale/ipp-strings.c:3500
+#: locale/ipp-strings.c:3502
msgid "printer-state-reasons.perforater-under-temperature"
msgstr ""
#. TRANSLATORS: Perforater Unrecoverable Failure
-#: locale/ipp-strings.c:3502
+#: locale/ipp-strings.c:3504
msgid "printer-state-reasons.perforater-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Perforater Unrecoverable Storage Error
-#: locale/ipp-strings.c:3504
+#: locale/ipp-strings.c:3506
msgid "printer-state-reasons.perforater-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Perforater Warming Up
-#: locale/ipp-strings.c:3506
+#: locale/ipp-strings.c:3508
msgid "printer-state-reasons.perforater-warming-up"
msgstr ""
#. TRANSLATORS: Platform Cooling
-#: locale/ipp-strings.c:3508
+#: locale/ipp-strings.c:3510
msgid "printer-state-reasons.platform-cooling"
msgstr ""
#. TRANSLATORS: Platform Failure
-#: locale/ipp-strings.c:3510
+#: locale/ipp-strings.c:3512
msgid "printer-state-reasons.platform-failure"
msgstr ""
#. TRANSLATORS: Platform Heating
-#: locale/ipp-strings.c:3512
+#: locale/ipp-strings.c:3514
msgid "printer-state-reasons.platform-heating"
msgstr ""
#. TRANSLATORS: Platform Temperature High
-#: locale/ipp-strings.c:3514
+#: locale/ipp-strings.c:3516
msgid "printer-state-reasons.platform-temperature-high"
msgstr ""
#. TRANSLATORS: Platform Temperature Low
-#: locale/ipp-strings.c:3516
+#: locale/ipp-strings.c:3518
msgid "printer-state-reasons.platform-temperature-low"
msgstr ""
#. TRANSLATORS: Power Down
-#: locale/ipp-strings.c:3518
+#: locale/ipp-strings.c:3520
msgid "printer-state-reasons.power-down"
msgstr ""
#. TRANSLATORS: Power Up
-#: locale/ipp-strings.c:3520
+#: locale/ipp-strings.c:3522
msgid "printer-state-reasons.power-up"
msgstr ""
#. TRANSLATORS: Printer Reset Manually
-#: locale/ipp-strings.c:3522
+#: locale/ipp-strings.c:3524
msgid "printer-state-reasons.printer-manual-reset"
msgstr ""
#. TRANSLATORS: Printer Reset Remotely
-#: locale/ipp-strings.c:3524
+#: locale/ipp-strings.c:3526
msgid "printer-state-reasons.printer-nms-reset"
msgstr ""
#. TRANSLATORS: Printer Ready To Print
-#: locale/ipp-strings.c:3526
+#: locale/ipp-strings.c:3528
msgid "printer-state-reasons.printer-ready-to-print"
msgstr ""
#. TRANSLATORS: Puncher Added
-#: locale/ipp-strings.c:3528
+#: locale/ipp-strings.c:3530
msgid "printer-state-reasons.puncher-added"
msgstr ""
#. TRANSLATORS: Puncher Almost Empty
-#: locale/ipp-strings.c:3530
+#: locale/ipp-strings.c:3532
msgid "printer-state-reasons.puncher-almost-empty"
msgstr ""
#. TRANSLATORS: Puncher Almost Full
-#: locale/ipp-strings.c:3532
+#: locale/ipp-strings.c:3534
msgid "printer-state-reasons.puncher-almost-full"
msgstr ""
#. TRANSLATORS: Puncher At Limit
-#: locale/ipp-strings.c:3534
+#: locale/ipp-strings.c:3536
msgid "printer-state-reasons.puncher-at-limit"
msgstr ""
#. TRANSLATORS: Puncher Closed
-#: locale/ipp-strings.c:3536
+#: locale/ipp-strings.c:3538
msgid "printer-state-reasons.puncher-closed"
msgstr ""
#. TRANSLATORS: Puncher Configuration Change
-#: locale/ipp-strings.c:3538
+#: locale/ipp-strings.c:3540
msgid "printer-state-reasons.puncher-configuration-change"
msgstr ""
#. TRANSLATORS: Puncher Cover Closed
-#: locale/ipp-strings.c:3540
+#: locale/ipp-strings.c:3542
msgid "printer-state-reasons.puncher-cover-closed"
msgstr ""
#. TRANSLATORS: Puncher Cover Open
-#: locale/ipp-strings.c:3542
+#: locale/ipp-strings.c:3544
msgid "printer-state-reasons.puncher-cover-open"
msgstr ""
#. TRANSLATORS: Puncher Empty
-#: locale/ipp-strings.c:3544
+#: locale/ipp-strings.c:3546
msgid "printer-state-reasons.puncher-empty"
msgstr ""
#. TRANSLATORS: Puncher Full
-#: locale/ipp-strings.c:3546
+#: locale/ipp-strings.c:3548
msgid "printer-state-reasons.puncher-full"
msgstr ""
#. TRANSLATORS: Puncher Interlock Closed
-#: locale/ipp-strings.c:3548
+#: locale/ipp-strings.c:3550
msgid "printer-state-reasons.puncher-interlock-closed"
msgstr ""
#. TRANSLATORS: Puncher Interlock Open
-#: locale/ipp-strings.c:3550
+#: locale/ipp-strings.c:3552
msgid "printer-state-reasons.puncher-interlock-open"
msgstr ""
#. TRANSLATORS: Puncher Jam
-#: locale/ipp-strings.c:3552
+#: locale/ipp-strings.c:3554
msgid "printer-state-reasons.puncher-jam"
msgstr ""
#. TRANSLATORS: Puncher Life Almost Over
-#: locale/ipp-strings.c:3554
+#: locale/ipp-strings.c:3556
msgid "printer-state-reasons.puncher-life-almost-over"
msgstr ""
#. TRANSLATORS: Puncher Life Over
-#: locale/ipp-strings.c:3556
+#: locale/ipp-strings.c:3558
msgid "printer-state-reasons.puncher-life-over"
msgstr ""
#. TRANSLATORS: Puncher Memory Exhausted
-#: locale/ipp-strings.c:3558
+#: locale/ipp-strings.c:3560
msgid "printer-state-reasons.puncher-memory-exhausted"
msgstr ""
#. TRANSLATORS: Puncher Missing
-#: locale/ipp-strings.c:3560
+#: locale/ipp-strings.c:3562
msgid "printer-state-reasons.puncher-missing"
msgstr ""
#. TRANSLATORS: Puncher Motor Failure
-#: locale/ipp-strings.c:3562
+#: locale/ipp-strings.c:3564
msgid "printer-state-reasons.puncher-motor-failure"
msgstr ""
#. TRANSLATORS: Puncher Near Limit
-#: locale/ipp-strings.c:3564
+#: locale/ipp-strings.c:3566
msgid "printer-state-reasons.puncher-near-limit"
msgstr ""
#. TRANSLATORS: Puncher Offline
-#: locale/ipp-strings.c:3566
+#: locale/ipp-strings.c:3568
msgid "printer-state-reasons.puncher-offline"
msgstr ""
#. TRANSLATORS: Puncher Opened
-#: locale/ipp-strings.c:3568
+#: locale/ipp-strings.c:3570
msgid "printer-state-reasons.puncher-opened"
msgstr ""
#. TRANSLATORS: Puncher Over Temperature
-#: locale/ipp-strings.c:3570
+#: locale/ipp-strings.c:3572
msgid "printer-state-reasons.puncher-over-temperature"
msgstr ""
#. TRANSLATORS: Puncher Power Saver
-#: locale/ipp-strings.c:3572
+#: locale/ipp-strings.c:3574
msgid "printer-state-reasons.puncher-power-saver"
msgstr ""
#. TRANSLATORS: Puncher Recoverable Failure
-#: locale/ipp-strings.c:3574
+#: locale/ipp-strings.c:3576
msgid "printer-state-reasons.puncher-recoverable-failure"
msgstr ""
#. TRANSLATORS: Puncher Recoverable Storage
-#: locale/ipp-strings.c:3576
+#: locale/ipp-strings.c:3578
msgid "printer-state-reasons.puncher-recoverable-storage"
msgstr ""
#. TRANSLATORS: Puncher Removed
-#: locale/ipp-strings.c:3578
+#: locale/ipp-strings.c:3580
msgid "printer-state-reasons.puncher-removed"
msgstr ""
#. TRANSLATORS: Puncher Resource Added
-#: locale/ipp-strings.c:3580
+#: locale/ipp-strings.c:3582
msgid "printer-state-reasons.puncher-resource-added"
msgstr ""
#. TRANSLATORS: Puncher Resource Removed
-#: locale/ipp-strings.c:3582
+#: locale/ipp-strings.c:3584
msgid "printer-state-reasons.puncher-resource-removed"
msgstr ""
#. TRANSLATORS: Puncher Thermistor Failure
-#: locale/ipp-strings.c:3584
+#: locale/ipp-strings.c:3586
msgid "printer-state-reasons.puncher-thermistor-failure"
msgstr ""
#. TRANSLATORS: Puncher Timing Failure
-#: locale/ipp-strings.c:3586
+#: locale/ipp-strings.c:3588
msgid "printer-state-reasons.puncher-timing-failure"
msgstr ""
#. TRANSLATORS: Puncher Turned Off
-#: locale/ipp-strings.c:3588
+#: locale/ipp-strings.c:3590
msgid "printer-state-reasons.puncher-turned-off"
msgstr ""
#. TRANSLATORS: Puncher Turned On
-#: locale/ipp-strings.c:3590
+#: locale/ipp-strings.c:3592
msgid "printer-state-reasons.puncher-turned-on"
msgstr ""
#. TRANSLATORS: Puncher Under Temperature
-#: locale/ipp-strings.c:3592
+#: locale/ipp-strings.c:3594
msgid "printer-state-reasons.puncher-under-temperature"
msgstr ""
#. TRANSLATORS: Puncher Unrecoverable Failure
-#: locale/ipp-strings.c:3594
+#: locale/ipp-strings.c:3596
msgid "printer-state-reasons.puncher-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Puncher Unrecoverable Storage Error
-#: locale/ipp-strings.c:3596
+#: locale/ipp-strings.c:3598
msgid "printer-state-reasons.puncher-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Puncher Warming Up
-#: locale/ipp-strings.c:3598
+#: locale/ipp-strings.c:3600
msgid "printer-state-reasons.puncher-warming-up"
msgstr ""
#. TRANSLATORS: Separation Cutter Added
-#: locale/ipp-strings.c:3600
+#: locale/ipp-strings.c:3602
msgid "printer-state-reasons.separation-cutter-added"
msgstr ""
#. TRANSLATORS: Separation Cutter Almost Empty
-#: locale/ipp-strings.c:3602
+#: locale/ipp-strings.c:3604
msgid "printer-state-reasons.separation-cutter-almost-empty"
msgstr ""
#. TRANSLATORS: Separation Cutter Almost Full
-#: locale/ipp-strings.c:3604
+#: locale/ipp-strings.c:3606
msgid "printer-state-reasons.separation-cutter-almost-full"
msgstr ""
#. TRANSLATORS: Separation Cutter At Limit
-#: locale/ipp-strings.c:3606
+#: locale/ipp-strings.c:3608
msgid "printer-state-reasons.separation-cutter-at-limit"
msgstr ""
#. TRANSLATORS: Separation Cutter Closed
-#: locale/ipp-strings.c:3608
+#: locale/ipp-strings.c:3610
msgid "printer-state-reasons.separation-cutter-closed"
msgstr ""
#. TRANSLATORS: Separation Cutter Configuration Change
-#: locale/ipp-strings.c:3610
+#: locale/ipp-strings.c:3612
msgid "printer-state-reasons.separation-cutter-configuration-change"
msgstr ""
#. TRANSLATORS: Separation Cutter Cover Closed
-#: locale/ipp-strings.c:3612
+#: locale/ipp-strings.c:3614
msgid "printer-state-reasons.separation-cutter-cover-closed"
msgstr ""
#. TRANSLATORS: Separation Cutter Cover Open
-#: locale/ipp-strings.c:3614
+#: locale/ipp-strings.c:3616
msgid "printer-state-reasons.separation-cutter-cover-open"
msgstr ""
#. TRANSLATORS: Separation Cutter Empty
-#: locale/ipp-strings.c:3616
+#: locale/ipp-strings.c:3618
msgid "printer-state-reasons.separation-cutter-empty"
msgstr ""
#. TRANSLATORS: Separation Cutter Full
-#: locale/ipp-strings.c:3618
+#: locale/ipp-strings.c:3620
msgid "printer-state-reasons.separation-cutter-full"
msgstr ""
#. TRANSLATORS: Separation Cutter Interlock Closed
-#: locale/ipp-strings.c:3620
+#: locale/ipp-strings.c:3622
msgid "printer-state-reasons.separation-cutter-interlock-closed"
msgstr ""
#. TRANSLATORS: Separation Cutter Interlock Open
-#: locale/ipp-strings.c:3622
+#: locale/ipp-strings.c:3624
msgid "printer-state-reasons.separation-cutter-interlock-open"
msgstr ""
#. TRANSLATORS: Separation Cutter Jam
-#: locale/ipp-strings.c:3624
+#: locale/ipp-strings.c:3626
msgid "printer-state-reasons.separation-cutter-jam"
msgstr ""
#. TRANSLATORS: Separation Cutter Life Almost Over
-#: locale/ipp-strings.c:3626
+#: locale/ipp-strings.c:3628
msgid "printer-state-reasons.separation-cutter-life-almost-over"
msgstr ""
#. TRANSLATORS: Separation Cutter Life Over
-#: locale/ipp-strings.c:3628
+#: locale/ipp-strings.c:3630
msgid "printer-state-reasons.separation-cutter-life-over"
msgstr ""
#. TRANSLATORS: Separation Cutter Memory Exhausted
-#: locale/ipp-strings.c:3630
+#: locale/ipp-strings.c:3632
msgid "printer-state-reasons.separation-cutter-memory-exhausted"
msgstr ""
#. TRANSLATORS: Separation Cutter Missing
-#: locale/ipp-strings.c:3632
+#: locale/ipp-strings.c:3634
msgid "printer-state-reasons.separation-cutter-missing"
msgstr ""
#. TRANSLATORS: Separation Cutter Motor Failure
-#: locale/ipp-strings.c:3634
+#: locale/ipp-strings.c:3636
msgid "printer-state-reasons.separation-cutter-motor-failure"
msgstr ""
#. TRANSLATORS: Separation Cutter Near Limit
-#: locale/ipp-strings.c:3636
+#: locale/ipp-strings.c:3638
msgid "printer-state-reasons.separation-cutter-near-limit"
msgstr ""
#. TRANSLATORS: Separation Cutter Offline
-#: locale/ipp-strings.c:3638
+#: locale/ipp-strings.c:3640
msgid "printer-state-reasons.separation-cutter-offline"
msgstr ""
#. TRANSLATORS: Separation Cutter Opened
-#: locale/ipp-strings.c:3640
+#: locale/ipp-strings.c:3642
msgid "printer-state-reasons.separation-cutter-opened"
msgstr ""
#. TRANSLATORS: Separation Cutter Over Temperature
-#: locale/ipp-strings.c:3642
+#: locale/ipp-strings.c:3644
msgid "printer-state-reasons.separation-cutter-over-temperature"
msgstr ""
#. TRANSLATORS: Separation Cutter Power Saver
-#: locale/ipp-strings.c:3644
+#: locale/ipp-strings.c:3646
msgid "printer-state-reasons.separation-cutter-power-saver"
msgstr ""
#. TRANSLATORS: Separation Cutter Recoverable Failure
-#: locale/ipp-strings.c:3646
+#: locale/ipp-strings.c:3648
msgid "printer-state-reasons.separation-cutter-recoverable-failure"
msgstr ""
#. TRANSLATORS: Separation Cutter Recoverable Storage
-#: locale/ipp-strings.c:3648
+#: locale/ipp-strings.c:3650
msgid "printer-state-reasons.separation-cutter-recoverable-storage"
msgstr ""
#. TRANSLATORS: Separation Cutter Removed
-#: locale/ipp-strings.c:3650
+#: locale/ipp-strings.c:3652
msgid "printer-state-reasons.separation-cutter-removed"
msgstr ""
#. TRANSLATORS: Separation Cutter Resource Added
-#: locale/ipp-strings.c:3652
+#: locale/ipp-strings.c:3654
msgid "printer-state-reasons.separation-cutter-resource-added"
msgstr ""
#. TRANSLATORS: Separation Cutter Resource Removed
-#: locale/ipp-strings.c:3654
+#: locale/ipp-strings.c:3656
msgid "printer-state-reasons.separation-cutter-resource-removed"
msgstr ""
#. TRANSLATORS: Separation Cutter Thermistor Failure
-#: locale/ipp-strings.c:3656
+#: locale/ipp-strings.c:3658
msgid "printer-state-reasons.separation-cutter-thermistor-failure"
msgstr ""
#. TRANSLATORS: Separation Cutter Timing Failure
-#: locale/ipp-strings.c:3658
+#: locale/ipp-strings.c:3660
msgid "printer-state-reasons.separation-cutter-timing-failure"
msgstr ""
#. TRANSLATORS: Separation Cutter Turned Off
-#: locale/ipp-strings.c:3660
+#: locale/ipp-strings.c:3662
msgid "printer-state-reasons.separation-cutter-turned-off"
msgstr ""
#. TRANSLATORS: Separation Cutter Turned On
-#: locale/ipp-strings.c:3662
+#: locale/ipp-strings.c:3664
msgid "printer-state-reasons.separation-cutter-turned-on"
msgstr ""
#. TRANSLATORS: Separation Cutter Under Temperature
-#: locale/ipp-strings.c:3664
+#: locale/ipp-strings.c:3666
msgid "printer-state-reasons.separation-cutter-under-temperature"
msgstr ""
#. TRANSLATORS: Separation Cutter Unrecoverable Failure
-#: locale/ipp-strings.c:3666
+#: locale/ipp-strings.c:3668
msgid "printer-state-reasons.separation-cutter-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Separation Cutter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3668
+#: locale/ipp-strings.c:3670
msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Separation Cutter Warming Up
-#: locale/ipp-strings.c:3670
+#: locale/ipp-strings.c:3672
msgid "printer-state-reasons.separation-cutter-warming-up"
msgstr ""
#. TRANSLATORS: Sheet Rotator Added
-#: locale/ipp-strings.c:3672
+#: locale/ipp-strings.c:3674
msgid "printer-state-reasons.sheet-rotator-added"
msgstr ""
#. TRANSLATORS: Sheet Rotator Almost Empty
-#: locale/ipp-strings.c:3674
+#: locale/ipp-strings.c:3676
msgid "printer-state-reasons.sheet-rotator-almost-empty"
msgstr ""
#. TRANSLATORS: Sheet Rotator Almost Full
-#: locale/ipp-strings.c:3676
+#: locale/ipp-strings.c:3678
msgid "printer-state-reasons.sheet-rotator-almost-full"
msgstr ""
#. TRANSLATORS: Sheet Rotator At Limit
-#: locale/ipp-strings.c:3678
+#: locale/ipp-strings.c:3680
msgid "printer-state-reasons.sheet-rotator-at-limit"
msgstr ""
#. TRANSLATORS: Sheet Rotator Closed
-#: locale/ipp-strings.c:3680
+#: locale/ipp-strings.c:3682
msgid "printer-state-reasons.sheet-rotator-closed"
msgstr ""
#. TRANSLATORS: Sheet Rotator Configuration Change
-#: locale/ipp-strings.c:3682
+#: locale/ipp-strings.c:3684
msgid "printer-state-reasons.sheet-rotator-configuration-change"
msgstr ""
#. TRANSLATORS: Sheet Rotator Cover Closed
-#: locale/ipp-strings.c:3684
+#: locale/ipp-strings.c:3686
msgid "printer-state-reasons.sheet-rotator-cover-closed"
msgstr ""
#. TRANSLATORS: Sheet Rotator Cover Open
-#: locale/ipp-strings.c:3686
+#: locale/ipp-strings.c:3688
msgid "printer-state-reasons.sheet-rotator-cover-open"
msgstr ""
#. TRANSLATORS: Sheet Rotator Empty
-#: locale/ipp-strings.c:3688
+#: locale/ipp-strings.c:3690
msgid "printer-state-reasons.sheet-rotator-empty"
msgstr ""
#. TRANSLATORS: Sheet Rotator Full
-#: locale/ipp-strings.c:3690
+#: locale/ipp-strings.c:3692
msgid "printer-state-reasons.sheet-rotator-full"
msgstr ""
#. TRANSLATORS: Sheet Rotator Interlock Closed
-#: locale/ipp-strings.c:3692
+#: locale/ipp-strings.c:3694
msgid "printer-state-reasons.sheet-rotator-interlock-closed"
msgstr ""
#. TRANSLATORS: Sheet Rotator Interlock Open
-#: locale/ipp-strings.c:3694
+#: locale/ipp-strings.c:3696
msgid "printer-state-reasons.sheet-rotator-interlock-open"
msgstr ""
#. TRANSLATORS: Sheet Rotator Jam
-#: locale/ipp-strings.c:3696
+#: locale/ipp-strings.c:3698
msgid "printer-state-reasons.sheet-rotator-jam"
msgstr ""
#. TRANSLATORS: Sheet Rotator Life Almost Over
-#: locale/ipp-strings.c:3698
+#: locale/ipp-strings.c:3700
msgid "printer-state-reasons.sheet-rotator-life-almost-over"
msgstr ""
#. TRANSLATORS: Sheet Rotator Life Over
-#: locale/ipp-strings.c:3700
+#: locale/ipp-strings.c:3702
msgid "printer-state-reasons.sheet-rotator-life-over"
msgstr ""
#. TRANSLATORS: Sheet Rotator Memory Exhausted
-#: locale/ipp-strings.c:3702
+#: locale/ipp-strings.c:3704
msgid "printer-state-reasons.sheet-rotator-memory-exhausted"
msgstr ""
#. TRANSLATORS: Sheet Rotator Missing
-#: locale/ipp-strings.c:3704
+#: locale/ipp-strings.c:3706
msgid "printer-state-reasons.sheet-rotator-missing"
msgstr ""
#. TRANSLATORS: Sheet Rotator Motor Failure
-#: locale/ipp-strings.c:3706
+#: locale/ipp-strings.c:3708
msgid "printer-state-reasons.sheet-rotator-motor-failure"
msgstr ""
#. TRANSLATORS: Sheet Rotator Near Limit
-#: locale/ipp-strings.c:3708
+#: locale/ipp-strings.c:3710
msgid "printer-state-reasons.sheet-rotator-near-limit"
msgstr ""
#. TRANSLATORS: Sheet Rotator Offline
-#: locale/ipp-strings.c:3710
+#: locale/ipp-strings.c:3712
msgid "printer-state-reasons.sheet-rotator-offline"
msgstr ""
#. TRANSLATORS: Sheet Rotator Opened
-#: locale/ipp-strings.c:3712
+#: locale/ipp-strings.c:3714
msgid "printer-state-reasons.sheet-rotator-opened"
msgstr ""
#. TRANSLATORS: Sheet Rotator Over Temperature
-#: locale/ipp-strings.c:3714
+#: locale/ipp-strings.c:3716
msgid "printer-state-reasons.sheet-rotator-over-temperature"
msgstr ""
#. TRANSLATORS: Sheet Rotator Power Saver
-#: locale/ipp-strings.c:3716
+#: locale/ipp-strings.c:3718
msgid "printer-state-reasons.sheet-rotator-power-saver"
msgstr ""
#. TRANSLATORS: Sheet Rotator Recoverable Failure
-#: locale/ipp-strings.c:3718
+#: locale/ipp-strings.c:3720
msgid "printer-state-reasons.sheet-rotator-recoverable-failure"
msgstr ""
#. TRANSLATORS: Sheet Rotator Recoverable Storage
-#: locale/ipp-strings.c:3720
+#: locale/ipp-strings.c:3722
msgid "printer-state-reasons.sheet-rotator-recoverable-storage"
msgstr ""
#. TRANSLATORS: Sheet Rotator Removed
-#: locale/ipp-strings.c:3722
+#: locale/ipp-strings.c:3724
msgid "printer-state-reasons.sheet-rotator-removed"
msgstr ""
#. TRANSLATORS: Sheet Rotator Resource Added
-#: locale/ipp-strings.c:3724
+#: locale/ipp-strings.c:3726
msgid "printer-state-reasons.sheet-rotator-resource-added"
msgstr ""
#. TRANSLATORS: Sheet Rotator Resource Removed
-#: locale/ipp-strings.c:3726
+#: locale/ipp-strings.c:3728
msgid "printer-state-reasons.sheet-rotator-resource-removed"
msgstr ""
#. TRANSLATORS: Sheet Rotator Thermistor Failure
-#: locale/ipp-strings.c:3728
+#: locale/ipp-strings.c:3730
msgid "printer-state-reasons.sheet-rotator-thermistor-failure"
msgstr ""
#. TRANSLATORS: Sheet Rotator Timing Failure
-#: locale/ipp-strings.c:3730
+#: locale/ipp-strings.c:3732
msgid "printer-state-reasons.sheet-rotator-timing-failure"
msgstr ""
#. TRANSLATORS: Sheet Rotator Turned Off
-#: locale/ipp-strings.c:3732
+#: locale/ipp-strings.c:3734
msgid "printer-state-reasons.sheet-rotator-turned-off"
msgstr ""
#. TRANSLATORS: Sheet Rotator Turned On
-#: locale/ipp-strings.c:3734
+#: locale/ipp-strings.c:3736
msgid "printer-state-reasons.sheet-rotator-turned-on"
msgstr ""
#. TRANSLATORS: Sheet Rotator Under Temperature
-#: locale/ipp-strings.c:3736
+#: locale/ipp-strings.c:3738
msgid "printer-state-reasons.sheet-rotator-under-temperature"
msgstr ""
#. TRANSLATORS: Sheet Rotator Unrecoverable Failure
-#: locale/ipp-strings.c:3738
+#: locale/ipp-strings.c:3740
msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Sheet Rotator Unrecoverable Storage Error
-#: locale/ipp-strings.c:3740
+#: locale/ipp-strings.c:3742
msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Sheet Rotator Warming Up
-#: locale/ipp-strings.c:3742
+#: locale/ipp-strings.c:3744
msgid "printer-state-reasons.sheet-rotator-warming-up"
msgstr ""
#. TRANSLATORS: Printer offline
-#: locale/ipp-strings.c:3744
+#: locale/ipp-strings.c:3746
msgid "printer-state-reasons.shutdown"
msgstr ""
#. TRANSLATORS: Slitter Added
-#: locale/ipp-strings.c:3746
+#: locale/ipp-strings.c:3748
msgid "printer-state-reasons.slitter-added"
msgstr ""
#. TRANSLATORS: Slitter Almost Empty
-#: locale/ipp-strings.c:3748
+#: locale/ipp-strings.c:3750
msgid "printer-state-reasons.slitter-almost-empty"
msgstr ""
#. TRANSLATORS: Slitter Almost Full
-#: locale/ipp-strings.c:3750
+#: locale/ipp-strings.c:3752
msgid "printer-state-reasons.slitter-almost-full"
msgstr ""
#. TRANSLATORS: Slitter At Limit
-#: locale/ipp-strings.c:3752
+#: locale/ipp-strings.c:3754
msgid "printer-state-reasons.slitter-at-limit"
msgstr ""
#. TRANSLATORS: Slitter Closed
-#: locale/ipp-strings.c:3754
+#: locale/ipp-strings.c:3756
msgid "printer-state-reasons.slitter-closed"
msgstr ""
#. TRANSLATORS: Slitter Configuration Change
-#: locale/ipp-strings.c:3756
+#: locale/ipp-strings.c:3758
msgid "printer-state-reasons.slitter-configuration-change"
msgstr ""
#. TRANSLATORS: Slitter Cover Closed
-#: locale/ipp-strings.c:3758
+#: locale/ipp-strings.c:3760
msgid "printer-state-reasons.slitter-cover-closed"
msgstr ""
#. TRANSLATORS: Slitter Cover Open
-#: locale/ipp-strings.c:3760
+#: locale/ipp-strings.c:3762
msgid "printer-state-reasons.slitter-cover-open"
msgstr ""
#. TRANSLATORS: Slitter Empty
-#: locale/ipp-strings.c:3762
+#: locale/ipp-strings.c:3764
msgid "printer-state-reasons.slitter-empty"
msgstr ""
#. TRANSLATORS: Slitter Full
-#: locale/ipp-strings.c:3764
+#: locale/ipp-strings.c:3766
msgid "printer-state-reasons.slitter-full"
msgstr ""
#. TRANSLATORS: Slitter Interlock Closed
-#: locale/ipp-strings.c:3766
+#: locale/ipp-strings.c:3768
msgid "printer-state-reasons.slitter-interlock-closed"
msgstr ""
#. TRANSLATORS: Slitter Interlock Open
-#: locale/ipp-strings.c:3768
+#: locale/ipp-strings.c:3770
msgid "printer-state-reasons.slitter-interlock-open"
msgstr ""
#. TRANSLATORS: Slitter Jam
-#: locale/ipp-strings.c:3770
+#: locale/ipp-strings.c:3772
msgid "printer-state-reasons.slitter-jam"
msgstr ""
#. TRANSLATORS: Slitter Life Almost Over
-#: locale/ipp-strings.c:3772
+#: locale/ipp-strings.c:3774
msgid "printer-state-reasons.slitter-life-almost-over"
msgstr ""
#. TRANSLATORS: Slitter Life Over
-#: locale/ipp-strings.c:3774
+#: locale/ipp-strings.c:3776
msgid "printer-state-reasons.slitter-life-over"
msgstr ""
#. TRANSLATORS: Slitter Memory Exhausted
-#: locale/ipp-strings.c:3776
+#: locale/ipp-strings.c:3778
msgid "printer-state-reasons.slitter-memory-exhausted"
msgstr ""
#. TRANSLATORS: Slitter Missing
-#: locale/ipp-strings.c:3778
+#: locale/ipp-strings.c:3780
msgid "printer-state-reasons.slitter-missing"
msgstr ""
#. TRANSLATORS: Slitter Motor Failure
-#: locale/ipp-strings.c:3780
+#: locale/ipp-strings.c:3782
msgid "printer-state-reasons.slitter-motor-failure"
msgstr ""
#. TRANSLATORS: Slitter Near Limit
-#: locale/ipp-strings.c:3782
+#: locale/ipp-strings.c:3784
msgid "printer-state-reasons.slitter-near-limit"
msgstr ""
#. TRANSLATORS: Slitter Offline
-#: locale/ipp-strings.c:3784
+#: locale/ipp-strings.c:3786
msgid "printer-state-reasons.slitter-offline"
msgstr ""
#. TRANSLATORS: Slitter Opened
-#: locale/ipp-strings.c:3786
+#: locale/ipp-strings.c:3788
msgid "printer-state-reasons.slitter-opened"
msgstr ""
#. TRANSLATORS: Slitter Over Temperature
-#: locale/ipp-strings.c:3788
+#: locale/ipp-strings.c:3790
msgid "printer-state-reasons.slitter-over-temperature"
msgstr ""
#. TRANSLATORS: Slitter Power Saver
-#: locale/ipp-strings.c:3790
+#: locale/ipp-strings.c:3792
msgid "printer-state-reasons.slitter-power-saver"
msgstr ""
#. TRANSLATORS: Slitter Recoverable Failure
-#: locale/ipp-strings.c:3792
+#: locale/ipp-strings.c:3794
msgid "printer-state-reasons.slitter-recoverable-failure"
msgstr ""
#. TRANSLATORS: Slitter Recoverable Storage
-#: locale/ipp-strings.c:3794
+#: locale/ipp-strings.c:3796
msgid "printer-state-reasons.slitter-recoverable-storage"
msgstr ""
#. TRANSLATORS: Slitter Removed
-#: locale/ipp-strings.c:3796
+#: locale/ipp-strings.c:3798
msgid "printer-state-reasons.slitter-removed"
msgstr ""
#. TRANSLATORS: Slitter Resource Added
-#: locale/ipp-strings.c:3798
+#: locale/ipp-strings.c:3800
msgid "printer-state-reasons.slitter-resource-added"
msgstr ""
#. TRANSLATORS: Slitter Resource Removed
-#: locale/ipp-strings.c:3800
+#: locale/ipp-strings.c:3802
msgid "printer-state-reasons.slitter-resource-removed"
msgstr ""
#. TRANSLATORS: Slitter Thermistor Failure
-#: locale/ipp-strings.c:3802
+#: locale/ipp-strings.c:3804
msgid "printer-state-reasons.slitter-thermistor-failure"
msgstr ""
#. TRANSLATORS: Slitter Timing Failure
-#: locale/ipp-strings.c:3804
+#: locale/ipp-strings.c:3806
msgid "printer-state-reasons.slitter-timing-failure"
msgstr ""
#. TRANSLATORS: Slitter Turned Off
-#: locale/ipp-strings.c:3806
+#: locale/ipp-strings.c:3808
msgid "printer-state-reasons.slitter-turned-off"
msgstr ""
#. TRANSLATORS: Slitter Turned On
-#: locale/ipp-strings.c:3808
+#: locale/ipp-strings.c:3810
msgid "printer-state-reasons.slitter-turned-on"
msgstr ""
#. TRANSLATORS: Slitter Under Temperature
-#: locale/ipp-strings.c:3810
+#: locale/ipp-strings.c:3812
msgid "printer-state-reasons.slitter-under-temperature"
msgstr ""
#. TRANSLATORS: Slitter Unrecoverable Failure
-#: locale/ipp-strings.c:3812
+#: locale/ipp-strings.c:3814
msgid "printer-state-reasons.slitter-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Slitter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3814
+#: locale/ipp-strings.c:3816
msgid "printer-state-reasons.slitter-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Slitter Warming Up
-#: locale/ipp-strings.c:3816
+#: locale/ipp-strings.c:3818
msgid "printer-state-reasons.slitter-warming-up"
msgstr ""
#. TRANSLATORS: Spool Area Full
-#: locale/ipp-strings.c:3818
+#: locale/ipp-strings.c:3820
msgid "printer-state-reasons.spool-area-full"
msgstr ""
#. TRANSLATORS: Stacker Added
-#: locale/ipp-strings.c:3820
+#: locale/ipp-strings.c:3822
msgid "printer-state-reasons.stacker-added"
msgstr ""
#. TRANSLATORS: Stacker Almost Empty
-#: locale/ipp-strings.c:3822
+#: locale/ipp-strings.c:3824
msgid "printer-state-reasons.stacker-almost-empty"
msgstr ""
#. TRANSLATORS: Stacker Almost Full
-#: locale/ipp-strings.c:3824
+#: locale/ipp-strings.c:3826
msgid "printer-state-reasons.stacker-almost-full"
msgstr ""
#. TRANSLATORS: Stacker At Limit
-#: locale/ipp-strings.c:3826
+#: locale/ipp-strings.c:3828
msgid "printer-state-reasons.stacker-at-limit"
msgstr ""
#. TRANSLATORS: Stacker Closed
-#: locale/ipp-strings.c:3828
+#: locale/ipp-strings.c:3830
msgid "printer-state-reasons.stacker-closed"
msgstr ""
#. TRANSLATORS: Stacker Configuration Change
-#: locale/ipp-strings.c:3830
+#: locale/ipp-strings.c:3832
msgid "printer-state-reasons.stacker-configuration-change"
msgstr ""
#. TRANSLATORS: Stacker Cover Closed
-#: locale/ipp-strings.c:3832
+#: locale/ipp-strings.c:3834
msgid "printer-state-reasons.stacker-cover-closed"
msgstr ""
#. TRANSLATORS: Stacker Cover Open
-#: locale/ipp-strings.c:3834
+#: locale/ipp-strings.c:3836
msgid "printer-state-reasons.stacker-cover-open"
msgstr ""
#. TRANSLATORS: Stacker Empty
-#: locale/ipp-strings.c:3836
+#: locale/ipp-strings.c:3838
msgid "printer-state-reasons.stacker-empty"
msgstr ""
#. TRANSLATORS: Stacker Full
-#: locale/ipp-strings.c:3838
+#: locale/ipp-strings.c:3840
msgid "printer-state-reasons.stacker-full"
msgstr ""
#. TRANSLATORS: Stacker Interlock Closed
-#: locale/ipp-strings.c:3840
+#: locale/ipp-strings.c:3842
msgid "printer-state-reasons.stacker-interlock-closed"
msgstr ""
#. TRANSLATORS: Stacker Interlock Open
-#: locale/ipp-strings.c:3842
+#: locale/ipp-strings.c:3844
msgid "printer-state-reasons.stacker-interlock-open"
msgstr ""
#. TRANSLATORS: Stacker Jam
-#: locale/ipp-strings.c:3844
+#: locale/ipp-strings.c:3846
msgid "printer-state-reasons.stacker-jam"
msgstr ""
#. TRANSLATORS: Stacker Life Almost Over
-#: locale/ipp-strings.c:3846
+#: locale/ipp-strings.c:3848
msgid "printer-state-reasons.stacker-life-almost-over"
msgstr ""
#. TRANSLATORS: Stacker Life Over
-#: locale/ipp-strings.c:3848
+#: locale/ipp-strings.c:3850
msgid "printer-state-reasons.stacker-life-over"
msgstr ""
#. TRANSLATORS: Stacker Memory Exhausted
-#: locale/ipp-strings.c:3850
+#: locale/ipp-strings.c:3852
msgid "printer-state-reasons.stacker-memory-exhausted"
msgstr ""
#. TRANSLATORS: Stacker Missing
-#: locale/ipp-strings.c:3852
+#: locale/ipp-strings.c:3854
msgid "printer-state-reasons.stacker-missing"
msgstr ""
#. TRANSLATORS: Stacker Motor Failure
-#: locale/ipp-strings.c:3854
+#: locale/ipp-strings.c:3856
msgid "printer-state-reasons.stacker-motor-failure"
msgstr ""
#. TRANSLATORS: Stacker Near Limit
-#: locale/ipp-strings.c:3856
+#: locale/ipp-strings.c:3858
msgid "printer-state-reasons.stacker-near-limit"
msgstr ""
#. TRANSLATORS: Stacker Offline
-#: locale/ipp-strings.c:3858
+#: locale/ipp-strings.c:3860
msgid "printer-state-reasons.stacker-offline"
msgstr ""
#. TRANSLATORS: Stacker Opened
-#: locale/ipp-strings.c:3860
+#: locale/ipp-strings.c:3862
msgid "printer-state-reasons.stacker-opened"
msgstr ""
#. TRANSLATORS: Stacker Over Temperature
-#: locale/ipp-strings.c:3862
+#: locale/ipp-strings.c:3864
msgid "printer-state-reasons.stacker-over-temperature"
msgstr ""
#. TRANSLATORS: Stacker Power Saver
-#: locale/ipp-strings.c:3864
+#: locale/ipp-strings.c:3866
msgid "printer-state-reasons.stacker-power-saver"
msgstr ""
#. TRANSLATORS: Stacker Recoverable Failure
-#: locale/ipp-strings.c:3866
+#: locale/ipp-strings.c:3868
msgid "printer-state-reasons.stacker-recoverable-failure"
msgstr ""
#. TRANSLATORS: Stacker Recoverable Storage
-#: locale/ipp-strings.c:3868
+#: locale/ipp-strings.c:3870
msgid "printer-state-reasons.stacker-recoverable-storage"
msgstr ""
#. TRANSLATORS: Stacker Removed
-#: locale/ipp-strings.c:3870
+#: locale/ipp-strings.c:3872
msgid "printer-state-reasons.stacker-removed"
msgstr ""
#. TRANSLATORS: Stacker Resource Added
-#: locale/ipp-strings.c:3872
+#: locale/ipp-strings.c:3874
msgid "printer-state-reasons.stacker-resource-added"
msgstr ""
#. TRANSLATORS: Stacker Resource Removed
-#: locale/ipp-strings.c:3874
+#: locale/ipp-strings.c:3876
msgid "printer-state-reasons.stacker-resource-removed"
msgstr ""
#. TRANSLATORS: Stacker Thermistor Failure
-#: locale/ipp-strings.c:3876
+#: locale/ipp-strings.c:3878
msgid "printer-state-reasons.stacker-thermistor-failure"
msgstr ""
#. TRANSLATORS: Stacker Timing Failure
-#: locale/ipp-strings.c:3878
+#: locale/ipp-strings.c:3880
msgid "printer-state-reasons.stacker-timing-failure"
msgstr ""
#. TRANSLATORS: Stacker Turned Off
-#: locale/ipp-strings.c:3880
+#: locale/ipp-strings.c:3882
msgid "printer-state-reasons.stacker-turned-off"
msgstr ""
#. TRANSLATORS: Stacker Turned On
-#: locale/ipp-strings.c:3882
+#: locale/ipp-strings.c:3884
msgid "printer-state-reasons.stacker-turned-on"
msgstr ""
#. TRANSLATORS: Stacker Under Temperature
-#: locale/ipp-strings.c:3884
+#: locale/ipp-strings.c:3886
msgid "printer-state-reasons.stacker-under-temperature"
msgstr ""
#. TRANSLATORS: Stacker Unrecoverable Failure
-#: locale/ipp-strings.c:3886
+#: locale/ipp-strings.c:3888
msgid "printer-state-reasons.stacker-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Stacker Unrecoverable Storage Error
-#: locale/ipp-strings.c:3888
+#: locale/ipp-strings.c:3890
msgid "printer-state-reasons.stacker-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Stacker Warming Up
-#: locale/ipp-strings.c:3890
+#: locale/ipp-strings.c:3892
msgid "printer-state-reasons.stacker-warming-up"
msgstr ""
#. TRANSLATORS: Stapler Added
-#: locale/ipp-strings.c:3892
+#: locale/ipp-strings.c:3894
msgid "printer-state-reasons.stapler-added"
msgstr ""
#. TRANSLATORS: Stapler Almost Empty
-#: locale/ipp-strings.c:3894
+#: locale/ipp-strings.c:3896
msgid "printer-state-reasons.stapler-almost-empty"
msgstr ""
#. TRANSLATORS: Stapler Almost Full
-#: locale/ipp-strings.c:3896
+#: locale/ipp-strings.c:3898
msgid "printer-state-reasons.stapler-almost-full"
msgstr ""
#. TRANSLATORS: Stapler At Limit
-#: locale/ipp-strings.c:3898
+#: locale/ipp-strings.c:3900
msgid "printer-state-reasons.stapler-at-limit"
msgstr ""
#. TRANSLATORS: Stapler Closed
-#: locale/ipp-strings.c:3900
+#: locale/ipp-strings.c:3902
msgid "printer-state-reasons.stapler-closed"
msgstr ""
#. TRANSLATORS: Stapler Configuration Change
-#: locale/ipp-strings.c:3902
+#: locale/ipp-strings.c:3904
msgid "printer-state-reasons.stapler-configuration-change"
msgstr ""
#. TRANSLATORS: Stapler Cover Closed
-#: locale/ipp-strings.c:3904
+#: locale/ipp-strings.c:3906
msgid "printer-state-reasons.stapler-cover-closed"
msgstr ""
#. TRANSLATORS: Stapler Cover Open
-#: locale/ipp-strings.c:3906
+#: locale/ipp-strings.c:3908
msgid "printer-state-reasons.stapler-cover-open"
msgstr ""
#. TRANSLATORS: Stapler Empty
-#: locale/ipp-strings.c:3908
+#: locale/ipp-strings.c:3910
msgid "printer-state-reasons.stapler-empty"
msgstr ""
#. TRANSLATORS: Stapler Full
-#: locale/ipp-strings.c:3910
+#: locale/ipp-strings.c:3912
msgid "printer-state-reasons.stapler-full"
msgstr ""
#. TRANSLATORS: Stapler Interlock Closed
-#: locale/ipp-strings.c:3912
+#: locale/ipp-strings.c:3914
msgid "printer-state-reasons.stapler-interlock-closed"
msgstr ""
#. TRANSLATORS: Stapler Interlock Open
-#: locale/ipp-strings.c:3914
+#: locale/ipp-strings.c:3916
msgid "printer-state-reasons.stapler-interlock-open"
msgstr ""
#. TRANSLATORS: Stapler Jam
-#: locale/ipp-strings.c:3916
+#: locale/ipp-strings.c:3918
msgid "printer-state-reasons.stapler-jam"
msgstr ""
#. TRANSLATORS: Stapler Life Almost Over
-#: locale/ipp-strings.c:3918
+#: locale/ipp-strings.c:3920
msgid "printer-state-reasons.stapler-life-almost-over"
msgstr ""
#. TRANSLATORS: Stapler Life Over
-#: locale/ipp-strings.c:3920
+#: locale/ipp-strings.c:3922
msgid "printer-state-reasons.stapler-life-over"
msgstr ""
#. TRANSLATORS: Stapler Memory Exhausted
-#: locale/ipp-strings.c:3922
+#: locale/ipp-strings.c:3924
msgid "printer-state-reasons.stapler-memory-exhausted"
msgstr ""
#. TRANSLATORS: Stapler Missing
-#: locale/ipp-strings.c:3924
+#: locale/ipp-strings.c:3926
msgid "printer-state-reasons.stapler-missing"
msgstr ""
#. TRANSLATORS: Stapler Motor Failure
-#: locale/ipp-strings.c:3926
+#: locale/ipp-strings.c:3928
msgid "printer-state-reasons.stapler-motor-failure"
msgstr ""
#. TRANSLATORS: Stapler Near Limit
-#: locale/ipp-strings.c:3928
+#: locale/ipp-strings.c:3930
msgid "printer-state-reasons.stapler-near-limit"
msgstr ""
#. TRANSLATORS: Stapler Offline
-#: locale/ipp-strings.c:3930
+#: locale/ipp-strings.c:3932
msgid "printer-state-reasons.stapler-offline"
msgstr ""
#. TRANSLATORS: Stapler Opened
-#: locale/ipp-strings.c:3932
+#: locale/ipp-strings.c:3934
msgid "printer-state-reasons.stapler-opened"
msgstr ""
#. TRANSLATORS: Stapler Over Temperature
-#: locale/ipp-strings.c:3934
+#: locale/ipp-strings.c:3936
msgid "printer-state-reasons.stapler-over-temperature"
msgstr ""
#. TRANSLATORS: Stapler Power Saver
-#: locale/ipp-strings.c:3936
+#: locale/ipp-strings.c:3938
msgid "printer-state-reasons.stapler-power-saver"
msgstr ""
#. TRANSLATORS: Stapler Recoverable Failure
-#: locale/ipp-strings.c:3938
+#: locale/ipp-strings.c:3940
msgid "printer-state-reasons.stapler-recoverable-failure"
msgstr ""
#. TRANSLATORS: Stapler Recoverable Storage
-#: locale/ipp-strings.c:3940
+#: locale/ipp-strings.c:3942
msgid "printer-state-reasons.stapler-recoverable-storage"
msgstr ""
#. TRANSLATORS: Stapler Removed
-#: locale/ipp-strings.c:3942
+#: locale/ipp-strings.c:3944
msgid "printer-state-reasons.stapler-removed"
msgstr ""
#. TRANSLATORS: Stapler Resource Added
-#: locale/ipp-strings.c:3944
+#: locale/ipp-strings.c:3946
msgid "printer-state-reasons.stapler-resource-added"
msgstr ""
#. TRANSLATORS: Stapler Resource Removed
-#: locale/ipp-strings.c:3946
+#: locale/ipp-strings.c:3948
msgid "printer-state-reasons.stapler-resource-removed"
msgstr ""
#. TRANSLATORS: Stapler Thermistor Failure
-#: locale/ipp-strings.c:3948
+#: locale/ipp-strings.c:3950
msgid "printer-state-reasons.stapler-thermistor-failure"
msgstr ""
#. TRANSLATORS: Stapler Timing Failure
-#: locale/ipp-strings.c:3950
+#: locale/ipp-strings.c:3952
msgid "printer-state-reasons.stapler-timing-failure"
msgstr ""
#. TRANSLATORS: Stapler Turned Off
-#: locale/ipp-strings.c:3952
+#: locale/ipp-strings.c:3954
msgid "printer-state-reasons.stapler-turned-off"
msgstr ""
#. TRANSLATORS: Stapler Turned On
-#: locale/ipp-strings.c:3954
+#: locale/ipp-strings.c:3956
msgid "printer-state-reasons.stapler-turned-on"
msgstr ""
#. TRANSLATORS: Stapler Under Temperature
-#: locale/ipp-strings.c:3956
+#: locale/ipp-strings.c:3958
msgid "printer-state-reasons.stapler-under-temperature"
msgstr ""
#. TRANSLATORS: Stapler Unrecoverable Failure
-#: locale/ipp-strings.c:3958
+#: locale/ipp-strings.c:3960
msgid "printer-state-reasons.stapler-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Stapler Unrecoverable Storage Error
-#: locale/ipp-strings.c:3960
+#: locale/ipp-strings.c:3962
msgid "printer-state-reasons.stapler-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Stapler Warming Up
-#: locale/ipp-strings.c:3962
+#: locale/ipp-strings.c:3964
msgid "printer-state-reasons.stapler-warming-up"
msgstr ""
#. TRANSLATORS: Stitcher Added
-#: locale/ipp-strings.c:3964
+#: locale/ipp-strings.c:3966
msgid "printer-state-reasons.stitcher-added"
msgstr ""
#. TRANSLATORS: Stitcher Almost Empty
-#: locale/ipp-strings.c:3966
+#: locale/ipp-strings.c:3968
msgid "printer-state-reasons.stitcher-almost-empty"
msgstr ""
#. TRANSLATORS: Stitcher Almost Full
-#: locale/ipp-strings.c:3968
+#: locale/ipp-strings.c:3970
msgid "printer-state-reasons.stitcher-almost-full"
msgstr ""
#. TRANSLATORS: Stitcher At Limit
-#: locale/ipp-strings.c:3970
+#: locale/ipp-strings.c:3972
msgid "printer-state-reasons.stitcher-at-limit"
msgstr ""
#. TRANSLATORS: Stitcher Closed
-#: locale/ipp-strings.c:3972
+#: locale/ipp-strings.c:3974
msgid "printer-state-reasons.stitcher-closed"
msgstr ""
#. TRANSLATORS: Stitcher Configuration Change
-#: locale/ipp-strings.c:3974
+#: locale/ipp-strings.c:3976
msgid "printer-state-reasons.stitcher-configuration-change"
msgstr ""
#. TRANSLATORS: Stitcher Cover Closed
-#: locale/ipp-strings.c:3976
+#: locale/ipp-strings.c:3978
msgid "printer-state-reasons.stitcher-cover-closed"
msgstr ""
#. TRANSLATORS: Stitcher Cover Open
-#: locale/ipp-strings.c:3978
+#: locale/ipp-strings.c:3980
msgid "printer-state-reasons.stitcher-cover-open"
msgstr ""
#. TRANSLATORS: Stitcher Empty
-#: locale/ipp-strings.c:3980
+#: locale/ipp-strings.c:3982
msgid "printer-state-reasons.stitcher-empty"
msgstr ""
#. TRANSLATORS: Stitcher Full
-#: locale/ipp-strings.c:3982
+#: locale/ipp-strings.c:3984
msgid "printer-state-reasons.stitcher-full"
msgstr ""
#. TRANSLATORS: Stitcher Interlock Closed
-#: locale/ipp-strings.c:3984
+#: locale/ipp-strings.c:3986
msgid "printer-state-reasons.stitcher-interlock-closed"
msgstr ""
#. TRANSLATORS: Stitcher Interlock Open
-#: locale/ipp-strings.c:3986
+#: locale/ipp-strings.c:3988
msgid "printer-state-reasons.stitcher-interlock-open"
msgstr ""
#. TRANSLATORS: Stitcher Jam
-#: locale/ipp-strings.c:3988
+#: locale/ipp-strings.c:3990
msgid "printer-state-reasons.stitcher-jam"
msgstr ""
#. TRANSLATORS: Stitcher Life Almost Over
-#: locale/ipp-strings.c:3990
+#: locale/ipp-strings.c:3992
msgid "printer-state-reasons.stitcher-life-almost-over"
msgstr ""
#. TRANSLATORS: Stitcher Life Over
-#: locale/ipp-strings.c:3992
+#: locale/ipp-strings.c:3994
msgid "printer-state-reasons.stitcher-life-over"
msgstr ""
#. TRANSLATORS: Stitcher Memory Exhausted
-#: locale/ipp-strings.c:3994
+#: locale/ipp-strings.c:3996
msgid "printer-state-reasons.stitcher-memory-exhausted"
msgstr ""
#. TRANSLATORS: Stitcher Missing
-#: locale/ipp-strings.c:3996
+#: locale/ipp-strings.c:3998
msgid "printer-state-reasons.stitcher-missing"
msgstr ""
#. TRANSLATORS: Stitcher Motor Failure
-#: locale/ipp-strings.c:3998
+#: locale/ipp-strings.c:4000
msgid "printer-state-reasons.stitcher-motor-failure"
msgstr ""
#. TRANSLATORS: Stitcher Near Limit
-#: locale/ipp-strings.c:4000
+#: locale/ipp-strings.c:4002
msgid "printer-state-reasons.stitcher-near-limit"
msgstr ""
#. TRANSLATORS: Stitcher Offline
-#: locale/ipp-strings.c:4002
+#: locale/ipp-strings.c:4004
msgid "printer-state-reasons.stitcher-offline"
msgstr ""
#. TRANSLATORS: Stitcher Opened
-#: locale/ipp-strings.c:4004
+#: locale/ipp-strings.c:4006
msgid "printer-state-reasons.stitcher-opened"
msgstr ""
#. TRANSLATORS: Stitcher Over Temperature
-#: locale/ipp-strings.c:4006
+#: locale/ipp-strings.c:4008
msgid "printer-state-reasons.stitcher-over-temperature"
msgstr ""
#. TRANSLATORS: Stitcher Power Saver
-#: locale/ipp-strings.c:4008
+#: locale/ipp-strings.c:4010
msgid "printer-state-reasons.stitcher-power-saver"
msgstr ""
#. TRANSLATORS: Stitcher Recoverable Failure
-#: locale/ipp-strings.c:4010
+#: locale/ipp-strings.c:4012
msgid "printer-state-reasons.stitcher-recoverable-failure"
msgstr ""
#. TRANSLATORS: Stitcher Recoverable Storage
-#: locale/ipp-strings.c:4012
+#: locale/ipp-strings.c:4014
msgid "printer-state-reasons.stitcher-recoverable-storage"
msgstr ""
#. TRANSLATORS: Stitcher Removed
-#: locale/ipp-strings.c:4014
+#: locale/ipp-strings.c:4016
msgid "printer-state-reasons.stitcher-removed"
msgstr ""
#. TRANSLATORS: Stitcher Resource Added
-#: locale/ipp-strings.c:4016
+#: locale/ipp-strings.c:4018
msgid "printer-state-reasons.stitcher-resource-added"
msgstr ""
#. TRANSLATORS: Stitcher Resource Removed
-#: locale/ipp-strings.c:4018
+#: locale/ipp-strings.c:4020
msgid "printer-state-reasons.stitcher-resource-removed"
msgstr ""
#. TRANSLATORS: Stitcher Thermistor Failure
-#: locale/ipp-strings.c:4020
+#: locale/ipp-strings.c:4022
msgid "printer-state-reasons.stitcher-thermistor-failure"
msgstr ""
#. TRANSLATORS: Stitcher Timing Failure
-#: locale/ipp-strings.c:4022
+#: locale/ipp-strings.c:4024
msgid "printer-state-reasons.stitcher-timing-failure"
msgstr ""
#. TRANSLATORS: Stitcher Turned Off
-#: locale/ipp-strings.c:4024
+#: locale/ipp-strings.c:4026
msgid "printer-state-reasons.stitcher-turned-off"
msgstr ""
#. TRANSLATORS: Stitcher Turned On
-#: locale/ipp-strings.c:4026
+#: locale/ipp-strings.c:4028
msgid "printer-state-reasons.stitcher-turned-on"
msgstr ""
#. TRANSLATORS: Stitcher Under Temperature
-#: locale/ipp-strings.c:4028
+#: locale/ipp-strings.c:4030
msgid "printer-state-reasons.stitcher-under-temperature"
msgstr ""
#. TRANSLATORS: Stitcher Unrecoverable Failure
-#: locale/ipp-strings.c:4030
+#: locale/ipp-strings.c:4032
msgid "printer-state-reasons.stitcher-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Stitcher Unrecoverable Storage Error
-#: locale/ipp-strings.c:4032
+#: locale/ipp-strings.c:4034
msgid "printer-state-reasons.stitcher-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Stitcher Warming Up
-#: locale/ipp-strings.c:4034
+#: locale/ipp-strings.c:4036
msgid "printer-state-reasons.stitcher-warming-up"
msgstr ""
#. TRANSLATORS: Partially stopped
-#: locale/ipp-strings.c:4036
+#: locale/ipp-strings.c:4038
msgid "printer-state-reasons.stopped-partly"
msgstr ""
#. TRANSLATORS: Stopping
-#: locale/ipp-strings.c:4038
+#: locale/ipp-strings.c:4040
msgid "printer-state-reasons.stopping"
msgstr ""
#. TRANSLATORS: Subunit Added
-#: locale/ipp-strings.c:4040
+#: locale/ipp-strings.c:4042
msgid "printer-state-reasons.subunit-added"
msgstr ""
#. TRANSLATORS: Subunit Almost Empty
-#: locale/ipp-strings.c:4042
+#: locale/ipp-strings.c:4044
msgid "printer-state-reasons.subunit-almost-empty"
msgstr ""
#. TRANSLATORS: Subunit Almost Full
-#: locale/ipp-strings.c:4044
+#: locale/ipp-strings.c:4046
msgid "printer-state-reasons.subunit-almost-full"
msgstr ""
#. TRANSLATORS: Subunit At Limit
-#: locale/ipp-strings.c:4046
+#: locale/ipp-strings.c:4048
msgid "printer-state-reasons.subunit-at-limit"
msgstr ""
#. TRANSLATORS: Subunit Closed
-#: locale/ipp-strings.c:4048
+#: locale/ipp-strings.c:4050
msgid "printer-state-reasons.subunit-closed"
msgstr ""
#. TRANSLATORS: Subunit Cooling Down
-#: locale/ipp-strings.c:4050
+#: locale/ipp-strings.c:4052
msgid "printer-state-reasons.subunit-cooling-down"
msgstr ""
#. TRANSLATORS: Subunit Empty
-#: locale/ipp-strings.c:4052
+#: locale/ipp-strings.c:4054
msgid "printer-state-reasons.subunit-empty"
msgstr ""
#. TRANSLATORS: Subunit Full
-#: locale/ipp-strings.c:4054
+#: locale/ipp-strings.c:4056
msgid "printer-state-reasons.subunit-full"
msgstr ""
#. TRANSLATORS: Subunit Life Almost Over
-#: locale/ipp-strings.c:4056
+#: locale/ipp-strings.c:4058
msgid "printer-state-reasons.subunit-life-almost-over"
msgstr ""
#. TRANSLATORS: Subunit Life Over
-#: locale/ipp-strings.c:4058
+#: locale/ipp-strings.c:4060
msgid "printer-state-reasons.subunit-life-over"
msgstr ""
#. TRANSLATORS: Subunit Memory Exhausted
-#: locale/ipp-strings.c:4060
+#: locale/ipp-strings.c:4062
msgid "printer-state-reasons.subunit-memory-exhausted"
msgstr ""
#. TRANSLATORS: Subunit Missing
-#: locale/ipp-strings.c:4062
+#: locale/ipp-strings.c:4064
msgid "printer-state-reasons.subunit-missing"
msgstr ""
#. TRANSLATORS: Subunit Motor Failure
-#: locale/ipp-strings.c:4064
+#: locale/ipp-strings.c:4066
msgid "printer-state-reasons.subunit-motor-failure"
msgstr ""
#. TRANSLATORS: Subunit Near Limit
-#: locale/ipp-strings.c:4066
+#: locale/ipp-strings.c:4068
msgid "printer-state-reasons.subunit-near-limit"
msgstr ""
#. TRANSLATORS: Subunit Offline
-#: locale/ipp-strings.c:4068
+#: locale/ipp-strings.c:4070
msgid "printer-state-reasons.subunit-offline"
msgstr ""
#. TRANSLATORS: Subunit Opened
-#: locale/ipp-strings.c:4070
+#: locale/ipp-strings.c:4072
msgid "printer-state-reasons.subunit-opened"
msgstr ""
#. TRANSLATORS: Subunit Over Temperature
-#: locale/ipp-strings.c:4072
+#: locale/ipp-strings.c:4074
msgid "printer-state-reasons.subunit-over-temperature"
msgstr ""
#. TRANSLATORS: Subunit Power Saver
-#: locale/ipp-strings.c:4074
+#: locale/ipp-strings.c:4076
msgid "printer-state-reasons.subunit-power-saver"
msgstr ""
#. TRANSLATORS: Subunit Recoverable Failure
-#: locale/ipp-strings.c:4076
+#: locale/ipp-strings.c:4078
msgid "printer-state-reasons.subunit-recoverable-failure"
msgstr ""
#. TRANSLATORS: Subunit Recoverable Storage
-#: locale/ipp-strings.c:4078
+#: locale/ipp-strings.c:4080
msgid "printer-state-reasons.subunit-recoverable-storage"
msgstr ""
#. TRANSLATORS: Subunit Removed
-#: locale/ipp-strings.c:4080
+#: locale/ipp-strings.c:4082
msgid "printer-state-reasons.subunit-removed"
msgstr ""
#. TRANSLATORS: Subunit Resource Added
-#: locale/ipp-strings.c:4082
+#: locale/ipp-strings.c:4084
msgid "printer-state-reasons.subunit-resource-added"
msgstr ""
#. TRANSLATORS: Subunit Resource Removed
-#: locale/ipp-strings.c:4084
+#: locale/ipp-strings.c:4086
msgid "printer-state-reasons.subunit-resource-removed"
msgstr ""
#. TRANSLATORS: Subunit Thermistor Failure
-#: locale/ipp-strings.c:4086
+#: locale/ipp-strings.c:4088
msgid "printer-state-reasons.subunit-thermistor-failure"
msgstr ""
#. TRANSLATORS: Subunit Timing Failure
-#: locale/ipp-strings.c:4088
+#: locale/ipp-strings.c:4090
msgid "printer-state-reasons.subunit-timing-Failure"
msgstr ""
#. TRANSLATORS: Subunit Turned Off
-#: locale/ipp-strings.c:4090
+#: locale/ipp-strings.c:4092
msgid "printer-state-reasons.subunit-turned-off"
msgstr ""
#. TRANSLATORS: Subunit Turned On
-#: locale/ipp-strings.c:4092
+#: locale/ipp-strings.c:4094
msgid "printer-state-reasons.subunit-turned-on"
msgstr ""
#. TRANSLATORS: Subunit Under Temperature
-#: locale/ipp-strings.c:4094
+#: locale/ipp-strings.c:4096
msgid "printer-state-reasons.subunit-under-temperature"
msgstr ""
#. TRANSLATORS: Subunit Unrecoverable Failure
-#: locale/ipp-strings.c:4096
+#: locale/ipp-strings.c:4098
msgid "printer-state-reasons.subunit-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Subunit Unrecoverable Storage
-#: locale/ipp-strings.c:4098
+#: locale/ipp-strings.c:4100
msgid "printer-state-reasons.subunit-unrecoverable-storage"
msgstr ""
#. TRANSLATORS: Subunit Warming Up
-#: locale/ipp-strings.c:4100
+#: locale/ipp-strings.c:4102
msgid "printer-state-reasons.subunit-warming-up"
msgstr ""
#. TRANSLATORS: Printer stopped responding
-#: locale/ipp-strings.c:4102
+#: locale/ipp-strings.c:4104
msgid "printer-state-reasons.timed-out"
msgstr ""
#. TRANSLATORS: Out of toner
-#: locale/ipp-strings.c:4104
+#: locale/ipp-strings.c:4106
msgid "printer-state-reasons.toner-empty"
msgstr ""
#. TRANSLATORS: Toner low
-#: locale/ipp-strings.c:4106
+#: locale/ipp-strings.c:4108
msgid "printer-state-reasons.toner-low"
msgstr ""
#. TRANSLATORS: Trimmer Added
-#: locale/ipp-strings.c:4108
+#: locale/ipp-strings.c:4110
msgid "printer-state-reasons.trimmer-added"
msgstr ""
#. TRANSLATORS: Trimmer Almost Empty
-#: locale/ipp-strings.c:4110
+#: locale/ipp-strings.c:4112
msgid "printer-state-reasons.trimmer-almost-empty"
msgstr ""
#. TRANSLATORS: Trimmer Almost Full
-#: locale/ipp-strings.c:4112
+#: locale/ipp-strings.c:4114
msgid "printer-state-reasons.trimmer-almost-full"
msgstr ""
#. TRANSLATORS: Trimmer At Limit
-#: locale/ipp-strings.c:4114
+#: locale/ipp-strings.c:4116
msgid "printer-state-reasons.trimmer-at-limit"
msgstr ""
#. TRANSLATORS: Trimmer Closed
-#: locale/ipp-strings.c:4116
+#: locale/ipp-strings.c:4118
msgid "printer-state-reasons.trimmer-closed"
msgstr ""
#. TRANSLATORS: Trimmer Configuration Change
-#: locale/ipp-strings.c:4118
+#: locale/ipp-strings.c:4120
msgid "printer-state-reasons.trimmer-configuration-change"
msgstr ""
#. TRANSLATORS: Trimmer Cover Closed
-#: locale/ipp-strings.c:4120
+#: locale/ipp-strings.c:4122
msgid "printer-state-reasons.trimmer-cover-closed"
msgstr ""
#. TRANSLATORS: Trimmer Cover Open
-#: locale/ipp-strings.c:4122
+#: locale/ipp-strings.c:4124
msgid "printer-state-reasons.trimmer-cover-open"
msgstr ""
#. TRANSLATORS: Trimmer Empty
-#: locale/ipp-strings.c:4124
+#: locale/ipp-strings.c:4126
msgid "printer-state-reasons.trimmer-empty"
msgstr ""
#. TRANSLATORS: Trimmer Full
-#: locale/ipp-strings.c:4126
+#: locale/ipp-strings.c:4128
msgid "printer-state-reasons.trimmer-full"
msgstr ""
#. TRANSLATORS: Trimmer Interlock Closed
-#: locale/ipp-strings.c:4128
+#: locale/ipp-strings.c:4130
msgid "printer-state-reasons.trimmer-interlock-closed"
msgstr ""
#. TRANSLATORS: Trimmer Interlock Open
-#: locale/ipp-strings.c:4130
+#: locale/ipp-strings.c:4132
msgid "printer-state-reasons.trimmer-interlock-open"
msgstr ""
#. TRANSLATORS: Trimmer Jam
-#: locale/ipp-strings.c:4132
+#: locale/ipp-strings.c:4134
msgid "printer-state-reasons.trimmer-jam"
msgstr ""
#. TRANSLATORS: Trimmer Life Almost Over
-#: locale/ipp-strings.c:4134
+#: locale/ipp-strings.c:4136
msgid "printer-state-reasons.trimmer-life-almost-over"
msgstr ""
#. TRANSLATORS: Trimmer Life Over
-#: locale/ipp-strings.c:4136
+#: locale/ipp-strings.c:4138
msgid "printer-state-reasons.trimmer-life-over"
msgstr ""
#. TRANSLATORS: Trimmer Memory Exhausted
-#: locale/ipp-strings.c:4138
+#: locale/ipp-strings.c:4140
msgid "printer-state-reasons.trimmer-memory-exhausted"
msgstr ""
#. TRANSLATORS: Trimmer Missing
-#: locale/ipp-strings.c:4140
+#: locale/ipp-strings.c:4142
msgid "printer-state-reasons.trimmer-missing"
msgstr ""
#. TRANSLATORS: Trimmer Motor Failure
-#: locale/ipp-strings.c:4142
+#: locale/ipp-strings.c:4144
msgid "printer-state-reasons.trimmer-motor-failure"
msgstr ""
#. TRANSLATORS: Trimmer Near Limit
-#: locale/ipp-strings.c:4144
+#: locale/ipp-strings.c:4146
msgid "printer-state-reasons.trimmer-near-limit"
msgstr ""
#. TRANSLATORS: Trimmer Offline
-#: locale/ipp-strings.c:4146
+#: locale/ipp-strings.c:4148
msgid "printer-state-reasons.trimmer-offline"
msgstr ""
#. TRANSLATORS: Trimmer Opened
-#: locale/ipp-strings.c:4148
+#: locale/ipp-strings.c:4150
msgid "printer-state-reasons.trimmer-opened"
msgstr ""
#. TRANSLATORS: Trimmer Over Temperature
-#: locale/ipp-strings.c:4150
+#: locale/ipp-strings.c:4152
msgid "printer-state-reasons.trimmer-over-temperature"
msgstr ""
#. TRANSLATORS: Trimmer Power Saver
-#: locale/ipp-strings.c:4152
+#: locale/ipp-strings.c:4154
msgid "printer-state-reasons.trimmer-power-saver"
msgstr ""
#. TRANSLATORS: Trimmer Recoverable Failure
-#: locale/ipp-strings.c:4154
+#: locale/ipp-strings.c:4156
msgid "printer-state-reasons.trimmer-recoverable-failure"
msgstr ""
#. TRANSLATORS: Trimmer Recoverable Storage
-#: locale/ipp-strings.c:4156
+#: locale/ipp-strings.c:4158
msgid "printer-state-reasons.trimmer-recoverable-storage"
msgstr ""
#. TRANSLATORS: Trimmer Removed
-#: locale/ipp-strings.c:4158
+#: locale/ipp-strings.c:4160
msgid "printer-state-reasons.trimmer-removed"
msgstr ""
#. TRANSLATORS: Trimmer Resource Added
-#: locale/ipp-strings.c:4160
+#: locale/ipp-strings.c:4162
msgid "printer-state-reasons.trimmer-resource-added"
msgstr ""
#. TRANSLATORS: Trimmer Resource Removed
-#: locale/ipp-strings.c:4162
+#: locale/ipp-strings.c:4164
msgid "printer-state-reasons.trimmer-resource-removed"
msgstr ""
#. TRANSLATORS: Trimmer Thermistor Failure
-#: locale/ipp-strings.c:4164
+#: locale/ipp-strings.c:4166
msgid "printer-state-reasons.trimmer-thermistor-failure"
msgstr ""
#. TRANSLATORS: Trimmer Timing Failure
-#: locale/ipp-strings.c:4166
+#: locale/ipp-strings.c:4168
msgid "printer-state-reasons.trimmer-timing-failure"
msgstr ""
#. TRANSLATORS: Trimmer Turned Off
-#: locale/ipp-strings.c:4168
+#: locale/ipp-strings.c:4170
msgid "printer-state-reasons.trimmer-turned-off"
msgstr ""
#. TRANSLATORS: Trimmer Turned On
-#: locale/ipp-strings.c:4170
+#: locale/ipp-strings.c:4172
msgid "printer-state-reasons.trimmer-turned-on"
msgstr ""
#. TRANSLATORS: Trimmer Under Temperature
-#: locale/ipp-strings.c:4172
+#: locale/ipp-strings.c:4174
msgid "printer-state-reasons.trimmer-under-temperature"
msgstr ""
#. TRANSLATORS: Trimmer Unrecoverable Failure
-#: locale/ipp-strings.c:4174
+#: locale/ipp-strings.c:4176
msgid "printer-state-reasons.trimmer-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Trimmer Unrecoverable Storage Error
-#: locale/ipp-strings.c:4176
+#: locale/ipp-strings.c:4178
msgid "printer-state-reasons.trimmer-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Trimmer Warming Up
-#: locale/ipp-strings.c:4178
+#: locale/ipp-strings.c:4180
msgid "printer-state-reasons.trimmer-warming-up"
msgstr ""
#. TRANSLATORS: Unknown
-#: locale/ipp-strings.c:4180
+#: locale/ipp-strings.c:4182
msgid "printer-state-reasons.unknown"
msgstr ""
#. TRANSLATORS: Wrapper Added
-#: locale/ipp-strings.c:4182
+#: locale/ipp-strings.c:4184
msgid "printer-state-reasons.wrapper-added"
msgstr ""
#. TRANSLATORS: Wrapper Almost Empty
-#: locale/ipp-strings.c:4184
+#: locale/ipp-strings.c:4186
msgid "printer-state-reasons.wrapper-almost-empty"
msgstr ""
#. TRANSLATORS: Wrapper Almost Full
-#: locale/ipp-strings.c:4186
+#: locale/ipp-strings.c:4188
msgid "printer-state-reasons.wrapper-almost-full"
msgstr ""
#. TRANSLATORS: Wrapper At Limit
-#: locale/ipp-strings.c:4188
+#: locale/ipp-strings.c:4190
msgid "printer-state-reasons.wrapper-at-limit"
msgstr ""
#. TRANSLATORS: Wrapper Closed
-#: locale/ipp-strings.c:4190
+#: locale/ipp-strings.c:4192
msgid "printer-state-reasons.wrapper-closed"
msgstr ""
#. TRANSLATORS: Wrapper Configuration Change
-#: locale/ipp-strings.c:4192
+#: locale/ipp-strings.c:4194
msgid "printer-state-reasons.wrapper-configuration-change"
msgstr ""
#. TRANSLATORS: Wrapper Cover Closed
-#: locale/ipp-strings.c:4194
+#: locale/ipp-strings.c:4196
msgid "printer-state-reasons.wrapper-cover-closed"
msgstr ""
#. TRANSLATORS: Wrapper Cover Open
-#: locale/ipp-strings.c:4196
+#: locale/ipp-strings.c:4198
msgid "printer-state-reasons.wrapper-cover-open"
msgstr ""
#. TRANSLATORS: Wrapper Empty
-#: locale/ipp-strings.c:4198
+#: locale/ipp-strings.c:4200
msgid "printer-state-reasons.wrapper-empty"
msgstr ""
#. TRANSLATORS: Wrapper Full
-#: locale/ipp-strings.c:4200
+#: locale/ipp-strings.c:4202
msgid "printer-state-reasons.wrapper-full"
msgstr ""
#. TRANSLATORS: Wrapper Interlock Closed
-#: locale/ipp-strings.c:4202
+#: locale/ipp-strings.c:4204
msgid "printer-state-reasons.wrapper-interlock-closed"
msgstr ""
#. TRANSLATORS: Wrapper Interlock Open
-#: locale/ipp-strings.c:4204
+#: locale/ipp-strings.c:4206
msgid "printer-state-reasons.wrapper-interlock-open"
msgstr ""
#. TRANSLATORS: Wrapper Jam
-#: locale/ipp-strings.c:4206
+#: locale/ipp-strings.c:4208
msgid "printer-state-reasons.wrapper-jam"
msgstr ""
#. TRANSLATORS: Wrapper Life Almost Over
-#: locale/ipp-strings.c:4208
+#: locale/ipp-strings.c:4210
msgid "printer-state-reasons.wrapper-life-almost-over"
msgstr ""
#. TRANSLATORS: Wrapper Life Over
-#: locale/ipp-strings.c:4210
+#: locale/ipp-strings.c:4212
msgid "printer-state-reasons.wrapper-life-over"
msgstr ""
#. TRANSLATORS: Wrapper Memory Exhausted
-#: locale/ipp-strings.c:4212
+#: locale/ipp-strings.c:4214
msgid "printer-state-reasons.wrapper-memory-exhausted"
msgstr ""
#. TRANSLATORS: Wrapper Missing
-#: locale/ipp-strings.c:4214
+#: locale/ipp-strings.c:4216
msgid "printer-state-reasons.wrapper-missing"
msgstr ""
#. TRANSLATORS: Wrapper Motor Failure
-#: locale/ipp-strings.c:4216
+#: locale/ipp-strings.c:4218
msgid "printer-state-reasons.wrapper-motor-failure"
msgstr ""
#. TRANSLATORS: Wrapper Near Limit
-#: locale/ipp-strings.c:4218
+#: locale/ipp-strings.c:4220
msgid "printer-state-reasons.wrapper-near-limit"
msgstr ""
#. TRANSLATORS: Wrapper Offline
-#: locale/ipp-strings.c:4220
+#: locale/ipp-strings.c:4222
msgid "printer-state-reasons.wrapper-offline"
msgstr ""
#. TRANSLATORS: Wrapper Opened
-#: locale/ipp-strings.c:4222
+#: locale/ipp-strings.c:4224
msgid "printer-state-reasons.wrapper-opened"
msgstr ""
#. TRANSLATORS: Wrapper Over Temperature
-#: locale/ipp-strings.c:4224
+#: locale/ipp-strings.c:4226
msgid "printer-state-reasons.wrapper-over-temperature"
msgstr ""
#. TRANSLATORS: Wrapper Power Saver
-#: locale/ipp-strings.c:4226
+#: locale/ipp-strings.c:4228
msgid "printer-state-reasons.wrapper-power-saver"
msgstr ""
#. TRANSLATORS: Wrapper Recoverable Failure
-#: locale/ipp-strings.c:4228
+#: locale/ipp-strings.c:4230
msgid "printer-state-reasons.wrapper-recoverable-failure"
msgstr ""
#. TRANSLATORS: Wrapper Recoverable Storage
-#: locale/ipp-strings.c:4230
+#: locale/ipp-strings.c:4232
msgid "printer-state-reasons.wrapper-recoverable-storage"
msgstr ""
#. TRANSLATORS: Wrapper Removed
-#: locale/ipp-strings.c:4232
+#: locale/ipp-strings.c:4234
msgid "printer-state-reasons.wrapper-removed"
msgstr ""
#. TRANSLATORS: Wrapper Resource Added
-#: locale/ipp-strings.c:4234
+#: locale/ipp-strings.c:4236
msgid "printer-state-reasons.wrapper-resource-added"
msgstr ""
#. TRANSLATORS: Wrapper Resource Removed
-#: locale/ipp-strings.c:4236
+#: locale/ipp-strings.c:4238
msgid "printer-state-reasons.wrapper-resource-removed"
msgstr ""
#. TRANSLATORS: Wrapper Thermistor Failure
-#: locale/ipp-strings.c:4238
+#: locale/ipp-strings.c:4240
msgid "printer-state-reasons.wrapper-thermistor-failure"
msgstr ""
#. TRANSLATORS: Wrapper Timing Failure
-#: locale/ipp-strings.c:4240
+#: locale/ipp-strings.c:4242
msgid "printer-state-reasons.wrapper-timing-failure"
msgstr ""
#. TRANSLATORS: Wrapper Turned Off
-#: locale/ipp-strings.c:4242
+#: locale/ipp-strings.c:4244
msgid "printer-state-reasons.wrapper-turned-off"
msgstr ""
#. TRANSLATORS: Wrapper Turned On
-#: locale/ipp-strings.c:4244
+#: locale/ipp-strings.c:4246
msgid "printer-state-reasons.wrapper-turned-on"
msgstr ""
#. TRANSLATORS: Wrapper Under Temperature
-#: locale/ipp-strings.c:4246
+#: locale/ipp-strings.c:4248
msgid "printer-state-reasons.wrapper-under-temperature"
msgstr ""
#. TRANSLATORS: Wrapper Unrecoverable Failure
-#: locale/ipp-strings.c:4248
+#: locale/ipp-strings.c:4250
msgid "printer-state-reasons.wrapper-unrecoverable-failure"
msgstr ""
#. TRANSLATORS: Wrapper Unrecoverable Storage Error
-#: locale/ipp-strings.c:4250
+#: locale/ipp-strings.c:4252
msgid "printer-state-reasons.wrapper-unrecoverable-storage-error"
msgstr ""
#. TRANSLATORS: Wrapper Warming Up
-#: locale/ipp-strings.c:4252
+#: locale/ipp-strings.c:4254
msgid "printer-state-reasons.wrapper-warming-up"
msgstr ""
#. TRANSLATORS: Idle
-#: locale/ipp-strings.c:4254
+#: locale/ipp-strings.c:4256
msgid "printer-state.3"
msgstr ""
#. TRANSLATORS: Processing
-#: locale/ipp-strings.c:4256
+#: locale/ipp-strings.c:4258
msgid "printer-state.4"
msgstr ""
#. TRANSLATORS: Stopped
-#: locale/ipp-strings.c:4258
+#: locale/ipp-strings.c:4260
msgid "printer-state.5"
msgstr ""
#. TRANSLATORS: Printer Uptime
-#: locale/ipp-strings.c:4260
+#: locale/ipp-strings.c:4262
msgid "printer-up-time"
msgstr ""
msgstr ""
#. TRANSLATORS: Proof Print
-#: locale/ipp-strings.c:4262
+#: locale/ipp-strings.c:4264
msgid "proof-print"
msgstr ""
#. TRANSLATORS: Proof Print Copies
-#: locale/ipp-strings.c:4264
+#: locale/ipp-strings.c:4266
msgid "proof-print-copies"
msgstr ""
#. TRANSLATORS: Punching
-#: locale/ipp-strings.c:4266
+#: locale/ipp-strings.c:4268
msgid "punching"
msgstr ""
#. TRANSLATORS: Punching Locations
-#: locale/ipp-strings.c:4268
+#: locale/ipp-strings.c:4270
msgid "punching-locations"
msgstr ""
#. TRANSLATORS: Punching Offset
-#: locale/ipp-strings.c:4270
+#: locale/ipp-strings.c:4272
msgid "punching-offset"
msgstr ""
#. TRANSLATORS: Punch Edge
-#: locale/ipp-strings.c:4272
+#: locale/ipp-strings.c:4274
msgid "punching-reference-edge"
msgstr ""
#. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4274
+#: locale/ipp-strings.c:4276
msgid "punching-reference-edge.bottom"
msgstr ""
#. TRANSLATORS: Left
-#: locale/ipp-strings.c:4276
+#: locale/ipp-strings.c:4278
msgid "punching-reference-edge.left"
msgstr ""
#. TRANSLATORS: Right
-#: locale/ipp-strings.c:4278
+#: locale/ipp-strings.c:4280
msgid "punching-reference-edge.right"
msgstr ""
#. TRANSLATORS: Top
-#: locale/ipp-strings.c:4280
+#: locale/ipp-strings.c:4282
msgid "punching-reference-edge.top"
msgstr ""
msgstr ""
#. TRANSLATORS: Requested Attributes
-#: locale/ipp-strings.c:4282
+#: locale/ipp-strings.c:4284
msgid "requested-attributes"
msgstr ""
#. TRANSLATORS: Retry Interval
-#: locale/ipp-strings.c:4284
+#: locale/ipp-strings.c:4286
msgid "retry-interval"
msgstr ""
#. TRANSLATORS: Retry Timeout
-#: locale/ipp-strings.c:4286
+#: locale/ipp-strings.c:4288
msgid "retry-time-out"
msgstr ""
#. TRANSLATORS: Save Disposition
-#: locale/ipp-strings.c:4288
+#: locale/ipp-strings.c:4290
msgid "save-disposition"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:4290
+#: locale/ipp-strings.c:4292
msgid "save-disposition.none"
msgstr ""
#. TRANSLATORS: Print and Save
-#: locale/ipp-strings.c:4292
+#: locale/ipp-strings.c:4294
msgid "save-disposition.print-save"
msgstr ""
#. TRANSLATORS: Save Only
-#: locale/ipp-strings.c:4294
+#: locale/ipp-strings.c:4296
msgid "save-disposition.save-only"
msgstr ""
#. TRANSLATORS: Save Document Format
-#: locale/ipp-strings.c:4296
+#: locale/ipp-strings.c:4298
msgid "save-document-format"
msgstr ""
#. TRANSLATORS: Save Info
-#: locale/ipp-strings.c:4298
+#: locale/ipp-strings.c:4300
msgid "save-info"
msgstr ""
#. TRANSLATORS: Save Location
-#: locale/ipp-strings.c:4300
+#: locale/ipp-strings.c:4302
msgid "save-location"
msgstr ""
#. TRANSLATORS: Save Name
-#: locale/ipp-strings.c:4302
+#: locale/ipp-strings.c:4304
msgid "save-name"
msgstr ""
msgstr ""
#. TRANSLATORS: Separator Sheets
-#: locale/ipp-strings.c:4304
+#: locale/ipp-strings.c:4306
msgid "separator-sheets"
msgstr ""
#. TRANSLATORS: Type of Separator Sheets
-#: locale/ipp-strings.c:4306
+#: locale/ipp-strings.c:4308
msgid "separator-sheets-type"
msgstr ""
#. TRANSLATORS: Start and End Sheets
-#: locale/ipp-strings.c:4308
+#: locale/ipp-strings.c:4310
msgid "separator-sheets-type.both-sheets"
msgstr ""
#. TRANSLATORS: End Sheet
-#: locale/ipp-strings.c:4310
+#: locale/ipp-strings.c:4312
msgid "separator-sheets-type.end-sheet"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:4312
+#: locale/ipp-strings.c:4314
msgid "separator-sheets-type.none"
msgstr ""
#. TRANSLATORS: Slip Sheets
-#: locale/ipp-strings.c:4314
+#: locale/ipp-strings.c:4316
msgid "separator-sheets-type.slip-sheets"
msgstr ""
#. TRANSLATORS: Start Sheet
-#: locale/ipp-strings.c:4316
+#: locale/ipp-strings.c:4318
msgid "separator-sheets-type.start-sheet"
msgstr ""
#. TRANSLATORS: 2-Sided Printing
-#: locale/ipp-strings.c:4318
+#: locale/ipp-strings.c:4320
msgid "sides"
msgstr ""
#. TRANSLATORS: Off
-#: locale/ipp-strings.c:4320
+#: locale/ipp-strings.c:4322
msgid "sides.one-sided"
msgstr ""
#. TRANSLATORS: On (Portrait)
-#: locale/ipp-strings.c:4322
+#: locale/ipp-strings.c:4324
msgid "sides.two-sided-long-edge"
msgstr ""
#. TRANSLATORS: On (Landscape)
-#: locale/ipp-strings.c:4324
+#: locale/ipp-strings.c:4326
msgid "sides.two-sided-short-edge"
msgstr ""
msgstr ""
#. TRANSLATORS: Status Message
-#: locale/ipp-strings.c:4326
+#: locale/ipp-strings.c:4328
msgid "status-message"
msgstr ""
#. TRANSLATORS: Staple
-#: locale/ipp-strings.c:4328
+#: locale/ipp-strings.c:4330
msgid "stitching"
msgstr ""
#. TRANSLATORS: Stitching Angle
-#: locale/ipp-strings.c:4330
+#: locale/ipp-strings.c:4332
msgid "stitching-angle"
msgstr ""
#. TRANSLATORS: Stitching Locations
-#: locale/ipp-strings.c:4332
+#: locale/ipp-strings.c:4334
msgid "stitching-locations"
msgstr ""
#. TRANSLATORS: Staple Method
-#: locale/ipp-strings.c:4334
+#: locale/ipp-strings.c:4336
msgid "stitching-method"
msgstr ""
#. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:4336
+#: locale/ipp-strings.c:4338
msgid "stitching-method.auto"
msgstr ""
#. TRANSLATORS: Crimp
-#: locale/ipp-strings.c:4338
+#: locale/ipp-strings.c:4340
msgid "stitching-method.crimp"
msgstr ""
#. TRANSLATORS: Wire
-#: locale/ipp-strings.c:4340
+#: locale/ipp-strings.c:4342
msgid "stitching-method.wire"
msgstr ""
#. TRANSLATORS: Stitching Offset
-#: locale/ipp-strings.c:4342
+#: locale/ipp-strings.c:4344
msgid "stitching-offset"
msgstr ""
#. TRANSLATORS: Staple Edge
-#: locale/ipp-strings.c:4344
+#: locale/ipp-strings.c:4346
msgid "stitching-reference-edge"
msgstr ""
#. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4346
+#: locale/ipp-strings.c:4348
msgid "stitching-reference-edge.bottom"
msgstr ""
#. TRANSLATORS: Left
-#: locale/ipp-strings.c:4348
+#: locale/ipp-strings.c:4350
msgid "stitching-reference-edge.left"
msgstr ""
#. TRANSLATORS: Right
-#: locale/ipp-strings.c:4350
+#: locale/ipp-strings.c:4352
msgid "stitching-reference-edge.right"
msgstr ""
#. TRANSLATORS: Top
-#: locale/ipp-strings.c:4352
+#: locale/ipp-strings.c:4354
msgid "stitching-reference-edge.top"
msgstr ""
msgstr ""
#. TRANSLATORS: Subject
-#: locale/ipp-strings.c:4354
+#: locale/ipp-strings.c:4356
msgid "subject"
msgstr ""
#. TRANSLATORS: Subscription Privacy Attributes
-#: locale/ipp-strings.c:4356
+#: locale/ipp-strings.c:4358
msgid "subscription-privacy-attributes"
msgstr ""
#. TRANSLATORS: All
-#: locale/ipp-strings.c:4358
+#: locale/ipp-strings.c:4360
msgid "subscription-privacy-attributes.all"
msgstr ""
#. TRANSLATORS: Default
-#: locale/ipp-strings.c:4360
+#: locale/ipp-strings.c:4362
msgid "subscription-privacy-attributes.default"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:4362
+#: locale/ipp-strings.c:4364
msgid "subscription-privacy-attributes.none"
msgstr ""
#. TRANSLATORS: Subscription Description
-#: locale/ipp-strings.c:4364
+#: locale/ipp-strings.c:4366
msgid "subscription-privacy-attributes.subscription-description"
msgstr ""
#. TRANSLATORS: Subscription Template
-#: locale/ipp-strings.c:4366
+#: locale/ipp-strings.c:4368
msgid "subscription-privacy-attributes.subscription-template"
msgstr ""
#. TRANSLATORS: Subscription Privacy Scope
-#: locale/ipp-strings.c:4368
+#: locale/ipp-strings.c:4370
msgid "subscription-privacy-scope"
msgstr ""
#. TRANSLATORS: All
-#: locale/ipp-strings.c:4370
+#: locale/ipp-strings.c:4372
msgid "subscription-privacy-scope.all"
msgstr ""
#. TRANSLATORS: Default
-#: locale/ipp-strings.c:4372
+#: locale/ipp-strings.c:4374
msgid "subscription-privacy-scope.default"
msgstr ""
#. TRANSLATORS: None
-#: locale/ipp-strings.c:4374
+#: locale/ipp-strings.c:4376
msgid "subscription-privacy-scope.none"
msgstr ""
#. TRANSLATORS: Owner
-#: locale/ipp-strings.c:4376
+#: locale/ipp-strings.c:4378
msgid "subscription-privacy-scope.owner"
msgstr ""
msgstr ""
#. TRANSLATORS: T33 Subaddress
-#: locale/ipp-strings.c:4378
+#: locale/ipp-strings.c:4380
msgid "t33-subaddress"
msgstr ""
#. TRANSLATORS: To Name
-#: locale/ipp-strings.c:4380
+#: locale/ipp-strings.c:4382
msgid "to-name"
msgstr ""
#. TRANSLATORS: Transmission Status
-#: locale/ipp-strings.c:4382
+#: locale/ipp-strings.c:4384
msgid "transmission-status"
msgstr ""
#. TRANSLATORS: Pending
-#: locale/ipp-strings.c:4384
+#: locale/ipp-strings.c:4386
msgid "transmission-status.3"
msgstr ""
#. TRANSLATORS: Pending Retry
-#: locale/ipp-strings.c:4386
+#: locale/ipp-strings.c:4388
msgid "transmission-status.4"
msgstr ""
#. TRANSLATORS: Processing
-#: locale/ipp-strings.c:4388
+#: locale/ipp-strings.c:4390
msgid "transmission-status.5"
msgstr ""
#. TRANSLATORS: Canceled
-#: locale/ipp-strings.c:4390
+#: locale/ipp-strings.c:4392
msgid "transmission-status.7"
msgstr ""
#. TRANSLATORS: Aborted
-#: locale/ipp-strings.c:4392
+#: locale/ipp-strings.c:4394
msgid "transmission-status.8"
msgstr ""
#. TRANSLATORS: Completed
-#: locale/ipp-strings.c:4394
+#: locale/ipp-strings.c:4396
msgid "transmission-status.9"
msgstr ""
#. TRANSLATORS: Cut
-#: locale/ipp-strings.c:4396
+#: locale/ipp-strings.c:4398
msgid "trimming"
msgstr ""
#. TRANSLATORS: Cut Position
-#: locale/ipp-strings.c:4398
+#: locale/ipp-strings.c:4400
msgid "trimming-offset"
msgstr ""
#. TRANSLATORS: Cut Edge
-#: locale/ipp-strings.c:4400
+#: locale/ipp-strings.c:4402
msgid "trimming-reference-edge"
msgstr ""
#. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4402
+#: locale/ipp-strings.c:4404
msgid "trimming-reference-edge.bottom"
msgstr ""
#. TRANSLATORS: Left
-#: locale/ipp-strings.c:4404
+#: locale/ipp-strings.c:4406
msgid "trimming-reference-edge.left"
msgstr ""
#. TRANSLATORS: Right
-#: locale/ipp-strings.c:4406
+#: locale/ipp-strings.c:4408
msgid "trimming-reference-edge.right"
msgstr ""
#. TRANSLATORS: Top
-#: locale/ipp-strings.c:4408
+#: locale/ipp-strings.c:4410
msgid "trimming-reference-edge.top"
msgstr ""
#. TRANSLATORS: Type of Cut
-#: locale/ipp-strings.c:4410
+#: locale/ipp-strings.c:4412
msgid "trimming-type"
msgstr ""
#. TRANSLATORS: Draw Line
-#: locale/ipp-strings.c:4412
+#: locale/ipp-strings.c:4414
msgid "trimming-type.draw-line"
msgstr ""
#. TRANSLATORS: Full
-#: locale/ipp-strings.c:4414
+#: locale/ipp-strings.c:4416
msgid "trimming-type.full"
msgstr ""
#. TRANSLATORS: Partial
-#: locale/ipp-strings.c:4416
+#: locale/ipp-strings.c:4418
msgid "trimming-type.partial"
msgstr ""
#. TRANSLATORS: Perforate
-#: locale/ipp-strings.c:4418
+#: locale/ipp-strings.c:4420
msgid "trimming-type.perforate"
msgstr ""
#. TRANSLATORS: Score
-#: locale/ipp-strings.c:4420
+#: locale/ipp-strings.c:4422
msgid "trimming-type.score"
msgstr ""
#. TRANSLATORS: Tab
-#: locale/ipp-strings.c:4422
+#: locale/ipp-strings.c:4424
msgid "trimming-type.tab"
msgstr ""
#. TRANSLATORS: Cut After
-#: locale/ipp-strings.c:4424
+#: locale/ipp-strings.c:4426
msgid "trimming-when"
msgstr ""
#. TRANSLATORS: Every Document
-#: locale/ipp-strings.c:4426
+#: locale/ipp-strings.c:4428
msgid "trimming-when.after-documents"
msgstr ""
#. TRANSLATORS: Job
-#: locale/ipp-strings.c:4428
+#: locale/ipp-strings.c:4430
msgid "trimming-when.after-job"
msgstr ""
#. TRANSLATORS: Every Set
-#: locale/ipp-strings.c:4430
+#: locale/ipp-strings.c:4432
msgid "trimming-when.after-sets"
msgstr ""
#. TRANSLATORS: Every Page
-#: locale/ipp-strings.c:4432
+#: locale/ipp-strings.c:4434
msgid "trimming-when.after-sheets"
msgstr ""
msgstr ""
#. TRANSLATORS: X Accuracy
-#: locale/ipp-strings.c:4434
+#: locale/ipp-strings.c:4436
msgid "x-accuracy"
msgstr ""
#. TRANSLATORS: X Dimension
-#: locale/ipp-strings.c:4436
+#: locale/ipp-strings.c:4438
msgid "x-dimension"
msgstr ""
#. TRANSLATORS: X Offset
-#: locale/ipp-strings.c:4438
+#: locale/ipp-strings.c:4440
msgid "x-offset"
msgstr ""
#. TRANSLATORS: X Origin
-#: locale/ipp-strings.c:4440
+#: locale/ipp-strings.c:4442
msgid "x-origin"
msgstr ""
#. TRANSLATORS: Y Accuracy
-#: locale/ipp-strings.c:4442
+#: locale/ipp-strings.c:4444
msgid "y-accuracy"
msgstr ""
#. TRANSLATORS: Y Dimension
-#: locale/ipp-strings.c:4444
+#: locale/ipp-strings.c:4446
msgid "y-dimension"
msgstr ""
#. TRANSLATORS: Y Offset
-#: locale/ipp-strings.c:4446
+#: locale/ipp-strings.c:4448
msgid "y-offset"
msgstr ""
#. TRANSLATORS: Y Origin
-#: locale/ipp-strings.c:4448
+#: locale/ipp-strings.c:4450
msgid "y-origin"
msgstr ""
#. TRANSLATORS: Z Accuracy
-#: locale/ipp-strings.c:4450
+#: locale/ipp-strings.c:4452
msgid "z-accuracy"
msgstr ""
#. TRANSLATORS: Z Dimension
-#: locale/ipp-strings.c:4452
+#: locale/ipp-strings.c:4454
msgid "z-dimension"
msgstr ""
#. TRANSLATORS: Z Offset
-#: locale/ipp-strings.c:4454
+#: locale/ipp-strings.c:4456
msgid "z-offset"
msgstr ""
"media-type.com.hp.premium-inkjet" = "Inkjet Premium Paper";
// TRANSLATORS: Photo Premium Paper
"media-type.com.hp.premium-photo" = "Photo Premium Paper";
+// TRANSLATORS: Premium Matte Presentation Paper
+"media-type.com.hp.premium-presentation-matte" = "Premium Matte Presentation Paper";
// TRANSLATORS: Continuous
"media-type.continuous" = "Continuous";
// TRANSLATORS: Continuous Long
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
"Language-Team: Czech\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2017-10-25 14:57+0200\n"
"Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
"Language-Team: German <LL@li.org>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English\n"
msgid "media-type.com.hp.premium-photo"
msgstr "Photo Premium Paper"
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr "Premium Matte Presentation Paper"
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr "Continuous"
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2016-06-26 21:17+0100\n"
"Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
"Language-Team: Spanish\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
"Last-Translator: Stéphane Blondon <stephane.blondon@gmail.com>\n"
"Language-Team: French <LL@li.org>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
"Language-Team: Italian - Arch Linux Italian Team <giovanni@archlinux.org>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2014-11-15 19:27+0900\n"
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Language-Team: Japanese - OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2016-01-31 16:45-0200\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: Russian - PuppyRus Linux Team\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
msgstr ""
"Project-Id-Version: CUPS 2.3\n"
"Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-12-18 19:46-0500\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
"PO-Revision-Date: 2018-10-09 00:21-0500\n"
"Last-Translator: Mingcong Bai <jeffbai@aosc.io>\n"
"Language-Team: Chinese (Simplified)\n"
msgid "media-type.com.hp.premium-photo"
msgstr ""
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
#. TRANSLATORS: Continuous
msgid "media-type.continuous"
msgstr ""
_("media-type.com.hp.premium-inkjet");
/* TRANSLATORS: Photo Premium Paper */
_("media-type.com.hp.premium-photo");
+/* TRANSLATORS: Premium Matte Presentation Paper */
+_("media-type.com.hp.premium-presentation-matte");
/* TRANSLATORS: Continuous */
_("media-type.continuous");
/* TRANSLATORS: Continuous Long */
.\"
.\" cupsd.conf man page for CUPS.
.\"
-.\" Copyright © 2007-2019 by Apple Inc.
+.\" Copyright © 2007-2021 by Apple Inc.
.\" Copyright © 1997-2006 by Easy Software Products.
.\"
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more
.\" information.
.\"
-.TH cupsd.conf 5 "CUPS" "16 July 2019" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "1 October 2021" "Apple Inc."
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
\fBKeepAlive No\fR
Specifies whether to support HTTP keep-alive connections.
The default is "Yes".
-.\"#KeepAliveTimeout
-.TP 5
-\fBKeepAliveTimeout \fIseconds\fR
-Specifies how long an idle client connection remains open.
-The default is "30".
.\"#LimitIPP
.TP 5
\fB<Limit \fIoperation \fR...\fB> \fR... \fB</Limit>\fR
Listens to the specified address and port or domain socket path for connections.
Multiple Listen directives can be provided to listen on multiple addresses.
The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.
-.\"#ListenBackLog
-.TP 5
-\fBListenBackLog \fInumber\fR
-Specifies the number of pending connections that will be allowed.
-This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections.
-When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones.
-The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems.
.\"#Location
.TP 5
\fB<Location \fI/path\fB> \fR... \fB</Location>\fR
.br
Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option.
The default is "No".
+.\"#ListenBackLog
+.TP 5
+\fBListenBackLog \fInumber\fR
+Specified the number of pending connections that will be allowed.
+The scheduler now uses the value "128" on all platforms.
.\"#PageLogFormat
.TP 5
\fBPageLogFormat \fIformat-string\fR
.BR subscriptions.conf (5),
CUPS Online Help (http://localhost:631/help)
.SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
.\"
.\" ipptool man page.
.\"
-.\" Copyright © 2010-2019 by Apple Inc.
+.\" Copyright © 2010-2021 by Apple Inc.
.\"
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more
.\" information.
.\"
-.TH ipptool 1 "CUPS" "26 April 2019" "Apple Inc."
+.TH ipptool 1 "CUPS" "5 April 2021" "Apple Inc."
.SH NAME
ipptool \- perform internet printing protocol requests
.SH SYNOPSIS
.B \-P
.I filename.plist
] [
+.B \-R
+] [
.B \-S
] [
.B \-T
Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (\fB\-t\fR).
This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
.TP 5
+.B \-R
+Retries tests when the "server-error-busy" status code is returned.
+.TP 5
.B \-S
Forces (dedicated) TLS encryption when connecting to the server.
.TP 5
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
RFC 8011 (http://tools.ietf.org/html/rfc8011),
.SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
.\"
.\" ipptoolfile man page.
.\"
-.\" Copyright © 2010-2019 by Apple Inc.
+.\" Copyright © 2010-2021 by Apple Inc.
.\"
.\" Licensed under Apache License v2.0. See the file "LICENSE" for more
.\" information.
.\"
-.TH ipptoolfile 5 "CUPS" "15 August 2019" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "12 May 2021" "Apple Inc."
.SH NAME
ipptoolfile \- ipptool file format
.SH DESCRIPTION
.BR ipptool (8)
will ignore errors and continue with subsequent tests.
.TP 5
+\fBMONITOR-PRINTER-STATE \fR[ \fIprinter-uri \fR] \fB{ EXPECT \fIattribute-name \fR[ \fIpredicate(s) \fR] \fB}\fR
+Specifies printer state monitoring tests to run in parallel with the test operation.
+The monitoring tests will run until all of the \fBEXPECT\fR conditions are satisfied or the primary test operation has completed, whichever occurs first.
+.TP 5
\fBNAME "\fIliteral string\fB"\fR
Specifies the human-readable name of the test.
.TP 5
Requires the \fBEXPECT\fR attribute to have the specified number of values.
.TP 5
\fBDEFINE\-MATCH \fIvariable-name\fR
-Defines the variable to "1" when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to "1" when the \fBEXPECT\fR condition matches.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
.TP 5
\fBDEFINE\-NO\-MATCH \fIvariable-name\fR
-Defines the variable to "1" when the \fBEXPECT\fR condition does not match. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to "1" when the \fBEXPECT\fR condition does not match.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
.TP 5
\fBDEFINE\-VALUE \fIvariable-name\fR
-Defines the variable to the value of the attribute when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to the value of the attribute when the \fBEXPECT\fR condition matches.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+.TP 5
+\fBDISPLAY\-MATCH \fI"message"\fR
+Displays the specified message when the \fBEXPECT\fR condition matches.
.TP 5
\fBIF\-DEFINED \fIvariable-name\fR
Makes the \fBEXPECT\fR conditions apply only if the specified variable is defined.
\fBIN\-GROUP \fItag\fR
Requires the \fBEXPECT\fR attribute to be in the specified group tag.
.TP 5
-\fBOF\-TYPE \fItag[|tag,...]\fR
+\fBOF\-TYPE \fItag[(limits)|tag|...]\fR
Requires the \fBEXPECT\fR attribute to use one of the specified value tag(s).
+Most value tags also support the specification of limits in parenthesis, for example "name(42)" would allow nameWith/WithoutLanguage strings up to 42 octets in length, "name(4:MAX)" would allow nameWith/WithoutLanguage strings between 4 and 255 octets in length, and "integer(-273:MAX)" would allow integers between -273 and 2147483647.
.TP 5
\fBREPEAT\-LIMIT \fInumber\fR
.br
Requires that all values of the \fBEXPECT\fR attribute match the boolean value given.
.TP 5
\fBWITH\-ALL\-VALUES "/\fIregular expression\fB/"\fR
-Requires that all values of the \fBEXPECT\fR attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+Requires that all values of the \fBEXPECT\fR attribute match the regular expression, which must conform to the POSIX regular expression syntax.
+Comparisons are case-sensitive.
+.TP 5
+\fBWITH\-DISTINCT\-VALUES\fR
+Requires that all values of the \fBEXPECT\fR attribute are unique.
+Comparisons are case-sensitive.
+Only charset, collection, enum, integer, keyword, mimeMediaType, naturalLanguage, rangeOfInteger, resolution, uriScheme attributes support this predicate.
.TP 5
\fBWITH\-HOSTNAME "\fIliteral string\fB"\fR
.TP 5
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
RFC 8011 (http://tools.ietf.org/html/rfc8011)
.SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
*/
static int compare_rss(_cups_rss_t *a, _cups_rss_t *b);
-static void delete_message(_cups_rss_t *rss);
+static void delete_message(_cups_rss_t *msg);
static void load_rss(cups_array_t *rss, const char *filename);
static _cups_rss_t *new_message(int sequence_number, char *subject,
char *text, char *link_url,
%system darwin
f 0555 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib nostrip()
l 0755 root sys $LIBDIR/libcups.dylib libcups.2.dylib
-f 0555 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib nostrip()
+f 0555 root sys $LIBDIR/libcupsimage.2.dylib cups/libcupsimage.2.dylib nostrip()
l 0755 root sys $LIBDIR/libcupsimage.dylib libcupsimage.2.dylib
%system !darwin
f 0555 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2 nostrip()
l 0755 root sys $LIBDIR/libcups.so libcups.so.2
-f 0555 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2 nostrip()
+f 0555 root sys $LIBDIR/libcupsimage.so.2 cups/libcupsimage.so.2 nostrip()
l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
%system all
%subpackage
}
}
+ if (ppd)
+ ppdClose(ppd);
+
return (1);
}
//
// Source class for the CUPS PPD Compiler.
//
-// Copyright 2007-2018 by Apple Inc.
+// Copyright 2007-2020 by Apple Inc.
// Copyright 2002-2007 by Easy Software Products.
//
// Licensed under Apache License v2.0. See the file "LICENSE" for more
for (i = 0; i < 9; i ++)
m[i] = get_float(fp);
- return (new ppdcProfile(resolution, media_type, g, d, m));
+ return (new ppdcProfile(resolution, media_type, d, g, m));
}
switch (sscanf(name, "%dx%d", &xdpi, &ydpi))
{
- case 0 :
- _cupsLangPrintf(stderr,
- _("ppdc: Bad resolution name \"%s\" on line %d of "
- "%s."), name, fp->line, fp->filename);
- break;
case 1 :
ydpi = xdpi;
- break;
- }
+ break;
+ case 2 :
+ break;
+ default :
+ _cupsLangPrintf(stderr,
+ _("ppdc: Bad resolution name \"%s\" on line %d of "
+ "%s."), name, fp->line, fp->filename);
+ break;
+}
// Create the necessary PS commands...
snprintf(command, sizeof(command),
}
// Return the new profile...
- return (new ppdcProfile(resolution, media_type, g, kd, m));
+ return (new ppdcProfile(resolution, media_type, kd, g, m));
}
// Local functions...
//
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
//
default : // Unknown
usage();
- break;
}
}
else
return (1);
}
- if (templocales != locales)
+ if (templocales && templocales != locales)
templocales->release();
cupsFileClose(fp);
// Local functions...
//
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
//
// Local functions...
//
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
//
//
static const char *ppd_locale(ppd_file_t *ppd);
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
//
//
static void add_ui_strings(ppdcDriver *d, ppdcCatalog *catalog);
-static void usage(void);
+static void usage(void) _CUPS_NORETURN;
//
#media "w108h36/1.50x0.50\"" 108 36
#media "w108h72/1.50x1.00\"" 108 72
#media "w108h144/1.50x2.00\"" 108 144
+#media "w142h227/80x50mm" 142 227
#media "w144h26/2.00x0.37\"" 144 26
#media "w144h36/2.00x0.50\"" 144 36
#media "w144h72/2.00x1.00\"" 144 72
#media "w216h90/3.00x1.25\"" 216 90
#media "w216h144/3.00x2.00\"" 216 144
#media "w216h216/3.00x3.00\"" 216 216
+#media "w216h288/3.00x4.00\"" 216 288
#media "w216h360/3.00x5.00\"" 216 360
+#media "w216h432/3.00x6.00\"" 216 432
+#media "w216h576/3.00x8.00\"" 216 576
#media "w234h144/3.25x2.00\"" 234 144
#media "w234h360/3.25x5.00\"" 234 360
#media "w234h396/3.25x5.50\"" 234 396
#media "w288h360/4.00x5.00\"" 288 360
#media "w288h432/4.00x6.00\"" 288 432
#media "w288h468/4.00x6.50\"" 288 468
+#media "w288h576/4.00x8.00\"" 288 576
#media "w288h936/4.00x13.00\"" 288 936
#media "w432h72/6.00x1.00\"" 432 72
#media "w432h144/6.00x2.00\"" 432 144
#media "w432h360/6.00x5.00\"" 432 360
#media "w432h432/6.00x6.00\"" 432 432
#media "w432h468/6.00x6.50\"" 432 468
+#media "w432h576/6.00x8.00\"" 432 576
#media "w576h72/8.00x1.00\"" 576 72
#media "w576h144/8.00x2.00\"" 576 144
#media "w576h216/8.00x3.00\"" 576 216
#media "w576h360/8.00x5.00\"" 576 360
#media "w576h432/8.00x6.00\"" 576 432
#media "w576h468/8.00x6.50\"" 576 468
+#media "w595h72/8.26x1.00\"" 595 72
// Common stuff for all drivers...
Attribute "cupsVersion" "" "2.3"
Attribute "LandscapeOrientation" "" "Plus90"
Attribute "TTRasterizer" "" "Type42"
-Copyright "Copyright (c) 2007-2019 by Apple Inc."
+Copyright "Copyright (c) 2007-2021 by Apple Inc."
Copyright "Copyright (c) 1997-2007 by Easy Software Products."
Copyright ""
Copyright "Licensed under Apache License v2.0. See the file \"LICENSE\" for more"
MinSize 36 36
MaxSize 576 3600
+ MediaSize A4
+ MediaSize A5
+ MediaSize A5Rotated
MediaSize w90h18
MediaSize w90h162
MediaSize w108h18
MediaSize w108h36
MediaSize w108h72
MediaSize w108h144
+ MediaSize w142h227
MediaSize w144h26
MediaSize w144h36
MediaSize w144h72
MediaSize w216h72
MediaSize w216h90
MediaSize w216h144
+ MediaSize w216h288
MediaSize w216h216
MediaSize w216h360
+ MediaSize w216h432
+ MediaSize w216h576
MediaSize w234h144
MediaSize w234h360
MediaSize w234h396
*MediaSize w288h360
MediaSize w288h432
MediaSize w288h468
+ MediaSize w288h576
MediaSize w288h936
MediaSize w432h72
MediaSize w432h144
MediaSize w432h360
MediaSize w432h432
MediaSize w432h468
+ MediaSize w432h576
MediaSize w576h72
MediaSize w576h144
MediaSize w576h216
MediaSize w576h360
MediaSize w576h432
MediaSize w576h468
+ MediaSize w595h72
*Resolution k 1 0 0 0 203dpi
Resolution k 1 0 0 0 300dpi
if (ifptr >= ifname && *ifptr == ')')
{
- ifptr --;
*ifptr = '\0';
}
b ++;
}
+ // either both *a and *b == '\0', or one points inside a string,
+ // so factor that in.
+ result |= (*a ^ *b);
+
return (result);
}
{
cups_file_t *fp; /* classes.conf file */
char filename[1024], /* classes.conf filename */
- temp[1024], /* Temporary string */
value[2048], /* Value string */
*name; /* Current user name */
cupsd_printer_t *pclass; /* Current printer class */
int i; /* Looping var */
- time_t curtime; /* Current time */
- struct tm curdate; /* Current date */
cups_option_t *option; /* Current option */
* Write a small header to the file...
*/
- time(&curtime);
- localtime_r(&curtime, &curdate);
- strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
cupsFilePuts(fp, "# Class configuration file for " CUPS_SVERSION "\n");
- cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+ cupsFilePrintf(fp, "# Written by cupsd\n");
cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
/*
/*
* Client routines for the CUPS scheduler.
*
- * Copyright © 2007-2019 by Apple Inc.
- * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2007-2021 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
* Jelmer Vernooij.
}
else if (auth_type == CUPSD_AUTH_NEGOTIATE)
{
-#if defined(SO_PEERCRED) && defined(AF_LOCAL)
- if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
- strlcpy(auth_str, "PeerCred", sizeof(auth_str));
- else
-#endif /* SO_PEERCRED && AF_LOCAL */
strlcpy(auth_str, "Negotiate", sizeof(auth_str));
}
- if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
+ if (con->best && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
{
/*
- * Add a "trc" (try root certification) parameter for local non-Kerberos
+ * Add a "trc" (try root certification) parameter for local
* requests when the request requires system group membership - then the
* client knows the root certificate can/should be used.
*
perm_check = 0;
}
+ else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
+ {
+ strlcpy(filename, ConfigurationFile, len);
+
+ perm_check = 0;
+ }
+ else if (!strncmp(con->uri, "/admin/log/", 11))
+ {
+ if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
+ strlcpy(filename, AccessLog, len);
+ else if (!strncmp(con->uri + 11, "error_log", 9) && ErrorLog[0] == '/')
+ strlcpy(filename, ErrorLog, len);
+ else if (!strncmp(con->uri + 11, "page_log", 8) && PageLog[0] == '/')
+ strlcpy(filename, PageLog, len);
+ else
+ return (NULL);
+
+ perm_check = 0;
+ }
else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9))
{
/*
perm_check = 0;
}
- else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
- {
- strlcpy(filename, ConfigurationFile, len);
-
- perm_check = 0;
- }
- else if (!strncmp(con->uri, "/admin/log/", 11))
- {
- if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
- strlcpy(filename, AccessLog, len);
- else if (!strncmp(con->uri + 11, "error_log", 9) && ErrorLog[0] == '/')
- strlcpy(filename, ErrorLog, len);
- else if (!strncmp(con->uri + 11, "page_log", 8) && PageLog[0] == '/')
- strlcpy(filename, PageLog, len);
- else
- return (NULL);
-
- perm_check = 0;
- }
else if (con->language)
{
snprintf(language, sizeof(language), "/%s", con->language->language);
*/
if (language[3])
- language[0] = '\0'; /* Strip country code */
+ language[3] = '\0'; /* Strip country code */
else
language[0] = '\0'; /* Strip language */
}
return (0);
}
- if (!_cups_strcasecmp(type->type, "x-httpd-cgi") &&
- (filestats->st_mode & 0111))
+ if (!_cups_strcasecmp(type->type, "x-httpd-cgi") && (filestats->st_mode & 0111) && (getuid() || !(filestats->st_mode & 022)))
{
/*
* "application/x-httpd-cgi" is a CGI script.
}
else
{
- sprintf(content_length, "CONTENT_LENGTH=" CUPS_LLFMT,
- CUPS_LLCAST con->bytes);
+ snprintf(content_length, sizeof(content_length), "CONTENT_LENGTH=" CUPS_LLFMT, CUPS_LLCAST con->bytes);
snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s",
httpGetField(con->http, HTTP_FIELD_CONTENT_TYPE));
{ "JobKillDelay", &JobKillDelay, CUPSD_VARTYPE_TIME },
{ "JobRetryLimit", &JobRetryLimit, CUPSD_VARTYPE_INTEGER },
{ "JobRetryInterval", &JobRetryInterval, CUPSD_VARTYPE_TIME },
- { "KeepAliveTimeout", &KeepAliveTimeout, CUPSD_VARTYPE_TIME },
{ "KeepAlive", &KeepAlive, CUPSD_VARTYPE_BOOLEAN },
#ifdef HAVE_LAUNCHD
{ "LaunchdTimeout", &IdleExitTimeout, CUPSD_VARTYPE_TIME },
FilterNice = 0;
HostNameLookups = FALSE;
KeepAlive = TRUE;
- KeepAliveTimeout = DEFAULT_KEEPALIVE;
ListenBackLog = SOMAXCONN;
LogDebugHistory = 200;
LogFilePerm = CUPS_DEFAULT_LOG_FILE_PERM;
/* Timeout during requests */
KeepAlive VALUE(TRUE),
/* Support the Keep-Alive option? */
- KeepAliveTimeout VALUE(DEFAULT_KEEPALIVE),
- /* Timeout between requests */
FileDevice VALUE(FALSE),
/* Allow file: devices? */
FilterLimit VALUE(0),
* all others run as the unprivileged user...
*/
- start_backend(dent->filename, !(dent->fileinfo.st_mode & (S_IWGRP | S_IRWXO)));
+ start_backend(dent->filename, !(dent->fileinfo.st_mode & (S_IWGRP | S_IWOTH | S_IXOTH)));
}
cupsDirClose(dir);
request = ippNewRequest(IPP_OP_CANCEL_JOB);
- sprintf(uri, "ipp://localhost/jobs/%d", id);
+ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
/*
* IPP routines for the CUPS scheduler.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
cups_array_t *ra,
cups_array_t *exclude);
static void create_job(cupsd_client_t *con, ipp_attribute_t *uri);
+static void *create_local_bg_thread(cupsd_printer_t *printer);
static void create_local_printer(cupsd_client_t *con);
static cups_array_t *create_requested_array(ipp_t *request);
static void create_subscriptions(cupsd_client_t *con, ipp_attribute_t *uri);
* Class doesn't exist; see if we have a printer of the same name...
*/
- if ((pclass = cupsdFindPrinter(resource + 9)) != NULL)
+ if (cupsdFindPrinter(resource + 9))
{
/*
* Yes, return an error...
* Printer doesn't exist; see if we have a class of the same name...
*/
- if ((printer = cupsdFindClass(resource + 10)) != NULL)
+ if (cupsdFindClass(resource + 10))
{
/*
* Yes, return an error...
need_restart_job = 1;
changed_driver = 1;
- if (!strcmp(ppd_name, "raw"))
+ if (!strcmp(ppd_name, "everywhere"))
+ {
+ // Create IPP Everywhere PPD...
+ if (!printer->device_uri || (strncmp(printer->device_uri, "dnssd://", 8) && strncmp(printer->device_uri, "ipp://", 6) && strncmp(printer->device_uri, "ipps://", 7) && strncmp(printer->device_uri, "ippusb://", 9)))
+ {
+ send_ipp_status(con, IPP_INTERNAL_ERROR, _("IPP Everywhere driver requires an IPP connection."));
+ if (!modify)
+ cupsdDeletePrinter(printer, 0);
+
+ return;
+ }
+
+ // Run a background thread to create the PPD...
+ _cupsThreadCreate((_cups_thread_func_t)create_local_bg_thread, printer);
+ }
+ else if (!strcmp(ppd_name, "raw"))
{
/*
* Raw driver, remove any existing PPD file.
}
if (printer->alert && (!ra || cupsArrayFind(ra, "printer-alert")))
- ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, "printer-alert", NULL, printer->alert);
+ ippAddOctetString(con->response, IPP_TAG_PRINTER, "printer-alert", printer->alert, (int)strlen(printer->alert));
if (printer->alert_description && (!ra || cupsArrayFind(ra, "printer-alert-description")))
ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-alert-description", NULL, printer->alert_description);
if (!ra || cupsArrayFind(ra, "queued-job-count"))
add_queued_job_count(con, printer);
+ if (!ra || cupsArrayFind(ra, "uri-security-supported"))
+ ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "uri-security-supported", NULL, is_encrypted ? "tls" : "none");
+
copy_attrs(con->response, printer->attrs, ra, IPP_TAG_ZERO, 0, NULL);
if (printer->ppd_attrs)
copy_attrs(con->response, printer->ppd_attrs, ra, IPP_TAG_ZERO, 0, NULL);
cupsdLogJob(job, CUPSD_LOG_DEBUG,
"Restarted by \"%s\" with job-hold-until=%s.",
username, attr->values[0].string.text);
- cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
-
- cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE,
- NULL, job, "Job restarted by user with job-hold-until=%s",
- attr->values[0].string.text);
+ cupsdSetJobHoldUntil(job, attr->values[0].string.text, 1);
+ cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
+ "Job restarted by user with job-hold-until=%s",
+ attr->values[0].string.text);
}
else
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
- sprintf(value, "%d", attr->values[0].integer);
- printer->num_options = cupsAddOption(name, value,
- printer->num_options,
- &(printer->options));
+ printer->num_options = cupsAddIntegerOption(name, attr->values[0].integer, printer->num_options, &(printer->options));
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Setting %s to %s...", attr->name, value);
break;
case IPP_TAG_RANGE :
- sprintf(value, "%d-%d", attr->values[0].range.lower,
- attr->values[0].range.upper);
+ snprintf(value, sizeof(value), "%d-%d", attr->values[0].range.lower, attr->values[0].range.upper);
printer->num_options = cupsAddOption(name, value,
printer->num_options,
&(printer->options));
break;
case IPP_TAG_RESOLUTION :
- sprintf(value, "%dx%d%s", attr->values[0].resolution.xres,
- attr->values[0].resolution.yres,
- attr->values[0].resolution.units == IPP_RES_PER_INCH ?
- "dpi" : "dpcm");
+ snprintf(value, sizeof(value), "%dx%d%s", attr->values[0].resolution.xres, attr->values[0].resolution.yres, attr->values[0].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
printer->num_options = cupsAddOption(name, value,
printer->num_options,
&(printer->options));
goto abort_job;
}
- sprintf(jobid, "%d", job->id);
+ snprintf(jobid, sizeof(jobid), "%d", job->id);
argv[0] = job->printer->name;
argv[1] = jobid;
else if (stat(command, &backinfo))
backroot = 0;
else
- backroot = !(backinfo.st_mode & (S_IWGRP | S_IRWXO));
+ backroot = !(backinfo.st_mode & (S_IWGRP | S_IWOTH | S_IXOTH));
argv[0] = job->printer->sanitized_device_uri;
{
int i; /* Looping var */
cups_file_t *fp; /* job.cache file */
- char filename[1024], /* job.cache filename */
- temp[1024]; /* Temporary string */
+ char filename[1024]; /* job.cache filename */
cupsd_job_t *job; /* Current job */
- time_t curtime; /* Current time */
- struct tm curdate; /* Current date */
snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir);
* Write a small header to the file...
*/
- time(&curtime);
- localtime_r(&curtime, &curdate);
- strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n");
- cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+ cupsFilePrintf(fp, "# Written by cupsd\n");
cupsFilePrintf(fp, "NextJobId %d\n", NextJobId);
/*
else
cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "%s", buffer);
- if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED || newstate == IPP_JOB_HELD)
+ if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED)
cupsdLogJob(job, CUPSD_LOG_ERROR, "%s", buffer);
else
cupsdLogJob(job, CUPSD_LOG_INFO, "%s", buffer);
* rarely have current information for network devices...
*/
- if (strncmp(job->printer->device_uri, "usb:", 4) &&
- strncmp(job->printer->device_uri, "ippusb:", 7))
+ if (!strstr(job->printer->device_uri, "usb:"))
cupsdSetPrinterReasons(job->printer, "-offline-report");
/*
exit_code = job->status;
}
- cupsdLogJob(job, CUPSD_LOG_INFO, "Backend returned status %d (%s)",
+ cupsdLogJob(job, CUPSD_LOG_WARN, "Backend returned status %d (%s)",
exit_code,
exit_code == CUPS_BACKEND_FAILED ? "failed" :
exit_code == CUPS_BACKEND_AUTH_REQUIRED ?
if (lis->fd == -1)
{
- cupsdLogMessage(CUPSD_LOG_ERROR,
+ cupsdLogMessage(errno == EAFNOSUPPORT ? CUPSD_LOG_INFO : CUPSD_LOG_ERROR,
"Unable to open listen socket for address %s:%d - %s.",
s, p, strerror(errno));
* Format and write the log message...
*/
-#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
- if (job && strcmp(ErrorLog, "syslog"))
-#else
if (job)
-#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
snprintf(jobmsg, sizeof(jobmsg), "[Job %d] %s", job->id, message);
else
strlcpy(jobmsg, message, sizeof(jobmsg));
case 'h' : /* Show usage/help */
usage(0);
- break;
case 'l' : /* Started by launchd/systemd/upstart... */
#ifdef HAVE_ONDEMAND
_cupsLangPrintf(stderr, _("cupsd: Unknown option \"%c\" - "
"aborting."), *opt);
usage(1);
- break;
}
}
}
* Clean out old temp files and printer cache data.
*/
- if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot)))
+ if (!RequestRoot || !strncmp(TempDir, RequestRoot, strlen(RequestRoot)))
cupsdCleanFiles(TempDir, NULL);
cupsdCleanFiles(CacheDir, "*.ipp");
{
cupsdLogMessage(CUPSD_LOG_ERROR, "service_add_listener: Unable to allocate listener: %s.", strerror(errno));
exit(EXIT_FAILURE);
- return;
}
cupsArrayAdd(Listeners, lis);
{
cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Unable to get listener sockets: %s", strerror(error));
exit(EXIT_FAILURE);
- return; /* anti-compiler-warning */
}
/*
/*
* Printer routines for the CUPS scheduler.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2020 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
/* cups-version */
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_TEXT | IPP_TAG_COPY,
- "cups-version", NULL, CUPS_SVERSION + 6);
+ "cups-version", NULL, &CUPS_SVERSION[6]);
/* generated-natural-language-supported (no IPP_TAG_COPY) */
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
ippDelete(p->attrs);
ippDelete(p->ppd_attrs);
+ _ppdCacheDestroy(p->pc);
+
mimeDeleteType(MimeDatabase, p->filetype);
mimeDeleteType(MimeDatabase, p->prefiltertype);
cupsdFreeStrings(&(p->users));
cupsdFreeQuotas(p);
+ cupsdClearString(&p->uuid);
cupsdClearString(&p->uri);
cupsdClearString(&p->hostname);
cupsdClearString(&p->name);
int i; /* Looping var */
cups_file_t *fp; /* printers.conf file */
char filename[1024], /* printers.conf filename */
- temp[1024], /* Temporary string */
value[2048], /* Value string */
*ptr, /* Pointer into value */
*name; /* Current user/group name */
cupsd_printer_t *printer; /* Current printer class */
- time_t curtime; /* Current time */
- struct tm curdate; /* Current date */
cups_option_t *option; /* Current option */
ipp_attribute_t *marker; /* Current marker attribute */
* Write a small header to the file...
*/
- time(&curtime);
- localtime_r(&curtime, &curdate);
- strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n");
- cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+ cupsFilePrintf(fp, "# Written by cupsd\n");
cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
cupsFilePrintf(fp, "NextPrinterId %d\n", NextPrinterId);
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
"uri-authentication-supported", NULL, auth_supported);
- ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
- "uri-security-supported", NULL, "none");
if (p->printer_id)
ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-id", p->printer_id);
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL,
num_qualities = 0;
- if ((output_mode = ppdFindOption(ppd, "OutputMode")) != NULL)
+ if ((output_mode = ppdFindOption(ppd, "OutputMode")) ||
+ (output_mode = ppdFindOption(ppd, "cupsPrintQuality")))
{
if (ppdFindChoice(output_mode, "draft") ||
ppdFindChoice(output_mode, "fast"))
{
int i; /* Looping var */
cups_file_t *fp; /* subscriptions.conf file */
- char filename[1024], /* subscriptions.conf filename */
- temp[1024]; /* Temporary string */
+ char filename[1024]; /* subscriptions.conf filename */
cupsd_subscription_t *sub; /* Current subscription */
- time_t curtime; /* Current time */
- struct tm curdate; /* Current date */
unsigned mask; /* Current event mask */
const char *name; /* Current event name */
int hex; /* Non-zero if we are writing hex data */
* Write a small header to the file...
*/
- time(&curtime);
- localtime_r(&curtime, &curdate);
- strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n");
- cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+ cupsFilePrintf(fp, "# Written by cupsd\n");
cupsFilePrintf(fp, "NextSubscriptionId %d\n", NextSubscriptionId);
* Register for power state change notifications
*/
- bzero(&threadData, sizeof(threadData));
+ memset(&threadData, 0, sizeof(threadData));
threadData.sysevent.powerKernelPort =
IORegisterForSystemPower(&threadData, &powerNotifierPort,
* Register for system configuration change notifications
*/
- bzero(&storeContext, sizeof(storeContext));
+ memset(&storeContext, 0, sizeof(storeContext));
storeContext.info = &threadData;
store = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("cupsd"),
* this later.
*/
- bzero(&timerContext, sizeof(timerContext));
+ memset(&timerContext, 0, sizeof(timerContext));
timerContext.info = &threadData;
threadData.timerRef =
return (-1);
else if (digits > 0)
return (1);
- else if (diff)
+ else
return (diff);
}
else if (tolower(*s) < tolower(*t))
cups_array_t * /* O - CUPS array */
cupsdCreateStringsArray(const char *s) /* I - Comma-delimited strings */
{
- if (!s || !*s)
- return (NULL);
- else
+ if (s && *s)
return (_cupsArrayNewStrings(s, ','));
+ else
+ return (NULL);
}
exit 1
fi
- temp=`head -1 README.md | awk '{print $4}'`
+ temp=`head -1 README.md | awk '{print $5}'`
if test "$temp" != "v$version"; then
echo "Still need to update version to v$version in README.md (saw $temp)"
exit 1
}
else
{
- sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
uri);
}
op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job",
cupsLastErrorString());
- if (response)
- ippDelete(response);
+ ippDelete(response);
return (1);
}
op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job",
cupsLastErrorString());
- if (response)
- ippDelete(response);
+ ippDelete(response);
return (1);
}
default :
usage();
- break;
}
}
else
"name."), argv[0]);
return (1);
}
+ else if (cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - The printer or class does not exist."), argv[0]);
+ return (1);
+ }
break;
case 'f' : /* Form */
return (1);
}
- sprintf(buffer, "%d", num_copies);
- num_options = cupsAddOption("copies", buffer, num_options,
- &options);
+ num_options = cupsAddIntegerOption("copies", num_copies, num_options, &options);
break;
case 'o' : /* Option */
return (1);
}
- sprintf(buffer, "%d", priority);
- num_options = cupsAddOption("job-priority", buffer, num_options,
- &options);
+ num_options = cupsAddIntegerOption("job-priority", priority, num_options, &options);
break;
case 's' : /* Silent */
request = ippNewRequest(IPP_RESTART_JOB);
- sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"job-uri", NULL, uri);
request = ippNewRequest(IPP_SET_JOB_ATTRIBUTES);
- sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"job-uri", NULL, uri);
/*
* "lpadmin" command for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2006 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
static int delete_printer_option(http_t *http, char *printer,
char *option);
static int enable_printer(http_t *http, char *printer);
-static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize, int *num_options, cups_option_t **options);
static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
size_t urisize);
static int set_printer_options(http_t *http, char *printer,
case 'E' : /* Enable the printer/enable encryption */
if (printer == NULL)
{
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
cupsSetEncryption(HTTP_ENCRYPTION_REQUIRED);
if (http)
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
#else
_cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]);
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
break;
}
return (1);
#endif /* __APPLE__ */
}
- else if (ppd_name && !strcmp(ppd_name, "everywhere") && device_uri)
- {
- if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile), &num_options, &options)) == NULL)
- return (1);
-
- num_options = cupsRemoveOption("ppd-name", num_options, &options);
- }
- else if (ppd_name || file)
+ else if ((ppd_name && strcmp(ppd_name, "everywhere")) || file)
{
_cupsLangPuts(stderr, _("lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS."));
}
}
-/*
- * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
- */
-
-static char * /* O - Filename or NULL */
-get_printer_ppd(
- const char *uri, /* I - Printer URI */
- char *buffer, /* I - Filename buffer */
- size_t bufsize, /* I - Size of filename buffer */
- int *num_options, /* IO - Number of options */
- cups_option_t **options) /* IO - Options */
-{
- http_t *http; /* Connection to printer */
- ipp_t *request, /* Get-Printer-Attributes request */
- *response; /* Get-Printer-Attributes response */
- ipp_attribute_t *attr; /* Attribute from response */
- char resolved[1024], /* Resolved URI */
- scheme[32], /* URI scheme */
- userpass[256], /* Username:password */
- host[256], /* Hostname */
- resource[256]; /* Resource path */
- int port; /* Port number */
- static const char * const pattrs[] = /* Attributes to use */
- {
- "all",
- "media-col-database"
- };
-
-
- /*
- * Connect to the printer...
- */
-
- if (strstr(uri, "._tcp"))
- {
- /*
- * Resolve URI...
- */
-
- if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
- {
- _cupsLangPrintf(stderr, _("%s: Unable to resolve \"%s\"."), "lpadmin", uri);
- return (NULL);
- }
-
- uri = resolved;
- }
-
- if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
- {
- _cupsLangPrintf(stderr, _("%s: Bad printer URI \"%s\"."), "lpadmin", uri);
- return (NULL);
- }
-
- http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
- if (!http)
- {
- _cupsLangPrintf(stderr, _("%s: Unable to connect to \"%s:%d\": %s"), "lpadmin", host, port, cupsLastErrorString());
- return (NULL);
- }
-
- /*
- * Send a Get-Printer-Attributes request...
- */
-
- request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
- response = cupsDoRequest(http, request, resource);
-
- if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
- {
- _cupsLangPrintf(stderr, _("%s: Unable to query printer: %s"), "lpadmin", cupsLastErrorString());
- buffer[0] = '\0';
- }
- else if (_ppdCreateFromIPP(buffer, bufsize, response))
- {
- if (!cupsGetOption("printer-geo-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
- *num_options = cupsAddOption("printer-geo-location", ippGetString(attr, 0, NULL), *num_options, options);
-
- if (!cupsGetOption("printer-info", *num_options, *options) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
- *num_options = cupsAddOption("printer-info", ippGetString(attr, 0, NULL), *num_options, options);
-
- if (!cupsGetOption("printer-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL)
- *num_options = cupsAddOption("printer-location", ippGetString(attr, 0, NULL), *num_options, options);
- }
- else
- _cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
-
- ippDelete(response);
- httpClose(http);
-
- if (buffer[0])
- return (buffer);
- else
- return (NULL);
-}
-
-
/*
* 'get_printer_type()' - Determine the printer type and URI.
*/
if (file)
ppdfile = file;
- else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "raw") && num_options > 1)
+ else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "everywhere") && strcmp(ppdname, "raw") && num_options > 1)
{
if ((ppdfile = cupsGetServerPPD(http, ppdname)) != NULL)
{
if (!name)
return (0);
- while (*list)
+ do
{
/*
* Skip leading whitespace and commas...
while (*list && !isspace(*list & 255) && *list != ',')
list ++;
}
+ while (*list);
return (0);
}
_cupsLangPrintf(stdout, _("%s not accepting requests since %s -"),
printer, printer_state_time);
_cupsLangPrintf(stdout, _("\t%s"),
- (message == NULL || !*message) ?
- "reason unknown" : message);
+ (message && *message) ?
+ message : "reason unknown");
}
for (i = 0; i < num_dests; i ++)
_("%s/%s not accepting requests since %s -"),
printer, dests[i].instance, printer_state_time);
_cupsLangPrintf(stdout, _("\t%s"),
- (message == NULL || !*message) ?
- "reason unknown" : message);
+ (message && *message) ?
+ message : "reason unknown");
}
}
}
printer_uri = NULL;
members = NULL;
- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
+ do
{
if (!strcmp(attr->name, "printer-name") &&
attr->value_tag == IPP_TAG_NAME)
attr = attr->next;
}
+ while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER);
/*
* If this is a remote class, grab the class info from the
if ((message && *message) || pstate == IPP_PRINTER_STOPPED)
{
- if (!message || !*message)
- _cupsLangPuts(stdout, _("\treason unknown"));
+ if (message && *message)
+ _cupsLangPrintf(stdout, "\t%s", message);
else
- _cupsLangPrintf(stdout, "\t%s", message);
+ _cupsLangPuts(stdout, _("\treason unknown"));
}
if (long_status > 1)
if ((message && *message) || pstate == IPP_PRINTER_STOPPED)
{
- if (!message || !*message)
- _cupsLangPuts(stdout, _("\treason unknown"));
- else
+ if (message && *message)
_cupsLangPrintf(stdout, "\t%s", message);
+ else
+ _cupsLangPuts(stdout, _("\treason unknown"));
}
if (long_status > 1)
printers.tmpl \
printers-header.tmpl \
restart.tmpl \
- samba-export.tmpl \
- samba-exported.tmpl \
search.tmpl \
set-printer-options-header.tmpl \
set-printer-options-trailer.tmpl \
<TD>
<SELECT NAME="PPD_NAME" SIZE="10">
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Current Driver - {current_make_and_model}</OPTION>:}
-{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model} - IPP Everywhere ™</OPTION>:}
+{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model?{current_make_and_model} -:} IPP Everywhere ™</OPTION>:}
{[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
}</SELECT>
</TD>
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
#
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2021 by Apple Inc.
# Copyright © 1997-2007 by Easy Software Products, all rights reserved.
#
# Licensed under Apache License v2.0. See the file "LICENSE" for more
EOF
ln -s $root/data $BASE/share
ln -s $root/ppdc/sample.drv $BASE/share/drv
+ln -s $root/conf/cgi.types $BASE/share/mime
ln -s $root/conf/mime.types $BASE/share/mime
ln -s $root/conf/mime.convs $BASE/share/mime
ln -s $root/data/*.h $BASE/share/ppdc
/*
* IPP Everywhere printer application for CUPS.
*
- * Copyright © 2010-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by the IEEE-ISTO Printer Working Group.
+ * Copyright © 2010-2021 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
- * information.º
+ * information.
*
* Note: This program began life as the "ippserver" sample code that first
* appeared in CUPS 1.4. The name has been changed in order to distinguish it
#else
extern char **environ;
+# include <spawn.h>
# include <sys/fcntl.h>
# include <sys/wait.h>
# include <poll.h>
#elif defined(HAVE_AVAHI)
# include <avahi-client/client.h>
# include <avahi-client/publish.h>
+# include <avahi-common/alternative.h>
# include <avahi-common/error.h>
+# include <avahi-common/malloc.h>
# include <avahi-common/thread-watch.h>
#endif /* HAVE_DNSSD */
#endif /* HAVE_LIBPAM */
#include "printer-png.h"
+#include "printer-lg-png.h"
+#include "printer-sm-png.h"
/*
/* TODO: One IPv4 and one IPv6 listener are really not sufficient */
int ipv4, /* IPv4 listener */
ipv6; /* IPv6 listener */
- ippeve_srv_t ipp_ref, /* Bonjour IPP service */
- ipps_ref, /* Bonjour IPPS service */
- http_ref, /* Bonjour HTTP service */
- printer_ref; /* Bonjour LPD service */
- char *dnssd_name, /* printer-dnssd-name */
+#ifdef HAVE_DNSSD
+ ippeve_srv_t ipp_ref, /* DNS-SD IPP service */
+ ipps_ref, /* DNS-SD IPPS service */
+ http_ref, /* DNS-SD HTTP service */
+ printer_ref; /* DNS-SD LPD service */
+#elif defined(HAVE_AVAHI)
+ ippeve_srv_t dnssd_ref; /* DNS-SD services */
+#endif /* HAVE_DNSSD */
+ char *dnssd_subtypes;/* DNS-SD subtypes */
+ int dnssd_collision;/* Name collision? */
+ char *dnssd_name, /* printer-dns-sd-name */
*name, /* printer-name */
- *icon, /* Icon filename */
+ *icons[3], /* Icon filenames */
+ *strings, /* Strings filename */
*directory, /* Spool directory */
*hostname, /* Hostname */
- *uri, /* printer-uri-supported */
*device_uri, /* Device URI (if any) */
*output_format, /* Output format */
#if !CUPS_LITE
http_state_t operation; /* Request operation */
ipp_op_t operation_id; /* IPP operation-id */
char uri[1024], /* Request URI */
- *options; /* URI options */
+ *options, /* URI options */
+ host_field[HTTP_MAX_VALUE];
+ /* Host: header */
+ int host_port; /* Port number from Host: header */
http_addr_t addr; /* Client address */
char hostname[256], /* Client hostname */
username[HTTP_MAX_VALUE];
static int create_listener(const char *name, int port, int family);
static ipp_t *create_media_col(const char *media, const char *source, const char *type, int width, int length, int bottom, int left, int right, int top);
static ipp_t *create_media_size(int width, int length);
-static ippeve_printer_t *create_printer(const char *servername, int serverport, const char *name, const char *location, const char *icon, cups_array_t *docformats, const char *subtypes, const char *directory, const char *command, const char *device_uri, const char *output_format, ipp_t *attrs);
+static ippeve_printer_t *create_printer(const char *servername, int serverport, const char *name, const char *location, const char *icons, const char *strings, cups_array_t *docformats, const char *subtypes, const char *directory, const char *command, const char *device_uri, const char *output_format, ipp_t *attrs);
static void debug_attributes(const char *title, ipp_t *ipp, int response);
static void delete_client(ippeve_client_t *client);
static void delete_job(ippeve_job_t *job);
static ippeve_job_t *find_job(ippeve_client_t *client);
static void finish_document_data(ippeve_client_t *client, ippeve_job_t *job);
static void finish_document_uri(ippeve_client_t *client, ippeve_job_t *job);
+static void flush_document_data(ippeve_client_t *client);
+static int have_document_data(ippeve_client_t *client);
static void html_escape(ippeve_client_t *client, const char *s, size_t slen);
static void html_footer(ippeve_client_t *client);
static void html_header(ippeve_client_t *client, const char *title, int refresh);
static void html_printf(ippeve_client_t *client, const char *format, ...) _CUPS_FORMAT(2, 3);
static void ipp_cancel_job(ippeve_client_t *client);
+static void ipp_cancel_my_jobs(ippeve_client_t *client);
static void ipp_close_job(ippeve_client_t *client);
static void ipp_create_job(ippeve_client_t *client);
static void ipp_get_job_attributes(ippeve_client_t *client);
static int process_ipp(ippeve_client_t *client);
static void *process_job(ippeve_job_t *job);
static void process_state_message(ippeve_job_t *job, char *message);
-static int register_printer(ippeve_printer_t *printer, const char *subtypes);
+static int register_printer(ippeve_printer_t *printer);
static int respond_http(ippeve_client_t *client, http_status_t code, const char *content_coding, const char *type, size_t length);
static void respond_ipp(ippeve_client_t *client, ipp_status_t status, const char *message, ...) _CUPS_FORMAT(3, 4);
static void respond_unsupported(ippeve_client_t *client, ipp_attribute_t *attr);
#if !CUPS_LITE
*ppdfile = NULL, /* PPD file */
#endif /* !CUPS_LITE */
+ *strings = NULL, /* Strings file */
*subtypes = "_print"; /* DNS-SD service subtype */
int legacy = 0, /* Legacy mode? */
duplex = 0, /* Duplex mode */
break;
#endif /* !CUPS_LITE */
+ case 'S' : /* -S filename.strings */
+ i ++;
+ if (i >= argc)
+ usage(1);
+
+ strings = argv[i];
+ break;
+
case 'V' : /* -V max-version */
i ++;
if (i >= argc)
* Apply defaults as needed...
*/
- if (!serverport)
- {
-#ifdef _WIN32
- /*
- * Windows is almost always used as a single user system, so use a default
- * port number of 8631.
- */
-
- serverport = 8631;
-
-#else
- /*
- * Use 8000 + UID mod 1000 for the default port number...
- */
-
- serverport = 8000 + ((int)getuid() % 1000);
-#endif /* _WIN32 */
-
- _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
- }
-
if (!directory[0])
{
const char *tmpdir; /* Temporary directory */
else
attrs = load_legacy_attributes(make, model, ppm, ppm_color, duplex, docformats);
- if ((printer = create_printer(servername, serverport, name, location, icon, docformats, subtypes, directory, command, device_uri, output_format, attrs)) == NULL)
+ if ((printer = create_printer(servername, serverport, name, location, icon, strings, docformats, subtypes, directory, command, device_uri, output_format, attrs)) == NULL)
return (1);
printer->web_forms = web_forms;
job->id = client->printer->next_job_id ++;
- snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+ if ((attr = ippFindAttribute(client->request, "printer-uri", IPP_TAG_URI)) != NULL)
+ snprintf(uri, sizeof(uri), "%s/%d", ippGetString(attr, 0, NULL), job->id);
+ else
+ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, client->printer->hostname, client->printer->port, "/ipp/print/%d", job->id);
+
httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
if ((attr = ippFindAttribute(client->request, "printer-uri", IPP_TAG_URI)) != NULL)
+ {
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, ippGetString(attr, 0, NULL));
+ }
else
- ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+ {
+ char printer_uri[1024]; /* job-printer-uri value */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, client->printer->hostname, client->printer->port, "/ipp/print");
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, printer_uri);
+ }
+
ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
cupsArrayAdd(client->printer->jobs, job);
int serverport, /* I - Server port */
const char *name, /* I - printer-name */
const char *location, /* I - printer-location */
- const char *icon, /* I - printer-icons */
+ const char *icons, /* I - printer-icons */
+ const char *strings, /* I - printer-strings-uri */
cups_array_t *docformats, /* I - document-format-supported */
- const char *subtypes, /* I - Bonjour service subtype(s) */
+ const char *subtypes, /* I - DNS-SD service subtype(s) */
const char *directory, /* I - Spool directory */
const char *command, /* I - Command to run on job files, if any */
const char *device_uri, /* I - Output device, if any */
#ifndef _WIN32
char path[1024]; /* Full path to command */
#endif /* !_WIN32 */
- char uri[1024], /* Printer URI */
-#ifdef HAVE_SSL
- securi[1024], /* Secure printer URI */
- *uris[2], /* All URIs */
-#endif /* HAVE_SSL */
- icons[1024], /* printer-icons URI */
- adminurl[1024], /* printer-more-info URI */
- supplyurl[1024],/* printer-supply-info-uri URI */
- uuid[128]; /* printer-uuid */
+ unsigned char sha256[32]; /* SHA-256 digest/sum */
+ char uuid_data[1024],/* Data to hash for printer-uuid */
+ uuid[128], /* printer-uuid */
+ *iconsptr; /* Pointer into icons string */
int k_supported; /* Maximum file size supported */
int num_formats; /* Number of supported document formats */
const char *formats[100], /* Supported document formats */
return (NULL);
}
- printer->ipv4 = -1;
- printer->ipv6 = -1;
- printer->name = strdup(name);
- printer->dnssd_name = strdup(name);
- printer->command = command ? strdup(command) : NULL;
- printer->device_uri = device_uri ? strdup(device_uri) : NULL;
- printer->output_format = output_format ? strdup(output_format) : NULL;
- printer->directory = strdup(directory);
- printer->icon = icon ? strdup(icon) : NULL;
- printer->port = serverport;
- printer->start_time = time(NULL);
- printer->config_time = printer->start_time;
- printer->state = IPP_PSTATE_IDLE;
- printer->state_reasons = IPPEVE_PREASON_NONE;
- printer->state_time = printer->start_time;
- printer->jobs = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
- printer->next_job_id = 1;
+ printer->ipv4 = -1;
+ printer->ipv6 = -1;
+ printer->name = strdup(name);
+ printer->dnssd_name = strdup(name);
+ printer->dnssd_subtypes = subtypes ? strdup(subtypes) : NULL;
+ printer->command = command ? strdup(command) : NULL;
+ printer->device_uri = device_uri ? strdup(device_uri) : NULL;
+ printer->output_format = output_format ? strdup(output_format) : NULL;
+ printer->directory = strdup(directory);
+ printer->icons[0] = icons ? strdup(icons) : NULL;
+ printer->strings = strings ? strdup(strings) : NULL;
+ printer->port = serverport;
+ printer->start_time = time(NULL);
+ printer->config_time = printer->start_time;
+ printer->state = IPP_PSTATE_IDLE;
+ printer->state_reasons = IPPEVE_PREASON_NONE;
+ printer->state_time = printer->start_time;
+ printer->jobs = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
+ printer->next_job_id = 1;
+
+ if (printer->icons[0])
+ {
+ /*
+ * Extract up to 3 icons...
+ */
+
+ for (i = 1, iconsptr = strchr(icons, ','); iconsptr && i < 3; i ++, iconsptr = strchr(iconsptr, ','))
+ {
+ *iconsptr++ = '\0';
+ printer->icons[i] = iconsptr;
+ }
+
+ if (iconsptr)
+ *iconsptr = '\0'; /* Strip any icons after the third... */
+
+ while (i < 3)
+ {
+ printer->icons[i] = printer->icons[i - 1];
+ i ++;
+ }
+ }
if (servername)
{
}
else
{
- char temp[1024]; /* Temporary string */
+ char temp[1024], /* Temporary string */
+ *tempptr; /* Pointer into temporary string */
+
+#ifdef HAVE_AVAHI
+ const char *avahi_name = avahi_client_get_host_name_fqdn(DNSSDClient);
- printer->hostname = strdup(httpGetHostname(NULL, temp, sizeof(temp)));
+ if (avahi_name)
+ strlcpy(temp, avahi_name, sizeof(temp));
+ else
+#endif /* HAVE_AVAHI */
+
+ if ((tempptr = strstr(httpGetHostname(NULL, temp, sizeof(temp)), ".lan")) != NULL && !tempptr[5])
+ strlcpy(tempptr, ".local", sizeof(temp) - (size_t)(tempptr - temp));
+
+ printer->hostname = strdup(temp);
}
_cupsRWInit(&(printer->rwlock));
* Create the listener sockets...
*/
- if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+ if (printer->port)
{
- perror("Unable to create IPv4 listener");
- goto bad_printer;
+ if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+ {
+ perror("Unable to create IPv4 listener");
+ goto bad_printer;
+ }
+ }
+ else
+ {
+#ifdef _WIN32
+ /*
+ * Windows is almost always used as a single user system, so use a default
+ * port number of 8631.
+ */
+
+ serverport = 8631;
+
+#else
+ /*
+ * Use 8000 + UID mod 1000 for the default port number...
+ */
+
+ serverport = 8000 + ((int)getuid() % 1000);
+#endif /* _WIN32 */
+
+ while (serverport < 10000)
+ {
+ if ((printer->ipv4 = create_listener(servername, serverport, AF_INET)) >= 0)
+ break;
+
+ serverport ++;
+ }
+
+ if (serverport < 10000)
+ {
+ _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
+ printer->port = serverport;
+ }
+ else
+ {
+ perror("Unable to create IPv4 listener");
+ goto bad_printer;
+ }
}
if ((printer->ipv6 = create_listener(servername, printer->port, AF_INET6)) < 0)
}
/*
- * Prepare URI values for the printer attributes...
+ * Prepare values for the printer attributes...
*/
- httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, printer->hostname, printer->port, "/ipp/print");
- printer->uri = strdup(uri);
- printer->urilen = strlen(uri);
-
-#ifdef HAVE_SSL
- httpAssembleURI(HTTP_URI_CODING_ALL, securi, sizeof(securi), "ipps", NULL, printer->hostname, printer->port, "/ipp/print");
-#endif /* HAVE_SSL */
-
- httpAssembleURI(HTTP_URI_CODING_ALL, icons, sizeof(icons), WEB_SCHEME, NULL, printer->hostname, printer->port, "/icon.png");
- httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/");
- httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/supplies");
- httpAssembleUUID(printer->hostname, serverport, name, 0, uuid, sizeof(uuid));
+ snprintf(uuid_data, sizeof(uuid_data), "_IPPEVEPRINTER_:%s:%d:%s", printer->hostname, printer->port, printer->name);
+ cupsHashData("sha2-256", (unsigned char *)uuid_data, strlen(uuid_data), sha256, sizeof(sha256));
+ snprintf(uuid, sizeof(uuid), "urn:uuid:%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", sha256[0], sha256[1], sha256[3], sha256[4], sha256[5], sha256[6], (sha256[10] & 15) | 0x30, sha256[11], (sha256[15] & 0x3f) | 0x40, sha256[16], sha256[20], sha256[21], sha256[25], sha256[26], sha256[30], sha256[31]);
if (Verbosity)
{
- fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
- fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
#ifdef HAVE_SSL
- fprintf(stderr, "printer-uri=\"%s\",\"%s\"\n", uri, securi);
+ fprintf(stderr, "printer-uri-supported=\"ipp://%s:%d/ipp/print\",\"ipps://%s:%d/ipp/print\"\n", printer->hostname, printer->port, printer->hostname, printer->port);
#else
- fprintf(stderr, "printer-uri=\"%s\"\n", uri);
+ fprintf(stderr, "printer-uri-supported=\"ipp://%s:%d/ipp/print\"\n", printer->hostname, printer->port);
#endif /* HAVE_SSL */
+ fprintf(stderr, "printer-uuid=\"%s\"\n", uuid);
}
/*
/* printer-geo-location */
ippAddOutOfBand(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location");
- /* printer-icons */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", NULL, icons);
-
/* printer-is-accepting-jobs */
ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
/* printer-location */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", NULL, location);
- /* printer-more-info */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
-
/* printer-name */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, name);
/* printer-organizational-unit */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organizational-unit", NULL, "");
- /* printer-supply-info-uri */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
-
- /* printer-uri-supported */
-#ifdef HAVE_SSL
- uris[0] = uri;
- uris[1] = securi;
-
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", 2, NULL, (const char **)uris);
-
-#else
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
-#endif /* HAVE_SSL */
+ /* printer-strings-languages-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE, "printer-strings-languages-supported", NULL, "en");
/* printer-uuid */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
debug_attributes("Printer", printer->attrs, 0);
/*
- * Register the printer with Bonjour...
+ * Register the printer with DNS-SD...
*/
- if (!register_printer(printer, subtypes))
+ if (!register_printer(printer))
goto bad_printer;
/*
#elif defined(HAVE_AVAHI)
avahi_threaded_poll_lock(DNSSDMaster);
- if (printer->printer_ref)
- avahi_entry_group_free(printer->printer_ref);
- if (printer->ipp_ref)
- avahi_entry_group_free(printer->ipp_ref);
- if (printer->ipps_ref)
- avahi_entry_group_free(printer->ipps_ref);
- if (printer->http_ref)
- avahi_entry_group_free(printer->http_ref);
+ if (printer->dnssd_ref)
+ avahi_entry_group_free(printer->dnssd_ref);
avahi_threaded_poll_unlock(DNSSDMaster);
#endif /* HAVE_DNSSD */
free(printer->dnssd_name);
if (printer->name)
free(printer->name);
- if (printer->icon)
- free(printer->icon);
+ if (printer->icons[0])
+ free(printer->icons[0]);
+ if (printer->strings)
+ free(printer->strings);
if (printer->command)
free(printer->command);
if (printer->device_uri)
free(printer->directory);
if (printer->hostname)
free(printer->hostname);
- if (printer->uri)
- free(printer->uri);
ippDelete(printer->attrs);
cupsArrayDelete(printer->jobs);
#ifdef HAVE_DNSSD
/*
- * 'dnssd_callback()' - Handle Bonjour registration events.
+ * 'dnssd_callback()' - Handle DNS-SD registration events.
*/
static void DNSSD_API
const char *name, /* I - Service name */
const char *regtype, /* I - Service type */
const char *domain, /* I - Domain for service */
- ippeve_printer_t *printer) /* I - Printer */
+ ippeve_printer_t *printer) /* I - Printer */
{
(void)sdRef;
(void)flags;
(void)domain;
+ (void)name;
- if (errorCode)
+ if (errorCode == kDNSServiceErr_NameConflict)
{
- fprintf(stderr, "DNSServiceRegister for %s failed with error %d.\n", regtype, (int)errorCode);
- return;
+ fputs("DNS-SD service name collision detected.\n", stderr);
+ printer->dnssd_collision = 1;
}
- else if (strcasecmp(name, printer->dnssd_name))
+ else if (errorCode)
{
- if (Verbosity)
- fprintf(stderr, "Now using DNS-SD service name \"%s\".\n", name);
-
- /* No lock needed since only the main thread accesses/changes this */
- free(printer->dnssd_name);
- printer->dnssd_name = strdup(name);
+ fprintf(stderr, "DNSServiceRegister for %s failed with error %d.\n", regtype, (int)errorCode);
+ return;
}
}
#elif defined(HAVE_AVAHI)
/*
- * 'dnssd_callback()' - Handle Bonjour registration events.
+ * 'dnssd_callback()' - Handle DNS-SD registration events.
*/
static void
AvahiEntryGroupState state, /* I - Registration state */
void *context) /* I - Printer */
{
+ ippeve_printer_t *printer = (ippeve_printer_t *)context;
+ /* Printer */
+
+
(void)srv;
- (void)state;
- (void)context;
+
+ if (state == AVAHI_ENTRY_GROUP_COLLISION)
+ {
+ fputs("DNS-SD service name collision detected.\n", stderr);
+ printer->dnssd_collision = 1;
+ }
}
dnssd_client_cb(
AvahiClient *c, /* I - Client */
AvahiClientState state, /* I - Current state */
- void *userdata) /* I - User data (unused) */
+ void *userdata) /* I - User data (printer) */
{
- (void)userdata;
-
if (!c)
return;
#ifdef HAVE_DNSSD
if (DNSServiceCreateConnection(&DNSSDMaster) != kDNSServiceErr_NoError)
{
- fputs("Error: Unable to initialize Bonjour.\n", stderr);
+ fputs("Error: Unable to initialize DNS-SD.\n", stderr);
exit(1);
}
if ((DNSSDMaster = avahi_threaded_poll_new()) == NULL)
{
- fputs("Error: Unable to initialize Bonjour.\n", stderr);
+ fputs("Error: Unable to initialize DNS-SD.\n", stderr);
exit(1);
}
if ((DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssd_client_cb, NULL, &error)) == NULL)
{
- fputs("Error: Unable to initialize Bonjour.\n", stderr);
+ fputs("Error: Unable to initialize DNS-SD.\n", stderr);
exit(1);
}
if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
{
const char *uri = ippGetString(attr, 0, NULL);
+ /* URI value */
+ const char *uriptr = strrchr(uri, '/');
+ /* Pointer to the last slash in the URI */
- if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
- uri[client->printer->urilen] == '/')
- key.id = atoi(uri + client->printer->urilen + 1);
+ if (uriptr && isdigit(uriptr[1] & 255))
+ key.id = atoi(uriptr + 1);
else
return (NULL);
}
* Do we have a file to print?
*/
- if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+ if (have_document_data(client))
{
+ flush_document_data(client);
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unexpected document data following request.");
goto abort_job;
}
+/*
+ * 'flush_document_data()' - Safely flush remaining document data.
+ */
+
+static void
+flush_document_data(
+ ippeve_client_t *client) /* I - Client */
+{
+ char buffer[8192]; /* Read buffer */
+
+
+ if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+ {
+ while (httpRead2(client->http, buffer, sizeof(buffer)) > 0);
+ }
+}
+
+
+/*
+ * 'have_document_data()' - Determine whether we have more document data.
+ */
+
+static int /* O - 1 if data is present, 0 otherwise */
+have_document_data(
+ ippeve_client_t *client) /* I - Client */
+{
+ char temp; /* Data */
+
+
+ if (httpGetState(client->http) != HTTP_STATE_POST_RECV)
+ return (0);
+ else
+ return (httpPeek(client->http, &temp, 1) > 0);
+}
+
+
/*
* 'html_escape()' - Write a HTML-safe string.
*/
if ((size_t)(width + 2) > sizeof(temp))
break;
- sprintf(temp, tformat, va_arg(ap, double));
+ snprintf(temp, sizeof(temp), tformat, va_arg(ap, double));
httpWrite2(client->http, temp, strlen(temp));
break;
# ifdef HAVE_LONG_LONG
if (size == 'L')
- sprintf(temp, tformat, va_arg(ap, long long));
+ snprintf(temp, sizeof(temp), tformat, va_arg(ap, long long));
else
# endif /* HAVE_LONG_LONG */
if (size == 'l')
- sprintf(temp, tformat, va_arg(ap, long));
+ snprintf(temp, sizeof(temp), tformat, va_arg(ap, long));
else
- sprintf(temp, tformat, va_arg(ap, int));
+ snprintf(temp, sizeof(temp), tformat, va_arg(ap, int));
httpWrite2(client->http, temp, strlen(temp));
break;
if ((size_t)(width + 2) > sizeof(temp))
break;
- sprintf(temp, tformat, va_arg(ap, void *));
+ snprintf(temp, sizeof(temp), tformat, va_arg(ap, void *));
httpWrite2(client->http, temp, strlen(temp));
break;
}
+/*
+ * 'ipp_cancel_my_jobs()' - Cancel all jobs.
+ *
+ * Note: Since ippeveprinter doesn't do spooling, this really just cancels the
+ * current job.
+ */
+
+static void
+ipp_cancel_my_jobs(
+ ippeve_client_t *client) /* I - Client */
+{
+ ippeve_job_t *job; /* Job information */
+
+
+ _cupsRWLockWrite(&client->printer->rwlock);
+
+ if ((job = client->printer->active_job) != NULL)
+ {
+ /*
+ * See if the job is already completed, canceled, or aborted; if so,
+ * we can't cancel...
+ */
+
+ if (job->state < IPP_JSTATE_CANCELED)
+ {
+ /*
+ * Cancel the job...
+ */
+
+ if (job->state == IPP_JSTATE_PROCESSING || (job->state == IPP_JSTATE_HELD && job->fd >= 0))
+ {
+ job->cancel = 1;
+ }
+ else
+ {
+ job->state = IPP_JSTATE_CANCELED;
+ job->completed = time(NULL);
+ }
+ }
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ _cupsRWUnlock(&client->printer->rwlock);
+}
+
+
/*
* 'ipp_close_job()' - Close an open job.
*/
/*
- * Validate print job attributes...
+ * Do we have a file to print?
*/
- if (!valid_job_attributes(client))
+ if (have_document_data(client))
{
- httpFlush(client->http);
+ flush_document_data(client);
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Unexpected document data following request.");
return;
}
/*
- * Do we have a file to print?
+ * Validate print job attributes...
*/
- if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
- {
- respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
- "Unexpected document data following request.");
+ if (!valid_job_attributes(client))
return;
- }
/*
* Create the job...
if (!ra || cupsArrayFind(ra, "printer-current-time"))
ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
+ if (!ra || cupsArrayFind(ra, "printer-icons"))
+ {
+ char uris[3][1024]; /* Buffers for URIs */
+ const char *values[3]; /* Values for attribute */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uris[0], sizeof(uris[0]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon-sm.png");
+ httpAssembleURI(HTTP_URI_CODING_ALL, uris[1], sizeof(uris[1]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon.png");
+ httpAssembleURI(HTTP_URI_CODING_ALL, uris[2], sizeof(uris[2]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon-lg.png");
+
+ values[0] = uris[0];
+ values[1] = uris[1];
+ values[2] = uris[2];
+
+ ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", 3, NULL, values);
+ }
+
+ if (!ra || cupsArrayFind(ra, "printer-more-info"))
+ {
+ char uri[1024]; /* URI value */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/");
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, uri);
+ }
if (!ra || cupsArrayFind(ra, "printer-state"))
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", (int)printer->state);
}
}
+ if (!ra || cupsArrayFind(ra, "printer-strings-uri"))
+ {
+ char uri[1024]; /* URI value */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/en.strings");
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-strings-uri", NULL, uri);
+ }
+
+ if (!ra || cupsArrayFind(ra, "printer-supply-info-uri"))
+ {
+ char uri[1024]; /* URI value */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/supplies");
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, uri);
+ }
+
if (!ra || cupsArrayFind(ra, "printer-up-time"))
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
+ if (!ra || cupsArrayFind(ra, "printer-uri-supported"))
+ {
+ char uris[2][1024]; /* Buffers for URIs */
+ const char *values[2]; /* Values for attribute */
+ int num_values = 0; /* Number of values */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uris[0], sizeof(uris[0]), "ipp", NULL, client->host_field, client->host_port, "/ipp/print");
+ values[num_values ++] = uris[0];
+
+#ifdef HAVE_SSL
+ httpAssembleURI(HTTP_URI_CODING_ALL, uris[1], sizeof(uris[1]), "ipps", NULL, client->host_field, client->host_port, "/ipp/print");
+ values[num_values ++] = uris[1];
+#endif /* HAVE_SSL */
+
+ ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", num_values, NULL, values);
+ }
+
if (!ra || cupsArrayFind(ra, "queued-job-count"))
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", printer->active_job && printer->active_job->state < IPP_JSTATE_CANCELED);
if (!actions || ippContainsString(actions, "sound"))
{
+#ifdef __APPLE__
+ pid_t pid; /* Process ID for "afplay" utility */
+ static const char * const afplay[3] =
+ { /* Arguments for "afplay" utility */
+ "/usr/bin/afplay",
+ "/System/Library/Sounds/Ping.aiff",
+ NULL
+ };
+
+ posix_spawn(&pid, afplay[0], NULL, NULL, (char **)afplay, NULL);
+
+#else
putchar(0x07);
fflush(stdout);
+#endif /* __APPLE__ */
}
if (ippContainsString(actions, "display"))
if (!valid_job_attributes(client))
{
- httpFlush(client->http);
+ flush_document_data(client);
return;
}
* Do we have a file to print?
*/
- if (httpGetState(client->http) == HTTP_STATE_POST_SEND)
+ if (!have_document_data(client))
{
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No file in request.");
return;
if (!valid_job_attributes(client))
{
- httpFlush(client->http);
+ flush_document_data(client);
return;
}
{
ippeve_job_t *job; /* Job information */
ipp_attribute_t *attr; /* Current attribute */
+ int have_data; /* Have document data? */
/*
if ((job = find_job(client)) == NULL)
{
+ flush_document_data(client);
respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
- httpFlush(client->http);
return;
}
/*
* See if we already have a document for this job or the job has already
- * in a non-pending state...
+ * in a terminating state...
*/
- if (job->state > IPP_JSTATE_HELD)
+ have_data = have_document_data(client);
+
+ if ((job->filename || job->fd >= 0) && have_data)
{
- respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
- httpFlush(client->http);
+ flush_document_data(client);
+ respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
return;
}
- else if (job->filename || job->fd >= 0)
+ else if (job->state > IPP_JSTATE_HELD && have_data)
{
- respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
- httpFlush(client->http);
+ flush_document_data(client);
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
return;
}
if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL)
{
+ flush_document_data(client);
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute.");
- httpFlush(client->http);
return;
}
else if (ippGetGroupTag(attr) != IPP_TAG_OPERATION)
{
+ flush_document_data(client);
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The last-document attribute is not in the operation group.");
- httpFlush(client->http);
return;
}
- else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0))
+ else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1)
{
+ flush_document_data(client);
respond_unsupported(client, attr);
- httpFlush(client->http);
return;
}
* Validate document attributes...
*/
- if (!valid_doc_attributes(client))
+ if (have_data && !valid_doc_attributes(client))
{
- httpFlush(client->http);
+ flush_document_data(client);
return;
}
+ if (!have_data && !job->filename)
+ job->state = IPP_JSTATE_ABORTED;
+
/*
* Then finish getting the document data and process things...
*/
_cupsRWUnlock(&(client->printer->rwlock));
- finish_document_data(client, job);
+ if (have_data)
+ finish_document_data(client, job);
}
if ((job = find_job(client)) == NULL)
{
respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
- httpFlush(client->http);
return;
}
/*
* See if we already have a document for this job or the job has already
- * in a non-pending state...
+ * in a non-terminating state...
*/
- if (job->state > IPP_JSTATE_HELD)
+ if (job->filename || job->fd >= 0)
{
- respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
- httpFlush(client->http);
+ respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
return;
}
- else if (job->filename || job->fd >= 0)
+ else if (job->state > IPP_JSTATE_HELD)
{
- respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
- httpFlush(client->http);
+ flush_document_data(client);
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
return;
}
if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL)
{
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute.");
- httpFlush(client->http);
return;
}
else if (ippGetGroupTag(attr) != IPP_TAG_OPERATION)
{
respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The last-document attribute is not in the operation group.");
- httpFlush(client->http);
return;
}
- else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0))
+ else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1)
{
respond_unsupported(client, attr);
- httpFlush(client->http);
return;
}
if (!valid_doc_attributes(client))
{
- httpFlush(client->http);
+ flush_document_data(client);
return;
}
"oe_photo-l_3.5x5in", /* Photo L */
"na_index-4x6_4x6in", /* Photo 4x6 */
"iso_a6_105x148mm", /* A6 */
- "na_5x7_5x7in" /* Photo 5x7 aka 2L */
+ "na_5x7_5x7in", /* Photo 5x7 aka 2L */
"iso_a5_148x210mm", /* A5 */
};
static const char * const media_ready[] =
if (cupsArrayFind(docformats, (void *)"application/pdf"))
ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "document-password-supported", 1023);
+ /* finishing-template-supported */
+ ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template-supported", NULL, "none");
+
+ /* finishings-col-database */
+ col = ippNew();
+ ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+ ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-database", col);
+ ippDelete(col);
+
+ /* finishings-col-default */
+ col = ippNew();
+ ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+ ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-default", col);
+ ippDelete(col);
+
+ /* finishings-col-ready */
+ col = ippNew();
+ ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+ ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-ready", col);
+ ippDelete(col);
+
+ /* finishings-col-supported */
+ ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishings-col-supported", NULL, "finishing-template");
+
/* finishings-default */
ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE);
+ /* finishings-ready */
+ ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-ready", IPP_FINISHINGS_NONE);
+
/* finishings-supported */
ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-supported", IPP_FINISHINGS_NONE);
}
/* finishings-col-supported */
- ippAddString(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "finishings-col-supported", NULL, "finishing-template");
+ ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishings-col-supported", NULL, "finishing-template");
/* finishings-default */
ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE);
ipp_state_t ipp_state; /* State of IPP transfer */
char scheme[32], /* Method/scheme */
userpass[128], /* Username:password */
- hostname[HTTP_MAX_HOST];
+ hostname[HTTP_MAX_HOST],
/* Hostname */
+ *ptr; /* Pointer into value */
int port; /* Port number */
static const char * const http_states[] =
{ /* Strings for logging HTTP method */
return (0);
}
+ /*
+ * Validate the host header...
+ */
+
if (!httpGetField(client->http, HTTP_FIELD_HOST)[0] &&
httpGetVersion(client->http) >= HTTP_VERSION_1_1)
{
* HTTP/1.1 and higher require the "Host:" field...
*/
+ fprintf(stderr, "%s Missing Host: header.\n", client->hostname);
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+
+ strlcpy(client->host_field, httpGetField(client->http, HTTP_FIELD_HOST), sizeof(client->host_field));
+ if ((ptr = strrchr(client->host_field, ':')) != NULL)
+ {
+ /*
+ * Grab port number from Host: header...
+ */
+
+ *ptr++ = '\0';
+ client->host_port = atoi(ptr);
+ }
+ else
+ {
+ /*
+ * Use the default port number...
+ */
+
+ client->host_port = client->printer->port;
+ }
+
+ ptr = strrchr(client->host_field, '.');
+
+ if (!isdigit(client->host_field[0] & 255) && client->host_field[0] != '[' && strcmp(client->host_field, client->printer->hostname) && strcmp(client->host_field, "localhost") &&
+ (!ptr || (strcmp(ptr, ".local") && strcmp(ptr, ".local."))))
+ {
+ fprintf(stderr, "%s Bad Host: header '%s'.\n", client->hostname, client->host_field);
respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
return (0);
}
return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
case HTTP_STATE_HEAD :
- if (!strcmp(client->uri, "/icon.png"))
+ if (!strcmp(client->uri, "/en.strings"))
+ return (respond_http(client, HTTP_STATUS_OK, NULL, "text/strings", 0));
+ else if (!strcmp(client->uri, "/icon.png") || !strcmp(client->uri, "/icon-lg.png") || !strcmp(client->uri, "/icon-sm.png"))
return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
else if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
case HTTP_STATE_GET :
- if (!strcmp(client->uri, "/icon.png"))
+ if (!strcmp(client->uri, "/en.strings"))
{
/*
- * Send PNG icon file.
+ * Send strings file.
*/
- if (client->printer->icon)
+ if (client->printer->strings)
{
int fd; /* Icon file */
struct stat fileinfo; /* Icon file information */
char buffer[4096]; /* Copy buffer */
ssize_t bytes; /* Bytes */
- fprintf(stderr, "Icon file is \"%s\".\n", client->printer->icon);
+ if (!stat(client->printer->strings, &fileinfo) && (fd = open(client->printer->strings, O_RDONLY)) >= 0)
+ {
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "text/strings", (size_t)fileinfo.st_size))
+ {
+ close(fd);
+ return (0);
+ }
+
+ while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+ httpWrite2(client->http, buffer, (size_t)bytes);
- if (!stat(client->printer->icon, &fileinfo) && (fd = open(client->printer->icon, O_RDONLY)) >= 0)
+ httpFlushWrite(client->http);
+
+ close(fd);
+ }
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ }
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ }
+ else if (!strcmp(client->uri, "/icon.png"))
+ {
+ /*
+ * Send medium PNG icon file.
+ */
+
+ if (client->printer->icons[1])
+ {
+ int fd; /* Icon file */
+ struct stat fileinfo; /* Icon file information */
+ char buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes */
+
+ if (!stat(client->printer->icons[1], &fileinfo) && (fd = open(client->printer->icons[1], O_RDONLY)) >= 0)
{
if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
{
httpFlushWrite(client->http);
}
}
+ else if (!strcmp(client->uri, "/icon-lg.png"))
+ {
+ /*
+ * Send large PNG icon file.
+ */
+
+ if (client->printer->icons[2])
+ {
+ int fd; /* Icon file */
+ struct stat fileinfo; /* Icon file information */
+ char buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes */
+
+ if (!stat(client->printer->icons[2], &fileinfo) && (fd = open(client->printer->icons[2], O_RDONLY)) >= 0)
+ {
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
+ {
+ close(fd);
+ return (0);
+ }
+
+ while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+ httpWrite2(client->http, buffer, (size_t)bytes);
+
+ httpFlushWrite(client->http);
+
+ close(fd);
+ }
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ }
+ else
+ {
+ fputs("Icon file is internal printer-lg.png.\n", stderr);
+
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", sizeof(printer_lg_png)))
+ return (0);
+
+ httpWrite2(client->http, (const char *)printer_lg_png, sizeof(printer_lg_png));
+ httpFlushWrite(client->http);
+ }
+ }
+ else if (!strcmp(client->uri, "/icon-sm.png"))
+ {
+ /*
+ * Send small PNG icon file.
+ */
+
+ if (client->printer->icons[0])
+ {
+ int fd; /* Icon file */
+ struct stat fileinfo; /* Icon file information */
+ char buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes */
+
+ if (!stat(client->printer->icons[0], &fileinfo) && (fd = open(client->printer->icons[0], O_RDONLY)) >= 0)
+ {
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
+ {
+ close(fd);
+ return (0);
+ }
+
+ while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+ httpWrite2(client->http, buffer, (size_t)bytes);
+
+ httpFlushWrite(client->http);
+
+ close(fd);
+ }
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ }
+ else
+ {
+ fputs("Icon file is internal printer-sm.png.\n", stderr);
+
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", sizeof(printer_sm_png)))
+ return (0);
+
+ httpWrite2(client->http, (const char *)printer_sm_png, sizeof(printer_sm_png));
+ httpFlushWrite(client->http);
+ }
+ }
else
{
/*
else if ((!strcmp(name, "job-uri") &&
strncmp(resource, "/ipp/print/", 11)) ||
(!strcmp(name, "printer-uri") &&
- strcmp(resource, "/ipp/print")))
+ strcmp(resource, "/ipp/print") &&
+ (strcmp(resource, "/") || ippGetOperation(client->request) != IPP_OP_GET_PRINTER_ATTRIBUTES)))
respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.",
name, ippGetString(uri, 0, NULL));
else if (client->operation_id != IPP_OP_GET_PRINTER_ATTRIBUTES && (status = authenticate_request(client)) != HTTP_STATUS_CONTINUE)
{
- httpFlush(client->http);
+ flush_document_data(client);
return (respond_http(client, status, NULL, NULL, 0));
}
if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
return (0);
- httpFlush(client->http);
+ flush_document_data(client);
return (1);
}
}
ipp_cancel_job(client);
break;
+ case IPP_OP_CANCEL_MY_JOBS :
+ ipp_cancel_my_jobs(client);
+ break;
+
case IPP_OP_GET_JOB_ATTRIBUTES :
ipp_get_job_attributes(client);
break;
/*
- * 'register_printer()' - Register a printer object via Bonjour.
+ * 'register_printer()' - Register a printer object via DNS-SD.
*/
static int /* O - 1 on success, 0 on error */
register_printer(
- ippeve_printer_t *printer, /* I - Printer */
- const char *subtypes) /* I - Service subtype(s) */
+ ippeve_printer_t *printer) /* I - Printer */
{
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- ippeve_txt_t ipp_txt; /* Bonjour IPP TXT record */
+ ippeve_txt_t ipp_txt; /* DNS-SD IPP TXT record */
int i, /* Looping var */
count; /* Number of values */
ipp_attribute_t *color_supported,
*document_format_supported,
*printer_location,
*printer_make_and_model,
- *printer_more_info,
*printer_uuid,
*sides_supported,
*urf_supported; /* Printer attributes */
const char *value; /* Value string */
- char formats[252], /* List of supported formats */
+ char adminurl[247], /* adminurl value */
+ formats[252], /* List of supported formats */
urf[252], /* List of supported URF values */
*ptr; /* Pointer into string */
- if (!strcmp(subtypes, "off"))
+ if (printer->dnssd_subtypes && !strcmp(printer->dnssd_subtypes, "off"))
return (1);
color_supported = ippFindAttribute(printer->attrs, "color-supported", IPP_TAG_BOOLEAN);
document_format_supported = ippFindAttribute(printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE);
printer_location = ippFindAttribute(printer->attrs, "printer-location", IPP_TAG_TEXT);
printer_make_and_model = ippFindAttribute(printer->attrs, "printer-make-and-model", IPP_TAG_TEXT);
- printer_more_info = ippFindAttribute(printer->attrs, "printer-more-info", IPP_TAG_URI);
printer_uuid = ippFindAttribute(printer->attrs, "printer-uuid", IPP_TAG_URI);
sides_supported = ippFindAttribute(printer->attrs, "sides-supported", IPP_TAG_KEYWORD);
urf_supported = ippFindAttribute(printer->attrs, "urf-supported", IPP_TAG_KEYWORD);
+ httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/");
+
for (i = 0, count = ippGetCount(document_format_supported), ptr = formats; i < count; i ++)
{
value = ippGetString(document_format_supported, i, NULL);
break;
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ /*
+ * Rename the service as needed...
+ */
+
+ if (printer->dnssd_collision)
+ {
+ char new_dnssd_name[256]; /* New DNS-SD name */
+ const char *uuid = ippGetString(printer_uuid, 0, NULL);
+ /* "printer-uuid" value */
+
+ _cupsRWLockWrite(&printer->rwlock);
+
+ snprintf(new_dnssd_name, sizeof(new_dnssd_name), "%s (%c%c%c%c%c%c)", printer->dnssd_name, toupper(uuid[39]), toupper(uuid[40]), toupper(uuid[41]), toupper(uuid[42]), toupper(uuid[43]), toupper(uuid[44]));
+
+ free(printer->dnssd_name);
+ printer->dnssd_name = strdup(new_dnssd_name);
+
+ fprintf(stderr, "DNS-SD name collision, trying new DNS-SD service name '%s'.\n", printer->dnssd_name);
+
+ _cupsRWUnlock(&printer->rwlock);
+
+ printer->dnssd_collision = 0;
+ }
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
#ifdef HAVE_DNSSD
- DNSServiceErrorType error; /* Error from Bonjour */
- char regtype[256]; /* Bonjour service type */
- uint32_t interface; /* Interface index */
+ DNSServiceErrorType error; /* Error from DNS-SD */
+ char regtype[256]; /* DNS-SD service type */
+ uint32_t ifindex; /* Interface index */
/*
TXTRecordSetValue(&ipp_txt, "rp", 9, "ipp/print");
if ((value = ippGetString(printer_make_and_model, 0, NULL)) != NULL)
TXTRecordSetValue(&ipp_txt, "ty", (uint8_t)strlen(value), value);
- if ((value = ippGetString(printer_more_info, 0, NULL)) != NULL)
- TXTRecordSetValue(&ipp_txt, "adminurl", (uint8_t)strlen(value), value);
+ TXTRecordSetValue(&ipp_txt, "adminurl", (uint8_t)strlen(adminurl), adminurl);
if ((value = ippGetString(printer_location, 0, NULL)) != NULL)
TXTRecordSetValue(&ipp_txt, "note", (uint8_t)strlen(value), value);
TXTRecordSetValue(&ipp_txt, "pdl", (uint8_t)strlen(formats), formats);
* defend our service name but not actually support LPD...
*/
- interface = !strcmp(printer->hostname, "localhost") ? kDNSServiceInterfaceIndexLocalOnly : kDNSServiceInterfaceIndexAny;
+ ifindex = !strcmp(printer->hostname, "localhost") ? kDNSServiceInterfaceIndexLocalOnly : kDNSServiceInterfaceIndexAny;
+
+ if (printer->printer_ref)
+ DNSServiceRefDeallocate(printer->printer_ref);
printer->printer_ref = DNSSDMaster;
- if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+ if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
{
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_printer._tcp", error);
return (0);
* advertise our IPP printer...
*/
+ if (printer->ipp_ref)
+ DNSServiceRefDeallocate(printer->ipp_ref);
+
printer->ipp_ref = DNSSDMaster;
- if (subtypes && *subtypes)
- snprintf(regtype, sizeof(regtype), "_ipp._tcp,%s", subtypes);
+ if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
+ snprintf(regtype, sizeof(regtype), "_ipp._tcp,%s", printer->dnssd_subtypes);
else
strlcpy(regtype, "_ipp._tcp", sizeof(regtype));
- if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+ if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
{
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
return (0);
* advertise our IPPS printer...
*/
+ if (printer->ipps_ref)
+ DNSServiceRefDeallocate(printer->ipps_ref);
+
printer->ipps_ref = DNSSDMaster;
- if (subtypes && *subtypes)
- snprintf(regtype, sizeof(regtype), "_ipps._tcp,%s", subtypes);
+ if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
+ snprintf(regtype, sizeof(regtype), "_ipps._tcp,%s", printer->dnssd_subtypes);
else
strlcpy(regtype, "_ipps._tcp", sizeof(regtype));
- if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+ if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
{
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
return (0);
* real port number to advertise our IPP printer...
*/
+ if (printer->http_ref)
+ DNSServiceRefDeallocate(printer->http_ref);
+
printer->http_ref = DNSSDMaster;
- if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+ if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
{
_cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_http._tcp,_printer", error);
return (0);
ipp_txt = avahi_string_list_add_printf(ipp_txt, "rp=ipp/print");
if ((value = ippGetString(printer_make_and_model, 0, NULL)) != NULL)
ipp_txt = avahi_string_list_add_printf(ipp_txt, "ty=%s", value);
- if ((value = ippGetString(printer_more_info, 0, NULL)) != NULL)
- ipp_txt = avahi_string_list_add_printf(ipp_txt, "adminurl=%s", value);
+ ipp_txt = avahi_string_list_add_printf(ipp_txt, "adminurl=%s", adminurl);
if ((value = ippGetString(printer_location, 0, NULL)) != NULL)
ipp_txt = avahi_string_list_add_printf(ipp_txt, "note=%s", value);
ipp_txt = avahi_string_list_add_printf(ipp_txt, "pdl=%s", formats);
avahi_threaded_poll_lock(DNSSDMaster);
- printer->ipp_ref = avahi_entry_group_new(DNSSDClient, dnssd_callback, NULL);
+ if (printer->dnssd_ref)
+ avahi_entry_group_free(printer->dnssd_ref);
+
+ printer->dnssd_ref = avahi_entry_group_new(DNSSDClient, dnssd_callback, printer);
- avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_printer._tcp", NULL, NULL, 0, NULL);
+ avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_printer._tcp", NULL, NULL, 0, NULL);
/*
* Then register the _ipp._tcp (IPP)...
*/
- avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, NULL, printer->port, ipp_txt);
- if (subtypes && *subtypes)
+ avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, NULL, printer->port, ipp_txt);
+ if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
{
- char *temptypes = strdup(subtypes), *start, *end;
+ char *temptypes = strdup(printer->dnssd_subtypes), *start, *end;
for (start = temptypes; *start; start = end)
{
end = start + strlen(start);
snprintf(temp, sizeof(temp), "%s._sub._ipp._tcp", start);
- avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, temp);
+ avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, temp);
}
free(temptypes);
* _ipps._tcp (IPPS) for secure printing...
*/
- avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, NULL, printer->port, ipp_txt);
- if (subtypes && *subtypes)
+ avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, NULL, printer->port, ipp_txt);
+ if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
{
- char *temptypes = strdup(subtypes), *start, *end;
+ char *temptypes = strdup(printer->dnssd_subtypes), *start, *end;
for (start = temptypes; *start; start = end)
{
end = start + strlen(start);
snprintf(temp, sizeof(temp), "%s._sub._ipps._tcp", start);
- avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, temp);
+ avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, temp);
}
free(temptypes);
* Finally _http.tcp (HTTP) for the web interface...
*/
- avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, NULL, printer->port, NULL);
- avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, "_printer._sub._http._tcp");
+ avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, NULL, printer->port, NULL);
+ avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, "_printer._sub._http._tcp");
/*
* Commit it...
*/
- avahi_entry_group_commit(printer->ipp_ref);
+ avahi_entry_group_commit(printer->dnssd_ref);
avahi_threaded_poll_unlock(DNSSDMaster);
avahi_string_list_free(ipp_txt);
static void
run_printer(ippeve_printer_t *printer) /* I - Printer */
{
- int num_fds; /* Number of file descriptors */
- struct pollfd polldata[3]; /* poll() data */
- int timeout; /* Timeout for poll() */
- ippeve_client_t *client; /* New client */
+ int num_fds; /* Number of file descriptors */
+ struct pollfd polldata[3]; /* poll() data */
+ ippeve_client_t *client; /* New client */
/*
- * Setup poll() data for the Bonjour service socket and IPv4/6 listeners...
+ * Setup poll() data for the DNS-SD service socket and IPv4/6 listeners...
*/
polldata[0].fd = printer->ipv4;
for (;;)
{
- if (cupsArrayCount(printer->jobs))
- timeout = 10;
- else
- timeout = -1;
-
- if (poll(polldata, (nfds_t)num_fds, timeout) < 0 && errno != EINTR)
+ if (poll(polldata, (nfds_t)num_fds, 1000) < 0 && errno != EINTR)
{
perror("poll() failed");
break;
}
}
+ /*
+ * Process DNS-SD messages...
+ */
+
#ifdef HAVE_DNSSD
if (polldata[2].revents & POLLIN)
DNSServiceProcessResult(DNSSDMaster);
#endif /* HAVE_DNSSD */
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ if (printer->dnssd_collision)
+ register_printer(printer);
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
/*
* Clean out old jobs...
*/
_cupsLangPuts(stdout, _("-K keypath Set location of server X.509 certificates and keys."));
#endif /* HAVE_SSL */
_cupsLangPuts(stdout, _("-M manufacturer Set manufacturer name (default=Test)"));
+#if !CUPS_LITE
_cupsLangPuts(stdout, _("-P filename.ppd Load printer attributes from PPD file"));
+#endif /* !CUPS_LITE */
+ _cupsLangPuts(stdout, _("-S filename.strings Set strings file"));
_cupsLangPuts(stdout, _("-V version Set default IPP version"));
_cupsLangPuts(stdout, _("-a filename.conf Load printer attributes from conf file"));
_cupsLangPuts(stdout, _("-c command Set print command"));
_cupsLangPuts(stdout, _("-d spool-directory Set spool directory"));
_cupsLangPuts(stdout, _("-f type/subtype[,...] Set supported file types"));
- _cupsLangPuts(stdout, _("-i iconfile.png Set icon file"));
+ _cupsLangPuts(stdout, _("-i iconfile.png[,...] Set icon file(s)"));
_cupsLangPuts(stdout, _("-k Keep job spool files"));
_cupsLangPuts(stdout, _("-l location Set location of printer"));
_cupsLangPuts(stdout, _("-m model Set model name (default=Printer)"));
memset(header, 0, sizeof(header));
httpPeek(client->http, (char *)header, sizeof(header));
+ fprintf(stderr, "%s %s Auto-type header: %02X%02X%02X%02X%02X%02X%02X%02X\n", client->hostname, op_name, header[0], header[1], header[2], header[3], header[4], header[5], header[6], header[7]);
if (!memcmp(header, "%PDF", 4))
format = "application/pdf";
else if (!memcmp(header, "%!", 2))
format = "image/jpeg";
else if (!memcmp(header, "\211PNG", 4))
format = "image/png";
- else if (!memcmp(header, "RAS2", 4))
+ else if (!memcmp(header, "RaS2PwgR", 8))
format = "image/pwg-raster";
else if (!memcmp(header, "UNIRAST", 8))
format = "image/urf";
if (length > 0)
{
// Copy any remainder into the leftdata array...
- if ((length - leftcount) > 0)
+ if (length > leftcount)
memcpy(leftdata + leftcount, data, (size_t)(length - leftcount));
memset(leftdata + length, 0, (size_t)(4 - length));
* commands such as IPP and Bonjour conformance tests. This tool is
* inspired by the UNIX "find" command, thus its name.
*
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by the IEEE-ISTO Printer Working Group
* Copyright © 2008-2018 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
static void client_callback(AvahiClient *client,
AvahiClientState state,
void *context);
-#endif /* HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
static int compare_services(ippfind_srv_t *a, ippfind_srv_t *b);
static const char *dnssd_error_string(int error);
}
#elif defined(HAVE_AVAHI)
+ char *subtype, /* Sub-type, if any */
+ subtype_buf[256]; /* Sub-type buffer */
+
+ if ((subtype = strstr(regtype, ",_")) != NULL)
+ {
+ *subtype++ = '\0';
+ snprintf(subtype_buf, sizeof(subtype_buf), "%s._sub.%s", subtype, regtype);
+ regtype = subtype_buf;
+ }
+
if (avahi_service_browser_new(avahi_client, AVAHI_IF_UNSPEC,
AVAHI_PROTO_UNSPEC, regtype, domain, 0,
browse_callback, services))
_cupsLangPuts(stderr, _("-h regex Match hostname to regular expression"));
_cupsLangPuts(stderr, _("-l List attributes"));
_cupsLangPuts(stderr, _("-n regex Match service name to regular expression"));
+ _cupsLangPuts(stderr, _("-N name Match service name to literal name value"));
_cupsLangPuts(stderr, _("-p Print URI if true"));
_cupsLangPuts(stderr, _("-q Quietly report match via exit code"));
_cupsLangPuts(stderr, _("-r True if service is remote"));
_cupsLangPuts(stderr, _("--exec utility [argument ...] ;\n"
" Execute program if true"));
_cupsLangPuts(stderr, _("--host regex Match hostname to regular expression"));
- _cupsLangPuts(stderr, _("--ls List attributes"));
+ _cupsLangPuts(stderr, _("--literal-name name Match service name to literal name value"));
_cupsLangPuts(stderr, _("--local True if service is local"));
+ _cupsLangPuts(stderr, _("--ls List attributes"));
_cupsLangPuts(stderr, _("--name regex Match service name to regular expression"));
_cupsLangPuts(stderr, _("--path regex Match resource path to regular expression"));
_cupsLangPuts(stderr, _("--port number[-number] Match port to number or range"));
/*
* ipptool command for CUPS.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by The Printer Working Group.
+ * Copyright © 2007-2021 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
#endif /* !O_BINARY */
+/*
+ * Limits...
+ */
+
+#define MAX_EXPECT 200 // Maximum number of EXPECT directives
+#define MAX_DISPLAY 200 // Maximum number of DISPLAY directives
+#define MAX_MONITOR 10 // Maximum number of MONITOR-PRINTER-STATE EXPECT directives
+
+
/*
* Types...
*/
-typedef enum _cups_transfer_e /**** How to send request data ****/
+typedef enum ipptool_transfer_e /**** How to send request data ****/
{
- _CUPS_TRANSFER_AUTO, /* Chunk for files, length for static */
- _CUPS_TRANSFER_CHUNKED, /* Chunk always */
- _CUPS_TRANSFER_LENGTH /* Length always */
-} _cups_transfer_t;
+ IPPTOOL_TRANSFER_AUTO, /* Chunk for files, length for static */
+ IPPTOOL_TRANSFER_CHUNKED, /* Chunk always */
+ IPPTOOL_TRANSFER_LENGTH /* Length always */
+} ipptool_transfer_t;
-typedef enum _cups_output_e /**** Output mode ****/
+typedef enum ipptool_output_e /**** Output mode ****/
{
- _CUPS_OUTPUT_QUIET, /* No output */
- _CUPS_OUTPUT_TEST, /* Traditional CUPS test output */
- _CUPS_OUTPUT_PLIST, /* XML plist test output */
- _CUPS_OUTPUT_IPPSERVER, /* ippserver attribute file output */
- _CUPS_OUTPUT_LIST, /* Tabular list output */
- _CUPS_OUTPUT_CSV /* Comma-separated values output */
-} _cups_output_t;
-
-typedef enum _cups_with_e /**** WITH flags ****/
+ IPPTOOL_OUTPUT_QUIET, /* No output */
+ IPPTOOL_OUTPUT_TEST, /* Traditional CUPS test output */
+ IPPTOOL_OUTPUT_PLIST, /* XML plist test output */
+ IPPTOOL_OUTPUT_IPPSERVER, /* ippserver attribute file output */
+ IPPTOOL_OUTPUT_LIST, /* Tabular list output */
+ IPPTOOL_OUTPUT_CSV /* Comma-separated values output */
+} ipptool_output_t;
+
+typedef enum ipptool_with_e /**** WITH flags ****/
{
- _CUPS_WITH_LITERAL = 0, /* Match string is a literal value */
- _CUPS_WITH_ALL = 1, /* Must match all values */
- _CUPS_WITH_REGEX = 2, /* Match string is a regular expression */
- _CUPS_WITH_HOSTNAME = 4, /* Match string is a URI hostname */
- _CUPS_WITH_RESOURCE = 8, /* Match string is a URI resource */
- _CUPS_WITH_SCHEME = 16 /* Match string is a URI scheme */
-} _cups_with_t;
-
-typedef struct _cups_expect_s /**** Expected attribute info ****/
+ IPPTOOL_WITH_LITERAL = 0, /* Match string is a literal value */
+ IPPTOOL_WITH_ALL = 1, /* Must match all values */
+ IPPTOOL_WITH_REGEX = 2, /* Match string is a regular expression */
+ IPPTOOL_WITH_HOSTNAME = 4, /* Match string is a URI hostname */
+ IPPTOOL_WITH_RESOURCE = 8, /* Match string is a URI resource */
+ IPPTOOL_WITH_SCHEME = 16 /* Match string is a URI scheme */
+} ipptool_with_t;
+
+typedef struct ipptool_expect_s /**** Expected attribute info ****/
{
int optional, /* Optional attribute? */
not_expect, /* Don't expect attribute? */
*with_value_from, /* Attribute must have one of the values in this attribute */
*define_match, /* Variable to define on match */
*define_no_match, /* Variable to define on no-match */
- *define_value; /* Variable to define with value */
+ *define_value, /* Variable to define with value */
+ *display_match; /* Message to display on a match */
int repeat_limit, /* Maximum number of times to repeat */
repeat_match, /* Repeat test on match */
repeat_no_match, /* Repeat test on no match */
- with_flags, /* WITH flags */
+ with_distinct, /* WITH-DISTINCT-VALUES? */
+ with_flags, /* WITH flags */
count; /* Expected count if > 0 */
ipp_tag_t in_group; /* IN-GROUP value */
-} _cups_expect_t;
+} ipptool_expect_t;
-typedef struct _cups_status_s /**** Status info ****/
+typedef struct ipptool_status_s /**** Status info ****/
{
ipp_status_t status; /* Expected status code */
char *if_defined, /* Only if variable is defined */
int repeat_limit, /* Maximum number of times to repeat */
repeat_match, /* Repeat the test when it does not match */
repeat_no_match; /* Repeat the test when it matches */
-} _cups_status_t;
+} ipptool_status_t;
-typedef struct _cups_testdata_s /**** Test Data ****/
+typedef struct ipptool_test_s /**** Test Data ****/
{
/* Global Options */
+ _ipp_vars_t *vars; /* Variables */
http_encryption_t encryption; /* Encryption for connection */
int family; /* Address family */
- _cups_output_t output; /* Output mode */
+ ipptool_output_t output; /* Output mode */
+ int repeat_on_busy; /* Repeat tests on server-error-busy */
int stop_after_include_error;
/* Stop after include errors? */
double timeout; /* Timeout for connection */
/* Test Defaults */
int def_ignore_errors; /* Default IGNORE-ERRORS value */
- _cups_transfer_t def_transfer; /* Default TRANSFER value */
+ ipptool_transfer_t def_transfer; /* Default TRANSFER value */
int def_version; /* Default IPP version */
/* Global State */
char compression[16]; /* COMPRESSION value */
useconds_t delay; /* Initial delay */
int num_displayed; /* Number of displayed attributes */
- char *displayed[200]; /* Displayed attributes */
+ char *displayed[MAX_DISPLAY];/* Displayed attributes */
int num_expects; /* Number of expected attributes */
- _cups_expect_t expects[200], /* Expected attributes */
+ ipptool_expect_t expects[MAX_EXPECT], /* Expected attributes */
*expect, /* Current expected attribute */
*last_expect; /* Last EXPECT (for predicates) */
char file[1024], /* Data filename */
file_id[1024]; /* File identifier */
int ignore_errors; /* Ignore test failures? */
char name[1024]; /* Test name */
+ char pause[1024]; /* PAUSE value */
useconds_t repeat_interval; /* Repeat interval (delay) */
int request_id; /* Current request ID */
char resource[512]; /* Resource for request */
- int skip_test, /* Skip this test? */
+ int pass_test, /* Pass this test? */
+ skip_test, /* Skip this test? */
num_statuses; /* Number of valid status codes */
- _cups_status_t statuses[100], /* Valid status codes */
+ ipptool_status_t statuses[100], /* Valid status codes */
*last_status; /* Last STATUS (for predicates) */
char test_id[1024]; /* Test identifier */
- _cups_transfer_t transfer; /* To chunk or not to chunk */
+ ipptool_transfer_t transfer; /* To chunk or not to chunk */
int version; /* IPP version number to use */
-} _cups_testdata_t;
+ _cups_thread_t monitor_thread; /* Monitoring thread ID */
+ int monitor_done; /* Set to 1 to stop monitor thread */
+ char *monitor_uri; /* MONITOR-PRINTER-STATE URI */
+ useconds_t monitor_delay, /* MONITOR-PRINTER-STATE DELAY value, if any */
+ monitor_interval; /* MONITOR-PRINTER-STATE DELAY interval */
+ int num_monitor_expects; /* Number MONITOR-PRINTER-STATE EXPECTs */
+ ipptool_expect_t monitor_expects[MAX_MONITOR];
+ /* MONITOR-PRINTER-STATE EXPECTs */
+} ipptool_test_t;
/*
static void add_stringf(cups_array_t *a, const char *s, ...) _CUPS_FORMAT(2, 3);
static int compare_uris(const char *a, const char *b);
static void copy_hex_string(char *buffer, unsigned char *data, int datalen, size_t bufsize);
-static int do_test(_ipp_file_t *f, _ipp_vars_t *vars, _cups_testdata_t *data);
-static int do_tests(const char *testfile, _ipp_vars_t *vars, _cups_testdata_t *data);
-static int error_cb(_ipp_file_t *f, _cups_testdata_t *data, const char *error);
-static int expect_matches(_cups_expect_t *expect, ipp_tag_t value_tag);
+static void *do_monitor_printer_state(ipptool_test_t *data);
+static int do_test(_ipp_file_t *f, ipptool_test_t *data);
+static int do_tests(const char *testfile, ipptool_test_t *data);
+static int error_cb(_ipp_file_t *f, ipptool_test_t *data, const char *error);
+static int expect_matches(ipptool_expect_t *expect, ipp_attribute_t *attr);
static char *get_filename(const char *testfile, char *dst, const char *src, size_t dstsize);
static const char *get_string(ipp_attribute_t *attr, int element, int flags, char *buffer, size_t bufsize);
-static void init_data(_cups_testdata_t *data);
+static void init_data(ipptool_test_t *data);
static char *iso_date(const ipp_uchar_t *date);
+static int parse_monitor_printer_state(_ipp_file_t *f, ipptool_test_t *data);
static void pause_message(const char *message);
-static void print_attr(cups_file_t *outfile, _cups_output_t output, ipp_attribute_t *attr, ipp_tag_t *group);
-static void print_csv(_cups_testdata_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void print_fatal_error(_cups_testdata_t *data, const char *s, ...) _CUPS_FORMAT(2, 3);
-static void print_ippserver_attr(_cups_testdata_t *data, ipp_attribute_t *attr, int indent);
-static void print_ippserver_string(_cups_testdata_t *data, const char *s, size_t len);
-static void print_line(_cups_testdata_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void print_xml_header(_cups_testdata_t *data);
+static void print_attr(cups_file_t *outfile, ipptool_output_t output, ipp_attribute_t *attr, ipp_tag_t *group);
+static ipp_attribute_t *print_csv(ipptool_test_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void print_fatal_error(ipptool_test_t *data, const char *s, ...) _CUPS_FORMAT(2, 3);
+static void print_ippserver_attr(ipptool_test_t *data, ipp_attribute_t *attr, int indent);
+static void print_ippserver_string(ipptool_test_t *data, const char *s, size_t len);
+static ipp_attribute_t *print_line(ipptool_test_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void print_xml_header(ipptool_test_t *data);
static void print_xml_string(cups_file_t *outfile, const char *element, const char *s);
-static void print_xml_trailer(_cups_testdata_t *data, int success, const char *message);
+static void print_xml_trailer(ipptool_test_t *data, int success, const char *message);
#ifndef _WIN32
static void sigterm_handler(int sig);
#endif /* _WIN32 */
static int timeout_cb(http_t *http, void *user_data);
-static int token_cb(_ipp_file_t *f, _ipp_vars_t *vars, _cups_testdata_t *data, const char *token);
+static int token_cb(_ipp_file_t *f, _ipp_vars_t *vars, ipptool_test_t *data, const char *token);
static void usage(void) _CUPS_NORETURN;
+static int with_distinct_values(cups_array_t *errors, ipp_attribute_t *attr);
static const char *with_flags_string(int flags);
-static int with_value(_cups_testdata_t *data, cups_array_t *errors, char *value, int flags, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
+static int with_value(ipptool_test_t *data, cups_array_t *errors, char *value, int flags, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
static int with_value_from(cups_array_t *errors, ipp_attribute_t *fromattr, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
*testfile; /* Test file to use */
int interval, /* Test interval in microseconds */
repeat; /* Repeat count */
- _cups_testdata_t data; /* Test data */
_ipp_vars_t vars; /* Variables */
+ ipptool_test_t data; /* Test data */
_cups_globals_t *cg = _cupsGlobals();
/* Global data */
init_data(&data);
_ippVarsInit(&vars, NULL, (_ipp_ferror_cb_t)error_cb, (_ipp_ftoken_cb_t)token_cb);
+ data.vars = &vars;
- _ippVarsSet(&vars, "date-start", iso_date(ippTimeToDate(time(NULL))));
+ _ippVarsSet(data.vars, "date-start", iso_date(ippTimeToDate(time(NULL))));
/*
* We need at least:
exit(1);
}
- data.output = _CUPS_OUTPUT_IPPSERVER;
+ data.output = IPPTOOL_OUTPUT_IPPSERVER;
}
else if (!strcmp(argv[i], "--stop-after-include-error"))
{
#endif /* AF_INET6 */
case 'C' : /* Enable HTTP chunking */
- data.def_transfer = _CUPS_TRANSFER_CHUNKED;
+ data.def_transfer = IPPTOOL_TRANSFER_CHUNKED;
break;
case 'E' : /* Encrypt with TLS */
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
data.encryption = HTTP_ENCRYPT_REQUIRED;
#else
_cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
argv[0]);
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
break;
case 'I' : /* Ignore errors */
break;
case 'L' : /* Disable HTTP chunking */
- data.def_transfer = _CUPS_TRANSFER_LENGTH;
+ data.def_transfer = IPPTOOL_TRANSFER_LENGTH;
break;
case 'P' : /* Output to plist file */
exit(1);
}
- data.output = _CUPS_OUTPUT_PLIST;
+ data.output = IPPTOOL_OUTPUT_PLIST;
if (interval || repeat)
{
}
break;
+ case 'R' : /* Repeat on server-error-busy */
+ data.repeat_on_busy = 1;
+ break;
+
case 'S' : /* Encrypt with SSL */
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
data.encryption = HTTP_ENCRYPT_ALWAYS;
#else
- _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
- argv[0]);
-#endif /* HAVE_SSL */
+ _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), "ipptool");
+#endif /* HAVE_TLS */
break;
case 'T' : /* Set timeout */
if (i >= argc)
{
- _cupsLangPrintf(stderr,
- _("%s: Missing timeout for \"-T\"."),
- "ipptool");
+ _cupsLangPrintf(stderr, _("%s: Missing timeout for \"-T\"."), "ipptool");
usage();
}
if (i >= argc)
{
- _cupsLangPrintf(stderr,
- _("%s: Missing version for \"-V\"."),
- "ipptool");
+ _cupsLangPrintf(stderr, _("%s: Missing version for \"-V\"."), "ipptool");
usage();
}
break;
case 'X' : /* Produce XML output */
- data.output = _CUPS_OUTPUT_PLIST;
+ data.output = IPPTOOL_OUTPUT_PLIST;
if (interval || repeat)
{
break;
case 'c' : /* CSV output */
- data.output = _CUPS_OUTPUT_CSV;
+ data.output = IPPTOOL_OUTPUT_CSV;
break;
case 'd' : /* Define a variable */
if (i >= argc)
{
- _cupsLangPuts(stderr,
- _("ipptool: Missing name=value for \"-d\"."));
+ _cupsLangPuts(stderr, _("ipptool: Missing name=value for \"-d\"."));
usage();
}
else
value = name + strlen(name);
- _ippVarsSet(&vars, name, value);
+ _ippVarsSet(data.vars, name, value);
break;
case 'f' : /* Set the default test filename */
if (i >= argc)
{
- _cupsLangPuts(stderr,
- _("ipptool: Missing filename for \"-f\"."));
+ _cupsLangPuts(stderr, _("ipptool: Missing filename for \"-f\"."));
usage();
}
else
strlcpy(filename, argv[i], sizeof(filename));
- _ippVarsSet(&vars, "filename", filename);
+ _ippVarsSet(data.vars, "filename", filename);
if ((ext = strrchr(filename, '.')) != NULL)
{
*/
if (!_cups_strcasecmp(ext, ".gif"))
- _ippVarsSet(&vars, "filetype", "image/gif");
+ _ippVarsSet(data.vars, "filetype", "image/gif");
else if (!_cups_strcasecmp(ext, ".htm") ||
!_cups_strcasecmp(ext, ".htm.gz") ||
!_cups_strcasecmp(ext, ".html") ||
!_cups_strcasecmp(ext, ".html.gz"))
- _ippVarsSet(&vars, "filetype", "text/html");
+ _ippVarsSet(data.vars, "filetype", "text/html");
else if (!_cups_strcasecmp(ext, ".jpg") ||
!_cups_strcasecmp(ext, ".jpeg"))
- _ippVarsSet(&vars, "filetype", "image/jpeg");
+ _ippVarsSet(data.vars, "filetype", "image/jpeg");
else if (!_cups_strcasecmp(ext, ".pcl") ||
!_cups_strcasecmp(ext, ".pcl.gz"))
- _ippVarsSet(&vars, "filetype", "application/vnd.hp-PCL");
+ _ippVarsSet(data.vars, "filetype", "application/vnd.hp-PCL");
else if (!_cups_strcasecmp(ext, ".pdf"))
- _ippVarsSet(&vars, "filetype", "application/pdf");
+ _ippVarsSet(data.vars, "filetype", "application/pdf");
else if (!_cups_strcasecmp(ext, ".png"))
- _ippVarsSet(&vars, "filetype", "image/png");
+ _ippVarsSet(data.vars, "filetype", "image/png");
else if (!_cups_strcasecmp(ext, ".ps") ||
!_cups_strcasecmp(ext, ".ps.gz"))
- _ippVarsSet(&vars, "filetype", "application/postscript");
+ _ippVarsSet(data.vars, "filetype", "application/postscript");
else if (!_cups_strcasecmp(ext, ".pwg") ||
!_cups_strcasecmp(ext, ".pwg.gz") ||
!_cups_strcasecmp(ext, ".ras") ||
!_cups_strcasecmp(ext, ".ras.gz"))
- _ippVarsSet(&vars, "filetype", "image/pwg-raster");
+ _ippVarsSet(data.vars, "filetype", "image/pwg-raster");
else if (!_cups_strcasecmp(ext, ".tif") ||
!_cups_strcasecmp(ext, ".tiff"))
- _ippVarsSet(&vars, "filetype", "image/tiff");
+ _ippVarsSet(data.vars, "filetype", "image/tiff");
else if (!_cups_strcasecmp(ext, ".txt") ||
!_cups_strcasecmp(ext, ".txt.gz"))
- _ippVarsSet(&vars, "filetype", "text/plain");
+ _ippVarsSet(data.vars, "filetype", "text/plain");
else if (!_cups_strcasecmp(ext, ".urf") ||
!_cups_strcasecmp(ext, ".urf.gz"))
- _ippVarsSet(&vars, "filetype", "image/urf");
+ _ippVarsSet(data.vars, "filetype", "image/urf");
else if (!_cups_strcasecmp(ext, ".xps"))
- _ippVarsSet(&vars, "filetype", "application/openxps");
+ _ippVarsSet(data.vars, "filetype", "application/openxps");
else
- _ippVarsSet(&vars, "filetype", "application/octet-stream");
+ _ippVarsSet(data.vars, "filetype", "application/octet-stream");
}
else
{
* Use the "auto-type" MIME media type...
*/
- _ippVarsSet(&vars, "filetype", "application/octet-stream");
+ _ippVarsSet(data.vars, "filetype", "application/octet-stream");
}
break;
}
}
- if ((data.output == _CUPS_OUTPUT_PLIST || data.output == _CUPS_OUTPUT_IPPSERVER) && interval)
+ if ((data.output == IPPTOOL_OUTPUT_PLIST || data.output == IPPTOOL_OUTPUT_IPPSERVER) && interval)
{
_cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"--ippserver\", \"-P\", and \"-X\"."));
usage();
break;
case 'l' : /* List as a table */
- data.output = _CUPS_OUTPUT_LIST;
+ data.output = IPPTOOL_OUTPUT_LIST;
break;
case 'n' : /* Repeat count */
else
repeat = atoi(argv[i]);
- if ((data.output == _CUPS_OUTPUT_PLIST || data.output == _CUPS_OUTPUT_IPPSERVER) && repeat)
+ if ((data.output == IPPTOOL_OUTPUT_PLIST || data.output == IPPTOOL_OUTPUT_IPPSERVER) && repeat)
{
_cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"--ippserver\", \"-P\", and \"-X\"."));
usage();
break;
case 'q' : /* Be quiet */
- data.output = _CUPS_OUTPUT_QUIET;
+ data.output = IPPTOOL_OUTPUT_QUIET;
break;
case 't' : /* CUPS test output */
- data.output = _CUPS_OUTPUT_TEST;
+ data.output = IPPTOOL_OUTPUT_TEST;
break;
case 'v' : /* Be verbose */
}
}
else if (!strncmp(argv[i], "ipp://", 6) || !strncmp(argv[i], "http://", 7)
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
|| !strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8)
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
)
{
/*
* Set URI...
*/
- if (vars.uri)
+ if (data.vars->uri)
{
_cupsLangPuts(stderr, _("ipptool: May only specify a single URI."));
usage();
}
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
if (!strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8))
data.encryption = HTTP_ENCRYPT_ALWAYS;
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
- if (!_ippVarsSet(&vars, "uri", argv[i]))
+ if (!_ippVarsSet(data.vars, "uri", argv[i]))
{
_cupsLangPrintf(stderr, _("ipptool: Bad URI \"%s\"."), argv[i]);
return (1);
}
- if (vars.username[0] && vars.password)
- cupsSetPasswordCB2(_ippVarsPasswordCB, &vars);
+ if (data.vars->username[0] && data.vars->password)
+ cupsSetPasswordCB2(_ippVarsPasswordCB, data.vars);
}
else
{
* Run test...
*/
- if (!vars.uri)
+ if (!data.vars->uri)
{
_cupsLangPuts(stderr, _("ipptool: URI required before test file."));
_cupsLangPuts(stderr, argv[i]);
else
testfile = argv[i];
- if (!do_tests(testfile, &vars, &data))
+ if (access(testfile, 0))
+ {
+ _cupsLangPrintf(stderr, _("%s: Unable to open \"%s\": %s"), "ipptool", testfile, strerror(errno));
+ status = 1;
+ }
+ else if (!do_tests(testfile, &data))
status = 1;
}
}
- if (!vars.uri || !testfile)
+ if (!data.vars->uri || !testfile)
usage();
/*
* Loop if the interval is set...
*/
- if (data.output == _CUPS_OUTPUT_PLIST)
+ if (data.output == IPPTOOL_OUTPUT_PLIST)
print_xml_trailer(&data, !status, NULL);
else if (interval > 0 && repeat > 0)
{
while (repeat > 1)
{
usleep((useconds_t)interval);
- do_tests(testfile, &vars, &data);
+ do_tests(testfile, &data);
repeat --;
}
}
for (;;)
{
usleep((useconds_t)interval);
- do_tests(testfile, &vars, &data);
+ do_tests(testfile, &data);
}
}
- if ((data.output == _CUPS_OUTPUT_TEST || (data.output == _CUPS_OUTPUT_PLIST && data.outfile)) && data.test_count > 1)
+ if ((data.output == IPPTOOL_OUTPUT_TEST || (data.output == IPPTOOL_OUTPUT_PLIST && data.outfile)) && data.test_count > 1)
{
/*
* Show a summary report if there were multiple tests...
cupsFileClose(data.outfile);
-/*
+ /*
* Exit...
*/
}
+/*
+ * 'do_monitor_printer_state()' - Do the MONITOR-PRINTER-STATE tests in the background.
+ */
+
+static void * // O - Thread exit status
+do_monitor_printer_state(
+ ipptool_test_t *data) // I - Test data
+{
+ int i, j; // Looping vars
+ char scheme[32], // URI scheme
+ userpass[32], // URI username:password
+ host[256], // URI hostname/IP address
+ resource[256]; // URI resource path
+ int port; // URI port number
+ http_encryption_t encryption; // Encryption to use
+ http_t *http; // Connection to printer
+ ipp_t *request, // IPP request
+ *response = NULL; // IPP response
+ http_status_t status; // Request status
+ ipp_attribute_t *found; // Found attribute
+ ipptool_expect_t *expect; // Current EXPECT test
+ char buffer[131072]; // Copy buffer
+ int num_pattrs; // Number of printer attributes
+ const char *pattrs[100]; // Printer attributes we care about
+
+
+ // Connect to the printer...
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, data->monitor_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+ {
+ print_fatal_error(data, "Bad printer URI \"%s\".", data->monitor_uri);
+ return (NULL);
+ }
+
+ if (!_cups_strcasecmp(scheme, "https") || !_cups_strcasecmp(scheme, "ipps") || port == 443)
+ encryption = HTTP_ENCRYPTION_ALWAYS;
+ else
+ encryption = data->encryption;
+
+ if ((http = httpConnect2(host, port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
+ {
+ print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", host, port, cupsLastErrorString());
+ return (0);
+ }
+
+#ifdef HAVE_LIBZ
+ httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "deflate, gzip, identity");
+#else
+ httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "identity");
+#endif /* HAVE_LIBZ */
+
+ if (data->timeout > 0.0)
+ httpSetTimeout(http, data->timeout, timeout_cb, NULL);
+
+ // Wait for the initial delay as needed...
+ if (data->monitor_delay)
+ usleep(data->monitor_delay);
+
+ // Create a query request that we'll reuse...
+ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+ ippSetRequestId(request, data->request_id * 100 - 1);
+ ippSetVersion(request, data->version / 10, data->version % 10);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, data->monitor_uri);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+
+ for (i = data->num_monitor_expects, expect = data->monitor_expects, num_pattrs = 0; i > 0; i --, expect ++)
+ {
+ // Add EXPECT attribute names...
+ for (j = 0; j < num_pattrs; j ++)
+ {
+ if (!strcmp(expect->name, pattrs[j]))
+ break;
+ }
+
+ if (j >= num_pattrs && num_pattrs < (int)(sizeof(pattrs) / sizeof(pattrs[0])))
+ pattrs[num_pattrs ++] = expect->name;
+ }
+
+ if (num_pattrs > 0)
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "requested-attributes", num_pattrs, NULL, pattrs);
+
+ // Loop until we need to stop...
+ while (!data->monitor_done && !Cancel)
+ {
+ // Poll the printer state...
+ ippSetRequestId(request, ippGetRequestId(request) + 1);
+
+ if ((status = cupsSendRequest(http, request, resource, ippLength(request))) != HTTP_STATUS_ERROR)
+ {
+ response = cupsGetResponse(http, resource);
+ status = httpGetStatus(http);
+ }
+
+ if (!data->monitor_done && !Cancel && status == HTTP_STATUS_ERROR && httpError(data->http) != EINVAL &&
+#ifdef _WIN32
+ httpError(data->http) != WSAETIMEDOUT)
+#else
+ httpError(data->http) != ETIMEDOUT)
+#endif // _WIN32
+ {
+ if (httpReconnect2(http, 30000, NULL))
+ break;
+ }
+ else if (status == HTTP_STATUS_ERROR || status == HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED)
+ {
+ break;
+ }
+ else if (status != HTTP_STATUS_OK)
+ {
+ httpFlush(http);
+
+ if (status == HTTP_STATUS_UNAUTHORIZED)
+ continue;
+
+ break;
+ }
+
+ for (i = data->num_monitor_expects, expect = data->monitor_expects; i > 0; i --, expect ++)
+ {
+ if (expect->if_defined && !_ippVarsGet(data->vars, expect->if_defined))
+ continue;
+
+ if (expect->if_not_defined && _ippVarsGet(data->vars, expect->if_not_defined))
+ continue;
+
+ found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
+
+ if ((found && expect->not_expect) ||
+ (!found && !(expect->not_expect || expect->optional)) ||
+ (found && !expect_matches(expect, found)) ||
+ (expect->in_group && ippGetGroupTag(found) != expect->in_group) ||
+ (expect->with_distinct && !with_distinct_values(NULL, found)))
+ {
+ if (expect->define_no_match)
+ {
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
+ data->monitor_done = 1;
+ }
+ break;
+ }
+
+ if (found)
+ ippAttributeString(found, buffer, sizeof(buffer));
+
+ if (found && !with_value(data, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
+ {
+ if (expect->define_no_match)
+ {
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
+ data->monitor_done = 1;
+ }
+ break;
+ }
+
+ if (found && expect->count > 0 && ippGetCount(found) != expect->count)
+ {
+ if (expect->define_no_match)
+ {
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
+ data->monitor_done = 1;
+ }
+ break;
+ }
+
+ if (found && expect->display_match && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+ cupsFilePrintf(cupsFileStdout(), "CONT]\n\n%s\n\n %-68.68s [", expect->display_match, data->name);
+
+ if (found && expect->define_match)
+ {
+ _ippVarsSet(data->vars, expect->define_match, "1");
+ data->monitor_done = 1;
+ }
+
+ if (found && expect->define_value)
+ {
+ if (!expect->with_value)
+ {
+ int last = ippGetCount(found) - 1;
+ // Last element in attribute
+
+ switch (ippGetValueTag(found))
+ {
+ case IPP_TAG_ENUM :
+ case IPP_TAG_INTEGER :
+ snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+ break;
+
+ case IPP_TAG_BOOLEAN :
+ if (ippGetBoolean(found, last))
+ strlcpy(buffer, "true", sizeof(buffer));
+ else
+ strlcpy(buffer, "false", sizeof(buffer));
+ break;
+
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_NAME :
+ case IPP_TAG_NAMELANG :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+ break;
+
+ default :
+ ippAttributeString(found, buffer, sizeof(buffer));
+ break;
+ }
+ }
+
+ _ippVarsSet(data->vars, expect->define_value, buffer);
+ data->monitor_done = 1;
+ }
+ }
+
+ if (i == 0)
+ data->monitor_done = 1; // All tests passed
+
+ ippDelete(response);
+ response = NULL;
+
+ // Sleep between requests...
+ if (data->monitor_done || Cancel)
+ break;
+
+ usleep(data->monitor_interval);
+ }
+
+ // Close the connection to the printer and return...
+ httpClose(http);
+ ippDelete(request);
+ ippDelete(response);
+
+ return (NULL);
+}
+
+
/*
* 'do_test()' - Do a single test from the test file.
*/
static int /* O - 1 on success, 0 on failure */
-do_test(_ipp_file_t *f, /* I - IPP data file */
- _ipp_vars_t *vars, /* I - IPP variables */
- _cups_testdata_t *data) /* I - Test data */
+do_test(_ipp_file_t *f, /* I - IPP data file */
+ ipptool_test_t *data) /* I - Test data */
{
int i, /* Looping var */
status_ok, /* Did we get a matching status? */
repeat_count = 0, /* Repeat count */
repeat_test; /* Repeat the test? */
- _cups_expect_t *expect; /* Current expected attribute */
+ ipptool_expect_t *expect; /* Current expected attribute */
ipp_t *request, /* IPP request */
*response; /* IPP response */
size_t length; /* Length of IPP request */
if (Cancel)
return (0);
+ /*
+ * Show any PAUSE message, as needed...
+ */
+
+ if (data->pause[0])
+ {
+ if (!data->skip_test && !data->pass_test)
+ pause_message(data->pause);
+
+ data->pause[0] = '\0';
+ }
+
+ /*
+ * Start the background thread as needed...
+ */
+
+ if (data->monitor_uri)
+ {
+ data->monitor_done = 0;
+ data->monitor_thread = _cupsThreadCreate((_cups_thread_func_t)do_monitor_printer_state, data);
+ }
+
/*
* Take over control of the attributes in the request...
*/
ippSetVersion(request, data->version / 10, data->version % 10);
ippSetRequestId(request, data->request_id);
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
{
cupsFilePuts(data->outfile, "<dict>\n");
cupsFilePuts(data->outfile, "<key>Name</key>\n");
cupsFilePuts(data->outfile, "</array>\n");
}
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
{
if (data->verbosity)
{
cupsFilePrintf(cupsFileStdout(), " %s:\n", ippOpString(ippGetOperation(request)));
for (attrptr = ippFirstAttribute(request); attrptr; attrptr = ippNextAttribute(request))
- print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
}
cupsFilePrintf(cupsFileStdout(), " %-68.68s [", data->name);
}
- if ((data->skip_previous && !data->prev_pass) || data->skip_test)
+ if ((data->skip_previous && !data->prev_pass) || data->skip_test || data->pass_test)
{
- data->skip_count ++;
+ if (!data->pass_test)
+ data->skip_count ++;
ippDelete(request);
request = NULL;
response = NULL;
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
{
cupsFilePuts(data->outfile, "<key>Successful</key>\n");
cupsFilePuts(data->outfile, "<true />\n");
cupsFilePuts(data->outfile, "<key>Skipped</key>\n");
- cupsFilePuts(data->outfile, "<true />\n");
+ if (data->pass_test)
+ cupsFilePuts(data->outfile, "<false />\n");
+ else
+ cupsFilePuts(data->outfile, "<true />\n");
cupsFilePuts(data->outfile, "<key>StatusCode</key>\n");
- print_xml_string(data->outfile, "string", "skip");
+ if (data->pass_test)
+ print_xml_string(data->outfile, "string", "pass");
+ else
+ print_xml_string(data->outfile, "string", "skip");
cupsFilePuts(data->outfile, "<key>ResponseAttributes</key>\n");
cupsFilePuts(data->outfile, "<dict />\n");
}
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
- cupsFilePuts(cupsFileStdout(), "SKIP]\n");
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ {
+ if (data->pass_test)
+ cupsFilePuts(cupsFileStdout(), "PASS]\n");
+ else
+ cupsFilePuts(cupsFileStdout(), "SKIP]\n");
+ }
goto skip_error;
}
- vars->password_tries = 0;
+ data->vars->password_tries = 0;
do
{
status = HTTP_STATUS_OK;
- if (data->transfer == _CUPS_TRANSFER_CHUNKED || (data->transfer == _CUPS_TRANSFER_AUTO && data->file[0]))
+ if (data->transfer == IPPTOOL_TRANSFER_CHUNKED || (data->transfer == IPPTOOL_TRANSFER_AUTO && data->file[0]))
{
/*
* Send request using chunking - a 0 length means "chunk".
{
while (!response && !Cancel && data->prev_pass)
{
+ ippSetRequestId(request, ++ data->request_id);
+
status = cupsSendRequest(data->http, request, data->resource, length);
#ifdef HAVE_LIBZ
if ((attrptr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
{
snprintf(temp, sizeof(temp), "%d", ippGetInteger(attrptr, 0));
- _ippVarsSet(vars, "job-id", temp);
+ _ippVarsSet(data->vars, "job-id", temp);
}
if ((attrptr = ippFindAttribute(response, "job-uri", IPP_TAG_URI)) != NULL)
- _ippVarsSet(vars, "job-uri", ippGetString(attrptr, 0, NULL));
+ _ippVarsSet(data->vars, "job-uri", ippGetString(attrptr, 0, NULL));
if ((attrptr = ippFindAttribute(response, "notify-subscription-id", IPP_TAG_INTEGER)) != NULL)
{
snprintf(temp, sizeof(temp), "%d", ippGetInteger(attrptr, 0));
- _ippVarsSet(vars, "notify-subscription-id", temp);
+ _ippVarsSet(data->vars, "notify-subscription-id", temp);
}
/*
major = ippGetVersion(response, &minor);
if (major != (data->version / 10) || minor != (data->version % 10))
- add_stringf(data->errors, "Bad version %d.%d in response - expected %d.%d (RFC 2911 section 3.1.8).", major, minor, data->version / 10, data->version % 10);
+ add_stringf(data->errors, "Bad version %d.%d in response - expected %d.%d (RFC 8011 section 4.1.8).", major, minor, data->version / 10, data->version % 10);
}
if (ippGetRequestId(response) != data->request_id)
- add_stringf(data->errors, "Bad request ID %d in response - expected %d (RFC 2911 section 3.1.1)", ippGetRequestId(response), data->request_id);
+ add_stringf(data->errors, "Bad request ID %d in response - expected %d (RFC 8011 section 4.1.1)", ippGetRequestId(response), data->request_id);
attrptr = ippFirstAttribute(response);
if (!attrptr)
{
- add_stringf(data->errors, "Missing first attribute \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).");
+ add_stringf(data->errors, "Missing first attribute \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).");
}
else
{
if (!ippGetName(attrptr) || ippGetValueTag(attrptr) != IPP_TAG_CHARSET || ippGetGroupTag(attrptr) != IPP_TAG_OPERATION || ippGetCount(attrptr) != 1 ||strcmp(ippGetName(attrptr), "attributes-charset"))
- add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
+ add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
attrptr = ippNextAttribute(response);
if (!attrptr)
- add_stringf(data->errors, "Missing second attribute \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).");
+ add_stringf(data->errors, "Missing second attribute \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).");
else if (!ippGetName(attrptr) || ippGetValueTag(attrptr) != IPP_TAG_LANGUAGE || ippGetGroupTag(attrptr) != IPP_TAG_OPERATION || ippGetCount(attrptr) != 1 || strcmp(ippGetName(attrptr), "attributes-natural-language"))
- add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
+ add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
}
if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_ZERO)) != NULL)
/* String value */
if (ippGetValueTag(attrptr) != IPP_TAG_TEXT)
- add_stringf(data->errors, "status-message (text(255)) has wrong value tag %s (RFC 2911 section 3.1.6.2).", ippTagString(ippGetValueTag(attrptr)));
+ add_stringf(data->errors, "status-message (text(255)) has wrong value tag %s (RFC 8011 section 4.1.6.2).", ippTagString(ippGetValueTag(attrptr)));
if (ippGetGroupTag(attrptr) != IPP_TAG_OPERATION)
- add_stringf(data->errors, "status-message (text(255)) has wrong group tag %s (RFC 2911 section 3.1.6.2).", ippTagString(ippGetGroupTag(attrptr)));
+ add_stringf(data->errors, "status-message (text(255)) has wrong group tag %s (RFC 8011 section 4.1.6.2).", ippTagString(ippGetGroupTag(attrptr)));
if (ippGetCount(attrptr) != 1)
- add_stringf(data->errors, "status-message (text(255)) has %d values (RFC 2911 section 3.1.6.2).", ippGetCount(attrptr));
+ add_stringf(data->errors, "status-message (text(255)) has %d values (RFC 8011 section 4.1.6.2).", ippGetCount(attrptr));
if (status_message && strlen(status_message) > 255)
- add_stringf(data->errors, "status-message (text(255)) has bad length %d (RFC 2911 section 3.1.6.2).", (int)strlen(status_message));
+ add_stringf(data->errors, "status-message (text(255)) has bad length %d (RFC 8011 section 4.1.6.2).", (int)strlen(status_message));
}
if ((attrptr = ippFindAttribute(response, "detailed-status-message",
/* String value */
if (ippGetValueTag(attrptr) != IPP_TAG_TEXT)
- add_stringf(data->errors,
- "detailed-status-message (text(MAX)) has wrong "
- "value tag %s (RFC 2911 section 3.1.6.3).",
- ippTagString(ippGetValueTag(attrptr)));
+ add_stringf(data->errors, "detailed-status-message (text(MAX)) has wrong value tag %s (RFC 8011 section 4.1.6.3).", ippTagString(ippGetValueTag(attrptr)));
if (ippGetGroupTag(attrptr) != IPP_TAG_OPERATION)
- add_stringf(data->errors,
- "detailed-status-message (text(MAX)) has wrong "
- "group tag %s (RFC 2911 section 3.1.6.3).",
- ippTagString(ippGetGroupTag(attrptr)));
+ add_stringf(data->errors, "detailed-status-message (text(MAX)) has wrong group tag %s (RFC 8011 section 4.1.6.3).", ippTagString(ippGetGroupTag(attrptr)));
if (ippGetCount(attrptr) != 1)
- add_stringf(data->errors,
- "detailed-status-message (text(MAX)) has %d values"
- " (RFC 2911 section 3.1.6.3).",
- ippGetCount(attrptr));
+ add_stringf(data->errors, "detailed-status-message (text(MAX)) has %d values (RFC 8011 section 4.1.6.3).", ippGetCount(attrptr));
if (detailed_status_message && strlen(detailed_status_message) > 1023)
- add_stringf(data->errors,
- "detailed-status-message (text(MAX)) has bad "
- "length %d (RFC 2911 section 3.1.6.3).",
- (int)strlen(detailed_status_message));
+ add_stringf(data->errors, "detailed-status-message (text(MAX)) has bad length %d (RFC 8011 section 4.1.6.3).", (int)strlen(detailed_status_message));
}
a = cupsArrayNew((cups_array_func_t)strcmp, NULL);
}
if (out_of_order)
- add_stringf(data->errors, "Attribute groups out of order (%s < %s)",
- ippTagString(ippGetGroupTag(attrptr)),
- ippTagString(group));
+ add_stringf(data->errors, "Attribute groups out of order (%s < %s)", ippTagString(ippGetGroupTag(attrptr)), ippTagString(group));
if (ippGetGroupTag(attrptr) != IPP_TAG_ZERO)
group = ippGetGroupTag(attrptr);
if (ippGetName(attrptr))
{
- if (cupsArrayFind(a, (void *)ippGetName(attrptr)) && data->output < _CUPS_OUTPUT_LIST)
- add_stringf(data->errors, "Duplicate \"%s\" attribute in %s group",
- ippGetName(attrptr), ippTagString(group));
+ if (cupsArrayFind(a, (void *)ippGetName(attrptr)) && data->output < IPPTOOL_OUTPUT_LIST)
+ add_stringf(data->errors, "Duplicate \"%s\" attribute in %s group", ippGetName(attrptr), ippTagString(group));
cupsArrayAdd(a, (void *)ippGetName(attrptr));
}
* values...
*/
+ if (ippGetStatusCode(response) == IPP_STATUS_ERROR_BUSY && data->repeat_on_busy)
+ {
+ // Repeat on a server-error-busy status code...
+ status_ok = 1;
+ repeat_test = 1;
+ }
+
for (i = 0, status_ok = 0; i < data->num_statuses; i ++)
{
if (data->statuses[i].if_defined &&
- !_ippVarsGet(vars, data->statuses[i].if_defined))
+ !_ippVarsGet(data->vars, data->statuses[i].if_defined))
continue;
if (data->statuses[i].if_not_defined &&
- _ippVarsGet(vars, data->statuses[i].if_not_defined))
+ _ippVarsGet(data->vars, data->statuses[i].if_not_defined))
continue;
if (ippGetStatusCode(response) == data->statuses[i].status)
repeat_test = 1;
if (data->statuses[i].define_match)
- _ippVarsSet(vars, data->statuses[i].define_match, "1");
+ _ippVarsSet(data->vars, data->statuses[i].define_match, "1");
}
else
{
if (data->statuses[i].define_no_match)
{
- _ippVarsSet(vars, data->statuses[i].define_no_match, "1");
+ _ippVarsSet(data->vars, data->statuses[i].define_no_match, "1");
status_ok = 1;
}
}
for (i = 0; i < data->num_statuses; i ++)
{
if (data->statuses[i].if_defined &&
- !_ippVarsGet(vars, data->statuses[i].if_defined))
+ !_ippVarsGet(data->vars, data->statuses[i].if_defined))
continue;
if (data->statuses[i].if_not_defined &&
- _ippVarsGet(vars, data->statuses[i].if_not_defined))
+ _ippVarsGet(data->vars, data->statuses[i].if_not_defined))
continue;
if (!data->statuses[i].repeat_match || repeat_count >= data->statuses[i].repeat_limit)
- add_stringf(data->errors, "EXPECTED: STATUS %s (got %s)",
- ippErrorString(data->statuses[i].status),
- ippErrorString(cupsLastError()));
+ add_stringf(data->errors, "EXPECTED: STATUS %s (got %s)", ippErrorString(data->statuses[i].status), ippErrorString(cupsLastError()));
}
- if ((attrptr = ippFindAttribute(response, "status-message",
- IPP_TAG_TEXT)) != NULL)
+ if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT)) != NULL)
add_stringf(data->errors, "status-message=\"%s\"", ippGetString(attrptr, 0, NULL));
}
{
ipp_attribute_t *group_found; /* Found parent attribute for group tests */
- if (expect->if_defined && !_ippVarsGet(vars, expect->if_defined))
+ if (expect->if_defined && !_ippVarsGet(data->vars, expect->if_defined))
continue;
if (expect->if_not_defined &&
- _ippVarsGet(vars, expect->if_not_defined))
+ _ippVarsGet(data->vars, expect->if_not_defined))
continue;
if ((found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO)) != NULL && expect->in_group && expect->in_group != ippGetGroupTag(found))
if ((found && expect->not_expect) ||
(!found && !(expect->not_expect || expect->optional)) ||
- (found && !expect_matches(expect, ippGetValueTag(found))) ||
- (group_found && expect->in_group && ippGetGroupTag(group_found) != expect->in_group))
+ (found && !expect_matches(expect, found)) ||
+ (group_found && expect->in_group && ippGetGroupTag(group_found) != expect->in_group) ||
+ (expect->with_distinct && !with_distinct_values(NULL, found)))
{
if (expect->define_no_match)
- _ippVarsSet(vars, expect->define_no_match, "1");
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value)
{
if (found && expect->not_expect && !expect->with_value && !expect->with_value_from)
add_stringf(data->errors, "EXPECTED: %s", expect->name);
else if (found)
{
- if (!expect_matches(expect, ippGetValueTag(found)))
+ if (!expect_matches(expect, found))
add_stringf(data->errors, "EXPECTED: %s OF-TYPE %s (got %s)",
expect->name, expect->of_type,
ippTagString(ippGetValueTag(found)));
add_stringf(data->errors, "EXPECTED: %s IN-GROUP %s (got %s).",
expect->name, ippTagString(expect->in_group),
ippTagString(ippGetGroupTag(group_found)));
+
+ if (expect->with_distinct)
+ with_distinct_values(data->errors, found);
}
}
if (found && expect->with_value_from && !with_value_from(NULL, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer)))
{
if (expect->define_no_match)
- _ippVarsSet(vars, expect->define_no_match, "1");
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value && ((!expect->repeat_match && !expect->repeat_no_match) || repeat_count >= expect->repeat_limit))
{
add_stringf(data->errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from);
else if (found && !with_value(data, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
{
if (expect->define_no_match)
- _ippVarsSet(vars, expect->define_no_match, "1");
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value &&
!expect->repeat_match && (!expect->repeat_no_match || repeat_count >= expect->repeat_limit))
{
- if (expect->with_flags & _CUPS_WITH_REGEX)
+ if (expect->with_flags & IPPTOOL_WITH_REGEX)
add_stringf(data->errors, "EXPECTED: %s %s /%s/", expect->name, with_flags_string(expect->with_flags), expect->with_value);
else
add_stringf(data->errors, "EXPECTED: %s %s \"%s\"", expect->name, with_flags_string(expect->with_flags), expect->with_value);
if (found && expect->count > 0 && ippGetCount(found) != expect->count)
{
if (expect->define_no_match)
- _ippVarsSet(vars, expect->define_no_match, "1");
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value)
{
- add_stringf(data->errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
- expect->count, ippGetCount(found));
+ add_stringf(data->errors, "EXPECTED: %s COUNT %d (got %d)", expect->name, expect->count, ippGetCount(found));
}
if (expect->repeat_no_match &&
if (!attrptr || ippGetCount(attrptr) != ippGetCount(found))
{
if (expect->define_no_match)
- _ippVarsSet(vars, expect->define_no_match, "1");
+ _ippVarsSet(data->vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value)
{
if (!attrptr)
- add_stringf(data->errors,
- "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
- "(not returned)", expect->name,
- ippGetCount(found), expect->same_count_as);
+ add_stringf(data->errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s (not returned)", expect->name, ippGetCount(found), expect->same_count_as);
else if (ippGetCount(attrptr) != ippGetCount(found))
- add_stringf(data->errors,
- "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
- "(%d values)", expect->name, ippGetCount(found),
- expect->same_count_as, ippGetCount(attrptr));
+ add_stringf(data->errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s (%d values)", expect->name, ippGetCount(found), expect->same_count_as, ippGetCount(attrptr));
}
if (expect->repeat_no_match &&
}
}
+ if (found && expect->display_match && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+ cupsFilePrintf(cupsFileStdout(), "\n%s\n\n", expect->display_match);
+
if (found && expect->define_match)
- _ippVarsSet(vars, expect->define_match, "1");
+ _ippVarsSet(data->vars, expect->define_match, "1");
if (found && expect->define_value)
{
}
}
- _ippVarsSet(vars, expect->define_value, buffer);
+ _ippVarsSet(data->vars, expect->define_value, buffer);
}
if (found && expect->repeat_match &&
if (repeat_test)
{
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
{
cupsFilePrintf(cupsFileStdout(), "%04d]\n", repeat_count);
\
{
if (!strcmp(data->displayed[i], attrname))
{
- print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
break;
}
}
}
}
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
{
cupsFilePrintf(cupsFileStdout(), " %-68.68s [", data->name);
}
else
data->fail_count ++;
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
{
cupsFilePuts(data->outfile, "<key>Successful</key>\n");
cupsFilePuts(data->outfile, data->prev_pass ? "<true />\n" : "<false />\n");
cupsFilePuts(data->outfile, "</dict>\n");
cupsFilePuts(data->outfile, "</array>\n");
}
- else if (data->output == _CUPS_OUTPUT_IPPSERVER && response)
+ else if (data->output == IPPTOOL_OUTPUT_IPPSERVER && response)
{
for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
{
}
}
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
{
cupsFilePuts(cupsFileStdout(), data->prev_pass ? "PASS]\n" : "FAIL]\n");
if (data->verbosity && response)
{
for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
- print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
}
}
}
- else if (!data->prev_pass && data->output != _CUPS_OUTPUT_QUIET)
+ else if (!data->prev_pass && data->output != IPPTOOL_OUTPUT_QUIET)
fprintf(stderr, "%s\n", cupsLastErrorString());
- if (data->prev_pass && data->output >= _CUPS_OUTPUT_LIST && !data->verbosity && data->num_displayed > 0)
+ if (data->prev_pass && data->output >= IPPTOOL_OUTPUT_LIST && !data->verbosity && data->num_displayed > 0)
{
size_t width; /* Length of value */
}
}
- if (data->output == _CUPS_OUTPUT_CSV)
+ if (data->output == IPPTOOL_OUTPUT_CSV)
print_csv(data, NULL, NULL, data->num_displayed, data->displayed, widths);
else
print_line(data, NULL, NULL, data->num_displayed, data->displayed, widths);
if (attrptr)
{
- if (data->output == _CUPS_OUTPUT_CSV)
- print_csv(data, response, attrptr, data->num_displayed, data->displayed, widths);
+ if (data->output == IPPTOOL_OUTPUT_CSV)
+ attrptr = print_csv(data, response, attrptr, data->num_displayed, data->displayed, widths);
else
- print_line(data, response, attrptr, data->num_displayed, data->displayed, widths);
+ attrptr = print_line(data, response, attrptr, data->num_displayed, data->displayed, widths);
while (attrptr && ippGetGroupTag(attrptr) > IPP_TAG_OPERATION)
attrptr = ippNextAttribute(response);
}
else if (!data->prev_pass)
{
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
{
cupsFilePuts(data->outfile, "<key>Errors</key>\n");
cupsFilePuts(data->outfile, "<array>\n");
cupsFilePuts(data->outfile, "</array>\n");
}
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
{
for (error = (char *)cupsArrayFirst(data->errors);
error;
}
}
- if (data->num_displayed > 0 && !data->verbosity && response && (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+ if (data->num_displayed > 0 && !data->verbosity && response && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
{
for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
{
skip_error:
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->monitor_thread)
+ {
+ data->monitor_done = 1;
+ _cupsThreadWait(data->monitor_thread);
+ }
+
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
cupsFilePuts(data->outfile, "</dict>\n");
ippDelete(response);
for (i = 0; i < data->num_statuses; i ++)
{
- if (data->statuses[i].if_defined)
- free(data->statuses[i].if_defined);
- if (data->statuses[i].if_not_defined)
- free(data->statuses[i].if_not_defined);
- if (data->statuses[i].define_match)
- free(data->statuses[i].define_match);
- if (data->statuses[i].define_no_match)
- free(data->statuses[i].define_no_match);
+ free(data->statuses[i].if_defined);
+ free(data->statuses[i].if_not_defined);
+ free(data->statuses[i].define_match);
+ free(data->statuses[i].define_no_match);
}
data->num_statuses = 0;
for (i = data->num_expects, expect = data->expects; i > 0; i --, expect ++)
{
free(expect->name);
- if (expect->of_type)
- free(expect->of_type);
- if (expect->same_count_as)
- free(expect->same_count_as);
- if (expect->if_defined)
- free(expect->if_defined);
- if (expect->if_not_defined)
- free(expect->if_not_defined);
- if (expect->with_value)
- free(expect->with_value);
- if (expect->define_match)
- free(expect->define_match);
- if (expect->define_no_match)
- free(expect->define_no_match);
- if (expect->define_value)
- free(expect->define_value);
+ free(expect->of_type);
+ free(expect->same_count_as);
+ free(expect->if_defined);
+ free(expect->if_not_defined);
+ free(expect->with_value);
+ free(expect->define_match);
+ free(expect->define_no_match);
+ free(expect->define_value);
+ free(expect->display_match);
}
data->num_expects = 0;
free(data->displayed[i]);
data->num_displayed = 0;
+ free(data->monitor_uri);
+ data->monitor_uri = NULL;
+
+ for (i = data->num_monitor_expects, expect = data->monitor_expects; i > 0; i --, expect ++)
+ {
+ free(expect->name);
+ free(expect->of_type);
+ free(expect->same_count_as);
+ free(expect->if_defined);
+ free(expect->if_not_defined);
+ free(expect->with_value);
+ free(expect->define_match);
+ free(expect->define_no_match);
+ free(expect->define_value);
+ free(expect->display_match);
+ }
+ data->num_monitor_expects = 0;
+
return (data->ignore_errors || data->prev_pass);
}
*/
static int /* O - 1 on success, 0 on failure */
-do_tests(const char *testfile, /* I - Test file to use */
- _ipp_vars_t *vars, /* I - Variables */
- _cups_testdata_t *data) /* I - Test data */
+do_tests(const char *testfile, /* I - Test file to use */
+ ipptool_test_t *data) /* I - Test data */
{
http_encryption_t encryption; /* Encryption mode */
* Connect to the printer/server...
*/
- if (!_cups_strcasecmp(vars->scheme, "https") || !_cups_strcasecmp(vars->scheme, "ipps"))
+ if (!_cups_strcasecmp(data->vars->scheme, "https") || !_cups_strcasecmp(data->vars->scheme, "ipps") || data->vars->port == 443)
encryption = HTTP_ENCRYPTION_ALWAYS;
else
encryption = data->encryption;
- if ((data->http = httpConnect2(vars->host, vars->port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
+ if ((data->http = httpConnect2(data->vars->host, data->vars->port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
{
- print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", vars->host, vars->port, cupsLastErrorString());
+ print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", data->vars->host, data->vars->port, cupsLastErrorString());
return (0);
}
* Run tests...
*/
- _ippFileParse(vars, testfile, (void *)data);
+ _ippFileParse(data->vars, testfile, (void *)data);
/*
* Close connection and return...
static int /* O - 1 to continue, 0 to stop */
error_cb(_ipp_file_t *f, /* I - IPP file data */
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
const char *error) /* I - Error message */
{
(void)f;
static int /* O - 1 if matches, 0 otherwise */
expect_matches(
- _cups_expect_t *expect, /* I - Expected attribute */
- ipp_tag_t value_tag) /* I - Value tag for attribute */
+ ipptool_expect_t *expect, /* I - Expected attribute */
+ ipp_attribute_t *attr) /* I - Attribute */
{
- int match; /* Match? */
- char *of_type, /* Type name to match */
- *next, /* Next name to match */
- sep; /* Separator character */
+ int i, /* Looping var */
+ count, /* Number of values */
+ match; /* Match? */
+ char *of_type, /* Type name to match */
+ *paren, /* Pointer to opening parenthesis */
+ *next, /* Next name to match */
+ sep; /* Separator character */
+ ipp_tag_t value_tag; /* Syntax/value tag */
+ int lower, upper; /* Lower and upper bounds for syntax */
/*
* types separated by "," or "|"...
*/
+ value_tag = ippGetValueTag(attr);
+ count = ippGetCount(attr);
+
for (of_type = expect->of_type, match = 0; !match && *of_type; of_type = next)
{
/*
* Support some meta-types to make it easier to write the test file.
*/
+ if ((paren = strchr(of_type, '(')) != NULL)
+ {
+ char *ptr; // Pointer into syntax string
+
+ *paren = '\0';
+
+ if (!strncmp(paren + 1, "MIN:", 4))
+ {
+ lower = INT_MIN;
+ ptr = paren + 5;
+ }
+ else if ((ptr = strchr(paren + 1, ':')) != NULL)
+ {
+ lower = atoi(paren + 1);
+ }
+ else
+ {
+ lower = 0;
+ ptr = paren + 1;
+ }
+
+ if (!strcmp(ptr, "MAX)"))
+ upper = INT_MAX;
+ else
+ upper = atoi(ptr);
+ }
+ else
+ {
+ lower = INT_MIN;
+ upper = INT_MAX;
+ }
+
if (!strcmp(of_type, "text"))
- match = value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_TEXT;
+ {
+ if (upper == INT_MAX)
+ upper = 1023;
+
+ if (value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_TEXT)
+ {
+ for (i = 0; i < count; i ++)
+ {
+ if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+ break;
+ }
+
+ match = (i == count);
+ }
+ }
else if (!strcmp(of_type, "name"))
- match = value_tag == IPP_TAG_NAMELANG || value_tag == IPP_TAG_NAME;
+ {
+ if (upper == INT_MAX)
+ upper = 255;
+
+ if (value_tag == IPP_TAG_NAMELANG || value_tag == IPP_TAG_NAME)
+ {
+ for (i = 0; i < count; i ++)
+ {
+ if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+ break;
+ }
+
+ match = (i == count);
+ }
+ }
else if (!strcmp(of_type, "collection"))
+ {
match = value_tag == IPP_TAG_BEGIN_COLLECTION;
- else
- match = value_tag == ippTagValue(of_type);
+ }
+ else if (value_tag == ippTagValue(of_type))
+ {
+ switch (value_tag)
+ {
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_URI :
+ if (upper == INT_MAX)
+ {
+ if (value_tag == IPP_TAG_KEYWORD)
+ upper = 255;
+ else
+ upper = 1023;
+ }
+
+ for (i = 0; i < count; i ++)
+ {
+ if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+ break;
+ }
+
+ match = (i == count);
+ break;
+
+ case IPP_TAG_STRING :
+ if (upper == INT_MAX)
+ upper = 1023;
+
+ for (i = 0; i < count; i ++)
+ {
+ int datalen; // Length of octetString value
+
+ ippGetOctetString(attr, i, &datalen);
+
+ if (datalen > upper)
+ break;
+ }
+
+ match = (i == count);
+ break;
+
+ case IPP_TAG_INTEGER :
+ for (i = 0; i < count; i ++)
+ {
+ int value = ippGetInteger(attr, i);
+ // Integer value
+
+ if (value < lower || value > upper)
+ break;
+ }
+
+ match = (i == count);
+ break;
+
+ case IPP_TAG_RANGE :
+ for (i = 0; i < count; i ++)
+ {
+ int vupper, vlower = ippGetRange(attr, i, &vupper);
+ // Range value
+
+ if (vlower < lower || vlower > upper || vupper < lower || vupper > upper)
+ break;
+ }
+
+ match = (i == count);
+ break;
+
+ default :
+ // No other constraints, so this is a match
+ match = 1;
+ break;
+ }
+ }
/*
- * Restore the separator if we have one...
+ * Restore the separators if we have them...
*/
+ if (paren)
+ *paren = '(';
+
if (sep)
*next++ = sep;
}
dstptr = dst; /* Should never happen */
strlcpy(dstptr, src, dstsize - (size_t)(dstptr - dst));
+
+#if _WIN32
+ if (_access(dst, 0))
+ {
+ /*
+ * Not available relative to the testfile, see if it can be found on the
+ * desktop...
+ */
+ const char *userprofile = getenv("USERPROFILE");
+ /* User home directory */
+
+ if (userprofile)
+ snprintf(dst, dstsize, "%s/Desktop/%s", userprofile, src);
+ }
+#endif /* _WIN32 */
}
return (dst);
value = ippGetString(attr, element, NULL);
- if (flags & _CUPS_WITH_HOSTNAME)
+ if (flags & IPPTOOL_WITH_HOSTNAME)
{
if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), buffer, (int)bufsize, &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
buffer[0] = '\0';
return (buffer);
}
- else if (flags & _CUPS_WITH_RESOURCE)
+ else if (flags & IPPTOOL_WITH_RESOURCE)
{
if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, buffer, (int)bufsize) < HTTP_URI_STATUS_OK)
buffer[0] = '\0';
return (buffer);
}
- else if (flags & _CUPS_WITH_SCHEME)
+ else if (flags & IPPTOOL_WITH_SCHEME)
{
if (httpSeparateURI(HTTP_URI_CODING_ALL, value, buffer, (int)bufsize, userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
buffer[0] = '\0';
httpAssembleURI(HTTP_URI_CODING_ALL, buffer, (int)bufsize, scheme, userpass, hostname, port, resource);
}
- return (buffer);
- }
- else
- return (value);
-}
+ return (buffer);
+ }
+ else
+ return (value);
+}
+
+
+/*
+ * 'init_data()' - Initialize test data.
+ */
+
+static void
+init_data(ipptool_test_t *data) /* I - Data */
+{
+ memset(data, 0, sizeof(ipptool_test_t));
+
+ data->output = IPPTOOL_OUTPUT_LIST;
+ data->outfile = cupsFileStdout();
+ data->family = AF_UNSPEC;
+ data->def_transfer = IPPTOOL_TRANSFER_AUTO;
+ data->def_version = 11;
+ data->errors = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
+ data->pass = 1;
+ data->prev_pass = 1;
+ data->request_id = (CUPS_RAND() % 1000) * 137;
+ data->show_header = 1;
+}
+
+
+/*
+ * 'iso_date()' - Return an ISO 8601 date/time string for the given IPP dateTime
+ * value.
+ */
+
+static char * /* O - ISO 8601 date/time string */
+iso_date(const ipp_uchar_t *date) /* I - IPP (RFC 1903) date/time value */
+{
+ time_t utctime; /* UTC time since 1970 */
+ struct tm utcdate; /* UTC date/time */
+ static char buffer[255]; /* String buffer */
+
+
+ utctime = ippDateToTime(date);
+ gmtime_r(&utctime, &utcdate);
+
+ snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ",
+ utcdate.tm_year + 1900, utcdate.tm_mon + 1, utcdate.tm_mday,
+ utcdate.tm_hour, utcdate.tm_min, utcdate.tm_sec);
+
+ return (buffer);
+}
+
+
+/*
+ * 'parse_monitor_printer_state()' - Parse the MONITOR-PRINTER-STATE directive.
+ *
+ * MONITOR-PRINTER-STATE [printer-uri] {
+ * DELAY nnn
+ * EXPECT attribute-name ...
+ * }
+ */
+
+static int /* O - 1 to continue, 0 to stop */
+parse_monitor_printer_state(
+ _ipp_file_t *f, /* I - IPP file data */
+ ipptool_test_t *data) /* I - Test data */
+{
+ char token[256], /* Token string */
+ name[1024], /* Name string */
+ temp[1024], /* Temporary string */
+ value[1024], /* Value string */
+ *ptr; /* Pointer into value */
+
+
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing printer URI on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (strcmp(temp, "{"))
+ {
+ // Got a printer URI so copy it...
+ _ippVarsExpand(data->vars, value, temp, sizeof(value));
+ data->monitor_uri = strdup(value);
+
+ // Then see if we have an opening brace...
+ if (!_ippFileReadToken(f, temp, sizeof(temp)) || strcmp(temp, "{"))
+ {
+ print_fatal_error(data, "Missing opening brace on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else
+ {
+ // Use the default printer URI...
+ data->monitor_uri = strdup(data->vars->uri);
+ }
+
+ // Loop until we get a closing brace...
+ while (_ippFileReadToken(f, token, sizeof(token)))
+ {
+ if (_cups_strcasecmp(token, "COUNT") &&
+ _cups_strcasecmp(token, "DEFINE-MATCH") &&
+ _cups_strcasecmp(token, "DEFINE-NO-MATCH") &&
+ _cups_strcasecmp(token, "DEFINE-VALUE") &&
+ _cups_strcasecmp(token, "DISPLAY-MATCH") &&
+ _cups_strcasecmp(token, "IF-DEFINED") &&
+ _cups_strcasecmp(token, "IF-NOT-DEFINED") &&
+ _cups_strcasecmp(token, "IN-GROUP") &&
+ _cups_strcasecmp(token, "OF-TYPE") &&
+ _cups_strcasecmp(token, "WITH-DISTINCT-VALUES") &&
+ _cups_strcasecmp(token, "WITH-VALUE"))
+ data->last_expect = NULL;
+
+ if (!strcmp(token, "}"))
+ return (1);
+ else if (!_cups_strcasecmp(token, "EXPECT"))
+ {
+ /*
+ * Expected attributes...
+ */
+
+ if (data->num_monitor_expects >= (int)(sizeof(data->monitor_expects) / sizeof(data->monitor_expects[0])))
+ {
+ print_fatal_error(data, "Too many EXPECT's on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (!_ippFileReadToken(f, name, sizeof(name)))
+ {
+ print_fatal_error(data, "Missing EXPECT name on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ data->last_expect = data->monitor_expects + data->num_monitor_expects;
+ data->num_monitor_expects ++;
+
+ memset(data->last_expect, 0, sizeof(ipptool_expect_t));
+ data->last_expect->repeat_limit = 1000;
+
+ if (name[0] == '!')
+ {
+ data->last_expect->not_expect = 1;
+ data->last_expect->name = strdup(name + 1);
+ }
+ else if (name[0] == '?')
+ {
+ data->last_expect->optional = 1;
+ data->last_expect->name = strdup(name + 1);
+ }
+ else
+ data->last_expect->name = strdup(name);
+ }
+ else if (!_cups_strcasecmp(token, "COUNT"))
+ {
+ int count; /* Count value */
+
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing COUNT number on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if ((count = atoi(temp)) <= 0)
+ {
+ print_fatal_error(data, "Bad COUNT \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->count = count;
+ }
+ else
+ {
+ print_fatal_error(data, "COUNT without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "DEFINE-MATCH"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DEFINE-MATCH variable on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->define_match = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "DEFINE-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "DEFINE-NO-MATCH"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DEFINE-NO-MATCH variable on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->define_no_match = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "DEFINE-NO-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "DEFINE-VALUE"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DEFINE-VALUE variable on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->define_value = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "DEFINE-VALUE without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "DISPLAY-MATCH"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DISPLAY-MATCH message on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->display_match = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "DISPLAY-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "DELAY"))
+ {
+ /*
+ * Delay before operation...
+ */
+
+ double dval; /* Delay value */
+
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DELAY value on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ _ippVarsExpand(data->vars, value, temp, sizeof(value));
+
+ if ((dval = _cupsStrScand(value, &ptr, localeconv())) < 0.0 || (*ptr && *ptr != ','))
+ {
+ print_fatal_error(data, "Bad DELAY value \"%s\" on line %d of \"%s\".", value, f->linenum, f->filename);
+ return (0);
+ }
+
+ data->monitor_delay = (useconds_t)(1000000.0 * dval);
+
+ if (*ptr == ',')
+ {
+ if ((dval = _cupsStrScand(ptr + 1, &ptr, localeconv())) <= 0.0 || *ptr)
+ {
+ print_fatal_error(data, "Bad DELAY value \"%s\" on line %d of \"%s\".", value, f->linenum, f->filename);
+ return (0);
+ }
+
+ data->monitor_interval = (useconds_t)(1000000.0 * dval);
+ }
+ else
+ data->monitor_interval = data->monitor_delay;
+ }
+ else if (!_cups_strcasecmp(token, "OF-TYPE"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing OF-TYPE value tag(s) on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->of_type = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "OF-TYPE without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "IN-GROUP"))
+ {
+ ipp_tag_t in_group; /* IN-GROUP value */
+
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing IN-GROUP group tag on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if ((in_group = ippTagValue(temp)) == IPP_TAG_ZERO || in_group >= IPP_TAG_UNSUPPORTED_VALUE)
+ {
+ print_fatal_error(data, "Bad IN-GROUP group tag \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
+ return (0);
+ }
+ else if (data->last_expect)
+ {
+ data->last_expect->in_group = in_group;
+ }
+ else
+ {
+ print_fatal_error(data, "IN-GROUP without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "IF-DEFINED"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing IF-DEFINED name on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->if_defined = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "IF-DEFINED without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "IF-NOT-DEFINED"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing IF-NOT-DEFINED name on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->if_not_defined = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "IF-NOT-DEFINED without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "WITH-DISTINCT-VALUES"))
+ {
+ if (data->last_expect)
+ {
+ data->last_expect->with_distinct = 1;
+ }
+ else
+ {
+ print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!_cups_strcasecmp(token, "WITH-VALUE"))
+ {
+ off_t lastpos; /* Last file position */
+ int lastline; /* Last line number */
+
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing %s value on line %d of \"%s\".", token, f->linenum, f->filename);
+ return (0);
+ }
+
+ /*
+ * Read additional comma-delimited values - needed since legacy test files
+ * will have unquoted WITH-VALUE values with commas...
+ */
+
+ ptr = temp + strlen(temp);
+
+ for (;;)
+ {
+ lastpos = cupsFileTell(f->fp);
+ lastline = f->linenum;
+ ptr += strlen(ptr);
+
+ if (!_ippFileReadToken(f, ptr, (sizeof(temp) - (size_t)(ptr - temp))))
+ break;
+
+ if (!strcmp(ptr, ","))
+ {
+ /*
+ * Append a value...
+ */
+
+ ptr += strlen(ptr);
+
+ if (!_ippFileReadToken(f, ptr, (sizeof(temp) - (size_t)(ptr - temp))))
+ break;
+ }
+ else
+ {
+ /*
+ * Not another value, stop here...
+ */
+
+ cupsFileSeek(f->fp, lastpos);
+ f->linenum = lastline;
+ *ptr = '\0';
+ break;
+ }
+ }
+ if (data->last_expect)
+ {
+ /*
+ * Expand any variables in the value and then save it.
+ */
-/*
- * 'init_data()' - Initialize test data.
- */
+ _ippVarsExpand(data->vars, value, temp, sizeof(value));
-static void
-init_data(_cups_testdata_t *data) /* I - Data */
-{
- memset(data, 0, sizeof(_cups_testdata_t));
+ ptr = value + strlen(value) - 1;
- data->output = _CUPS_OUTPUT_LIST;
- data->outfile = cupsFileStdout();
- data->family = AF_UNSPEC;
- data->def_transfer = _CUPS_TRANSFER_AUTO;
- data->def_version = 11;
- data->errors = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
- data->pass = 1;
- data->prev_pass = 1;
- data->request_id = (CUPS_RAND() % 1000) * 137 + 1;
- data->show_header = 1;
-}
+ if (value[0] == '/' && ptr > value && *ptr == '/')
+ {
+ /*
+ * WITH-VALUE is a POSIX extended regular expression.
+ */
+ data->last_expect->with_value = calloc(1, (size_t)(ptr - value));
+ data->last_expect->with_flags |= IPPTOOL_WITH_REGEX;
-/*
- * 'iso_date()' - Return an ISO 8601 date/time string for the given IPP dateTime
- * value.
- */
+ if (data->last_expect->with_value)
+ memcpy(data->last_expect->with_value, value + 1, (size_t)(ptr - value - 1));
+ }
+ else
+ {
+ /*
+ * WITH-VALUE is a literal value...
+ */
-static char * /* O - ISO 8601 date/time string */
-iso_date(const ipp_uchar_t *date) /* I - IPP (RFC 1903) date/time value */
-{
- time_t utctime; /* UTC time since 1970 */
- struct tm utcdate; /* UTC date/time */
- static char buffer[255]; /* String buffer */
+ for (ptr = value; *ptr; ptr ++)
+ {
+ if (*ptr == '\\' && ptr[1])
+ {
+ /*
+ * Remove \ from \foo...
+ */
+ _cups_strcpy(ptr, ptr + 1);
+ }
+ }
- utctime = ippDateToTime(date);
- gmtime_r(&utctime, &utcdate);
+ data->last_expect->with_value = strdup(value);
+ data->last_expect->with_flags |= IPPTOOL_WITH_LITERAL;
+ }
+ }
+ else
+ {
+ print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+ return (0);
+ }
+ }
+ }
- snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ",
- utcdate.tm_year + 1900, utcdate.tm_mon + 1, utcdate.tm_mday,
- utcdate.tm_hour, utcdate.tm_min, utcdate.tm_sec);
+ print_fatal_error(data, "Missing closing brace on line %d of \"%s\".", f->linenum, f->filename);
- return (buffer);
+ return (0);
}
* Display the prompt...
*/
- cupsFilePrintf(cupsFileStdout(), "%s\n---- PRESS ANY KEY ----", message);
+ cupsFilePrintf(cupsFileStdout(), "\n%s\n\n---- PRESS ANY KEY ----", message);
#ifdef _WIN32
/*
*/
static void
-print_attr(cups_file_t *outfile, /* I - Output file */
- _cups_output_t output, /* I - Output format */
- ipp_attribute_t *attr, /* I - Attribute to print */
- ipp_tag_t *group) /* IO - Current group */
+print_attr(cups_file_t *outfile, /* I - Output file */
+ ipptool_output_t output, /* I - Output format */
+ ipp_attribute_t *attr, /* I - Attribute to print */
+ ipp_tag_t *group) /* IO - Current group */
{
int i, /* Looping var */
count; /* Number of values */
ipp_attribute_t *colattr; /* Collection attribute */
- if (output == _CUPS_OUTPUT_PLIST)
+ if (output == IPPTOOL_OUTPUT_PLIST)
{
if (!ippGetName(attr) || (group && *group != ippGetGroupTag(attr)))
{
{
char buffer[131072]; /* Value buffer */
- if (output == _CUPS_OUTPUT_TEST)
+ if (output == IPPTOOL_OUTPUT_TEST)
{
if (!ippGetName(attr))
{
* 'print_csv()' - Print a line of CSV text.
*/
-static void
+static ipp_attribute_t * /* O - Next attribute */
print_csv(
- _cups_testdata_t *data, /* I - Test data */
- ipp_t *ipp, /* I - Response message */
- ipp_attribute_t *attr, /* I - First attribute for line */
- int num_displayed, /* I - Number of attributes to display */
- char **displayed, /* I - Attributes to display */
- size_t *widths) /* I - Column widths */
+ ipptool_test_t *data, /* I - Test data */
+ ipp_t *ipp, /* I - Response message */
+ ipp_attribute_t *attr, /* I - First attribute for line */
+ int num_displayed, /* I - Number of attributes to display */
+ char **displayed, /* I - Attributes to display */
+ size_t *widths) /* I - Column widths */
{
int i; /* Looping var */
size_t maxlength; /* Max length of all columns */
- char *buffer, /* String buffer */
- *bufptr; /* Pointer into buffer */
- ipp_attribute_t *current; /* Current attribute */
-
+ ipp_attribute_t *current = attr; /* Current attribute */
+ char *values[MAX_DISPLAY], /* Strings to display */
+ *valptr; /* Pointer into value */
/*
* Get the maximum string length we have to show and allocate...
maxlength += 2;
- if ((buffer = malloc(maxlength)) == NULL)
- return;
-
/*
* Loop through the attributes to display...
*/
if (attr)
{
- for (i = 0; i < num_displayed; i ++)
- {
- if (i)
- cupsFilePutChar(data->outfile, ',');
+ // Collect the values...
+ memset(values, 0, sizeof(values));
- buffer[0] = '\0';
+ for (; current; current = ippNextAttribute(ipp))
+ {
+ if (!ippGetName(current))
+ break;
- for (current = attr; current; current = ippNextAttribute(ipp))
+ for (i = 0; i < num_displayed; i ++)
{
- if (!ippGetName(current))
- break;
- else if (!strcmp(ippGetName(current), displayed[i]))
+ if (!strcmp(ippGetName(current), displayed[i]))
{
- ippAttributeString(current, buffer, maxlength);
+ if ((values[i] = (char *)calloc(1, maxlength)) != NULL)
+ ippAttributeString(current, values[i], maxlength);
break;
- }
+ }
}
+ }
- if (strchr(buffer, ',') != NULL || strchr(buffer, '\"') != NULL ||
- strchr(buffer, '\\') != NULL)
+ // Output the line...
+ for (i = 0; i < num_displayed; i ++)
+ {
+ if (i)
+ cupsFilePutChar(data->outfile, ',');
+
+ if (!values[i])
+ continue;
+
+ if (strchr(values[i], ',') != NULL || strchr(values[i], '\"') != NULL || strchr(values[i], '\\') != NULL)
{
- cupsFilePutChar(cupsFileStdout(), '\"');
- for (bufptr = buffer; *bufptr; bufptr ++)
+ // Quoted value...
+ cupsFilePutChar(data->outfile, '\"');
+ for (valptr = values[i]; *valptr; valptr ++)
{
- if (*bufptr == '\\' || *bufptr == '\"')
- cupsFilePutChar(cupsFileStdout(), '\\');
- cupsFilePutChar(cupsFileStdout(), *bufptr);
+ if (*valptr == '\\' || *valptr == '\"')
+ cupsFilePutChar(data->outfile, '\\');
+ cupsFilePutChar(data->outfile, *valptr);
}
- cupsFilePutChar(cupsFileStdout(), '\"');
+ cupsFilePutChar(data->outfile, '\"');
}
else
- cupsFilePuts(data->outfile, buffer);
+ {
+ // Unquoted value...
+ cupsFilePuts(data->outfile, values[i]);
+ }
+
+ free(values[i]);
}
- cupsFilePutChar(cupsFileStdout(), '\n');
+ cupsFilePutChar(data->outfile, '\n');
}
else
{
+ // Show column headings...
for (i = 0; i < num_displayed; i ++)
{
if (i)
- cupsFilePutChar(cupsFileStdout(), ',');
+ cupsFilePutChar(data->outfile, ',');
cupsFilePuts(data->outfile, displayed[i]);
}
- cupsFilePutChar(cupsFileStdout(), '\n');
+ cupsFilePutChar(data->outfile, '\n');
}
- free(buffer);
+ return (current);
}
static void
print_fatal_error(
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
const char *s, /* I - Printf-style format string */
...) /* I - Additional arguments as needed */
{
* Then output it...
*/
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
{
print_xml_header(data);
print_xml_trailer(data, 0, buffer);
static void
print_ippserver_attr(
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
ipp_attribute_t *attr, /* I - Attribute to print */
int indent) /* I - Indentation level */
{
static void
print_ippserver_string(
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
const char *s, /* I - String to print */
size_t len) /* I - Length of string */
{
* 'print_line()' - Print a line of formatted or CSV text.
*/
-static void
+static ipp_attribute_t * /* O - Next attribute */
print_line(
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
ipp_t *ipp, /* I - Response message */
ipp_attribute_t *attr, /* I - First attribute for line */
int num_displayed, /* I - Number of attributes to display */
{
int i; /* Looping var */
size_t maxlength; /* Max length of all columns */
- char *buffer; /* String buffer */
- ipp_attribute_t *current; /* Current attribute */
+ ipp_attribute_t *current = attr; /* Current attribute */
+ char *values[MAX_DISPLAY]; /* Strings to display */
/*
maxlength += 2;
- if ((buffer = malloc(maxlength)) == NULL)
- return;
-
/*
* Loop through the attributes to display...
*/
if (attr)
{
- for (i = 0; i < num_displayed; i ++)
- {
- if (i)
- cupsFilePutChar(cupsFileStdout(), ' ');
+ // Collect the values...
+ memset(values, 0, sizeof(values));
- buffer[0] = '\0';
+ for (; current; current = ippNextAttribute(ipp))
+ {
+ if (!ippGetName(current))
+ break;
- for (current = attr; current; current = ippNextAttribute(ipp))
+ for (i = 0; i < num_displayed; i ++)
{
- if (!ippGetName(current))
- break;
- else if (!strcmp(ippGetName(current), displayed[i]))
+ if (!strcmp(ippGetName(current), displayed[i]))
{
- ippAttributeString(current, buffer, maxlength);
+ if ((values[i] = (char *)calloc(1, maxlength)) != NULL)
+ ippAttributeString(current, values[i], maxlength);
break;
- }
+ }
}
+ }
+
+ // Output the line...
+ for (i = 0; i < num_displayed; i ++)
+ {
+ if (i)
+ cupsFilePutChar(data->outfile, ' ');
- cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], buffer);
+ cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], values[i] ? values[i] : "");
+ free(values[i]);
}
- cupsFilePutChar(cupsFileStdout(), '\n');
+ cupsFilePutChar(data->outfile, '\n');
}
else
{
+ // Show column headings...
+ char *buffer = (char *)malloc(maxlength);
+ // Buffer for separator lines
+
+ if (!buffer)
+ return (current);
+
for (i = 0; i < num_displayed; i ++)
{
if (i)
- cupsFilePutChar(cupsFileStdout(), ' ');
+ cupsFilePutChar(data->outfile, ' ');
cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], displayed[i]);
}
- cupsFilePutChar(cupsFileStdout(), '\n');
+ cupsFilePutChar(data->outfile, '\n');
for (i = 0; i < num_displayed; i ++)
{
if (i)
- cupsFilePutChar(cupsFileStdout(), ' ');
+ cupsFilePutChar(data->outfile, ' ');
memset(buffer, '-', widths[i]);
buffer[widths[i]] = '\0';
cupsFilePuts(data->outfile, buffer);
}
- cupsFilePutChar(cupsFileStdout(), '\n');
+ cupsFilePutChar(data->outfile, '\n');
+ free(buffer);
}
- free(buffer);
+ return (current);
}
*/
static void
-print_xml_header(_cups_testdata_t *data)/* I - Test data */
+print_xml_header(ipptool_test_t *data)/* I - Test data */
{
if (!data->xml_header)
{
cupsFilePuts(data->outfile, "<key>ipptoolVersion</key>\n");
cupsFilePuts(data->outfile, "<string>" CUPS_SVERSION "</string>\n");
cupsFilePuts(data->outfile, "<key>Transfer</key>\n");
- cupsFilePrintf(data->outfile, "<string>%s</string>\n", data->transfer == _CUPS_TRANSFER_AUTO ? "auto" : data->transfer == _CUPS_TRANSFER_CHUNKED ? "chunked" : "length");
+ cupsFilePrintf(data->outfile, "<string>%s</string>\n", data->transfer == IPPTOOL_TRANSFER_AUTO ? "auto" : data->transfer == IPPTOOL_TRANSFER_CHUNKED ? "chunked" : "length");
cupsFilePuts(data->outfile, "<key>Tests</key>\n");
cupsFilePuts(data->outfile, "<array>\n");
static void
print_xml_trailer(
- _cups_testdata_t *data, /* I - Test data */
+ ipptool_test_t *data, /* I - Test data */
int success, /* I - 1 on success, 0 on failure */
const char *message) /* I - Error message or NULL */
{
*/
static int /* O - 1 to continue, 0 to stop */
-token_cb(_ipp_file_t *f, /* I - IPP file data */
- _ipp_vars_t *vars, /* I - IPP variables */
- _cups_testdata_t *data, /* I - Test data */
- const char *token) /* I - Current token */
+token_cb(_ipp_file_t *f, /* I - IPP file data */
+ _ipp_vars_t *vars, /* I - IPP variables */
+ ipptool_test_t *data, /* I - Test data */
+ const char *token) /* I - Current token */
{
char name[1024], /* Name string */
temp[1024], /* Temporary string */
_cups_strcasecmp(token, "DEFINE-MATCH") &&
_cups_strcasecmp(token, "DEFINE-NO-MATCH") &&
_cups_strcasecmp(token, "DEFINE-VALUE") &&
+ _cups_strcasecmp(token, "DISPLAY-MATCH") &&
_cups_strcasecmp(token, "IF-DEFINED") &&
_cups_strcasecmp(token, "IF-NOT-DEFINED") &&
_cups_strcasecmp(token, "IN-GROUP") &&
_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") &&
_cups_strcasecmp(token, "WITH-ALL-RESOURCES") &&
_cups_strcasecmp(token, "WITH-ALL-SCHEMES") &&
+ _cups_strcasecmp(token, "WITH-DISTINCT-VALUES") &&
_cups_strcasecmp(token, "WITH-HOSTNAME") &&
_cups_strcasecmp(token, "WITH-RESOURCE") &&
_cups_strcasecmp(token, "WITH-SCHEME") &&
if (!strcmp(token, "}"))
{
- return (do_test(f, vars, data));
+ return (do_test(f, data));
+ }
+ else if (!strcmp(token, "MONITOR-PRINTER-STATE"))
+ {
+ if (data->monitor_uri)
+ {
+ print_fatal_error(data, "Extra MONITOR-PRINTER-STATE seen on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ return (parse_monitor_printer_state(f, data));
}
else if (!strcmp(token, "COMPRESSION"))
{
if (_ippFileReadToken(f, temp, sizeof(temp)))
{
- pause_message(temp);
+ strlcpy(data->pause, temp, sizeof(data->pause));
}
else
{
{
if (isdigit(temp[0] & 255))
{
- data->request_id = atoi(temp);
+ data->request_id = atoi(temp) - 1;
}
else if (!_cups_strcasecmp(temp, "random"))
{
- data->request_id = (CUPS_RAND() % 1000) * 137 + 1;
+ data->request_id = (CUPS_RAND() % 1000) * 137;
}
else
{
return (0);
}
}
+ else if (!strcmp(token, "PASS-IF-DEFINED"))
+ {
+ /*
+ * PASS-IF-DEFINED variable
+ */
+
+ if (_ippFileReadToken(f, name, sizeof(name)))
+ {
+ if (_ippVarsGet(vars, name))
+ data->pass_test = 1;
+ }
+ else
+ {
+ print_fatal_error(data, "Missing PASS-IF-DEFINED value on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
+ else if (!strcmp(token, "PASS-IF-NOT-DEFINED"))
+ {
+ /*
+ * PASS-IF-NOT-DEFINED variable
+ */
+
+ if (_ippFileReadToken(f, name, sizeof(name)))
+ {
+ if (!_ippVarsGet(vars, name))
+ data->pass_test = 1;
+ }
+ else
+ {
+ print_fatal_error(data, "Missing PASS-IF-NOT-DEFINED value on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
else if (!strcmp(token, "SKIP-IF-DEFINED"))
{
/*
{
if (!strcmp(temp, "auto"))
{
- data->transfer = _CUPS_TRANSFER_AUTO;
+ data->transfer = IPPTOOL_TRANSFER_AUTO;
}
else if (!strcmp(temp, "chunked"))
{
- data->transfer = _CUPS_TRANSFER_CHUNKED;
+ data->transfer = IPPTOOL_TRANSFER_CHUNKED;
}
else if (!strcmp(temp, "length"))
{
- data->transfer = _CUPS_TRANSFER_LENGTH;
+ data->transfer = IPPTOOL_TRANSFER_LENGTH;
}
else
{
data->last_expect = data->expects + data->num_expects;
data->num_expects ++;
- memset(data->last_expect, 0, sizeof(_cups_expect_t));
+ memset(data->last_expect, 0, sizeof(ipptool_expect_t));
data->last_expect->repeat_limit = 1000;
data->last_expect->expect_all = expect_all;
return (0);
}
}
+ else if (!_cups_strcasecmp(token, "DISPLAY-MATCH"))
+ {
+ if (!_ippFileReadToken(f, temp, sizeof(temp)))
+ {
+ print_fatal_error(data, "Missing DISPLAY-MATCH mesaage on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+
+ if (data->last_expect)
+ {
+ data->last_expect->display_match = strdup(temp);
+ }
+ else
+ {
+ print_fatal_error(data, "DISPLAY-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+ return (0);
+ }
+ }
else if (!_cups_strcasecmp(token, "OF-TYPE"))
{
if (!_ippFileReadToken(f, temp, sizeof(temp)))
return (0);
}
}
+ else if (!_cups_strcasecmp(token, "WITH-DISTINCT-VALUES"))
+ {
+ if (data->last_expect)
+ {
+ data->last_expect->with_distinct = 1;
+ }
+ else
+ {
+ print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+ return (0);
+ }
+ }
else if (!_cups_strcasecmp(token, "WITH-ALL-VALUES") ||
!_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") ||
!_cups_strcasecmp(token, "WITH-ALL-RESOURCES") ||
if (data->last_expect)
{
if (!_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") || !_cups_strcasecmp(token, "WITH-HOSTNAME"))
- data->last_expect->with_flags = _CUPS_WITH_HOSTNAME;
+ data->last_expect->with_flags = IPPTOOL_WITH_HOSTNAME;
else if (!_cups_strcasecmp(token, "WITH-ALL-RESOURCES") || !_cups_strcasecmp(token, "WITH-RESOURCE"))
- data->last_expect->with_flags = _CUPS_WITH_RESOURCE;
+ data->last_expect->with_flags = IPPTOOL_WITH_RESOURCE;
else if (!_cups_strcasecmp(token, "WITH-ALL-SCHEMES") || !_cups_strcasecmp(token, "WITH-SCHEME"))
- data->last_expect->with_flags = _CUPS_WITH_SCHEME;
+ data->last_expect->with_flags = IPPTOOL_WITH_SCHEME;
if (!_cups_strncasecmp(token, "WITH-ALL-", 9))
- data->last_expect->with_flags |= _CUPS_WITH_ALL;
+ data->last_expect->with_flags |= IPPTOOL_WITH_ALL;
}
if (!_ippFileReadToken(f, temp, sizeof(temp)))
*/
data->last_expect->with_value = calloc(1, (size_t)(ptr - value));
- data->last_expect->with_flags |= _CUPS_WITH_REGEX;
+ data->last_expect->with_flags |= IPPTOOL_WITH_REGEX;
if (data->last_expect->with_value)
memcpy(data->last_expect->with_value, value + 1, (size_t)(ptr - value - 1));
}
data->last_expect->with_value = strdup(value);
- data->last_expect->with_flags |= _CUPS_WITH_LITERAL;
+ data->last_expect->with_flags |= IPPTOOL_WITH_LITERAL;
}
}
else
_ippVarsExpand(vars, value, temp, sizeof(value));
data->last_expect->with_value_from = strdup(value);
- data->last_expect->with_flags = _CUPS_WITH_LITERAL;
+ data->last_expect->with_flags = IPPTOOL_WITH_LITERAL;
}
else
{
if (data->show_header)
{
- if (data->output == _CUPS_OUTPUT_PLIST)
+ if (data->output == IPPTOOL_OUTPUT_PLIST)
print_xml_header(data);
- if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+ if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
cupsFilePrintf(cupsFileStdout(), "\"%s\":\n", f->filename);
data->show_header = 0;
if ((ptr = strrchr(data->name, '.')) != NULL)
*ptr = '\0';
data->repeat_interval = 5000000;
- data->request_id ++;
- strlcpy(data->resource, vars->resource, sizeof(data->resource));
+ strlcpy(data->resource, data->vars->resource, sizeof(data->resource));
data->skip_previous = 0;
+ data->pass_test = 0;
data->skip_test = 0;
data->num_statuses = 0;
data->last_status = NULL;
data->transfer = data->def_transfer;
data->version = data->def_version;
+ free(data->monitor_uri);
+ data->monitor_uri = NULL;
+ data->monitor_delay = 0;
+ data->monitor_interval = 5000000;
+ data->num_monitor_expects = 0;
+
_ippVarsSet(vars, "date-current", iso_date(ippTimeToDate(time(NULL))));
f->attrs = ippNew();
* Map the filename to and then run the tests...
*/
- _cups_testdata_t inc_data; /* Data for included file */
+ ipptool_test_t inc_data; /* Data for included file */
char filename[1024]; /* Mapped filename */
memcpy(&inc_data, data, sizeof(inc_data));
inc_data.prev_pass = 1;
inc_data.show_header = 1;
- if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+ if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
{
data->pass = data->prev_pass = 0;
return (0);
* Map the filename to and then run the tests...
*/
- _cups_testdata_t inc_data; /* Data for included file */
+ ipptool_test_t inc_data; /* Data for included file */
char filename[1024]; /* Mapped filename */
memcpy(&inc_data, data, sizeof(inc_data));
inc_data.prev_pass = 1;
inc_data.show_header = 1;
- if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+ if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
{
data->pass = data->prev_pass = 0;
return (0);
* Map the filename to and then run the tests...
*/
- _cups_testdata_t inc_data; /* Data for included file */
+ ipptool_test_t inc_data; /* Data for included file */
char filename[1024]; /* Mapped filename */
memcpy(&inc_data, data, sizeof(inc_data));
inc_data.prev_pass = 1;
inc_data.show_header = 1;
- if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+ if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
{
data->pass = data->prev_pass = 0;
return (0);
if (_ippFileReadToken(f, temp, sizeof(temp)))
{
if (!strcmp(temp, "auto"))
- data->def_transfer = _CUPS_TRANSFER_AUTO;
+ data->def_transfer = IPPTOOL_TRANSFER_AUTO;
else if (!strcmp(temp, "chunked"))
- data->def_transfer = _CUPS_TRANSFER_CHUNKED;
+ data->def_transfer = IPPTOOL_TRANSFER_CHUNKED;
else if (!strcmp(temp, "length"))
- data->def_transfer = _CUPS_TRANSFER_LENGTH;
+ data->def_transfer = IPPTOOL_TRANSFER_LENGTH;
else
{
print_fatal_error(data, "Bad TRANSFER value \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
_cupsLangPuts(stderr, _("-I Ignore errors"));
_cupsLangPuts(stderr, _("-L Send requests using content-length"));
_cupsLangPuts(stderr, _("-P filename.plist Produce XML plist to a file and test report to standard output"));
+ _cupsLangPuts(stderr, _("-R Repeat tests on server-error-busy"));
_cupsLangPuts(stderr, _("-S Test with encryption using HTTPS"));
_cupsLangPuts(stderr, _("-T seconds Set the receive/send timeout in seconds"));
_cupsLangPuts(stderr, _("-V version Set default IPP version"));
}
+/*
+ * 'with_distinct_values()' - Verify that an attribute contains unique values.
+ */
+
+static int // O - 1 if distinct, 0 if duplicate
+with_distinct_values(
+ cups_array_t *errors, // I - Array of errors
+ ipp_attribute_t *attr) // I - Attribute to test
+{
+ int i, // Looping var
+ count; // Number of values
+ ipp_tag_t value_tag; // Value syntax
+ const char *value; // Current value
+ char buffer[8192]; // Temporary buffer
+ cups_array_t *values; // Array of values as strings
+
+
+ // If there is only 1 value, it must be distinct
+ if ((count = ippGetCount(attr)) == 1)
+ return (1);
+
+ // Only check integers, enums, rangeOfInteger, resolution, and nul-terminated
+ // strings...
+ switch (value_tag = ippGetValueTag(attr))
+ {
+ case IPP_TAG_INTEGER :
+ case IPP_TAG_ENUM :
+ case IPP_TAG_RANGE :
+ case IPP_TAG_RESOLUTION :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_URISCHEME :
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_BEGIN_COLLECTION :
+ break;
+
+ default :
+ add_stringf(errors, "WITH-DISTINCT-VALUES %s not supported for 1setOf %s", ippGetName(attr), ippTagString(value_tag));
+ return (0);
+ }
+
+ // Collect values and determine they are all unique...
+ values = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
+
+ for (i = 0; i < count; i ++)
+ {
+ switch (value_tag)
+ {
+ case IPP_TAG_INTEGER :
+ case IPP_TAG_ENUM :
+ snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(attr, i));
+ value = buffer;
+ break;
+ case IPP_TAG_RANGE :
+ {
+ int upper, lower = ippGetRange(attr, i, &upper);
+ // Range values
+
+ snprintf(buffer, sizeof(buffer), "%d-%d", lower, upper);
+ value = buffer;
+ }
+ break;
+ case IPP_TAG_RESOLUTION :
+ {
+ ipp_res_t units; // Resolution units
+ int yres, xres = ippGetResolution(attr, i, &yres, &units);
+ // Resolution values
+
+ if (xres == yres)
+ snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ value = buffer;
+ }
+ break;
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_URISCHEME :
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ value = ippGetString(attr, i, NULL);
+ break;
+ case IPP_TAG_BEGIN_COLLECTION :
+ {
+ ipp_t *col = ippGetCollection(attr, i);
+ // Collection value
+ ipp_attribute_t *member; // Member attribute
+ char *bufptr, // Pointer into buffer
+ *bufend, // End of buffer
+ prefix; // Prefix character
+
+ for (prefix = '{', bufptr = buffer, bufend = buffer + sizeof(buffer) - 2, member = ippFirstAttribute(col); member && bufptr < bufend; member = ippNextAttribute(col))
+ {
+ *bufptr++ = prefix;
+ prefix = ' ';
+
+ ippAttributeString(member, bufptr, (size_t)(bufend - bufptr));
+ bufptr += strlen(bufptr);
+ }
+
+ *bufptr++ = '}';
+ *bufptr = '\0';
+ value = buffer;
+ }
+ break;
+ default : // Should never happen
+ value = "unsupported";
+ break;
+ }
+
+ if (cupsArrayFind(values, (void *)value))
+ add_stringf(errors, "DUPLICATE: %s=%s", ippGetName(attr), value);
+ else
+ cupsArrayAdd(values, (void *)value);
+ }
+
+ // Cleanup...
+ i = cupsArrayCount(values) == count;
+ cupsArrayDelete(values);
+
+ return (i);
+}
+
+
/*
* 'with_flags_string()' - Return the "WITH-xxx" predicate that corresponds to
- the flags.
+ * the flags.
*/
static const char * /* O - WITH-xxx string */
with_flags_string(int flags) /* I - WITH flags */
{
- if (flags & _CUPS_WITH_ALL)
+ if (flags & IPPTOOL_WITH_ALL)
{
- if (flags & _CUPS_WITH_HOSTNAME)
+ if (flags & IPPTOOL_WITH_HOSTNAME)
return ("WITH-ALL-HOSTNAMES");
- else if (flags & _CUPS_WITH_RESOURCE)
+ else if (flags & IPPTOOL_WITH_RESOURCE)
return ("WITH-ALL-RESOURCES");
- else if (flags & _CUPS_WITH_SCHEME)
+ else if (flags & IPPTOOL_WITH_SCHEME)
return ("WITH-ALL-SCHEMES");
else
return ("WITH-ALL-VALUES");
}
- else if (flags & _CUPS_WITH_HOSTNAME)
+ else if (flags & IPPTOOL_WITH_HOSTNAME)
return ("WITH-HOSTNAME");
- else if (flags & _CUPS_WITH_RESOURCE)
+ else if (flags & IPPTOOL_WITH_RESOURCE)
return ("WITH-RESOURCE");
- else if (flags & _CUPS_WITH_SCHEME)
+ else if (flags & IPPTOOL_WITH_SCHEME)
return ("WITH-SCHEME");
else
return ("WITH-VALUE");
*/
static int /* O - 1 on match, 0 on non-match */
-with_value(_cups_testdata_t *data, /* I - Test data */
+with_value(ipptool_test_t *data, /* I - Test data */
cups_array_t *errors, /* I - Errors array */
char *value, /* I - Value string */
int flags, /* I - Flags for match */
*matchbuf = '\0';
- match = (flags & _CUPS_WITH_ALL) ? 1 : 0;
+ match = (flags & IPPTOOL_WITH_ALL) ? 1 : 0;
/*
* NULL matches everything.
}
}
- if (flags & _CUPS_WITH_ALL)
+ if (flags & IPPTOOL_WITH_ALL)
{
if (!valmatch)
{
}
}
- if (flags & _CUPS_WITH_ALL)
+ if (flags & IPPTOOL_WITH_ALL)
{
if (!valmatch)
{
if (!matchbuf[0])
strlcpy(matchbuf, value, matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
if (!matchbuf[0])
strlcpy(matchbuf, value, matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
case IPP_TAG_TEXTLANG :
case IPP_TAG_URI :
case IPP_TAG_URISCHEME :
- if (flags & _CUPS_WITH_REGEX)
+ if (flags & IPPTOOL_WITH_REGEX)
{
/*
* Value is an extended, case-sensitive POSIX regular expression...
if (!matchbuf[0])
strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
regfree(&re);
}
- else if (ippGetValueTag(attr) == IPP_TAG_URI && !(flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME | _CUPS_WITH_RESOURCE)))
+ else if (ippGetValueTag(attr) == IPP_TAG_URI && !(flags & (IPPTOOL_WITH_SCHEME | IPPTOOL_WITH_HOSTNAME | IPPTOOL_WITH_RESOURCE)))
{
/*
* Value is a literal URI string, see if the value(s) match...
if (!matchbuf[0])
strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
* Some URI components are case-sensitive, some not...
*/
- if (flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME))
+ if (flags & (IPPTOOL_WITH_SCHEME | IPPTOOL_WITH_HOSTNAME))
result = _cups_strcasecmp(value, get_string(attr, i, flags, temp, sizeof(temp)));
else
result = strcmp(value, get_string(attr, i, flags, temp, sizeof(temp)));
if (!matchbuf[0])
strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
break;
case IPP_TAG_STRING :
- if (flags & _CUPS_WITH_REGEX)
+ if (flags & IPPTOOL_WITH_REGEX)
{
/*
* Value is an extended, case-sensitive POSIX regular expression...
if (!matchbuf[0])
strlcpy(matchbuf, temp, matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
if (!matchbuf[0])
copy_hex_string(matchbuf, adata, adatalen, matchlen);
- if (!(flags & _CUPS_WITH_ALL))
+ if (!(flags & IPPTOOL_WITH_ALL))
{
match = 1;
break;
}
}
- else if (flags & _CUPS_WITH_ALL)
+ else if (flags & IPPTOOL_WITH_ALL)
{
match = 0;
break;
--- /dev/null
+static const unsigned char printer_lg_png[] =
+{
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x08,0x06,0x00,0x00,0x00,0xf4,0x78,0xd4,
+ 0xfa,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+ 0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+ 0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+ 0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+ 0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+ 0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+ 0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+ 0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+ 0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+ 0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+ 0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+ 0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+ 0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+ 0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+ 0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+ 0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+ 0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+ 0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+ 0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+ 0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+ 0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+ 0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+ 0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+ 0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+ 0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+ 0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+ 0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+ 0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+ 0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+ 0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+ 0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+ 0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+ 0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+ 0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+ 0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+ 0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+ 0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+ 0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+ 0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+ 0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+ 0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+ 0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+ 0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+ 0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+ 0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+ 0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+ 0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+ 0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+ 0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+ 0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+ 0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+ 0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+ 0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+ 0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+ 0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+ 0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+ 0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+ 0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+ 0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+ 0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+ 0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+ 0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+ 0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+ 0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+ 0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+ 0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+ 0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+ 0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x02,0x00,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x02,0x00,0x00,0x00,0x00,0x00,0x28,0x30,0x97,0xbf,0x00,0x00,0x03,0x62,0x69,0x54,
+ 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+ 0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+ 0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+ 0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+ 0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+ 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+ 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+ 0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+ 0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+ 0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+ 0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+ 0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+ 0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+ 0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+ 0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+ 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+ 0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+ 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+ 0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+ 0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+ 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+ 0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+ 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+ 0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+ 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+ 0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+ 0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+ 0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+ 0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+ 0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+ 0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+ 0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+ 0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+ 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+ 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+ 0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x6b,0x41,0x49,0x44,0x41,0x54,
+ 0x78,0xda,0xed,0x9d,0x07,0xfc,0x1c,0x55,0xb9,0xb0,0x4f,0x7a,0xef,0x40,0x0a,0x49,
+ 0x20,0x10,0x9a,0x54,0xe9,0x46,0x7a,0x13,0x14,0x2e,0x52,0x42,0x53,0x54,0x04,0x2f,
+ 0x28,0x02,0xf7,0x7e,0x82,0x15,0x51,0x51,0x11,0x14,0x6c,0x28,0xc2,0xfd,0x79,0x51,
+ 0x41,0x41,0xa4,0x37,0xf9,0x40,0x3a,0x48,0x07,0x29,0x86,0x96,0x90,0x00,0x09,0x24,
+ 0x90,0x46,0x7a,0xcf,0x7e,0xe7,0x1d,0x32,0xff,0x6f,0x72,0x72,0xce,0x9c,0x33,0xbb,
+ 0x33,0xbb,0xb3,0xbb,0xcf,0x93,0xdf,0xc9,0xee,0x7f,0x77,0x76,0x66,0xce,0xb4,0xb7,
+ 0x9c,0xf7,0x7d,0x4f,0x27,0x55,0x52,0x2a,0x95,0x4a,0x1f,0xfd,0xb2,0xad,0x6e,0xdb,
+ 0xe9,0x36,0x56,0xb7,0x31,0xba,0x8d,0xd4,0x6d,0x3d,0xdd,0x06,0xeb,0xd6,0x4b,0xb7,
+ 0xee,0xba,0x75,0x51,0x00,0x00,0x00,0xf5,0x67,0x95,0x6e,0xcb,0x75,0x5b,0xa2,0xdb,
+ 0x1c,0xdd,0x66,0xe9,0x36,0x4d,0xb7,0x29,0xba,0x4d,0xd2,0xed,0x45,0xdd,0x5e,0xea,
+ 0xd4,0xa9,0xd3,0xa2,0x32,0xee,0x7c,0xa7,0x12,0x09,0xfc,0x7e,0xfa,0x65,0x7f,0xdd,
+ 0x0e,0xd0,0x6d,0x8f,0x35,0xc2,0xbf,0x33,0xd7,0x17,0x00,0x00,0x34,0x31,0xab,0x45,
+ 0x09,0xd0,0xed,0x51,0xdd,0xee,0xd5,0xed,0x3e,0xad,0x10,0x2c,0x68,0x7b,0x05,0x40,
+ 0x0b,0xfd,0x41,0xfa,0xe5,0x08,0xdd,0x8e,0xd5,0x6d,0x5f,0xdd,0xba,0x71,0xad,0x00,
+ 0x00,0x40,0x0b,0xb3,0x42,0xb7,0x07,0x74,0xbb,0x4e,0xb7,0x9b,0xb5,0x32,0x30,0xb7,
+ 0xad,0x14,0x00,0x2d,0xf8,0xf7,0xd4,0x2f,0xa7,0xea,0x76,0xb4,0x6e,0x3d,0xb8,0x1e,
+ 0x00,0x00,0xa0,0x0d,0x59,0xaa,0xdb,0x8d,0xba,0x5d,0xa1,0x15,0x81,0x47,0x5a,0x56,
+ 0x01,0xd0,0x42,0x5f,0xdc,0xf9,0xe3,0x75,0x3b,0x5b,0xb7,0x9d,0x39,0xef,0x00,0x00,
+ 0x00,0x1d,0x3c,0xa3,0xdb,0xc5,0xba,0x5d,0xaf,0x95,0x81,0xd5,0x2d,0xa3,0x00,0x68,
+ 0xe1,0x7f,0xa4,0x7e,0x39,0x5f,0xb7,0xad,0x39,0xc7,0x00,0x00,0x00,0x4e,0x26,0xe8,
+ 0x76,0x9e,0x56,0x02,0x6e,0x6a,0x6a,0x05,0x40,0x0b,0xfe,0x2d,0xf5,0xcb,0x65,0xea,
+ 0xc3,0xf1,0x7d,0x00,0x00,0x00,0x08,0x43,0xe2,0x04,0xbe,0xa2,0x15,0x81,0x57,0x8b,
+ 0xda,0x40,0x21,0x51,0xf6,0x5a,0xf0,0xf7,0xd6,0xed,0x02,0xfd,0xf6,0x05,0x84,0x3f,
+ 0x00,0x00,0x40,0x66,0x44,0x76,0xbe,0x20,0xb2,0x54,0x64,0x6a,0x53,0x78,0x00,0xf4,
+ 0x8e,0xee,0xae,0x5f,0xae,0x51,0x1f,0xe6,0xed,0x03,0x00,0x00,0x40,0x6d,0x48,0x5d,
+ 0x81,0x13,0xb4,0x37,0xe0,0x89,0xd2,0x7a,0x00,0xb4,0xf0,0xff,0x9a,0x7e,0x79,0x18,
+ 0xe1,0x0f,0x00,0x00,0x90,0x1b,0x22,0x53,0x1f,0x5e,0x23,0x63,0xcb,0xe5,0x01,0xd0,
+ 0x3b,0x25,0x95,0xf9,0xfe,0xa8,0xdb,0x61,0x9c,0x27,0x00,0x00,0x80,0xc2,0xb8,0x5d,
+ 0xb7,0x2f,0x68,0x6f,0xc0,0x9c,0x86,0x2b,0x00,0x5a,0xf8,0x8b,0x66,0x72,0x8f,0xfa,
+ 0xb0,0x5c,0x2f,0x00,0x00,0x00,0x14,0x8b,0x94,0x19,0x3e,0x48,0x2b,0x01,0x53,0x6a,
+ 0x59,0x49,0x4d,0x43,0x00,0x5a,0xf8,0x6f,0xaf,0x5f,0x1e,0x43,0xf8,0x03,0x00,0x00,
+ 0xd4,0x0d,0x91,0xb9,0x8f,0xad,0x91,0xc1,0xf5,0x57,0x00,0xf4,0x86,0xf7,0xd6,0x2f,
+ 0x0f,0xe9,0x36,0x8c,0x73,0x01,0x00,0x00,0x50,0x57,0x44,0xf6,0x3e,0xb4,0x46,0x16,
+ 0x57,0x45,0x55,0x43,0x00,0x6b,0x36,0xf8,0x7f,0x75,0xeb,0xc9,0x39,0x00,0x00,0x00,
+ 0x68,0x18,0x52,0x4e,0xf8,0x60,0x3d,0x1c,0xf0,0x50,0xe1,0x0a,0xc0,0x1a,0x97,0x83,
+ 0x6c,0x68,0x00,0xc7,0x1d,0x00,0x00,0xa0,0xe1,0xcc,0xd3,0x6d,0x6f,0xad,0x04,0xbc,
+ 0x50,0x98,0x02,0xb0,0x26,0xe0,0x4f,0xc6,0xfc,0x71,0xfb,0x03,0x00,0x00,0x94,0x87,
+ 0x19,0xba,0x8d,0xcb,0x12,0x18,0x18,0xac,0x00,0xac,0x49,0xf5,0x7b,0x52,0x11,0xf0,
+ 0x07,0x00,0x00,0x50,0x46,0x24,0x3b,0x60,0xb7,0xd0,0x14,0xc1,0x2c,0x41,0x80,0x7f,
+ 0x44,0xf8,0x03,0x00,0x00,0x94,0x96,0xb1,0x6b,0x64,0x75,0x10,0x41,0x0a,0xc0,0x9a,
+ 0xea,0x43,0x14,0xf9,0x01,0x00,0x00,0x28,0x37,0x87,0x85,0x56,0x0c,0xf4,0x0e,0x01,
+ 0xac,0xa9,0xed,0x2f,0xe5,0x7d,0xbb,0x71,0x5c,0x01,0x00,0x00,0x4a,0xcf,0x0a,0xdd,
+ 0xf6,0xf2,0xcd,0x1d,0xd0,0xc9,0x23,0xfc,0x65,0x06,0xa2,0x7f,0x2b,0x6a,0xfb,0x03,
+ 0x00,0x00,0x34,0x13,0x12,0x0c,0xb8,0x8d,0x56,0x02,0x16,0xbb,0x16,0xf0,0x0d,0x01,
+ 0x9c,0x8b,0xf0,0x07,0x00,0x00,0x68,0x3a,0xc6,0xac,0x91,0xe1,0xd9,0x3d,0x00,0xda,
+ 0xfa,0xdf,0x52,0xbf,0x48,0x4e,0x61,0x77,0x8e,0x23,0x00,0x00,0x40,0xd3,0xb1,0x5c,
+ 0xb7,0xed,0xb5,0x17,0xe0,0xd5,0xac,0x0a,0xc0,0xfd,0xfa,0x65,0xdf,0x5a,0xb7,0xbe,
+ 0x72,0xe5,0x4a,0x35,0x77,0xee,0xdc,0xd4,0x65,0xba,0x75,0xeb,0xa6,0x06,0x0e,0x1c,
+ 0xc8,0xa9,0x02,0x00,0x00,0xc8,0x97,0x07,0xb4,0x02,0xb0,0x5f,0xb0,0x02,0xa0,0x85,
+ 0xff,0x51,0xfa,0xe5,0x86,0x3c,0xb6,0x7c,0xe9,0xa5,0x97,0xaa,0x33,0xcf,0x3c,0x33,
+ 0x75,0x99,0xee,0xdd,0xbb,0xab,0x65,0xcb,0x96,0x71,0x9a,0x00,0x00,0x00,0xf2,0xe7,
+ 0x68,0xad,0x04,0xdc,0x68,0x7e,0xd8,0xd9,0x22,0xfc,0xe5,0xb3,0x1f,0xe4,0xb5,0xd5,
+ 0xe5,0xcb,0x97,0xe7,0xb2,0x0c,0x00,0x00,0x00,0x54,0xc5,0x0f,0xd6,0xc8,0xf6,0x74,
+ 0x05,0x40,0x33,0x5e,0xb7,0xad,0x39,0x5e,0x00,0x00,0x00,0x2d,0xc1,0xd6,0x6b,0x64,
+ 0xbb,0x57,0x01,0x38,0x9b,0x63,0x05,0x00,0x00,0xd0,0x52,0x9c,0x9d,0xaa,0x00,0x68,
+ 0x17,0xc1,0x9e,0xfa,0x65,0x67,0x8e,0x13,0x00,0x00,0x40,0x4b,0xb1,0xf3,0x1a,0x19,
+ 0xef,0xf4,0x00,0x9c,0xca,0x31,0x02,0x00,0x00,0x68,0x49,0x4e,0xb5,0x2a,0x00,0x5a,
+ 0x33,0x18,0xa4,0x5f,0x8e,0xe2,0xf8,0x00,0x00,0x00,0xb4,0x24,0x47,0xad,0x91,0xf5,
+ 0xeb,0x78,0x00,0x8e,0xd0,0xad,0x27,0xc7,0x07,0x00,0x00,0xa0,0x25,0xe9,0xb9,0x46,
+ 0xd6,0xaf,0xa3,0x00,0x1c,0xcb,0xb1,0x01,0x00,0x00,0x68,0x69,0x3a,0x64,0x7d,0x57,
+ 0xf9,0x4f,0xbb,0x04,0xfa,0xa9,0x1c,0xaa,0xfe,0xd9,0x18,0x3f,0x7e,0xbc,0xda,0x60,
+ 0x83,0x0d,0x52,0x97,0xe9,0xdb,0xb7,0x2f,0xa7,0x04,0x00,0x00,0xa0,0x78,0xf6,0x15,
+ 0x99,0xaf,0x0b,0x03,0x2d,0xe8,0xb4,0x46,0x01,0x10,0x97,0xc0,0x4d,0x1c,0x17,0x00,
+ 0x00,0x80,0x96,0xe7,0x08,0xad,0x00,0xdc,0x12,0x0f,0x01,0xec,0xcf,0xf1,0x00,0x00,
+ 0x00,0x68,0x0b,0x0e,0x90,0xff,0x62,0x05,0x60,0x0f,0x8e,0x07,0x00,0x00,0x40,0x5b,
+ 0x10,0xc9,0xfc,0x4e,0xda,0xfd,0x2f,0x03,0xf0,0xf3,0x94,0xbd,0x2a,0x20,0x00,0x00,
+ 0x00,0xb4,0x16,0xab,0x75,0xeb,0x2f,0x42,0x7f,0x1b,0x84,0x3f,0x00,0x00,0x40,0xdb,
+ 0x20,0x32,0x7f,0x5b,0xf9,0x6f,0x3b,0x8e,0x05,0x00,0x00,0x40,0x5b,0xb1,0x9d,0xa4,
+ 0x01,0x8e,0xe5,0x38,0xb8,0x99,0x37,0x6f,0x9e,0x7a,0xf3,0xcd,0x37,0xa3,0xf6,0xd6,
+ 0x5b,0x6f,0xa9,0xd5,0xab,0x57,0xab,0xa1,0x43,0x87,0xaa,0xe1,0xc3,0x87,0xab,0x61,
+ 0xc3,0x86,0xa9,0x51,0xa3,0x46,0xa9,0x3e,0x7d,0xfa,0xd0,0xcf,0x12,0xb0,0x68,0xd1,
+ 0x22,0x35,0x75,0xea,0x54,0x35,0x7d,0xfa,0x74,0xf5,0xee,0xbb,0xef,0x46,0xaf,0x0b,
+ 0x17,0x2e,0x54,0x43,0x86,0x0c,0x89,0xfa,0x20,0x6d,0xc4,0x88,0x11,0x6a,0x93,0x4d,
+ 0x36,0x51,0x3a,0x02,0x96,0x8b,0x9b,0x73,0x01,0xd0,0xce,0x8c,0x15,0x05,0x60,0x4c,
+ 0x91,0x5b,0x98,0x32,0x65,0x8a,0x7a,0xe0,0x81,0x07,0x52,0x97,0x11,0xc1,0x72,0xec,
+ 0xb1,0xc7,0x96,0x62,0x3b,0x2b,0x57,0xae,0x54,0x37,0xde,0x78,0xa3,0xfa,0xdd,0xef,
+ 0x7e,0xa7,0x5e,0x78,0xe1,0x05,0xf5,0xc1,0x07,0x1f,0xa4,0x2e,0xdf,0xb5,0x6b,0x57,
+ 0xb5,0xef,0xbe,0xfb,0xaa,0xa3,0x8e,0x3a,0x4a,0x1d,0x71,0xc4,0x11,0xde,0x9a,0x07,
+ 0x65,0x39,0x9e,0x65,0xef,0x67,0x28,0xb3,0x67,0xcf,0x56,0xb7,0xde,0x7a,0xab,0xba,
+ 0xfe,0xfa,0xeb,0xd5,0x7d,0xf7,0xdd,0xa7,0x56,0xac,0x58,0xe1,0xfd,0x8d,0x28,0x33,
+ 0xd2,0x87,0x23,0x8f,0x3c,0x52,0xed,0xb1,0xc7,0x1e,0xaa,0x4b,0x97,0x2e,0x35,0xed,
+ 0xc3,0x8b,0x2f,0xbe,0xa8,0x9e,0x79,0xe6,0x99,0xd4,0x65,0x06,0x0c,0x18,0x10,0x1d,
+ 0xbb,0x7a,0x72,0xd7,0x5d,0x77,0x45,0x82,0xd7,0x45,0xe7,0xce,0x9d,0xd5,0xe7,0x3e,
+ 0xf7,0xb9,0xe8,0xb5,0x55,0xce,0x05,0x00,0x04,0x33,0x46,0x6a,0x00,0x3c,0x5e,0x29,
+ 0x90,0x8b,0x2f,0xbe,0xb8,0xa2,0x37,0xe4,0x6d,0x8d,0xde,0x8e,0x7e,0x78,0x55,0x7e,
+ 0xf2,0x93,0x9f,0x54,0x46,0x8e,0x1c,0x19,0xb4,0x1e,0x5b,0xd3,0x0f,0xd2,0xca,0xf1,
+ 0xc7,0x1f,0x5f,0xd1,0x0f,0xdd,0xd2,0x1e,0xcf,0x66,0xe9,0xa7,0x8f,0x89,0x13,0x27,
+ 0x56,0x0e,0x3f,0xfc,0xf0,0x8a,0x56,0x4c,0xaa,0xee,0x87,0xb4,0x8d,0x37,0xde,0xb8,
+ 0x72,0xc7,0x1d,0x77,0xd4,0xb4,0x2f,0xe7,0x9c,0x73,0x4e,0xd0,0x31,0x7b,0xfb,0xed,
+ 0xb7,0xeb,0x76,0x7c,0xb4,0x47,0xa7,0xd2,0xbb,0x77,0xef,0xd4,0x7d,0x92,0x63,0x37,
+ 0x73,0xe6,0xcc,0x96,0x3a,0x17,0x00,0x10,0xcc,0xe3,0x22,0x29,0x26,0xb6,0xbb,0x02,
+ 0x70,0xd3,0x4d,0x37,0x55,0xb4,0xd5,0x5c,0xd3,0xc3,0x2b,0xd9,0xb4,0xb5,0x57,0xb9,
+ 0xec,0xb2,0xcb,0x2a,0xab,0x56,0xad,0x2a,0xd5,0xf1,0x6c,0xa6,0x7e,0xba,0x58,0xba,
+ 0x74,0x69,0xe5,0x7b,0xdf,0xfb,0x5e,0xa5,0x47,0x8f,0x1e,0xb9,0xf5,0x43,0x9a,0xb6,
+ 0x40,0x2b,0xd3,0xa6,0x4d,0xab,0x6a,0x9f,0x9e,0x7b,0xee,0xb9,0xa0,0x6d,0x5c,0x70,
+ 0xc1,0x05,0x75,0x3b,0x4e,0x97,0x5f,0x7e,0xb9,0x77,0x7f,0x44,0x68,0xb7,0xda,0xb9,
+ 0x00,0x80,0x70,0xdd,0x5d,0x24,0xc5,0xec,0x76,0x56,0x00,0xe4,0x77,0x62,0x9d,0xe5,
+ 0xf9,0x00,0x8b,0xdb,0x21,0x87,0x1c,0x12,0x3d,0x24,0xcb,0x70,0x3c,0x9b,0xad,0x9f,
+ 0x36,0x9e,0x7d,0xf6,0xd9,0xca,0xd8,0xb1,0x63,0x0b,0xe9,0x83,0xb4,0xf5,0xd6,0x5b,
+ 0xaf,0xf2,0xd2,0x4b,0x2f,0x55,0xb5,0x6f,0xdb,0x6d,0xb7,0x9d,0x77,0xfd,0x5b,0x6e,
+ 0xb9,0x65,0xdd,0xee,0xec,0x5d,0x76,0xd9,0xc5,0xbb,0x3f,0xb5,0x58,0xdb,0x65,0x3e,
+ 0x17,0x00,0x10,0xc4,0x6c,0x19,0xfc,0xeb,0xd5,0x8e,0x83,0x1f,0x32,0x06,0x7e,0xda,
+ 0x69,0xa7,0xa9,0xb3,0xcf,0x3e,0x3b,0x0a,0x78,0x2b,0x6a,0x0c,0x56,0xc6,0x7d,0x97,
+ 0x2f,0x5f,0x4e,0x3f,0x6b,0xe4,0x89,0x27,0x9e,0x50,0xfb,0xed,0xb7,0x9f,0x9a,0x34,
+ 0x69,0x52,0x61,0xdb,0x98,0x35,0x6b,0x96,0x3a,0xe0,0x80,0x03,0xd4,0x6b,0xaf,0xbd,
+ 0x96,0xf9,0xb7,0x9f,0xff,0xfc,0xe7,0xbd,0xcb,0xbc,0xfa,0xea,0xab,0xea,0xa9,0xa7,
+ 0x9e,0x2a,0xfc,0x9c,0x4b,0x4c,0xc2,0xd3,0x4f,0x3f,0x9d,0xba,0x8c,0x1e,0x02,0x52,
+ 0x07,0x1f,0x7c,0x70,0x4b,0x9e,0x0b,0x00,0x08,0xa2,0x97,0x28,0x00,0xdd,0xdb,0xb1,
+ 0xe7,0x9f,0xfd,0xec,0x67,0xd5,0x15,0x57,0x5c,0x51,0xf8,0x76,0xee,0xbc,0xf3,0x4e,
+ 0x75,0xcc,0x31,0xc7,0x04,0x05,0x44,0xd1,0x4f,0x3b,0x0f,0x3f,0xfc,0xb0,0x3a,0xe8,
+ 0xa0,0x83,0xa2,0x4c,0x85,0xa2,0x79,0xef,0xbd,0xf7,0xd4,0xfe,0xfb,0xef,0x1f,0x65,
+ 0x43,0x64,0xe1,0x84,0x13,0x4e,0x88,0x02,0x25,0x7d,0xfc,0xe9,0x4f,0x7f,0x2a,0xbc,
+ 0x0f,0xff,0xfb,0xbf,0xff,0xeb,0x5d,0xe6,0x8b,0x5f,0xfc,0x62,0x55,0x01,0x77,0xcd,
+ 0x70,0x2e,0x00,0x20,0x88,0xee,0xa2,0x00,0xb4,0x5d,0xd8,0xed,0xd5,0x57,0x5f,0xad,
+ 0xae,0xbb,0xee,0xba,0xba,0x6d,0x4f,0x22,0xa3,0x7f,0xf4,0xa3,0x1f,0xd1,0xcf,0x2a,
+ 0x78,0xf4,0xd1,0x47,0x95,0x1e,0x62,0x50,0x0b,0x16,0x2c,0x08,0xfe,0x4d,0xb7,0x6e,
+ 0xdd,0xd4,0xe8,0xd1,0xa3,0xd5,0x8e,0x3b,0xee,0xa8,0xb6,0xde,0x7a,0xeb,0x28,0xf5,
+ 0x2c,0x0b,0xef,0xbc,0xf3,0x8e,0x3a,0xf9,0xe4,0x93,0x33,0xfd,0x46,0xd2,0xda,0x42,
+ 0x2c,0xea,0xbf,0xfe,0xf5,0xaf,0x85,0x7a,0x4a,0x96,0x2d,0x5b,0xa6,0xfe,0xfc,0xe7,
+ 0x3f,0xa7,0x2e,0x23,0x51,0xff,0x59,0xfb,0xd7,0x4c,0xe7,0x02,0x00,0x82,0xe8,0xa2,
+ 0x8a,0x1e,0x64,0x28,0x5b,0x0c,0x80,0xce,0x4d,0xae,0x0c,0x1c,0x38,0x30,0x73,0xd4,
+ 0xbb,0xaa,0x71,0x4c,0xb3,0x7b,0xf7,0xee,0x95,0x97,0x5f,0x7e,0x99,0x7e,0x66,0x40,
+ 0xa7,0x26,0x56,0x74,0x9a,0x58,0xd0,0x76,0x75,0x2e,0x79,0x45,0x5b,0xe1,0x15,0xad,
+ 0x84,0x54,0x74,0x0e,0xfa,0x3a,0xeb,0xd2,0xae,0xe4,0xca,0x4f,0x7f,0xfa,0xd3,0xca,
+ 0x86,0x1b,0x6e,0x18,0xdc,0x97,0x6b,0xae,0xb9,0x26,0xd3,0xfe,0xea,0xf4,0xb7,0xa0,
+ 0xf5,0xea,0xf4,0xcb,0xc2,0xee,0xb7,0x6b,0xaf,0xbd,0xd6,0xbb,0x7d,0xad,0xa8,0xb4,
+ 0xfc,0xb9,0x00,0x00,0x3f,0x6d,0xa7,0x00,0x68,0xf7,0xa5,0x77,0x19,0x79,0xd0,0x9d,
+ 0x7f,0xfe,0xf9,0x95,0x7f,0xfc,0xe3,0x1f,0x95,0xc9,0x93,0x27,0x57,0xf4,0x38,0x7a,
+ 0x47,0xd4,0xf3,0x2b,0xaf,0xbc,0x12,0x45,0x73,0x6f,0xb3,0xcd,0x36,0x99,0x85,0xe3,
+ 0x9e,0x7b,0xee,0x59,0xd1,0xe3,0xf0,0xf4,0x33,0x90,0x13,0x4f,0x3c,0x31,0x68,0x7b,
+ 0x3b,0xec,0xb0,0x43,0x45,0x8f,0x79,0x07,0xad,0x53,0x5b,0xaf,0x95,0x33,0xce,0x38,
+ 0x23,0x68,0xbd,0xba,0x08,0x52,0x94,0x4e,0x97,0x25,0x2a,0x7e,0xd0,0xa0,0x41,0x85,
+ 0x47,0xdf,0xa7,0xa1,0x5d,0xe6,0x85,0x28,0x20,0xcd,0x76,0x2e,0x00,0x00,0x05,0x20,
+ 0x53,0x3b,0xf0,0xc0,0x03,0x2b,0xb7,0xdc,0x72,0x4b,0x87,0x20,0xf4,0xa1,0x8b,0xe8,
+ 0x64,0x4e,0xab,0xd3,0x6e,0x79,0xfa,0x19,0xc0,0x0d,0x37,0xdc,0x10,0xb4,0x1d,0x5d,
+ 0x3c,0xa6,0x2a,0xc1,0xf0,0x9d,0xef,0x7c,0x27,0x68,0xfd,0xdf,0xff,0xfe,0xf7,0x33,
+ 0xad,0xf7,0xcb,0x5f,0xfe,0xb2,0x77,0x9d,0xda,0x2d,0x9e,0x4b,0xfe,0xbd,0xc9,0x1b,
+ 0x6f,0xbc,0x11,0x59,0xdf,0x69,0xdb,0xd6,0xd5,0x1d,0x2b,0x3a,0x4e,0xa3,0x2d,0xce,
+ 0x05,0x00,0xa0,0x00,0x78,0x9b,0x1e,0x97,0xac,0xda,0x2d,0xab,0x23,0xbb,0x2b,0xeb,
+ 0xaf,0xbf,0x7e,0xf0,0xb6,0x3e,0xf6,0xb1,0x8f,0xd1,0xcf,0x00,0xcb,0x50,0xd2,0xc0,
+ 0x7c,0xdb,0xd0,0x65,0x64,0xa3,0x65,0xab,0xe5,0xb0,0xc3,0x0e,0x0b,0xda,0x46,0x16,
+ 0x9e,0x7c,0xf2,0xc9,0xa0,0xe3,0xf3,0xeb,0x5f,0xff,0x3a,0xf7,0x7b,0xed,0xdc,0x73,
+ 0xcf,0xf5,0x6e,0xf7,0x9b,0xdf,0xfc,0x66,0xdb,0x9c,0x0b,0x00,0x40,0x01,0xf0,0x8e,
+ 0x87,0xea,0x5a,0xe5,0x35,0x6d,0xfb,0x9f,0xff,0xfc,0x67,0xa6,0x62,0x28,0xb5,0x8c,
+ 0x91,0xb7,0x43,0x3f,0x2f,0xbd,0xf4,0xd2,0xa0,0x71,0xe6,0x87,0x1e,0x7a,0xa8,0xa6,
+ 0xfe,0x48,0x05,0x3b,0x89,0x59,0xf0,0x6d,0x4b,0x07,0xbf,0x65,0x5a,0xaf,0xe4,0xfb,
+ 0xfb,0xd6,0xb9,0xd3,0x4e,0x3b,0xe5,0x7a,0x9f,0x89,0x37,0xc7,0x57,0xdd,0x51,0x8e,
+ 0x99,0x4e,0xdd,0x6b,0xab,0x73,0x01,0x00,0x6e,0xda,0x7a,0x1a,0xe0,0x8b,0x2e,0xba,
+ 0x28,0xca,0x61,0x97,0x09,0x6f,0x6a,0x61,0xdc,0xb8,0x71,0x4a,0xbb,0x27,0x83,0x97,
+ 0xbf,0xf2,0xca,0x2b,0xe9,0xa7,0x03,0x51,0x4a,0xb5,0x75,0xec,0x5d,0x4e,0xea,0xc7,
+ 0xef,0xb5,0xd7,0x5e,0x35,0xf5,0x47,0x17,0xb2,0x51,0xe3,0xc7,0x8f,0xf7,0x2e,0x77,
+ 0xd5,0x55,0x57,0x65,0x5a,0x6f,0x48,0x4d,0x00,0x5d,0x48,0x47,0x69,0x05,0x29,0xb7,
+ 0x73,0x7c,0xf7,0xdd,0x77,0x2b,0x5d,0x3d,0x2f,0x75,0x19,0x99,0xcb,0x61,0xd3,0x4d,
+ 0x37,0x6d,0xab,0x73,0x01,0x00,0xe9,0x37,0x79,0x5b,0x7a,0x00,0xf2,0x76,0xc1,0xea,
+ 0x99,0xce,0x2a,0x7a,0x82,0x9c,0xa0,0x6d,0xcb,0x38,0x6c,0xb5,0x41,0x72,0xad,0xde,
+ 0xcf,0xdb,0x6f,0xbf,0x3d,0x68,0xdd,0x7a,0x42,0xa4,0x5c,0xfa,0x73,0xdb,0x6d,0xb7,
+ 0x79,0xb7,0x35,0x78,0xf0,0xe0,0x4c,0xfd,0x90,0x0c,0x8c,0x90,0x8c,0x8a,0xaf,0x7f,
+ 0xfd,0xeb,0xb9,0x9d,0x17,0x2d,0x84,0xbd,0xdb,0x93,0x0c,0x81,0x76,0x3b,0x17,0x00,
+ 0x80,0x07,0x60,0x2d,0x7e,0xf3,0x9b,0xdf,0x28,0x1d,0x7d,0x9c,0xeb,0x3a,0x65,0x06,
+ 0xbe,0xaf,0x7d,0xed,0x6b,0x41,0xcb,0x4a,0x81,0x13,0x1d,0xb0,0x45,0x3f,0x2d,0x68,
+ 0x97,0xb3,0x77,0x99,0xcd,0x36,0xdb,0x4c,0xed,0xb3,0xcf,0x3e,0xb9,0xf4,0xe7,0x13,
+ 0x9f,0xf8,0x84,0xea,0xd9,0xb3,0x67,0xea,0x32,0x73,0xe6,0xcc,0x89,0x66,0x61,0x0c,
+ 0x45,0xaa,0xec,0x49,0x01,0x1b,0x1f,0x7f,0xf9,0xcb,0x5f,0x72,0xa9,0xce,0x28,0xc7,
+ 0x59,0x97,0xf5,0x4d,0x5d,0x46,0xf2,0xef,0xc5,0x52,0x6f,0xb7,0x73,0x01,0x00,0x6e,
+ 0xda,0x4e,0x01,0xd0,0x93,0xd7,0xa8,0xd3,0x4f,0x3f,0xbd,0x90,0x75,0x4b,0x25,0xbc,
+ 0x50,0x7c,0xd3,0xc7,0xb6,0x63,0x3f,0x75,0x1a,0x9d,0x7a,0xf0,0xc1,0x07,0xbd,0xcb,
+ 0xe9,0x2c,0x86,0xdc,0xfa,0xa2,0xc7,0x9d,0xd5,0x56,0x5b,0x6d,0xe5,0x5d,0xee,0xf9,
+ 0xe7,0x9f,0xcf,0xb4,0xde,0x2f,0x7c,0xe1,0x0b,0xde,0x65,0xa4,0xc8,0xcd,0xbd,0xf7,
+ 0xde,0x5b,0x73,0x1f,0xc4,0x2d,0xee,0xab,0xc0,0x28,0xd3,0xfe,0xea,0xf8,0x8d,0xb6,
+ 0x3c,0x17,0x00,0x80,0x02,0x10,0xa1,0xd3,0xb4,0x0a,0x5b,0xb7,0x9e,0xce,0x54,0xe9,
+ 0xbc,0xf9,0x52,0x28,0x00,0xcd,0xd8,0x4f,0xa9,0x5f,0x1f,0x52,0x25,0x2f,0xc4,0xba,
+ 0xce,0x42,0x48,0x5f,0xb2,0x0a,0x9d,0x4f,0x7f,0xfa,0xd3,0xaa,0x7f,0xff,0xfe,0x41,
+ 0xc2,0xbb,0x56,0x42,0x4a,0xff,0x7e,0xe9,0x4b,0x5f,0xca,0xb4,0xce,0x56,0x3a,0x17,
+ 0x00,0x80,0x02,0x50,0x17,0x42,0x27,0x58,0x29,0x5a,0x01,0x68,0xc6,0x7e,0x4a,0xa9,
+ 0xd9,0x10,0x76,0xdb,0x6d,0xb7,0x5c,0xfb,0x32,0x66,0xcc,0x98,0xdc,0x85,0x4e,0xef,
+ 0xde,0xbd,0x83,0x82,0xda,0x6e,0xbe,0xf9,0xe6,0x4c,0xa5,0x75,0x6d,0xc7,0xcc,0x37,
+ 0x61,0x8e,0xce,0xcf,0x0f,0xb2,0xac,0x5b,0xf5,0x5c,0x00,0x00,0x0a,0x40,0x5d,0x08,
+ 0xb5,0x8c,0x75,0xa5,0x3d,0xfa,0x59,0x85,0xd0,0x91,0x31,0xe2,0x11,0x23,0x46,0xe4,
+ 0xda,0x97,0x7e,0xfd,0xfa,0x79,0x97,0x79,0xfd,0xf5,0xd7,0x33,0xaf,0x37,0x24,0x1b,
+ 0x60,0xf1,0xe2,0xc5,0x4a,0x17,0xda,0xa9,0x7a,0xdf,0x7f,0xff,0xfb,0xdf,0xe7,0x6e,
+ 0xfd,0xb7,0xe2,0xb9,0x00,0x80,0x75,0xe9,0xca,0x21,0xc8,0x97,0x2d,0xb6,0xd8,0x22,
+ 0x68,0xb9,0xb9,0x73,0xe7,0xd2,0x4f,0x83,0x90,0xa9,0x72,0x57,0xad,0x5a,0x15,0xcd,
+ 0x48,0x97,0x27,0x13,0x26,0x4c,0xf0,0x2e,0x53,0xcd,0xec,0x77,0x62,0x79,0xeb,0xe2,
+ 0x35,0x4a,0x97,0x59,0x4e,0x5d,0x4e,0x66,0x08,0x3c,0xe9,0xa4,0x93,0x32,0xaf,0x7f,
+ 0xfe,0xfc,0xf9,0x4a,0xcf,0x3f,0x90,0xba,0xcc,0x80,0x01,0x03,0x82,0x3c,0x11,0xad,
+ 0x7e,0x2e,0xfe,0xfe,0xf7,0xbf,0xab,0xc7,0x1e,0x7b,0xac,0xb4,0xf7,0x93,0x78,0x3e,
+ 0x98,0xf4,0x08,0x50,0x00,0xda,0x44,0x01,0x90,0xa0,0xad,0x25,0x4b,0x96,0xa8,0x5e,
+ 0xbd,0x7a,0xd1,0x4f,0x8d,0x2e,0x64,0xa3,0x66,0xcf,0x9e,0x1d,0xb4,0xbe,0xbc,0xa2,
+ 0xce,0xb3,0x0a,0xdb,0xac,0xe8,0x02,0x39,0x51,0xf0,0x9d,0xaf,0x76,0x82,0x08,0x51,
+ 0x99,0xf2,0x56,0x62,0x2b,0xb2,0xa0,0xd3,0xfa,0x22,0x0f,0x42,0x1a,0x32,0x1d,0x74,
+ 0xd6,0x6b,0xac,0x15,0xcf,0x85,0xcc,0x90,0x28,0xc7,0xab,0xac,0xc8,0x10,0x0d,0x0a,
+ 0x00,0xd4,0x1b,0x86,0x00,0x72,0x46,0x4f,0x06,0x13,0x1c,0x6d,0x5d,0x8f,0x39,0xd5,
+ 0x9b,0xa5,0x9f,0x7a,0xb6,0xb9,0xa8,0xf0,0x4c,0x59,0x11,0x41,0x2b,0x16,0x6f,0x56,
+ 0xf4,0x24,0x3a,0x91,0x22,0x90,0x86,0xf4,0x5b,0xa6,0x6e,0xce,0x4a,0x11,0xc1,0x7f,
+ 0xad,0x7c,0x2e,0x00,0x00,0x05,0xa0,0x70,0x24,0x57,0x3e,0xf4,0x41,0x4b,0x3f,0x3f,
+ 0x24,0xc4,0xe2,0x6c,0x34,0xd5,0x58,0x9e,0x32,0x04,0x10,0x52,0x25,0x2f,0xab,0x02,
+ 0xf0,0xe2,0x8b,0x2f,0x46,0x91,0xfa,0x69,0xec,0xb2,0xcb,0x2e,0x6a,0xfb,0xed,0xb7,
+ 0xcf,0xbc,0xcf,0xad,0x7a,0x2e,0x00,0x00,0x05,0xa0,0x34,0x82,0xb1,0x96,0xe8,0xef,
+ 0x56,0xeb,0xa7,0x14,0x78,0x29,0x3b,0xd5,0x9e,0xaf,0x90,0x60,0x40,0x5d,0x0b,0x3f,
+ 0xd3,0x18,0x75,0x51,0xd6,0x7f,0xab,0x9f,0x0b,0x00,0x40,0x01,0x28,0x14,0x49,0x01,
+ 0x0b,0xa1,0x6b,0xd7,0xae,0xf4,0x73,0x0d,0xcd,0x10,0x14,0x59,0x6d,0xd5,0xbe,0xa3,
+ 0x8f,0x3e,0x3a,0xe8,0x58,0x85,0xd6,0x04,0x58,0xb6,0x6c,0x59,0x34,0xa6,0x9d,0x46,
+ 0xdf,0xbe,0x7d,0xd5,0xf1,0xc7,0x1f,0x5f,0xd5,0xfe,0xb6,0xf2,0xb9,0x00,0x00,0x14,
+ 0x80,0x42,0xf1,0x55,0x65,0x8b,0x91,0x08,0x6d,0xfa,0xd9,0x3c,0x0f,0xf4,0x6a,0x15,
+ 0x36,0x49,0x6d,0x3b,0xf2,0xc8,0x23,0xbd,0xcb,0x5d,0x77,0xdd,0x75,0x91,0x70,0xf7,
+ 0x71,0xd3,0x4d,0x37,0x79,0xad,0x74,0x11,0xfe,0xa2,0x04,0xb4,0xaa,0x70,0x6d,0x76,
+ 0xe5,0x19,0xa0,0x14,0xf7,0x11,0x87,0x20,0x7f,0x16,0x2d,0x5a,0x14,0xb4,0xdc,0xc0,
+ 0x81,0x03,0xe9,0xe7,0x1a,0xf4,0x24,0x2f,0x2d,0x2d,0x74,0xa4,0x34,0xb0,0xcf,0x6a,
+ 0x97,0x58,0x09,0x3d,0x21,0x8e,0x37,0x6d,0xaf,0x48,0xf7,0x7f,0xab,0x9e,0x8b,0xdd,
+ 0x77,0xdf,0x5d,0xcd,0x9a,0x35,0xab,0xb4,0xfd,0xc9,0x5a,0xa8,0x09,0x00,0x05,0xa0,
+ 0xc9,0x05,0x63,0xb3,0x7b,0x00,0xf2,0xec,0xe7,0x7a,0xeb,0xad,0x17,0xb4,0xae,0xef,
+ 0x7d,0xef,0x7b,0x99,0xa6,0x24,0x2e,0x0b,0x32,0x15,0xef,0xa8,0x51,0xa3,0x94,0x9e,
+ 0x29,0x30,0x75,0x39,0xa9,0x09,0x90,0xa6,0x00,0x48,0x4d,0x81,0xfb,0xef,0xbf,0x3f,
+ 0x75,0x1d,0x12,0xf8,0x27,0x01,0x80,0xd5,0xd2,0x8a,0xe7,0xe2,0xcc,0x33,0xcf,0x8c,
+ 0x1a,0x00,0xfc,0x7f,0x18,0x02,0x28,0x00,0x5f,0x6e,0xb6,0x20,0x6e,0xe1,0x2e,0x5d,
+ 0xba,0xd0,0xcf,0x8c,0x42,0x27,0xa4,0x50,0x4c,0x29,0x6f,0xb4,0xce,0x9d,0xa3,0x94,
+ 0x40,0x1f,0x77,0xdf,0x7d,0xb7,0x7a,0xff,0xfd,0xf7,0x9d,0xdf,0xff,0xe1,0x0f,0x7f,
+ 0xf0,0xa6,0xe8,0xd5,0x62,0xfd,0xb7,0xc3,0xb9,0x00,0x00,0x14,0x80,0x42,0x90,0xa9,
+ 0x59,0x43,0xc6,0x50,0x9b,0xdd,0xfd,0x9f,0x77,0x3f,0xa5,0xae,0x40,0x88,0xa2,0xd0,
+ 0xcc,0x42,0x47,0x8a,0x02,0xf9,0x90,0x22,0x3c,0x32,0x4d,0xb0,0x0d,0xc9,0x7d,0x17,
+ 0x05,0x20,0x0d,0x29,0xfa,0xf3,0x99,0xcf,0x7c,0xa6,0xa6,0xfd,0x6c,0x87,0x73,0x01,
+ 0x00,0x28,0x00,0xb9,0xe3,0x9b,0x98,0x25,0x66,0xf3,0xcd,0x37,0xa7,0x9f,0x09,0xa4,
+ 0x58,0x8e,0xcc,0x59,0xef,0x43,0xd2,0xe5,0x42,0x87,0x1e,0xca,0x86,0x54,0x4f,0x94,
+ 0xb1,0x68,0x1f,0xae,0x6c,0x00,0xf1,0x0e,0xc8,0x14,0xc2,0x69,0xc8,0xf0,0x41,0xad,
+ 0xca,0x65,0x3b,0x9c,0x0b,0x00,0x40,0x01,0x68,0x98,0x60,0xac,0x65,0x8c,0xb6,0x55,
+ 0xfb,0xb9,0xd3,0x4e,0x3b,0x05,0x59,0xc8,0x22,0x08,0x9b,0x15,0x09,0x06,0xf4,0x21,
+ 0xb3,0xdd,0x49,0xa1,0x1f,0x93,0xa2,0x26,0xfe,0x69,0xd7,0x73,0x01,0x80,0x02,0x00,
+ 0x28,0x00,0x25,0xe9,0x67,0xe8,0xdc,0xf2,0xb7,0xdc,0x72,0x4b,0xd3,0x1e,0xb7,0x63,
+ 0x8e,0x39,0x26,0xa8,0x84,0xb2,0xe9,0x05,0x90,0x21,0x97,0x3b,0xee,0xb8,0x23,0xf5,
+ 0x37,0x12,0x49,0x2e,0x13,0x10,0xe5,0x41,0x3b,0x9c,0x0b,0x00,0x14,0x00,0xc8,0x95,
+ 0xd0,0x79,0xd4,0x9b,0x5d,0x01,0x28,0xa2,0x9f,0xfb,0xed,0xb7,0x5f,0xd0,0x72,0x77,
+ 0xde,0x79,0x67,0x64,0x7d,0x36,0x23,0x32,0xbe,0x7e,0xf8,0xe1,0x87,0x7b,0x97,0x93,
+ 0x38,0x80,0x64,0xbd,0x7b,0x51,0x08,0x7c,0x75,0x17,0xf2,0xb2,0xfe,0xdb,0xe5,0x5c,
+ 0x00,0xa0,0x00,0x40,0x6e,0x48,0xf4,0xb6,0xaf,0x3e,0xbb,0x30,0x74,0xe8,0xd0,0x28,
+ 0x25,0x8c,0x7e,0xae,0x8d,0xa4,0xaf,0x85,0x8c,0x3d,0x4b,0x11,0x9c,0xbf,0xfd,0xed,
+ 0x6f,0x4d,0x7b,0xfc,0x42,0x4a,0x03,0xcf,0x98,0x31,0x43,0xdd,0x73,0xcf,0x3d,0x1d,
+ 0x7f,0xfb,0x72,0xff,0xc5,0xab,0x10,0x12,0x64,0xc8,0xb9,0x00,0x00,0x14,0x80,0x02,
+ 0x90,0x39,0xc7,0x43,0x22,0xe3,0x0f,0x39,0xe4,0x10,0xfa,0x69,0xbb,0x18,0x75,0xaa,
+ 0x5c,0xa8,0xe5,0x79,0xfe,0xf9,0xe7,0x37,0xed,0x8c,0x70,0x07,0x1d,0x74,0x90,0x1a,
+ 0x36,0x6c,0x98,0x77,0x39,0xa9,0x09,0x20,0x88,0xb7,0xc5,0x37,0xe4,0x72,0xc4,0x11,
+ 0x47,0x04,0x09,0x6c,0xce,0x05,0x00,0xa0,0x00,0x14,0x80,0x2b,0x7d,0xcb,0xe4,0x94,
+ 0x53,0x4e,0xa1,0x9f,0x0e,0xce,0x38,0xe3,0x8c,0xa0,0xe5,0x44,0x20,0x5e,0x73,0xcd,
+ 0x35,0x4d,0x79,0xfc,0xa4,0x8a,0x5d,0x48,0xaa,0xde,0xad,0xb7,0xde,0x1a,0x4d,0xa5,
+ 0x5c,0xcf,0xe0,0xbf,0x76,0x3b,0x17,0x00,0x28,0x00,0x6d,0xc4,0xd2,0xa5,0x4b,0x0b,
+ 0x59,0xaf,0x58,0x69,0xf7,0xde,0x7b,0xaf,0x77,0xb9,0x2d,0xb7,0xdc,0x52,0x7d,0xfc,
+ 0xe3,0x1f,0xa7,0x9f,0x0e,0xf6,0xdc,0x73,0x4f,0xb5,0xf7,0xde,0x7b,0x07,0x2d,0x7b,
+ 0xce,0x39,0xe7,0xa8,0x77,0xdf,0x7d,0xb7,0x29,0xaf,0xc3,0x10,0x77,0xbd,0x9c,0x43,
+ 0x11,0xfe,0xd7,0x5f,0x7f,0x7d,0xea,0x72,0x9b,0x6e,0xba,0x69,0x54,0x69,0x30,0x6f,
+ 0xda,0xe5,0x5c,0x00,0xa0,0x00,0xb4,0x09,0x22,0x94,0xde,0x7a,0xeb,0xad,0xdc,0xd7,
+ 0x7b,0xde,0x79,0xe7,0x05,0x2d,0x77,0xf2,0xc9,0x27,0xd3,0x4f,0x0f,0xe7,0x9e,0x7b,
+ 0x6e,0xd0,0x72,0x12,0x19,0x2f,0x33,0xed,0x2d,0x5f,0xbe,0xbc,0xe9,0xae,0xc3,0xed,
+ 0xb6,0xdb,0x4e,0xed,0xb8,0xe3,0x8e,0xde,0xe5,0xce,0x3e,0xfb,0x6c,0x6f,0xc5,0x45,
+ 0xf1,0xb4,0x48,0xee,0x7e,0x11,0xb4,0xc3,0xb9,0x00,0x40,0x01,0x68,0x13,0x9e,0x7b,
+ 0xee,0xb9,0x28,0xc7,0x39,0xc4,0x8a,0x0d,0xe5,0xb2,0xcb,0x2e,0x53,0x0f,0x3c,0xf0,
+ 0x80,0x77,0xb9,0x9e,0x3d,0x7b,0xe6,0x1a,0xa8,0xd5,0xaa,0xfd,0x3c,0xe0,0x80,0x03,
+ 0xd4,0x6e,0xbb,0xed,0x16,0xb4,0xec,0xe3,0x8f,0x3f,0x1e,0x09,0xc0,0xd0,0x99,0x09,
+ 0xcb,0x44,0x48,0x30,0xa0,0x0f,0x19,0x4e,0x08,0xa9,0x2d,0xc0,0xb9,0x00,0x80,0xb6,
+ 0x57,0x00,0x84,0xd9,0xb3,0x67,0xab,0x83,0x0f,0x3e,0x38,0x9a,0xc8,0xa4,0x56,0x57,
+ 0xb9,0x44,0x6a,0x9f,0x75,0xd6,0x59,0xc1,0xd6,0xd4,0x06,0x1b,0x6c,0x40,0x3f,0x03,
+ 0xb8,0xf4,0xd2,0x4b,0x55,0xf7,0xee,0xdd,0x83,0x96,0xbd,0xfa,0xea,0xab,0x23,0x41,
+ 0x35,0x73,0xe6,0xcc,0x42,0x8e,0xa3,0x04,0xb8,0xf9,0xa6,0xdf,0xad,0x06,0x99,0xb2,
+ 0xb7,0x5b,0xb7,0x6e,0x35,0xad,0xe3,0xb0,0xc3,0x0e,0x0b,0x0a,0x28,0xe4,0x5c,0x00,
+ 0xc0,0x3a,0x54,0x0a,0xe6,0xe2,0x8b,0x2f,0x96,0x99,0x4b,0xbc,0xad,0x5e,0xdb,0x31,
+ 0xdb,0x46,0x1b,0x6d,0x54,0xd1,0x63,0xac,0x55,0x6d,0x53,0xd7,0x65,0xaf,0xe8,0x39,
+ 0xd7,0x83,0xb6,0xf3,0x91,0x8f,0x7c,0xa4,0xa2,0xdd,0xa3,0xf4,0x33,0x03,0xda,0xe3,
+ 0x90,0xa9,0x8f,0xa3,0x47,0x8f,0xae,0xe8,0x60,0xb4,0x8a,0x16,0x12,0x35,0x6f,0x5b,
+ 0x4f,0xcd,0x5b,0xb9,0xee,0xba,0xeb,0x2a,0x9f,0xfd,0xec,0x67,0x2b,0x3a,0xba,0xbe,
+ 0xb2,0xe1,0x86,0x1b,0x16,0x72,0x7f,0xe8,0x9a,0x00,0x55,0x9d,0xcf,0xb8,0xdd,0x75,
+ 0xd7,0x5d,0x95,0x7a,0xd0,0x0e,0xe7,0x02,0xa0,0xdd,0x68,0x7b,0x05,0x20,0x6e,0xba,
+ 0x82,0x5a,0x45,0xcf,0xd7,0x5e,0x59,0xb8,0x70,0xa1,0x77,0x5b,0x2f,0xbf,0xfc,0x72,
+ 0x45,0xa7,0x5d,0x05,0xaf,0x5b,0x8f,0xcf,0x56,0x1e,0x79,0xe4,0x91,0xba,0x1e,0xcf,
+ 0x66,0xef,0x67,0x8c,0x9e,0x41,0x2f,0x73,0x1f,0x75,0xcd,0xfd,0x48,0x69,0xd1,0x56,
+ 0x68,0xa6,0x6d,0x4d,0x9a,0x34,0xa9,0xf2,0x8b,0x5f,0xfc,0xa2,0xa2,0xab,0xe0,0x55,
+ 0xb4,0x65,0xbe,0xd6,0x3a,0x75,0x4d,0x83,0x42,0xee,0x8f,0x9b,0x6f,0xbe,0xb9,0xea,
+ 0x73,0x29,0x42,0x36,0x0f,0x01,0xcb,0xb9,0x00,0x68,0x4f,0xba,0xe2,0x03,0xf9,0x10,
+ 0x89,0x6e,0x97,0xd6,0xa7,0x4f,0x9f,0xa8,0x52,0x9b,0x8c,0x7b,0x6a,0xab,0x59,0x69,
+ 0x6b,0x23,0x72,0x9f,0x4b,0x84,0xb3,0x7e,0x28,0x45,0x11,0xd9,0x52,0xab,0x3d,0x0b,
+ 0xa7,0x9e,0x7a,0x6a,0x6e,0x25,0x5a,0xdb,0xad,0x9f,0x97,0x5f,0x7e,0x79,0xb4,0x1f,
+ 0x2f,0xbd,0xf4,0x52,0xf0,0x6f,0x24,0x2d,0xed,0xa4,0x93,0x4e,0x8a,0x02,0xe3,0x24,
+ 0xd8,0x6e,0x9f,0x7d,0xf6,0x51,0x9b,0x6c,0xb2,0x49,0x94,0x27,0xdf,0xbb,0x77,0xef,
+ 0x68,0x02,0x9b,0xb9,0x73,0xe7,0x46,0x41,0x92,0xd2,0xde,0x7e,0xfb,0xed,0xe8,0x55,
+ 0x02,0xd9,0xea,0xcd,0x27,0x3f,0xf9,0xc9,0x68,0xfa,0xdd,0x59,0xb3,0x66,0x65,0xfe,
+ 0xad,0x04,0x5a,0x4a,0xbe,0x7e,0xbd,0x68,0xf5,0x73,0x01,0xc0,0x10,0x40,0x9b,0x7a,
+ 0x00,0x8a,0x6a,0x87,0x1e,0x7a,0x68,0x6e,0x2e,0xf1,0x76,0xea,0x67,0x12,0x5d,0x15,
+ 0xaf,0xb2,0xeb,0xae,0xbb,0x36,0xb4,0x7f,0x45,0x5a,0x9d,0x3a,0xdf,0x3e,0xf3,0xfe,
+ 0xe8,0xe9,0x7a,0x2b,0x53,0xa7,0x4e,0xad,0xbb,0xc5,0xd0,0xea,0xe7,0x02,0xa0,0x9d,
+ 0x68,0xbb,0x20,0xc0,0x6f,0x7f,0xfb,0xdb,0x75,0xdb,0x96,0x54,0x52,0x13,0x4b,0xba,
+ 0xd6,0x40,0xaf,0x76,0xef,0xa7,0x94,0x14,0x7e,0xf0,0xc1,0x07,0xd5,0x51,0x47,0x1d,
+ 0xd5,0x92,0xd7,0x64,0x35,0xd9,0x00,0x12,0xdc,0x39,0x72,0xe4,0xc8,0xba,0xef,0x6b,
+ 0xab,0x9f,0x0b,0x80,0x76,0xa2,0xed,0x14,0x80,0x1f,0xff,0xf8,0xc7,0xea,0x82,0x0b,
+ 0x2e,0x28,0x7c,0x3b,0xe3,0xc6,0x8d,0x53,0xb7,0xdd,0x76,0x5b,0x94,0x12,0x47,0x3f,
+ 0x6b,0xa7,0x57,0xaf,0x5e,0x91,0x92,0x21,0x05,0x67,0x5a,0x0d,0x49,0xd7,0xdc,0x7a,
+ 0xeb,0xad,0x33,0xfd,0xa6,0x88,0xca,0x7f,0x9c,0x0b,0x00,0x14,0x80,0x96,0xe7,0x5b,
+ 0xdf,0xfa,0x96,0xd2,0x81,0x49,0xd1,0xcc,0x6c,0x79,0xa3,0x5d,0xb3,0xea,0x1b,0xdf,
+ 0xf8,0x86,0xba,0xef,0xbe,0xfb,0xa2,0x71,0x76,0xfa,0x99,0x1f,0x32,0x8e,0xfc,0xd3,
+ 0x9f,0xfe,0x54,0xe9,0xc8,0xf7,0x68,0x3c,0xb9,0x95,0xc8,0x92,0xcb,0x3f,0x7c,0xf8,
+ 0x70,0xf5,0xa9,0x4f,0x7d,0xaa,0xa1,0xfb,0xdb,0xca,0xe7,0x02,0x00,0x05,0xa0,0xc5,
+ 0x91,0x07,0xae,0x04,0x28,0xc9,0x6b,0x5e,0x55,0xd4,0xb6,0xdd,0x76,0x5b,0xf5,0xe4,
+ 0x93,0x4f,0xaa,0x0b,0x2f,0xbc,0xb0,0x61,0x96,0x7f,0x3b,0xf4,0x53,0xdc,0xdf,0xff,
+ 0xfa,0xd7,0xbf,0xa2,0x29,0x72,0x25,0x80,0xb1,0x48,0x64,0x58,0x43,0xbc,0x1c,0xa7,
+ 0x9f,0x7e,0x7a,0xa1,0xdb,0x39,0xe1,0x84,0x13,0x22,0xa5,0x2a,0x04,0x09,0xaa,0x93,
+ 0x02,0x40,0x65,0xa0,0x15,0xcf,0x05,0x40,0xdb,0x50,0x74,0x90,0x81,0x8e,0x1c,0xf6,
+ 0x06,0xf5,0x68,0x0b,0xb2,0xa1,0xc1,0x86,0x3a,0x2a,0xbe,0x32,0x7e,0xfc,0xf8,0x68,
+ 0x3f,0x54,0xc6,0x80,0x24,0x1d,0x85,0x5d,0xd1,0x63,0xe0,0x15,0x5d,0xb3,0xbd,0xb0,
+ 0x20,0xb8,0x76,0xec,0x67,0x28,0x3a,0x73,0xa1,0x72,0xe5,0x95,0x57,0x46,0xe9,0x8a,
+ 0xfd,0xfa,0xf5,0xab,0x39,0xc0,0x4c,0x2b,0x34,0x15,0x5d,0xff,0xbe,0xa2,0x4b,0x1e,
+ 0x57,0x74,0x15,0xc5,0x8a,0x8e,0x52,0xaf,0x5b,0x5f,0xf4,0xec,0x89,0x41,0xa9,0x96,
+ 0x93,0x27,0x4f,0x2e,0x65,0x40,0x51,0x2b,0x9d,0x0b,0x80,0x76,0xa0,0x93,0xfc,0xd7,
+ 0x0a,0x8a,0xcc,0x25,0x97,0x5c,0x12,0xd5,0x4d,0x0f,0x50,0x78,0x9c,0xdf,0x2d,0x59,
+ 0xb2,0x24,0x72,0x69,0xea,0xdc,0xec,0xc8,0x6a,0x96,0x94,0x38,0x49,0x47,0x5a,0xb9,
+ 0x72,0x65,0x34,0xdf,0xba,0x94,0x38,0x95,0x0a,0x77,0x23,0x46,0x8c,0x88,0x02,0xb0,
+ 0x24,0xf8,0xed,0x98,0x63,0x8e,0x89,0x5c,0xb2,0xf4,0xb3,0xf1,0xc8,0x7e,0xeb,0x3a,
+ 0x04,0xd1,0x74,0xc5,0x92,0xaa,0xf6,0xfe,0xfb,0xef,0x47,0x4d,0xaa,0xd2,0xc9,0x77,
+ 0xd2,0xb7,0x65,0xcb,0x96,0x29,0x2d,0x9c,0xa2,0xbe,0x48,0x05,0x3d,0x79,0x95,0x26,
+ 0x69,0x90,0x92,0x12,0xa9,0x23,0xdc,0xa3,0xe5,0x80,0x73,0x01,0xd0,0xea,0xa0,0x00,
+ 0x78,0x90,0x79,0xef,0x25,0x4f,0x59,0x5c,0xae,0x32,0xd6,0xdd,0x68,0xd7,0x6b,0xbb,
+ 0xf4,0x33,0x67,0x2f,0x57,0xd4,0x37,0x71,0xb1,0xc7,0xfd,0x03,0xce,0x05,0x40,0xbb,
+ 0x43,0x21,0x20,0x0f,0x52,0x68,0x45,0x8a,0x96,0xd0,0xcf,0x26,0xd6,0x72,0x75,0xec,
+ 0xc3,0xe0,0xc1,0x83,0xb9,0x98,0x39,0x17,0x00,0x90,0x7c,0xee,0x73,0x08,0x00,0x00,
+ 0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+ 0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,
+ 0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,
+ 0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x20,0x23,0x2d,0x33,0x1d,0xf0,0x56,0x5b,
+ 0x6d,0xa5,0xf6,0xdd,0x77,0xdf,0xd4,0x65,0xfa,0xf6,0xed,0x4b,0x3f,0x01,0x00,0x00,
+ 0x34,0x9d,0x2a,0x1a,0x0e,0x03,0x00,0x00,0x40,0x7b,0xc1,0x10,0x00,0x00,0x00,0x00,
+ 0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,
+ 0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,
+ 0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+ 0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+ 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,
+ 0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,
+ 0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,
+ 0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
+ 0x00,0x00,0x00,0x94,0x8a,0xae,0x1c,0x02,0x00,0x28,0x33,0x2b,0x57,0xae,0x54,0x73,
+ 0xe7,0xce,0x4d,0x5d,0xa6,0x5b,0xb7,0x6e,0x6a,0xe0,0xc0,0x81,0x1c,0x2c,0x00,0x14,
+ 0x00,0x00,0x68,0x15,0x7e,0xf7,0xbb,0xdf,0xa9,0x33,0xcf,0x3c,0x33,0x75,0x99,0xee,
+ 0xdd,0xbb,0xab,0x65,0xcb,0x96,0x71,0xb0,0x00,0x32,0xc0,0x10,0x00,0x00,0x94,0x9a,
+ 0xe5,0xcb,0x97,0xe7,0xb2,0x0c,0x00,0xa0,0x00,0x00,0x00,0x00,0xa0,0x00,0x70,0x08,
+ 0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,
+ 0x00,0x00,0x00,0xa0,0x25,0x20,0x0d,0x10,0x00,0xa0,0x4d,0x59,0xb0,0x60,0x81,0x7a,
+ 0xf3,0xcd,0x37,0xa3,0x36,0x65,0xca,0x94,0xe8,0x75,0xda,0xb4,0x69,0xea,0xdc,0x73,
+ 0xcf,0x55,0xdb,0x6d,0xb7,0x1d,0x07,0x08,0x05,0x00,0x00,0x00,0x5a,0x81,0xf9,0xf3,
+ 0xe7,0xab,0x93,0x4f,0x3e,0xb9,0x43,0xe0,0xcf,0x9e,0x3d,0xdb,0xba,0xdc,0xe1,0x87,
+ 0x1f,0x8e,0x02,0x80,0x02,0x00,0x00,0xd0,0x58,0xc6,0x8f,0x1f,0xaf,0x36,0xd8,0x60,
+ 0x83,0xd4,0x65,0xfa,0xf6,0xed,0xcb,0x81,0x0a,0x60,0xc9,0x92,0x25,0xea,0x86,0x1b,
+ 0x6e,0xe0,0x40,0x00,0x0a,0x00,0x00,0x94,0x9f,0xd1,0xa3,0x47,0xab,0x13,0x4f,0x3c,
+ 0x91,0x03,0x01,0x90,0x33,0x04,0x01,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,
+ 0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,
+ 0x34,0x29,0x64,0x01,0x00,0x34,0x88,0x79,0xf3,0xe6,0x75,0x14,0x61,0x79,0xeb,0xad,
+ 0xb7,0xd4,0xea,0xd5,0xab,0xd5,0xd0,0xa1,0x43,0xd5,0xf0,0xe1,0xc3,0xd5,0xb0,0x61,
+ 0xc3,0xd4,0xa8,0x51,0xa3,0x54,0x9f,0x3e,0x7d,0x9a,0xba,0x8f,0x92,0x76,0x36,0x79,
+ 0xf2,0xe4,0xa8,0x49,0xde,0xf9,0xaa,0x55,0xab,0xd4,0x7a,0xeb,0xad,0x17,0xb5,0xfd,
+ 0xf7,0xdf,0x5f,0x75,0xef,0xde,0xbd,0x6d,0xce,0x75,0x7c,0x1c,0xde,0x7e,0xfb,0x6d,
+ 0xd5,0xb9,0x73,0x67,0xb5,0xfe,0xfa,0xeb,0x47,0xe9,0x8d,0x5b,0x6c,0xb1,0x45,0x74,
+ 0xae,0xc1,0xcf,0xa2,0x45,0x8b,0xd4,0xd4,0xa9,0x53,0xd5,0xf4,0xe9,0xd3,0xd5,0xbb,
+ 0xef,0xbe,0x1b,0xbd,0x2e,0x5c,0xb8,0x50,0x0d,0x19,0x32,0x24,0xba,0x67,0xa4,0x8d,
+ 0x18,0x31,0x42,0x6d,0xb2,0xc9,0x26,0xaa,0x53,0xa7,0x4e,0xdc,0x3b,0x28,0x00,0x00,
+ 0xb5,0x21,0x37,0xdf,0x03,0x0f,0x3c,0x90,0xba,0x8c,0x08,0xea,0x63,0x8f,0x3d,0x36,
+ 0x75,0x99,0x95,0x2b,0x57,0xaa,0x1b,0x6f,0xbc,0x51,0xfd,0xee,0x77,0xbf,0x53,0x2f,
+ 0xbc,0xf0,0x82,0xfa,0xe0,0x83,0x0f,0xd2,0x6f,0xce,0xae,0x5d,0xd5,0xbe,0xfb,0xee,
+ 0xab,0x8e,0x3a,0xea,0x28,0x75,0xc4,0x11,0x47,0x78,0x73,0xe1,0xcb,0xd2,0xcf,0xd7,
+ 0x5f,0x7f,0x5d,0xfd,0xec,0x67,0x3f,0x53,0x7f,0xff,0xfb,0xdf,0xa3,0x07,0x74,0xa5,
+ 0x52,0xb1,0x2e,0xf7,0xce,0x3b,0xef,0x44,0x0f,0xeb,0x7a,0xed,0x57,0x3d,0xb7,0x23,
+ 0x0f,0xeb,0xdb,0x6e,0xbb,0x4d,0x5d,0x76,0xd9,0x65,0xea,0xd9,0x67,0x9f,0x55,0x73,
+ 0xe7,0xce,0x4d,0x5d,0x7e,0xab,0xad,0xb6,0x52,0x07,0x1f,0x7c,0xb0,0xfa,0xea,0x57,
+ 0xbf,0x1a,0x09,0xaf,0x3c,0x84,0xc7,0x5f,0xff,0xfa,0xd7,0x75,0x8e,0xfd,0xcc,0x99,
+ 0x33,0x83,0x7e,0x7f,0xe7,0x9d,0x77,0xaa,0x65,0xcb,0x96,0x65,0xda,0xe6,0xae,0xbb,
+ 0xee,0xaa,0xb6,0xd9,0x66,0x9b,0xdc,0xaf,0x4b,0x29,0x56,0x74,0xeb,0xad,0xb7,0xaa,
+ 0xeb,0xaf,0xbf,0x5e,0xdd,0x77,0xdf,0x7d,0x6a,0xc5,0x8a,0x15,0xde,0xdf,0x88,0x42,
+ 0x25,0xf7,0xcc,0x91,0x47,0x1e,0xa9,0xf6,0xd8,0x63,0x0f,0xd5,0xa5,0x4b,0x97,0xb6,
+ 0xbc,0x77,0xbc,0x54,0x00,0x20,0x95,0x8b,0x2f,0xbe,0x58,0xee,0x42,0x6f,0x73,0xa1,
+ 0x1f,0x60,0x95,0x9f,0xfc,0xe4,0x27,0x95,0x91,0x23,0x47,0x06,0xad,0xc7,0xd6,0xb4,
+ 0xc5,0x58,0x39,0xfe,0xf8,0xe3,0x2b,0xfa,0xa1,0x50,0xda,0x7e,0x3e,0xf5,0xd4,0x53,
+ 0x15,0xad,0xac,0x44,0xfb,0x1a,0xb2,0x1e,0xfd,0x10,0xab,0xcb,0x7e,0xd5,0xab,0xff,
+ 0xf1,0xb9,0xbe,0xe8,0xa2,0x8b,0x2a,0x1b,0x6d,0xb4,0x51,0x55,0xe7,0xb9,0x5b,0xb7,
+ 0x6e,0x95,0xaf,0x7c,0xe5,0x2b,0x15,0x2d,0xa8,0x6b,0xea,0xcb,0x33,0xcf,0x3c,0x53,
+ 0xf5,0xb5,0x56,0x6d,0x3b,0xeb,0xac,0xb3,0x72,0xbd,0x1e,0x27,0x4e,0x9c,0x58,0xd1,
+ 0x15,0x09,0x2b,0x5a,0x11,0xae,0x69,0xbf,0x36,0xde,0x78,0xe3,0xca,0x1d,0x77,0xdc,
+ 0x51,0xea,0x67,0x44,0x51,0xf7,0x8e,0x0f,0x62,0x00,0x00,0x0a,0xe4,0xe6,0x9b,0x6f,
+ 0x8e,0x0a,0xd9,0x7c,0xeb,0x5b,0xdf,0x8a,0x6a,0xac,0x57,0x8b,0x0c,0x0f,0x5c,0x7b,
+ 0xed,0xb5,0x6a,0xcb,0x2d,0xb7,0x8c,0x3c,0x08,0xf2,0x77,0x59,0x90,0x7d,0x39,0xfd,
+ 0xf4,0xd3,0x23,0x0b,0x50,0x3c,0x1c,0x65,0xda,0xb7,0x7a,0xf2,0xe7,0x3f,0xff,0x39,
+ 0x3a,0xd7,0xdf,0xf8,0xc6,0x37,0xa2,0x21,0x9d,0x6a,0x10,0xeb,0x56,0xbc,0x06,0xbb,
+ 0xec,0xb2,0x8b,0x7a,0xf9,0xe5,0x97,0xdb,0xf2,0x38,0x8a,0xe7,0xe1,0xfb,0xdf,0xff,
+ 0x7e,0xe4,0x4d,0x10,0xcb,0x5f,0x3c,0x67,0xb5,0x20,0x43,0x6c,0x87,0x1e,0x7a,0x68,
+ 0xe4,0x49,0x13,0xcb,0xb9,0x4c,0x34,0xfa,0xde,0x41,0x01,0x00,0x28,0x88,0x4b,0x2e,
+ 0xb9,0x44,0x1d,0x7d,0xf4,0xd1,0xd1,0xb8,0x65,0x5e,0xc8,0x58,0xb2,0xb6,0x10,0xa3,
+ 0x07,0x5a,0x56,0x17,0x6d,0x51,0x0f,0x6b,0x71,0x6b,0x8a,0xd0,0x6a,0x57,0x44,0x68,
+ 0x8b,0xeb,0x5e,0xaa,0x15,0xe6,0x75,0xae,0x45,0x68,0x8d,0x1b,0x37,0x4e,0x3d,0xfe,
+ 0xf8,0xe3,0x6d,0x75,0x2c,0x9f,0x7b,0xee,0xb9,0x48,0xf0,0xff,0xe0,0x07,0x3f,0xc8,
+ 0xfd,0xfa,0xbe,0xe9,0xa6,0x9b,0xd4,0x0e,0x3b,0xec,0xa0,0xfe,0xfd,0xef,0x7f,0x97,
+ 0x46,0xd1,0x69,0xf4,0xbd,0x83,0x02,0x00,0x90,0x33,0x62,0xb1,0x9c,0x76,0xda,0x69,
+ 0xea,0xec,0xb3,0xcf,0x2e,0x4c,0xa3,0xbf,0xeb,0xae,0xbb,0x22,0x8b,0x66,0xf9,0xf2,
+ 0xe5,0x0d,0xeb,0xa7,0x4c,0x2c,0x73,0xc8,0x21,0x87,0xb4,0x75,0x6d,0x79,0xb1,0x28,
+ 0xf7,0xde,0x7b,0x6f,0xf5,0xdb,0xdf,0xfe,0x36,0xf7,0x75,0x8b,0xb2,0x27,0x0a,0x64,
+ 0xe8,0xb8,0x7d,0xb3,0xf3,0xc4,0x13,0x4f,0xa8,0xfd,0xf6,0xdb,0x4f,0x4d,0x9a,0x34,
+ 0xa9,0xb0,0x6d,0xcc,0x9a,0x35,0x4b,0x1d,0x70,0xc0,0x01,0xea,0xb5,0xd7,0x5e,0x6b,
+ 0x68,0x5f,0xcb,0x72,0xef,0xa0,0x00,0x00,0xe4,0xcc,0x67,0x3f,0xfb,0x59,0x75,0xc5,
+ 0x15,0x57,0x14,0xbe,0x1d,0x09,0xd4,0x3a,0xe6,0x98,0x63,0x82,0x82,0xa2,0xf2,0x46,
+ 0x82,0xdc,0x24,0x68,0xcd,0x17,0xf8,0xd4,0xca,0xbc,0xf1,0xc6,0x1b,0x6a,0xa7,0x9d,
+ 0x76,0x2a,0xd4,0x4a,0x97,0x48,0x77,0xb9,0x9e,0x5a,0x9d,0x87,0x1f,0x7e,0x58,0x1d,
+ 0x74,0xd0,0x41,0x91,0xd2,0x53,0x34,0xef,0xbd,0xf7,0x5e,0x14,0x45,0x2f,0x5e,0x96,
+ 0x46,0x50,0xa6,0x7b,0x07,0x05,0x00,0x20,0x47,0xae,0xbe,0xfa,0x6a,0x75,0xdd,0x75,
+ 0xd7,0xd5,0x6d,0x7b,0x32,0x46,0xfa,0xa3,0x1f,0xfd,0xa8,0xee,0xfd,0xfc,0xf9,0xcf,
+ 0x7f,0xde,0x76,0xee,0x69,0xd3,0x82,0x3b,0xec,0xb0,0xc3,0x22,0x61,0x52,0x34,0xf7,
+ 0xdc,0x73,0x8f,0xfa,0xc7,0x3f,0xfe,0xd1,0xb2,0xc7,0xf2,0xd1,0x47,0x1f,0x8d,0xac,
+ 0xe1,0x05,0x0b,0x16,0x04,0xff,0x46,0x07,0x4b,0x46,0xf1,0x16,0x3b,0xee,0xb8,0xa3,
+ 0xda,0x7a,0xeb,0xad,0xa3,0x34,0xc0,0x2c,0x88,0xe7,0x46,0xa6,0x45,0x6e,0x04,0x65,
+ 0xba,0x77,0x48,0x03,0x04,0xc8,0x09,0x09,0xf2,0x3b,0xf3,0xcc,0x33,0xb3,0x69,0xe0,
+ 0x3a,0x1f,0xbc,0xd6,0x61,0x82,0x0b,0x2f,0xbc,0x50,0x1d,0x77,0xdc,0x71,0x51,0x2a,
+ 0x59,0x3d,0xd0,0xd1,0xd9,0xea,0xbc,0xf3,0xce,0xcb,0xf4,0x1b,0xc9,0x59,0x6e,0xe4,
+ 0x70,0x45,0x9e,0xc8,0xf9,0xd2,0x19,0x19,0xea,0x95,0x57,0x5e,0xc9,0xf4,0x3b,0xc9,
+ 0xfb,0x97,0xdf,0x4a,0x5a,0x5b,0x35,0xe7,0xf8,0xc0,0x03,0x0f,0x0c,0x5e,0x7e,0xd0,
+ 0xa0,0x41,0x6a,0xec,0xd8,0xb1,0xeb,0xa4,0x91,0x2d,0x5e,0xbc,0x38,0x4a,0x2f,0xf3,
+ 0xd1,0xbb,0x77,0xef,0xa8,0x1e,0x45,0x16,0x74,0xe6,0x43,0xe6,0x7e,0x89,0xc5,0x7f,
+ 0xc2,0x09,0x27,0x44,0xfb,0xe5,0x43,0xf2,0xfa,0xe5,0xb8,0xcb,0xb8,0xb9,0xb8,0xf1,
+ 0x65,0x1f,0x93,0x48,0x0a,0x9d,0x28,0xc4,0xbf,0xfa,0xd5,0xaf,0x82,0x82,0xfd,0xee,
+ 0xbf,0xff,0xfe,0x28,0xb0,0x56,0xd6,0x59,0x2f,0x4a,0x77,0xef,0x90,0xe4,0x05,0x90,
+ 0x4f,0x8a,0x8f,0x76,0x61,0x7a,0x97,0xd1,0xf9,0xc9,0x95,0xf3,0xcf,0x3f,0xbf,0xa2,
+ 0x2d,0xba,0x8a,0x2e,0xf0,0x51,0xd1,0xf1,0x02,0xd1,0x36,0x96,0x2e,0x5d,0x5a,0xd1,
+ 0x02,0xa5,0x72,0xc1,0x05,0x17,0x54,0x74,0x10,0x54,0xe6,0x54,0xa7,0x3d,0xf7,0xdc,
+ 0xb3,0xa2,0x85,0x4b,0x5d,0xfa,0x29,0xdb,0xf2,0x2d,0xb3,0xd7,0x5e,0x7b,0x55,0xf4,
+ 0xb8,0x78,0x45,0xe7,0x6d,0x77,0xa4,0x2c,0xe9,0x5c,0xf8,0xca,0x83,0x0f,0x3e,0x58,
+ 0xf9,0xc5,0x2f,0x7e,0x51,0x39,0xe7,0x9c,0x73,0x2a,0xfa,0xa1,0xdf,0x94,0x69,0x80,
+ 0x3a,0xb6,0x23,0x68,0x39,0x9d,0xb1,0x51,0xb9,0xf4,0xd2,0x4b,0x2b,0xda,0xbd,0x5d,
+ 0xd1,0x63,0xcf,0x1d,0xdb,0xd1,0x6e,0xfd,0x8a,0xce,0xf3,0xae,0x6c,0xbf,0xfd,0xf6,
+ 0x99,0xce,0xb1,0x16,0x70,0x35,0xf7,0x71,0xc6,0x8c,0x19,0x41,0xdb,0xd2,0x19,0x0d,
+ 0x75,0xb9,0xb7,0x74,0xe0,0x64,0xd0,0xfe,0xe8,0xe0,0xbd,0xca,0xd3,0x4f,0x3f,0x1d,
+ 0xb4,0x4e,0xed,0x49,0xa8,0x9c,0x71,0xc6,0x19,0x41,0xeb,0xd5,0x4a,0x4e,0x45,0x2b,
+ 0x21,0x75,0xbb,0x76,0xea,0x7d,0xef,0xf8,0x40,0x01,0x00,0xc8,0xe9,0xe6,0x4e,0x6b,
+ 0xda,0x7a,0xab,0xdc,0x72,0xcb,0x2d,0x1d,0x02,0xdf,0x87,0x4e,0xf5,0xab,0xe8,0xc2,
+ 0x21,0x99,0xb6,0xa1,0x87,0x1f,0x1a,0xde,0x4f,0x1d,0xb9,0x5e,0xb9,0xf7,0xde,0x7b,
+ 0x4b,0x95,0x63,0x5d,0xcf,0xfe,0x4b,0xd3,0x85,0x7c,0x2a,0x7f,0xfa,0xd3,0x9f,0xbc,
+ 0xe7,0x5a,0x57,0xb0,0x8b,0x72,0xbf,0x43,0xd7,0xab,0xe3,0x4a,0x5a,0x4a,0x01,0xd0,
+ 0x01,0x70,0x41,0xfb,0xa2,0x0b,0xf9,0x54,0x25,0xa4,0xbf,0xf3,0x9d,0xef,0x04,0xad,
+ 0x5f,0xa7,0x1c,0x96,0xe2,0xda,0x29,0xe2,0xde,0xa1,0x0e,0x00,0x40,0x03,0x91,0xb1,
+ 0x49,0xc9,0xef,0x95,0x71,0x5c,0x5d,0xd4,0x24,0xb8,0x22,0x99,0x64,0x11,0x48,0x05,
+ 0x39,0x71,0x1b,0x87,0xd2,0xc8,0x74,0xa2,0xfe,0xfd,0xfb,0x47,0x95,0xef,0xfe,0xf9,
+ 0xcf,0x7f,0x46,0x01,0x56,0xed,0x88,0x8c,0x4b,0xff,0xfa,0xd7,0xbf,0x8e,0x22,0xcc,
+ 0x3f,0xf7,0xb9,0xcf,0x79,0xcf,0xb5,0x54,0x86,0x93,0xea,0x76,0x52,0xdb,0x21,0x84,
+ 0x87,0x1e,0x7a,0xa8,0x65,0x8e,0x95,0x94,0xef,0x95,0x6b,0xdc,0x87,0x54,0x45,0x94,
+ 0x8c,0x17,0xb9,0xbe,0xb2,0x22,0xb1,0x31,0x12,0xa7,0xe1,0xe3,0xaa,0xab,0xae,0x6a,
+ 0xe8,0xb1,0x68,0xe4,0xbd,0x83,0x02,0x00,0x50,0x10,0x12,0xe9,0xfb,0xd2,0x4b,0x2f,
+ 0x45,0xe5,0x48,0xab,0x41,0x6a,0xc4,0x6b,0xaf,0x81,0xea,0xd1,0xa3,0x47,0xd0,0xf2,
+ 0x12,0x58,0x94,0x75,0x5c,0x3a,0x0f,0xa4,0x36,0xb9,0x44,0x34,0x87,0x3c,0x6c,0x5b,
+ 0x95,0x7e,0xfd,0xfa,0x45,0x59,0x19,0xda,0xf5,0x1c,0x95,0x70,0x0e,0x45,0xc6,0xb5,
+ 0xbf,0xf8,0xc5,0x2f,0x06,0x2d,0x2b,0xe5,0xa3,0x5b,0x85,0x3f,0xfe,0xf1,0x8f,0x51,
+ 0x4a,0x9e,0xef,0xd8,0xfc,0xe1,0x0f,0x7f,0x50,0x7d,0xfb,0xf6,0xad,0x7a,0x3b,0x12,
+ 0x70,0xe7,0xab,0x99,0x2f,0xb5,0xf6,0x45,0xf8,0x36,0x82,0x46,0xdf,0x3b,0x28,0x00,
+ 0x00,0x05,0xa0,0xcb,0xc1,0x46,0x96,0x4b,0xd6,0x40,0x2a,0x13,0x29,0x06,0x23,0x55,
+ 0xd1,0x42,0xb9,0xf2,0xca,0x2b,0xeb,0xda,0x4f,0x5d,0xde,0x58,0x3d,0xf2,0xc8,0x23,
+ 0x51,0x34,0x76,0xbb,0x22,0x35,0xd9,0xe5,0x18,0x64,0x09,0xd2,0x4b,0x22,0xde,0x82,
+ 0x10,0xa5,0xa1,0x9a,0xe0,0xc1,0x32,0x22,0x43,0xcf,0xe2,0x29,0xf1,0x21,0xb5,0xfc,
+ 0xf5,0x78,0x78,0x4d,0xdb,0x92,0x40,0xc8,0xf1,0xe3,0xc7,0x97,0xd2,0x0b,0x50,0x86,
+ 0x7b,0x07,0x05,0x00,0x20,0x67,0xe4,0xe1,0xf6,0xf5,0xaf,0x7f,0x3d,0xb7,0xf5,0x89,
+ 0x55,0x19,0x3a,0x11,0x90,0xa4,0x21,0x56,0x1c,0x13,0x88,0xe4,0x8d,0xcc,0xbc,0x26,
+ 0x96,0x53,0xa8,0x0b,0xbb,0x15,0x91,0xbe,0x4b,0x01,0x1b,0x1d,0xd0,0x57,0xf5,0x3a,
+ 0x64,0x06,0xc8,0x10,0x21,0x30,0x67,0xce,0x9c,0x96,0x38,0x66,0xe2,0x29,0x91,0x68,
+ 0xf8,0x90,0xeb,0x3e,0x0f,0x42,0x26,0x6f,0x92,0x82,0x3c,0xf5,0xba,0x6f,0xca,0x74,
+ 0xef,0xa0,0x00,0x00,0xe4,0xc8,0x6f,0x7e,0xf3,0x9b,0xdc,0x1e,0x5c,0x31,0x32,0x56,
+ 0xfc,0xb5,0xaf,0x7d,0x2d,0x68,0x59,0xc9,0x4b,0x97,0x02,0x35,0xf5,0xe0,0xf7,0xbf,
+ 0xff,0x7d,0x94,0x8b,0xdd,0xae,0x0c,0x1c,0x38,0x50,0xe9,0x49,0x66,0x72,0x99,0xca,
+ 0x57,0x04,0x82,0x0f,0x49,0x05,0x93,0x59,0xfe,0x9a,0x1d,0x9d,0x19,0xe1,0x5d,0x66,
+ 0xb3,0xcd,0x36,0x53,0xfb,0xec,0xb3,0x4f,0x2e,0xdb,0xfb,0xc4,0x27,0x3e,0xa1,0x7a,
+ 0xf6,0xec,0xe9,0x55,0xae,0x64,0x46,0xbf,0x7a,0x51,0x96,0x7b,0x07,0x05,0x00,0x20,
+ 0x27,0x24,0x08,0x4f,0x26,0xf6,0x28,0x02,0xa9,0xf8,0x17,0x8a,0x9e,0x09,0xae,0xf0,
+ 0xbe,0x9e,0x72,0xca,0x29,0xea,0x53,0x9f,0xfa,0x54,0xdb,0x9e,0x6b,0x19,0x9f,0x96,
+ 0xc9,0x7f,0x36,0xdd,0x74,0xd3,0x5c,0xd6,0x17,0x1a,0xec,0x59,0x4f,0x2b,0xb5,0x08,
+ 0x74,0xba,0xab,0xd2,0xe9,0x6c,0xde,0xe5,0xaa,0x1d,0x4e,0xb1,0x21,0x31,0x00,0x21,
+ 0x35,0x32,0x9e,0x7f,0xfe,0xf9,0xba,0x1c,0x83,0x32,0xdd,0x3b,0x28,0x00,0x00,0x39,
+ 0xf1,0xe5,0x2f,0x7f,0xb9,0xb0,0x75,0xeb,0x29,0x4d,0x83,0xe7,0x5a,0x2f,0x5a,0x01,
+ 0x18,0x33,0x66,0x8c,0xd2,0xf9,0xc8,0x6d,0x7d,0xae,0xbf,0xfb,0xdd,0xef,0xe6,0xfa,
+ 0x10,0x0f,0x1d,0xe2,0x69,0x76,0x74,0x2e,0x7f,0x50,0x51,0x9b,0xbc,0xa3,0xe1,0x43,
+ 0xee,0x9d,0x7a,0x28,0x00,0x65,0xbb,0x77,0x50,0x00,0x00,0x9a,0x04,0xc9,0x2a,0x28,
+ 0x83,0x02,0xa0,0x73,0xdc,0x6b,0x8a,0xcc,0x6e,0x76,0xa4,0x6c,0xed,0xf7,0xbe,0xf7,
+ 0xbd,0x5c,0xd7,0xd9,0x2e,0x0a,0x80,0x94,0xfd,0x0d,0x61,0xb7,0xdd,0x76,0xcb,0x5d,
+ 0xf0,0x96,0x41,0x01,0x28,0xdb,0xbd,0x83,0x02,0x00,0xd0,0x24,0x84,0x7a,0x00,0x8a,
+ 0x4e,0x05,0xd4,0xd5,0xcc,0xda,0xfa,0x3c,0xfc,0xe5,0x2f,0x7f,0x89,0x4a,0x38,0xe7,
+ 0x89,0x6f,0x8c,0xba,0x9d,0x14,0x00,0x39,0x16,0x92,0x59,0x91,0x27,0x92,0xa6,0xe9,
+ 0x43,0x4a,0x09,0x17,0x4d,0xd9,0xee,0x1d,0xe6,0x02,0x00,0x68,0x12,0xa4,0x2e,0x40,
+ 0x08,0xba,0x6c,0x28,0x07,0xab,0x40,0xa4,0xce,0x3e,0x54,0xc7,0x53,0x4f,0x3d,0xe5,
+ 0x5d,0x46,0x66,0xcb,0x93,0xd9,0x01,0xf3,0x64,0xc2,0x84,0x09,0xde,0x65,0xea,0x31,
+ 0x13,0x61,0xd9,0x40,0x01,0x00,0x68,0x31,0x05,0x40,0xa6,0x07,0x96,0x68,0xf1,0x5e,
+ 0xbd,0x7a,0x71,0xd0,0xa0,0x34,0xe8,0xd2,0xc8,0x41,0xb5,0x0c,0xe4,0xfa,0xcd,0x2b,
+ 0x03,0x20,0x0b,0x32,0xc3,0x63,0xbb,0xc1,0x10,0x00,0x40,0x13,0x59,0x9e,0xa1,0x55,
+ 0x01,0xdb,0xd1,0x9a,0x81,0x72,0xf3,0xc1,0x07,0x1f,0x94,0x3a,0x8b,0x41,0x66,0x24,
+ 0x14,0xef,0x03,0x0a,0x00,0x00,0x94,0x12,0xa9,0x09,0x10,0xfa,0xb0,0x05,0x28,0x13,
+ 0xcd,0x50,0xc9,0xb0,0xdd,0xbc,0x00,0x28,0x00,0x00,0x2d,0xa8,0x00,0xe8,0x29,0x51,
+ 0x39,0x58,0x50,0x2a,0x9a,0xa1,0x92,0x61,0xbb,0xdd,0x37,0x28,0x00,0x00,0x4d,0x44,
+ 0xef,0xde,0xbd,0x83,0x96,0xcb,0x32,0x21,0x0d,0x40,0x3d,0x68,0x86,0xe0,0xd4,0xd5,
+ 0xab,0x57,0xa3,0x00,0x00,0x40,0x39,0x91,0x00,0xa9,0x10,0x06,0x0c,0x18,0xc0,0xc1,
+ 0x02,0x84,0x6b,0x46,0xda,0x4d,0x71,0x46,0x01,0x00,0x68,0x22,0x16,0x2d,0x5a,0x14,
+ 0xb4,0x9c,0xd4,0xa9,0x07,0x28,0x13,0x83,0x07,0x0f,0x46,0x01,0x40,0x01,0x00,0x80,
+ 0xa2,0x15,0x00,0x3c,0x00,0x50,0x36,0xd6,0x5b,0x6f,0xbd,0xa0,0xe5,0xa4,0xca,0xa2,
+ 0x64,0x0b,0x34,0xa2,0x85,0x4c,0xca,0x84,0x02,0x00,0x00,0x0d,0x41,0x52,0x95,0x7c,
+ 0x48,0xd5,0xb3,0x2e,0x5d,0xba,0x70,0xb0,0xa0,0x29,0x15,0x80,0x90,0xa2,0x3d,0x80,
+ 0x02,0x00,0xd0,0x56,0xc8,0x54,0xbf,0x21,0xe3,0xa8,0xb8,0xff,0xa1,0x8c,0x48,0x1d,
+ 0x8b,0x10,0xc5,0x14,0x05,0x00,0x05,0x00,0x00,0x0c,0x5e,0x7b,0xed,0xb5,0xa0,0xe5,
+ 0x36,0xdf,0x7c,0x73,0x0e,0x16,0x94,0x0e,0x99,0x42,0x79,0xc8,0x90,0x21,0xde,0xe5,
+ 0x26,0x4e,0x9c,0x18,0x3c,0xd4,0x05,0x28,0x00,0x00,0x28,0x00,0x09,0x76,0xd9,0x65,
+ 0x17,0x0e,0x16,0x94,0x92,0x9d,0x76,0xda,0xc9,0xbb,0x8c,0x94,0x0c,0xbe,0xfb,0xee,
+ 0xbb,0x39,0x58,0x28,0x00,0x00,0x80,0x02,0x00,0xad,0xc2,0xfe,0xfb,0xef,0x1f,0xb4,
+ 0xdc,0x2d,0xb7,0xdc,0xc2,0xc1,0x42,0x01,0x00,0x80,0x98,0xd0,0xb9,0xd4,0x51,0x00,
+ 0xa0,0xac,0xec,0xb7,0xdf,0x7e,0x41,0xcb,0xdd,0x79,0xe7,0x9d,0x91,0x27,0x00,0x50,
+ 0x00,0x00,0xda,0x9e,0xf7,0xdf,0x7f,0x5f,0x3d,0xfd,0xf4,0xd3,0xde,0xe5,0x86,0x0e,
+ 0x1d,0xaa,0x46,0x8d,0x1a,0xc5,0x01,0x83,0x9a,0x58,0xb6,0x6c,0x59,0x21,0xeb,0xdd,
+ 0x7e,0xfb,0xed,0x83,0xe2,0x00,0xa4,0x6c,0xf0,0xdf,0xfe,0xf6,0x37,0x4e,0x04,0x0a,
+ 0x00,0x00,0xfc,0xfd,0xef,0x7f,0x0f,0xca,0x00,0x38,0xe4,0x90,0x43,0x38,0x58,0x50,
+ 0x33,0xef,0xbe,0xfb,0x6e,0x31,0x02,0xa7,0x73,0xe7,0x60,0x2f,0xc0,0xf9,0xe7,0x9f,
+ 0xdf,0x76,0xb3,0xf3,0xa1,0x00,0x00,0xc0,0x3a,0xfc,0xe5,0x2f,0x7f,0x09,0x5a,0xee,
+ 0x94,0x53,0x4e,0xe1,0x60,0x81,0x93,0xd0,0xfa,0x10,0xd3,0xa6,0x4d,0x2b,0x6c,0x1f,
+ 0xce,0x38,0xe3,0x8c,0xa0,0xe5,0x24,0xe6,0xe5,0x9a,0x6b,0xae,0xe1,0xa4,0xa1,0x00,
+ 0x00,0x94,0x9f,0xa5,0x4b,0x97,0x16,0xb2,0x5e,0x19,0xfb,0xbf,0xf7,0xde,0x7b,0xbd,
+ 0xcb,0x6d,0xb9,0xe5,0x96,0xea,0xe3,0x1f,0xff,0x38,0x27,0x02,0x9c,0x48,0x8d,0x08,
+ 0x49,0xc7,0xf3,0xf1,0xce,0x3b,0xef,0x14,0xb6,0x0f,0x7b,0xee,0xb9,0xa7,0xda,0x7b,
+ 0xef,0xbd,0x83,0x96,0x3d,0xe7,0x9c,0x73,0x0a,0xf3,0x46,0x00,0x0a,0x00,0x40,0x6e,
+ 0x88,0xf0,0x7d,0xeb,0xad,0xb7,0x72,0x5f,0xef,0x79,0xe7,0x9d,0x17,0xb4,0xdc,0xc9,
+ 0x27,0x9f,0xcc,0x49,0x80,0x54,0xa4,0xd6,0xbd,0x14,0xe4,0xf1,0xf1,0xe6,0x9b,0x6f,
+ 0x16,0xba,0x1f,0xe7,0x9e,0x7b,0x6e,0xd0,0x72,0x52,0xfc,0xea,0xe8,0xa3,0x8f,0x56,
+ 0xcb,0x97,0x2f,0xe7,0xe4,0xa1,0x00,0x00,0x94,0x97,0xe7,0x9e,0x7b,0x2e,0xca,0x73,
+ 0x0e,0xb1,0xd6,0x43,0xb9,0xec,0xb2,0xcb,0xd4,0x03,0x0f,0x3c,0xe0,0x5d,0xae,0x67,
+ 0xcf,0x9e,0xea,0x73,0x9f,0xfb,0x1c,0x27,0x01,0xbc,0xac,0xbf,0xfe,0xfa,0xde,0x65,
+ 0xfe,0xfd,0xef,0x7f,0xab,0x27,0x9f,0x7c,0xb2,0xb0,0x7d,0x38,0xe0,0x80,0x03,0xd4,
+ 0x6e,0xbb,0xed,0x16,0xb4,0xec,0xe3,0x8f,0x3f,0x1e,0x0d,0x6d,0x85,0xce,0x84,0x09,
+ 0x28,0x00,0x00,0x0d,0x61,0xf6,0xec,0xd9,0xea,0xe0,0x83,0x0f,0x56,0xdf,0xff,0xfe,
+ 0xf7,0x6b,0x1e,0x12,0xb8,0xe7,0x9e,0x7b,0xd4,0x59,0x67,0x9d,0x15,0x6c,0x51,0x6d,
+ 0xb0,0xc1,0x06,0x9c,0x00,0xf0,0xb2,0xd9,0x66,0x9b,0x05,0x2d,0xf7,0xa3,0x1f,0xfd,
+ 0xa8,0xd0,0xfd,0xb8,0xf4,0xd2,0x4b,0x55,0xf7,0xee,0xdd,0x83,0x96,0xbd,0xfa,0xea,
+ 0xab,0x23,0xa5,0x61,0xe6,0xcc,0x99,0x85,0xec,0x8b,0x04,0x1b,0x4a,0xe6,0x01,0x0a,
+ 0x00,0x00,0xd4,0xfc,0x30,0xf9,0xc1,0x0f,0x7e,0x10,0x8d,0xc9,0xdf,0x70,0xc3,0x0d,
+ 0x55,0xad,0xe3,0x8f,0x7f,0xfc,0xa3,0x3a,0xea,0xa8,0xa3,0x82,0x72,0xa1,0x3f,0xf2,
+ 0x91,0x8f,0xa8,0xaf,0x7f,0xfd,0xeb,0x1c,0x78,0x08,0x22,0x34,0x53,0xe4,0x8e,0x3b,
+ 0xee,0x50,0xf7,0xdf,0x7f,0x7f,0x61,0xfb,0x21,0xf5,0x2a,0x7e,0xf9,0xcb,0x5f,0x06,
+ 0x2f,0xff,0xf0,0xc3,0x0f,0xab,0x9d,0x77,0xde,0x59,0x5d,0x7b,0xed,0xb5,0x41,0x19,
+ 0x31,0x3e,0xe6,0xcd,0x9b,0x17,0xa5,0x1a,0x9e,0x78,0xe2,0x89,0x51,0xfa,0xec,0x76,
+ 0xdb,0x6d,0xd7,0x76,0xd7,0x42,0x57,0x6e,0x87,0xe6,0x44,0xdc,0x73,0x7f,0xfd,0xeb,
+ 0x5f,0xd5,0xeb,0xaf,0xbf,0xae,0xfa,0xf4,0xe9,0xa3,0x7a,0xf7,0xee,0xad,0x7a,0xf5,
+ 0xea,0x15,0xbd,0x97,0x57,0xf9,0x3b,0xd9,0x42,0xbe,0x93,0x14,0x1d,0xc8,0x0f,0x89,
+ 0x07,0x18,0x3f,0x7e,0xbc,0xda,0x63,0x8f,0x3d,0xd4,0x69,0xa7,0x9d,0xa6,0x3e,0xfd,
+ 0xe9,0x4f,0x47,0xc7,0x39,0x8d,0x57,0x5e,0x79,0x45,0x7d,0xe7,0x3b,0xdf,0x51,0x37,
+ 0xdf,0x7c,0x73,0xd0,0x36,0x24,0xa0,0xeb,0x8a,0x2b,0xae,0x50,0xdd,0xba,0x75,0xe3,
+ 0x80,0x43,0x10,0x9f,0xfc,0xe4,0x27,0x83,0x97,0x3d,0xf0,0xc0,0x03,0xa3,0xa8,0xfd,
+ 0x1f,0xff,0xf8,0xc7,0xde,0x6b,0xb7,0x1a,0xbe,0xfc,0xe5,0x2f,0x47,0x2e,0x7e,0xb1,
+ 0xf0,0x43,0x78,0xfb,0xed,0xb7,0xd5,0x09,0x27,0x9c,0x10,0x29,0xd8,0xdf,0xfc,0xe6,
+ 0x37,0xd5,0xa1,0x87,0x1e,0x1a,0x3c,0xcb,0xa0,0xf0,0xc6,0x1b,0x6f,0xa8,0xdb,0x6f,
+ 0xbf,0x3d,0x52,0x6e,0x44,0xa1,0x48,0x0e,0x2b,0x88,0x12,0x80,0x02,0x00,0xa5,0x45,
+ 0xb4,0x5e,0x19,0x0f,0xbe,0xee,0xba,0xeb,0xd4,0x94,0x29,0x53,0xa2,0x87,0xbf,0xcc,
+ 0x61,0x2d,0x17,0xf1,0x07,0x1f,0x7c,0x10,0xbd,0x8f,0x3f,0x8b,0x85,0x43,0xfc,0x59,
+ 0x08,0xb2,0xac,0x6c,0x43,0xac,0x4e,0xb1,0x62,0xa5,0xc9,0xba,0xe3,0x57,0x69,0xb1,
+ 0x45,0x2a,0xcb,0xc5,0xdb,0x49,0x6e,0x43,0xd2,0x8c,0x7a,0xf4,0xe8,0x11,0xb9,0xf6,
+ 0x64,0x5c,0x3a,0x56,0x38,0x62,0x25,0x45,0xa6,0xaa,0xed,0xdb,0xb7,0x6f,0xf4,0x2a,
+ 0x4d,0xe6,0xad,0x8f,0x9b,0x44,0x28,0x4b,0x80,0x92,0x34,0xf9,0x2e,0x74,0xbf,0xcb,
+ 0x8e,0x44,0xf1,0x4b,0x93,0x63,0x70,0xf8,0xe1,0x87,0x47,0x63,0x9f,0x1b,0x6d,0xb4,
+ 0x91,0xda,0x70,0xc3,0x0d,0xa3,0x61,0x02,0x89,0x72,0x9e,0x34,0x69,0x92,0xba,0xfe,
+ 0xfa,0xeb,0xd5,0xf3,0xcf,0x3f,0x9f,0x69,0xdd,0xa7,0x9e,0x7a,0x6a,0xa4,0x60,0x00,
+ 0x84,0xb2,0xf1,0xc6,0x1b,0x47,0xd6,0x77,0x48,0x61,0x29,0xb9,0xcf,0x7f,0xf5,0xab,
+ 0x5f,0x45,0x0a,0xe9,0x41,0x07,0x1d,0x14,0x79,0xb5,0xb6,0xd8,0x62,0x8b,0x68,0x1d,
+ 0xe2,0x8e,0x7f,0xf9,0xe5,0x97,0x23,0xa5,0x55,0x84,0xe7,0x77,0xbf,0xfb,0xdd,0xaa,
+ 0xf6,0xe7,0xf2,0xcb,0x2f,0x8f,0xae,0xfb,0x97,0x5e,0x7a,0x29,0xf8,0x37,0x92,0x22,
+ 0x78,0xd2,0x49,0x27,0x45,0xcf,0x08,0xb1,0xdc,0xf7,0xd9,0x67,0x1f,0xb5,0xc9,0x26,
+ 0x9b,0x44,0x45,0x86,0xe4,0x39,0x23,0x93,0x09,0xcd,0x9d,0x3b,0x37,0x52,0xc2,0xa5,
+ 0x89,0xe2,0x20,0xaf,0x12,0x54,0x08,0x28,0x00,0x4d,0x41,0x2c,0x60,0xa5,0x2a,0x97,
+ 0x4c,0x8e,0x21,0xee,0x64,0xa9,0x08,0x97,0x14,0xb8,0x49,0x21,0x29,0x16,0xbc,0x7c,
+ 0x17,0x5b,0xf2,0xf1,0xfb,0x78,0x3d,0x3e,0x64,0x59,0x59,0x9f,0x44,0x0a,0x27,0x05,
+ 0x7b,0xa8,0x42,0x91,0x5c,0x5e,0x9a,0x28,0x0b,0xd2,0xe4,0x46,0x94,0x87,0x85,0x28,
+ 0x12,0xf1,0x67,0xf1,0x7b,0xf3,0xb3,0x58,0xe1,0x90,0xdf,0xf7,0xef,0xdf,0xbf,0x43,
+ 0x29,0x10,0x2d,0x5f,0x9a,0x04,0x30,0x49,0x93,0x07,0x8e,0x8c,0x79,0xcb,0xeb,0xb0,
+ 0x61,0xc3,0xa2,0xef,0xca,0xee,0xc1,0x90,0x87,0x92,0xe4,0x35,0xe7,0x95,0xdb,0x2c,
+ 0xd6,0xcf,0xaf,0x7f,0xfd,0x6b,0x6e,0x14,0xc8,0xcc,0x25,0x97,0x5c,0xa2,0xf6,0xda,
+ 0x6b,0xaf,0xe0,0xe5,0x45,0x80,0xfe,0xfe,0xf7,0xbf,0x77,0x7e,0x2f,0xca,0x6c,0xb5,
+ 0x0a,0x80,0x08,0xec,0x7f,0xfc,0xe3,0x1f,0xea,0x3f,0xfe,0xe3,0x3f,0xd4,0x53,0x4f,
+ 0x3d,0x95,0xf9,0x19,0xf9,0xc2,0x0b,0x2f,0x44,0x0d,0x50,0x00,0x5a,0x4a,0xf0,0x2f,
+ 0x58,0xb0,0x40,0xdd,0x7a,0xeb,0xad,0x91,0xf6,0x9d,0x9c,0x1e,0x33,0xcd,0x32,0x4e,
+ 0x7e,0x67,0x53,0x12,0x7c,0xf8,0x7e,0x1f,0xb2,0x6d,0x79,0x95,0x26,0x5e,0x80,0xd0,
+ 0x20,0x1f,0xdf,0xf1,0x98,0x3f,0x7f,0x7e,0x14,0xa4,0x23,0xd6,0x46,0xac,0x30,0x24,
+ 0x15,0x08,0xb1,0x54,0xc4,0xdb,0x20,0x9e,0x03,0x51,0x1a,0xc4,0x12,0x10,0x05,0x61,
+ 0xc4,0x88,0x11,0x6a,0xf4,0xe8,0xd1,0x91,0xc5,0x3d,0x76,0xec,0xd8,0xe8,0xbb,0xa2,
+ 0xf8,0xf6,0xb7,0xbf,0xad,0x2e,0xb8,0xe0,0x82,0xba,0x5c,0x23,0x52,0x4d,0x4d,0x3c,
+ 0x06,0xb8,0xfe,0xa1,0x1a,0x24,0x17,0xff,0xd8,0x63,0x8f,0x8d,0xbc,0x89,0x65,0x40,
+ 0x14,0xf9,0x07,0x1f,0x7c,0x30,0x1a,0x8f,0xbf,0xf1,0xc6,0x1b,0x39,0x41,0x28,0x00,
+ 0xed,0x29,0xf4,0x45,0xa0,0x89,0x36,0x2c,0xd6,0xbe,0x54,0xe3,0x4a,0x5a,0xe0,0x36,
+ 0x81,0x9b,0xb4,0xc8,0x4d,0x8b,0x3d,0xeb,0xf2,0xd5,0x0c,0x19,0xd4,0xf2,0xfb,0xd0,
+ 0xf5,0x0b,0x22,0xe8,0x4c,0x61,0xe7,0xea,0x8f,0x78,0x11,0x66,0xcc,0x98,0x11,0xb5,
+ 0x17,0x5f,0x7c,0x31,0xfa,0x4e,0x14,0x08,0x19,0x92,0x88,0x83,0x9a,0x8a,0x18,0x5e,
+ 0x90,0x71,0x52,0x19,0xde,0x10,0x45,0xa0,0x48,0xc6,0x8d,0x1b,0xa7,0x6e,0xbb,0xed,
+ 0xb6,0xa8,0x3f,0x00,0xd5,0x22,0x51,0xf8,0x13,0x26,0x4c,0x88,0x52,0xfe,0xca,0x80,
+ 0x28,0xf0,0xa2,0xd4,0x7e,0xe3,0x1b,0xdf,0x50,0x3f,0xfb,0xd9,0xcf,0x38,0x41,0x75,
+ 0x80,0xa8,0xaf,0x12,0x08,0xfe,0x25,0x4b,0x96,0x44,0x17,0xfe,0x71,0xc7,0x1d,0xa7,
+ 0x3e,0xf6,0xb1,0x8f,0x45,0x91,0xb1,0x52,0x89,0x2b,0x76,0x69,0xcb,0x6b,0xec,0x9e,
+ 0x8f,0x5f,0x5d,0x43,0x00,0xb5,0x2c,0x9f,0xfc,0xcc,0x66,0xd1,0x67,0xfd,0x7d,0xcd,
+ 0x17,0x67,0x0e,0xfd,0x17,0x2f,0xca,0xc2,0x85,0x0b,0xd5,0xc8,0x91,0x23,0x23,0xaf,
+ 0x40,0x32,0x6e,0x21,0x6e,0x79,0xf2,0xad,0x6f,0x7d,0x4b,0xfd,0xe1,0x0f,0x7f,0x08,
+ 0x2a,0xb6,0x92,0x15,0x89,0xaf,0x90,0x87,0xe3,0x7d,0xf7,0xdd,0x57,0x48,0x40,0x16,
+ 0xb4,0x17,0x32,0x94,0x26,0x0a,0xf1,0xb6,0xdb,0x6e,0x5b,0x9a,0x7d,0x92,0x7b,0xf6,
+ 0xa7,0x3f,0xfd,0xa9,0xba,0xeb,0xae,0xbb,0xda,0x32,0x2a,0x1f,0x05,0xa0,0x4d,0x84,
+ 0xbe,0xb4,0x7f,0xfe,0xf3,0x9f,0xea,0x8b,0x5f,0xfc,0xa2,0xda,0x7c,0xf3,0xcd,0xd5,
+ 0x45,0x17,0x5d,0x14,0x59,0xa9,0xf1,0x58,0x76,0x9a,0xfb,0x3d,0x16,0x80,0x66,0xcb,
+ 0x7b,0xf9,0x5a,0xbf,0xaf,0xb5,0xd5,0xd2,0x1f,0x09,0x8a,0x94,0x21,0x83,0xe1,0xc3,
+ 0x87,0x47,0xc3,0x00,0xe6,0xb1,0x4f,0x0a,0xfe,0xbc,0x95,0x80,0x2f,0x7c,0xe1,0x0b,
+ 0x51,0x90,0x92,0xbc,0xe6,0xe5,0x69,0x90,0x87,0xb4,0x64,0x7e,0x5c,0x78,0xe1,0x85,
+ 0x58,0xfe,0x90,0xab,0x12,0x20,0x81,0xc5,0x5f,0xf9,0xca,0x57,0x72,0x19,0xae,0xcb,
+ 0x0b,0xa9,0xa5,0xf1,0xaf,0x7f,0xfd,0x4b,0x5d,0x75,0xd5,0x55,0xd1,0xf0,0x5d,0x91,
+ 0x88,0x67,0x51,0xbc,0x6a,0xa7,0x9f,0x7e,0x3a,0x0a,0x00,0x14,0x2b,0xf4,0xc5,0xc5,
+ 0x2f,0xb9,0xa7,0x62,0xe9,0x1f,0x79,0xe4,0x91,0xea,0xd5,0x57,0x5f,0x8d,0x1e,0xee,
+ 0x32,0x06,0x66,0x0a,0xb4,0xa4,0xd5,0x6b,0xb3,0x80,0xf3,0x6e,0xb5,0x6e,0x2f,0xef,
+ 0xfd,0xad,0x66,0x7d,0x12,0x70,0x38,0x7d,0xfa,0xf4,0x68,0xfc,0x5f,0xc6,0xfe,0x93,
+ 0x41,0x89,0xf1,0x79,0x88,0x33,0x18,0xcc,0xcf,0xf3,0x54,0x04,0xe4,0xc1,0x2a,0x9e,
+ 0x80,0x47,0x1e,0x79,0x24,0x4a,0x05,0xac,0xc6,0x62,0x8f,0x67,0x4e,0x93,0xe0,0xab,
+ 0x67,0x9f,0x7d,0x36,0xaa,0x32,0x58,0x24,0x32,0x7c,0xe1,0xa3,0x11,0x9e,0x87,0x7a,
+ 0xed,0x57,0x23,0xfb,0x1f,0xb2,0x5e,0x51,0xfc,0x42,0x27,0xf3,0xc9,0x82,0x78,0xc6,
+ 0x7e,0xfb,0xdb,0xdf,0x46,0x29,0xc5,0x62,0x90,0x14,0xb1,0x8d,0x6a,0x3d,0x80,0x12,
+ 0x13,0x20,0xca,0xf4,0x95,0x57,0x5e,0xa9,0x8e,0x38,0xe2,0x88,0x28,0xc6,0xa7,0x56,
+ 0xe4,0x38,0xca,0x5c,0x04,0x52,0x62,0x5b,0xaa,0x76,0x8a,0xb1,0x20,0xc6,0x58,0xb5,
+ 0x41,0x8c,0x65,0xbe,0x77,0xbc,0x1e,0x97,0x4a,0xde,0xe6,0x0f,0xac,0x23,0xf8,0x63,
+ 0x64,0x6c,0x5f,0x5c,0xc4,0x92,0x8a,0xb2,0xe9,0xa6,0x9b,0x06,0x5d,0x34,0xf5,0xde,
+ 0xd7,0x6a,0xa3,0xfe,0x43,0x96,0x2f,0x12,0xb1,0xf6,0xc5,0x83,0x22,0xd6,0x42,0x7c,
+ 0xa3,0xd9,0x62,0x22,0x24,0x02,0xdf,0xe6,0x35,0x48,0x0b,0x74,0x94,0x88,0xe9,0xb3,
+ 0xcf,0x3e,0x3b,0xd3,0xb9,0x36,0x91,0x61,0x1e,0x71,0x6b,0x4a,0x40,0xa7,0x3c,0xd0,
+ 0x24,0xf5,0x4f,0xae,0x03,0x09,0x60,0x94,0xb4,0x49,0x89,0x5b,0x88,0x83,0x16,0x65,
+ 0xb8,0x42,0x04,0xff,0x31,0xc7,0x1c,0x13,0x79,0x30,0x00,0xea,0xc9,0xc4,0x89,0x13,
+ 0xa3,0x40,0x3c,0xc9,0x99,0x97,0xf4,0x54,0x69,0x32,0x24,0x29,0x1e,0x02,0xc9,0x48,
+ 0x12,0x05,0x61,0xf0,0xe0,0xc1,0x6a,0xcc,0x98,0x31,0x51,0x61,0x1e,0x49,0x43,0x95,
+ 0x34,0xbc,0x7a,0x5c,0xab,0x72,0x9f,0x88,0x52,0x2d,0xd3,0x63,0x4b,0xda,0xa0,0x64,
+ 0x45,0x49,0x93,0x2c,0x23,0xf9,0x4e,0xee,0x25,0xd9,0x47,0x51,0x14,0x64,0x7f,0x24,
+ 0x43,0x48,0x5e,0xa5,0x49,0xa6,0x82,0xa4,0xe0,0xee,0xba,0xeb,0xae,0xd1,0x72,0x80,
+ 0x02,0x50,0x17,0xc1,0x2f,0x0f,0xfa,0xaf,0x7e,0xf5,0xab,0x91,0x15,0x27,0xb9,0xaa,
+ 0xb1,0x0b,0xb7,0xd6,0xa0,0x3c,0xdf,0xf2,0x59,0x83,0x02,0x6b,0x5d,0x7f,0xbd,0x83,
+ 0x12,0xe5,0xbb,0x38,0xc5,0x50,0xf2,0x92,0xa5,0x96,0x80,0x0f,0x29,0x38,0x92,0xe6,
+ 0x45,0x28,0x4a,0x01,0xb0,0x21,0x9e,0x08,0xd9,0x7f,0x49,0xbb,0x14,0xa5,0x25,0x4e,
+ 0xbf,0x04,0x28,0x1b,0x52,0xaf,0x42,0x04,0xab,0x5c,0xb3,0xa1,0x33,0x0a,0xd6,0xfb,
+ 0x79,0x2b,0xf7,0x92,0x28,0x27,0xf1,0xfd,0x04,0x7e,0x78,0xe2,0x14,0x28,0xf8,0xe5,
+ 0xfd,0x2d,0xb7,0xdc,0xa2,0x7e,0xf8,0xc3,0x1f,0x46,0xd6,0xdd,0x36,0xdb,0x6c,0xb3,
+ 0x8e,0xc0,0x4b,0xe6,0xe9,0x9b,0x02,0xc8,0x7c,0xb5,0x09,0xc8,0xb4,0x57,0x9b,0x30,
+ 0xb3,0x09,0x61,0xdf,0x77,0xae,0xf5,0x65,0xfd,0xde,0x26,0xf0,0xab,0xed,0xbf,0x58,
+ 0xfc,0x62,0x95,0x88,0x9b,0x7f,0xfb,0xed,0xb7,0xcf,0x24,0x74,0xe3,0x75,0xda,0x02,
+ 0x16,0xeb,0xe9,0xc5,0x90,0xed,0x8b,0xfb,0x15,0xa0,0xec,0x88,0xd1,0x52,0xe6,0xd8,
+ 0x13,0xb9,0x5f,0xc5,0x2b,0x01,0x28,0x00,0xa5,0x10,0xfc,0x62,0x95,0x4a,0x49,0x57,
+ 0x71,0xf5,0x8a,0x4b,0x37,0x54,0xe0,0x9a,0xc2,0x27,0x4b,0x5e,0x7f,0xde,0x16,0x7b,
+ 0x11,0x69,0x81,0xb5,0xf6,0x5f,0x04,0xbf,0x54,0xf4,0x12,0x57,0xb9,0x54,0x33,0x33,
+ 0x8f,0xbb,0xaf,0x7f,0x71,0x91,0x21,0x33,0x6b,0xc1,0x3c,0x06,0x00,0x00,0x28,0x00,
+ 0x10,0x2c,0xfc,0xe5,0x55,0x2a,0x66,0xdd,0x74,0xd3,0x4d,0x51,0x51,0x0b,0x41,0x5c,
+ 0x52,0xd5,0x16,0xee,0xa9,0x46,0x20,0x9b,0xdf,0xf9,0x2c,0xf2,0x5a,0x3c,0x08,0xd5,
+ 0x78,0x24,0xaa,0xed,0xbf,0x08,0xfe,0xc9,0x93,0x27,0x47,0x9e,0x14,0x11,0xfc,0x49,
+ 0xcf,0x41,0x16,0x85,0x46,0xc6,0xdc,0xcd,0x20,0x27,0x9b,0x17,0x02,0x45,0x00,0x00,
+ 0x50,0x00,0x20,0x48,0xf0,0x4b,0x60,0x97,0x08,0xfe,0xb8,0x94,0x65,0x2c,0x78,0xd2,
+ 0x4a,0xf1,0xd6,0xea,0x62,0x0f,0x59,0x9f,0x8f,0x5a,0x84,0x5c,0x56,0x17,0x7f,0x35,
+ 0xfd,0x97,0xe9,0x75,0x25,0x08,0x49,0xc6,0x1d,0x45,0xf0,0x27,0x8b,0x01,0x85,0xc4,
+ 0x1c,0x98,0xdb,0xb6,0xcd,0xae,0x67,0xfe,0x06,0xc1,0x0f,0x00,0x28,0x00,0x90,0x2a,
+ 0xf8,0x85,0x67,0x9e,0x79,0x26,0x12,0xfc,0x32,0x29,0x46,0x1e,0x02,0x39,0xeb,0x7e,
+ 0x14,0xe9,0xd2,0xaf,0x45,0x29,0xa8,0xb5,0xff,0x22,0xf8,0x45,0xa9,0x92,0x3a,0xe1,
+ 0x92,0xfe,0x26,0x55,0xc2,0xd2,0x14,0x30,0xdb,0xb9,0xb1,0x1d,0x0f,0x51,0x00,0xcc,
+ 0xe8,0x7f,0x89,0x0b,0x70,0x29,0x31,0x00,0x00,0x28,0x00,0xd0,0x21,0x5c,0x44,0x60,
+ 0xc8,0x54,0x92,0x92,0xd2,0x25,0xe3,0xd1,0x59,0x2c,0x52,0x9f,0xf0,0xcc,0x1a,0x45,
+ 0x9f,0x66,0x41,0xfb,0x26,0x07,0xaa,0x75,0x7f,0x6b,0xdd,0x7f,0xdb,0xef,0x67,0xcd,
+ 0x9a,0x15,0x09,0x7e,0x71,0xd3,0x4b,0x70,0x5f,0x48,0x64,0x7f,0x88,0x87,0x26,0xe9,
+ 0x01,0xb0,0x15,0x14,0x92,0x73,0x2a,0xdb,0x44,0xf8,0x03,0x00,0x0a,0x00,0xac,0x23,
+ 0x48,0x96,0x2f,0x5f,0x1e,0xe5,0xf2,0x4b,0x1d,0x76,0x09,0xf2,0xb3,0xb9,0xb8,0x8b,
+ 0x9e,0x8c,0x27,0xab,0xc0,0xad,0x25,0x6a,0xbf,0x88,0xed,0xa5,0x59,0xfc,0x52,0x14,
+ 0x49,0x04,0xb4,0x64,0x4b,0xc8,0x58,0x7f,0x11,0xc8,0xfa,0x93,0x45,0x85,0x62,0xeb,
+ 0x1f,0xcb,0x1f,0x00,0x50,0x00,0x60,0x1d,0xab,0x51,0xea,0xc9,0x4b,0xe1,0x09,0x29,
+ 0xe4,0x32,0x6f,0xde,0xbc,0x60,0x01,0x19,0xb2,0x8d,0x5a,0x5d,0xf4,0x59,0xa3,0xea,
+ 0xb3,0x1e,0x83,0x5a,0x3c,0x18,0x21,0xeb,0x8f,0x67,0xf8,0x5b,0xbc,0x78,0xb1,0xda,
+ 0x7a,0xeb,0xad,0xa3,0x8c,0x89,0x22,0xb3,0x12,0x92,0x0a,0x80,0x58,0xfc,0xa2,0x00,
+ 0xc4,0x4a,0x9c,0x59,0x1d,0x10,0x65,0x00,0x00,0x50,0x00,0xda,0x54,0xf0,0x8b,0x3b,
+ 0xfa,0xf6,0xdb,0x6f,0x8f,0xac,0x7e,0x29,0x84,0xe1,0x2a,0x18,0x93,0x25,0xe8,0x2d,
+ 0xcf,0x34,0x3f,0x13,0x9f,0xcb,0xbf,0x1a,0x01,0x9e,0x25,0x8b,0x20,0x4b,0xff,0xe5,
+ 0xd8,0x8a,0xc5,0x2f,0x0a,0xd5,0x16,0x5b,0x6c,0x11,0x55,0x46,0x34,0xf3,0xf2,0x7d,
+ 0x1e,0x8b,0x6a,0x14,0x04,0x49,0x03,0x94,0x26,0xc2,0x5f,0x5e,0x63,0x2f,0x40,0x96,
+ 0xe3,0x04,0x00,0x80,0x02,0xd0,0xa2,0x82,0x7f,0xea,0xd4,0xa9,0xea,0xd6,0x5b,0x6f,
+ 0x8d,0xc6,0xf9,0x45,0x48,0x84,0x08,0xe7,0xac,0xcb,0x84,0x08,0xb8,0x22,0xd6,0x9f,
+ 0xc5,0xa3,0x50,0xc4,0xfe,0xc5,0xae,0x7e,0xb1,0xfc,0xa5,0x2a,0xe2,0xee,0xbb,0xef,
+ 0xde,0x51,0x01,0x2f,0xab,0x00,0xce,0x9a,0x05,0x10,0x07,0x01,0xc6,0xc2,0x3f,0x1e,
+ 0xf3,0x37,0xe7,0x04,0x00,0x00,0x40,0x01,0x68,0x33,0xc1,0x2f,0x82,0x49,0x2a,0xf7,
+ 0x49,0xc9,0xde,0x32,0xb8,0x81,0x8b,0xae,0xcd,0x5f,0xcf,0x2c,0x01,0xb1,0xf8,0xc5,
+ 0xd5,0x2f,0xaf,0xa3,0x46,0x8d,0x52,0x07,0x1e,0x78,0x60,0x14,0xe1,0x5f,0x4b,0xa1,
+ 0xa2,0xb4,0x2c,0x00,0x89,0xd7,0x88,0x67,0x57,0x4c,0x2a,0x0c,0xb1,0x07,0x20,0x9e,
+ 0x10,0xc8,0x35,0x31,0x10,0x31,0x01,0x00,0x80,0x02,0xd0,0x06,0x82,0x5f,0x04,0xbe,
+ 0x08,0x7e,0x51,0x00,0x42,0x2c,0xdd,0x7a,0x91,0x87,0x05,0x9e,0xe7,0xf2,0xd5,0x0a,
+ 0x7e,0x49,0x91,0x94,0xa0,0x49,0x09,0xec,0x93,0x49,0x6e,0xfa,0xf7,0xef,0xef,0x15,
+ 0xe0,0x21,0xdf,0xdb,0xfa,0x23,0x13,0x82,0xc8,0xb0,0xc2,0xa2,0x45,0x8b,0xd6,0x0a,
+ 0xee,0x8b,0x7f,0x1b,0x0b,0xff,0xb8,0xe5,0x3d,0x0b,0x20,0x00,0x00,0x0a,0x40,0xc9,
+ 0x05,0xbf,0x3c,0xfc,0x1f,0x7d,0xf4,0xd1,0xc8,0xd5,0x2f,0xd5,0xfb,0xaa,0xb1,0x80,
+ 0xeb,0x9d,0x67,0x9f,0x77,0x50,0x9c,0x4d,0x80,0xe6,0xd5,0xff,0x58,0xf0,0xcb,0x4c,
+ 0x5d,0x52,0xc4,0x47,0x66,0x0c,0x13,0x6b,0xbc,0xa8,0xe3,0x25,0x82,0x5d,0x2c,0x7e,
+ 0x09,0xd8,0x4c,0x4e,0x01,0x6c,0xf6,0xd5,0x26,0xfc,0x6d,0x01,0x80,0x00,0x00,0x28,
+ 0x00,0x2d,0x26,0xf8,0x65,0x5a,0xd6,0xeb,0xaf,0xbf,0x3e,0x2a,0xd5,0xbb,0x70,0xe1,
+ 0x42,0xab,0x25,0x5c,0x6d,0x1e,0x7e,0xd6,0xdf,0x87,0x78,0x00,0x7c,0xb5,0xf4,0xab,
+ 0x19,0xdf,0x4f,0xcb,0x62,0xa8,0xb5,0xff,0x49,0xc1,0x2f,0x2e,0x7e,0x99,0x2e,0x54,
+ 0x5c,0xfe,0xb6,0xdf,0xe5,0x31,0x5b,0xa0,0x08,0x7e,0x11,0xfa,0x62,0xf1,0xbb,0x84,
+ 0x7a,0x72,0x7d,0xc9,0x65,0xf0,0x00,0x00,0x00,0x0a,0x40,0x0b,0x0b,0x7d,0x79,0xc8,
+ 0xbf,0xf8,0xe2,0x8b,0xea,0xf1,0xc7,0x1f,0x8f,0xca,0xf4,0x8a,0xd0,0x37,0x27,0x80,
+ 0x71,0x09,0xd4,0x5a,0xa3,0xf2,0xf3,0xa8,0x04,0x98,0x57,0x65,0xbd,0x22,0xb6,0x97,
+ 0xec,0x7f,0x52,0xf0,0xcb,0xbc,0xe1,0x92,0xcb,0x2f,0x91,0xfd,0xb5,0x44,0xed,0xa7,
+ 0x05,0xf5,0xc9,0x79,0x15,0xa1,0x2f,0xe7,0x33,0x2e,0xef,0x1b,0x9f,0xef,0xe4,0x72,
+ 0xb6,0xdf,0xc7,0x82,0x3f,0xb9,0x9c,0xa9,0x08,0x30,0xfe,0x0f,0x00,0x28,0x00,0x4d,
+ 0x28,0xf4,0x25,0x00,0xec,0xa1,0x87,0x1e,0x52,0x0f,0x3c,0xf0,0x80,0x7a,0xf2,0xc9,
+ 0x27,0xa3,0x68,0xef,0x78,0x0e,0xeb,0x64,0xaa,0x59,0x1e,0x41,0x72,0x59,0x26,0xf3,
+ 0xa9,0xc6,0xc2,0xad,0x65,0xff,0x6a,0x75,0xf9,0x87,0xec,0x8f,0x08,0xfe,0x09,0x13,
+ 0x26,0x44,0x82,0x5f,0x8e,0xf3,0x66,0x9b,0x6d,0xa6,0x36,0xdf,0x7c,0xf3,0xb5,0x6a,
+ 0xf6,0xe7,0x55,0xaa,0x38,0xb6,0xe0,0xa5,0x66,0x80,0x8c,0xf3,0x8b,0xf5,0x9f,0x74,
+ 0xf7,0x9b,0x0a,0x42,0xf2,0xef,0xa4,0x90,0xf7,0x45,0xfe,0x9b,0xfb,0xb0,0xd5,0x56,
+ 0x5b,0xa9,0x7d,0xf7,0xdd,0x37,0xf5,0xba,0xeb,0xdb,0xb7,0x2f,0x4f,0x13,0x00,0x40,
+ 0x01,0x68,0x84,0xd0,0x17,0x9e,0x7f,0xfe,0xf9,0xa8,0x3c,0xef,0xfd,0xf7,0xdf,0x1f,
+ 0x05,0x83,0xc9,0xfc,0xd0,0xeb,0xaf,0xbf,0x7e,0xb0,0xc5,0x6b,0xe2,0xcb,0xab,0x0f,
+ 0x29,0xb5,0x6b,0xbe,0xa6,0x4d,0x96,0x93,0x75,0x48,0xa1,0xd6,0xd9,0xfc,0x6a,0xe9,
+ 0xbf,0x08,0x61,0x49,0xe9,0x13,0xcf,0x8a,0xac,0x63,0xf4,0xe8,0xd1,0x91,0xa0,0xb4,
+ 0xd5,0xec,0x37,0xcf,0x53,0xb5,0x41,0x7f,0x62,0xf1,0xcb,0x38,0xbf,0x9c,0xdb,0xa4,
+ 0xe0,0x77,0x59,0xf4,0x2e,0x85,0xc7,0x54,0x06,0x6c,0xfb,0x98,0xe4,0x93,0x9f,0xfc,
+ 0x64,0xd4,0x00,0x00,0x50,0x00,0x4a,0x24,0xf4,0xe5,0xe1,0x7f,0xef,0xbd,0xf7,0xaa,
+ 0xab,0xaf,0xbe,0x3a,0xb2,0x44,0x45,0x00,0x0d,0x19,0x32,0x44,0xf5,0xe9,0xd3,0xa7,
+ 0x2a,0x8b,0x36,0x4d,0x40,0x56,0x13,0x65,0xef,0x1b,0xc3,0xcf,0xb2,0x7c,0x9e,0xd3,
+ 0xeb,0x56,0xdb,0x7f,0x11,0xfc,0x62,0xf5,0x4b,0x2c,0x85,0x20,0x91,0xfd,0x52,0xc1,
+ 0xcf,0x56,0xb3,0x3f,0xaf,0x20,0x49,0x29,0xc2,0x24,0x16,0xbf,0xb8,0xfa,0xd3,0x82,
+ 0xf7,0x62,0x65,0x20,0xf6,0x14,0x98,0xa4,0x8d,0xf9,0x13,0x07,0x00,0x00,0x28,0x00,
+ 0x4d,0x22,0xf8,0x05,0xb1,0x3e,0x7f,0xf5,0xab,0x5f,0xa9,0xd7,0x5f,0x7f,0xbd,0xe3,
+ 0x33,0x11,0x4c,0xd3,0xa6,0x4d,0xe3,0xcc,0xd6,0x89,0x71,0xe3,0xc6,0x79,0x95,0x87,
+ 0x6a,0x2b,0xf9,0x2d,0x5b,0xb6,0x2c,0x12,0xfc,0x32,0xa4,0x63,0x0a,0xf1,0xa4,0x90,
+ 0xb7,0x8d,0xfd,0xbb,0x3c,0x00,0x00,0x00,0xd0,0x64,0x0a,0x40,0xf2,0x81,0x2e,0xae,
+ 0xe7,0x0b,0x2f,0xbc,0x50,0xdd,0x77,0xdf,0x7d,0x9c,0xc1,0x12,0x9c,0x97,0x6a,0x63,
+ 0x0e,0x5c,0x1e,0x8a,0xb8,0x88,0x8f,0x28,0x00,0xb6,0x31,0x7d,0x9b,0xb5,0x1f,0xbf,
+ 0x4f,0x7e,0x67,0x5e,0x37,0x28,0x00,0x00,0x00,0x4d,0xa4,0x00,0x98,0xe3,0xc1,0x92,
+ 0xbb,0x7f,0xde,0x79,0xe7,0x45,0x96,0x21,0x94,0x9b,0xac,0x41,0x89,0x71,0x2e,0xbf,
+ 0x78,0x71,0x4c,0x57,0xbe,0x29,0xf8,0x93,0x9f,0x99,0x55,0xfd,0xd2,0x66,0x28,0x04,
+ 0x00,0x80,0x92,0x2b,0x00,0xb6,0x40,0xb0,0x2b,0xae,0xb8,0x42,0xfd,0xcf,0xff,0xfc,
+ 0x0f,0x67,0xad,0x84,0x42,0x3e,0x44,0xe0,0xbb,0xbe,0x97,0xb1,0x7d,0x49,0xe7,0x93,
+ 0x20,0xbf,0xd8,0xda,0xb7,0x09,0xfa,0xf8,0xbd,0x4d,0x39,0x30,0x3d,0x00,0x71,0xd5,
+ 0x3f,0xf3,0x5a,0x02,0x00,0x80,0x12,0x2b,0x00,0xe6,0x38,0xae,0x3c,0xc8,0x7f,0xf8,
+ 0xc3,0x1f,0x46,0x33,0xf3,0x41,0xf9,0x15,0xb5,0xd0,0xd2,0xbd,0xc9,0x5c,0x7e,0x9b,
+ 0x90,0x37,0xd7,0xe9,0x1a,0xe7,0x4f,0x0b,0x0a,0x4c,0x7a,0x00,0x50,0x04,0x00,0x00,
+ 0x4a,0xac,0x00,0x98,0x0f,0x75,0xb1,0x0e,0xbf,0xfb,0xdd,0xef,0x46,0x53,0xf2,0x42,
+ 0x6b,0x28,0x0b,0xa2,0xd0,0x25,0x05,0x7f,0xd2,0xa2,0x4f,0xcb,0xe7,0xb7,0xb9,0xfe,
+ 0x6d,0xd5,0xfd,0x5c,0xb5,0x01,0x00,0x00,0xa0,0x84,0x0a,0x80,0xab,0x60,0xcb,0x45,
+ 0x17,0x5d,0x84,0xf0,0x6f,0x22,0x01,0xef,0x73,0xf9,0x4b,0x1a,0xa1,0x08,0xfe,0x78,
+ 0x52,0x1e,0x57,0xe0,0x9e,0xcd,0xda,0x4f,0x2a,0x05,0xbe,0x3a,0x00,0x71,0x60,0x20,
+ 0x00,0x00,0x94,0x58,0x01,0x70,0xb9,0x74,0xaf,0xbd,0xf6,0xda,0xa8,0xb0,0x0f,0x34,
+ 0x07,0x69,0x75,0x07,0x24,0xb0,0x2f,0x59,0xb6,0xd7,0x96,0xcf,0xef,0xf2,0x04,0xb8,
+ 0x14,0x04,0xd7,0xf0,0x80,0xd9,0x18,0x02,0x00,0x09,0x2e,0x9d,0x31,0x63,0x46,0xd4,
+ 0xde,0x7b,0xef,0xbd,0x8e,0xf7,0x71,0x93,0xcc,0x93,0xe3,0x8f,0x3f,0x5e,0x1d,0x77,
+ 0xdc,0x71,0xd1,0x1c,0x16,0x00,0x28,0x00,0x0d,0x12,0xfe,0xf2,0x30,0x7f,0xec,0xb1,
+ 0xc7,0xd4,0x2f,0x7f,0xf9,0x4b,0xce,0x50,0x93,0x7b,0x00,0x44,0xf0,0x8b,0xbb,0x3f,
+ 0xce,0xe5,0x4f,0x5a,0xef,0xf1,0xfb,0xb8,0xa4,0x6f,0x52,0x80,0xbb,0xb2,0x00,0x4c,
+ 0x21,0x9f,0x54,0x26,0x4c,0x0f,0x80,0x29,0xf0,0xc9,0x06,0x68,0x2d,0xe4,0x9a,0x32,
+ 0x05,0xb9,0xab,0xc5,0x85,0xab,0x4c,0x06,0x0d,0x1a,0xa4,0xfe,0xcf,0xff,0xf9,0x3f,
+ 0xea,0xcc,0x33,0xcf,0x54,0xfd,0xfa,0xf5,0xe3,0x1a,0x01,0x14,0x80,0x46,0x08,0xff,
+ 0x64,0x93,0xb9,0xe3,0x65,0xdc,0x1f,0x17,0x6e,0x73,0x08,0x7d,0xdb,0xdf,0xf2,0x70,
+ 0x16,0x8b,0x5f,0xca,0xf6,0x26,0xdd,0xf1,0xb6,0x68,0x7d,0x53,0x60,0xbb,0xaa,0xfd,
+ 0x99,0xc3,0x02,0xbe,0x21,0x83,0xe4,0xb6,0xa0,0x39,0x90,0x73,0x26,0x95,0x26,0x43,
+ 0x84,0xfa,0xdc,0xb9,0x73,0xab,0xde,0x8e,0x08,0xfe,0xff,0xfe,0xef,0xff,0x5e,0x47,
+ 0xf0,0x93,0x3e,0x0a,0x28,0x00,0x0d,0x14,0xfe,0xf2,0x00,0x90,0x88,0x7f,0x99,0xe2,
+ 0x15,0x9a,0x03,0xd3,0xe5,0x2f,0xe7,0x70,0xce,0x9c,0x39,0xce,0x40,0x3c,0x9b,0x80,
+ 0x77,0x09,0x74,0xdb,0xb0,0x80,0x29,0xd8,0x6d,0xf1,0x01,0xb1,0xd2,0xc1,0x10,0x40,
+ 0x39,0x48,0xba,0xe0,0xd3,0x9a,0x4c,0x2a,0x15,0xa7,0x6f,0x16,0x41,0x2c,0xf8,0xbf,
+ 0xfa,0xd5,0xaf,0xaa,0xfe,0xfd,0xfb,0xaf,0xf3,0x3c,0xb2,0x55,0xaa,0x04,0x40,0x01,
+ 0x28,0x48,0xf8,0x27,0x1f,0xe0,0xf2,0xc0,0x96,0xea,0x7e,0x4f,0x3c,0xf1,0x04,0x67,
+ 0xa6,0x49,0xbd,0x00,0xbe,0x4a,0x7d,0x49,0xc1,0x6e,0x73,0xf3,0x9b,0x02,0xdd,0xe7,
+ 0x11,0xf0,0xa5,0x04,0x22,0xf8,0x8b,0x23,0x0f,0x17,0x7c,0xbd,0x10,0xc1,0xff,0x5f,
+ 0xff,0xf5,0x5f,0xea,0xf4,0xd3,0x4f,0xef,0x10,0xfc,0x69,0xd7,0x85,0xa9,0xd4,0x02,
+ 0xa0,0x00,0x14,0xe8,0x01,0x90,0x87,0xb9,0x3c,0x24,0x18,0xf7,0x6f,0x5e,0x05,0x20,
+ 0x39,0xb6,0x6f,0x56,0xe7,0xf3,0xa5,0xe9,0xb9,0x82,0xf7,0x42,0x32,0x03,0xd2,0xd6,
+ 0x05,0xd9,0xa8,0x97,0x0b,0xbe,0xde,0x82,0xff,0xb4,0xd3,0x4e,0xeb,0x10,0xfc,0xc9,
+ 0x6b,0x30,0xf9,0x6a,0xfb,0x0c,0x25,0x00,0x50,0x00,0x0a,0xb4,0x16,0x63,0x61,0x21,
+ 0xed,0xa6,0x9b,0x6e,0x8a,0xc6,0xff,0xa1,0xb9,0x30,0x1f,0x94,0xe2,0xc2,0xb5,0x59,
+ 0xe8,0x36,0xeb,0xdd,0x54,0x0a,0x6c,0x31,0x02,0xae,0xc0,0xc0,0xb4,0xba,0x01,0xb6,
+ 0x99,0xff,0xda,0xf9,0x21,0x5e,0x16,0x17,0x7c,0xe8,0xf5,0x24,0xd3,0x4e,0xbb,0x9a,
+ 0x7c,0x2f,0x33,0x44,0x26,0xe7,0x8a,0xb0,0x09,0xfe,0xb3,0xce,0x3a,0x4b,0x9d,0x7a,
+ 0xea,0xa9,0xaa,0x6f,0xdf,0xbe,0x6b,0x05,0x9b,0xc6,0x2d,0xde,0x96,0x39,0x59,0x95,
+ 0x4d,0x09,0x00,0x40,0x01,0xc8,0xd9,0xea,0x4f,0x36,0xb9,0xa1,0xff,0xfc,0xe7,0x3f,
+ 0x73,0x46,0x5a,0x40,0x11,0xb0,0x09,0x77,0x5b,0x10,0xa0,0x2b,0x9f,0xdf,0x15,0x1f,
+ 0x10,0x62,0xed,0xb7,0x53,0x10,0x60,0x33,0xb9,0xe0,0x85,0x58,0x80,0x77,0xe9,0xd2,
+ 0x65,0x1d,0xa1,0x2e,0x9f,0xc5,0x82,0xdf,0x14,0xba,0xc9,0x6b,0x44,0xea,0x48,0x48,
+ 0x4b,0x13,0xfc,0x12,0xd8,0x77,0xca,0x29,0xa7,0x38,0x05,0xbf,0xa9,0x04,0xd8,0xae,
+ 0x63,0x53,0xf8,0xa3,0x0c,0x00,0x0a,0x40,0x4e,0x4a,0x40,0xf2,0x81,0x2f,0x4d,0x6e,
+ 0xd0,0x7b,0xee,0xb9,0xa7,0x29,0x5c,0x8a,0xe0,0xf6,0xe8,0xc4,0xc4,0x45,0x7e,0x4c,
+ 0x45,0x20,0x79,0xfe,0x5d,0x13,0xf8,0xd8,0xd2,0xfe,0xd2,0x84,0xbd,0x2b,0x33,0x20,
+ 0xb9,0xed,0x66,0x0a,0x02,0x6c,0x36,0x17,0xbc,0x29,0xc4,0x6d,0x7f,0xcb,0xf1,0x97,
+ 0xf7,0xae,0x02,0x51,0xb6,0x6b,0xca,0x0c,0xf2,0x94,0x54,0x52,0x9f,0xe0,0x3f,0xe3,
+ 0x8c,0x33,0xd4,0x49,0x27,0x9d,0xa4,0xfa,0xf4,0xe9,0xd3,0x31,0xc7,0x84,0x4b,0xf0,
+ 0xc7,0xfb,0x15,0xbf,0xf7,0x79,0xb5,0x00,0x50,0x00,0x72,0x12,0x14,0x36,0x25,0x80,
+ 0x82,0x3f,0xad,0xe1,0x01,0xc8,0x9a,0xba,0x67,0xfb,0x4d,0xda,0xf2,0x49,0x2f,0x82,
+ 0x99,0x19,0x60,0x7a,0x18,0x7c,0xb3,0x0f,0xd6,0x93,0x66,0x73,0xc1,0x27,0x85,0xb9,
+ 0xeb,0x7d,0x52,0x88,0x86,0x4c,0x02,0x15,0x0b,0xda,0xf8,0x7d,0xda,0xb4,0xd1,0x49,
+ 0xc1,0x2f,0x2d,0x4d,0xf0,0x4b,0x60,0xdf,0x89,0x27,0x9e,0x18,0x59,0xfc,0x42,0x5c,
+ 0x6c,0x2a,0x4d,0xe0,0xc7,0xfb,0x20,0x4d,0xae,0x99,0xa4,0x12,0x80,0xf0,0x07,0x14,
+ 0x80,0x3a,0x59,0xff,0xd2,0x26,0x4f,0x9e,0xac,0x5e,0x7b,0xed,0x35,0xce,0x46,0x8b,
+ 0x78,0x03,0xe4,0x01,0x9c,0xf4,0x00,0x98,0x82,0xd9,0xb4,0xd0,0x6d,0x4a,0x81,0x4d,
+ 0x71,0x08,0xcd,0x02,0xb0,0x0d,0x17,0x14,0x41,0x33,0xb9,0xe0,0x63,0xc1,0x17,0x0b,
+ 0x70,0x79,0x75,0xbd,0x77,0xb9,0xe0,0x43,0xa7,0x75,0xce,0xe3,0x3a,0x92,0x34,0x60,
+ 0x69,0x69,0x82,0xff,0x2b,0x5f,0xf9,0x8a,0x3a,0xe1,0x84,0x13,0x3a,0x2a,0xf7,0x49,
+ 0xcd,0x09,0x53,0xf0,0xc7,0xfd,0x8e,0x85,0x7c,0x2c,0xe8,0x93,0x7d,0x4c,0x2a,0x23,
+ 0xa6,0xe2,0x02,0x80,0x02,0x90,0xa3,0xe0,0x37,0x1f,0xe0,0x62,0xed,0x3c,0xfc,0xf0,
+ 0xc3,0x9c,0x89,0x16,0x22,0x1e,0x02,0xf0,0x95,0xe8,0x75,0x55,0xef,0x73,0x95,0x05,
+ 0x0e,0x59,0x97,0x4d,0x29,0xc8,0x7a,0xad,0x8a,0x15,0x2e,0xc1,0xa8,0x52,0x32,0xd6,
+ 0x56,0x36,0xb6,0x6c,0x2e,0xf8,0x58,0x80,0xc7,0x42,0xbc,0x6b,0xd7,0xae,0xd6,0xcf,
+ 0x6b,0xb9,0x7f,0x93,0x42,0x32,0x69,0x41,0xe7,0x89,0x9c,0x3b,0x11,0xfa,0xe2,0x2d,
+ 0x49,0x13,0xfc,0x12,0xd1,0x7f,0xcc,0x31,0xc7,0x74,0x08,0x7e,0x51,0xc4,0x92,0x63,
+ 0xfa,0xa6,0xb5,0x1f,0x0b,0xff,0xe4,0xb5,0x12,0x0f,0x49,0x98,0x59,0x27,0x21,0x43,
+ 0x13,0x00,0x28,0x00,0x35,0x2a,0x03,0x49,0x0f,0xc0,0xa3,0x8f,0x3e,0xca,0x99,0x68,
+ 0x01,0xcb,0x3f,0x7e,0x80,0xda,0xb2,0x00,0x7c,0x56,0x7e,0x5a,0xb3,0xb9,0xfe,0x4d,
+ 0x61,0x6f,0x0b,0x2e,0x4c,0x56,0x92,0x14,0xeb,0x50,0x02,0x4d,0x27,0x4e,0x9c,0x18,
+ 0x55,0x28,0xfc,0xe0,0x83,0x0f,0xa2,0x62,0x45,0x32,0xde,0x2e,0x02,0x3f,0x16,0xf6,
+ 0x65,0x70,0xc1,0xc7,0x96,0xaa,0x08,0x72,0x9f,0x50,0xaf,0x87,0x40,0x32,0xe7,0x78,
+ 0xc8,0xdb,0x3a,0x96,0xf3,0x24,0x42,0x5f,0x84,0xbf,0xab,0xfa,0xa7,0x08,0xfe,0xff,
+ 0xfc,0xcf,0xff,0x54,0x47,0x1e,0x79,0xa4,0xea,0xd5,0xab,0x57,0x87,0xe0,0xb7,0x59,
+ 0xfc,0xc9,0x2c,0x02,0x59,0x9f,0x1c,0x2b,0xb3,0x3f,0xae,0xe1,0x27,0x02,0x00,0x01,
+ 0x05,0xa0,0x00,0xe1,0xe0,0x0a,0xfe,0x93,0x07,0xf1,0xeb,0xaf,0xbf,0xce,0x99,0x68,
+ 0x62,0x4c,0xd7,0x70,0x5c,0xfe,0xd7,0x67,0xe5,0xa7,0x05,0xf5,0xa5,0xcd,0x01,0xe0,
+ 0xca,0x24,0x48,0x2e,0x23,0x81,0x60,0xa3,0x46,0x8d,0x52,0xaf,0xbe,0xfa,0xaa,0x7a,
+ 0xeb,0xad,0xb7,0x3a,0x84,0xc5,0x83,0x0f,0x3e,0xd8,0xb0,0x63,0x94,0x14,0xde,0x66,
+ 0x4b,0x0a,0xf8,0xd8,0x5a,0x6d,0x94,0xd0,0x09,0x99,0xd5,0x31,0xed,0xfb,0x2c,0x82,
+ 0x7f,0xde,0xbc,0x79,0x91,0xf0,0x4f,0x13,0xfc,0x5f,0xfa,0xd2,0x97,0xd4,0x61,0x87,
+ 0x1d,0xa6,0x7a,0xf6,0xec,0x19,0x24,0xf8,0x93,0x0a,0x80,0x4d,0xf8,0x53,0x2b,0x02,
+ 0xa0,0x8e,0x1e,0x80,0x34,0x25,0xe0,0x95,0x57,0x5e,0xe1,0x2c,0x34,0xb9,0xf5,0x6f,
+ 0x5a,0x88,0xb1,0x07,0xc0,0x1c,0x8f,0xb7,0x59,0xfb,0xa6,0x65,0xef,0x8a,0x15,0x48,
+ 0x2e,0x17,0xbf,0xb7,0x15,0x19,0xea,0xd6,0xad,0x9b,0x1a,0x3e,0x7c,0x78,0x24,0x54,
+ 0x9e,0x7d,0xf6,0xd9,0xc2,0x1f,0xf0,0x36,0x41,0x6e,0x7e,0x26,0xfb,0x94,0x74,0x51,
+ 0x87,0x8c,0xa1,0x67,0x11,0xa6,0x79,0x8f,0xd1,0xfb,0x2c,0xfe,0xac,0x1e,0x01,0x73,
+ 0xff,0xe4,0xfa,0x10,0xc1,0x2f,0x2d,0x4d,0xf0,0x9f,0x7c,0xf2,0xc9,0xea,0x90,0x43,
+ 0x0e,0x51,0x3d,0x7a,0xf4,0x58,0x47,0xf0,0xc7,0xaf,0x49,0x81,0x9f,0x14,0xfc,0xb6,
+ 0x7d,0xb5,0x15,0xa0,0x4a,0xbe,0xe6,0x71,0x2e,0x00,0x50,0x00,0x02,0x04,0x7f,0xec,
+ 0x01,0x98,0x34,0x69,0x12,0x67,0xa1,0xc5,0x94,0x81,0x38,0x08,0x30,0xc4,0xca,0x4f,
+ 0x2b,0xfa,0x13,0xe2,0x01,0x48,0x5a,0xa1,0x43,0x86,0x0c,0x89,0xdc,0xc8,0x2f,0xbf,
+ 0xfc,0x72,0x4d,0xfd,0x88,0x2d,0xc7,0xa4,0x30,0x37,0xdf,0xc7,0x6e,0xf9,0x10,0xe1,
+ 0x60,0x0a,0xe4,0xbc,0xc7,0xd0,0xcd,0x31,0x7a,0x53,0x40,0x67,0x4d,0xbb,0xcb,0xdb,
+ 0xe2,0x8f,0xf7,0x2f,0xf6,0xf8,0xf9,0x04,0xbf,0xa4,0xf2,0x1d,0x70,0xc0,0x01,0x1d,
+ 0x82,0x5f,0x0a,0xfe,0x98,0xc5,0x7b,0x6c,0x82,0x3f,0x69,0xed,0x27,0x05,0x7e,0x16,
+ 0x45,0x07,0x45,0x00,0x50,0x00,0xea,0xa0,0x04,0xc8,0xc3,0x40,0xda,0xdb,0x6f,0xbf,
+ 0xcd,0x59,0x68,0x01,0xc1,0x9f,0x7c,0x2f,0x0a,0x40,0x5a,0x0c,0x40,0x68,0xb3,0x29,
+ 0x0c,0xb6,0x6b,0x49,0x66,0x73,0x13,0x8b,0xff,0xcd,0x37,0xdf,0x4c,0x7d,0x78,0x27,
+ 0x05,0x79,0xda,0x6b,0xde,0x0f,0xfa,0xa2,0xc7,0xd0,0x7d,0x02,0x3f,0x34,0xed,0x2e,
+ 0x2f,0x8b,0xdf,0x44,0xce,0x91,0x08,0x7e,0x09,0x9a,0x4c,0x13,0xfc,0x9f,0xff,0xfc,
+ 0xe7,0xd5,0x3e,0xfb,0xec,0xa3,0xba,0x77,0xef,0xbe,0x8e,0xc5,0xef,0x1a,0xe3,0x4f,
+ 0x2a,0x52,0x66,0xff,0x43,0x5c,0xfc,0xb6,0x8a,0x80,0x08,0x7a,0x40,0x01,0xc8,0x59,
+ 0x40,0x98,0xd6,0x7f,0xac,0x04,0x4c,0x9f,0x3e,0x9d,0xb3,0xd0,0x62,0x24,0x3d,0x00,
+ 0x69,0x2e,0xfd,0xac,0xb9,0xfe,0xe6,0xb5,0x24,0x82,0x42,0x72,0xc4,0x25,0x22,0xdf,
+ 0x85,0xb8,0xdf,0x45,0xb8,0x48,0x1d,0xf8,0xd8,0x42,0xcc,0x6b,0x0c,0xbb,0x5a,0x0b,
+ 0xda,0x26,0x84,0xf2,0x1c,0xf3,0xf7,0x45,0xed,0xe7,0x39,0x86,0x2f,0xe7,0x5a,0x9a,
+ 0xdc,0xcb,0xf1,0x6b,0xfc,0x3e,0xf9,0x79,0x5a,0x54,0xbf,0xe4,0xf0,0xef,0xb1,0xc7,
+ 0x1e,0xd1,0xb9,0x92,0xe5,0x5c,0x82,0x3f,0x69,0xed,0x9b,0x25,0x9e,0x6d,0x65,0x9f,
+ 0xb3,0x34,0xac,0x7c,0x40,0x01,0x28,0xd8,0xf2,0x37,0x03,0x00,0xa5,0x49,0x14,0x36,
+ 0xb4,0x96,0x37,0x20,0x8e,0xa2,0x77,0x4d,0x02,0x64,0xcb,0x02,0xb0,0x59,0xf7,0xae,
+ 0xef,0x44,0x00,0x88,0x5b,0x58,0x84,0xbf,0x0b,0x49,0x11,0x13,0xe1,0x12,0x97,0x83,
+ 0x2d,0xd2,0x22,0xaf,0xc6,0x82,0x4e,0x53,0x00,0x1a,0x39,0x86,0x1f,0x0b,0x75,0x9b,
+ 0x10,0x37,0xdf,0xd7,0x12,0x5f,0x21,0xe7,0xe6,0x33,0x9f,0xf9,0x8c,0xda,0x7d,0xf7,
+ 0xdd,0x3b,0x04,0x7f,0x5a,0x1e,0x7f,0xac,0xbc,0x98,0xe9,0x7c,0x36,0x81,0x6f,0xa6,
+ 0x01,0xa6,0xcd,0x2d,0x60,0x53,0x04,0x7c,0xa5,0x82,0x01,0x50,0x00,0x32,0x28,0x01,
+ 0x69,0x5e,0x00,0x19,0xb3,0x85,0xe6,0x16,0xf8,0xc9,0x07,0x65,0x32,0x05,0x30,0x69,
+ 0xc9,0x87,0xb8,0xfa,0xcd,0xc0,0xc0,0xe4,0xe7,0xf1,0x67,0x62,0x1d,0xa6,0x09,0x9f,
+ 0x01,0x03,0x06,0xa8,0xc1,0x83,0x07,0x77,0xa4,0x8a,0x55,0x63,0xf1,0xd6,0xdb,0x43,
+ 0x90,0x55,0x61,0xc8,0x4a,0xac,0x6c,0x8b,0x80,0x35,0xad,0xf5,0x58,0x98,0xe7,0x21,
+ 0xd4,0x43,0x05,0xbf,0x14,0xef,0xd9,0x79,0xe7,0x9d,0xa3,0xe1,0x16,0x97,0xe0,0x4f,
+ 0x0a,0x6e,0x53,0x51,0x72,0x59,0xf8,0xb6,0xf9,0x05,0x5c,0x73,0x0f,0xd8,0x84,0xbf,
+ 0x4d,0xe8,0x33,0x2c,0x00,0x28,0x00,0x35,0x0a,0x08,0x33,0x22,0x3c,0x7e,0x20,0x49,
+ 0x8b,0xdd,0x7d,0xd0,0x1a,0xb8,0x02,0x00,0x4d,0x97,0xbe,0xaf,0x78,0x8f,0xe9,0x01,
+ 0x10,0x21,0x21,0xcd,0x26,0xa0,0xe4,0x01,0x2f,0x82,0x45,0x04,0xbf,0x58,0x93,0x26,
+ 0x36,0x17,0x78,0x2d,0x63,0xe2,0xb5,0x5a,0xe4,0x79,0x58,0xfc,0xa6,0xab,0x3d,0xad,
+ 0x95,0x21,0xd5,0x4d,0xce,0xcd,0xb1,0xc7,0x1e,0xab,0x3e,0xfa,0xd1,0x8f,0xae,0x25,
+ 0xf8,0x5d,0x6e,0xfe,0xf8,0xbc,0xd9,0x8e,0xa1,0x29,0xec,0x5d,0x69,0x95,0xae,0x94,
+ 0xcb,0x50,0x65,0x00,0x00,0x05,0x20,0x27,0xe1,0xef,0xca,0x02,0x68,0x74,0xd1,0x15,
+ 0xc8,0xd7,0xd3,0x93,0x54,0x00,0x92,0x1e,0x80,0xf8,0xbd,0x39,0xf9,0x4f,0x52,0xc8,
+ 0x27,0xd7,0x15,0xff,0x4e,0x14,0x44,0x69,0x36,0x21,0x26,0x31,0x00,0xeb,0xad,0xb7,
+ 0x5e,0x24,0xfc,0x93,0xc2,0xc2,0x66,0x71,0xa7,0xbd,0xd6,0xea,0x21,0xb0,0x09,0x7c,
+ 0x9f,0x80,0xb7,0x29,0x17,0xb1,0x50,0xf4,0x09,0x76,0x97,0x22,0x54,0x6f,0xe4,0x98,
+ 0x4b,0xa4,0xbe,0xe4,0xe7,0x9b,0xaf,0xf1,0xfb,0xf8,0x6f,0x39,0x57,0x52,0x64,0xe9,
+ 0xee,0xbb,0xef,0x6e,0xb8,0xb7,0xaa,0x9e,0x9e,0x9d,0x32,0x7a,0xeb,0xe8,0x7f,0xfd,
+ 0xfb,0x3f,0x62,0xc4,0x88,0x48,0x29,0xfd,0xf9,0xcf,0x7f,0xde,0xfa,0x0a,0x80,0x6d,
+ 0x26,0x37,0xd3,0xf5,0x1f,0x2b,0x00,0xd0,0xfc,0x24,0x05,0x98,0x2d,0xf8,0x2f,0x64,
+ 0x82,0x20,0x53,0xf0,0x8b,0xa0,0x13,0xc1,0x6f,0x8b,0x1a,0x97,0x22,0x3f,0xeb,0xaf,
+ 0xbf,0x7e,0x14,0xfd,0x6f,0xbb,0xd9,0xaa,0xc9,0x53,0xaf,0x75,0x79,0xd7,0x32,0x36,
+ 0x61,0x1e,0xbb,0xe2,0xcb,0x2c,0xd4,0x6d,0x82,0xdd,0xfc,0x3c,0x8e,0xd6,0x0f,0xc1,
+ 0x76,0x1e,0xeb,0x91,0x7e,0x68,0xfe,0x3e,0xa9,0x90,0xd6,0x52,0x32,0xda,0xa6,0xfc,
+ 0x66,0x5d,0x1f,0xfd,0x6f,0xfd,0xfe,0x4b,0x6a,0xb2,0xb4,0x97,0x5e,0x7a,0xc9,0x1a,
+ 0xb7,0xd2,0x76,0x1e,0x80,0x64,0x1a,0xa0,0x2b,0x25,0x08,0x9a,0xd7,0x03,0x10,0x0b,
+ 0x32,0x9b,0xeb,0xdf,0x25,0xec,0xcd,0xe5,0xe3,0x71,0x7e,0x13,0xb1,0xf4,0x45,0xf0,
+ 0xc7,0x35,0xe0,0xeb,0x65,0x89,0x98,0xeb,0x4f,0x0a,0xf5,0xd8,0x62,0x4f,0x0a,0xf5,
+ 0xf8,0x7d,0x99,0x84,0xba,0x08,0xeb,0xd8,0x12,0x37,0x05,0x7a,0xdc,0xe4,0x3b,0x69,
+ 0xa1,0x9e,0x8d,0xd8,0x85,0x1f,0xda,0xc7,0x7a,0x5b,0x9c,0x8d,0xf0,0xec,0xd0,0x7f,
+ 0xfa,0x1f,0xdf,0x1b,0x52,0xef,0x42,0x26,0x01,0x7b,0xf7,0xdd,0x77,0x9d,0xfb,0xd2,
+ 0x68,0x65,0xa0,0xae,0x31,0x00,0xa6,0x85,0x88,0x02,0xd0,0x1a,0xc2,0x3f,0x79,0xf1,
+ 0x26,0x67,0x02,0x4c,0x9e,0x7f,0x9f,0x47,0x20,0x4e,0xff,0x32,0xc7,0xac,0x65,0xcc,
+ 0x56,0x84,0xbe,0xb8,0xfa,0xe3,0xc2,0x30,0xb5,0xa6,0xdd,0xd9,0x6e,0xec,0x38,0x28,
+ 0x4e,0x6e,0x5c,0xd9,0x8f,0x38,0x3e,0x25,0x29,0xd4,0x63,0xc1,0x5e,0x86,0xeb,0x36,
+ 0x16,0xea,0xa6,0x00,0x77,0x09,0xf5,0xd0,0x07,0x62,0x5a,0xdf,0x6c,0x16,0x4e,0x16,
+ 0x05,0xc7,0x36,0x47,0x43,0x96,0x07,0xac,0x69,0xc1,0x85,0xac,0x2f,0x6d,0x79,0x57,
+ 0xdd,0x7f,0xfa,0x4f,0xff,0xab,0xed,0x7f,0x5c,0xf3,0x42,0xbc,0x93,0x62,0xb0,0x98,
+ 0xbf,0x33,0x97,0x6f,0xf4,0xd4,0xd3,0x85,0xa7,0x01,0x9a,0x42,0xc0,0x6c,0xd0,0xdc,
+ 0x98,0x17,0x6d,0x2c,0xc0,0x5d,0xd1,0xfc,0xb6,0x80,0x3f,0x11,0xb4,0xa6,0xb5,0x2c,
+ 0xc2,0x6b,0xe8,0xd0,0xa1,0x91,0xfb,0xcc,0x56,0xcf,0xdd,0xdc,0xb6,0x2b,0xa5,0x2d,
+ 0x29,0xb8,0x6d,0xef,0xcb,0x2a,0xd4,0xcd,0xd7,0xb8,0x49,0x90,0xa3,0x58,0xf0,0xb6,
+ 0x60,0x47,0x9f,0xfb,0xbd,0x56,0x8b,0xad,0x56,0x0b,0xc9,0x7c,0x20,0xd7,0x2a,0x20,
+ 0xb2,0x3e,0xb0,0xe9,0x3f,0xfd,0x2f,0xb2,0xff,0x22,0xf8,0xc5,0x3b,0x39,0x70,0xe0,
+ 0xc0,0x75,0xac,0x7c,0x33,0x05,0x3a,0x6f,0xef,0x48,0xa9,0x87,0x00,0x4c,0x4f,0x80,
+ 0x39,0x55,0x2c,0xb4,0x86,0xfb,0x3f,0x16,0xe6,0xa6,0x07,0xc0,0x2c,0xe8,0x13,0x5f,
+ 0x07,0xb1,0x00,0x4e,0x5e,0x07,0xa2,0x39,0x0f,0x1b,0x36,0x2c,0xba,0x89,0x6c,0x37,
+ 0x5e,0xec,0x7e,0x8f,0xad,0xf3,0xa4,0x20,0x37,0x5b,0x99,0xdc,0xef,0x49,0x6b,0x3c,
+ 0x29,0xd8,0x63,0x81,0x2e,0x7f,0xc7,0x55,0x08,0x43,0x3c,0x1b,0x21,0xf1,0x33,0xb5,
+ 0x8e,0xa9,0xda,0x2c,0x26,0x73,0x0c,0xd5,0xb7,0xbe,0xe4,0x39,0xf0,0x59,0x60,0xbe,
+ 0xf5,0xf9,0x04,0x04,0xfd,0xa7,0xff,0x8d,0xe8,0xbf,0x54,0x21,0x95,0xfb,0x37,0xb6,
+ 0xf8,0x93,0x9e,0x4e,0xb3,0x48,0x55,0xfc,0x7b,0xb3,0xee,0x44,0xc8,0x74,0xd4,0x4d,
+ 0x39,0x04,0x60,0x1b,0x06,0x60,0x08,0xa0,0x35,0xbd,0x00,0xc9,0xa9,0x80,0xd3,0xa6,
+ 0xe9,0x8d,0xdd,0xec,0xc9,0xf3,0x2f,0x05,0x7b,0xc4,0xda,0x97,0x1b,0x49,0xbe,0x97,
+ 0x71,0x33,0x53,0xa0,0xbb,0xb2,0x01,0x1a,0x25,0xd4,0xa5,0x89,0x00,0x4f,0x0a,0x77,
+ 0xb3,0x89,0x50,0x0f,0x7d,0x20,0xc5,0xc7,0x2e,0x4f,0x8b,0x2b,0xcf,0x31,0xdb,0xbc,
+ 0x2b,0x1e,0x96,0x6d,0x7d,0xf4,0x9f,0xfe,0x67,0x59,0xbf,0x8c,0xef,0x0b,0xb1,0xc5,
+ 0xef,0xf2,0x7e,0xdb,0x94,0x0a,0x57,0x8d,0x8b,0x7a,0x2b,0x01,0x85,0x65,0x01,0x98,
+ 0x82,0xdf,0xa6,0x08,0xa0,0x00,0xb4,0x9e,0x17,0x20,0xad,0x0e,0x40,0x5a,0x80,0xdf,
+ 0xc2,0x85,0x0b,0xa3,0xd6,0x48,0xa1,0x2e,0xc2,0xdc,0x14,0xe0,0xb6,0xcf,0x92,0x42,
+ 0x3d,0xd4,0xfd,0x5e,0xc4,0x03,0x29,0xab,0x45,0x54,0xab,0x8b,0x33,0x0f,0x45,0x91,
+ 0xfe,0xd3,0xff,0x66,0xef,0x7f,0x3c,0x64,0x29,0x71,0x49,0xe6,0xba,0xcc,0xe7,0xa2,
+ 0x29,0xc8,0x45,0xc9,0x4f,0xd6,0xba,0x48,0x2a,0x02,0x2d,0x1b,0x03,0xe0,0xf2,0x02,
+ 0x30,0x17,0x77,0x6b,0xb1,0x74,0xe9,0xd2,0x8e,0xb9,0xdd,0x4d,0xa5,0x4f,0x4a,0xf7,
+ 0xd6,0xbb,0x28,0x4d,0x52,0xa8,0x27,0x05,0xb9,0x29,0xd4,0xe5,0xef,0xa4,0xfb,0xdd,
+ 0xf7,0x40,0x08,0x75,0x61,0x16,0xfd,0x40,0xf2,0xb9,0x64,0xab,0xd9,0x7e,0x96,0xf5,
+ 0xd1,0x7f,0xfa,0xdf,0x4e,0xfd,0x97,0xe7,0x97,0x3c,0xe3,0x24,0x28,0x59,0xe2,0x92,
+ 0x7c,0xc1,0x90,0xb6,0x00,0x3f,0x59,0x47,0x5c,0x8c,0x2a,0x7e,0x46,0xd9,0x02,0x03,
+ 0xeb,0xe5,0x05,0xa8,0x6b,0x16,0x80,0x4d,0x11,0x80,0xe6,0xb7,0xfe,0xa5,0x9c,0xf3,
+ 0x94,0x29,0x53,0x22,0xb7,0x7d,0x5c,0x7b,0x3f,0x3e,0xb7,0x22,0xf8,0xf3,0x1c,0x8f,
+ 0x8f,0x85,0xba,0x29,0xd8,0x6d,0xaf,0xd5,0x5a,0xea,0x45,0x51,0x6f,0x8b,0xab,0x6c,
+ 0xd0,0x7f,0xfa,0xdf,0x8c,0xfd,0x97,0xfd,0x93,0x79,0x47,0xc4,0xe2,0x97,0x52,0xe3,
+ 0x2e,0x81,0x6f,0xeb,0x53,0x72,0x5a,0x6a,0x79,0x4d,0xce,0x93,0x62,0x3e,0xd7,0x5a,
+ 0xc2,0x03,0x90,0xa6,0x15,0xe1,0x01,0x68,0x2d,0xc1,0x2f,0xd6,0xbe,0x4c,0xe7,0x3c,
+ 0x67,0xce,0x9c,0x75,0xbe,0x8b,0xdd,0x64,0x21,0x82,0x35,0x2e,0x3e,0x63,0x4b,0x6b,
+ 0x13,0x8d,0x5b,0xd6,0x13,0x97,0xf9,0xcd,0x22,0xd4,0x6d,0x43,0x0d,0x00,0x00,0xa1,
+ 0x88,0xe0,0x97,0xd8,0xa4,0xe1,0xc3,0x87,0x07,0x3d,0x13,0x5d,0x55,0x46,0x63,0x25,
+ 0x20,0xf6,0x82,0xc6,0x1e,0x47,0xd7,0xd4,0xd5,0x4d,0x1d,0x03,0x90,0xc5,0x0b,0x00,
+ 0xcd,0x85,0x08,0x74,0x11,0xf8,0x33,0x67,0xce,0x8c,0xac,0x7b,0x9b,0xd0,0x8d,0x3f,
+ 0x77,0x09,0x75,0xf3,0xbd,0x4d,0xa8,0x4b,0x4a,0x8d,0x78,0x16,0x92,0xe3,0x6c,0x66,
+ 0x1a,0x61,0xbd,0x27,0xf5,0x09,0x7d,0x00,0xd4,0xab,0x20,0x11,0xfd,0xa7,0xff,0xf4,
+ 0xbf,0x98,0xfe,0x4b,0x80,0x9f,0x4c,0x21,0x3e,0x72,0xe4,0xc8,0x54,0x41,0x9f,0x26,
+ 0xf4,0x6d,0x1e,0x8e,0xd8,0x28,0xf1,0xcd,0x0f,0xd2,0xb4,0x1e,0x80,0x34,0x8f,0x00,
+ 0xc2,0xbf,0x79,0x11,0x2b,0x7c,0xf6,0xec,0xd9,0x51,0x75,0x2b,0xb9,0x48,0x45,0x70,
+ 0x8b,0xbb,0x5f,0x52,0x5f,0x92,0xa9,0x6d,0x71,0x8e,0x7a,0x48,0x9e,0xba,0xcd,0x25,
+ 0x28,0x37,0x9e,0x6c,0x43,0xc6,0xc9,0x64,0x5d,0xa6,0x07,0x21,0x6b,0xe9,0xd1,0x5a,
+ 0x4a,0x95,0xe6,0xe5,0x01,0xcb,0x73,0x7b,0xf4,0x9f,0xfe,0xd3,0xff,0xe2,0xfa,0x2f,
+ 0xc6,0x8b,0xcc,0x24,0x6a,0x13,0xfc,0x69,0xbf,0xf5,0xd5,0x27,0x48,0xc6,0x00,0x24,
+ 0xd3,0x00,0x6d,0x05,0xd2,0x5a,0x2e,0x0d,0x30,0x54,0x39,0x80,0xf2,0x22,0x02,0x59,
+ 0xf2,0xf3,0xa5,0x25,0x49,0x73,0x8d,0xf9,0xc6,0xfc,0x92,0xaf,0x32,0x64,0x20,0x59,
+ 0x00,0x72,0x43,0xb8,0xdc,0xfc,0x8c,0xa1,0xd2,0x7f,0xfa,0x4f,0xff,0x8b,0xe8,0x7f,
+ 0x5c,0xd6,0x7a,0xc3,0x0d,0x37,0xb4,0x0a,0x72,0x57,0x8d,0x03,0x9b,0xa5,0x6f,0xfb,
+ 0x2c,0x19,0x48,0x98,0x4c,0x03,0x94,0xe7,0x5d,0x1c,0x08,0x68,0x2e,0xdb,0xb4,0x41,
+ 0x80,0x36,0x0b,0x1f,0xcb,0xbf,0xb9,0x49,0xe6,0xac,0x66,0x55,0xf0,0x5c,0xaf,0x71,
+ 0x09,0xde,0x38,0x43,0x20,0x9e,0x9a,0xd5,0x76,0x83,0x95,0xe1,0x81,0x51,0xf4,0xfa,
+ 0x5c,0x56,0x05,0xfd,0xa7,0xff,0xf4,0xbf,0x98,0xfd,0x8d,0x4b,0x7e,0x8b,0x61,0x63,
+ 0x7b,0xf6,0xb8,0x66,0xed,0x0c,0x11,0xce,0x36,0x2f,0x40,0xf2,0x39,0x17,0xb7,0x58,
+ 0x09,0xc8,0xb2,0xee,0xa6,0xf0,0x00,0xa4,0xb9,0x4b,0x50,0x06,0xda,0x8f,0xe4,0x78,
+ 0x97,0x5c,0xf4,0x22,0xf8,0xcd,0xe2,0x3e,0xc9,0x1b,0x34,0xd6,0x8c,0x5d,0xca,0x47,
+ 0xc8,0x18,0x9f,0xed,0x7d,0x2d,0x63,0x86,0x69,0xeb,0xab,0x66,0xcc,0xd1,0x65,0x51,
+ 0xd0,0x7f,0xfa,0x4f,0xff,0x8b,0xeb,0xbf,0x2c,0xb7,0x78,0xf1,0xe2,0x28,0xa5,0x2f,
+ 0x1e,0xae,0x34,0xc7,0xf3,0x5d,0x0a,0x88,0x69,0xd9,0x9b,0xcb,0xb8,0x9e,0x67,0x71,
+ 0x10,0xa0,0x78,0x53,0xa5,0x25,0xa7,0x47,0x6f,0x94,0x3c,0xac,0x5b,0x10,0x20,0xb4,
+ 0x2e,0x59,0x83,0x72,0xc4,0xdd,0x26,0xc2,0xdf,0xa6,0x65,0x9b,0xcb,0x27,0xf3,0x64,
+ 0x6b,0x2d,0xed,0xe9,0xb3,0x28,0x7c,0x0f,0x1c,0xdf,0xfa,0xcc,0xdf,0xfb,0xf6,0x3f,
+ 0x64,0xfd,0xf4,0x9f,0xfe,0xd3,0xff,0x7c,0xfb,0x2f,0xc1,0xc5,0x92,0x55,0x14,0x57,
+ 0xf0,0xb3,0x3d,0x87,0x5c,0x55,0xf9,0xd2,0x94,0x01,0x73,0x9a,0x61,0xdb,0xf2,0xe2,
+ 0x71,0x88,0x5b,0x5c,0x4b,0xc0,0xd6,0xea,0x15,0x14,0xd8,0x15,0xf1,0x05,0xb5,0x0a,
+ 0xff,0x2c,0xb5,0xbc,0x45,0xf0,0x27,0x0b,0xe9,0x84,0x7a,0x0c,0x42,0x2d,0x9a,0x10,
+ 0x6b,0x23,0xd4,0x22,0xc9,0xe2,0xd1,0xc8,0x63,0xff,0xe8,0x3f,0xfd,0xa7,0xff,0xc5,
+ 0xad,0x5f,0x2c,0x7e,0x09,0xf0,0x1b,0x31,0x62,0x84,0xd7,0x8b,0x60,0x13,0xf0,0xb6,
+ 0xdf,0x84,0xce,0x8c,0x98,0xac,0x03,0x20,0xcd,0x56,0x2d,0xb5,0x11,0xa0,0x00,0x40,
+ 0xcd,0x6e,0x7d,0x9f,0x86,0x1e,0xcf,0xca,0x17,0x47,0xbc,0x9a,0xb3,0xfb,0x99,0xeb,
+ 0x2a,0x4b,0xed,0xf2,0x46,0x1d,0x4b,0xfa,0x4f,0xff,0xe9,0x7f,0x7e,0xfd,0x97,0x5c,
+ 0x7e,0x79,0xe6,0xc8,0xec,0xa2,0xa6,0xd1,0x62,0xfe,0xd6,0x25,0xdc,0xcd,0x67,0x5d,
+ 0x5a,0xaa,0x9f,0x4d,0xf0,0xc7,0xdb,0x8b,0x85,0x7f,0xb2,0x35,0x52,0x11,0x40,0x01,
+ 0x80,0x9a,0x3d,0x00,0xe6,0xfb,0xe4,0x67,0xc9,0x62,0x40,0xa6,0x6b,0xd1,0xf6,0x80,
+ 0xf2,0x69,0xfc,0x3e,0x17,0x5f,0xd2,0x65,0xe8,0x73,0x49,0x66,0x75,0x79,0x16,0xe5,
+ 0x3d,0xa1,0xff,0xf4,0x9f,0xfe,0xe7,0xdf,0xff,0x78,0x02,0x31,0x29,0xe4,0x13,0x62,
+ 0xf1,0xa7,0x79,0x02,0x6c,0x16,0x7e,0x48,0x5a,0xa1,0xcd,0x18,0x2a,0x53,0x41,0x3c,
+ 0x14,0x00,0x28,0x04,0xb9,0xd0,0x45,0xdb,0x4d,0x1b,0xe3,0x0f,0x19,0x33,0xcc,0xf2,
+ 0x40,0xa8,0xc6,0xe2,0xc9,0x73,0x8c,0x2d,0xab,0x05,0x43,0xff,0xe9,0x3f,0xfd,0xcf,
+ 0xbf,0xff,0x22,0xf8,0xe3,0x0a,0x7e,0xae,0xe7,0x4f,0x9a,0x80,0x77,0xd5,0xf5,0x0f,
+ 0x71,0xf1,0xbb,0xde,0x27,0xff,0x4e,0x2a,0x01,0xf1,0x67,0x21,0x13,0x09,0xa1,0x00,
+ 0x40,0x29,0x3d,0x00,0x66,0x90,0x8c,0x69,0xf1,0x67,0x19,0x73,0xcc,0xd3,0xe2,0x71,
+ 0x3d,0x3c,0x8a,0xbc,0xb1,0xb2,0x6e,0x8f,0xfe,0xd3,0x7f,0xfa,0x9f,0x4f,0xff,0x65,
+ 0x39,0x29,0x22,0x26,0xc1,0x7d,0x32,0xd6,0x1f,0x52,0x99,0xaf,0x16,0xeb,0x3f,0x4d,
+ 0xe0,0x9b,0x25,0x80,0x93,0x53,0xa2,0xbb,0xac,0x7f,0x73,0x78,0x01,0x0f,0x00,0x94,
+ 0x16,0x29,0xd6,0xd3,0xa7,0x4f,0x1f,0xeb,0x0d,0xec,0x1a,0xe3,0xaf,0x37,0x14,0x4e,
+ 0xa1,0xff,0xf4,0xbf,0x3d,0xfa,0x3f,0x77,0xee,0x5c,0xd5,0xbb,0x77,0xef,0x75,0x4a,
+ 0x87,0x9b,0xc7,0xc1,0xf5,0x59,0x68,0x30,0x5f,0x9a,0xa2,0x63,0x4b,0x23,0x74,0x6d,
+ 0xcb,0x65,0xfd,0x13,0x03,0x00,0xa5,0x46,0x72,0x66,0xa5,0x04,0xb0,0x94,0xe9,0x8d,
+ 0xc7,0xb4,0xcc,0x22,0x16,0x79,0xd5,0xea,0xce,0xe3,0xfb,0x34,0x97,0x62,0xad,0x69,
+ 0x53,0x79,0xa7,0x65,0xd1,0x7f,0xfa,0x4f,0xff,0xb3,0xf5,0x4f,0x26,0x24,0x93,0x3e,
+ 0x4a,0x5a,0x9f,0x6f,0x3c,0xdd,0x66,0xe1,0xfb,0xac,0xfe,0x2c,0xfb,0x1e,0x32,0x4c,
+ 0xe0,0xb3,0xfe,0xeb,0x6e,0xc8,0x21,0xd2,0x20,0x0b,0x32,0xbe,0x26,0xda,0x36,0x00,
+ 0x40,0xa3,0x89,0x4b,0x91,0xbb,0x02,0x0a,0x93,0x82,0xd6,0x15,0xdd,0xef,0x12,0xc0,
+ 0x21,0x63,0xfa,0x69,0x93,0x02,0xd9,0xb6,0x5f,0x36,0x3a,0x73,0x09,0x01,0x00,0x40,
+ 0xb3,0x62,0x0b,0xde,0xb3,0x09,0x5e,0xdf,0xb8,0xbe,0xb9,0x2e,0x9f,0x77,0xc0,0x15,
+ 0x34,0x68,0x5a,0xf8,0xae,0xed,0xa3,0x00,0x00,0x00,0x00,0xd4,0x28,0xfc,0xd3,0x8a,
+ 0x01,0xa5,0x0d,0x61,0x98,0xcb,0x25,0xad,0x78,0xdf,0x04,0x3f,0x69,0xef,0x43,0xb6,
+ 0x8f,0x02,0x00,0x00,0x00,0x90,0x93,0x22,0x10,0x62,0xe9,0xa7,0xd5,0xed,0x37,0xbd,
+ 0x00,0xa1,0xc3,0x06,0x65,0x18,0xcf,0x47,0x01,0x00,0x00,0x00,0x70,0x58,0xfa,0x69,
+ 0x15,0xfb,0xd2,0xfe,0xb6,0xb9,0xf1,0xd3,0x52,0x18,0x51,0x00,0x00,0x00,0x00,0x1a,
+ 0xe4,0x09,0x30,0x3f,0xb3,0x15,0xe5,0xb1,0xa5,0xe8,0xd9,0x52,0xf9,0xd2,0x3c,0x05,
+ 0xc9,0xed,0xf8,0xb6,0x8f,0x02,0x00,0x00,0x00,0x50,0xb0,0x22,0xe0,0x4a,0x7f,0x0c,
+ 0x15,0xc4,0xa1,0xde,0x82,0x50,0x4f,0x01,0x59,0x00,0x00,0x00,0x00,0x39,0x5b,0xfc,
+ 0x36,0xeb,0xdd,0x54,0x06,0xcc,0xc9,0x7e,0x4c,0x2f,0x80,0x4d,0xc0,0xa7,0xd5,0x01,
+ 0x48,0xfb,0xcc,0xdc,0x46,0xa3,0x6b,0xfe,0xa3,0x00,0x00,0x00,0x40,0x4b,0x61,0x96,
+ 0xdd,0x4d,0x0a,0x63,0xb3,0x70,0x50,0x48,0x3a,0x60,0x35,0x11,0xfc,0xb6,0xe8,0x7f,
+ 0x5b,0x49,0x60,0x3c,0x00,0x00,0x00,0x00,0x39,0x7a,0x00,0xcc,0x48,0xfd,0x34,0x4b,
+ 0xbc,0x1a,0xcb,0xde,0xf4,0x34,0x98,0xca,0x84,0x2b,0x7b,0x20,0xb9,0x7d,0x3c,0x00,
+ 0x00,0x00,0x00,0x05,0x79,0x02,0x6c,0x02,0xd9,0x25,0xf4,0x43,0x2d,0x7b,0x5b,0x1c,
+ 0x41,0xc8,0xac,0x80,0xe6,0x90,0x43,0x9a,0xd2,0x81,0x02,0x00,0x00,0x00,0x50,0x85,
+ 0xe0,0x37,0x05,0xad,0xab,0x86,0x7f,0x56,0x0b,0xdc,0xcc,0x18,0xb0,0x09,0xf8,0x90,
+ 0xed,0x93,0x05,0x00,0x00,0x00,0x50,0x20,0xb5,0x14,0xe3,0xf1,0x15,0xf5,0x31,0x2d,
+ 0x7f,0x9f,0x82,0xe1,0xaa,0x23,0x50,0x36,0xda,0x76,0x32,0xa0,0x85,0x0b,0x17,0xaa,
+ 0x19,0x33,0x66,0x70,0xd7,0x00,0x00,0x14,0x44,0x8f,0x1e,0x3d,0xd4,0xa8,0x51,0xa3,
+ 0x0a,0x17,0xfa,0xae,0xb2,0xbc,0xe6,0xb2,0x69,0x13,0xfc,0x98,0x16,0x7e,0xb2,0x1c,
+ 0xb0,0x6b,0x08,0x20,0x74,0xfb,0x65,0xad,0x0e,0xd8,0x16,0x0a,0x80,0xcc,0x5d,0x3f,
+ 0x70,0xe0,0xc0,0xb5,0x3e,0x93,0x79,0xa3,0x37,0xde,0x78,0x63,0xe7,0x6f,0x1a,0x3d,
+ 0x97,0x76,0xad,0x53,0x75,0xe6,0xbd,0x7d,0xfa,0x4f,0xff,0xe9,0x3f,0xfd,0xaf,0x66,
+ 0x7b,0x32,0x83,0xe8,0xbc,0x79,0xf3,0x0a,0xdd,0xcf,0x10,0xeb,0xdf,0x95,0x31,0xe0,
+ 0x9a,0xd1,0x2f,0x6d,0x1e,0x80,0x6a,0xb6,0x8f,0x02,0xd0,0x20,0x7a,0xf7,0xee,0x5d,
+ 0x95,0x0b,0x26,0xed,0x37,0xbe,0x1b,0x34,0xaf,0x8b,0xdb,0xf7,0x5d,0x23,0xb7,0x4f,
+ 0xff,0xe9,0x3f,0xfd,0xa7,0xff,0x3e,0x96,0x2d,0x5b,0x56,0xb8,0x07,0x20,0xd4,0xca,
+ 0x77,0x29,0x34,0xe6,0xe4,0x3f,0xa1,0xde,0x86,0x90,0x80,0x40,0x14,0x80,0x06,0x5b,
+ 0xff,0x3d,0x7b,0xf6,0xcc,0xac,0xe1,0x86,0x68,0xe0,0x9d,0x3b,0x77,0xce,0xb4,0x7c,
+ 0xd6,0xf5,0xa7,0x5d,0x90,0xb5,0x6a,0xe8,0xf4,0x9f,0xfe,0xd3,0x7f,0xfa,0x5f,0x74,
+ 0xff,0xe5,0xb3,0x22,0x15,0x80,0x34,0xa5,0x25,0x2d,0x55,0xcf,0xd5,0x7f,0xdb,0x6f,
+ 0xcd,0xdf,0x64,0x39,0xc6,0x65,0x57,0x04,0x5a,0x5e,0x01,0xe8,0xd3,0xa7,0x8f,0xf3,
+ 0xe0,0xdb,0x4e,0x78,0xda,0xb4,0x92,0x3e,0x0d,0x3c,0xcf,0xe5,0xe3,0x9b,0x4b,0x5e,
+ 0x5d,0x37,0x78,0xf2,0xf7,0x21,0xcb,0xd3,0x7f,0xfa,0x4f,0xff,0xe9,0x7f,0x3d,0xfb,
+ 0xbf,0x64,0xc9,0x92,0xc2,0x5d,0xe2,0x3e,0x45,0x26,0x74,0x1c,0xdf,0xe5,0x59,0xc8,
+ 0x22,0xf8,0x43,0xb6,0x8f,0x02,0x50,0x27,0xba,0x74,0xe9,0xa2,0x7a,0xf5,0xea,0xd5,
+ 0xb4,0xfb,0x9f,0xbc,0x60,0x44,0x8b,0x5e,0xb4,0x68,0x51,0x74,0x43,0x2d,0x5f,0xbe,
+ 0x5c,0xad,0x5e,0xbd,0xba,0xe1,0x63,0x4d,0xf2,0xb0,0xe9,0xde,0xbd,0xbb,0xea,0xdb,
+ 0xb7,0xaf,0xea,0xdf,0xbf,0x7f,0x74,0xbc,0x8b,0xd6,0xe6,0x43,0x1e,0x4a,0xf5,0x72,
+ 0x91,0x36,0xc2,0x9a,0xa1,0xff,0xf4,0xbf,0x99,0xfa,0x2f,0xcf,0xab,0x7a,0xe1,0x9a,
+ 0xb0,0xc7,0x14,0xc2,0xbe,0xc0,0xbd,0x10,0x05,0xc1,0xa7,0x88,0xb8,0xb6,0x8f,0x02,
+ 0x50,0x47,0x44,0x30,0x55,0xeb,0x92,0xab,0xd5,0x65,0x97,0xd7,0xf2,0x0b,0x16,0x2c,
+ 0x50,0x73,0xe7,0xce,0xb5,0xba,0xd1,0x5c,0xa5,0x27,0xf3,0xd8,0x7e,0xc8,0xfa,0x62,
+ 0xf7,0x9e,0xb4,0x0f,0x3e,0xf8,0x40,0x0d,0x1b,0x36,0xac,0x43,0xe1,0xca,0xfb,0x78,
+ 0x55,0xa3,0x79,0x17,0xdd,0xff,0x7a,0x9c,0x7f,0xfa,0x4f,0xff,0x9b,0xb5,0xff,0xf2,
+ 0x5c,0x58,0xb9,0x72,0x65,0xdd,0xac,0xff,0xb4,0x59,0xfe,0x7c,0x0a,0x43,0x16,0x81,
+ 0xef,0x1a,0x3a,0xc8,0xba,0x7d,0x14,0x80,0x82,0xad,0x7f,0x09,0xfe,0xcb,0xe2,0x62,
+ 0x4b,0x8e,0x69,0xf9,0xbe,0x77,0xd5,0x99,0x4e,0x5e,0x04,0xbe,0x31,0xb2,0x34,0x8d,
+ 0x7d,0xe9,0xd2,0xa5,0x6a,0xe6,0xcc,0x99,0x6b,0x34,0x68,0xad,0x41,0x76,0x1e,0xa0,
+ 0xbf,0x13,0x85,0xa6,0x97,0x6e,0x5d,0xa3,0xcf,0x72,0xbc,0x8d,0xd6,0xac,0x2f,0xbe,
+ 0x50,0x3b,0x25,0x3e,0x73,0x2d,0x2f,0x1e,0x88,0x65,0xda,0x13,0x31,0x4f,0x55,0x74,
+ 0x5b,0xb5,0x6a,0x95,0x9a,0x3e,0x7d,0x7a,0x94,0xf2,0x23,0xa9,0x3f,0xb5,0xf6,0x3f,
+ 0xeb,0x03,0xc8,0x77,0xfc,0x9b,0xed,0xfc,0xd3,0x7f,0xfa,0xdf,0xec,0xfd,0x5f,0xbc,
+ 0x78,0x71,0x5d,0xad,0xff,0xb4,0x4a,0x7f,0x59,0xc7,0xef,0x43,0xbc,0x0c,0x59,0xb7,
+ 0x8f,0x02,0x50,0x47,0xfa,0xf5,0xeb,0xd7,0x71,0xf1,0x56,0xeb,0x32,0x2b,0x72,0x8c,
+ 0xcc,0x76,0xe3,0xc4,0x17,0x91,0xa4,0xcc,0xbc,0xf7,0xde,0x7b,0x4a,0xae,0xa1,0x2e,
+ 0x5d,0xd7,0x53,0x9d,0xbb,0x0c,0xd1,0xa2,0xb8,0x6b,0x87,0x80,0x36,0xc5,0xf5,0x3a,
+ 0xdb,0x36,0xc4,0xb7,0x7f,0x79,0x7d,0x63,0xeb,0x7f,0x9d,0xd6,0xd4,0x85,0x8a,0xdf,
+ 0x57,0x1c,0xbf,0xd0,0xea,0x88,0xfe,0xa6,0xb3,0xfe,0xd7,0x55,0x2b,0x5a,0x7d,0xb4,
+ 0x12,0x30,0x40,0xad,0x5a,0x39,0x35,0xda,0xff,0xd9,0xb3,0x67,0xab,0x0d,0x37,0xdc,
+ 0xb0,0xa6,0xfe,0xdb,0x1e,0x80,0x59,0x6f,0xa2,0x3c,0x5c,0xa6,0x8d,0x3a,0xff,0xf4,
+ 0x9f,0xfe,0x37,0x7b,0xff,0xeb,0x15,0xfc,0x97,0xe6,0xda,0x4f,0x9b,0x07,0x20,0xab,
+ 0x20,0x77,0x79,0x40,0xab,0xd9,0x3e,0x0a,0x40,0xc1,0x88,0xe0,0x4f,0x0b,0xfe,0x2b,
+ 0x83,0xcb,0xce,0x75,0x31,0x8b,0xd5,0x3f,0x67,0xce,0x1c,0xdd,0x87,0x1e,0xaa,0x5b,
+ 0x8f,0xd1,0xfa,0xb5,0xa7,0xea,0xd6,0xbd,0x97,0x1a,0x32,0x64,0x13,0xd5,0xb7,0xff,
+ 0x50,0x6d,0x5d,0xf7,0xd5,0x42,0xb7,0x5b,0x6d,0xdb,0xce,0x6a,0xf0,0x1b,0xac,0x5a,
+ 0xb5,0x42,0x2d,0x59,0x3c,0x57,0xbd,0x37,0xe3,0x15,0xb5,0x68,0xe1,0x2c,0xd5,0x45,
+ 0x89,0x77,0x42,0xbb,0xfb,0x56,0xbc,0x17,0x69,0xfd,0xe2,0x0d,0x90,0xec,0x8b,0x6a,
+ 0xfa,0x9f,0xe5,0x01,0x96,0x87,0xc5,0x50,0xb6,0xf3,0x4f,0xff,0xe9,0x7f,0x2b,0xf4,
+ 0x5f,0xe2,0x95,0xea,0x29,0xf4,0x7c,0x81,0x7c,0x21,0x9f,0xdb,0x3c,0x30,0xbe,0xac,
+ 0x82,0x6a,0xbc,0x05,0x28,0x00,0x75,0xb0,0xfe,0xcd,0x13,0x54,0x6f,0x97,0x5d,0x9a,
+ 0xa6,0xea,0xba,0xa1,0x44,0xf8,0xcb,0x78,0x7f,0x97,0xae,0xfd,0x54,0xf7,0x9e,0x1b,
+ 0xe9,0xfd,0xe9,0xa6,0x86,0x0d,0xdf,0x5a,0xad,0x3f,0x74,0x33,0xfd,0x7d,0x9e,0x55,
+ 0x9b,0x3d,0x3e,0x02,0x8f,0x82,0xd0,0xa5,0x6b,0x17,0xd5,0xbd,0xc7,0x70,0xd5,0x7f,
+ 0xe0,0x30,0x35,0x79,0xd2,0x23,0x6a,0xc1,0xfc,0xf7,0x54,0xd7,0xee,0x43,0xb4,0x17,
+ 0xe0,0xfd,0xa8,0x3f,0x12,0xa4,0x68,0x2a,0x00,0x45,0x8f,0xb1,0x66,0x3d,0xfe,0x65,
+ 0x3c,0xff,0xf4,0x9f,0xfe,0xb7,0x4a,0xff,0xeb,0xe5,0xfe,0xb7,0xf5,0x3b,0x4b,0xb4,
+ 0x7e,0x9a,0xa5,0xef,0x2b,0xfe,0x13,0xb2,0x7d,0x62,0x00,0xea,0x8c,0x1c,0x70,0x57,
+ 0xf0,0x5f,0xd6,0xb4,0x9b,0xac,0x63,0x62,0x69,0x2e,0x3d,0xdb,0xf6,0x93,0x7f,0x8b,
+ 0xdb,0x5f,0x2c,0xff,0x2e,0x5d,0xfb,0xaa,0xee,0xbd,0xc6,0xa8,0x6e,0xdd,0x7a,0xab,
+ 0x4d,0x37,0xdb,0x53,0xf5,0xee,0x33,0xd8,0x2b,0x91,0x65,0x35,0xb2,0x1b,0xf1,0xea,
+ 0xe2,0xf7,0xa1,0xd7,0x9d,0xef,0xf7,0x69,0xea,0xc2,0x88,0x91,0xdb,0xaa,0x89,0xaf,
+ 0xce,0xd4,0xef,0xba,0xeb,0x0f,0xbb,0xea,0xcf,0x57,0xae,0x75,0xbc,0x42,0xfb,0x1f,
+ 0x32,0x06,0x9a,0xf6,0x1a,0x62,0x2d,0x95,0xf9,0xfc,0xd3,0x7f,0xfa,0xdf,0x2a,0xfd,
+ 0x97,0xf8,0xa5,0xa2,0x83,0xff,0xf2,0xb4,0xb4,0x6d,0xe7,0xc9,0x54,0x02,0x5c,0xdb,
+ 0xb2,0x0d,0xd3,0x34,0x53,0x55,0xc0,0x96,0x53,0x00,0xc4,0xf5,0x5f,0x6d,0x3a,0x9a,
+ 0x6f,0x8c,0x2e,0xcf,0x1b,0x2e,0xb9,0x3e,0x19,0x2b,0x7b,0xff,0xfd,0xf7,0x75,0xa0,
+ 0x5f,0x37,0xd5,0xa3,0xf7,0x87,0xc2,0x7f,0xf3,0x8f,0xec,0xaf,0x23,0xea,0x07,0x04,
+ 0x5a,0x0f,0x1e,0x01,0x5e,0x6b,0xd1,0x90,0x14,0x05,0xa0,0x4f,0xbf,0xc1,0x3a,0x46,
+ 0xa1,0xf3,0x5a,0xdb,0x8c,0xad,0xff,0x3c,0xc7,0x48,0xeb,0xe1,0x32,0x6d,0xd4,0xf9,
+ 0xa7,0xff,0xf4,0xbf,0x95,0xfa,0x2f,0x99,0x4b,0x65,0xc3,0x56,0xe3,0x3f,0xcd,0xb3,
+ 0x92,0x66,0xc1,0x9b,0xb3,0x00,0x86,0x0e,0x3b,0x50,0x07,0xa0,0x0e,0x48,0x3e,0x7a,
+ 0x11,0xc5,0x17,0xaa,0xd1,0xf8,0x43,0x5d,0x78,0xe2,0xfa,0x97,0xf7,0xbd,0xfb,0x8d,
+ 0xd1,0xae,0xf4,0x1e,0x6a,0xd3,0x2d,0x3e,0xae,0x06,0x0e,0xde,0xc0,0x69,0x81,0x7b,
+ 0xa3,0xfc,0x8c,0xef,0xd7,0x55,0x08,0xd6,0x56,0x18,0xd6,0xdd,0xd9,0xf4,0xf5,0x25,
+ 0xbf,0xef,0xb4,0x6c,0x55,0x34,0x24,0x50,0x59,0xbd,0x4a,0xff,0xbd,0xaa,0xa3,0xf6,
+ 0x82,0xad,0x22,0x58,0x9e,0x69,0x47,0x59,0x5d,0xa4,0x65,0x3e,0xff,0xf4,0x9f,0xfe,
+ 0xb7,0x4a,0xff,0x25,0xfe,0x47,0x3c,0x00,0x8d,0x16,0xf4,0xe6,0xdf,0xbe,0xf3,0xe4,
+ 0x9a,0xe2,0x37,0xcd,0xf5,0x1f,0xe2,0xe6,0xb7,0xc5,0x12,0xa0,0x00,0x14,0x84,0x08,
+ 0x1e,0x29,0x4c,0x13,0xe2,0x52,0xab,0x56,0x3b,0x4e,0x8b,0xda,0xad,0x26,0xed,0x46,
+ 0x66,0x25,0x94,0x80,0x99,0x6e,0xdd,0xfb,0xab,0x6e,0x3d,0x07,0xaa,0x01,0x03,0x86,
+ 0xe9,0x31,0xff,0x31,0x1e,0x81,0xed,0x93,0xf0,0x3e,0x05,0x21,0x9b,0xcf,0x3f,0xed,
+ 0xeb,0x45,0x73,0x66,0x69,0xcf,0x45,0x67,0xb5,0x72,0xf9,0xdc,0xd4,0xe1,0x97,0x5a,
+ 0x5d,0x8c,0xb6,0xf3,0x91,0xe7,0x18,0x6d,0xa3,0xce,0x3f,0xfd,0xa7,0xff,0xad,0xd4,
+ 0x7f,0xc9,0x02,0x6a,0x24,0x2e,0xc1,0x6e,0x73,0xed,0xbb,0xbe,0x77,0x1d,0xab,0x3c,
+ 0x82,0x0a,0x51,0x00,0xea,0x60,0xfd,0xe7,0xe1,0x22,0xcb,0x9a,0x96,0xe3,0x5b,0xbf,
+ 0xcb,0x85,0x26,0xe3,0xfe,0xf2,0xda,0xa3,0xcf,0x88,0xe8,0x06,0x1a,0xb9,0xf1,0xf6,
+ 0xaa,0x6b,0xb7,0xae,0x3e,0x35,0x37,0xd5,0xa4,0x5f,0x47,0xfe,0x9b,0xfb,0xee,0x75,
+ 0x01,0x84,0x33,0x67,0xf6,0x9b,0xaa,0xb3,0x5e,0xcf,0x8a,0xe5,0x1f,0xde,0xf8,0x32,
+ 0xeb,0x62,0x5a,0xfc,0x45,0xb5,0x63,0xa2,0x45,0xaf,0xaf,0x51,0xe7,0x9f,0xfe,0xd3,
+ 0xff,0x56,0xe9,0xbf,0x7c,0x27,0x41,0xcc,0x32,0x04,0x58,0x6f,0x61,0x17,0x3a,0xd5,
+ 0xaf,0xcf,0xb5,0xef,0x12,0xea,0x21,0x13,0x05,0x85,0x4c,0x42,0x84,0x02,0x50,0x10,
+ 0xe2,0x7a,0x96,0xf1,0xff,0xa2,0xb4,0x49,0xdf,0x0d,0x14,0xe2,0x82,0x33,0xdf,0x4b,
+ 0xb4,0xbc,0x44,0xcb,0x76,0xe9,0xda,0x53,0x47,0xfd,0x0f,0xd4,0x1e,0x8c,0xfe,0x6a,
+ 0xc8,0x06,0xeb,0xce,0x9d,0xbd,0x6e,0x96,0xde,0xda,0x9f,0x7c,0x98,0xb7,0xdf,0xc9,
+ 0x99,0xb7,0x9f,0xfd,0x6e,0x5a,0xdb,0x63,0xb0,0x8e,0xc3,0x60,0xcd,0xd7,0x8b,0x17,
+ 0xcf,0x57,0xf3,0xe7,0xcd,0xd0,0xdf,0x2d,0xd7,0x1e,0x80,0xf9,0x1d,0x65,0x81,0xab,
+ 0xb1,0x50,0x8a,0x3e,0x3f,0x65,0x3c,0xff,0xf4,0x9f,0xfe,0xb7,0x52,0xff,0x65,0xec,
+ 0x5f,0xa6,0xfe,0x15,0x43,0x26,0xef,0xb2,0xe0,0x59,0x85,0xbf,0xad,0x04,0xb0,0x4d,
+ 0x90,0x87,0x94,0x02,0x8e,0x97,0x0b,0x55,0x32,0x5c,0xdb,0xa7,0x14,0x70,0x81,0xc4,
+ 0xae,0xe7,0x22,0xf3,0x74,0xf3,0xbe,0x61,0xa4,0x7c,0xae,0xbc,0xf6,0xea,0x33,0x3c,
+ 0xd2,0x9a,0x47,0x8d,0xd9,0x56,0xf5,0xe8,0xd9,0xc3,0x27,0x8f,0xbd,0x31,0x01,0xbe,
+ 0x11,0x01,0xef,0xfa,0x4d,0x07,0x81,0x23,0x4b,0x70,0xea,0xdb,0x93,0x55,0x67,0x3d,
+ 0xfe,0xbf,0x64,0xd1,0xcc,0xe8,0xf3,0xc1,0x83,0x07,0xa7,0x06,0x0d,0x65,0x7d,0x60,
+ 0x56,0xf3,0x10,0x68,0xa6,0xf3,0x4f,0xff,0xe9,0x7f,0x2b,0xf5,0x5f,0xbc,0x99,0x82,
+ 0x64,0x00,0xd4,0x53,0x01,0xb0,0x29,0x02,0x2e,0x81,0xee,0x1a,0x0e,0x08,0x89,0xdc,
+ 0xb7,0x05,0x11,0x26,0xcf,0xb1,0x6f,0xfb,0x0c,0x01,0x14,0x48,0x32,0xf8,0x2f,0xe4,
+ 0xa0,0xe7,0xad,0x95,0x65,0x1d,0xc3,0x93,0xcf,0x25,0xf5,0xaf,0x73,0xe7,0xae,0xaa,
+ 0x57,0xbf,0xa1,0xda,0x0b,0xd0,0x4d,0x8d,0x18,0xbd,0x95,0xea,0xa2,0xdd,0xff,0x99,
+ 0x03,0x86,0x3c,0x02,0xde,0x94,0xe8,0x59,0x7f,0x6f,0x53,0x40,0x56,0xad,0x5a,0xa9,
+ 0x66,0xce,0x98,0xa4,0xd7,0xa3,0xf3,0xfe,0x17,0xcf,0x8a,0x14,0x98,0x41,0x83,0x06,
+ 0x75,0xdc,0xf8,0x21,0x63,0x98,0x3e,0x17,0x66,0x35,0x0f,0xdf,0x66,0x39,0xff,0xf4,
+ 0x9f,0xfe,0xb7,0x52,0xff,0xc5,0xf2,0x97,0x58,0x26,0x41,0x26,0x2a,0xab,0xa7,0xd0,
+ 0x4f,0xfb,0xdb,0xf7,0xbb,0x50,0xb7,0x7e,0x88,0xc2,0x15,0xb2,0x3e,0x14,0x80,0x22,
+ 0x3a,0xa1,0x85,0x4f,0xcf,0x9e,0x3d,0x53,0x35,0xf2,0x90,0x1b,0xb0,0x9e,0x16,0x80,
+ 0xb8,0xcb,0x24,0x62,0xb6,0x67,0x1f,0x11,0xfe,0xdd,0xd5,0xf0,0x91,0x9b,0xab,0x9e,
+ 0xbd,0x7a,0xdb,0x4d,0xfa,0x8c,0x95,0xfa,0x2c,0x57,0x5e,0x7a,0x61,0x00,0x5f,0x4c,
+ 0x80,0x25,0xe6,0xe0,0x7d,0x2d,0xfc,0x57,0xad,0x5a,0xae,0x96,0x2f,0x9d,0xad,0x3f,
+ 0x5e,0xa9,0x83,0x17,0x07,0xae,0x55,0xfc,0xa7,0x0c,0xb3,0x91,0x95,0xf9,0xfc,0xd3,
+ 0x7f,0xfa,0xdf,0x4a,0xfd,0x9f,0x35,0x6b,0xd6,0x5a,0x82,0x4e,0x94,0x00,0x5f,0x29,
+ 0xf6,0x3c,0xfb,0x99,0x16,0xdc,0x57,0x6b,0xe0,0x63,0x5a,0xd6,0x80,0xcb,0xf5,0x6f,
+ 0x53,0x32,0xf0,0x00,0x14,0x84,0xad,0xf2,0x5f,0x51,0xee,0xa5,0xbc,0x2a,0x77,0xc5,
+ 0xee,0xb2,0x3e,0x03,0x46,0x44,0x51,0xf4,0xa3,0x36,0xd9,0x36,0xb2,0xfe,0x83,0x4c,
+ 0xf0,0x75,0xae,0x54,0x95,0x29,0x2d,0x30,0x8e,0x17,0xe8,0xe4,0x8a,0x21,0x08,0x48,
+ 0x03,0x9c,0xfe,0xce,0xab,0xd1,0x7e,0x2f,0x5d,0x38,0x23,0xfa,0x68,0xc8,0x90,0x21,
+ 0x35,0xcd,0x4e,0x58,0x76,0xca,0x58,0x3a,0x96,0xfe,0xd3,0xff,0x32,0xf4,0x5f,0x84,
+ 0xbd,0x04,0xff,0x25,0xa9,0x97,0x02,0xe0,0x12,0xf4,0x21,0x69,0x7a,0x2e,0xa1,0x6d,
+ 0xf6,0xd3,0x57,0x10,0xc8,0xdc,0x7e,0x51,0x13,0x11,0xa1,0x00,0x38,0x88,0x03,0xcf,
+ 0x42,0x35,0xb4,0x6a,0x6f,0xc8,0xbc,0xa2,0x74,0x65,0x86,0x3f,0xc9,0x95,0xed,0xde,
+ 0xb3,0xbf,0xea,0xd9,0x7b,0xa0,0xea,0x3f,0x68,0x03,0xb5,0xfe,0xb0,0x51,0x89,0x20,
+ 0x3e,0xa3,0xd2,0x5f,0x36,0xf9,0xee,0xbf,0x99,0x55,0x70,0x9a,0xbf,0xf5,0xfb,0x0f,
+ 0xe6,0xea,0x9a,0xff,0x0b,0x67,0xab,0xd5,0xab,0x16,0xeb,0xe0,0xbf,0x85,0xd1,0xac,
+ 0x8b,0xe6,0xcc,0x8b,0xd5,0x4c,0x1e,0x52,0x4b,0x29,0xd5,0x66,0x3a,0xff,0xf4,0x9f,
+ 0xfe,0xb7,0x52,0xff,0x25,0x96,0x49,0xbc,0x99,0x66,0x7f,0xea,0xa5,0x98,0xa4,0x09,
+ 0xf9,0xb4,0x7d,0xb1,0xa5,0x4a,0xda,0xac,0xff,0x10,0x2f,0x43,0x5a,0x10,0x21,0xa5,
+ 0x80,0x0b,0x24,0x9e,0xf8,0xc7,0x76,0xe0,0x6b,0x99,0xcd,0xaa,0xd6,0x1b,0x3a,0x8d,
+ 0xd8,0xfa,0xef,0x3b,0x68,0x64,0x64,0x45,0x6f,0x3c,0x76,0x87,0xa8,0x98,0x8e,0x5b,
+ 0x40,0xa7,0x5b,0xec,0xd9,0x67,0xff,0xab,0x6d,0x7d,0xd3,0xdf,0x7e,0x39,0xda,0xef,
+ 0xc5,0xf3,0xdf,0xb5,0x5a,0xff,0xb5,0xb8,0xdb,0x42,0x2b,0x9f,0xd9,0xc6,0x5c,0x9b,
+ 0xe5,0xfc,0xd3,0x7f,0xfa,0xdf,0x4a,0xfd,0x4f,0xba,0xff,0x93,0x1e,0x80,0x7a,0x7b,
+ 0x28,0x42,0x2c,0xfc,0xe4,0xe7,0xe6,0x7b,0x97,0x3b,0xdf,0x65,0xbd,0xbb,0x84,0x7c,
+ 0x33,0x4c,0x02,0xd4,0x32,0x0a,0x80,0x59,0x75,0xae,0x2c,0xb3,0x67,0xb9,0x10,0x4d,
+ 0x79,0xfe,0xfc,0xf9,0xfa,0xc6,0xd5,0x69,0x8b,0xfd,0x87,0xe9,0x71,0x73,0x3d,0xfe,
+ 0xbf,0xd1,0x16,0x5a,0x01,0xe8,0x9a,0x10,0xc0,0x6b,0x0b,0xe8,0xec,0x4f,0x93,0x8c,
+ 0x1a,0x41,0x06,0x9f,0xc2,0xd2,0xc5,0x0b,0xd4,0xf4,0x77,0x27,0xea,0xca,0x7f,0xcb,
+ 0xd5,0x92,0x05,0xef,0x45,0xa9,0x7f,0xae,0xdc,0xff,0x7a,0xb8,0xff,0xb2,0x3c,0x40,
+ 0xcb,0x70,0xfe,0xe9,0x3f,0xfd,0x6f,0xa5,0xfe,0x4b,0xe0,0x9f,0x6d,0xe2,0x9f,0x7a,
+ 0x2b,0x00,0xa1,0x4a,0x4b,0xd6,0x69,0x80,0x4d,0x8f,0x4a,0xda,0xd0,0x42,0xd9,0x27,
+ 0xfe,0x69,0x49,0x05,0x20,0x76,0x3d,0x17,0x3d,0xdb,0x96,0xef,0x86,0x0b,0x8d,0xdc,
+ 0x97,0xca,0x7f,0x72,0x73,0xf4,0xec,0x33,0x44,0xd7,0xd0,0xef,0xaa,0x06,0x0e,0x19,
+ 0xa6,0x03,0x18,0x7b,0xa7,0xbb,0xef,0x7c,0x63,0xf4,0xb5,0xdf,0x29,0xc1,0xb3,0x09,
+ 0xbd,0x36,0xe1,0x51,0xb9,0xbd,0xd5,0xfc,0xd9,0x53,0xa2,0x1d,0x18,0x3a,0x74,0x68,
+ 0x14,0xf9,0x9f,0xf7,0x6c,0x65,0x79,0xbb,0x48,0xcb,0x72,0xfe,0xe9,0x3f,0xfd,0x6f,
+ 0xa5,0xfe,0x4f,0x9f,0x3e,0xdd,0xb9,0xbe,0x7a,0x06,0x02,0xfa,0x04,0x79,0x9a,0x27,
+ 0x20,0xad,0xef,0x69,0xa5,0x7f,0x7d,0xb5,0x02,0x6c,0xdb,0x47,0x01,0x28,0x40,0x01,
+ 0x88,0x2f,0x32,0xdf,0x0d,0x9a,0xa5,0x54,0xa7,0x4d,0x9b,0x4e,0xfb,0x3b,0x74,0xb6,
+ 0xac,0xb8,0x4e,0x76,0xf7,0x9e,0x7d,0xa2,0x8a,0x7f,0x3d,0x7b,0xeb,0xf2,0xc5,0x3a,
+ 0xf7,0x3f,0x7d,0xf6,0xbe,0xb5,0x25,0xfe,0xba,0x0a,0x42,0xb6,0x98,0x80,0x75,0xe4,
+ 0xbb,0x27,0xe9,0x20,0x5e,0x7e,0xd2,0x2b,0x4f,0xab,0xf7,0xa7,0x4f,0x56,0xcb,0x16,
+ 0xcf,0x56,0x8b,0xe6,0xbd,0x1b,0x0d,0xbd,0x48,0xea,0x5f,0x96,0xfe,0x87,0x96,0x52,
+ 0x0d,0x79,0x00,0x65,0x7d,0x40,0x97,0xe1,0xfc,0xd3,0x7f,0xfa,0xdf,0x2a,0xfd,0x17,
+ 0x4f,0xa6,0xb4,0x2c,0x6e,0xf9,0x7a,0x0f,0x09,0xf8,0xf2,0xf5,0xb3,0x0e,0x2b,0x84,
+ 0xf6,0x2b,0x6d,0xfb,0x28,0x00,0x39,0xd2,0xa3,0x47,0x8f,0xaa,0xdc,0x41,0x59,0x6b,
+ 0x79,0xe7,0x35,0x3b,0x97,0x14,0xc9,0x88,0x22,0x4b,0xf5,0xb6,0x3a,0x75,0xd6,0x1e,
+ 0x81,0x05,0x73,0xa2,0xf1,0xff,0x0f,0x17,0x0b,0xf3,0xd9,0x67,0x4e,0x0a,0xf0,0xcd,
+ 0x0e,0xe8,0xf1,0x30,0xc8,0x62,0x13,0x27,0x3c,0xa5,0x5e,0x79,0xe1,0x21,0x1d,0xf4,
+ 0xb7,0x40,0xcd,0x7e,0xe7,0xdf,0x51,0xca,0xdf,0xe8,0xd1,0xa3,0x9d,0x0f,0x8c,0x3c,
+ 0x8e,0x57,0x91,0x63,0x98,0x8d,0x3a,0xff,0xf4,0x9f,0xfe,0xb7,0x42,0xff,0xc5,0xba,
+ 0x7f,0xfb,0xed,0xb7,0x53,0xb7,0x29,0xcb,0x14,0x5d,0x10,0x28,0xab,0xf5,0x6e,0x5a,
+ 0xe3,0x36,0xcf,0x4a,0xa8,0x80,0x77,0x79,0x5d,0x6c,0xdb,0x60,0x08,0xa0,0xa0,0x31,
+ 0x1e,0x19,0x83,0x0e,0xd5,0xe6,0xb2,0xce,0xaf,0x9d,0xd7,0x85,0x98,0x44,0x6e,0x08,
+ 0xf9,0x6c,0xc5,0xd2,0x85,0xfa,0x55,0xa7,0xd1,0x2d,0x59,0xa4,0xa6,0x4e,0x7e,0x49,
+ 0x6d,0xbc,0xf9,0x0e,0xa5,0x4c,0x29,0x5a,0xb2,0x68,0xbe,0x7a,0xf1,0xe9,0x7b,0xd5,
+ 0xbb,0x6f,0xbf,0xa6,0xf7,0x79,0x81,0x9a,0x31,0xe5,0x99,0x48,0x55,0xd8,0x64,0x93,
+ 0x4d,0xd6,0xaa,0xbd,0x90,0xb7,0xcb,0xb1,0x1e,0x95,0xd2,0x1a,0x71,0xfe,0xe9,0x3f,
+ 0xfd,0x6f,0x85,0xfe,0xbf,0xf5,0xd6,0x5b,0xd1,0x34,0xe6,0x3e,0x05,0xa0,0x1e,0x32,
+ 0xc0,0xe6,0x09,0xb1,0xb9,0xf7,0x43,0xa6,0xf0,0xcd,0xea,0xaa,0x77,0x55,0x07,0x74,
+ 0x05,0x20,0xa2,0x00,0xe4,0x48,0x2c,0x4c,0x43,0x6e,0xa0,0xac,0x95,0xba,0x7c,0x17,
+ 0x5a,0xb5,0xeb,0x8f,0x85,0xe6,0xd2,0x45,0x73,0xd4,0xaa,0x15,0x8b,0xf5,0x0c,0x80,
+ 0x7d,0xd5,0x8b,0xcf,0xfc,0x43,0x2d,0x5e,0x32,0x5f,0x8d,0xd9,0x6c,0x3b,0xd5,0xa7,
+ 0xef,0x20,0x1d,0x1b,0xd0,0xc5,0x67,0xd3,0x67,0xf2,0x10,0xac,0x1b,0x54,0xb8,0xf6,
+ 0x12,0xe6,0xf2,0xcb,0x97,0x2e,0x56,0x73,0x67,0xcf,0x50,0xef,0xbc,0xf9,0x8a,0x56,
+ 0x4e,0x26,0x44,0x55,0xff,0x16,0xcc,0x9d,0xa6,0x66,0x4d,0x9d,0xa0,0xfb,0xd4,0x49,
+ 0x8d,0xd1,0xc2,0x5f,0xdc,0xff,0xb5,0x1c,0x5f,0x9f,0x45,0xe3,0x73,0x49,0x66,0x7d,
+ 0x80,0x96,0xe5,0xfc,0xd3,0x7f,0xfa,0xdf,0xec,0xfd,0x7f,0xff,0xfd,0xf7,0xa3,0xe6,
+ 0xa3,0x1e,0x0a,0x40,0x5a,0x6a,0x5e,0x9a,0x25,0x9e,0x56,0x1b,0x20,0xc4,0xe2,0xf7,
+ 0x29,0x6a,0xd5,0x2a,0x14,0x28,0x00,0x19,0xb5,0xbf,0x50,0x97,0x59,0x88,0x8b,0xad,
+ 0xd6,0xd9,0xbf,0x42,0xd2,0x74,0x64,0xcc,0x5c,0x02,0x67,0xe4,0xe6,0x78,0xef,0xad,
+ 0x7f,0xa9,0x91,0x9b,0x8f,0x8b,0x2a,0x01,0x4e,0x7e,0xf5,0x69,0x35,0x45,0xb7,0x10,
+ 0x17,0x7f,0xee,0xc7,0x31,0x45,0xbd,0x58,0xb6,0x78,0x9e,0x9a,0x39,0x6d,0x82,0x4e,
+ 0xf9,0x9b,0x15,0x29,0x2f,0x63,0xc6,0x8c,0x59,0x6b,0xd8,0x25,0x6b,0xff,0xb3,0x3c,
+ 0x70,0x92,0xaf,0x3e,0x0b,0xa6,0x59,0xce,0x3f,0xfd,0xa7,0xff,0xcd,0xdc,0x7f,0xc9,
+ 0xf9,0x7f,0xe3,0x8d,0x37,0x82,0xbd,0xae,0xf5,0xb2,0x80,0x6d,0x53,0xf9,0xfa,0x5c,
+ 0xff,0x2e,0x21,0x6f,0x2a,0x03,0x21,0x25,0xe6,0x43,0xb7,0x8f,0x02,0x50,0x80,0xf6,
+ 0x97,0xe5,0x22,0xc9,0xba,0x6c,0xde,0xb3,0x75,0x75,0xeb,0xd6,0x4d,0x0d,0x1f,0x3e,
+ 0x5c,0xbd,0xfb,0xee,0xbb,0x6a,0xf9,0x92,0x05,0xea,0xad,0x09,0x0f,0xa8,0xc1,0xc3,
+ 0xc7,0xaa,0x3e,0x03,0x87,0xa9,0x6e,0x3d,0x7a,0x47,0xe9,0x81,0x9d,0x12,0x82,0xb9,
+ 0x6e,0xca,0xd4,0x9a,0xd7,0x55,0x2b,0x57,0xa8,0x95,0x2b,0x96,0xa8,0xc5,0xf3,0x66,
+ 0x6a,0xab,0x7f,0xba,0x4e,0xf5,0x9b,0x1d,0xed,0xfb,0x06,0x1b,0x6c,0xa0,0x86,0x0d,
+ 0x1b,0x96,0x69,0x4c,0xaf,0xd6,0x34,0x25,0xdf,0xf8,0x69,0x33,0x9e,0x7f,0xfa,0x4f,
+ 0xff,0x9b,0xb5,0xff,0x92,0xc1,0xf4,0xec,0xb3,0xcf,0x66,0x9a,0x75,0xb5,0xe8,0x38,
+ 0x00,0x9b,0xf5,0xed,0x52,0xb6,0x7c,0xca,0x97,0x2b,0xe8,0x31,0x6b,0x31,0xa0,0x6a,
+ 0xb7,0x8f,0x02,0x90,0x91,0xb8,0xfa,0x94,0x2f,0x95,0xa3,0x1a,0x17,0x5c,0x91,0x48,
+ 0xea,0x5c,0xe4,0x01,0x78,0xef,0x3d,0x2d,0x70,0x97,0xab,0x99,0x53,0x5f,0x8e,0x5a,
+ 0x19,0x3d,0x2c,0x32,0xc3,0x9f,0x08,0x7f,0xa9,0xb7,0x50,0x86,0xfd,0xc9,0x62,0x21,
+ 0x95,0xf5,0xfc,0xd3,0x7f,0xfa,0xdf,0x6c,0xfd,0x97,0x5c,0xff,0xc7,0x1e,0x7b,0xcc,
+ 0x3a,0xe7,0x4a,0x23,0x15,0x00,0x97,0x80,0xcd,0x2a,0x6c,0x43,0xa7,0xfa,0xb5,0x29,
+ 0x1e,0x21,0xdb,0x27,0x0d,0xb0,0xa0,0x13,0x2e,0x81,0x28,0xc9,0x62,0x40,0xb5,0xb8,
+ 0xb8,0xaa,0xd1,0x3c,0xab,0x5d,0xdf,0x86,0x1b,0x6e,0x18,0x15,0xd0,0x91,0xaa,0x80,
+ 0x92,0x4a,0xb3,0x7c,0xf9,0xf2,0x86,0x5f,0x20,0xb2,0xff,0xe2,0xa1,0x90,0xe3,0x29,
+ 0xf3,0x2b,0xc8,0xfe,0xc9,0xdf,0x45,0xf4,0xbf,0x9a,0x3c,0x69,0xdf,0xf9,0x6d,0xa6,
+ 0xf3,0x4f,0xff,0xe9,0x7f,0xb3,0xf4,0x7f,0xf6,0xec,0xd9,0xea,0xc9,0x27,0x9f,0xec,
+ 0x78,0x3e,0x64,0x55,0x00,0xea,0x21,0xf4,0xd3,0xc6,0xe1,0xb3,0x0a,0x79,0x73,0xac,
+ 0xdf,0x15,0xdd,0x9f,0x65,0xfb,0xcc,0x05,0x50,0x10,0xe2,0x96,0x32,0xeb,0xd0,0x17,
+ 0xe5,0x92,0xcb,0x7b,0x7d,0xe2,0x4a,0xcb,0xe2,0x4e,0x6b,0x26,0x8b,0xa4,0x11,0xe7,
+ 0xa3,0xd9,0xce,0x3f,0xfd,0xa7,0xff,0x65,0xef,0xff,0x9b,0x6f,0xbe,0xa9,0xfe,0xf5,
+ 0xaf,0x7f,0x45,0xb1,0x0c,0x71,0xcd,0x8f,0x32,0x29,0x00,0x59,0xac,0x7f,0x57,0xc4,
+ 0xbe,0x4d,0x41,0xf0,0xa5,0x16,0x9a,0xeb,0x0c,0xdd,0x3e,0x0a,0x40,0xce,0xcc,0x9c,
+ 0x39,0x33,0x72,0xa9,0xe7,0x71,0x01,0x15,0x99,0x96,0x53,0xf6,0xd9,0xc1,0xe8,0x3f,
+ 0xfd,0xa7,0xff,0xf4,0x3f,0xde,0x3f,0xa9,0x57,0xf2,0xfc,0xf3,0xcf,0x77,0xe4,0xfa,
+ 0xf7,0xef,0xdf,0xbf,0xaa,0xaa,0x7e,0x45,0x07,0x02,0x86,0xd6,0xf9,0x4f,0xab,0x02,
+ 0xe8,0x52,0x24,0x42,0xbc,0x0d,0xbe,0xe5,0xcb,0x3e,0xac,0xd4,0xf4,0x0a,0x80,0x0c,
+ 0x01,0x48,0x4e,0xea,0x46,0x1b,0x6d,0x54,0x93,0x0b,0xce,0xa7,0x21,0xfb,0x2a,0x6b,
+ 0x85,0xdc,0xd0,0x59,0x34,0xf0,0xbc,0x67,0x07,0xa3,0xff,0xf4,0x9f,0xfe,0xd3,0xff,
+ 0x90,0xfe,0x8b,0xd5,0x3f,0x61,0xc2,0x84,0x8e,0xaa,0xa5,0x32,0xdb,0x6a,0x56,0xd7,
+ 0xbf,0xe9,0x05,0x28,0x2a,0x0e,0x20,0xad,0x5a,0x61,0xa8,0xf0,0xf7,0x05,0xf7,0xd9,
+ 0x82,0xfc,0xb2,0xec,0x5b,0x99,0x15,0x81,0x96,0x98,0x0e,0x78,0xd2,0xa4,0x49,0x51,
+ 0x6a,0x9a,0x44,0xd7,0x67,0x49,0xbb,0xa9,0xa5,0xd2,0x56,0xde,0x79,0xbf,0x21,0xeb,
+ 0x4f,0x4b,0x4b,0xaa,0x26,0xed,0x88,0xfe,0xd3,0x7f,0xfa,0x4f,0xff,0x63,0xa6,0x4e,
+ 0x9d,0xaa,0x5e,0x79,0xe5,0x15,0xb5,0x60,0xc1,0x82,0x8e,0xdf,0x49,0x3c,0x50,0xe8,
+ 0x10,0x6b,0x23,0x14,0x00,0x97,0xa5,0x6f,0xa6,0xf0,0xf9,0xdc,0xfb,0xa6,0x35,0x1f,
+ 0x5a,0xfb,0x3f,0xc4,0x53,0x54,0xe6,0x82,0x40,0x2d,0xa1,0x00,0xc8,0x81,0x7d,0xea,
+ 0xa9,0xa7,0xd4,0xa6,0x9b,0x6e,0xaa,0xb6,0xdc,0x72,0xcb,0xb5,0xaa,0x03,0x16,0x55,
+ 0x59,0x2b,0xab,0x46,0x5f,0x8d,0x8b,0xd0,0x67,0x81,0xd4,0xba,0x3c,0xfd,0xa7,0xff,
+ 0xf4,0xbf,0xbd,0xfb,0x2f,0x79,0xfd,0xd3,0xa6,0x4d,0x8b,0xac,0xfe,0xd8,0xe2,0x8f,
+ 0xbf,0x17,0xa3,0x4a,0xac,0xff,0x5a,0x69,0x44,0x1c,0x80,0x4b,0xd0,0xfb,0x52,0xf8,
+ 0xcc,0xf7,0x69,0x6e,0x7e,0xf3,0x5c,0xa7,0x4d,0x2d,0x4c,0x16,0x40,0x91,0x9d,0xd0,
+ 0x75,0xe9,0xe5,0x00,0x4f,0x9e,0x3c,0x39,0x1a,0x0e,0x18,0x31,0x62,0x44,0x94,0xba,
+ 0x26,0x91,0xec,0x12,0x64,0x27,0xdf,0x9b,0x13,0x06,0xf9,0x5c,0x78,0xb5,0xce,0xee,
+ 0x95,0xd5,0x65,0x97,0xb5,0xf2,0x57,0xc8,0xe4,0x23,0xb6,0x0b,0x92,0xfe,0xd3,0x7f,
+ 0xfa,0xdf,0x7e,0xfd,0x97,0x94,0x69,0x19,0x2e,0x95,0xa0,0x69,0xc9,0x3a,0x92,0xc8,
+ 0xfe,0x59,0xb3,0x66,0x59,0xa7,0xf2,0x15,0xc4,0x88,0x92,0xe7,0x67,0x1e,0x56,0x6b,
+ 0x91,0x0a,0x80,0xcf,0x0a,0x4f,0x73,0xdb,0xbb,0x84,0xbc,0x39,0x4f,0x40,0x88,0xc7,
+ 0xc1,0xa5,0x6c,0x51,0x09,0xb0,0x0e,0x24,0x2b,0xd3,0xc9,0x85,0x2e,0xae,0x2c,0x69,
+ 0x69,0x48,0x90,0x4b,0xb3,0xcd,0xdd,0x0c,0x00,0x50,0x34,0xe2,0xf6,0x8f,0x4b,0x7d,
+ 0xe7,0x25,0xa4,0xeb,0xed,0x02,0x0f,0x89,0xd6,0xcf,0xe2,0xe1,0xf1,0x79,0x03,0x5c,
+ 0x55,0x04,0x6d,0xde,0x88,0x32,0xd1,0xb9,0x15,0x2e,0x58,0xb1,0xf0,0xa5,0x55,0xeb,
+ 0xbe,0x03,0x00,0x68,0x77,0xe4,0x99,0x28,0x56,0xbf,0xb8,0xfd,0xf3,0x7e,0x3e,0x16,
+ 0xe5,0x05,0xb0,0x59,0xfa,0x36,0x41,0x1c,0x2a,0x7c,0xd3,0xf2,0xf7,0x4d,0x77,0xbe,
+ 0xcb,0xd3,0xd0,0x4c,0x33,0x02,0x76,0x6d,0x95,0x8b,0x57,0x2e,0xdc,0xb9,0x73,0xe7,
+ 0x86,0x6b,0x3e,0x6b,0xdc,0x65,0x65,0x4f,0xcf,0xa9,0x87,0xa6,0x4c,0xff,0xe9,0x3f,
+ 0xfd,0x6f,0xef,0xfe,0x4b,0x90,0x9e,0x3c,0x43,0xb3,0x1a,0x52,0x65,0xea,0x47,0x11,
+ 0xc7,0x25,0x2d,0xab,0xc0,0x17,0x27,0xd0,0x0c,0x1e,0xe6,0x96,0x51,0x00,0xc4,0x6d,
+ 0xb5,0x64,0xc9,0x92,0x68,0x9c,0x2b,0xcb,0x0d,0xdc,0x8c,0x25,0x41,0xf3,0xd6,0xa0,
+ 0xe9,0x3f,0xfd,0xa7,0xff,0xed,0xd9,0x7f,0x31,0x84,0x24,0xca,0x5f,0x4a,0xfc,0x36,
+ 0x63,0xbf,0x43,0x85,0xb1,0xeb,0x77,0xe6,0x6f,0x5c,0x53,0x08,0xdb,0xbc,0x0e,0x21,
+ 0xdb,0x27,0x06,0xa0,0x8e,0x48,0xe9,0x5a,0xf1,0x02,0x48,0x59,0xdd,0x90,0x1b,0x5f,
+ 0x2e,0xfe,0x7a,0x45,0xa8,0x02,0x00,0x94,0x49,0xf1,0x11,0xa3,0x49,0x04,0x7f,0x35,
+ 0x05,0x7e,0x5a,0xc9,0xfa,0xb7,0xd5,0x43,0xb0,0x05,0x17,0xc6,0xcb,0xa6,0x15,0x0f,
+ 0xaa,0x46,0x19,0x41,0x01,0xc8,0x51,0x9b,0x95,0xc9,0x6b,0x16,0x2d,0x5a,0x14,0x45,
+ 0xbb,0xfa,0x0e,0x7e,0x72,0x18,0x00,0x00,0xa0,0xd5,0x91,0x82,0x3e,0x12,0x34,0x2d,
+ 0xad,0x9e,0x16,0x7f,0xa3,0x95,0x0c,0x5b,0x8d,0x7f,0x9b,0x05,0x6f,0xab,0xb5,0x60,
+ 0x93,0x0f,0x69,0xf3,0x0d,0x84,0x28,0x19,0x28,0x00,0x05,0x6a,0xb6,0x12,0xc4,0x22,
+ 0x6e,0x2d,0x19,0x0e,0x90,0x26,0x11,0xff,0x92,0x1d,0x60,0x0a,0xfb,0xd8,0x0b,0x10,
+ 0xcf,0x2a,0x08,0x00,0xd0,0x2a,0xcf,0x41,0x79,0xb6,0xc9,0xd8,0xbe,0x34,0x19,0xdb,
+ 0x17,0xe1,0xdf,0x08,0x41,0xec,0xaa,0xbd,0x5f,0x94,0x27,0xc0,0x36,0x8d,0xaf,0x19,
+ 0x98,0x67,0xab,0x20,0x68,0xc6,0x84,0xf9,0x5c,0xff,0x3e,0x65,0x20,0x29,0xf8,0xa9,
+ 0x04,0xd8,0x00,0x6f,0x80,0xb8,0xb8,0x42,0xa6,0xb1,0x15,0x25,0xa1,0x0c,0x4a,0x00,
+ 0x9e,0x88,0xda,0x1e,0x32,0x00,0x50,0x3e,0xea,0x35,0x1d,0xb0,0xab,0x2c,0x70,0xd6,
+ 0x62,0x40,0xa1,0xf3,0x04,0x84,0x56,0x5b,0x34,0x15,0x13,0x14,0x80,0x92,0x21,0x45,
+ 0x2f,0x44,0x09,0x68,0x74,0x3c,0x00,0x42,0x0c,0x00,0x5a,0x8d,0x7a,0x64,0x16,0x98,
+ 0xc5,0x79,0x6c,0xd6,0xbe,0xcf,0x6a,0xcf,0x3a,0x76,0x5f,0xcd,0x24,0x44,0xa5,0x33,
+ 0x94,0xb9,0x3c,0xff,0x7f,0xd9,0x4b,0x04,0x30,0x00,0x40,0xbe,0xd6,0x7f,0xd1,0xc3,
+ 0x0e,0x3e,0xe1,0x9b,0x56,0xd7,0x3f,0x8b,0xd7,0xd5,0x54,0x10,0x6c,0x15,0x03,0x43,
+ 0x26,0x15,0x42,0x01,0x40,0x09,0x00,0x00,0x68,0x79,0x6a,0x99,0x45,0xb0,0x16,0x45,
+ 0xc0,0x25,0x90,0x6d,0xe3,0xfa,0x59,0x64,0x84,0xcd,0x9d,0xef,0x2a,0x0b,0x6c,0x2b,
+ 0x16,0x84,0x02,0x50,0x62,0x44,0x53,0x95,0xb4,0x98,0x7a,0x8d,0x59,0x01,0x00,0xb4,
+ 0x2a,0x32,0xb4,0x5a,0x0f,0xeb,0xdf,0xfc,0x3b,0x4b,0x66,0x57,0xe8,0x30,0x40,0xda,
+ 0xf8,0xbf,0xcd,0x33,0xd0,0x2c,0x85,0x81,0x50,0x00,0x2c,0x5a,0x9e,0x5c,0xb8,0xf5,
+ 0xd4,0x5c,0x01,0x00,0x5a,0x4d,0xf8,0xd7,0xab,0xaa,0xa0,0xcd,0xc2,0x4e,0xab,0xcb,
+ 0xef,0x5b,0x57,0x9a,0x65,0x6f,0xf3,0x2a,0xd8,0x26,0x9e,0x72,0x15,0x19,0x42,0x01,
+ 0x68,0x12,0x25,0x40,0x14,0x00,0xbc,0x01,0x00,0x00,0xd9,0x9e,0x9d,0x32,0x94,0x5a,
+ 0x6f,0xe1,0x9f,0x66,0xb1,0xbb,0x04,0x6f,0xda,0xef,0x92,0x56,0x7c,0x5a,0x6d,0x00,
+ 0xdb,0xf6,0x6d,0xe9,0xe6,0x65,0xf5,0x00,0x90,0x05,0x90,0xa6,0x1d,0x69,0xf7,0x95,
+ 0x5c,0xcc,0x92,0x1d,0xb0,0x62,0xc5,0x0a,0xea,0x05,0x00,0x00,0xb8,0x84,0xc9,0x9a,
+ 0x5a,0x03,0x8d,0x98,0xf5,0xcf,0x97,0x8b,0xef,0xb3,0xf6,0x6d,0xcb,0xb9,0xac,0xfc,
+ 0xb4,0x14,0x42,0xdb,0xbe,0x50,0x0a,0xb8,0x45,0x14,0x01,0x39,0x91,0xa2,0x04,0x88,
+ 0x42,0x20,0x8d,0x2a,0x82,0x00,0xd0,0xce,0xcf,0xc5,0x78,0x22,0x21,0x69,0x8d,0x74,
+ 0x71,0xbb,0xc6,0xdc,0x5d,0xe5,0x7c,0x6d,0x41,0x82,0xae,0xcf,0x42,0xc6,0xf4,0x5d,
+ 0x5e,0x84,0xb2,0x07,0x95,0xa3,0x00,0x64,0x40,0x4e,0x66,0xb3,0xce,0x96,0x05,0x00,
+ 0xd0,0x6e,0xcf,0x6b,0xd3,0xd2,0xaf,0x36,0x38,0x30,0x4d,0x11,0xf0,0x6d,0xbf,0xd4,
+ 0x4a,0x1c,0x97,0x09,0x00,0x00,0x34,0x2b,0xbe,0x68,0x7d,0xd3,0x22,0xf7,0x59,0xfa,
+ 0x66,0x2a,0x9f,0xb9,0xde,0x34,0xc1,0xee,0xdb,0x3e,0x1e,0x00,0x00,0x00,0x80,0x9c,
+ 0x2d,0x7d,0x9b,0x20,0x0e,0x89,0xea,0x77,0x09,0xe7,0xac,0x31,0x05,0xa1,0xdb,0xc7,
+ 0x03,0x00,0x00,0x00,0x90,0x93,0xf5,0x9f,0x56,0x74,0x27,0x99,0x9b,0x6f,0x2b,0x0c,
+ 0x14,0xa2,0x0c,0xa4,0x6d,0x37,0xf9,0x99,0x6b,0xd8,0xa1,0xac,0xf1,0x62,0x28,0x00,
+ 0x00,0x00,0xd0,0xb4,0xd6,0xbf,0xe9,0xda,0x37,0xdd,0xfa,0xb6,0xea,0x80,0xd5,0x5a,
+ 0xff,0xae,0xed,0xdb,0x84,0xbe,0x6b,0xfb,0x28,0x00,0x00,0x00,0x00,0x39,0x78,0x00,
+ 0xd2,0xea,0xfb,0x57,0x33,0x8e,0x6f,0xfb,0xde,0x5c,0x87,0x2d,0x8e,0x20,0xcb,0xf6,
+ 0x51,0x00,0x00,0x00,0x00,0x72,0xf2,0x04,0x24,0x05,0x72,0xfc,0xde,0x25,0xf4,0x43,
+ 0xac,0x7e,0xb3,0x18,0x90,0x29,0xd0,0x6b,0xd9,0x3e,0x0a,0x00,0x00,0x00,0x40,0x0e,
+ 0x5e,0x80,0x90,0x29,0x78,0x7d,0xae,0x7f,0xf3,0x37,0xf1,0xb0,0x82,0x2d,0x93,0xc0,
+ 0x8c,0x27,0xa8,0x66,0xfb,0x28,0x00,0x00,0x00,0x00,0x35,0x5a,0xfe,0xa6,0x80,0x0d,
+ 0x11,0xb6,0xb6,0x40,0x3d,0xdb,0xfb,0xa4,0x22,0x10,0x2a,0xe0,0x6b,0x99,0x75,0x10,
+ 0x05,0x00,0x00,0x00,0x20,0xc0,0xfa,0xaf,0x66,0xd9,0x34,0x21,0x6f,0xa6,0xee,0xa5,
+ 0xd5,0xf5,0x0f,0x4d,0xf7,0x23,0x0b,0x00,0x00,0x00,0xa0,0x81,0xde,0x82,0xa4,0xc0,
+ 0xb6,0x05,0xfa,0x99,0x63,0xfd,0xb6,0xb4,0x41,0x9b,0x65,0x1f,0xe2,0x7d,0x20,0x06,
+ 0x00,0x00,0x00,0xa0,0x20,0x0f,0x80,0xaf,0x3e,0xbf,0xf9,0xb7,0x2b,0xf0,0xaf,0xda,
+ 0x92,0xc1,0xcd,0x32,0x09,0x10,0x0a,0x00,0x00,0x00,0x34,0xbd,0x55,0x9f,0x14,0xb6,
+ 0x21,0x95,0xff,0x5c,0xb3,0xfa,0xb9,0xdc,0xf8,0xd5,0xd6,0xff,0x2f,0xf3,0x34,0xc0,
+ 0x28,0x00,0x00,0x00,0xd0,0x12,0x5e,0x00,0xdb,0xd8,0xbc,0x6b,0x7a,0x5e,0xd7,0xd4,
+ 0xbd,0x2e,0xeb,0xdd,0xe5,0xba,0x4f,0xfb,0x5d,0xda,0xf6,0xcb,0x04,0x73,0x01,0x00,
+ 0x00,0x40,0x4b,0x28,0x02,0xa6,0x35,0x6e,0xb3,0xf2,0x6d,0x82,0x39,0x4d,0x48,0x87,
+ 0x8e,0xe9,0xa7,0x05,0x0b,0x96,0x55,0x09,0xc0,0x03,0x00,0x00,0x00,0x4d,0x6d,0xfd,
+ 0xdb,0x22,0xf9,0x6d,0x9e,0x01,0x97,0xc0,0x4e,0xfb,0xde,0x37,0xce,0x6f,0xdb,0xbe,
+ 0xcb,0x33,0x81,0x02,0x00,0x00,0x00,0x50,0xa0,0x17,0x20,0x24,0x5a,0xdf,0x87,0x6b,
+ 0x62,0x9f,0x6a,0xbd,0x11,0x28,0x00,0x00,0x00,0x00,0x05,0x79,0x01,0x5c,0x02,0x3b,
+ 0x4d,0x70,0xfb,0xb2,0x05,0x5c,0xf5,0x02,0x4c,0xeb,0xdf,0xac,0x08,0x58,0xf6,0x79,
+ 0x00,0x50,0x00,0x00,0x00,0xa0,0x69,0xc9,0xc3,0xc5,0x9e,0x56,0xb8,0xc7,0x9c,0x65,
+ 0x30,0xa9,0x08,0xa4,0x59,0xfc,0x65,0x16,0xfa,0x28,0x00,0x00,0x00,0xd0,0x32,0xd6,
+ 0x7f,0x88,0xe0,0x75,0x45,0xeb,0x9b,0x02,0xdf,0x96,0x36,0x98,0x6c,0xbe,0xb2,0xc0,
+ 0xcd,0x20,0xf8,0x51,0x00,0x00,0x00,0xa0,0x25,0x94,0x80,0x90,0xcf,0x6c,0x96,0xbe,
+ 0x19,0xc0,0x97,0xfc,0xcc,0x14,0xf0,0x2e,0x6f,0x43,0xd9,0x67,0xfc,0x4b,0x83,0x34,
+ 0x40,0x00,0x00,0x68,0x29,0x5c,0x65,0x7e,0xb3,0xa4,0x00,0xba,0xea,0xfe,0xa7,0xfd,
+ 0x26,0xcd,0xfb,0x40,0x29,0x60,0x00,0x00,0x80,0x82,0x3c,0x01,0xae,0x09,0x7f,0x6c,
+ 0x11,0xfd,0xbe,0xf7,0x69,0x25,0x81,0x43,0x84,0xbf,0x6d,0xfb,0x78,0x00,0x00,0x00,
+ 0x00,0x72,0x14,0xfc,0xb6,0xc9,0x7d,0x5c,0xc5,0x78,0x7c,0x9e,0x00,0x73,0x19,0xdf,
+ 0x76,0x5d,0x5e,0x87,0xb4,0x32,0xc5,0x78,0x00,0x00,0x00,0x00,0x6a,0x24,0x29,0xb8,
+ 0x4d,0xcb,0xdb,0x57,0xa0,0xc7,0x65,0xc1,0x87,0x04,0xf2,0xb9,0xea,0x03,0xf8,0xb6,
+ 0x8f,0x02,0x00,0x00,0x00,0x90,0xb3,0x07,0xc0,0xac,0xbe,0x67,0x9b,0x07,0x20,0x29,
+ 0xb0,0xb3,0x08,0x65,0x9f,0x90,0x77,0x79,0x05,0x98,0x0c,0x08,0x00,0x00,0xa0,0x0e,
+ 0x8a,0x40,0x9a,0xa0,0xaf,0xa5,0x42,0x9f,0xab,0xd8,0x90,0x4d,0xf8,0xdb,0xbc,0x12,
+ 0x0c,0x01,0x00,0x00,0x00,0xe4,0x28,0xf4,0xcd,0xbf,0xcd,0xe0,0xbd,0x34,0xc1,0xbb,
+ 0x7a,0xf5,0xea,0x54,0x2b,0x3f,0x6d,0x3b,0xa6,0x90,0xf7,0x6d,0x9f,0x21,0x00,0x00,
+ 0x00,0x80,0x1c,0xb1,0x15,0xef,0x09,0xad,0xdf,0xef,0x0a,0xdc,0x73,0x59,0xf6,0xa6,
+ 0xf0,0xcf,0xb2,0x7d,0x3c,0x00,0x00,0x00,0x00,0x39,0x0b,0x7f,0x9f,0xc5,0x9e,0xe6,
+ 0x3d,0x70,0x55,0x08,0x74,0xd5,0x09,0x70,0x65,0x11,0xb8,0xb6,0x8f,0x07,0x00,0x00,
+ 0x00,0x20,0x67,0xf2,0x9c,0x03,0xc0,0x16,0x1f,0xe0,0x9a,0xf4,0xc7,0xa6,0x08,0x84,
+ 0xae,0x17,0x05,0x00,0x00,0x00,0xa0,0x0e,0xca,0x81,0xab,0x74,0xaf,0x4d,0xb8,0x9b,
+ 0x82,0x3e,0xcd,0x7a,0xf7,0xc5,0x0b,0x94,0x7d,0x26,0x40,0x14,0x00,0x00,0x00,0x68,
+ 0x49,0x6c,0xd5,0xff,0x42,0x83,0x03,0x5d,0xd9,0x02,0x59,0x84,0xb9,0x6d,0xfb,0x65,
+ 0x83,0x4a,0x80,0x00,0x00,0xd0,0xd4,0x96,0x7e,0x5a,0xc0,0x5e,0x9a,0x20,0xb7,0xb9,
+ 0xf6,0x93,0xcb,0x66,0xb5,0xe2,0x5d,0xdb,0x2f,0x6b,0x3d,0x00,0x14,0x00,0x00,0x00,
+ 0x68,0x7a,0x4b,0xdf,0x66,0xc1,0xbb,0xa6,0xf7,0x35,0x05,0xb2,0x2d,0xc8,0xaf,0x16,
+ 0x81,0x1d,0x12,0x1b,0x50,0x06,0x18,0x02,0x00,0x00,0x80,0xa6,0xb5,0xfe,0xe3,0xd7,
+ 0xb4,0xa2,0x3b,0xc9,0xfc,0x7c,0x5f,0x59,0xe0,0x6a,0x32,0x08,0x6c,0xf1,0x04,0xb6,
+ 0x6d,0xa3,0x00,0x00,0x00,0x00,0xe4,0x64,0xfd,0x27,0x03,0xf8,0xd2,0xea,0xfe,0xbb,
+ 0xc6,0xf1,0xb3,0x4c,0xeb,0xeb,0xdb,0xbe,0xf9,0x99,0x6d,0xfb,0x65,0x82,0x21,0x00,
+ 0x00,0x00,0x68,0x5a,0x0f,0x80,0x2f,0x35,0xcf,0x36,0x8e,0xef,0x1b,0x93,0xf7,0x8d,
+ 0xe3,0xbb,0xe6,0x1b,0x48,0xab,0x19,0x80,0x07,0x00,0x00,0x00,0xa0,0x00,0x4f,0x80,
+ 0x69,0xf1,0xa7,0xb9,0xdd,0x5d,0x56,0xbf,0xad,0xac,0xaf,0x69,0xdd,0x57,0xbb,0x7d,
+ 0x3c,0x00,0x00,0x00,0x00,0x39,0x7b,0x01,0x92,0xd6,0x76,0xb5,0x11,0xfb,0xae,0xb2,
+ 0xc0,0xbe,0x8c,0x01,0xdb,0xf6,0x6d,0x1e,0x06,0x3c,0x00,0x00,0x00,0x00,0x39,0x5b,
+ 0xfe,0x69,0x56,0x7d,0xe8,0x6f,0x5d,0x01,0x85,0x49,0xe1,0x6e,0x2a,0x0e,0xae,0xed,
+ 0x97,0xb9,0xf8,0x0f,0x0a,0x00,0x00,0x00,0xb4,0x8c,0xf5,0x9f,0x26,0xe4,0x5d,0xb5,
+ 0xfa,0x4d,0x81,0xee,0x9b,0xd4,0xc7,0xe6,0x15,0xc8,0x32,0xd1,0x0f,0x1e,0x00,0x00,
+ 0x00,0x80,0x06,0x78,0x09,0x5c,0xb5,0xfb,0x93,0x02,0xda,0x5c,0x36,0xb4,0xac,0x6f,
+ 0x88,0x70,0xa7,0x0e,0x00,0x00,0x00,0x40,0x41,0x1e,0x00,0x5f,0x7d,0x7e,0x53,0xd8,
+ 0xdb,0x3e,0xcf,0x12,0xbc,0x57,0xed,0xf6,0x51,0x00,0x00,0x00,0x00,0x72,0xb0,0xee,
+ 0xd3,0x2a,0xef,0xf9,0x2a,0x01,0xfa,0x5c,0xff,0xa1,0x71,0x04,0xa1,0xdb,0x47,0x01,
+ 0x00,0x00,0x00,0xc8,0xc9,0x0b,0x60,0x1b,0x9b,0x0f,0xc9,0xcd,0x4f,0x8b,0x11,0xf0,
+ 0x79,0x00,0xd2,0x7e,0x97,0xb6,0xfd,0x32,0x41,0x1a,0x20,0x00,0x00,0xb4,0x84,0x22,
+ 0x60,0x5a,0xe3,0x69,0x82,0x3e,0xad,0x80,0x4f,0xda,0x7a,0x5d,0x8a,0x81,0x4d,0x69,
+ 0x28,0xbb,0x12,0x80,0x07,0x00,0x00,0x00,0x9a,0xda,0xfa,0xb7,0x45,0xf2,0xdb,0x3c,
+ 0x03,0x59,0xd2,0xf6,0x5c,0x81,0x7f,0xe6,0xef,0x6c,0xdb,0x77,0x79,0x26,0x50,0x00,
+ 0x00,0x00,0x00,0x0a,0xf4,0x02,0xf8,0xa6,0x01,0x0e,0xc1,0x97,0xeb,0x5f,0xcd,0xf6,
+ 0xcb,0x06,0x43,0x00,0x00,0x00,0xd0,0x12,0x5e,0x80,0x50,0x81,0x6c,0xfb,0xbd,0xf9,
+ 0x3e,0x44,0x91,0xb0,0x55,0x07,0xb4,0x7d,0x46,0x0c,0x00,0x00,0x00,0x40,0x8e,0xd8,
+ 0xca,0xff,0x66,0x1d,0x6f,0x77,0xd5,0x04,0x48,0xfb,0xce,0x55,0x0e,0xd8,0xb6,0x8e,
+ 0x32,0xc3,0x10,0x00,0x00,0x00,0x34,0xb5,0xf5,0x1f,0x22,0x78,0x5d,0xd1,0xfa,0xf1,
+ 0xab,0x2d,0x76,0x20,0xf9,0x9d,0xad,0xce,0x7f,0xb5,0xdb,0x47,0x01,0x00,0x00,0x00,
+ 0xc8,0x41,0x09,0x08,0xf9,0xcc,0x66,0xcd,0x9b,0x01,0x7c,0xa6,0x07,0xc1,0x56,0xf7,
+ 0x3f,0x2d,0x28,0x30,0x6d,0xac,0x9f,0xd9,0x00,0x01,0x00,0x00,0x0a,0xc6,0x66,0x95,
+ 0xbb,0xd2,0xfe,0x5c,0x43,0x06,0xae,0xba,0xff,0x59,0x95,0x11,0x97,0xa7,0x00,0x05,
+ 0x20,0xc1,0xca,0x95,0x2b,0xb9,0x6a,0x01,0x00,0x20,0x98,0xb9,0x73,0xe7,0x46,0xaf,
+ 0x83,0x06,0x0d,0x4a,0x2d,0xfc,0x63,0x5a,0xfc,0x21,0xef,0xb3,0xba,0xec,0x5d,0x01,
+ 0x84,0x49,0xef,0x02,0x0a,0x00,0x00,0x00,0x40,0x81,0x56,0x7f,0x5a,0xbe,0xbf,0x2b,
+ 0x80,0x2f,0x29,0xf8,0x43,0x02,0x09,0x6d,0x35,0x00,0xd2,0x3c,0x08,0x4c,0x06,0x04,
+ 0x00,0x00,0x90,0x33,0xe6,0xcc,0x7d,0x69,0x55,0xff,0x6c,0xe3,0xfa,0x36,0x45,0x21,
+ 0x54,0xe1,0xb0,0x29,0x14,0xae,0xa9,0x86,0x51,0x00,0x00,0x00,0x00,0x72,0xb6,0xfe,
+ 0x6d,0xd5,0xff,0x7c,0x56,0x79,0x16,0xa1,0xec,0x13,0xf2,0xb6,0x6d,0x96,0x79,0x1e,
+ 0x00,0xa1,0x34,0x43,0x00,0x5d,0xbb,0x32,0x1a,0x01,0x00,0x00,0xe1,0xf4,0xeb,0xd7,
+ 0x6f,0x1d,0x41,0x9c,0x7c,0xb5,0xa5,0xfb,0xd5,0xa2,0x64,0xa4,0x59,0xf4,0xb6,0xed,
+ 0x9b,0xdf,0xe1,0x01,0x00,0x00,0x00,0xc8,0x01,0x57,0x4a,0x5e,0x68,0x6a,0x9e,0xaf,
+ 0xce,0x7f,0xda,0x72,0x2e,0x25,0xc0,0xb5,0x7d,0x86,0x00,0x00,0x00,0x00,0x72,0xc4,
+ 0x56,0xbc,0x27,0xb4,0x7e,0x7f,0x5a,0xa0,0x9e,0x19,0x14,0xe8,0x12,0xfe,0xa1,0xdb,
+ 0x27,0x0d,0x10,0x00,0x00,0xa0,0x00,0x2f,0x40,0x48,0x10,0x9f,0x4f,0x78,0xdb,0xbe,
+ 0xb7,0x59,0xf4,0x69,0xd3,0x0c,0xbb,0xb6,0x5f,0x46,0x0f,0x00,0x0a,0x00,0x00,0x00,
+ 0xb4,0x8d,0xb7,0xc0,0x65,0x8d,0xdb,0x26,0xfe,0x09,0x99,0xf4,0xa7,0x99,0x61,0x08,
+ 0x00,0x00,0x00,0x9a,0xda,0xfa,0xf7,0x79,0x06,0x5c,0xf3,0x00,0xd8,0x72,0xf9,0xf3,
+ 0x9a,0xec,0xa7,0xec,0x33,0x01,0xa2,0x00,0x00,0x00,0x40,0xd3,0x5b,0xf4,0x3e,0x6b,
+ 0xdf,0xe5,0xca,0xf7,0x09,0x6f,0xdf,0x3c,0x00,0xd5,0x7a,0x1b,0xca,0x02,0x43,0x00,
+ 0x00,0x00,0xd0,0xd4,0x5e,0x00,0x57,0x1e,0xbe,0xcd,0xad,0x6f,0x0a,0xf8,0xb4,0xca,
+ 0x7f,0x69,0x56,0xbc,0x6b,0x26,0xc0,0xd0,0x00,0x44,0x14,0x00,0x00,0x00,0x80,0x9c,
+ 0xbd,0x00,0x69,0x11,0xfa,0x79,0x05,0xe8,0x85,0x7a,0x10,0xca,0x5a,0x03,0x40,0x60,
+ 0x08,0x00,0x00,0x00,0x9a,0xd6,0xfa,0x8f,0x5f,0x6d,0x95,0xf9,0x92,0xcb,0xa5,0xa5,
+ 0xf4,0xd5,0xb2,0xdd,0xe4,0xfa,0x5d,0x02,0xbf,0x9a,0xc9,0x85,0x50,0x00,0x00,0x00,
+ 0x00,0x52,0xac,0x70,0x73,0xd6,0x3d,0x5f,0xdd,0xff,0xb4,0xe2,0x3f,0x59,0x3d,0x02,
+ 0xb6,0xc9,0x80,0x42,0xe6,0x1d,0x28,0x0b,0x0c,0x01,0x00,0x00,0x40,0xd3,0x7a,0x00,
+ 0x5c,0xd3,0xf7,0xd6,0x52,0xf7,0xdf,0x55,0xc8,0x27,0xeb,0xfb,0x6a,0xb7,0x8f,0x07,
+ 0x00,0x00,0x00,0x20,0xa3,0xc0,0x4e,0x0a,0xee,0xac,0x93,0xfd,0xd8,0x26,0xfc,0x31,
+ 0xad,0x7b,0xdb,0x36,0x6d,0x41,0x88,0x65,0x75,0xfb,0xe3,0x01,0x00,0x00,0x80,0x96,
+ 0xf1,0x02,0x98,0xd6,0x77,0x16,0xef,0x81,0x4b,0x89,0x08,0xcd,0x18,0x30,0xbf,0x6f,
+ 0xa6,0xe2,0x40,0x78,0x00,0x00,0x00,0xa0,0x65,0x14,0x01,0xdf,0x67,0x36,0x81,0x6f,
+ 0x06,0x11,0x9a,0x6e,0xfb,0x90,0x71,0xfd,0x66,0xac,0x0a,0x88,0x02,0x00,0x00,0x00,
+ 0x2d,0x49,0x5a,0xad,0x7e,0x53,0xa0,0xbb,0xe6,0x05,0x48,0xf3,0x0a,0x64,0xf5,0x38,
+ 0xa0,0x00,0x00,0x00,0x00,0xd4,0x51,0x09,0x30,0x95,0x01,0x57,0x9a,0x9e,0x2b,0x63,
+ 0xa0,0xd6,0x40,0xbe,0xb2,0xd6,0x02,0x40,0x01,0x00,0x00,0x80,0xa6,0xc4,0x96,0xd2,
+ 0x17,0x32,0x3b,0x5f,0xda,0xac,0x7f,0x59,0xc6,0xf1,0xd3,0x52,0x0a,0xcd,0x7d,0x59,
+ 0xbd,0x7a,0x35,0x0a,0x00,0x00,0x00,0x40,0x9e,0xd6,0xbd,0x59,0x0b,0x20,0x69,0xf1,
+ 0xbb,0x8a,0xff,0xa4,0x55,0xeb,0x0b,0xb5,0xd6,0x7d,0xb3,0x0a,0x96,0x55,0xf0,0xc7,
+ 0x90,0x05,0x00,0x00,0x00,0x4d,0xed,0x05,0x30,0xc7,0xed,0x5d,0xb9,0xf8,0x49,0x81,
+ 0x6f,0xbe,0xf7,0xcd,0xfe,0xe7,0xda,0xae,0xf9,0x3b,0xf9,0x4c,0x84,0x7e,0x72,0xbf,
+ 0xe4,0x6f,0x0a,0x01,0x01,0x00,0x00,0x14,0xa4,0x08,0x98,0xd6,0x79,0x9a,0xa0,0x77,
+ 0x7d,0x1f,0xba,0x1d,0xd3,0xc3,0x60,0x1b,0x3a,0xc8,0xaa,0x54,0xd4,0x1b,0x86,0x00,
+ 0x00,0x00,0xa0,0xa9,0xad,0x7f,0x57,0xae,0xbe,0x6d,0x88,0x20,0x54,0x38,0x9b,0x69,
+ 0x81,0xa6,0x02,0x21,0x56,0x7d,0xec,0xde,0x4f,0xfe,0x3e,0xb6,0xfe,0xe3,0xd7,0xac,
+ 0x71,0x05,0x78,0x00,0x00,0x00,0x00,0x32,0xe0,0x72,0xe7,0xa7,0x79,0x09,0x42,0xbd,
+ 0x09,0xa6,0x70,0x37,0x97,0x35,0x15,0x11,0x9b,0x72,0x81,0x02,0x00,0x00,0x00,0x50,
+ 0xa0,0x17,0x20,0x54,0xe0,0x9b,0x9e,0x02,0x9b,0x17,0x21,0x19,0xc0,0xe7,0x2b,0xf3,
+ 0x6b,0xfb,0xcc,0xfc,0x3d,0x0a,0x00,0x00,0x00,0x40,0x8e,0x56,0x7f,0x35,0xc2,0xd5,
+ 0x36,0x1c,0x60,0x9b,0xde,0xd7,0xf6,0xb9,0x4b,0xc9,0x30,0xe3,0x01,0x5c,0xd3,0x03,
+ 0xa3,0x00,0x00,0x00,0x00,0xd4,0x68,0xfd,0x67,0xf5,0x10,0xd8,0xca,0xfa,0x26,0x05,
+ 0xb6,0x39,0xae,0x9f,0x65,0xfa,0x60,0xd7,0x70,0x40,0x59,0x63,0x00,0x08,0x02,0x04,
+ 0x00,0x80,0x96,0x55,0x0c,0x4c,0x37,0xbf,0x29,0x8c,0x6d,0x6e,0xfa,0xb4,0x57,0x73,
+ 0x1d,0xb6,0xb8,0x00,0x5b,0x70,0x20,0x1e,0x00,0x00,0x00,0x80,0x3a,0x92,0x14,0xc6,
+ 0xa6,0x85,0x1e,0xe7,0xe7,0xbb,0x2c,0x74,0xd7,0x04,0x41,0xb6,0xdf,0xd8,0x0a,0xfe,
+ 0x94,0x3d,0x0d,0x10,0x05,0x00,0x00,0x00,0x5a,0xc6,0xea,0x4f,0x13,0xe8,0x66,0x60,
+ 0x9f,0xcd,0xca,0x77,0x09,0x6f,0x5b,0x51,0xa1,0xd0,0x54,0x42,0x3c,0x00,0x00,0x00,
+ 0x00,0x05,0x08,0xfd,0x50,0x21,0xec,0x9b,0xdc,0xc7,0x55,0x4f,0x20,0x2d,0x66,0xc0,
+ 0x37,0xe7,0x00,0x0a,0x00,0x00,0x00,0x40,0x81,0x4a,0x80,0x2b,0x75,0xcf,0xb6,0x7c,
+ 0x68,0xce,0x7e,0xb2,0x84,0xaf,0x6b,0x38,0xc0,0xa5,0x00,0x54,0x5b,0x69,0x10,0x05,
+ 0x00,0x00,0x00,0x20,0x40,0xf8,0xbb,0xd2,0xf5,0xd2,0x84,0x72,0x9a,0x7b,0xdf,0x14,
+ 0xd6,0xc9,0x18,0x02,0xd7,0x30,0x40,0x9a,0x27,0x20,0xa9,0x4c,0xa0,0x00,0x00,0x00,
+ 0x00,0xe4,0x6c,0xfd,0x87,0x4c,0xff,0xeb,0xf2,0x0e,0xd8,0x4a,0xfd,0xfa,0xaa,0xf9,
+ 0xd9,0x3c,0x09,0xc9,0xbf,0xcb,0x5e,0x04,0x08,0x05,0x00,0x00,0x00,0x9a,0x16,0x9b,
+ 0x8b,0x3e,0x8b,0xd5,0x6f,0xce,0xd2,0x17,0x32,0x9e,0x9f,0xfc,0x9d,0x99,0x02,0x98,
+ 0x26,0xf4,0x19,0x02,0x00,0x00,0x00,0x28,0xc0,0x0b,0xe0,0x12,0xba,0x3e,0xd7,0xbc,
+ 0xed,0x33,0x9b,0x52,0xe1,0xf2,0x14,0x84,0x2a,0x22,0x9f,0xf9,0xcc,0x67,0x50,0x00,
+ 0x00,0x00,0x00,0x8a,0x52,0x00,0x92,0xae,0xfe,0x58,0x28,0x27,0xf3,0xfd,0x43,0x14,
+ 0x88,0xb4,0xd8,0x02,0x73,0xfd,0xbe,0xcc,0x02,0xe1,0xd8,0x63,0x8f,0x55,0xbb,0xec,
+ 0xb2,0x4b,0xe9,0x8e,0x1d,0x95,0x00,0x01,0x00,0xa0,0x69,0x85,0xbf,0x59,0x91,0xcf,
+ 0x35,0x69,0x8f,0x2f,0x8a,0xdf,0x35,0xe5,0x6f,0x48,0x6c,0x80,0x6b,0x5d,0xf2,0xfb,
+ 0xa3,0x8f,0x3e,0x5a,0x7d,0xf4,0xa3,0x1f,0x2d,0xe5,0x7c,0x00,0x78,0x00,0x00,0x00,
+ 0xa0,0x29,0xb1,0x59,0xf6,0xc9,0xf1,0x79,0xd3,0x82,0x77,0x59,0xec,0x49,0xa5,0xc1,
+ 0x5c,0xa7,0xf9,0x77,0x9a,0x17,0x21,0xb9,0x5d,0xf9,0xec,0xa8,0xa3,0x8e,0x52,0xdb,
+ 0x6c,0xb3,0x4d,0xc7,0x72,0xf2,0x79,0xdc,0x92,0xc4,0x7f,0xd7,0x5b,0x49,0x40,0x01,
+ 0x00,0x00,0x80,0x96,0xf0,0x02,0xb8,0x2c,0xf3,0xe4,0x72,0x69,0x69,0x83,0xbe,0x39,
+ 0x00,0x6c,0xdb,0x76,0xcd,0x35,0xb0,0xf7,0xde,0x7b,0xab,0x2d,0xb7,0xdc,0x32,0x55,
+ 0xe8,0xa7,0x29,0x03,0x28,0x00,0x00,0x00,0x00,0x29,0xc2,0xdf,0xf6,0x3e,0xe9,0x0d,
+ 0x30,0xbf,0xb3,0xcd,0xfe,0x67,0xce,0x0d,0x90,0xb6,0x7e,0x33,0x06,0x20,0x7e,0x9f,
+ 0xcc,0x00,0x18,0x31,0x62,0x84,0xda,0x75,0xd7,0x5d,0xd7,0x12,0xf2,0x66,0x33,0x49,
+ 0x7e,0x56,0x2f,0x25,0x00,0x05,0x00,0x00,0x00,0x5a,0x46,0x09,0x48,0x2b,0xd5,0x6b,
+ 0x0a,0xea,0x90,0x71,0x7d,0x53,0x20,0x27,0x87,0x18,0x5c,0xeb,0x91,0x71,0xff,0xce,
+ 0x9d,0x3b,0xa7,0x2a,0x00,0x3e,0x85,0xa0,0x1e,0x10,0x04,0x08,0x00,0x00,0x4d,0x89,
+ 0x6d,0xa6,0x3f,0xdb,0x67,0xf1,0xe7,0xb6,0x80,0x41,0x73,0x7a,0x5f,0xdb,0xdf,0xb2,
+ 0x7c,0xdc,0x92,0xdb,0x35,0xd7,0x33,0x7f,0xfe,0x7c,0x75,0xf2,0xc9,0x27,0xab,0xae,
+ 0x5d,0xbb,0x5a,0x85,0xbc,0x4d,0x29,0x68,0x24,0x0d,0x57,0x00,0xe4,0x40,0x01,0x00,
+ 0x00,0x54,0x23,0xfc,0xcd,0x62,0x3c,0xa6,0x62,0x60,0xbe,0xda,0x04,0xbd,0x2b,0x86,
+ 0xc0,0x35,0xee,0x6f,0xcb,0x3e,0x98,0x33,0x67,0x8e,0xfa,0xc2,0x17,0xbe,0xa0,0xfa,
+ 0xf4,0xe9,0xd3,0x21,0xec,0xcd,0xe6,0x52,0x02,0x1a,0xa5,0x10,0x34,0x5c,0x01,0xe8,
+ 0xdb,0xb7,0x2f,0x57,0x32,0x00,0x00,0x64,0x56,0x00,0x92,0x6e,0xf8,0xa4,0x35,0xee,
+ 0xb2,0xe4,0xd3,0xd2,0xfe,0xe2,0xdf,0xbb,0xbc,0x0a,0xa6,0x17,0x21,0xf9,0xfb,0xd9,
+ 0xb3,0x67,0x47,0x85,0x7e,0x86,0x0f,0x1f,0x1e,0x09,0xf8,0x2e,0x5d,0xba,0x74,0xbc,
+ 0xc6,0xcd,0x54,0x02,0x4c,0x45,0x20,0xa6,0x9e,0x19,0x01,0x0d,0x57,0x00,0x7a,0xf5,
+ 0xea,0xc5,0x95,0x0c,0x00,0x00,0x99,0x58,0xb5,0x6a,0x95,0xd5,0x92,0x77,0xb5,0xa4,
+ 0x05,0x6f,0x0a,0x79,0xdb,0xe7,0xb1,0x82,0xe1,0xab,0x06,0x28,0x96,0xbf,0x14,0xfa,
+ 0xd9,0x78,0xe3,0x8d,0xd7,0x11,0xfe,0x49,0xeb,0xdf,0x54,0x06,0x4c,0xe1,0xdf,0x96,
+ 0x1e,0x80,0x81,0x03,0x07,0x72,0x25,0x03,0x00,0x40,0x4d,0x0a,0x40,0x88,0x32,0x60,
+ 0x0a,0x78,0xf3,0xf7,0x69,0x7f,0xdb,0x94,0x85,0x79,0xf3,0xe6,0xa9,0xcf,0x7f,0xfe,
+ 0xf3,0x6a,0xec,0xd8,0xb1,0xeb,0x08,0x79,0x69,0x32,0xc4,0x2d,0xcd,0xf4,0x02,0x98,
+ 0xc3,0x02,0x8d,0x8a,0x07,0x68,0xb8,0x02,0xb0,0xe1,0x86,0x1b,0x72,0x25,0x03,0x00,
+ 0x40,0x26,0x42,0x2c,0xfe,0xb4,0x21,0x80,0xf8,0x33,0xc1,0x15,0x14,0x98,0xf6,0xfb,
+ 0xa5,0x4b,0x97,0xaa,0x2f,0x7d,0xe9,0x4b,0x6b,0xb9,0xfd,0x5d,0x82,0x3f,0xf9,0xde,
+ 0x36,0x1c,0x60,0xba,0xfd,0xdb,0x26,0x0d,0x70,0x83,0x0d,0x36,0xe0,0x4a,0x06,0x00,
+ 0x80,0x4c,0xd6,0x7f,0xf7,0xee,0xdd,0xd7,0x49,0xf7,0x33,0x0b,0xf3,0x98,0x42,0xde,
+ 0x95,0xef,0x9f,0x5c,0xce,0xf5,0x3e,0xb9,0x1e,0x09,0xf4,0x93,0x80,0xbf,0x1e,0x3d,
+ 0x7a,0x58,0x05,0xbf,0xad,0xb9,0xbc,0x00,0xb6,0xa1,0x80,0x7a,0xd1,0x70,0x05,0x60,
+ 0xe8,0xd0,0xa1,0x5c,0xcd,0x00,0x00,0x10,0x2c,0xfc,0x63,0x8b,0x3d,0x6d,0x32,0x9e,
+ 0x90,0x7c,0x7f,0x73,0xaa,0x60,0x57,0xc9,0xdf,0xe4,0x3a,0xb7,0xda,0x6a,0x2b,0xb5,
+ 0xe7,0x9e,0x7b,0xae,0x35,0xd6,0xef,0x12,0xfa,0xdd,0xba,0x75,0xf3,0x2a,0x02,0x8d,
+ 0xcc,0x02,0x28,0x85,0x07,0x40,0x0e,0x46,0x3c,0x9e,0x03,0x00,0x00,0x90,0x26,0xfc,
+ 0x93,0xc5,0x78,0x42,0xa6,0xe5,0xf5,0x59,0xf5,0xf1,0x7b,0x9b,0x17,0x21,0xb9,0xcc,
+ 0xc1,0x07,0x1f,0xac,0x46,0x8f,0x1e,0x6d,0xb5,0xf8,0x45,0xd8,0xbb,0x9a,0x29,0xfc,
+ 0x93,0x81,0x80,0x49,0x45,0xa0,0xde,0xd4,0x25,0x06,0xc0,0xd5,0x31,0xf9,0x5c,0x0e,
+ 0x8e,0xd4,0x4b,0x06,0x00,0x00,0x48,0x13,0xfe,0x2b,0x57,0xae,0xb4,0x96,0xf7,0x75,
+ 0xa5,0xe7,0xb9,0xc6,0xf1,0x4d,0xcb,0xdf,0x57,0x37,0x40,0xda,0xa7,0x3f,0xfd,0xe9,
+ 0xb5,0x84,0x7f,0x52,0x01,0x48,0x0a,0x7b,0x19,0x9a,0x88,0x9b,0x4d,0x09,0x90,0x96,
+ 0xcc,0x12,0x68,0x64,0x26,0x40,0xa1,0x0a,0x80,0xab,0xde,0xb1,0xd9,0xc9,0xad,0xb7,
+ 0xde,0x9a,0xab,0x1b,0x00,0x00,0xac,0x88,0xe0,0x97,0x96,0x14,0xd8,0xb6,0xbc,0x7f,
+ 0x9b,0xd0,0xb7,0x7d,0x66,0x56,0x05,0x34,0x97,0x31,0x97,0x17,0xe1,0xbf,0xfe,0xfa,
+ 0xeb,0x7b,0x85,0xbf,0xcf,0x03,0xe0,0x1b,0x02,0xf0,0x19,0xcd,0x79,0x53,0xc8,0x10,
+ 0x40,0xda,0xcc,0x47,0xb6,0x65,0x37,0xdb,0x6c,0x33,0xae,0x70,0x00,0x00,0x70,0x0a,
+ 0xff,0xa4,0x30,0x37,0x05,0xbb,0xe9,0xaa,0x37,0x95,0x02,0x73,0xd2,0x1f,0xdf,0x94,
+ 0xc0,0xc9,0x75,0x1d,0x71,0xc4,0x11,0x1d,0x43,0xd5,0x49,0xe1,0x6f,0x13,0xf4,0x36,
+ 0xeb,0xdf,0x14,0xfe,0xb6,0xca,0x80,0x8d,0xb0,0xfe,0x0b,0xf7,0x00,0x84,0x7a,0x01,
+ 0xa4,0x18,0xd0,0x76,0xdb,0x6d,0xc7,0x95,0x0e,0x00,0x00,0x6b,0x09,0xff,0x15,0x2b,
+ 0x56,0xac,0x25,0xa4,0x6d,0x29,0x7b,0x2e,0x8b,0x3e,0x7e,0x75,0xe5,0xff,0xbb,0xaa,
+ 0x07,0xc6,0xef,0x45,0xf8,0x4b,0xa0,0x7a,0x9a,0xf0,0x4f,0x0a,0xfd,0xa4,0xf0,0xb7,
+ 0x0d,0x01,0xb8,0x52,0x01,0x1b,0x61,0xfd,0x17,0xe6,0x01,0x70,0x29,0x01,0x69,0x9e,
+ 0x01,0x99,0x3a,0xf1,0xc5,0x17,0x5f,0xe4,0x8a,0x07,0x00,0x80,0x48,0xf0,0xc7,0x96,
+ 0xbf,0xad,0x5e,0xbf,0x29,0xe4,0x93,0xd6,0xbd,0x6b,0x26,0xc0,0xb4,0x38,0x81,0x78,
+ 0xf9,0xfe,0xfd,0xfb,0xab,0x71,0xe3,0xc6,0x75,0x8c,0xf7,0x27,0x23,0xfd,0xe5,0xd5,
+ 0x27,0xfc,0x5d,0xe3,0xff,0x69,0x95,0x00,0x1b,0x55,0x08,0xa8,0x6e,0x59,0x00,0xa6,
+ 0x86,0x63,0x36,0x29,0xa6,0x30,0x72,0xe4,0x48,0x35,0x6d,0xda,0x34,0xae,0x7c,0x00,
+ 0x80,0x36,0x17,0xfe,0xb1,0xe5,0x6f,0x0a,0xef,0xe4,0x54,0xbc,0x49,0xd7,0x7e,0x32,
+ 0xed,0x2f,0x29,0xd8,0x4d,0x65,0xc0,0x1c,0x06,0x88,0x3f,0xfb,0xe8,0x47,0x3f,0x1a,
+ 0xc5,0xa3,0xf5,0xee,0xdd,0x3b,0xfa,0xcc,0x55,0xdc,0xc7,0x25,0xfc,0xa5,0x26,0x80,
+ 0x4d,0x09,0xf0,0x0d,0x01,0x34,0xaa,0x06,0x40,0x21,0x0a,0x80,0x79,0xa0,0x6d,0xd6,
+ 0xbe,0xab,0xed,0xb7,0xdf,0x7e,0xea,0xaa,0xab,0xae,0xe2,0xea,0x07,0x00,0x68,0x73,
+ 0xe1,0x6f,0x0a,0xe8,0x18,0xd3,0xc5,0xef,0xca,0xdd,0x37,0x2d,0x7e,0x9b,0xe5,0x2f,
+ 0x95,0x68,0xc5,0xfb,0x2c,0x01,0x7e,0x49,0x19,0x95,0xac,0xdf,0x9f,0xb4,0xfc,0x63,
+ 0x05,0x20,0x4d,0xf8,0xdb,0x02,0x00,0x7d,0xf3,0x00,0x34,0x8a,0xc2,0x3d,0x00,0xae,
+ 0x09,0x0f,0x6c,0xf3,0x24,0x0f,0x1b,0x36,0x4c,0x6d,0xb2,0xc9,0x26,0x6a,0xf2,0xe4,
+ 0xc9,0xdc,0x05,0x00,0x00,0x6d,0xc6,0xf2,0xe5,0xcb,0xad,0x96,0xbf,0x59,0xac,0x27,
+ 0x69,0xf5,0xbb,0x02,0x00,0x6d,0x7f,0xcb,0xfb,0x9e,0x3d,0x7b,0xaa,0xdd,0x76,0xdb,
+ 0x4d,0x6d,0xba,0xe9,0xa6,0x91,0x40,0x8e,0x89,0x05,0xb3,0x39,0x93,0x9f,0x2f,0xd5,
+ 0xaf,0x1a,0xcb,0xbf,0x0c,0xd6,0x7f,0xa1,0x0a,0x40,0x88,0xf5,0x6f,0x1e,0x04,0x39,
+ 0x48,0x07,0x1d,0x74,0x90,0xba,0xfc,0xf2,0xcb,0xb9,0x13,0x00,0x00,0xda,0xd0,0xf2,
+ 0x8f,0x05,0xb5,0x6d,0x0c,0xdf,0x66,0xd5,0x27,0x5d,0xff,0xae,0xdf,0x08,0x9b,0x6f,
+ 0xbe,0x79,0xe4,0xe6,0x97,0x31,0xfe,0x58,0x71,0x30,0x65,0x51,0x56,0xe1,0x5f,0xcd,
+ 0xd8,0x7f,0x59,0x84,0x7f,0x61,0x0a,0x40,0xb2,0x8a,0x92,0xaf,0x99,0x1a,0x91,0xd4,
+ 0x58,0x96,0xa1,0x80,0xfb,0xef,0xbf,0x9f,0x3b,0x02,0x00,0xa0,0x4d,0x2c,0x7f,0x69,
+ 0xa6,0xf0,0xb7,0xb9,0xf0,0x6d,0xa9,0x7a,0x36,0x17,0xbf,0x2c,0x27,0xc2,0xfe,0x63,
+ 0x1f,0xfb,0x58,0x14,0x5f,0x96,0x5c,0x36,0x29,0x84,0x4d,0xcb,0x3c,0xe9,0xf6,0xb7,
+ 0x09,0xff,0xf8,0xd5,0x74,0xfb,0x9b,0xc2,0xdf,0x9c,0x19,0xd0,0x55,0xf6,0xb7,0x91,
+ 0xc3,0x00,0x0d,0xc9,0x02,0xb0,0x1d,0xf4,0xe4,0x67,0x12,0x88,0x31,0x71,0xe2,0x44,
+ 0x35,0x75,0xea,0x54,0xee,0x0c,0x00,0x80,0x36,0x10,0xfe,0xb6,0x2a,0x7d,0x36,0x81,
+ 0x6f,0xab,0xe7,0x9f,0xfc,0x3c,0x19,0xd0,0x27,0x42,0xda,0x26,0x83,0xcc,0x99,0xf8,
+ 0x5c,0x96,0xbf,0x19,0xf4,0x97,0x96,0xf6,0x67,0x0a,0x7f,0xd3,0xf5,0x6f,0x7a,0xbd,
+ 0x1b,0x2d,0xfc,0x0b,0x55,0x00,0x7c,0xd6,0xbe,0x4d,0xeb,0x4a,0xfe,0x2d,0x35,0x97,
+ 0xaf,0xbe,0xfa,0xea,0x68,0xca,0x45,0x00,0x00,0x68,0x4d,0xe1,0x2f,0xcf,0xf8,0xa4,
+ 0x40,0xf4,0x05,0xf2,0x99,0xc2,0x3f,0x1e,0x02,0x18,0x31,0x62,0x44,0x34,0xb6,0xbf,
+ 0xde,0x7a,0xeb,0xad,0xa5,0x0c,0xa4,0xc9,0xa2,0x50,0xe1,0xef,0x52,0x00,0x92,0x9f,
+ 0x27,0x27,0xff,0x49,0x5a,0xfd,0xf2,0x5a,0x46,0xe1,0x1f,0x2b,0x00,0x32,0x0b,0x4f,
+ 0x97,0xa2,0xad,0xff,0x34,0x97,0x8b,0xa9,0x04,0xc8,0xab,0x1c,0xd4,0xa3,0x8e,0x3a,
+ 0x4a,0x5d,0x73,0xcd,0x35,0xce,0x31,0x1d,0x00,0x00,0x68,0x4e,0x96,0x2d,0x5b,0xd6,
+ 0xe1,0xf6,0x77,0x4d,0xe2,0x63,0x8b,0xf4,0x4f,0x0a,0x4e,0x91,0x13,0xbb,0xef,0xbe,
+ 0x7b,0x14,0x3c,0x2e,0x82,0x37,0x5e,0x26,0x59,0x5d,0xcf,0x74,0xbd,0xdb,0xe4,0x4e,
+ 0x48,0x89,0x5f,0x53,0xe0,0xbb,0x6a,0xfd,0xdb,0xc6,0xfb,0xcd,0xc9,0x7e,0xca,0x20,
+ 0xfc,0x45,0xf6,0x8b,0x02,0x20,0x67,0xa0,0x57,0x91,0x5b,0xf1,0x79,0x01,0x4c,0x6d,
+ 0x29,0xfe,0xbc,0x6f,0xdf,0xbe,0xea,0xc8,0x23,0x8f,0x54,0x37,0xde,0x78,0x23,0x77,
+ 0x0b,0x00,0x40,0x8b,0x20,0x56,0x7f,0x72,0xcc,0xdf,0x25,0xf8,0xcd,0xef,0x63,0x8b,
+ 0x7f,0x8b,0x2d,0xb6,0xe8,0x08,0xe8,0x4b,0x0e,0x03,0xd8,0x84,0xbd,0x4f,0xf6,0xc8,
+ 0x6b,0x72,0xcc,0xdf,0xa7,0x00,0x98,0xef,0x6d,0x75,0xfe,0xcd,0xd9,0xfe,0xca,0x64,
+ 0xf5,0x27,0x1d,0x30,0xa2,0x00,0x2c,0x29,0x4a,0x01,0x70,0x45,0xfd,0xbb,0x34,0x2f,
+ 0xd3,0x15,0x23,0xef,0x07,0x0d,0x1a,0xa4,0x0e,0x3d,0xf4,0x50,0x75,0xc7,0x1d,0x77,
+ 0x70,0xd7,0x00,0x00,0xb4,0x80,0xe5,0x2f,0xcd,0xb4,0xec,0xcd,0xbf,0xcd,0x98,0x80,
+ 0x01,0x03,0x06,0x44,0x01,0x7d,0xa3,0x46,0x8d,0x5a,0x6b,0x7d,0xae,0xaa,0x7a,0xa6,
+ 0xbc,0x09,0xb5,0xfc,0x43,0x14,0x00,0x97,0xcb,0x3f,0x44,0xf8,0x97,0x48,0x09,0x58,
+ 0xd2,0x49,0x1f,0xd8,0x89,0xfa,0xcd,0xd8,0xbc,0xd7,0x1c,0xd7,0x59,0x8e,0x5b,0x3c,
+ 0x95,0x63,0x9c,0xea,0x11,0x5f,0x04,0xd2,0x44,0x1b,0x34,0x5b,0xfc,0x5d,0x9c,0x17,
+ 0x3a,0x6f,0xde,0x3c,0x75,0xf3,0xcd,0x37,0x33,0x1c,0x00,0x00,0xd0,0xc4,0x96,0xbf,
+ 0x3c,0xd7,0x6d,0x81,0x7c,0xb6,0xb2,0xbe,0xf2,0xba,0xe3,0x8e,0x3b,0xa6,0x06,0xf4,
+ 0xb9,0x02,0xfb,0x42,0x05,0xbf,0x2d,0xea,0x3f,0xa9,0x00,0xd8,0x94,0x01,0x53,0x59,
+ 0x30,0x3d,0xd8,0x4d,0x20,0xfc,0x85,0x49,0xe2,0x01,0x98,0x55,0x84,0x02,0x60,0x3b,
+ 0x41,0x3e,0xeb,0xdf,0xd5,0x44,0x81,0xe8,0xd7,0xaf,0x9f,0x1a,0x3f,0x7e,0xbc,0xba,
+ 0xed,0xb6,0xdb,0x08,0x0c,0x04,0x00,0x68,0x42,0xe1,0x9f,0x7c,0x76,0xbb,0x66,0xea,
+ 0x13,0xa4,0x34,0xbc,0x8c,0xed,0x87,0x06,0xf4,0xf9,0x04,0xbf,0xe9,0x5d,0x76,0x09,
+ 0xff,0xa4,0xf5,0x6f,0x53,0x02,0x6c,0x82,0xdf,0x37,0xe6,0x5f,0x52,0xe1,0x2f,0xcc,
+ 0x12,0x05,0xa0,0xd0,0xe2,0xfb,0x21,0xc1,0x17,0xe6,0x41,0x95,0x26,0x1e,0x03,0x69,
+ 0x49,0x2f,0x82,0x54,0x70,0x3a,0xfa,0xe8,0xa3,0xd5,0x43,0x0f,0x3d,0x44,0x8a,0x20,
+ 0x00,0x40,0x93,0x09,0x7f,0x33,0x72,0x3f,0xf9,0x5e,0x5c,0xec,0x12,0xc5,0x3f,0x76,
+ 0xec,0xd8,0xcc,0x01,0x7d,0xa6,0x7c,0x49,0x0a,0x64,0xdb,0xf0,0x72,0x9a,0xf0,0x37,
+ 0x95,0x00,0xf3,0x7d,0xf2,0x77,0x65,0xad,0xf0,0x17,0xc8,0x34,0x51,0x00,0xa6,0x14,
+ 0x29,0xfc,0x6d,0x05,0x81,0x42,0xc6,0x5f,0x62,0x05,0x40,0x5a,0xec,0x05,0x88,0xc7,
+ 0x84,0xf6,0xda,0x6b,0xaf,0x68,0xd2,0x20,0x51,0x04,0x00,0x00,0xa0,0xbc,0x2c,0x59,
+ 0xb2,0x24,0x72,0xfb,0xbb,0xca,0xf6,0xca,0x74,0xbb,0xfb,0xee,0xbb,0x6f,0x47,0x40,
+ 0x5f,0x4c,0x48,0x40,0x9f,0xe9,0x55,0x0e,0xb1,0xf8,0x6d,0xc2,0xdf,0xa5,0x04,0xd8,
+ 0x84,0xbe,0xcf,0xe5,0xdf,0x24,0xc2,0x5f,0x98,0x22,0x0a,0xc0,0xa4,0xa2,0x85,0x7f,
+ 0xfc,0xea,0xaa,0xb8,0x14,0x0b,0xfa,0x58,0xd3,0x4a,0x0a,0xff,0xd8,0x0b,0x60,0xce,
+ 0xfb,0x2c,0x39,0x9f,0xc7,0x1d,0x77,0x9c,0x7a,0xf2,0xc9,0x27,0xd5,0x94,0x29,0x53,
+ 0xb8,0xcb,0x00,0x00,0x4a,0x28,0xfc,0xa5,0x25,0x05,0x7e,0x5c,0x89,0x4f,0x82,0xf9,
+ 0x0e,0x38,0xe0,0x00,0x6b,0x3d,0xfe,0xac,0x01,0x7d,0xa1,0x42,0x3f,0x44,0x01,0x70,
+ 0x7d,0xe7,0xca,0x56,0x2b,0x63,0x85,0xbf,0x40,0xa2,0x18,0x80,0x17,0x8b,0xde,0x8a,
+ 0x2b,0x06,0x40,0x84,0x79,0x52,0x09,0x88,0x85,0x7f,0xfc,0x1a,0xbb,0xfe,0x4d,0xe1,
+ 0x1f,0x5f,0x48,0xf2,0xf7,0x2e,0xbb,0xec,0xa2,0x76,0xd8,0x61,0x07,0xf5,0xd4,0x53,
+ 0x4f,0xa9,0x77,0xde,0x79,0x87,0x3b,0x0e,0x00,0xa0,0xa4,0xc2,0x5f,0x9e,0xed,0x5b,
+ 0x6d,0xb5,0x55,0x14,0xcd,0x9f,0x4c,0xdf,0xab,0x25,0xa0,0xcf,0x14,0xfa,0xe6,0xf0,
+ 0x72,0x9a,0xf0,0x4f,0x7b,0xef,0xb2,0xf6,0xd3,0xac,0xfe,0x26,0x12,0xfe,0xc2,0x8b,
+ 0x92,0x05,0xd0,0x57,0xbf,0x99,0x27,0xca,0x57,0xde,0x6b,0x37,0x85,0x75,0x9c,0x0d,
+ 0x60,0x66,0x04,0xc4,0xa5,0x20,0x93,0x59,0x01,0xc9,0x2c,0x81,0x64,0x36,0x40,0xdc,
+ 0xe2,0x75,0x24,0xd7,0x2b,0xdb,0x79,0xf5,0xd5,0x57,0xd5,0x84,0x09,0x13,0xb8,0xfb,
+ 0x00,0x00,0x1a,0x2c,0xfc,0x63,0x21,0x2f,0xee,0xfd,0x71,0xe3,0xc6,0xa9,0x8d,0x36,
+ 0xda,0x68,0x9d,0x89,0x78,0xd2,0xaa,0xf4,0x85,0x08,0x7d,0x5f,0x70,0x5f,0xe8,0xe7,
+ 0xae,0x66,0x6e,0xd7,0x54,0x4c,0x92,0x0a,0x4c,0x13,0x09,0x7f,0x09,0xbc,0xe8,0xdf,
+ 0x55,0xef,0xec,0x42,0x7d,0x92,0x5e,0xd2,0x7f,0x6c,0x5f,0x84,0xe5,0x6f,0x46,0x70,
+ 0xca,0x01,0x8b,0x5d,0x40,0xb1,0x17,0x40,0x4e,0x48,0x2c,0xc4,0x93,0xaf,0xa6,0x07,
+ 0xc0,0x9c,0x16,0x52,0x90,0x65,0x93,0x0a,0x87,0x68,0x97,0xdb,0x6c,0xb3,0x8d,0x9a,
+ 0x3f,0x7f,0xbe,0x7a,0xf3,0xcd,0x37,0xd5,0xeb,0xaf,0xbf,0xbe,0xd6,0x32,0x00,0x00,
+ 0x50,0x1c,0x8b,0x17,0x2f,0x8e,0x8c,0x38,0x99,0xd8,0x6d,0xfb,0xed,0xb7,0x8f,0x9e,
+ 0xc9,0xb1,0xa0,0x34,0x27,0xe2,0xa9,0x36,0x8a,0x3f,0x74,0x7c,0xdf,0xf5,0xb9,0xaf,
+ 0x0e,0x8d,0xcd,0xcd,0x1f,0x32,0xd6,0xdf,0x24,0xc2,0x5f,0x78,0x49,0xef,0xeb,0xa2,
+ 0x78,0x2e,0x80,0x47,0x8b,0x50,0x00,0x92,0x8a,0x80,0xa9,0x04,0x24,0x15,0x80,0xa4,
+ 0x12,0x20,0x4d,0xa2,0x41,0xd3,0x84,0xbe,0xa9,0x71,0xc5,0x7f,0xc7,0xd1,0xa4,0xf2,
+ 0x2a,0x17,0xdf,0x47,0x3e,0xf2,0x91,0x28,0x7f,0x54,0x7e,0x2b,0xda,0xa8,0xd4,0x12,
+ 0x98,0x39,0x73,0x66,0xa4,0x1c,0xc8,0xdf,0x8b,0x16,0x2d,0x8a,0xbc,0x08,0x00,0x00,
+ 0x90,0x1d,0xc9,0xcd,0x17,0xeb,0x5e,0xd2,0xb4,0xa5,0x50,0x4f,0x3c,0xac,0x3b,0x66,
+ 0xcc,0x98,0x75,0x02,0xc0,0xe3,0xe7,0xb4,0x2f,0x98,0xcf,0x26,0xf4,0x43,0xc7,0xf6,
+ 0xb3,0x58,0xf7,0xa6,0x42,0x91,0x45,0xe8,0x9b,0xfd,0x6a,0x32,0xe1,0x1f,0xcb,0xfc,
+ 0x8e,0xc9,0x80,0xee,0xd5,0xed,0xf4,0xa2,0x84,0xbf,0x2d,0x8f,0x33,0xf6,0x04,0xc8,
+ 0x01,0x4f,0x8e,0xf1,0xc7,0x16,0xbf,0x69,0xfd,0xc7,0xda,0xa3,0x4b,0xa9,0x88,0x3d,
+ 0x07,0xf1,0xf6,0x92,0xbf,0x95,0xcf,0x7a,0xf5,0xea,0x15,0x35,0x89,0x38,0x4d,0x42,
+ 0x61,0x21,0x00,0x80,0xda,0x8c,0x3b,0xd7,0x73,0x39,0xeb,0xd8,0x7e,0x35,0x42,0x3f,
+ 0x8b,0xf0,0xf7,0x59,0xf8,0xb6,0xc0,0x3e,0xdf,0x38,0x7f,0x93,0x09,0x7e,0x95,0x90,
+ 0xf9,0x1d,0x0a,0xc0,0x7d,0xba,0xad,0xd0,0xad,0x5b,0x3d,0xbd,0x00,0x49,0x05,0x20,
+ 0xf6,0x02,0xd8,0xac,0xfe,0x34,0xc1,0x2f,0x16,0xbc,0xbc,0xc6,0xc2,0x3f,0x56,0x1c,
+ 0x64,0xfd,0xe6,0xf0,0x81,0xb9,0xae,0x64,0x10,0x0a,0x00,0x00,0xd4,0xa6,0x04,0xa4,
+ 0x29,0x00,0x45,0x8d,0xeb,0xa7,0x09,0xfe,0xb4,0xb9,0x66,0xd2,0x2c,0xfd,0x34,0xa1,
+ 0xdf,0xc4,0x56,0x7f,0xcc,0x8a,0x35,0x32,0xff,0x43,0x05,0x40,0x77,0x62,0x81,0x16,
+ 0x86,0x0f,0xe8,0xb7,0x07,0xd5,0xc3,0x0b,0x90,0x1c,0x0f,0x32,0xbd,0x00,0x3e,0x05,
+ 0xc0,0x54,0x22,0x4c,0x57,0x52,0x32,0x7e,0xc0,0x54,0x02,0x92,0xdb,0xc4,0x03,0x00,
+ 0x00,0x90,0xbf,0xe0,0xf7,0x3d,0xa3,0xab,0x4d,0xdd,0x0b,0x15,0xfe,0x79,0x0a,0x7d,
+ 0x97,0xb5,0xdf,0xe4,0x86,0xe3,0x03,0x22,0xf3,0x93,0x1e,0x00,0xe1,0xba,0xa2,0x14,
+ 0x00,0xd7,0x05,0x13,0x2b,0x02,0x49,0xc1,0xec,0x1a,0xf7,0xf7,0x69,0x94,0x71,0x56,
+ 0x40,0x2c,0xf4,0xd3,0x82,0x08,0x6d,0x9e,0x00,0x00,0x00,0xc8,0xd7,0xf2,0x4f,0xab,
+ 0xd2,0xe7,0xab,0xce,0x17,0xf2,0x99,0xed,0xf7,0xa1,0xee,0xfd,0xb4,0x71,0x7d,0x57,
+ 0x54,0x7f,0x8b,0x78,0x8c,0xaf,0x8b,0xdf,0x24,0x15,0x80,0x9b,0x75,0xfb,0xad,0x6e,
+ 0x3d,0x8b,0xf6,0x02,0x24,0x15,0x80,0x64,0x46,0x80,0x2d,0xd8,0xcf,0xb6,0x1e,0xdb,
+ 0x05,0x15,0x0b,0x7f,0x5b,0x09,0x61,0x33,0x26,0x20,0x29,0xf4,0x6d,0xdb,0x43,0x21,
+ 0x00,0x00,0x70,0x0b,0x7c,0x9f,0xe0,0x0f,0x99,0xfe,0x3d,0xc4,0xd2,0x0f,0x0d,0xea,
+ 0x73,0x55,0x02,0x34,0x15,0x90,0x90,0x80,0xbe,0x16,0x16,0xfc,0xc2,0xd2,0x35,0xb2,
+ 0x7e,0x6d,0x05,0x40,0x77,0x70,0xae,0x16,0x7c,0x37,0xea,0xb7,0x9f,0xa9,0xe7,0x45,
+ 0x94,0x1c,0x0e,0x48,0x56,0x84,0xb2,0x09,0xfd,0x34,0x8d,0x32,0x6e,0x66,0x05,0x41,
+ 0x5b,0x31,0xa1,0xa4,0xc7,0x01,0xa1,0x0f,0x00,0x50,0x9b,0xf5,0x1f,0x22,0xfc,0x43,
+ 0x2d,0xfe,0x50,0x05,0x20,0x34,0x65,0xcf,0x15,0xd0,0x67,0xee,0xbb,0x4d,0x3e,0xb5,
+ 0x60,0x8c,0xd8,0x8d,0x22,0xeb,0x6d,0x1e,0x00,0xe1,0x8a,0x22,0x15,0x80,0x64,0x59,
+ 0x60,0x53,0x01,0x08,0xb1,0xfa,0x4d,0x05,0x20,0xbe,0x10,0xa4,0x30,0x50,0x7c,0xb1,
+ 0x88,0x27,0x20,0xa9,0x00,0xc4,0x05,0x82,0x4c,0x4f,0x80,0xcb,0x0b,0x80,0x22,0x00,
+ 0x00,0x10,0x26,0xf8,0x93,0xcf,0xe7,0xf8,0x79,0x6e,0x7b,0x4e,0xa7,0x59,0xfe,0x21,
+ 0x95,0xf8,0xb2,0x8c,0xed,0xdb,0x04,0x7f,0x9b,0x5a,0xfb,0x36,0xae,0x48,0xfe,0xd1,
+ 0xd5,0x38,0xb9,0x8f,0x68,0x01,0xf8,0x8c,0x7e,0xbb,0x73,0x3d,0x95,0x00,0x33,0x1e,
+ 0x20,0x4d,0x01,0x48,0x5e,0x54,0x22,0xf8,0x93,0x43,0x00,0xd2,0x92,0x4a,0x80,0x19,
+ 0x0b,0x10,0x12,0x0f,0x80,0x22,0x00,0x00,0xa0,0x52,0x2d,0x61,0x5f,0xd0,0x5f,0x16,
+ 0xb7,0xbf,0xad,0xde,0x7e,0x88,0x9b,0xbf,0xd6,0x28,0xfe,0x36,0x12,0xfa,0x31,0xcf,
+ 0x88,0x8c,0x77,0x2a,0x00,0x6b,0xb8,0x58,0xb7,0xbf,0x16,0x7d,0x31,0x25,0x95,0x80,
+ 0x38,0x70,0xcf,0xa6,0x04,0xa4,0xb9,0x95,0xe2,0x0b,0x23,0x16,0xfe,0xb1,0xe0,0x4f,
+ 0x2a,0x00,0xe6,0x9c,0x02,0xc4,0x02,0x00,0x00,0x54,0x2f,0xfc,0x6d,0x82,0xdf,0xe6,
+ 0xa5,0xb5,0x4d,0xc9,0x9b,0xc5,0xfd,0x6f,0x2b,0xd4,0x53,0x6d,0x40,0x5f,0x9b,0x5a,
+ 0xfb,0x36,0xd9,0xbe,0xf6,0x79,0xb4,0x08,0x3d,0x91,0xc2,0x32,0x41,0xd0,0xd6,0x45,
+ 0xee,0x89,0x4d,0x00,0x27,0x85,0x74,0x52,0x80,0x27,0x85,0x7a,0x52,0xd8,0xdb,0x9a,
+ 0x6d,0x26,0x41,0xdf,0x30,0x80,0x29,0xe8,0x11,0xfc,0x00,0x00,0x6e,0x45,0xc0,0xa7,
+ 0x00,0x84,0xa6,0xfa,0xb9,0xac,0x7e,0x57,0x50,0x1f,0x01,0x7d,0x55,0x23,0x13,0xe4,
+ 0x6c,0xa7,0xfb,0xbe,0x3a,0xd5,0x03,0x20,0x0b,0x68,0x01,0xf8,0x3d,0xfd,0xf6,0x86,
+ 0x7a,0x79,0x01,0x92,0xd3,0x05,0x27,0x3d,0x01,0x3e,0xf7,0x92,0x79,0x21,0xb9,0x14,
+ 0x80,0x90,0x79,0x05,0xd2,0x84,0x3e,0x0a,0x01,0x00,0x60,0xf9,0xfb,0x3d,0x00,0x69,
+ 0x41,0xda,0x21,0x19,0x00,0xa1,0x82,0x9f,0x80,0xbe,0xcc,0x9c,0x67,0x0a,0x7f,0xab,
+ 0x07,0x20,0x21,0xf4,0xee,0xd7,0x2f,0xfb,0x16,0xbd,0x57,0x36,0x4f,0x40,0xb2,0x14,
+ 0x70,0xb2,0x99,0xc2,0xdd,0xf4,0x0e,0xf8,0x84,0x7f,0xa8,0x02,0x80,0xc0,0x07,0x00,
+ 0xc8,0xc7,0x03,0x10,0x32,0x6d,0xaf,0x4d,0xf0,0x63,0xed,0xe7,0x86,0x14,0xfe,0xd9,
+ 0xcf,0x7a,0x4e,0x53,0x04,0xf3,0x96,0xfa,0xe5,0x05,0xdd,0xba,0x37,0x4a,0x09,0xf0,
+ 0x29,0x02,0x2e,0xa5,0xc0,0x36,0xa3,0xa0,0x2d,0x06,0x00,0xe1,0x0f,0x00,0x50,0xbd,
+ 0x12,0x90,0x25,0x08,0x30,0xed,0x35,0x6b,0x3d,0x7e,0xdb,0xf6,0x11,0xfa,0x56,0x96,
+ 0xeb,0xb6,0xbd,0x3e,0x26,0xaf,0xda,0xbe,0xec,0x9a,0x72,0xa2,0x5f,0xd5,0xc2,0xf0,
+ 0x12,0xfd,0xf6,0x5b,0xf5,0xb8,0xa8,0x5c,0x75,0xf9,0x5d,0x5a,0x5f,0x72,0xb8,0x20,
+ 0xce,0xff,0x77,0x09,0xfe,0x34,0xeb,0x1f,0xe1,0x0f,0x00,0x50,0x9b,0x12,0x10,0x5a,
+ 0xf3,0x3f,0x8f,0x2a,0x7d,0x58,0xfb,0x99,0xb8,0xc4,0x25,0xfc,0x53,0x3d,0x00,0x6b,
+ 0x04,0x62,0x6f,0xfd,0xf2,0x6f,0xdd,0xc6,0xd4,0x6b,0x6f,0x6d,0xc1,0x79,0xa6,0xe5,
+ 0xee,0x12,0xf0,0x69,0x82,0x1f,0xf7,0x3f,0x00,0x40,0xbe,0xc2,0x3f,0xab,0x12,0xe0,
+ 0x52,0x0c,0xd2,0x52,0xf8,0xb0,0xf6,0xab,0x66,0x8a,0x6e,0xdb,0xe8,0x63,0xb4,0xb8,
+ 0x2a,0x05,0x60,0x8d,0x40,0xdc,0x5d,0xbf,0x3c,0xac,0x0a,0x9c,0x29,0x30,0x4d,0x09,
+ 0x48,0x2a,0x03,0xe6,0xd0,0x80,0x6b,0x0a,0x61,0x53,0xe8,0x23,0xfc,0x01,0x00,0x1a,
+ 0xa7,0x04,0xd8,0xc6,0xf3,0xb3,0x58,0xfb,0x04,0xf4,0x65,0x46,0x66,0xfc,0xdb,0x4b,
+ 0x1f,0xa7,0x27,0x52,0xcf,0x65,0xa0,0x40,0xfe,0x9a,0xb2,0xe4,0x10,0xd6,0x43,0x09,
+ 0x08,0x55,0x04,0x5c,0x02,0xdf,0x57,0xfc,0x27,0x24,0x0b,0x00,0x00,0x00,0x94,0x55,
+ 0xf0,0xdb,0x2c,0x74,0x9b,0x60,0x77,0x09,0x7c,0x57,0x34,0x3f,0xd6,0x7e,0x4d,0x9c,
+ 0xad,0x8f,0xd7,0x25,0xde,0xf3,0x98,0x41,0x20,0xdf,0xa6,0x5f,0x0e,0xab,0x77,0x2f,
+ 0x4c,0x45,0x20,0x4d,0x19,0x70,0x29,0x07,0xb6,0xe5,0x6d,0x42,0x1f,0x25,0x00,0x00,
+ 0xa0,0x3a,0x0f,0x80,0xcb,0x13,0x10,0xda,0x6c,0xeb,0x43,0xf0,0x57,0xc5,0xed,0xfa,
+ 0x98,0xfd,0x47,0xd0,0xb9,0xcc,0x20,0x88,0x07,0xeb,0x97,0x27,0x75,0x1b,0xdb,0x88,
+ 0x1e,0xf9,0x3c,0x02,0x2e,0xa5,0xc0,0xb5,0x5c,0x9a,0xd0,0x47,0x11,0x00,0x00,0x70,
+ 0x0b,0x7e,0x97,0x32,0x90,0x96,0x93,0x4f,0x69,0xde,0xba,0x30,0x49,0xb7,0xdd,0xf4,
+ 0xf1,0x9b,0x93,0xab,0x02,0xb0,0x46,0x30,0x4a,0x30,0xe0,0x63,0xba,0x0d,0x6b,0x54,
+ 0xef,0x5c,0x8a,0x80,0xcd,0x43,0x90,0xf6,0x19,0x02,0x1f,0x00,0x20,0x3f,0x85,0x20,
+ 0x64,0x58,0xc0,0xb5,0x1c,0x82,0x3f,0x17,0x66,0xe8,0x36,0x4e,0x1f,0xc3,0x29,0xc1,
+ 0xe7,0xb0,0x0a,0x01,0xbc,0xbd,0x7e,0x79,0x48,0xb7,0x01,0x8d,0xec,0xa9,0x4b,0x88,
+ 0xa7,0x59,0xf9,0xa1,0x01,0x7f,0x28,0x04,0x00,0x00,0x7e,0x0f,0x80,0xcb,0x13,0xe0,
+ 0x13,0xf0,0x04,0xf5,0xe5,0xce,0x3c,0xdd,0xf6,0xd6,0xc7,0xf1,0x85,0x4c,0xe7,0xb4,
+ 0x4a,0xe1,0xbb,0xb7,0x7e,0xf9,0xbf,0xba,0xf5,0x2c,0x43,0xcf,0x7d,0x16,0x7d,0x88,
+ 0xe0,0x47,0xe8,0x03,0x00,0xd4,0xa6,0x0c,0xa4,0x59,0xf3,0x08,0xfd,0xc2,0x58,0xaa,
+ 0xdb,0xc1,0xfa,0x78,0x3e,0x94,0xf9,0x3c,0xd6,0x20,0x74,0x45,0x09,0xb8,0xb5,0xd1,
+ 0x9e,0x80,0x2c,0xc2,0x3c,0x54,0xc8,0xa3,0x0c,0x00,0x00,0x84,0x7b,0x00,0xb2,0x2a,
+ 0x07,0x90,0xab,0xe5,0x7f,0x78,0x35,0xc2,0xbf,0x26,0x05,0x60,0x8d,0xa0,0xdc,0x7e,
+ 0x8d,0x27,0x60,0x58,0x33,0x1d,0x31,0x04,0x3c,0x00,0x40,0x63,0x14,0x04,0xc8,0x8d,
+ 0x19,0x6b,0x2c,0xff,0x17,0xaa,0x3e,0x67,0x39,0x08,0x53,0x09,0x0c,0xbc,0x47,0x35,
+ 0x28,0x3b,0x00,0x00,0x00,0xa0,0xcd,0x90,0x68,0xff,0x83,0xb2,0x04,0xfc,0xd9,0xe8,
+ 0x9c,0x83,0xd6,0x27,0x3b,0xb0,0x9b,0x6e,0xb7,0x73,0x4e,0x00,0x00,0x00,0x0a,0x45,
+ 0x64,0xed,0x6e,0xb5,0x0a,0xff,0x5c,0x14,0x80,0x35,0x4a,0xc0,0x9c,0x35,0x85,0x07,
+ 0xce,0x56,0x1f,0x96,0x20,0x04,0x00,0x00,0x80,0xfc,0x10,0xd9,0x2a,0x15,0xfe,0xfe,
+ 0x23,0x34,0xcf,0xdf,0x2b,0xbb,0xf3,0xde,0xc3,0x35,0x73,0x07,0x5c,0xa3,0xea,0x38,
+ 0x81,0x10,0x00,0x00,0x40,0x0b,0x23,0xd6,0xfe,0x09,0xbe,0xda,0xfe,0x0d,0xf1,0x00,
+ 0x18,0xde,0x00,0xd9,0xc1,0x6d,0x74,0xfb,0x89,0xfa,0x70,0x2e,0x62,0x00,0x00,0x00,
+ 0xc8,0xce,0xf2,0x35,0xb2,0x74,0x9b,0xbc,0x85,0x7f,0x21,0x1e,0x00,0xc3,0x1b,0xb0,
+ 0xa5,0x7e,0xb9,0x4c,0xb7,0x7d,0x39,0x8f,0x00,0x00,0x00,0xc1,0x3c,0xa0,0xdb,0x57,
+ 0xb4,0xe0,0x7f,0xb5,0xa8,0x0d,0x74,0x2e,0x72,0xef,0x65,0xc7,0x75,0xdb,0x4f,0xbf,
+ 0x3d,0x5a,0xb7,0x09,0x9c,0x4f,0x00,0x00,0x80,0x54,0x44,0x56,0x1e,0x2d,0xb2,0xb3,
+ 0x48,0xe1,0x5f,0xb8,0x07,0xc0,0xf0,0x06,0x88,0xb2,0x31,0x5e,0x7d,0x18,0x28,0xb8,
+ 0x33,0xe7,0x18,0x00,0x00,0xa0,0x83,0x67,0x74,0xbb,0x58,0xb7,0xeb,0xb5,0xe0,0x5f,
+ 0x5d,0x8f,0x0d,0x36,0xa4,0x72,0x83,0x56,0x06,0xf6,0xd4,0x2f,0xa7,0xea,0x76,0x94,
+ 0x2a,0x49,0x39,0x61,0x00,0x00,0x80,0x3a,0x23,0x65,0x7c,0x6f,0xd4,0xed,0x0a,0x2d,
+ 0xf4,0x1f,0xa9,0xf7,0xc6,0x1b,0x5a,0xba,0x49,0x2b,0x02,0x83,0xf4,0xcb,0x11,0xba,
+ 0x1d,0xab,0x3e,0x8c,0x13,0xe8,0xc6,0xf5,0x00,0x00,0x00,0x2d,0x8c,0xa4,0xf3,0xc9,
+ 0xf8,0xfe,0x75,0xba,0xdd,0xac,0x05,0xff,0xdc,0x46,0xed,0x48,0x69,0x6a,0x37,0x6a,
+ 0x65,0xa0,0x9f,0x7e,0x39,0x40,0xb7,0xfd,0x75,0xdb,0x43,0xb7,0x6d,0x55,0xc1,0x31,
+ 0x0a,0x00,0x00,0x00,0x05,0x23,0xee,0xfc,0x97,0x74,0x7b,0x54,0xb7,0xfb,0x74,0xbb,
+ 0x57,0x0b,0xfd,0x05,0x65,0xd8,0xb1,0xd2,0x16,0x6f,0xd6,0x0a,0x41,0x5f,0xf5,0x61,
+ 0x3a,0xe1,0x76,0xea,0xc3,0x32,0xc3,0x52,0x57,0x60,0xa4,0x6e,0xeb,0xe9,0x36,0x58,
+ 0xb7,0x5e,0xba,0x75,0xd7,0xad,0x0b,0xd7,0x17,0x00,0x00,0x34,0x80,0x55,0xea,0xc3,
+ 0x54,0xbd,0x25,0xba,0x49,0x71,0x9e,0x59,0xba,0x4d,0x53,0x1f,0xe6,0xed,0x4b,0xb9,
+ 0xde,0x17,0x45,0xf8,0x6b,0x81,0xbf,0xa8,0x8c,0x3b,0xff,0xff,0x00,0xa9,0xd9,0x66,
+ 0x33,0x79,0x3c,0x5d,0x0d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+ 0x82,
+
+};
{
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08,0x06,0x00,0x00,0x00,0xc3,0x3e,0x61,
- 0xcb,0x00,0x00,0x12,0x8c,0x49,0x44,0x41,0x54,0x78,0x01,0xec,0xd5,0x01,0x44,0x2c,
- 0x51,0x14,0xc6,0xf1,0xcf,0x06,0x10,0x25,0x45,0xa9,0x01,0x12,0x48,0x02,0x01,0x10,
- 0x64,0x42,0x28,0x28,0x03,0xa1,0x24,0x01,0xc5,0x14,0x04,0x29,0x50,0x29,0x54,0x01,
- 0x50,0x51,0xa0,0xc8,0xc0,0x50,0xa1,0x28,0x80,0x0a,0x02,0x01,0xad,0x10,0xb2,0xc4,
- 0x32,0xbb,0xcb,0xff,0xed,0xbb,0x76,0xc7,0x1a,0xdb,0xbe,0x17,0xc0,0x6d,0x7e,0x1c,
- 0xec,0x39,0xe3,0x0c,0xf7,0xdb,0xbb,0xab,0x46,0x00,0x07,0xf0,0x81,0x10,0xc8,0x02,
- 0x11,0x16,0xb0,0x5c,0x54,0xc9,0x2a,0xac,0x64,0xe7,0xe8,0xa7,0x80,0x6e,0xe0,0x18,
- 0x28,0x61,0x3b,0xfb,0x95,0x2a,0x59,0x76,0xff,0x6f,0xf8,0x2e,0x90,0xc3,0x36,0xa9,
- 0x1c,0xe0,0xaa,0x11,0x60,0xce,0xea,0x5b,0x9f,0x2a,0x01,0x73,0x8d,0x6e,0x7e,0x09,
- 0xdb,0xa5,0x4a,0x80,0x5b,0xef,0x3f,0x3f,0xc7,0x6f,0x91,0xca,0x01,0xdd,0xaa,0x02,
- 0x8e,0x49,0x18,0x1c,0x1c,0xa4,0xa7,0xa7,0x87,0xf5,0xf5,0x75,0xac,0x94,0x3a,0x56,
- 0x59,0x06,0x70,0x24,0x79,0x4a,0xc8,0x66,0xb3,0xa6,0x3e,0x3f,0x3f,0x65,0xa5,0x94,
- 0x67,0xb2,0x07,0x7c,0xea,0x58,0x5e,0x5e,0x66,0x7e,0x7e,0x9e,0xf3,0xf3,0x73,0x52,
- 0xd6,0xf2,0x05,0x84,0xa4,0x7e,0xab,0x30,0x23,0xa9,0x5f,0x75,0x1c,0x1c,0x1c,0x68,
- 0x73,0x73,0x53,0xb7,0xb7,0xb7,0xaa,0xf5,0xfc,0xfc,0x6c,0xfa,0x5b,0x5b,0x5b,0x2a,
- 0x16,0x8b,0xfa,0xf8,0xf8,0xd0,0xc9,0xc9,0x89,0xa6,0xa7,0xa7,0x35,0x35,0x35,0xa5,
- 0xed,0xed,0x6d,0xbd,0xbf,0xbf,0xeb,0x5f,0x3b,0x01,0x3d,0x3c,0x3c,0x68,0x6d,0x6d,
- 0x4d,0x63,0x63,0x63,0x5a,0x5a,0x5a,0x52,0x10,0x04,0x6a,0xe4,0xed,0xed,0x4d,0xbb,
- 0xbb,0xbb,0xf2,0x3c,0x4f,0x13,0x13,0x13,0xda,0xd8,0xd8,0xd0,0xeb,0xeb,0xab,0x6a,
- 0xed,0xed,0xed,0x99,0x77,0x5c,0x5d,0x5d,0xe9,0x3b,0x37,0x37,0x37,0xe6,0x99,0xa3,
- 0xa3,0x23,0x25,0x5d,0x5e,0x5e,0xca,0xf7,0x7d,0x8d,0x8e,0x8e,0x6a,0x61,0x61,0x41,
- 0xa7,0xa7,0xa7,0x02,0x64,0xa9,0x7e,0x01,0x11,0x75,0xb4,0xb7,0xb7,0x23,0x89,0xc5,
- 0xc5,0x45,0x6a,0xed,0xef,0xef,0x23,0xc9,0xd4,0xd3,0xd3,0x13,0x9d,0x9d,0x9d,0x48,
- 0xaa,0x2d,0xd3,0x2b,0x87,0xdb,0x70,0xe7,0xca,0xca,0x0a,0x92,0x48,0xd6,0xec,0xec,
- 0x2c,0x85,0x42,0x81,0xa4,0x30,0x0c,0x69,0x6b,0x6b,0x23,0xf9,0x7c,0x4b,0x4b,0x8b,
- 0x99,0x55,0xb9,0xae,0x6b,0xfa,0xbd,0xbd,0xbd,0x7c,0xa7,0xaf,0xaf,0x0f,0x49,0x94,
- 0x03,0xa6,0xea,0xeb,0xeb,0x8b,0xc9,0xc9,0x49,0xd3,0x4f,0xd6,0xf8,0xf8,0x38,0xf9,
- 0x7c,0x1e,0x0b,0x45,0x22,0xf6,0xf3,0x2f,0x40,0x57,0x57,0x17,0x99,0x4c,0x86,0xa1,
- 0xa1,0x21,0x73,0x98,0xc3,0xc3,0xc3,0xf1,0xcc,0x71,0x1c,0xa2,0x28,0xaa,0xbb,0xb3,
- 0xb5,0xb5,0x15,0x49,0x7f,0x3f,0x9b,0x43,0x9f,0x99,0x99,0xa9,0xce,0x4c,0x1d,0x1e,
- 0x1e,0x52,0xeb,0xe5,0xe5,0x85,0xa6,0xa6,0x26,0x33,0x1b,0x19,0x19,0x21,0x08,0x02,
- 0x2e,0x2e,0x2e,0x18,0x18,0x18,0x30,0xbd,0x8e,0x8e,0x8e,0x38,0xa0,0xb3,0xb3,0xb3,
- 0x78,0xcf,0xfd,0xfd,0x3d,0x49,0x77,0x77,0x77,0xf1,0xfc,0xf1,0xf1,0x91,0x2a,0xcf,
- 0xf3,0x4c,0xaf,0xb9,0xb9,0x99,0x9d,0x9d,0x1d,0xae,0xaf,0xaf,0x59,0x5d,0x5d,0x8d,
- 0xdf,0x5b,0xfe,0xc5,0xc3,0x46,0x7f,0xd8,0x33,0x03,0x8f,0xda,0x82,0x20,0x8c,0x7f,
- 0x3d,0xb7,0xaa,0x22,0x88,0x50,0x54,0x49,0x52,0x10,0x08,0x55,0x55,0x10,0x08,0x22,
- 0x80,0x0a,0xa8,0xa0,0x84,0x82,0x42,0xe8,0x9f,0xa8,0x92,0x84,0x90,0x00,0xa9,0x28,
- 0x54,0x14,0x92,0x84,0x40,0x44,0x29,0x52,0xa9,0x54,0x29,0x85,0x6a,0xde,0x67,0x98,
- 0x63,0x9d,0xb7,0x75,0xea,0x7a,0x91,0xea,0xc7,0x70,0xdf,0xee,0xdb,0xdd,0x75,0x76,
- 0x76,0x67,0xbe,0x29,0x6e,0x07,0xb0,0xdb,0xb7,0xb8,0xb8,0x28,0x0e,0xea,0x08,0xd6,
- 0x3f,0x3a,0x3a,0xea,0x9b,0x53,0xad,0xb9,0xb9,0x59,0xee,0xef,0xef,0xc5,0xd8,0xdb,
- 0xdb,0x93,0x8c,0x8c,0x8c,0xc0,0x79,0x18,0x5e,0xc4,0x68,0x6c,0x6c,0xd4,0xf6,0xd2,
- 0xd2,0x52,0x79,0x7a,0x7a,0x12,0x83,0xa1,0x46,0x92,0x92,0x92,0xb4,0x8f,0xe1,0x45,
- 0xdb,0x1e,0x1e,0x1e,0x74,0x5f,0x00,0xa4,0xb3,0xb3,0x53,0xc2,0x30,0x54,0x69,0x5f,
- 0x79,0x79,0xb9,0x18,0x9b,0x9b,0x9b,0x92,0x90,0x90,0x20,0x00,0xd4,0x81,0x5c,0xba,
- 0xba,0xba,0xcc,0xd9,0x6d,0x4f,0xc6,0xaf,0x03,0x6c,0x6f,0x6f,0x4b,0x98,0xe3,0xe3,
- 0xe3,0xe0,0xd6,0xb4,0xb4,0xb4,0x78,0xe7,0x6c,0x6a,0x6a,0x92,0x97,0x97,0x17,0x09,
- 0xa1,0xaa,0xc3,0xe6,0x66,0x6c,0xd7,0xb6,0xf3,0xf3,0xf3,0xa0,0x8d,0xf9,0x85,0x84,
- 0xa9,0xaa,0xaa,0xd2,0xbe,0xb6,0xb6,0x36,0x31,0x3a,0x3a,0x3a,0x82,0x97,0xe6,0xf1,
- 0xf1,0x51,0x8c,0x9b,0x9b,0x1b,0x49,0x4b,0x4b,0xd3,0xbe,0xb1,0xb1,0xb1,0xf0,0x21,
- 0xab,0x03,0x86,0xf7,0xc5,0x5c,0x22,0x58,0x7f,0x7f,0x7f,0xdf,0xe9,0xf9,0x75,0x00,
- 0xfd,0xa0,0x3e,0x72,0x73,0x73,0xb5,0x9f,0x87,0x13,0x39,0xa7,0xcb,0xc4,0xc4,0x84,
- 0xcd,0xad,0x1f,0x9e,0xe8,0x33,0x6e,0x6d,0x65,0x65,0x65,0xc2,0xe4,0xcf,0x35,0xc9,
- 0xcc,0xcc,0xd4,0xbe,0xfa,0xfa,0x7a,0x31,0xdc,0x31,0x33,0x33,0x33,0x62,0x8c,0x8c,
- 0x8c,0xd8,0x33,0xaf,0x31,0xdf,0x68,0x68,0x68,0xd0,0xf6,0xc4,0xc4,0xc4,0x7f,0xe6,
- 0xaf,0xae,0xae,0x0e,0xe6,0x5a,0x5d,0x5d,0x15,0x63,0x7a,0x7a,0x5a,0xd7,0x8c,0xb2,
- 0x9e,0x9e,0x1e,0xf9,0xca,0xfc,0xc1,0x27,0xc0,0x83,0x06,0xc1,0xc5,0xc5,0x45,0x5c,
- 0xe3,0xdc,0xb1,0xbc,0x75,0xae,0x02,0x01,0x63,0xbf,0x6b,0xb8,0xbc,0xbc,0x04,0x51,
- 0x35,0x62,0x54,0x56,0x56,0xa2,0xa8,0xa8,0x08,0xc4,0xcd,0xf4,0x31,0x3e,0x3e,0x0e,
- 0xa2,0x6a,0x85,0x4e,0x00,0xe2,0xae,0xa1,0xaa,0x26,0x3c,0xff,0xfa,0xfa,0x3a,0x0c,
- 0x77,0x8d,0x83,0x83,0x03,0xd0,0x21,0x22,0x6d,0x6b,0x6b,0x0b,0x5f,0x99,0x4f,0x71,
- 0x80,0xdb,0xdb,0x5b,0x10,0xb0,0x94,0x1c,0xd7,0x38,0x77,0x2c,0x13,0x3c,0x18,0x94,
- 0x8c,0x58,0x59,0x59,0xf1,0xda,0xe4,0xe4,0x24,0x5c,0x18,0x12,0x40,0xc0,0x1c,0x05,
- 0x67,0x67,0x67,0xea,0x3c,0x76,0x18,0xed,0xed,0xed,0x30,0xdc,0x35,0x0a,0x0a,0x0a,
- 0xbc,0x73,0x9b,0xf1,0x46,0x83,0xd8,0x1c,0x3a,0x67,0x84,0xa9,0x44,0xfe,0xca,0xc4,
- 0xf0,0x9f,0x61,0x92,0x86,0x93,0x93,0x93,0xe0,0x83,0x7e,0x84,0xa3,0xa3,0x23,0x18,
- 0x36,0x96,0x89,0x1f,0x0c,0x11,0xb1,0x43,0x88,0xa4,0xb5,0xb5,0x15,0x83,0x83,0x83,
- 0xba,0x1f,0x6a,0x79,0xbd,0xb1,0x04,0x54,0x0e,0xa0,0x6a,0x81,0x61,0x6b,0x6c,0x6c,
- 0x6c,0xe8,0xbe,0x2b,0x2a,0x2a,0x90,0x9c,0x9c,0x8c,0x28,0x18,0x7a,0xd4,0xe2,0xe0,
- 0xfb,0xbc,0x00,0xd4,0xeb,0x08,0x33,0x3f,0x3f,0x0f,0x66,0xf7,0x20,0x60,0x0e,0x10,
- 0x3d,0xce,0x81,0xf1,0x3a,0x38,0xfc,0xec,0xec,0x6c,0x80,0x50,0x11,0x20,0x3f,0x3f,
- 0x1f,0x20,0xc3,0xc3,0xc3,0xb8,0xbe,0xbe,0xc6,0x7b,0xc8,0xcb,0xcb,0x03,0x65,0x29,
- 0x40,0x98,0xf0,0x61,0x6a,0x6a,0xca,0x77,0xfb,0x95,0x9a,0x9a,0x1a,0x80,0x30,0x61,
- 0x04,0x25,0x20,0xe2,0xe0,0x67,0x3a,0x40,0x6d,0x6d,0xad,0x1b,0xe3,0xb4,0x52,0xc7,
- 0x02,0x0f,0x88,0x1e,0x1a,0x55,0x00,0x7c,0x30,0x19,0x43,0x7f,0x7f,0xbf,0xeb,0x08,
- 0x5a,0x99,0x63,0x61,0x09,0x20,0x03,0x03,0x03,0xa0,0x2c,0x83,0x5b,0xdd,0x23,0xfa,
- 0x94,0xb3,0x28,0x83,0xc3,0xc3,0x43,0x18,0xcf,0xcf,0xcf,0x3a,0x6e,0x69,0x69,0x09,
- 0x61,0x28,0xf9,0x00,0xb2,0xbb,0xbb,0x8b,0xab,0xab,0x2b,0xa4,0xa6,0xa6,0xfa,0xf6,
- 0xa4,0xe1,0x82,0xb2,0x10,0x20,0x43,0x43,0x43,0xea,0x30,0x22,0x02,0x83,0x4a,0x04,
- 0x73,0x73,0x73,0xfa,0x42,0x7c,0x3b,0xe2,0x55,0x01,0xae,0x15,0x17,0x17,0x0b,0x6f,
- 0x91,0xa4,0xa7,0xa7,0xeb,0xbf,0xf9,0x84,0xca,0xec,0xec,0xec,0x6b,0x73,0x9a,0x69,
- 0x36,0x5e,0x57,0x57,0xa7,0x55,0x3b,0x6b,0xa3,0x53,0x79,0x2b,0x81,0xdd,0xdd,0xdd,
- 0xc1,0xff,0xa1,0xf6,0x57,0x45,0xc0,0xa7,0xdc,0xd6,0xd4,0xdf,0x61,0xee,0xee,0xee,
- 0x74,0x0d,0x00,0x8e,0x54,0xf4,0xb3,0xb3,0xb3,0x23,0x39,0x39,0x39,0x6e,0x91,0x4b,
- 0x55,0x4c,0x61,0x61,0x61,0xd0,0xb6,0xb0,0xb0,0xf0,0x73,0x64,0x60,0x56,0x56,0x96,
- 0x00,0x90,0xde,0xde,0xde,0x57,0x1d,0x60,0x79,0x79,0x59,0x4a,0x4a,0x4a,0xdc,0x43,
- 0xd5,0x0f,0xc6,0xcc,0xf9,0x2d,0xa7,0x52,0xdd,0xdd,0xd7,0xd7,0x27,0x29,0x29,0x29,
- 0xc1,0x38,0xfe,0x16,0x3e,0xcf,0x56,0x3d,0xf4,0xc2,0x3a,0xbd,0xeb,0x2c,0x6a,0xb1,
- 0x58,0x4c,0x0b,0x44,0x7c,0x79,0x44,0xf1,0x17,0x7e,0xd4,0xd6,0xd6,0xd6,0xe4,0x2d,
- 0xf8,0xa7,0x6f,0xad,0x5d,0x58,0xad,0xc0,0x8c,0xb1,0x5e,0x25,0x1d,0x93,0xba,0x6f,
- 0xea,0x00,0x1f,0xc0,0x57,0x07,0x38,0x3d,0x3d,0xd5,0x43,0xe7,0x13,0x29,0xca,0x3b,
- 0x5f,0x15,0xde,0x74,0x2d,0xc7,0xd2,0xf4,0xf7,0x7b,0x61,0x1e,0x20,0x4c,0xda,0x74,
- 0xdc,0x5f,0x76,0xce,0x40,0x23,0xde,0x26,0x0a,0xe3,0x07,0xdd,0x40,0xd7,0x51,0xa1,
- 0x44,0x00,0x54,0x20,0x29,0x50,0x04,0xd0,0x05,0xa4,0x1b,0x88,0x80,0x82,0xa8,0x00,
- 0xba,0x82,0x84,0x2e,0x23,0x21,0x20,0x52,0x74,0x2d,0xf3,0xfd,0x3c,0x3c,0x2c,0x8d,
- 0xf5,0x1d,0xbb,0xfd,0x8d,0xed,0xfc,0x18,0x6f,0x6f,0xb3,0xdb,0xf6,0xce,0x9c,0x9d,
- 0x99,0x39,0xe7,0x3c,0x23,0x47,0xcf,0x9c,0x61,0x5a,0x69,0x9f,0x9f,0x9f,0x0d,0x83,
- 0x91,0xb7,0x71,0x3a,0x65,0x00,0xd3,0x48,0x39,0x82,0x8a,0xa1,0x1d,0x41,0x45,0xed,
- 0x02,0x8a,0x32,0x00,0x56,0xed,0x71,0x7b,0x7b,0x1b,0x77,0x77,0x77,0xc1,0x62,0x29,
- 0x32,0x5c,0x5d,0x5d,0xe9,0xbd,0xf8,0xd8,0xa3,0x18,0x84,0x56,0xfc,0x69,0xa2,0xf5,
- 0x29,0xca,0x00,0x8a,0x32,0x80,0xa2,0x0c,0xa0,0x28,0x03,0x28,0xca,0x11,0x54,0xac,
- 0xaf,0xaf,0x2b,0x34,0x8d,0x16,0xe1,0x2f,0xfa,0x01,0x8a,0xdf,0xd4,0x4a,0x92,0x88,
- 0x3a,0xba,0x01,0x14,0xa7,0xa7,0xa7,0x41,0xd6,0x72,0x90,0x24,0x1a,0x73,0x42,0x0e,
- 0xb1,0xe5,0xe5,0x65,0xe5,0x2d,0xfc,0x41,0x47,0x50,0xb1,0xb2,0xb2,0xd2,0x22,0x42,
- 0xa2,0x94,0x24,0xb5,0x06,0x98,0x5d,0x77,0xd8,0xd7,0x3a,0x32,0xcc,0x2b,0xf5,0x0c,
- 0xe1,0x8a,0x32,0x97,0xb2,0x5a,0x49,0x84,0x29,0xca,0x1e,0x3a,0x3b,0x3b,0x8b,0xc3,
- 0xc3,0xc3,0x40,0x5d,0xe4,0xcc,0x65,0xe1,0x0c,0x25,0xde,0xa3,0x0c,0xa7,0x80,0xf7,
- 0xf7,0xf7,0xe0,0x5e,0xe5,0xfe,0xfe,0x3e,0xaf,0x89,0xcc,0x3f,0xcf,0xe2,0x8d,0x00,
- 0x39,0xdd,0x61,0x3f,0xbc,0x4d,0x8e,0x81,0x65,0x6b,0xd6,0x0e,0xa6,0x32,0xa4,0x48,
- 0x3c,0x6d,0x9b,0x9b,0x9b,0xbe,0x9f,0xcc,0x2e,0x92,0xc0,0xc5,0x90,0x9f,0xd8,0xfd,
- 0xff,0x9c,0x25,0x95,0xd7,0x44,0xe6,0x9f,0xc7,0x2c,0x9c,0x01,0x24,0x75,0x87,0x6e,
- 0x30,0x6b,0x0c,0x2d,0x40,0x51,0x63,0xd1,0x51,0x09,0x03,0x90,0x20,0xd5,0x1d,0x2e,
- 0x63,0x5b,0x5d,0x5d,0x75,0x9d,0x32,0xa0,0xcc,0xc7,0xc7,0x47,0xbb,0xbe,0xbe,0xf6,
- 0xdf,0x6c,0x6b,0x6b,0x6b,0xba,0xa7,0x34,0x82,0x65,0x69,0x4d,0x64,0xe2,0x79,0x16,
- 0xdb,0x00,0x12,0xba,0xc3,0x5e,0x83,0x49,0xe8,0xfa,0xfc,0xfc,0x3c,0x53,0x8e,0x24,
- 0xd3,0x8d,0x32,0x8a,0x40,0x57,0xe7,0x24,0x92,0xa1,0x9c,0x5e,0x03,0x24,0x34,0x91,
- 0x89,0xe7,0x59,0x70,0x3f,0x00,0xba,0xc3,0x78,0x7a,0x7a,0x72,0xa8,0x5a,0xf0,0xcd,
- 0xd4,0xfc,0xe9,0xf9,0x54,0x59,0xc5,0x1d,0x98,0x37,0xf5,0xfe,0x59,0x76,0x0a,0x37,
- 0x37,0x37,0x41,0xc3,0x07,0xe8,0xba,0xb1,0xb1,0x11,0xa0,0x75,0x40,0x06,0x94,0x51,
- 0x4a,0xb1,0xf7,0xdf,0x65,0x24,0x08,0xc3,0x08,0xe3,0x2c,0xe6,0x78,0x7d,0x7d,0x0d,
- 0x48,0x3c,0xcf,0x82,0x6f,0x03,0xd1,0x14,0x38,0xa5,0xdc,0x08,0x8b,0x41,0x2c,0xeb,
- 0xea,0xc1,0xb0,0x1d,0x33,0xa0,0xce,0x37,0x86,0xb3,0x12,0x22,0x0d,0x7c,0x7d,0x7d,
- 0x85,0x41,0x5d,0xa4,0x45,0xdc,0x64,0x61,0x21,0xf9,0x43,0x4c,0x93,0x7e,0x1e,0x58,
- 0x8a,0x45,0x23,0xa1,0x3b,0x9c,0x37,0xfa,0xe6,0xcf,0x4e,0x4f,0x13,0xa9,0xd2,0x43,
- 0x7a,0xc5,0x72,0x04,0xe5,0x75,0x87,0xa3,0x93,0xd3,0x44,0x4e,0xa1,0x46,0x80,0xbe,
- 0xee,0x70,0x24,0xac,0x42,0x32,0x79,0x4d,0x64,0x8d,0x00,0x69,0xdd,0xe1,0x08,0x78,
- 0x61,0xf7,0xfd,0xfd,0x1d,0x06,0xf2,0x9a,0xc8,0x32,0x80,0xbc,0xee,0x70,0x00,0xb4,
- 0x3b,0x09,0x78,0x7b,0x7b,0xeb,0xcc,0xe5,0x09,0x4d,0xe4,0xe0,0x06,0xa0,0x68,0xd7,
- 0xe3,0xe3,0xa3,0x24,0xdb,0x7b,0x7b,0x7b,0xe1,0xc2,0x89,0x5e,0x81,0x83,0x23,0x76,
- 0x76,0x76,0x54,0x76,0x77,0x77,0x55,0xf8,0x9d,0x5c,0xb8,0x47,0x47,0x47,0x0a,0x94,
- 0x70,0xca,0x46,0x5c,0x5e,0x5e,0x06,0x7b,0xdc,0x60,0x5f,0x1b,0x34,0x98,0xc4,0x9e,
- 0x1d,0xd4,0x30,0x38,0x54,0x24,0xdd,0x66,0xd8,0xd4,0x41,0x11,0x78,0x06,0x2d,0x66,
- 0xd5,0xdf,0x1b,0x04,0x3d,0xa3,0xff,0x67,0x9c,0x46,0xc1,0xbd,0x5c,0xc8,0x66,0x7f,
- 0x7f,0x3f,0xd0,0x44,0x06,0xe8,0xb0,0x09,0x4e,0x37,0x0b,0x8e,0xf0,0x8d,0xad,0xad,
- 0xad,0xc0,0x13,0xa8,0x10,0xf5,0xc5,0xc5,0xc5,0x98,0xc1,0x20,0x3a,0xbd,0xe1,0x37,
- 0x97,0x53,0x86,0x8e,0x68,0x9c,0xbb,0xa7,0x42,0xa7,0xfb,0xda,0x2d,0xae,0x9b,0xf6,
- 0x7a,0x4e,0x00,0x91,0x63,0x85,0x86,0xd3,0xe7,0xcc,0xa0,0x3b,0x94,0x67,0xd0,0xaf,
- 0x63,0xa1,0xd8,0xfe,0x97,0x56,0x32,0xf1,0xfe,0x93,0x93,0x13,0xd5,0xd1,0x71,0xad,
- 0x07,0x1d,0x68,0x51,0xaa,0x0a,0x9d,0x9b,0xd6,0x44,0xe6,0x9f,0x47,0x88,0xf8,0x8d,
- 0x8e,0xe7,0xdb,0xd9,0x8e,0x8f,0x8f,0x1b,0xdf,0x6a,0x79,0xb3,0x26,0x0b,0x56,0xed,
- 0xeb,0xe4,0xcf,0xbd,0xfa,0x1f,0x85,0x50,0xac,0x3a,0x1f,0xa3,0x52,0x21,0xf0,0x22,
- 0x0f,0x19,0x9f,0x99,0xd0,0x1d,0x8e,0x86,0xda,0x4c,0xea,0x64,0x8e,0xb0,0x93,0x40,
- 0x35,0xaf,0x89,0x1c,0x23,0x25,0x4c,0x5a,0x41,0x9c,0x16,0x8d,0x28,0x58,0x3b,0x38,
- 0x38,0x98,0x57,0x51,0xc7,0xe3,0xf9,0xd2,0xe9,0x62,0x93,0x07,0x38,0xb1,0x9f,0x57,
- 0x43,0x30,0x12,0xe4,0x75,0x87,0xa2,0x58,0x8a,0x39,0x40,0xa4,0x4b,0xe1,0x56,0x0e,
- 0x57,0x0c,0x3a,0x64,0x5e,0x0e,0x11,0x39,0x6c,0xd0,0xf8,0x6b,0xdf,0xce,0x09,0x5e,
- 0x61,0x0c,0x75,0x3a,0xce,0x85,0xe1,0x30,0x8a,0x7f,0xeb,0x07,0xd0,0xc2,0xe5,0xe5,
- 0xe5,0x45,0xb1,0x6f,0x5c,0xab,0xba,0xf7,0xd6,0xa6,0xb5,0xd6,0x5d,0x69,0x83,0xeb,
- 0x74,0x05,0xff,0xac,0xab,0xeb,0xf1,0x9b,0xcb,0xa8,0xd8,0x0a,0x69,0x31,0xe7,0xd7,
- 0xf8,0x24,0x2f,0x46,0x1a,0x79,0xf6,0x98,0x02,0x82,0x29,0x40,0x75,0x22,0x4f,0x91,
- 0x9d,0xab,0x58,0x81,0xb7,0xf3,0xf3,0x73,0x0d,0xc7,0x84,0x5b,0x7f,0x14,0xe6,0x7e,
- 0x5f,0xbb,0xc5,0x75,0xbd,0xd7,0x33,0xcf,0xeb,0x1c,0xdf,0xed,0xed,0xed,0xc6,0xb6,
- 0x47,0x9f,0xe1,0x2b,0x53,0x81,0x16,0x93,0x04,0x57,0x14,0xde,0xe4,0x77,0x9a,0x37,
- 0x31,0x16,0x45,0xf7,0x1e,0x1e,0x1e,0x14,0x4a,0xfd,0xaf,0xbd,0x73,0x80,0xb5,0x2d,
- 0x87,0xc2,0x70,0xc7,0x7c,0xf6,0xbb,0x1a,0xdb,0xb6,0xad,0x60,0x3c,0xc1,0xd8,0x88,
- 0x86,0xe1,0x8d,0xed,0x0c,0xc3,0x61,0xcc,0xb1,0x1d,0x8c,0x6d,0xdb,0xf3,0x6c,0xf5,
- 0x7b,0xc9,0x9f,0xa4,0x3b,0xdd,0x39,0x7d,0xa7,0xe9,0x3e,0xf7,0xec,0xbb,0xfe,0x64,
- 0xa5,0x3d,0xdd,0x3c,0xfd,0x57,0xd7,0xaa,0x76,0xcb,0x37,0xfd,0x05,0x60,0x2e,0x00,
- 0xd3,0xce,0x4c,0x14,0x46,0xa8,0x0a,0x42,0x3d,0x60,0x28,0xa6,0x9a,0x90,0x98,0x7a,
- 0x4a,0x3d,0xa5,0x1f,0x4b,0x83,0x70,0x5c,0x92,0x31,0x90,0x63,0xd8,0x38,0xc1,0x42,
- 0x40,0x3e,0xed,0xd3,0xd2,0xe4,0x83,0x80,0x58,0x3f,0xd9,0xc1,0xb1,0xf4,0x3c,0x75,
- 0x01,0xde,0xc1,0x37,0xe3,0x1c,0x1d,0x3c,0x84,0xbd,0x06,0x4a,0xe8,0x57,0x46,0x71,
- 0x7e,0x25,0x91,0xf6,0xd6,0x01,0x20,0x81,0x3f,0xca,0xa7,0xe0,0x6f,0xbf,0xfd,0x76,
- 0x63,0xfd,0xe2,0x90,0x4c,0x89,0x87,0x68,0x9e,0x4f,0x88,0x25,0x20,0x8e,0xcf,0x27,
- 0x2c,0x05,0xba,0x5c,0x21,0x56,0xc2,0xca,0x60,0x28,0x21,0xbd,0x70,0xcc,0xaf,0xa3,
- 0x57,0x8e,0xa9,0xe1,0xbc,0x07,0x56,0xc7,0xef,0xac,0xa2,0x3a,0x4c,0xfb,0x14,0x80,
- 0x4c,0xf7,0xb3,0x69,0xe8,0xc5,0x6b,0x74,0x60,0x84,0x6e,0x51,0x9e,0x2d,0xb2,0x31,
- 0xfd,0x8a,0x13,0x72,0x0c,0x49,0x04,0xd6,0x23,0x20,0x54,0x71,0x48,0x65,0x82,0x08,
- 0x69,0x58,0x19,0xc8,0xa7,0x05,0xc3,0x72,0x72,0x6a,0x59,0xe8,0xf9,0x00,0xc5,0xe4,
- 0xfd,0x98,0xa0,0x01,0xf1,0x4c,0xcc,0xa0,0xd2,0xcb,0xbb,0x70,0x1d,0x4a,0xd0,0x1a,
- 0x05,0x10,0x01,0x74,0xbd,0x36,0x5d,0xcb,0x26,0xa3,0xe5,0xeb,0x45,0x3c,0x69,0x22,
- 0x5f,0x35,0x7f,0x08,0xc3,0x52,0x30,0xd4,0x8b,0xd2,0x40,0x2a,0x84,0x32,0xf2,0x47,
- 0xa9,0x25,0x8d,0xd2,0x0a,0x81,0xcc,0x10,0xf2,0xd3,0xa8,0x20,0x4a,0x56,0x86,0x38,
- 0x04,0x22,0x34,0x33,0x99,0xbc,0x11,0x90,0x28,0x05,0x40,0x81,0x68,0x71,0xd0,0x95,
- 0xcd,0xb7,0x01,0x0c,0xd5,0x72,0x2f,0xd2,0x7c,0x2f,0x23,0xd7,0xa8,0xe9,0xdb,0x2a,
- 0x05,0xc0,0xf4,0xf6,0x64,0xb1,0x63,0x99,0x7e,0x44,0xa4,0x4b,0x01,0xc8,0x78,0x32,
- 0xdd,0xaf,0xd9,0xc7,0x78,0x38,0x71,0xc8,0x83,0xd4,0xa0,0x29,0x8a,0x50,0x8a,0x21,
- 0x95,0x78,0x2a,0x20,0x53,0xf7,0x62,0xc5,0x53,0x2a,0xa0,0xbe,0x85,0xe2,0xce,0x3b,
- 0xef,0x3c,0xe7,0x27,0x9c,0xf2,0x2e,0x28,0x9c,0xf3,0xeb,0x13,0x42,0x3a,0xef,0xd3,
- 0xbe,0x3a,0x80,0x32,0x00,0x0d,0xf7,0xeb,0xff,0x37,0xdd,0x2c,0x0d,0x2c,0x80,0x94,
- 0x00,0x62,0x10,0x4a,0x3d,0x5f,0xd3,0x30,0xc8,0x03,0xc1,0x9d,0xfa,0x15,0xaa,0xf7,
- 0xd6,0xfd,0x24,0x58,0x07,0x14,0x84,0xf3,0x65,0x5d,0x28,0xf1,0xa4,0x33,0x18,0xe5,
- 0x97,0x92,0x67,0x65,0x71,0x8e,0x51,0x29,0x85,0x78,0x07,0xa4,0x60,0xfd,0x6a,0xfa,
- 0x85,0x8d,0x68,0x0b,0xc6,0x4a,0x3f,0xe4,0xe3,0x17,0x99,0x54,0xd8,0x24,0x18,0xab,
- 0xf7,0x1b,0x51,0x88,0x0c,0x85,0x10,0x87,0xe9,0x85,0x7c,0x99,0x5b,0x91,0x1a,0x90,
- 0xa9,0x50,0xd7,0xe8,0xb7,0xd2,0x20,0x8d,0xde,0x43,0x59,0x12,0x84,0xdf,0x31,0xa9,
- 0x27,0x36,0xde,0x81,0xa5,0xb4,0xfa,0xf3,0xd3,0x3a,0xc8,0x72,0x81,0xd5,0xe2,0xff,
- 0xfa,0xb1,0x05,0xee,0xd9,0x9d,0x05,0x20,0xb3,0x7a,0xd5,0xdc,0xc2,0x02,0xc8,0xec,
- 0x53,0x1a,0xfd,0x87,0x11,0xf8,0x70,0x7d,0xe9,0x12,0x25,0x15,0x42,0x25,0x90,0xc7,
- 0xf9,0x8a,0x13,0x4a,0xc8,0x90,0x14,0x2b,0xc4,0x7f,0xcf,0x21,0x38,0x83,0xd0,0x6e,
- 0x15,0x48,0xf9,0x45,0xef,0x29,0x8a,0xcd,0x6f,0xf2,0x46,0x2e,0x30,0xdd,0x02,0x90,
- 0xa9,0x7e,0x47,0x0d,0x2a,0x52,0x5a,0x5c,0xb9,0x09,0xf0,0xf2,0xf8,0x5d,0x2c,0x0f,
- 0xa5,0x57,0x04,0xe2,0xe3,0x51,0x08,0xe2,0xf2,0xf9,0x1c,0x23,0x44,0xc8,0x94,0x08,
- 0x01,0xe9,0xae,0xa1,0xfc,0xf9,0x65,0x15,0x48,0x95,0x64,0x2c,0xa4,0xf2,0x02,0x3c,
- 0xfa,0xe8,0xa3,0x2a,0x08,0xa4,0xa5,0x5b,0x00,0xbd,0x00,0x99,0xde,0x14,0x78,0x16,
- 0xcf,0xc4,0xb7,0xfb,0x0f,0x26,0xe4,0x93,0x35,0xf1,0x03,0xb3,0x9f,0xff,0x69,0x75,
- 0x79,0xc2,0x1b,0xaf,0x2f,0xe1,0xaa,0xfd,0x5c,0x05,0x0a,0x42,0x90,0x2e,0x57,0x40,
- 0x7a,0xdc,0x0a,0x24,0x28,0x00,0xd2,0x14,0xd4,0xfe,0xa6,0x94,0xf3,0x5c,0x2c,0x10,
- 0x69,0x94,0x78,0x90,0x5b,0xc2,0x0b,0x12,0x5a,0xbe,0xc4,0x47,0xce,0xa7,0x25,0x42,
- 0xab,0x84,0x3a,0x51,0xec,0x3a,0xf5,0xa4,0x4e,0x98,0x30,0x81,0x78,0x5f,0xcc,0x0a,
- 0x46,0x53,0x71,0x03,0x68,0x2d,0xca,0x90,0x91,0x81,0x79,0xc7,0x13,0x90,0xa7,0x90,
- 0x19,0xef,0x43,0xc1,0x20,0x7f,0x66,0xcd,0x9a,0x15,0xdc,0x2b,0xf6,0x7e,0xaa,0x4b,
- 0xf5,0xcd,0xb4,0x70,0xea,0x1e,0x32,0xf9,0x06,0x21,0xf9,0x4b,0xa3,0xaa,0x32,0x49,
- 0x5a,0x3a,0x2b,0xd8,0x20,0x72,0x43,0xa2,0x23,0xbf,0x4d,0x01,0x5a,0x48,0x3c,0xa2,
- 0xb8,0x10,0x4b,0x2b,0xa6,0x00,0x34,0x2d,0x68,0x76,0x98,0x94,0x11,0xa6,0x7d,0x47,
- 0x50,0x5b,0xd2,0xc3,0xb0,0xec,0x94,0x30,0x7c,0x0c,0x2f,0x48,0x65,0x24,0xb5,0x62,
- 0x44,0x73,0x05,0xe9,0xf8,0x82,0x54,0xfe,0x68,0xbb,0xf6,0x15,0x0a,0x74,0x06,0x31,
- 0xc8,0x15,0x83,0xee,0x59,0x7d,0x66,0xfc,0x78,0x21,0x0b,0x00,0x41,0x34,0xcf,0x34,
- 0x9a,0x46,0x88,0xf0,0x60,0x85,0x8a,0x83,0xbf,0xfe,0x5e,0xe4,0x96,0x2c,0x1f,0x70,
- 0xdb,0x4c,0x3a,0xc1,0xcb,0x89,0x0e,0xd9,0x76,0xb2,0x42,0xc4,0x8b,0x8f,0x6f,0xb9,
- 0xed,0x91,0xfe,0xdc,0x95,0xea,0x9f,0xaf,0x4a,0xf5,0x79,0x41,0x5a,0x81,0xf3,0x25,
- 0x75,0xd7,0xa7,0xfc,0x7f,0xc2,0xe4,0xe7,0x4b,0xf8,0xff,0xd4,0xe0,0x37,0xd4,0xff,
- 0x57,0x95,0xaf,0x98,0x05,0xf0,0xab,0x6d,0x24,0x0f,0x7f,0xfe,0xfd,0xcf,0x02,0x37,
- 0x77,0xe4,0x14,0x37,0x77,0x70,0x5f,0xe7,0x5f,0xd5,0xf9,0xac,0x71,0x80,0xc0,0xff,
- 0x24,0x0c,0xb0,0x62,0xf9,0x6f,0x2c,0xa7,0xc0,0xfd,0xfb,0xb7,0x04,0xe7,0x7f,0xc9,
- 0x9c,0x40,0x7e,0x7d,0x9a,0xe2,0x45,0x14,0x80,0x92,0xcf,0x88,0x58,0x0a,0xd0,0xe4,
- 0xb5,0x9b,0x4c,0x75,0xbb,0xec,0x75,0xa4,0xdb,0xa8,0x23,0xa1,0x90,0xbf,0xc4,0xad,
- 0x5e,0x33,0x0f,0x05,0x23,0xe3,0x73,0x08,0xeb,0x5b,0x97,0x41,0x3b,0x9f,0xee,0xf0,
- 0xf8,0x54,0xf7,0xfa,0x52,0xae,0x74,0x42,0xc5,0x4b,0x28,0x00,0x3d,0x4b,0x98,0xa9,
- 0xa4,0xce,0x8c,0xff,0xe7,0xcd,0x77,0x7b,0x1d,0x74,0xa1,0x9b,0x39,0x94,0xb6,0x4a,
- 0xc6,0xd7,0x9f,0xbe,0xe9,0x26,0x6c,0xbd,0x9a,0xfb,0xa7,0x76,0xa6,0x60,0x29,0x82,
- 0xe7,0x2b,0x2c,0xdf,0x59,0x53,0xe4,0x7e,0x9a,0x0d,0x95,0x66,0x01,0xe2,0xc7,0x8a,
- 0xba,0x00,0x4a,0x3f,0x95,0xbf,0xa4,0x3f,0xb8,0x6a,0xed,0x96,0x6e,0xbb,0xdd,0xf6,
- 0x71,0x13,0xa6,0x4c,0x8c,0xa9,0x3f,0x17,0x10,0x3a,0xb0,0x64,0xd1,0x3c,0xf7,0xc3,
- 0x97,0x2f,0xb9,0x99,0x33,0xa6,0xa7,0x29,0x58,0x01,0xf4,0xb8,0x7b,0x19,0xd3,0x4f,
- 0xe9,0x97,0xfb,0x4b,0xb7,0x00,0x21,0xf9,0x65,0x15,0x40,0x93,0x20,0x92,0xb0,0x66,
- 0x99,0xfb,0xfa,0x93,0x57,0xdd,0xc0,0x0e,0x7b,0x05,0x99,0x53,0xad,0x02,0x2c,0x5e,
- 0xf0,0x8f,0xfb,0xf2,0x83,0x17,0xdc,0xa4,0xad,0x56,0x78,0xe5,0xda,0xba,0xbc,0xc9,
- 0x2f,0x74,0xbf,0x9c,0xe7,0x51,0xea,0x7f,0xf8,0xe1,0x07,0x92,0x89,0xeb,0x58,0xf2,
- 0xb0,0x70,0x24,0xad,0x8c,0x02,0xa0,0xa1,0xb8,0x81,0x14,0x0c,0x0d,0xcc,0x72,0x7f,
- 0x7d,0xf3,0xb2,0xfb,0xe3,0xab,0x17,0x6b,0x4b,0x88,0xfa,0x14,0x66,0xae,0x9f,0xe8,
- 0x31,0xa1,0xe9,0x01,0x9b,0xc0,0x85,0x28,0x4e,0x98,0x8f,0xf4,0xe7,0x21,0xfe,0x83,
- 0x4f,0xea,0x4c,0x1d,0x09,0xcd,0xef,0x00,0xca,0x54,0x00,0x96,0x28,0xc5,0x05,0xf0,
- 0x69,0x16,0xa6,0x5a,0xa4,0x44,0x10,0x0c,0xea,0x44,0x50,0x74,0x00,0xa7,0xbc,0xcf,
- 0xce,0x9f,0x05,0xc4,0xa4,0x13,0x26,0xb2,0xb2,0xe2,0x57,0x75,0xc8,0x56,0x33,0x8d,
- 0x53,0xfa,0xfd,0xeb,0xd3,0x0b,0x35,0x03,0xd9,0x6b,0x1f,0x68,0xae,0x7e,0xea,0xc3,
- 0x9a,0xaf,0x64,0x35,0x72,0x7e,0xce,0xff,0x87,0x78,0x5a,0x3d,0x01,0xf9,0xca,0xdb,
- 0x84,0x0a,0x20,0xe7,0x05,0xef,0xa1,0x78,0xa9,0x3a,0x00,0x9d,0x40,0x9a,0x30,0x9a,
- 0xdc,0xec,0x50,0x66,0x25,0xa7,0xe7,0xfb,0xda,0x84,0x4a,0x53,0xde,0x00,0x4c,0xee,
- 0x71,0x08,0xd7,0x9c,0x44,0xde,0x2f,0x3f,0x5f,0x9a,0xa9,0x04,0xf2,0x62,0x68,0x2c,
- 0x12,0x4c,0x1f,0xcf,0xce,0x5c,0x83,0x20,0x05,0x49,0xb1,0x42,0x4a,0x8b,0x59,0xce,
- 0x66,0x46,0x03,0x35,0x6b,0x07,0x53,0xc6,0x43,0x0d,0xf9,0xf9,0xc9,0xac,0xa8,0x14,
- 0xff,0x1f,0x49,0xcf,0xe8,0x07,0xc8,0x34,0xb9,0x45,0x3f,0x90,0x30,0xa4,0x5a,0x83,
- 0x8c,0xe1,0xe0,0xd6,0xc0,0xe6,0x03,0x80,0xd6,0x29,0x80,0x21,0x7d,0x3e,0x80,0x59,
- 0x80,0xf6,0x2b,0x80,0xc2,0x68,0x85,0xb0,0xfd,0x16,0xc0,0x90,0x3e,0x1f,0xc0,0x14,
- 0xa0,0xa5,0xe4,0x27,0xa4,0xb5,0x4d,0x01,0x0c,0xa1,0xe9,0x4f,0xa8,0x03,0xb4,0x60,
- 0xb9,0x78,0x43,0xde,0x7c,0x80,0xf6,0x5b,0x00,0x6b,0x05,0x44,0x49,0x6f,0x9f,0x02,
- 0x18,0xa2,0xa6,0x3f,0x85,0x70,0x73,0x01,0xed,0xaf,0x00,0x8e,0xe3,0x8e,0x20,0xeb,
- 0x0d,0x14,0xac,0x23,0x68,0x1c,0x12,0xaf,0x79,0x03,0x4a,0xb3,0x7e,0x80,0x71,0xaa,
- 0x14,0xe5,0x46,0x03,0xf9,0x64,0xbb,0x3f,0x60,0x23,0x80,0xa4,0x87,0xf1,0x7c,0x05,
- 0xe8,0x93,0xb5,0xf8,0xad,0x22,0x68,0xcd,0x40,0x1b,0x18,0x1a,0x17,0xeb,0x03,0x18,
- 0x6c,0x3e,0x80,0x91,0x2f,0xd8,0x58,0x80,0x55,0x02,0x15,0x0f,0xd6,0x0c,0x54,0xfa,
- 0xf8,0x50,0x00,0x53,0x04,0x48,0x8f,0xc5,0xcd,0x05,0xb4,0x14,0xfa,0x96,0x50,0x02,
- 0xe9,0x92,0x60,0x6d,0xe5,0xf6,0x29,0x80,0x41,0x24,0x8b,0x68,0x91,0x1d,0x84,0xed,
- 0x55,0x00,0x43,0x95,0xf8,0x5a,0x61,0xff,0xe5,0xf6,0x29,0x80,0x21,0x20,0xbe,0xae,
- 0xf4,0x8f,0x8c,0x8c,0xb8,0xa3,0x8f,0x3e,0x5a,0x6b,0x14,0x65,0x29,0xc0,0x18,0x5b,
- 0xb1,0xcb,0xcc,0xbf,0x56,0x06,0xaf,0xf3,0xfb,0x2c,0xad,0xef,0xb7,0xd5,0xd5,0x2a,
- 0xeb,0xfa,0x82,0xbb,0x7b,0x05,0x60,0x4d,0x5a,0xc3,0xd8,0x40,0xb5,0xa4,0x57,0xdd,
- 0x81,0xdf,0x61,0xdc,0x5d,0x72,0xc9,0x25,0xac,0xdf,0x80,0x68,0xf3,0xab,0xee,0x14,
- 0x80,0x8b,0x90,0xbd,0xf7,0xde,0xdb,0xf5,0x1c,0x06,0x11,0x0e,0xd1,0x0a,0x83,0xb4,
- 0x53,0x4f,0x3d,0x15,0xbf,0xcf,0x0a,0xe2,0x6c,0x18,0xc1,0x2a,0xe2,0x5a,0xce,0xa7,
- 0x7b,0x05,0xc0,0x7c,0xb0,0x93,0x27,0x61,0xef,0x60,0xd0,0x3e,0x46,0xd5,0x5a,0x3e,
- 0x04,0xb3,0xa7,0xd1,0xd5,0x57,0x5f,0xed,0x76,0xdd,0x75,0x57,0xcc,0x3f,0x7b,0x07,
- 0x60,0xb5,0x51,0x00,0x2c,0x40,0x77,0x2e,0x40,0xe4,0x63,0x3e,0xb8,0xd1,0x69,0xa7,
- 0x9d,0xe6,0x7a,0x02,0x83,0xb6,0x81,0x09,0x9a,0x7f,0xfb,0xed,0xb7,0x1f,0x5b,0xd8,
- 0xb9,0x8b,0x2f,0xbe,0xd8,0xed,0xb8,0xe3,0x8e,0x70,0xc4,0x8a,0x2d,0xac,0x24,0x8e,
- 0x10,0xc7,0x05,0x68,0x9b,0xbc,0x8e,0x3d,0x81,0x2b,0x58,0xa6,0x27,0xa6,0x00,0x54,
- 0x24,0xd0,0xa2,0xdd,0x76,0xdb,0x8d,0xe5,0xcb,0x1a,0xda,0x3d,0xd4,0x20,0x68,0xbb,
- 0x5c,0xd5,0xc5,0x0e,0x3b,0xec,0x30,0x42,0xed,0x73,0xc8,0x67,0xf9,0x54,0xd2,0x59,
- 0xab,0x81,0xd2,0x0f,0xf1,0x84,0x90,0x0f,0x77,0x1d,0x4b,0x3f,0xdc,0xa3,0x1e,0x7f,
- 0xc7,0x2c,0x00,0xa5,0x1f,0xf2,0xb9,0x19,0x0f,0x38,0xf0,0xc0,0x03,0xf1,0x31,0xe6,
- 0x0e,0x1a,0x24,0x1f,0xa1,0x84,0x5f,0x76,0xd9,0x65,0xec,0xde,0xc6,0x76,0xfa,0x6c,
- 0x61,0x07,0xc9,0x28,0x02,0x3b,0xac,0x91,0xe6,0x86,0x87,0x87,0xdd,0xc0,0xc0,0x00,
- 0x8b,0x4c,0xc3,0x55,0x2a,0xf9,0xe0,0x6f,0x36,0x8d,0x7a,0xc6,0x47,0x4e,0x8d,0xf9,
- 0x1d,0xb6,0x1c,0x61,0x2f,0x7f,0xf6,0x0e,0xd4,0x26,0xce,0xa4,0x61,0x0d,0xbe,0xfa,
- 0xea,0x2b,0xf6,0xf8,0xe7,0xb7,0xcb,0x87,0x41,0x80,0x60,0x0a,0x1e,0x15,0xb9,0x7d,
- 0xf6,0xd9,0x47,0x3b,0xa2,0x51,0xda,0x49,0xc7,0xef,0x73,0x4e,0x20,0xa4,0x71,0x8c,
- 0x73,0x36,0x70,0x2f,0xc3,0x67,0x71,0x01,0x2f,0xc6,0x14,0x40,0x2e,0x00,0x0b,0x80,
- 0x69,0x41,0x21,0x00,0x3b,0x7a,0x70,0x8c,0x34,0x6d,0xe3,0x0e,0x08,0x0d,0xf9,0xeb,
- 0x1a,0x11,0x42,0xa0,0x88,0x17,0xe9,0xf0,0x00,0xd9,0x84,0xfc,0xc6,0xf4,0x73,0x4c,
- 0xdb,0xe2,0x89,0x78,0x24,0x15,0x70,0xbf,0xc9,0xe8,0xe8,0xe8,0xcf,0x3e,0x72,0x0b,
- 0x15,0xc2,0x48,0x33,0x10,0xb2,0x03,0xe1,0x41,0xda,0xae,0x4d,0xdb,0xba,0x21,0x68,
- 0x9f,0x49,0xd7,0xa2,0x3c,0x0c,0x08,0x97,0x5f,0xc7,0xdc,0x53,0xbb,0xc7,0xc4,0x63,
- 0x19,0x58,0xaa,0x9f,0xe3,0x28,0x41,0xa4,0xc3,0x27,0x15,0x0c,0x16,0x5c,0xbd,0xb1,
- 0xbf,0x08,0x05,0x78,0xcc,0x45,0xa0,0xbd,0x71,0x65,0x05,0xf0,0x33,0xf8,0x1b,0x09,
- 0xfe,0x67,0x70,0x70,0x10,0xe1,0x58,0x86,0x98,0x28,0x1f,0x11,0xf2,0x95,0xee,0x5c,
- 0x09,0x69,0xec,0x54,0x8e,0x02,0xd0,0xce,0x57,0x27,0x4f,0x97,0xc4,0x0b,0x8f,0xc1,
- 0xbd,0xe6,0x03,0xdc,0xe5,0xe5,0x1c,0x2f,0x93,0xaa,0x56,0x40,0x4a,0xa0,0x10,0xad,
- 0xa3,0xd9,0x41,0xed,0x94,0x95,0x2d,0xb5,0xac,0xa9,0x21,0x1f,0xca,0x6f,0xb9,0x5f,
- 0x44,0xd6,0x41,0x64,0xcb,0xbf,0x67,0x62,0x3e,0x9c,0x13,0xd1,0x9d,0x20,0x91,0xc6,
- 0xfe,0x13,0xb8,0xff,0x9a,0x31,0xe8,0xea,0x20,0x44,0xc1,0x3a,0x80,0xd5,0x01,0xe4,
- 0x6e,0x09,0x11,0xd2,0x91,0x4c,0xc8,0xf4,0x9f,0xe5,0xef,0xf5,0x8c,0x14,0x40,0x80,
- 0xc4,0x6b,0x7c,0x70,0x4f,0x8d,0x12,0xe8,0x9c,0x40,0x0c,0x45,0x94,0x21,0x90,0x00,
- 0xf9,0xe4,0xdf,0xe0,0xef,0xf9,0x80,0xab,0x03,0x96,0xc0,0xcb,0xbc,0xb5,0x6d,0x83,
- 0x61,0x1e,0xdc,0xa6,0x4e,0x39,0x1a,0xf0,0xf2,0x90,0x97,0x55,0x96,0x6f,0x7d,0x0f,
- 0x38,0x84,0xcb,0x81,0x6e,0xe6,0x9e,0x0d,0x79,0xb9,0x8d,0xce,0x22,0x2f,0xbf,0x78,
- 0x59,0x6e,0xf9,0x39,0xe6,0xb1,0x1c,0xae,0xe0,0x0c,0xee,0xe0,0xd0,0xd5,0xc3,0xad,
- 0x03,0x63,0x75,0xc1,0xae,0xdd,0xd9,0xb0,0x20,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
- 0x44,0xae,0x42,0x60,0x82,
+ 0xcb,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+ 0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+ 0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+ 0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+ 0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+ 0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+ 0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+ 0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+ 0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+ 0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+ 0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+ 0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+ 0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+ 0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+ 0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+ 0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+ 0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+ 0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+ 0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+ 0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+ 0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+ 0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+ 0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+ 0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+ 0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+ 0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+ 0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+ 0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+ 0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+ 0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+ 0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+ 0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+ 0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+ 0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+ 0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+ 0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+ 0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+ 0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+ 0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+ 0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+ 0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+ 0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+ 0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+ 0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+ 0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+ 0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+ 0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+ 0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+ 0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+ 0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+ 0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+ 0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+ 0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+ 0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+ 0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+ 0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+ 0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+ 0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+ 0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+ 0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+ 0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+ 0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+ 0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+ 0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+ 0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+ 0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+ 0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+ 0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x80,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x6b,0x46,0x26,0x4d,0x00,0x00,0x03,0x62,0x69,0x54,
+ 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+ 0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+ 0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+ 0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+ 0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+ 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+ 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+ 0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+ 0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+ 0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+ 0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+ 0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+ 0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+ 0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+ 0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+ 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+ 0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+ 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+ 0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+ 0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+ 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+ 0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+ 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+ 0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+ 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+ 0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+ 0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+ 0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+ 0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+ 0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+ 0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+ 0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+ 0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+ 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+ 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+ 0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x13,0xdb,0x49,0x44,0x41,0x54,
+ 0x78,0xda,0xed,0x9d,0x07,0x90,0x55,0x35,0x17,0xc7,0xd7,0x5e,0xc7,0xde,0xd7,0x55,
+ 0xec,0xbd,0x0b,0x0a,0x28,0x88,0x88,0xae,0x05,0x7b,0xd7,0xc1,0xbe,0x2a,0x28,0x22,
+ 0xba,0xe8,0x88,0x8d,0xcf,0x82,0x34,0xa5,0x0a,0xa2,0x28,0xae,0xa8,0x58,0x41,0x71,
+ 0x64,0x11,0x07,0xc5,0x2e,0xa2,0xa0,0xa8,0xe8,0x88,0xd8,0x16,0x15,0xb0,0x20,0x56,
+ 0x14,0xcd,0xb7,0xbf,0xb8,0xe7,0x9a,0xcd,0xe6,0xbe,0x77,0xef,0x6b,0xbb,0xdc,0x97,
+ 0xcc,0xfc,0x27,0xf7,0xdd,0x92,0x77,0x6f,0xce,0x3f,0x27,0x27,0xc9,0x49,0x52,0x52,
+ 0x92,0x22,0x28,0xa5,0xca,0x6a,0x51,0x59,0x8b,0xea,0x5a,0xd4,0xd4,0x62,0x89,0xf2,
+ 0xa1,0xa9,0x87,0x25,0x75,0xb2,0xaa,0xae,0x93,0x5d,0x59,0x49,0xdc,0x50,0xfb,0x50,
+ 0x69,0x2d,0xaa,0x6a,0xb1,0xd4,0xe7,0xe7,0x32,0x1f,0x96,0xd6,0xc9,0xb2,0x34,0xaa,
+ 0xf0,0xcb,0x6b,0xb1,0xc8,0xe7,0x5b,0xe2,0x02,0x32,0x2d,0x4f,0x27,0xfc,0x0a,0x5f,
+ 0xea,0x13,0xaf,0x0d,0x2a,0x52,0x95,0x7c,0x2f,0xfc,0xe2,0x20,0x41,0xb9,0xab,0xce,
+ 0xf7,0x6a,0xbf,0xb8,0xaa,0x83,0x52,0x93,0x00,0x55,0xf6,0x1d,0x7b,0xee,0xb9,0xa7,
+ 0xda,0x7c,0xf3,0xcd,0xd5,0x4d,0x37,0xdd,0xe4,0xb3,0x2b,0x99,0xa1,0xca,0x6c,0xea,
+ 0x35,0x50,0xfd,0x1b,0x6c,0xb0,0x81,0xe2,0xf2,0xe5,0x97,0x5f,0xee,0xb3,0x2a,0xb9,
+ 0x55,0x41,0x59,0x49,0x5d,0x5b,0xb1,0x41,0xe8,0xd1,0xa3,0x87,0xba,0xe8,0xa2,0x8b,
+ 0xd4,0x13,0x4f,0x3c,0xe1,0xb3,0x2a,0xb9,0xa1,0xb2,0xa4,0xae,0xc3,0xc0,0x87,0xe2,
+ 0x0c,0xd5,0x10,0xa0,0xc6,0x75,0x65,0xe8,0xd0,0xa1,0xaa,0x4f,0x9f,0x3e,0xea,0xc5,
+ 0x17,0x5f,0xac,0x77,0x7e,0xe6,0xcc,0x99,0xfa,0x7c,0xdf,0xbe,0x7d,0xd5,0x9f,0x7f,
+ 0xfe,0xa9,0xe6,0xcf,0x9f,0xaf,0xaa,0xaa,0xaa,0x54,0xa7,0x4e,0x9d,0xd4,0x29,0xa7,
+ 0x9c,0xa2,0xfa,0xf5,0xeb,0xa7,0xe6,0xcd,0x9b,0xa7,0xd2,0xa5,0xf9,0xcf,0x3f,0xff,
+ 0xa8,0x57,0x5f,0x7d,0x55,0xdd,0x78,0xe3,0x8d,0xea,0xa8,0xa3,0x8e,0xd2,0x55,0xcd,
+ 0xd3,0x4f,0x3f,0x9d,0xf2,0x6d,0xbf,0xfc,0xf2,0x4b,0x75,0xfb,0xed,0xb7,0xab,0xd3,
+ 0x4e,0x3b,0x4d,0x1d,0x77,0xdc,0x71,0xda,0x3e,0xf9,0xe4,0x93,0x4f,0xea,0xdd,0x33,
+ 0x78,0xf0,0x60,0xfd,0x1f,0xcf,0x3d,0xf7,0x5c,0x68,0x3a,0xcf,0x3f,0xff,0xbc,0xbe,
+ 0x67,0xf4,0xe8,0xd1,0x0d,0xae,0x8d,0x1f,0x3f,0x5e,0x5d,0x79,0xe5,0x95,0xaa,0xbc,
+ 0xbc,0x5c,0x5d,0x7c,0xf1,0xc5,0xea,0xc1,0x07,0x1f,0xd4,0xef,0x9a,0xd0,0x50,0x03,
+ 0x01,0x9c,0xdd,0xbb,0x61,0x36,0x00,0x42,0xe4,0x3c,0x80,0x0c,0x9b,0x6c,0xb2,0x49,
+ 0xf0,0x5b,0xc0,0xb9,0xd7,0x5e,0x7b,0x2d,0x65,0x9a,0x57,0x5d,0x75,0x55,0x83,0xe7,
+ 0xc0,0xf9,0xe7,0x9f,0xaf,0x89,0xd5,0x80,0xaa,0xd5,0xd5,0x6a,0xbd,0xf5,0xd6,0x6b,
+ 0x70,0xff,0xda,0x6b,0xaf,0xad,0xaf,0x49,0x40,0x70,0x9c,0xdf,0x76,0xdb,0x6d,0x43,
+ 0xbf,0x7a,0xfb,0xed,0xb7,0xd7,0xf7,0x74,0xee,0xdc,0x39,0x38,0xf7,0xf3,0xcf,0x3f,
+ 0x6b,0x02,0xbb,0xde,0x09,0xb2,0xfd,0xf6,0xdb,0x6f,0x49,0x24,0xc0,0x92,0x92,0xb0,
+ 0x2b,0x51,0x08,0xb0,0xe9,0xa6,0x9b,0xaa,0xe5,0x97,0x5f,0x5e,0xb5,0x68,0xd1,0x42,
+ 0x67,0x66,0xbb,0x76,0xed,0x82,0x6b,0x65,0x65,0x65,0x6a,0xc9,0x92,0x25,0xce,0x34,
+ 0xd7,0x59,0x67,0x1d,0x1d,0xf3,0x9b,0x4c,0x3f,0xef,0xbc,0xf3,0x82,0x6b,0xe0,0xce,
+ 0x3b,0xef,0xac,0xf7,0xdc,0x87,0x1f,0x7e,0xa8,0x56,0x58,0x61,0x05,0x7d,0xed,0xd0,
+ 0x43,0x0f,0x55,0x13,0x26,0x4c,0x50,0x4f,0x3e,0xf9,0xa4,0xda,0x7d,0xf7,0xdd,0xf5,
+ 0xb9,0x0d,0x37,0xdc,0x30,0x10,0xd0,0xc3,0x0f,0x3f,0x1c,0xa4,0x83,0x86,0xb1,0xc3,
+ 0x4b,0x2f,0xbd,0x14,0x5c,0x9f,0x31,0x63,0x46,0x70,0xfe,0xf4,0xd3,0x4f,0xd7,0xe7,
+ 0xd6,0x5c,0x73,0x4d,0xad,0x65,0xd0,0x12,0xd7,0x5e,0x7b,0x6d,0xf0,0xbf,0x68,0xb6,
+ 0x24,0x86,0xac,0x08,0x40,0xe9,0x9b,0x34,0x69,0x52,0xbd,0xeb,0x10,0x41,0xae,0xdf,
+ 0x75,0xd7,0x5d,0xce,0x34,0xc1,0x09,0x27,0x9c,0xa0,0x7e,0xfd,0xf5,0xd7,0xe0,0x1a,
+ 0xaa,0x7c,0xad,0xb5,0xd6,0x0a,0xc8,0xf3,0xd7,0x5f,0x7f,0x05,0xd7,0x8e,0x3c,0xf2,
+ 0x48,0x7d,0x7e,0xe7,0x9d,0x77,0x56,0x4b,0x97,0xfe,0xd7,0x60,0xf9,0xfa,0xeb,0xaf,
+ 0xd5,0xca,0x2b,0xaf,0xac,0xaf,0x0d,0x1b,0x36,0x4c,0x9f,0xfb,0xfd,0xf7,0xdf,0xf5,
+ 0x7b,0x71,0xee,0xc2,0x0b,0x2f,0x6c,0xf0,0x5d,0x67,0x9d,0x75,0x96,0xbe,0xd6,0xbc,
+ 0x79,0xf3,0xe0,0xdc,0xb4,0x69,0xd3,0xd4,0x72,0xcb,0x2d,0xa7,0xcf,0x43,0x20,0x33,
+ 0x5c,0x72,0xc9,0x25,0x01,0xd9,0xcd,0x77,0xf2,0x04,0xa8,0xc5,0x3b,0xef,0xbc,0xd3,
+ 0xe0,0x39,0xea,0x7f,0x29,0x35,0x67,0x9e,0x79,0xa6,0x33,0xcd,0x63,0x8f,0x3d,0xd6,
+ 0x59,0xaf,0xd2,0xea,0x90,0xb4,0xe7,0xcc,0x99,0xa3,0xcf,0x2d,0x5c,0xb8,0x30,0x38,
+ 0xd7,0xbf,0x7f,0xff,0x06,0xcf,0xb4,0x6e,0xdd,0x5a,0x5f,0xc3,0x06,0x91,0x50,0x51,
+ 0x51,0x11,0x68,0x9a,0x3f,0xfe,0xf8,0x23,0x38,0xff,0xd3,0x4f,0x3f,0xa9,0xd5,0x57,
+ 0x5f,0x5d,0x5f,0x1b,0x39,0x72,0x64,0x03,0x21,0x43,0x40,0xfb,0xbd,0x26,0x4f,0x9e,
+ 0x1c,0xfc,0xff,0xdc,0xb9,0x73,0x3d,0x01,0x4c,0x02,0x90,0xa1,0xae,0xb0,0xc5,0x16,
+ 0x5b,0xe8,0xeb,0x08,0x27,0x4e,0xdf,0xc2,0xbd,0xf7,0xde,0x1b,0xa4,0x4d,0xc6,0x13,
+ 0x50,0xe3,0x72,0x6e,0x8f,0x3d,0xf6,0x50,0xc7,0x1f,0x7f,0x7c,0x3d,0xac,0xbf,0xfe,
+ 0xfa,0xfa,0xda,0x41,0x07,0x1d,0x14,0xa4,0x63,0x3e,0xf3,0xe8,0xa3,0x8f,0x06,0xe7,
+ 0x47,0x8c,0x18,0x11,0xa8,0x79,0xea,0x7c,0x09,0x1d,0x3a,0x74,0xd0,0xe7,0x57,0x5a,
+ 0x69,0xa5,0x06,0xe9,0x1f,0x70,0xc0,0x01,0x41,0x5a,0xa6,0x41,0x3c,0x76,0xec,0x58,
+ 0xfd,0x9f,0xe9,0x70,0xd9,0x65,0x97,0x15,0x1f,0x01,0xf6,0xde,0x7b,0x6f,0x7d,0x7d,
+ 0x87,0x1d,0x76,0x88,0x45,0x00,0x5a,0x01,0x92,0xb6,0xa8,0xe2,0x07,0x1e,0x78,0xc0,
+ 0x69,0x98,0xd9,0xa0,0x7a,0x30,0xc3,0x76,0xdb,0x6d,0xa7,0xcf,0x53,0x7d,0x48,0xd8,
+ 0x77,0xdf,0x7d,0x03,0x43,0xd3,0x0c,0xdb,0x6c,0xb3,0x4d,0xa4,0xff,0x30,0xc9,0xd4,
+ 0xbb,0x77,0xef,0x48,0xcf,0xd8,0x85,0xa0,0x28,0x08,0x80,0x05,0xce,0xf5,0xf6,0xed,
+ 0xdb,0xc7,0x22,0xc0,0x98,0x31,0x63,0x82,0xb4,0x5f,0x7e,0xf9,0xe5,0xc0,0xfa,0x97,
+ 0x73,0xbd,0x7a,0xf5,0x52,0x2f,0xbc,0xf0,0x82,0x13,0xd4,0xe3,0x66,0xa0,0x89,0xc8,
+ 0x33,0x2b,0xae,0xb8,0xa2,0xfa,0xf6,0xdb,0x6f,0x75,0x8b,0x45,0xd2,0x79,0xf3,0xcd,
+ 0x37,0xeb,0xdd,0xbb,0xff,0xfe,0xfb,0xeb,0xf3,0x5b,0x6d,0xb5,0x55,0x68,0xfa,0x60,
+ 0xc1,0x82,0x05,0xc1,0x33,0xdf,0x7d,0xf7,0x9d,0x7a,0xf7,0xdd,0x77,0xd3,0xa2,0xa9,
+ 0x57,0x1b,0x39,0x27,0x00,0x86,0xd2,0x1a,0x6b,0xac,0xe1,0x2c,0x69,0xe9,0x08,0x70,
+ 0xeb,0xad,0xb7,0x06,0x69,0xd7,0xd4,0xd4,0x04,0x6d,0x7f,0x39,0x47,0x9f,0x41,0xd4,
+ 0xf0,0xf9,0xe7,0x9f,0x07,0x86,0x1d,0x56,0xfd,0xa5,0x97,0x5e,0xaa,0x8f,0x69,0x39,
+ 0xd8,0xe1,0xdc,0x73,0xcf,0xd5,0xd7,0x56,0x5d,0x75,0xd5,0x7a,0x36,0x43,0x31,0x84,
+ 0xac,0x08,0x80,0x81,0xe6,0xea,0x48,0x91,0xeb,0xf7,0xdd,0x77,0x9f,0x33,0xcd,0x2e,
+ 0x5d,0xba,0x38,0xff,0x93,0x01,0x28,0x29,0x89,0xa6,0x31,0xd6,0xac,0x59,0x33,0x7d,
+ 0x7e,0xe3,0x8d,0x37,0x56,0x3f,0xfe,0xf8,0x63,0xe4,0x8f,0x3b,0xf8,0xe0,0x83,0xf5,
+ 0x73,0x3b,0xee,0xb8,0xa3,0x5a,0x77,0xdd,0x75,0xf5,0xf1,0x90,0x21,0x43,0x1a,0xdc,
+ 0xc7,0x7b,0xca,0x3b,0x43,0x42,0x4f,0x80,0x88,0x04,0xd8,0x69,0xa7,0x9d,0xd4,0x5b,
+ 0x6f,0xbd,0x55,0xaf,0xa7,0x8e,0x7a,0x9f,0x6b,0x08,0xcd,0x6e,0x36,0x49,0x9a,0xb4,
+ 0x12,0xae,0xbe,0xfa,0xea,0x7a,0xfd,0x04,0xf4,0xcc,0x49,0xba,0x77,0xdf,0x7d,0x77,
+ 0xbd,0xe7,0x68,0xf7,0xcb,0x35,0x0c,0x2b,0x4a,0xb7,0x04,0x9a,0x85,0xb4,0xe7,0xed,
+ 0xe6,0x28,0xe1,0xfe,0xfb,0xef,0xaf,0x57,0x1f,0xaf,0xb6,0xda,0x6a,0x4e,0x02,0xfd,
+ 0xfd,0xf7,0xdf,0xba,0x59,0x28,0x5a,0x80,0xe6,0xab,0x49,0x40,0x54,0x3f,0xef,0x40,
+ 0xb3,0xd3,0x13,0xc0,0x20,0x80,0x00,0xa1,0x1f,0x78,0xe0,0x81,0x81,0xea,0x5f,0x65,
+ 0x95,0x55,0x9c,0xdd,0xba,0x66,0x3f,0x80,0x58,0xe3,0x6d,0xdb,0xb6,0x0d,0x6c,0x06,
+ 0xd0,0xa6,0x4d,0x1b,0x67,0x4f,0xa0,0xa8,0x70,0x40,0xdb,0x9f,0x16,0x01,0x1d,0x50,
+ 0xf2,0x9f,0x1c,0xdb,0xe1,0x97,0x5f,0x7e,0xd1,0xff,0x21,0xcf,0x99,0x4d,0x45,0x3b,
+ 0xbc,0xf7,0xde,0x7b,0xaa,0xb4,0xb4,0xb4,0x5e,0x27,0x17,0x06,0x9c,0x69,0x20,0x3e,
+ 0xfb,0xec,0xb3,0xc5,0x43,0x80,0x8d,0x36,0xda,0x48,0x7f,0xf4,0x15,0x57,0x5c,0x11,
+ 0x4a,0x80,0x29,0x53,0xa6,0x68,0x2d,0x60,0x0a,0x95,0x0c,0x7b,0xe5,0x95,0x57,0x52,
+ 0x92,0x8a,0x76,0x37,0xfd,0xed,0x94,0x36,0x79,0x8e,0xe3,0x0b,0x2e,0xb8,0xa0,0x41,
+ 0xef,0xa1,0x19,0x9e,0x7a,0xea,0xa9,0x7a,0x64,0x11,0x23,0x8f,0x16,0x00,0x5d,0xcb,
+ 0xae,0x20,0x1d,0x3f,0xa6,0x61,0x19,0x16,0x7e,0xf8,0xe1,0x07,0xdd,0x77,0x21,0x7d,
+ 0x05,0x02,0x9a,0x9a,0x68,0x1e,0x8c,0xba,0xa2,0x21,0x40,0x58,0x70,0x19,0x81,0x58,
+ 0xd9,0x08,0xfd,0x9b,0x6f,0xbe,0x49,0xf9,0xac,0xad,0x55,0x28,0xe9,0xa8,0x6f,0xe0,
+ 0x2a,0xf5,0x61,0x61,0xd1,0xa2,0x45,0xea,0x8d,0x37,0xde,0xd0,0xcf,0xe5,0xc3,0x68,
+ 0xa3,0x4a,0xf8,0xf8,0xe3,0x8f,0x35,0x61,0x92,0xa8,0xf6,0x73,0x4e,0x80,0xa8,0xc1,
+ 0x3b,0x99,0x78,0x02,0x78,0x02,0x78,0x02,0x78,0x02,0x2c,0xd3,0x04,0x98,0x35,0x6b,
+ 0x96,0x1a,0x38,0x70,0xa0,0x1a,0x34,0x68,0x50,0xec,0xd1,0x31,0x9a,0x77,0x3c,0x9b,
+ 0xce,0x18,0xf3,0xa1,0x09,0x13,0xc0,0x07,0x4f,0x00,0x1f,0x3c,0x01,0x7c,0xf0,0x04,
+ 0xf0,0xc1,0x13,0xc0,0x07,0x4f,0x00,0x1f,0x3c,0x01,0x8a,0x23,0x24,0x75,0xae,0xa4,
+ 0x27,0x40,0xc4,0x90,0xcf,0x4e,0x2c,0xc6,0x1e,0x3c,0x01,0x9a,0x78,0xc8,0xc7,0x5c,
+ 0x49,0x26,0x9c,0xe0,0xb9,0x6c,0x7b,0x4f,0x7b,0x02,0x14,0x49,0xd8,0x65,0x97,0x5d,
+ 0xb4,0x56,0x61,0x52,0x8a,0x27,0x40,0x96,0x21,0xd3,0x79,0x87,0xf6,0x5c,0xc7,0xaf,
+ 0xbe,0xfa,0x4a,0xcf,0x4c,0xc2,0x25,0x7c,0xf8,0xf0,0xe1,0xce,0xf4,0x53,0x3d,0xcf,
+ 0x0c,0x25,0xbc,0x87,0x70,0x60,0x39,0xfa,0xe8,0xa3,0x55,0xcf,0x9e,0x3d,0xb5,0x03,
+ 0xa9,0x19,0x66,0xcf,0x9e,0xad,0x9f,0x91,0x6a,0x05,0x3f,0x45,0x7e,0x03,0xba,0xd8,
+ 0xed,0x10,0x65,0x4e,0x64,0xdc,0xef,0x49,0x1c,0x01,0x32,0x9d,0x77,0x68,0x0e,0x6e,
+ 0xe1,0x63,0x20,0xd3,0xd6,0xec,0xb9,0x83,0x51,0x3c,0xa4,0x3e,0xfb,0xec,0xb3,0xc0,
+ 0xf5,0xdc,0x04,0xde,0x45,0xa6,0xff,0xa4,0xe9,0xfd,0x6c,0x03,0x0f,0x26,0x33,0x44,
+ 0x9d,0x13,0x19,0xf7,0x7b,0x12,0x4b,0x80,0xb8,0xf3,0x0e,0xcd,0x0c,0x63,0x8e,0xa1,
+ 0x4c,0x40,0x21,0xb3,0x10,0x54,0x1c,0x02,0x88,0xb7,0x12,0x02,0x87,0x6c,0xbb,0xee,
+ 0xba,0x6b,0x70,0x0d,0x0f,0x28,0x53,0x03,0xdc,0x76,0xdb,0x6d,0x41,0x9a,0xbb,0xed,
+ 0xb6,0x9b,0xfe,0x0d,0x18,0x2c,0x93,0x10,0x67,0x4e,0x64,0xdc,0xef,0x49,0x2c,0x01,
+ 0xe2,0xce,0x3b,0x34,0x33,0x8c,0x89,0xae,0xe3,0xc6,0x8d,0x8b,0xd5,0x0a,0xb0,0x7d,
+ 0x24,0xbb,0x77,0xef,0x1e,0x58,0xf5,0xc4,0xe2,0x93,0xc8,0xc4,0xd9,0xb8,0x36,0x40,
+ 0x9c,0x39,0x91,0x71,0xbf,0x27,0xb1,0x04,0x88,0x33,0xef,0xd0,0xce,0xb0,0x01,0x03,
+ 0x06,0xc4,0x6e,0x06,0x9a,0xcf,0x33,0xbf,0xc0,0x0e,0x38,0xb9,0x86,0xcd,0x47,0x48,
+ 0x45,0x80,0x4c,0xe6,0x44,0xc6,0xf9,0x9e,0x44,0xdb,0x00,0xae,0xe0,0x9a,0x77,0x68,
+ 0x67,0x58,0x2a,0x07,0x97,0x28,0x04,0x70,0xb9,0x9c,0x9f,0x7c,0xf2,0xc9,0x19,0x11,
+ 0x20,0x93,0x39,0x91,0x71,0xbe,0xa7,0xe8,0x08,0xe0,0x9a,0x77,0x98,0x6b,0x02,0xb8,
+ 0x9e,0xcf,0x94,0x00,0x99,0xce,0x89,0xf4,0x04,0x88,0x31,0xef,0xb0,0x29,0x13,0x20,
+ 0xd3,0x39,0x91,0x9e,0x00,0x31,0xe6,0x1d,0x36,0x15,0x02,0xd0,0xbe,0x77,0xb5,0xfd,
+ 0x33,0x99,0x13,0x59,0xf4,0x04,0x88,0x3b,0xef,0xb0,0x31,0x09,0x20,0xcd,0x39,0xd7,
+ 0xac,0x26,0x42,0x26,0x73,0x22,0x8b,0x9e,0x00,0x71,0xe7,0x1d,0x36,0x26,0x01,0x30,
+ 0xe6,0xe4,0x9d,0x59,0x6d,0xcd,0x0e,0x99,0xcc,0x89,0x6c,0x92,0x04,0xa0,0x3d,0xcc,
+ 0x8a,0x1a,0x0c,0x7a,0x1c,0x7e,0xf8,0xe1,0x01,0x0e,0x3b,0xec,0x30,0xbd,0x3a,0x07,
+ 0xb3,0x78,0x01,0xeb,0x09,0x00,0xce,0xd1,0x85,0x7b,0xe2,0x89,0x27,0xea,0x66,0x4e,
+ 0xd7,0xae,0x5d,0xd5,0x0d,0x37,0xdc,0xa0,0x67,0xf6,0xd2,0x11,0x32,0x7d,0xfa,0x74,
+ 0x3d,0x8d,0x2b,0xac,0x1f,0x20,0xce,0xbc,0xc3,0xc6,0x24,0x80,0x39,0x2b,0x99,0x4e,
+ 0x1b,0xbe,0x99,0x2e,0x64,0x33,0xc4,0x9d,0x13,0xd9,0x64,0x08,0x80,0x9a,0x9d,0x3a,
+ 0x75,0xaa,0xee,0x94,0x81,0xbd,0x22,0x74,0x96,0x71,0x93,0xd8,0x05,0xf3,0x9e,0xb0,
+ 0xfb,0x5b,0xb5,0x6a,0xa5,0x3b,0x56,0x20,0x96,0xa8,0xf3,0x4c,0xe7,0x1d,0xd2,0x33,
+ 0x28,0xf7,0x2d,0x5e,0xbc,0x38,0xf4,0x7b,0xc2,0xe6,0x4a,0xa6,0x7b,0x9e,0xfa,0x9d,
+ 0x6b,0x54,0x41,0xae,0x70,0xdd,0x75,0xd7,0xd5,0x9b,0x94,0xba,0xdf,0x7e,0xfb,0x35,
+ 0xb8,0x27,0xce,0x9c,0xc8,0xa8,0xdf,0x93,0x37,0x02,0x20,0x10,0xea,0x2b,0x98,0x4f,
+ 0x69,0xa6,0x37,0xcb,0x04,0x2c,0x97,0xd8,0x3c,0x0e,0xbb,0x6e,0x82,0xf5,0x7a,0x10,
+ 0x3e,0xa4,0x02,0xac,0x08,0x86,0x2a,0xe4,0x3f,0x73,0x35,0xef,0xb0,0x31,0x02,0xef,
+ 0xcf,0xec,0x64,0x96,0xb0,0xb3,0x35,0x9b,0x19,0xf2,0x31,0x27,0x32,0xa7,0x04,0x40,
+ 0xe5,0xd0,0x7e,0x3d,0xe6,0x98,0x63,0xf4,0x48,0x58,0xae,0x80,0xe0,0x99,0xbf,0x4f,
+ 0x2f,0x9f,0xd9,0x19,0xc2,0x28,0x1b,0x19,0x81,0x26,0xf0,0xb3,0x8e,0x1a,0x91,0x00,
+ 0x2c,0xa0,0x30,0x6a,0xd4,0xa8,0x60,0xb8,0x32,0x57,0x60,0xcd,0x81,0xbd,0xf6,0xda,
+ 0x4b,0x75,0xec,0xd8,0xb1,0x41,0x4f,0x18,0xc0,0x28,0x62,0xb5,0x2f,0xb4,0x80,0x27,
+ 0x40,0x81,0x09,0x40,0xa6,0xd3,0xa1,0x42,0x1d,0x84,0xba,0x17,0xb5,0x8c,0xe1,0x26,
+ 0xb1,0x0b,0xe6,0x3d,0xae,0xfb,0xc5,0x66,0xa0,0x8d,0x4c,0x7d,0x4f,0xa9,0x37,0x49,
+ 0x41,0x55,0x00,0x31,0x38,0x66,0x54,0x8d,0xea,0x86,0xc1,0x1d,0x4f,0x80,0x02,0x10,
+ 0x80,0xba,0xea,0xed,0xb7,0xdf,0x56,0xdd,0xba,0x75,0xd3,0x82,0x61,0xb8,0xd5,0x06,
+ 0x64,0x90,0xd8,0x05,0xf3,0x1e,0xfb,0x7e,0x84,0xcb,0x3a,0xbe,0xb4,0x08,0x10,0xb0,
+ 0x08,0x9f,0x98,0xaa,0x00,0x62,0xb0,0x04,0x1d,0x96,0x30,0xe7,0xa8,0x37,0xbf,0xff,
+ 0xfe,0x7b,0x4d,0x00,0x3f,0xef,0x30,0xcf,0x04,0xc0,0xe0,0xc2,0xbb,0x05,0x6b,0x36,
+ 0x9f,0x40,0xb0,0x26,0xb0,0x27,0x30,0x26,0x71,0xb4,0x40,0xf0,0x8c,0xb1,0xb3,0x2a,
+ 0x09,0xe7,0x59,0xb1,0x03,0x3b,0x20,0x89,0x4b,0xb8,0x36,0x19,0x02,0x50,0xea,0x11,
+ 0x3e,0xcd,0xa8,0x7c,0x0b,0x1f,0x20,0x58,0x01,0x4e,0x10,0x18,0x7f,0x22,0x78,0x56,
+ 0xfb,0x42,0x43,0x6c,0xbd,0xf5,0xd6,0x8d,0x4e,0x00,0xaa,0x40,0x56,0x44,0xf9,0xe8,
+ 0xa3,0x8f,0x92,0x4b,0x00,0x84,0x4f,0xe6,0xe2,0xa9,0x52,0x08,0xe1,0x03,0x54,0x3d,
+ 0x75,0x7f,0xcb,0x96,0x2d,0x03,0x75,0x2f,0x82,0x67,0xfd,0xa1,0x2d,0xb7,0xdc,0x52,
+ 0xfb,0xe7,0xe7,0x8b,0x00,0xd8,0x14,0xd8,0x16,0x0c,0xb4,0x30,0x6a,0x88,0x2f,0x1e,
+ 0xfd,0x0a,0x27,0x9d,0x74,0x92,0x7e,0x27,0xc8,0x87,0xd7,0x11,0x1d,0x4d,0x54,0x85,
+ 0x38,0x67,0x2c,0xcb,0xfb,0x09,0x94,0xa4,0x63,0x39,0x6e,0x49,0x58,0xe2,0x85,0x22,
+ 0x00,0x16,0x3f,0x82,0xe7,0x58,0xd4,0xbd,0x29,0x78,0xf6,0x22,0xa0,0x53,0x86,0xfb,
+ 0xa2,0x12,0x00,0x0d,0x86,0xbf,0xde,0xeb,0xaf,0xbf,0xae,0x7b,0x12,0xe9,0x2c,0xb9,
+ 0xfe,0xfa,0xeb,0xf5,0x02,0x52,0xd8,0x1b,0xfc,0x07,0x3d,0x71,0xac,0x15,0xcc,0x0a,
+ 0x67,0x08,0x18,0xa3,0x12,0xb0,0xbe,0x20,0xc2,0x06,0xf4,0xc4,0x71,0x0f,0xab,0x90,
+ 0x7f,0xfa,0xe9,0xa7,0xda,0x1d,0x8b,0xce,0x25,0xe9,0x8b,0x48,0x14,0x01,0x68,0x5b,
+ 0xd3,0xc6,0xbe,0xe5,0x96,0x5b,0x0a,0x26,0x7c,0x21,0x80,0x08,0x5e,0xd4,0x3d,0xc2,
+ 0xc7,0xcf,0x0e,0x21,0xe1,0x08,0x81,0x43,0x24,0x06,0x23,0x3d,0x8d,0x74,0x9e,0x3c,
+ 0xf3,0xcc,0x33,0xda,0xe1,0x83,0x11,0x3f,0x76,0xf9,0xa0,0x23,0x09,0xd2,0xd2,0xc3,
+ 0xc6,0xda,0x80,0xf4,0x9a,0xe1,0x12,0x86,0x40,0x21,0x0f,0xe9,0x90,0x06,0xc2,0xe5,
+ 0x1c,0x83,0x2d,0x9b,0x6d,0xb6,0x99,0x76,0x17,0x63,0xa1,0x6b,0x13,0xa4,0xc1,0x7f,
+ 0xb2,0x72,0x18,0xfe,0x85,0xac,0x8b,0x48,0xf3,0x93,0x92,0x8f,0x01,0x8a,0xeb,0x19,
+ 0x1d,0x4d,0x89,0x23,0x00,0xa5,0x8a,0x8e,0x1d,0xac,0xf0,0x42,0x13,0x80,0x85,0x9e,
+ 0x45,0xf0,0x08,0x00,0xe1,0x8b,0xe0,0x11,0x1e,0x02,0xc3,0xdf,0x8d,0xfe,0x70,0xce,
+ 0xa3,0x15,0x38,0x27,0xa5,0x56,0x04,0x8a,0x00,0x19,0xfd,0xa3,0x1b,0x35,0x2a,0xf8,
+ 0x6f,0x62,0x9e,0x83,0x2c,0x08,0xfe,0xec,0xb3,0xcf,0xd6,0x24,0x63,0x25,0x34,0xd6,
+ 0x19,0xa6,0xf5,0x81,0x06,0x60,0x75,0x34,0xfa,0x21,0x12,0x47,0x00,0x3e,0x86,0xd2,
+ 0xcf,0x07,0x32,0xd8,0x50,0x48,0x02,0x50,0xb2,0x45,0xdd,0x23,0x78,0x84,0x80,0x5b,
+ 0x34,0x82,0x46,0x35,0xa3,0x82,0x39,0xc7,0xe2,0x94,0xf4,0x15,0xd0,0x1f,0x2e,0xb1,
+ 0x79,0x4c,0x6c,0x83,0xf3,0x3c,0x27,0x55,0x0a,0xe4,0x22,0x2d,0xfe,0x07,0xc2,0x40,
+ 0x24,0x08,0x84,0xba,0xa7,0x2a,0x60,0xf0,0x8a,0xd5,0x46,0x99,0x0d,0x84,0x47,0x11,
+ 0xfb,0x10,0xe1,0xaa,0x05,0x01,0xd0,0x02,0x54,0x3f,0x68,0x00,0x0a,0x4b,0xa2,0x08,
+ 0x80,0xfa,0x67,0x95,0x4d,0x3e,0xb2,0x90,0xc2,0x07,0x47,0x1c,0x71,0x44,0x50,0xcf,
+ 0x23,0x78,0x31,0xb8,0x50,0xe5,0x94,0x68,0x8c,0x42,0xd4,0xbb,0x40,0x6c,0x05,0x0c,
+ 0x45,0x11,0x2c,0xc2,0xe4,0x79,0xd1,0x1a,0x94,0x62,0x88,0xc3,0xe2,0xd1,0xc4,0xa4,
+ 0x47,0xda,0xdc,0x87,0xa6,0xa1,0xba,0x21,0x1d,0x06,0x62,0x18,0x31,0x94,0xd1,0x48,
+ 0xb4,0x51,0x18,0x30,0x56,0x25,0x36,0x8f,0xa3,0xde,0x6f,0x23,0xdd,0xf3,0x71,0xc0,
+ 0x40,0x19,0xdd,0xe7,0x51,0x48,0x59,0x12,0x66,0xfc,0x31,0xf0,0xc0,0x62,0x89,0x8d,
+ 0x41,0x00,0x11,0x3c,0x82,0x43,0xd5,0x53,0x2a,0x11,0xbe,0x59,0x15,0xd8,0x42,0xa5,
+ 0x3a,0xa0,0x4e,0x47,0xfd,0x73,0x2f,0x6a,0x9c,0x12,0x0f,0x49,0x10,0x2c,0xbd,0x87,
+ 0xf4,0x27,0x1c,0x72,0xc8,0x21,0x91,0x00,0x09,0x24,0x36,0x8f,0x73,0x75,0x7f,0x5c,
+ 0xd8,0xe9,0xdb,0xe0,0x1a,0xe4,0x45,0x63,0xcb,0x48,0x2a,0x5a,0xdc,0x74,0x27,0x8f,
+ 0x4c,0x00,0x54,0x1a,0xa3,0x52,0xef,0xbf,0xff,0x7e,0x41,0x85,0x4f,0x29,0xc6,0x10,
+ 0xa3,0xb4,0x63,0x71,0x53,0x52,0xa5,0x8e,0xa7,0x44,0x73,0x8d,0x3a,0x1a,0xc1,0x72,
+ 0x3f,0x7d,0x04,0x8c,0x0e,0xe2,0x22,0x0d,0xe3,0x25,0x36,0x8f,0x89,0x5d,0xd7,0x6d,
+ 0x14,0xfa,0x7e,0x1b,0xe9,0xde,0x3f,0x15,0xd8,0xef,0x80,0x96,0x13,0xfe,0x15,0xe6,
+ 0x50,0x3a,0x32,0x84,0x04,0xa9,0x34,0x41,0x28,0x01,0xb0,0x70,0xa9,0xeb,0x0a,0x25,
+ 0x7c,0x1c,0x26,0xa8,0x9f,0x69,0x96,0xc9,0x47,0xf0,0x41,0x30,0x1a,0xf0,0x91,0xb9,
+ 0x04,0x5a,0x41,0x62,0xf3,0x38,0x57,0xf7,0x17,0x02,0xfc,0x3f,0xf9,0x46,0xe9,0x37,
+ 0x1d,0x6d,0xc4,0x6f,0x02,0xbf,0x42,0x19,0x2c,0x8b,0x4d,0x00,0xd9,0x11,0xa3,0xd0,
+ 0x55,0x80,0x7c,0x00,0xec,0x47,0xa5,0x09,0xf0,0xee,0x91,0xd8,0x3c,0x0e,0xbb,0x9e,
+ 0x0e,0xd9,0x3e,0x1f,0x37,0x7d,0x1b,0xe9,0xbe,0x27,0xdd,0xfd,0x54,0x6d,0xd4,0xf5,
+ 0x61,0x0e,0x36,0x14,0x1e,0x7a,0x29,0x65,0xb0,0x6c,0x99,0x20,0x00,0xfd,0xfd,0x7c,
+ 0x14,0x5d,0xc0,0xd4,0x6b,0x12,0xbb,0x60,0xde,0xe3,0xba,0x3f,0xdb,0xeb,0xe9,0x10,
+ 0x37,0x7d,0x1b,0x99,0xbe,0x0f,0x25,0x1f,0x7b,0x26,0xcc,0xa3,0xca,0x84,0x39,0x58,
+ 0xb6,0xcc,0x68,0x00,0x8f,0xd4,0x48,0x25,0x70,0x4a,0xbd,0xd8,0x01,0xc4,0x51,0x7a,
+ 0x4a,0x3d,0x01,0x96,0x61,0x02,0x98,0xc2,0xb6,0x81,0xf6,0xf0,0x04,0x48,0x28,0x01,
+ 0x5c,0x02,0x17,0xa1,0x4b,0x9c,0x77,0x02,0x60,0x99,0x47,0xad,0x2f,0x3d,0xe2,0x03,
+ 0x43,0xcf,0x95,0xef,0xb6,0xc0,0x6d,0xa1,0x9b,0xc8,0x1b,0x01,0xb0,0x40,0x79,0x49,
+ 0x3a,0x6d,0x4c,0x30,0x08,0x23,0xb1,0x79,0x4c,0x8c,0x71,0x67,0x36,0xa3,0xc2,0x80,
+ 0xd7,0x8f,0x9d,0xee,0xb2,0x82,0x54,0xdf,0x1f,0x17,0x61,0x5d,0xf0,0x22,0x70,0x57,
+ 0x89,0xb7,0x0d,0xc9,0xbc,0x11,0x80,0xce,0x07,0xba,0x1c,0xa5,0xbb,0xd4,0xe5,0xc2,
+ 0x6d,0xba,0x7d,0xef,0xdb,0xbc,0x8d,0xda,0xaf,0xd5,0x99,0xaa,0xfd,0x61,0xd7,0xa8,
+ 0x83,0x0f,0xfd,0x17,0x72,0x4c,0xac,0x51,0x7b,0xdc,0xb6,0x7d,0x77,0xb5,0xf3,0x2e,
+ 0xad,0xf5,0x47,0xb8,0xba,0x38,0xed,0xff,0x33,0xcf,0xe5,0xe3,0x7e,0x1b,0xf6,0xf3,
+ 0x51,0xbe,0x3f,0xd5,0xf3,0x61,0xe0,0xfb,0xc3,0x34,0x6f,0x2a,0xa1,0xdb,0xad,0x88,
+ 0xbc,0x11,0x80,0x76,0xa7,0xe9,0xb9,0x93,0x0a,0xad,0x5a,0xb7,0x53,0x47,0x9f,0x78,
+ 0xb3,0xba,0xa8,0xdb,0x04,0x75,0x61,0xb7,0xa7,0x75,0xac,0x71,0xb9,0x11,0x1b,0x68,
+ 0x79,0xc0,0xa9,0xfa,0xe5,0xa3,0xa6,0x9f,0x4b,0x88,0x0b,0x9a,0xe9,0x8e,0x26,0x71,
+ 0x21,0x81,0x26,0x4c,0x45,0x00,0x57,0x93,0xd2,0x6e,0x4e,0xe6,0x8d,0x00,0xa8,0xf1,
+ 0x30,0x8f,0x5f,0x1b,0x7c,0x4c,0xcb,0x36,0x27,0xa8,0x2b,0x6f,0x7c,0x41,0x55,0xfe,
+ 0x6f,0x6a,0x5a,0x5c,0xd6,0x73,0xa2,0x6a,0xd1,0xaa,0x3c,0xa5,0x57,0xb1,0x09,0xbc,
+ 0x74,0x24,0x36,0x8f,0xa3,0xbe,0x5f,0x63,0xc3,0xf5,0xfe,0x94,0x6e,0x06,0xb7,0xc2,
+ 0x08,0x60,0x97,0x72,0x7b,0xec,0xc1,0x3c,0xce,0x0b,0x01,0x48,0x38,0xcc,0x03,0xd8,
+ 0xf6,0xf8,0x6d,0x7f,0x48,0x07,0x75,0x41,0xf7,0x7b,0x54,0xdf,0x51,0xb3,0x23,0x81,
+ 0x7b,0x79,0x26,0x2c,0xbd,0x5c,0x7a,0x20,0x67,0x92,0x7e,0x21,0xd2,0xc3,0xbe,0x92,
+ 0xb1,0x8e,0x30,0x02,0x84,0x0d,0x06,0xd9,0x83,0x4f,0x79,0x21,0x00,0x2a,0x91,0x71,
+ 0x72,0x17,0xce,0x38,0xe3,0x8c,0x20,0x06,0x6d,0xdb,0x77,0x54,0xb7,0x8c,0x9c,0xa6,
+ 0x86,0x3f,0x39,0xaf,0x21,0xc6,0x7d,0xfd,0x5f,0x5c,0x8b,0x01,0x0f,0x7c,0xa8,0x3a,
+ 0x1c,0x79,0xba,0x9e,0x5c,0x12,0x96,0x9e,0x79,0x2e,0x1f,0xc8,0xf6,0xff,0xb2,0x7d,
+ 0x9e,0xe1,0x60,0xbc,0xa0,0x18,0x14,0x0b,0x23,0x80,0x5d,0xd2,0xc3,0xc0,0xc8,0x67,
+ 0x5e,0x08,0x20,0x33,0x76,0xa3,0xa0,0x6d,0xbb,0x0e,0xea,0xec,0xae,0xfd,0x54,0xcf,
+ 0x81,0x13,0xd5,0x35,0x77,0x3c,0x1b,0xc4,0xfa,0xd8,0x88,0xbb,0xf5,0xaa,0x52,0x87,
+ 0x1f,0xd7,0x29,0x6d,0xda,0xf8,0xf0,0x49,0x6c,0x1e,0x47,0x7d,0x9f,0x7c,0xa7,0x97,
+ 0xcd,0xff,0x41,0x00,0x06,0x76,0x20,0x00,0xc0,0xef,0x21,0x4c,0x03,0xb8,0x4a,0xbb,
+ 0x3d,0xd4,0x9d,0x37,0x02,0x60,0x00,0x9e,0x73,0xce,0x39,0x91,0xc0,0x47,0xd1,0xa4,
+ 0x09,0xeb,0xb9,0x92,0xf3,0x30,0x9f,0x8c,0xb0,0x9f,0xc7,0x15,0x4b,0x62,0xf3,0x38,
+ 0xea,0xff,0xa7,0x43,0xbe,0xd3,0x8f,0xfa,0x7f,0x10,0x00,0x8f,0x25,0x11,0x3e,0x80,
+ 0x0c,0x61,0x1a,0xc0,0x55,0xda,0x5d,0xc8,0x0b,0x01,0x18,0x8f,0x47,0x60,0x2c,0x89,
+ 0xc6,0x5c,0x81,0x8a,0x8a,0x0a,0x1d,0xbb,0x20,0xd7,0x88,0x5d,0xb0,0x9f,0xb7,0xef,
+ 0x8f,0x7b,0x3d,0xdd,0xff,0xa7,0x4b,0x2f,0xdb,0xf7,0x8b,0xfb,0xfd,0x90,0x9e,0x82,
+ 0x80,0x17,0x13,0xde,0x4c,0x26,0x01,0xc2,0x0c,0x41,0x5b,0xe8,0x36,0x01,0xcc,0xb5,
+ 0x16,0xf2,0x46,0x00,0x9c,0x33,0x80,0xb8,0x4d,0xe3,0xc1,0x93,0x09,0xe4,0x59,0x62,
+ 0xf3,0x38,0xea,0xf5,0xb8,0xe9,0x15,0xfa,0xfe,0x28,0xdf,0x8f,0x93,0xab,0x2d,0x7c,
+ 0x10,0x66,0x08,0xda,0xa5,0x5c,0x84,0x6d,0x2e,0xb0,0x21,0x24,0xc8,0x0b,0x01,0xa8,
+ 0x9b,0xf0,0xa3,0xc3,0x3d,0x0b,0xf7,0x2b,0x3c,0x76,0xc4,0x69,0x33,0x15,0xc4,0x63,
+ 0xd7,0x06,0x19,0x90,0x6b,0x08,0x41,0xc5,0x05,0xdc,0x3c,0xce,0x16,0x61,0xdf,0x21,
+ 0x48,0x97,0x0f,0x22,0x7c,0xd2,0x12,0x0f,0x27,0x5b,0xf8,0x80,0x2a,0x21,0x2e,0x01,
+ 0x4c,0xd0,0xf3,0x5a,0x90,0xc1,0x20,0xf1,0xe4,0x71,0x7d,0x84,0x47,0xe6,0x08,0xb3,
+ 0x01,0x52,0x09,0xdc,0x3e,0x2e,0xd8,0x68,0x20,0x5a,0x41,0x5c,0xae,0xbd,0xf0,0xb2,
+ 0x03,0x4d,0x40,0x16,0x8f,0x0e,0xcb,0x6b,0x5b,0xf0,0xa6,0xd0,0x6d,0xf8,0xe1,0xe0,
+ 0x04,0xc2,0x55,0xea,0x6d,0xc1,0x33,0xa0,0x06,0x3c,0x01,0x12,0x4a,0x00,0x57,0x69,
+ 0x17,0xc1,0x7b,0x02,0x24,0x1c,0xae,0x92,0x6e,0x1e,0x03,0x7c,0x09,0x3c,0x01,0x12,
+ 0x0a,0x5b,0xe0,0x2e,0xe1,0x7b,0x02,0x14,0x01,0x01,0x44,0xc8,0x66,0x89,0x37,0x63,
+ 0xe0,0x09,0x90,0x50,0x02,0x98,0xc2,0x36,0x05,0xee,0x09,0x50,0x04,0x08,0x13,0xbc,
+ 0x6b,0x92,0x89,0x27,0x40,0x42,0x09,0x10,0x75,0x26,0x92,0x27,0x40,0x02,0x61,0x97,
+ 0xf4,0x30,0x30,0x7b,0xc8,0x13,0x20,0xa1,0x1a,0x20,0x4c,0xe0,0x9e,0x00,0x45,0xa2,
+ 0x01,0x5c,0xc2,0x77,0xc1,0x13,0x20,0xc1,0x04,0x10,0x21,0xdb,0x04,0x90,0xf5,0x05,
+ 0x3c,0x01,0x12,0x0a,0xbb,0x94,0x8b,0xb0,0x25,0x36,0x49,0xe0,0x09,0x50,0x24,0x04,
+ 0x08,0x5b,0x91,0x24,0x27,0x04,0xc0,0x35,0xc9,0xa3,0xe9,0xc0,0x2c,0xf1,0xae,0x25,
+ 0x68,0xcc,0x63,0xaf,0x01,0x12,0x88,0x54,0x25,0xde,0x86,0x27,0x40,0xc2,0x09,0x10,
+ 0xb6,0x90,0x14,0x0b,0x67,0x01,0x4f,0x80,0x84,0x12,0x20,0x6c,0xb5,0x30,0x59,0x31,
+ 0xcd,0x13,0x20,0xc1,0x70,0x95,0x74,0xf3,0x18,0xb0,0xaa,0xb9,0x27,0x40,0x42,0x61,
+ 0x0b,0xdc,0x16,0xbe,0xb9,0x8c,0x9d,0x27,0x40,0x82,0x09,0x20,0xa5,0x5c,0x84,0x2e,
+ 0x8b,0x6f,0xb0,0xd2,0x1a,0x0b,0x68,0x12,0x7b,0x02,0x24,0x94,0x00,0xa6,0xd0,0x81,
+ 0x29,0x74,0x56,0x0c,0x95,0x75,0x94,0x3d,0x01,0x12,0x08,0x11,0xbc,0x08,0x1c,0x98,
+ 0x8b,0x67,0x33,0x9f,0x00,0xb7,0x72,0x62,0x4f,0x80,0x04,0x42,0x04,0x6f,0x0b,0x5d,
+ 0x20,0xcb,0xe2,0xb3,0xcd,0x8d,0x27,0x40,0x02,0xe1,0x2a,0xe9,0xe6,0x3e,0x09,0x4c,
+ 0xce,0x61,0x06,0x37,0xfb,0x0d,0xcf,0x9a,0x35,0x2b,0xfb,0x95,0x42,0xa9,0x6f,0x7c,
+ 0xc6,0x37,0x0d,0x88,0xc0,0xcd,0x0d,0x30,0x88,0x99,0x4d,0x84,0xe0,0x01,0xc6,0x21,
+ 0x7b,0x28,0x56,0x57,0x57,0xeb,0xb5,0x82,0x59,0xf6,0x3f,0xab,0xc5,0xa2,0x0b,0xbd,
+ 0x65,0x8c,0x47,0x38,0xd8,0xd8,0x02,0x81,0x8b,0xb0,0x45,0xf0,0xb2,0xdd,0x0d,0x2b,
+ 0xb2,0x0d,0x19,0x32,0x44,0x8d,0x1d,0x3b,0x56,0xef,0x6c,0xf2,0xc5,0x17,0x5f,0xe8,
+ 0x8d,0x3f,0xd8,0x00,0x24,0xe3,0xe5,0xe2,0xd9,0x5d,0xcb,0x67,0x7e,0xe3,0x83,0x81,
+ 0x20,0x11,0xba,0xec,0x6b,0x24,0x7b,0x1c,0xb1,0xbf,0x51,0x97,0x2e,0x5d,0xd4,0xa0,
+ 0x41,0x83,0xf4,0xe6,0xdd,0x93,0x27,0x4f,0xd6,0xbb,0xbd,0x51,0x88,0xd9,0xd5,0x2c,
+ 0xa3,0xfd,0x02,0xd8,0x6c,0xe0,0x83,0x0f,0x3e,0xd0,0x6c,0xda,0x67,0x9f,0x7d,0xbc,
+ 0x10,0x1a,0x59,0xf8,0xe6,0xc6,0x56,0x08,0x1c,0x30,0x29,0xb7,0x73,0xe7,0xce,0x7a,
+ 0xb7,0xb4,0xc1,0x83,0x07,0x6b,0xe1,0x4f,0x9a,0x34,0x49,0x17,0x5c,0x36,0xb5,0x64,
+ 0x3f,0xa3,0x8c,0x76,0x0c,0xe1,0x21,0x76,0x0c,0x63,0xcb,0x18,0x12,0x2c,0xc4,0x96,
+ 0xb1,0x1e,0x6e,0x50,0xcf,0x8b,0xd0,0x59,0x97,0x01,0x50,0x2d,0xa3,0x99,0xd9,0xd0,
+ 0x73,0xc0,0x80,0x01,0x6a,0xf8,0xf0,0xe1,0xea,0xa1,0x87,0x1e,0xd2,0x25,0x9f,0x6a,
+ 0x9b,0x2d,0xed,0x50,0xfd,0x51,0x36,0xb3,0x82,0x00,0x4b,0x52,0x6d,0x1a,0xc5,0xbe,
+ 0x7c,0x30,0xab,0x50,0x5b,0xc7,0x7a,0xd4,0xdf,0x42,0x47,0x4a,0x3b,0x6d,0x7f,0x76,
+ 0x2a,0xed,0xdd,0xbb,0xb7,0xea,0xdb,0xb7,0xaf,0xba,0xe3,0x8e,0x3b,0xb4,0xe0,0xd9,
+ 0xd5,0x6c,0xdc,0xb8,0x71,0x7a,0x0f,0x45,0x34,0x36,0x25,0x3f,0xaa,0xf0,0x91,0x3d,
+ 0x04,0xa8,0x09,0xdb,0x36,0x6e,0xfe,0xfc,0xf9,0x6a,0xc6,0x8c,0x19,0xba,0x49,0x31,
+ 0x62,0xc4,0x08,0xd5,0xa3,0x47,0x0f,0x5f,0x1d,0x14,0x50,0xf8,0xcd,0x9a,0x35,0xd3,
+ 0x6b,0x00,0xf5,0xea,0xd5,0x2b,0x28,0xed,0x18,0x79,0xf7,0xdc,0x73,0x8f,0x2e,0xf1,
+ 0xc8,0x65,0xca,0x94,0x29,0x7a,0x47,0xf7,0x39,0x73,0xe6,0xa8,0x05,0x0b,0x16,0xc4,
+ 0xdd,0xc6,0xae,0x06,0x02,0x54,0xa7,0xda,0x38,0x72,0xee,0xdc,0xb9,0x7a,0x4b,0xf6,
+ 0x47,0x1e,0x79,0x44,0x0d,0x1b,0x36,0x4c,0xf5,0xeb,0xd7,0x4f,0x55,0x56,0x56,0xfe,
+ 0xbb,0x0c,0xac,0x6f,0x22,0xe6,0x65,0xb8,0x97,0x25,0xe0,0x4e,0x3d,0xf5,0x54,0x5d,
+ 0xb7,0x53,0xda,0x07,0x0e,0x1c,0xa8,0x0b,0x20,0xa5,0xfd,0xf1,0xc7,0x1f,0xd7,0x4d,
+ 0x3c,0x36,0xb1,0x9c,0x39,0x73,0xa6,0x16,0x3c,0xa5,0x9e,0xe6,0x9e,0xec,0x12,0x16,
+ 0x63,0x0f,0xc3,0x6a,0x08,0x50,0x99,0x6a,0xf3,0xc8,0x85,0x0b,0x17,0x06,0x9b,0x29,
+ 0x43,0x02,0x5e,0x84,0x0d,0x95,0xfb,0xf4,0xe9,0xa3,0x5f,0x90,0xad,0x65,0xc1,0xcd,
+ 0x37,0xdf,0xec,0x91,0x05,0x24,0x1f,0xc9,0x53,0x4a,0x7b,0xff,0xfe,0xfd,0xb5,0x61,
+ 0x47,0x9b,0x9e,0xd2,0x3e,0x61,0xc2,0x04,0x2d,0x83,0xe9,0xd3,0xa7,0x6b,0x79,0xd0,
+ 0xc4,0xa3,0xc4,0x53,0x48,0xd9,0x1b,0x99,0x02,0x9b,0xaa,0xb9,0x17,0x12,0x2a,0x21,
+ 0x40,0x19,0x76,0x5f,0x98,0x31,0xc8,0x06,0xc9,0x54,0x05,0xfc,0x29,0x9a,0x00,0xb5,
+ 0x33,0x66,0xcc,0x18,0xfd,0x62,0x6c,0xc2,0x3c,0x74,0xe8,0x50,0xad,0x96,0x3c,0xb2,
+ 0x07,0x79,0x49,0x9e,0x8e,0x1c,0x39,0x52,0x8d,0x1e,0x3d,0x5a,0x3d,0xf6,0xd8,0x63,
+ 0x6a,0xe2,0xc4,0x89,0xc1,0x6e,0xa5,0x6c,0x57,0x4b,0x69,0xa7,0x85,0x46,0x3d,0x9f,
+ 0xe5,0xc6,0xd5,0xc8,0xbc,0xac,0x84,0x50,0x7b,0x50,0x15,0xa6,0x05,0x84,0x04,0x68,
+ 0x02,0xaa,0x03,0x6c,0x02,0x0c,0x43,0x5a,0x07,0xb0,0x72,0xfc,0xf8,0xf1,0xda,0x08,
+ 0x61,0x57,0x6e,0x8f,0xcc,0x41,0x1e,0x92,0x97,0x6c,0x51,0x8b,0xd0,0x29,0xed,0xd3,
+ 0xa6,0x4d,0xd3,0xed,0x79,0x4a,0x3b,0xf9,0xbf,0x78,0xf1,0xe2,0x7a,0xa5,0x3d,0xcb,
+ 0xed,0x6a,0xab,0x4a,0x24,0xd4,0xfe,0x28,0xad,0xc5,0xa2,0x54,0x24,0xa0,0x3a,0x40,
+ 0xdd,0xb0,0x9f,0x30,0xad,0x03,0x9a,0x88,0x6c,0x2c,0x09,0x33,0x69,0x7a,0x78,0x64,
+ 0x0f,0xf2,0x92,0x3c,0x45,0xdb,0x52,0xd8,0xe6,0xcd,0x9b,0xa7,0x3b,0xe4,0x72,0x50,
+ 0xda,0xed,0x80,0xac,0x4b,0x4b,0xcc,0x50,0x7b,0xa2,0x3c,0xac,0x2a,0x10,0x22,0xc0,
+ 0x3c,0x88,0xc0,0x0b,0x41,0x06,0x54,0x11,0x2f,0x08,0xe8,0x75,0xf2,0xc8,0x1c,0x92,
+ 0x8f,0xe4,0x29,0x06,0x1d,0x1b,0x3e,0x52,0xda,0xd9,0x99,0x3c,0x07,0xa5,0xdd,0x56,
+ 0xfd,0xe5,0x25,0xae,0x50,0x7b,0xa1,0x22,0x15,0x09,0x84,0x08,0xbc,0x10,0x6c,0x84,
+ 0x10,0x1e,0xb9,0x07,0x79,0x9b,0x63,0xa1,0x9b,0xc2,0xaf,0x28,0x49,0x15,0xea,0x34,
+ 0xc1,0x22,0xe5,0x43,0xd2,0xc2,0xa2,0xd0,0x92,0xef,0x20,0x41,0x69,0x9d,0x61,0xb8,
+ 0xd4,0xe7,0xdb,0x32,0x1f,0x96,0xd6,0xc9,0xb2,0xb4,0x24,0x6e,0xa8,0x6b,0x22,0x56,
+ 0xd6,0x75,0x16,0xd5,0xb8,0xba,0x8d,0x7d,0x68,0x72,0x61,0x49,0x9d,0xac,0xaa,0xeb,
+ 0x64,0x57,0x96,0x4a,0xc6,0xff,0x07,0x09,0xd2,0xdd,0xcf,0xb2,0x57,0xe1,0x2d,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
};
--- /dev/null
+static const unsigned char printer_sm_png[] =
+{
+ 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x08,0x03,0x00,0x00,0x00,0x60,0xdc,0x09,
+ 0xb5,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+ 0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+ 0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+ 0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+ 0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+ 0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+ 0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+ 0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+ 0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+ 0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+ 0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+ 0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+ 0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+ 0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+ 0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+ 0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+ 0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+ 0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+ 0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+ 0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+ 0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+ 0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+ 0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+ 0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+ 0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+ 0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+ 0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+ 0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+ 0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+ 0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+ 0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+ 0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+ 0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+ 0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+ 0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+ 0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+ 0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+ 0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+ 0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+ 0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+ 0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+ 0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+ 0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+ 0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+ 0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+ 0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+ 0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+ 0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+ 0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+ 0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+ 0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+ 0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+ 0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+ 0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+ 0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+ 0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+ 0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+ 0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+ 0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+ 0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+ 0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+ 0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+ 0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+ 0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+ 0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+ 0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+ 0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+ 0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x30,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x30,0x00,0x00,0x00,0x00,0xf8,0xff,0x4e,0x36,0x00,0x00,0x03,0x62,0x69,0x54,
+ 0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+ 0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+ 0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+ 0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+ 0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+ 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+ 0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+ 0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+ 0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+ 0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+ 0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+ 0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+ 0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+ 0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+ 0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+ 0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+ 0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+ 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+ 0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+ 0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+ 0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+ 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+ 0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+ 0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+ 0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+ 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+ 0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+ 0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+ 0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+ 0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+ 0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+ 0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+ 0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+ 0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+ 0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+ 0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+ 0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+ 0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+ 0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+ 0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x02,0xa0,0x50,0x4c,0x54,0x45,
+ 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,
+ 0xff,0xff,0xfc,0xfc,0xfc,0xff,0xff,0xff,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,
+ 0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,
+ 0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,
+ 0x0d,0x0d,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x12,0x13,0x13,
+ 0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x18,0x18,0x18,0x19,0x19,0x19,
+ 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x21,
+ 0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,
+ 0x26,0x27,0x27,0x27,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2c,0x2c,0x2c,
+ 0x2d,0x2d,0x2d,0x2d,0x2e,0x39,0x2e,0x2e,0x2e,0x2e,0x2e,0x39,0x2e,0x2f,0x35,0x2f,
+ 0x2f,0x2f,0x2f,0x2f,0x3a,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33,
+ 0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,
+ 0x38,0x3c,0x55,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c,0x3b,0x3b,0x3b,0x3c,
+ 0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x43,0x60,0x3f,0x3f,0x3f,0x40,0x40,
+ 0x40,0x41,0x41,0x41,0x41,0x42,0x45,0x41,0x44,0x4c,0x42,0x42,0x42,0x43,0x43,0x43,
+ 0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,
+ 0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,
+ 0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,
+ 0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,0x59,
+ 0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5e,0x5e,0x5e,0x5f,0x5f,
+ 0x5f,0x5f,0x6e,0x90,0x60,0x60,0x60,0x60,0x69,0xa2,0x61,0x61,0x61,0x62,0x62,0x62,
+ 0x63,0x63,0x63,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,0x6a,
+ 0x6a,0x6a,0x6a,0x7a,0xa0,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x71,0x71,
+ 0x71,0x71,0x82,0xab,0x71,0x83,0xac,0x72,0x72,0x72,0x74,0x74,0x74,0x76,0x76,0x76,
+ 0x77,0x77,0x77,0x79,0x79,0x79,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,
+ 0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x85,
+ 0x85,0x86,0x86,0x86,0x87,0x87,0x87,0x8a,0x8a,0x8a,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,
+ 0x8e,0x8e,0x8e,0x90,0x90,0x90,0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x93,0x93,0x96,
+ 0x96,0x96,0x98,0x98,0x98,0x9b,0x9b,0x9b,0x9d,0x9d,0x9d,0x9f,0x9f,0x9f,0xa0,0xa0,
+ 0xa0,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,
+ 0xaa,0xaa,0xaa,0xab,0xab,0xab,0xad,0xad,0xad,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xb0,
+ 0xb0,0xb0,0xb2,0xb2,0xb2,0xb4,0xb4,0xb4,0xb7,0xb7,0xb7,0xb9,0xb9,0xb9,0xba,0xba,
+ 0xba,0xbb,0xbb,0xbb,0xbc,0xbc,0xbc,0xbd,0xbd,0xbd,0xbe,0xbe,0xbe,0xc0,0xc0,0xc0,
+ 0xc2,0xc2,0xc2,0xc3,0xc3,0xc3,0xc4,0xc4,0xc4,0xc5,0xc5,0xc5,0xc6,0xc6,0xc6,0xc7,
+ 0xc7,0xc7,0xc9,0xc9,0xc9,0xca,0xca,0xca,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,
+ 0xce,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0xd4,0xd4,0xd4,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,
+ 0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xdf,
+ 0xdf,0xdf,0xe0,0xe0,0xe0,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe5,0xe5,0xe5,0xe6,0xe6,
+ 0xe6,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xed,0xed,0xed,0xee,0xee,0xee,
+ 0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf4,
+ 0xf4,0xf4,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xfa,0xfa,
+ 0xfa,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,
+ 0x96,0xb7,0x1b,0xef,0x00,0x00,0x00,0x08,0x74,0x52,0x4e,0x53,0x00,0x08,0x7f,0xc4,
+ 0xdc,0xdc,0xfc,0xfc,0x86,0xfa,0x37,0x3a,0x00,0x00,0x03,0x97,0x49,0x44,0x41,0x54,
+ 0x18,0x19,0x95,0xc1,0x6f,0x68,0xd4,0x75,0x1c,0xc0,0xf1,0xf7,0xe7,0xfb,0xfb,0xfe,
+ 0xee,0xcf,0xe6,0xb1,0x73,0x53,0xdb,0xfa,0xc3,0xc2,0x1d,0x35,0xcc,0x1c,0x4a,0x60,
+ 0x89,0x3e,0x50,0xfa,0x43,0x52,0x4a,0x52,0x94,0x48,0x33,0x0c,0x1f,0x84,0x21,0x3d,
+ 0xe8,0x0f,0xe1,0xa3,0x20,0x0c,0x83,0x11,0x42,0x04,0xd2,0x1f,0xb0,0x7a,0x12,0x14,
+ 0x66,0xd1,0x13,0x35,0x08,0x4b,0x4b,0x54,0xc4,0xd4,0x5c,0x63,0x78,0xe8,0x6a,0x59,
+ 0x6a,0xdb,0xed,0x76,0xdb,0xfd,0xee,0xee,0xf7,0xfd,0xf4,0xbb,0x6d,0xa2,0x79,0x3a,
+ 0xcf,0xd7,0x4b,0x10,0xf1,0x4c,0x2f,0xf5,0xe8,0x74,0xa1,0xaa,0x88,0xe9,0xa7,0x7e,
+ 0x19,0x67,0xe4,0xf0,0xaf,0xd4,0xaf,0x5f,0x8c,0x37,0x36,0xc0,0x2d,0xf0,0xac,0xa9,
+ 0x8c,0xd1,0x73,0xcf,0x2f,0xab,0x16,0x1f,0xb8,0x74,0xac,0x7d,0xf5,0xcc,0x93,0xbb,
+ 0x16,0x3c,0xf1,0xc1,0x86,0xc6,0x3d,0x6d,0xb3,0x76,0xf9,0x6b,0x5a,0xa8,0x61,0x4c,
+ 0x6f,0xe1,0x08,0x9f,0x8d,0x3c,0xf7,0x6a,0xe9,0xfc,0xce,0x55,0x43,0x7b,0x83,0x2d,
+ 0x2f,0x1d,0x3f,0x65,0x0e,0xba,0xf7,0xdb,0x7b,0x96,0xb7,0xed,0xa3,0x56,0xaf,0x25,
+ 0x92,0x5c,0x47,0x7b,0x96,0x75,0x0b,0x83,0xdd,0x99,0x0b,0xef,0x5c,0x1c,0x5c,0xbe,
+ 0xa3,0x69,0x59,0x7c,0xaf,0x16,0xe6,0x0d,0xf6,0xc0,0x83,0xcf,0xf0,0x3f,0x96,0x88,
+ 0x2b,0xc6,0x06,0xdb,0x4f,0x16,0xf9,0xa7,0xab,0x63,0xc6,0x36,0x0b,0xd9,0x1d,0xaf,
+ 0xc4,0xbb,0x36,0xcd,0x85,0x1e,0x6a,0x58,0x22,0xe1,0xd6,0x73,0x9b,0x13,0x7c,0x7d,
+ 0xac,0xfc,0x7a,0xd3,0xcb,0x2f,0xb6,0x3e,0xf2,0x70,0xf7,0xa7,0xf7,0xb3,0x79,0x5b,
+ 0x3a,0xb3,0x91,0x5a,0x92,0x05,0x1e,0xfa,0xb9,0x98,0xe0,0x2b,0x59,0x99,0x00,0x2a,
+ 0xe5,0x24,0x93,0xf2,0x29,0xae,0xc3,0x12,0x79,0x96,0x04,0xb4,0x49,0x82,0x88,0xb5,
+ 0x4c,0x49,0x71,0x3d,0x92,0xe5,0xd6,0x18,0x6e,0x91,0xe1,0xc6,0x8e,0x0f,0x53,0xcb,
+ 0x70,0x63,0x03,0xe3,0x4c,0xf8,0x84,0xab,0x58,0x6a,0x7c,0x91,0xda,0xbf,0xec,0xf1,
+ 0x81,0x1f,0x87,0x17,0x15,0x2a,0x67,0x0f,0x94,0xb2,0x1b,0xb2,0xef,0x9d,0x5b,0x9f,
+ 0xd8,0xe5,0xaf,0x69,0xe9,0xe9,0x18,0x5f,0x8b,0xa1,0xc6,0xe1,0x43,0x2f,0x7c,0x7e,
+ 0xaa,0xb0,0x7d,0xc9,0xc2,0xc3,0x85,0xc2,0xbb,0x99,0xfb,0xbe,0x5f,0xd2,0xf8,0x5a,
+ 0x7b,0xcf,0xf2,0xb6,0x7d,0xec,0xf4,0x56,0x82,0x65,0x8a,0x73,0x0a,0x82,0x88,0xb0,
+ 0xb6,0xf3,0xd1,0xfe,0x7b,0x57,0x2c,0x22,0xf2,0xd8,0xd2,0x83,0x87,0x62,0xd2,0x18,
+ 0xec,0xd5,0xc2,0x3c,0x1a,0x9f,0x04,0x2c,0x13,0xb4,0xd2,0xff,0xe5,0x88,0xb1,0x5e,
+ 0x43,0x73,0x6b,0xa7,0x16,0x39,0xf3,0x34,0x57,0xf1,0x82,0x78,0xd7,0xa6,0xb9,0x4c,
+ 0xb2,0x44,0x34,0x1c,0xf9,0xb6,0x8f,0x18,0x12,0x8e,0xe6,0x8e,0xfc,0xe0,0x3e,0x72,
+ 0xed,0xf3,0x7f,0xe7,0x8a,0xe7,0xdf,0x7c,0x63,0xf3,0xb6,0x74,0x66,0xa3,0x10,0x91,
+ 0x2c,0x1a,0x9e,0xf9,0x69,0x80,0x2a,0x1d,0x1d,0x6b,0xca,0xcd,0xba,0xb8,0xa9,0x23,
+ 0x01,0xaa,0xea,0xb4,0x70,0x62,0xe6,0x7c,0x81,0xe1,0x34,0xe4,0x53,0x4c,0xb0,0x50,
+ 0xd9,0xff,0x21,0x53,0x32,0x7a,0x36,0xd7,0xfc,0x40,0xd2,0x2f,0xeb,0xd8,0xf1,0xd3,
+ 0x47,0x7f,0xcb,0xb9,0xa7,0xb6,0xa8,0x40,0x1a,0x48,0x31,0xc9,0xe2,0x8a,0xdf,0x71,
+ 0x99,0xeb,0x1b,0xaf,0x54,0x5a,0xf7,0x1c,0x3d,0x9d,0xab,0x58,0x5f,0xc6,0x1a,0xb6,
+ 0x76,0x71,0x2d,0x8b,0x2b,0x0e,0x72,0x99,0x1b,0x2d,0xbb,0x6f,0x76,0x83,0xe7,0x25,
+ 0x5c,0xe0,0x56,0x74,0xb7,0x18,0x57,0x12,0x2e,0x13,0xf1,0x0c,0x16,0x57,0x62,0x4a,
+ 0x30,0x32,0x98,0x0f,0xed,0x0c,0xdf,0x7a,0x7e,0xcc,0x4b,0xfa,0x7e,0xe9,0x63,0x15,
+ 0xae,0x08,0x0b,0xa9,0xed,0x09,0x63,0xa1,0xc2,0xa4,0x20,0x48,0xde,0x19,0x36,0x59,
+ 0xae,0x6f,0xd8,0xcd,0x69,0xd6,0x51,0xdf,0x58,0x54,0x99,0x14,0x8f,0x13,0x70,0x89,
+ 0x1b,0xb8,0x0b,0x55,0x2d,0x2a,0x96,0x2a,0xef,0x76,0x95,0xa1,0x7c,0xd9,0xc8,0x1d,
+ 0x56,0x14,0x51,0xe1,0x1a,0xa5,0xbf,0x55,0x41,0x9d,0x62,0x89,0xd8,0xbb,0x8d,0x14,
+ 0xfc,0xc5,0x70,0x22,0x96,0x04,0x54,0x94,0x2a,0x51,0x41,0x45,0x89,0x5c,0xc0,0x89,
+ 0x52,0x65,0x89,0xa4,0x1b,0xe0,0xdf,0x8e,0x26,0x2d,0xa7,0xd2,0x5c,0x45,0x54,0x50,
+ 0x51,0x60,0x30,0xef,0x2b,0x4a,0x95,0x25,0x92,0x68,0x74,0x6e,0xf6,0x5f,0x7f,0x3a,
+ 0x3b,0xdb,0x29,0xaa,0xa2,0xa2,0x22,0x88,0x08,0x46,0xc4,0x9a,0x7c,0xdf,0x25,0xdf,
+ 0xc7,0x81,0x02,0x96,0xc8,0x1f,0xd9,0xc0,0xa9,0xa2,0x0a,0x28,0x53,0x04,0x04,0x41,
+ 0x04,0x35,0x80,0x03,0x42,0xc0,0x52,0xe5,0x7b,0x65,0xa6,0x63,0x7c,0x20,0x54,0x01,
+ 0x2c,0x13,0x4c,0x9c,0x9b,0x08,0x15,0x71,0x80,0xa5,0x4e,0xaa,0x28,0x11,0x4b,0x9d,
+ 0xd4,0xa1,0x02,0x18,0xea,0xe4,0x50,0x14,0xb0,0x40,0x91,0x3a,0x9c,0xbf,0x4d,0x95,
+ 0x88,0x05,0x12,0xd4,0x21,0xe5,0x84,0x2a,0x4b,0xbd,0x1c,0x04,0x80,0xa5,0x4e,0x61,
+ 0x09,0x19,0x17,0xb0,0xd4,0x29,0x07,0x41,0xe8,0x09,0x16,0x31,0x4d,0x39,0x6e,0x2e,
+ 0x20,0xf0,0xde,0x8a,0x1b,0x4c,0xa7,0xd8,0xa5,0xdc,0xdc,0x50,0xb9,0x65,0xfd,0xdb,
+ 0xad,0x0d,0x5e,0xa7,0x75,0x26,0xbe,0x40,0x0f,0xe4,0x98,0x5e,0xbe,0xb9,0x7b,0x56,
+ 0x3a,0x95,0x4a,0x88,0xb3,0xa1,0x69,0x98,0xb3,0x28,0x53,0x72,0x4c,0x47,0x6c,0x43,
+ 0x7a,0x46,0x32,0xee,0x1b,0x42,0x11,0xd3,0x17,0x8c,0x05,0x65,0x65,0x3a,0x62,0x63,
+ 0xc9,0x98,0x35,0x90,0x71,0x82,0x88,0x31,0x27,0x55,0x99,0x96,0x18,0x4f,0xe8,0x74,
+ 0xa1,0xea,0x7f,0x66,0xc2,0x6f,0x17,0x59,0xdf,0xbf,0x1b,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
+
+};
/*
* Configuration file for CUPS on Windows.
*
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2022 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.3.2"
-#define CUPS_MINIMAL "CUPS/2.3.2"
+#define CUPS_SVERSION "CUPS v2.3.6"
+#define CUPS_MINIMAL "CUPS/2.3.6"
/*
* Do we have the (v)snprintf() functions?
*/
-/* Windows snprintf/vsnprintf are non-conforming */
-/* #undef HAVE_SNPRINTF */
-/* #undef HAVE_VSNPRINTF */
+#define HAVE_SNPRINTF 1
+#define HAVE_VSNPRINTF 1
/*
if (dnssd_add_record)
return (*dnssd_add_record)(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_browse)
return (*dnssd_browse)(sdRef, flags, interfaceIndex, regtype, domain, callBack, context);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_create_connection)
return (*dnssd_create_connection)(sdRef);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_process_result)
return (*dnssd_process_result)(sdRef);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_query_record)
return (*dnssd_query_record)(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_sock_fd)
return (*dnssd_sock_fd)(sdRef);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_register)
return (*dnssd_register)(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_remove_record)
return (*dnssd_remove_record)(sdRef, RecordRef, flags);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_resolve)
return (*dnssd_resolve)(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
if (dnssd_update_record)
return (*dnssd_update_record)(sdRef, RecordRef, flags, rdlen, rdata, ttl);
else
- return (-1);
+ return (kDNSServiceErr_ServiceNotRunning);
}
/*
* Configuration file for CUPS and Xcode.
*
- * Copyright 2007-2019 by Apple Inc.
+ * Copyright 2007-2022 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.3.2"
-#define CUPS_MINIMAL "CUPS/2.3.2"
+#define CUPS_SVERSION "CUPS v2.3.6"
+#define CUPS_MINIMAL "CUPS/2.3.6"
/*