ppr-list-digest volume 1, number 176, message 1

Note: please don't spam any of the e-mail addresses which you see here. Follow this link if you want some addresses to misuse.


From: "Thomas E. Knowles" <tek@CS.Princeton.EDU>
Date: Fri, 22 Oct 1999 16:50:35 -0400
Subject: Re: PPR: DSC parsing problem?

This is a multi-part message in MIME format.
- --------------9EFBDBBC64EB383CD33D4A37
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Well, I've looked around for a solution to this and have come to the
conclusion that since my HP printers don't mind having "(atend)" in the
resource list and my current printing software (Transcript 4.0 from
Adobe) doesn't mind, then PPR shouldn't mind either.  At least not for
me.  I want to put PPR into production but I cannot until this is
resolved.  So, I went ahead and made a patch for it and included that
patch in this e-mail.

Basically, I just changed the handle_atend() and trap_atend() functions
in ppr_dscdoc.c.  Before, they would only check for "(atend)"
immediately following the DSC comment.  Now, they go through the
resource list of the comment, breaking when it finds an "(atend)".  It
issues a WARNING_SEVERE if the (atend) is not the first (and only)
argument to the DSC comment, then sets the atend_flag and continues on. 
I don't know for sure if this is proper, the Red Book doesn't mention
anything about "(atend)" being declared in the resource list, at least I
couldn't find any reference.

I'm also wondering if this is FrameMaker's or Acrobat's fault in the
first place for generating this weird postscript.  Seeing that Acrobat
3.02 generates it fine, but Acrobat 4.0 doesn't, I'm thinking it's
Acrobat's fault.  And if that's true, then this should be okay
postscript since you'd think Adobe would be the most authoritative when
it comes to proper DSC conventions.

This patch is against PPR version 1.32p1.

- -Thom


"Thomas E. Knowles" wrote:
> 
> I have the following file (middle stuff omitted):
> 
> %!PS-Adobe-3.0
> %%Title: (rn7x000t)
> %%Version: 1 1
> %%Creator: (FrameMaker 5.5.6.)
> %%CreationDate: (D:19991004125326)
> %%DocumentData: Clean7Bit
> %%BoundingBox: 0 0 612 792
> %%Pages: 70
> %%DocumentProcessColors: (atend)
> %%DocumentNeededResources:
> %%+ font: (atend)
> %%DocumentSuppliedResources:
> %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
> %%+ procset (Adobe Acrobat - type operators) 1.2 0
> %%EndComments
> %%BeginDefaults
> %%EndDefaults
> %%BeginProlog
> %%EndProlog
> ...
> ...
> %%Trailer
> %%DocumentProcessColors: Cyan Magenta Yellow Black
> %%DocumentNeededResources:
> %%+ font Helvetica-Bold
> %%+ font Times-Roman
> %%+ font Courier
> %%+ font Times-Italic
> %%+ font Times-Bold
> %%+ font Helvetica
> %%+ font Courier-Bold
> %%EOF
> 
> PPR won't print this file because in the %%DocumentNeededResources:
> line, it has a font (atend) argument.  It seems to be having a problem
> parsing the fact that font (atend) means look for the fonts at the end,
> since (atend) is usually used right after %%DocumentNeededResources:.
> Am I right?  I've looked over the DSC spec and I'm not sure if you can
> specify (atend) for a singular resource.  Here are the relevant lines
> from lprsrv when I try to print this:
> 
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: Ignoring "%%DocumentNeededResources:" in trailer because no
> "%%Document
> NeededResources: (atend)" in header
> WARNING: resource "font: atend" declared Needed but no %%Include
> 
> Another interesting part of this is that the file in question is
> generated by Acrobat 4.0 from the PDF file apparently generated by
> FrameMaker 5.5.6.  If I use Acrobat 3.02 to print the same PDF file, it
> works, with the postscript looking like this:
> 
> %!PS-Adobe-3.0
> %%Title: (rn7x000t)
> %%Version: 1 1
> %%Creator: (FrameMaker 5.5.6.)
> %%CreationDate: (D:19991004125326)
> %%DocumentData: Clean7Bit
> %%BoundingBox: 0 0 612 792
> %%Pages: 70
> %%DocumentProcessColors: (atend)
> %%DocumentSuppliedResources:
> %%+ font Helvetica
> %%+ font Times-Italic
> %%+ font Times-Bold
> %%+ font Courier
> %%+ font Helvetica-Bold
> %%+ font Courier-Bold
> %%+ font Times-Roman
> %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
> %%+ procset (Adobe Acrobat - type operators) 1.2 0
> %%EndComments
> %%BeginDefaults
> %%EndDefaults
> %%BeginProlog
> %%EndProlog
> ...
> ...
> 
> What to do about this?
> 
> Thom Knowles
> tek@CS.Princeton.EDU
- --------------9EFBDBBC64EB383CD33D4A37
Content-Type: application/octet-stream;
 name="ppr-atend.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="ppr-atend.patch"

LS0tIHBwcl9kc2Nkb2MuYy5vcmlnCUZyaSBPY3QgMjIgMTU6MjA6MDIgMTk5OQorKysgcHBy
X2RzY2RvYy5jCUZyaSBPY3QgMjIgMTY6NDI6NDMgMTk5OQpAQCAtMTE0LDEyICsxMTQsMzAg
QEAKICoqIHJldHVybiB2YWx1ZSBpcyBub24temVybyB3aGV0aGVyIG9yIG5vdCBhIHdhcm5p
bmcgaXMgd2FyYW50ZWQuCiAqKiB0cmFwX25vYXJnKCkgb3IgdHJhcF9ub2xpc3QoKSBzaG91
bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uLgogKi8KLXN0YXRpYyBpbnQgaGFu
ZGxlX2F0ZW5kKGNvbnN0IGNoYXIgKmtleXdvcmQsIGNvbnN0IGNoYXIgKmFyZ3VtZW50LCBp
bnQgYXJnY291bnQsIGludCAqYXRlbmRfZmxhZywgaW50IHRyYWlsZXIpCitzdGF0aWMgaW50
IGhhbmRsZV9hdGVuZChjaGFyICoqbGluZV90b2tlbnMsIGludCBhcmdjb3VudCwgaW50ICph
dGVuZF9mbGFnLCBpbnQgdHJhaWxlcikKICAgICB7CisgICAgaW50IGkgPSAxOworICAgIGlu
dCBhdGVuZF9mb3VuZF9mbGFnID0gMDsKKyAgICBjaGFyICprZXl3b3JkID0gbGluZV90b2tl
bnNbMF07CiAgICAgaW50IG9sZF9hdGVuZF9mbGFnID0gKmF0ZW5kX2ZsYWc7CiAgICAgKmF0
ZW5kX2ZsYWcgfD0gQVRFTkRfS0VZV09SRF9TRUVOOwogCi0gICAgaWYoc3RyY21wKGFyZ3Vt
ZW50LCAiYXRlbmQiKSA9PSAwICYmIGFyZ2NvdW50ID09IDIpCisgICAgLyogR28gdGhyb3Vn
aCBhbGwgdGhlIHRva2VucywgbG9va2luZyBmb3IgImF0ZW5kIiAqLworICAgIHdoaWxlKGkg
PCBhcmdjb3VudCkKKyAgICAgICAgeworCWlmKHN0cmNtcChsaW5lX3Rva2Vuc1tpXSwgImF0
ZW5kIikgPT0gMCkKKwkgICAgeworCSAgICBhdGVuZF9mb3VuZF9mbGFnID0gMTsKKwkgICAg
aWYoaSAhPSAxKQorCSAgICAgICAgeworCQl3YXJuaW5nKFdBUk5JTkdfU0VWRVJFLCAiS2V5
d29yZCBcIiVzXCIgZGVjbGFyZWQgKGF0ZW5kKSBpbiByZXNvdXJjZSBsaXN0Iiwga2V5d29y
ZCk7CisJCX0KKwkgICAgYnJlYWs7CisJICAgIH0KKwlpKys7CisJfQorCisgICAgaWYoYXRl
bmRfZm91bmRfZmxhZykKICAgICAJewogCS8qIEF0ZW5kIGhhcyBubyBtZWFuaW5nIGluIHRo
ZSB0cmFpbGVyIHNlY3Rpb24uICovCiAJaWYodHJhaWxlcikKQEAgLTE2NCw5ICsxODIsMjgg
QEAKICoqCiAqKiB0cmFwX25vYXJnKCkgb3IgdHJhcF9ub2xpc3QoKSBzaG91bGQgYmUgY2Fs
bGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uLgogKi8KLXN0YXRpYyBpbnQgdHJhcF9hdGVuZChj
b25zdCBjaGFyICprZXl3b3JkLCBjb25zdCBjaGFyICphcmd1bWVudCwgaW50IGFyZ2NvdW50
LCBpbnQgdHJhaWxlcikKK3N0YXRpYyBpbnQgdHJhcF9hdGVuZChjaGFyICoqbGluZV90b2tl
bnMsIGludCBhcmdjb3VudCwgaW50IHRyYWlsZXIpCiAgICAgewotICAgIGlmKHN0cmNtcChh
cmd1bWVudCwgImF0ZW5kIikgPT0gMCAmJiBhcmdjb3VudCA9PSAyKQorICAgIGludCBpID0g
MTsKKyAgICBpbnQgYXRlbmRfZm91bmRfZmxhZyA9IDA7CisgICAgY2hhciAqa2V5d29yZCA9
IGxpbmVfdG9rZW5zWzBdOworCisgICAgLyogR28gdGhyb3VnaCBhbGwgdGhlIHRva2Vucywg
bG9va2luZyBmb3IgImF0ZW5kIiAqLworICAgIHdoaWxlKGkgPCBhcmdjb3VudCkKKyAgICAg
ICAgeworCWlmKHN0cmNtcChsaW5lX3Rva2Vuc1tpXSwgImF0ZW5kIikgPT0gMCkKKwkgICAg
eworCSAgICBhdGVuZF9mb3VuZF9mbGFnID0gMTsKKwkgICAgaWYoaSAhPSAxKQorCSAgICAg
ICAgeworCQl3YXJuaW5nKFdBUk5JTkdfU0VWRVJFLCAiS2V5d29yZCBcIiVzXCIgZGVjbGFy
ZWQgKGF0ZW5kKSBpbiByZXNvdXJjZSBsaXN0Iiwga2V5d29yZCk7CisJCX0KKwkgICAgYnJl
YWs7CisJICAgIH0KKwlpKys7CisJfQorCisgICAgaWYoYXRlbmRfZm91bmRfZmxhZykKICAg
ICAJewogCWlmKHRyYWlsZXIpCiAJICAgIHdhcm5pbmcoV0FSTklOR19TRVZFUkUsICJLZXl3
b3JkIFwiJXNcIiBjYW4ndCB0YWtlIChhdGVuZCksIGVzcGVjaWFsbHkgbm90IGluIHRyYWls
ZXIiKTsKQEAgLTI4OCw3ICszMjUsNyBAQAogCQkvKiBBcyBwYXJ0IG9mICIlJVBhZ2VzOiAo
YXRlbmQpIDEiIGhhbmRsaW5nLCB3ZSBkb24ndCBsZXQKIAkJICAgaGFuZGxlX2F0ZW5kKCkg
Y29uc2lkZXIgbm8gbW9yZSB0aGFuIHR3byB0b2tlbnM6ICovCiAJCWlmKHRyYXBfbm9hcmco
dG9rZW5zWzBdLCB0b2tlbnNbMV0pCi0JCQl8fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0
b2tlbnNbMV0sIHRva2Vuc19jb3VudCA+IDIgPyAyIDogdG9rZW5zX2NvdW50LCAmYXRlbmRf
UGFnZXMsIHRyYWlsZXIpKQorCQkJfHwgaGFuZGxlX2F0ZW5kKHRva2VucywgdG9rZW5zX2Nv
dW50ID4gMiA/IDIgOiB0b2tlbnNfY291bnQsICZhdGVuZF9QYWdlcywgdHJhaWxlcikpCiAJ
CSAgICByZXR1cm4gLTE7CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgdHJhaWxlciBvciB0aGUg
Zmlyc3QgIiUlUGFnZXM6IgpAQCAtMzEzLDcgKzM1MCw3IEBACiAJCX0KIAkgICAgaWYoc3Ry
Y21wKHRva2Vuc1swXSwgIiUlUGFnZU9yZGVyOiIpID09IDApCiAJCXsKLQkJaWYodHJhcF9u
b2FyZyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2Vuc1swXSwg
dG9rZW5zWzFdLCB0b2tlbnNfY291bnQsICZhdGVuZF9QYWdlT3JkZXIsIHRyYWlsZXIpKQor
CQlpZih0cmFwX25vYXJnKHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQo
dG9rZW5zLCB0b2tlbnNfY291bnQsICZhdGVuZF9QYWdlT3JkZXIsIHRyYWlsZXIpKQogCQkg
ICAgcmV0dXJuIC0xOwogCiAJCWlmKHN0cmNtcCh0b2tlbnNbMV0sICJBc2NlbmQiKSA9PSAw
KQpAQCAtMzQ2LDcgKzM4Myw3IEBACiAJCX0KIAkgICAgaWYoc3RyY21wKHRva2Vuc1swXSwg
IiUlUHJvb2ZNb2RlOiIpID09IDApCiAJICAgIAl7Ci0JCWlmKHRyYXBfbm9hcmcodG9rZW5z
WzBdLCB0b2tlbnNbMV0pIHx8IHRyYXBfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRv
a2Vuc19jb3VudCwgdHJhaWxlcikpCisJCWlmKHRyYXBfbm9hcmcodG9rZW5zWzBdLCB0b2tl
bnNbMV0pIHx8IHRyYXBfYXRlbmQodG9rZW5zLCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQog
CQkgICAgcmV0dXJuIC0xOwogCiAJCS8qIElmIFByb29mTW9kZSBub3QgYWxyZWFkeSBzZXQg
Ki8KQEAgLTM3NCw3ICs0MTEsNyBAQAogCQl7CiAJCWNoYXIgKnB0cjsKIAotCQlpZih0cmFw
X25vYXJnKHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2Vuc1swXSwg
dG9rZW5zWzFdLCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vYXJnKHRv
a2Vuc1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50
LCB0cmFpbGVyKSkKIAkJICAgIHJldHVybiAtMTsKIAogCQlwdHIgPSAmbGluZVs2K3N0cnNw
bigmbGluZVs2XSwgIiBcdCIpXTsKQEAgLTM5Myw3ICs0MzAsNyBAQAogCQl7CiAJCWludCB4
OwogCi0JCWlmKHRyYXBfbm9hcmcodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IHRyYXBfYXRl
bmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3VudCwgdHJhaWxlcikpCisJCWlm
KHRyYXBfbm9hcmcodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IHRyYXBfYXRlbmQodG9rZW5z
LCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQogCQkgICAgcmV0dXJuIC0xOwogCiAJCWlmKCh4
ID0gYXRvaSh0b2tlbnNbMV0pKSA+PSAxKQpAQCAtNDEzLDcgKzQ1MCw3IEBACiAJY2FzZSAn
VCc6CiAJICAgIGlmKHN0cmNtcCh0b2tlbnNbMF0sICIlJVRpdGxlOiIpID09IDApCiAJCXsK
LQkJaWYodHJhcF9ub2FyZyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0
b2tlbnNbMF0sIHRva2Vuc1sxXSwgdG9rZW5zX2NvdW50LCB0cmFpbGVyKSkKKwkJaWYodHJh
cF9ub2FyZyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0b2tlbnMsIHRv
a2Vuc19jb3VudCwgdHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYoICEgZm91
bmRfVGl0bGUgKQpAQCAtNDMxLDcgKzQ2OCw3IEBACiAJY2FzZSAnQyc6CiAJICAgIGlmKHN0
cmNtcCh0b2tlbnNbMF0sICIlJUNyZWF0b3I6IikgPT0gMCkKIAkJewotCQlpZih0cmFwX25v
YXJnKHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2Vuc1swXSwgdG9r
ZW5zWzFdLCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vYXJnKHRva2Vu
c1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCB0
cmFpbGVyKSkKIAkJICAgIHJldHVybiAtMTsKIAogCQlpZiggISBmb3VuZF9DcmVhdG9yICkK
QEAgLTQ0Nyw3ICs0ODQsNyBAQAogCQl9CiAJICAgIGlmKHN0cmNtcCh0b2tlbnNbMF0sICIl
IlBQUl9EU0NfUFJFRklYIkF1dGhDb2RlOiIpID09IDApCiAJCXsKLQkJaWYodHJhcF9ub2Fy
Zyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0b2tlbnNbMF0sIHRva2Vu
c1sxXSwgdG9rZW5zX2NvdW50LCB0cmFpbGVyKSkKKwkJaWYodHJhcF9ub2FyZyh0b2tlbnNb
MF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0b2tlbnMsIHRva2Vuc19jb3VudCwgdHJh
aWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
QXV0aENvZGUgbGluZSwgdGhlbiBzYXZlIHRoZSBjb2RlLiAqLwpAQCAtNDYyLDcgKzQ5OSw3
IEBACiAJCXsKIAkJaW50IHg7CiAKLQkJaWYodHJhcF9ub2xpc3QodG9rZW5zWzBdLCB0b2tl
bnNbMV0pIHx8IHRyYXBfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3Vu
dCwgdHJhaWxlcikpCisJCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8
fCB0cmFwX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCB0cmFpbGVyKSkKIAkJICAgIHJl
dHVybiAtMTsKIAogCQlmb3IoeD0xOyB0b2tlbnNbeF0gIT0gKGNoYXIqKU5VTEw7IHgrKykK
QEAgLTQ4Nyw3ICs1MjQsNyBAQAogCQl7CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9saXN0
KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2Vuc1swXSwgdG9rZW5z
WzFdLCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNb
MF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0b2tlbnMsIHRva2Vuc19jb3VudCwgdHJh
aWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJZm9yKHg9MTsgdG9rZW5zW3hdICE9IChj
aGFyKilOVUxMOyB4KyspCkBAIC00OTksNyArNTM2LDcgQEAKIAkJewogCQljaGFyICpwdHI7
CiAKLQkJaWYodHJhcF9ub2FyZyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVu
ZCh0b2tlbnNbMF0sIHRva2Vuc1sxXSwgdG9rZW5zX2NvdW50LCB0cmFpbGVyKSkKKwkJaWYo
dHJhcF9ub2FyZyh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgdHJhcF9hdGVuZCh0b2tlbnMs
IHRva2Vuc19jb3VudCwgdHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJcHRyID0g
JmxpbmVbMTArc3Ryc3BuKCZsaW5lWzEwXSwiIFx0IildOwpAQCAtNTE2LDcgKzU1Myw3IEBA
CiAJY2FzZSAnRCc6CiAJICAgIGlmKHN0cmNtcCh0b2tlbnNbMF0sICIlJURvY3VtZW50TWVk
aWE6IikgPT0gMCkKIAkJewotCQlpZih0cmFwX25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sx
XSkgfHwgdHJhcF9hdGVuZCh0b2tlbnNbMF0sIHRva2Vuc1sxXSwgdG9rZW5zX2NvdW50LCB0
cmFpbGVyKSkKKwkJaWYodHJhcF9ub2xpc3QodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IHRy
YXBfYXRlbmQodG9rZW5zLCB0b2tlbnNfY291bnQsIHRyYWlsZXIpKQogCQkgICAgcmV0dXJu
IC0xOwogCiAJCW1lZGlhKE1SRUZfRE9DLCAxKTsKQEAgLTUyNiw3ICs1NjMsNyBAQAogCQl7
CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8
fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3VudCwgJmF0
ZW5kX0RvY3VtZW50Rm9udHMsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNb
MF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCAm
YXRlbmRfRG9jdW1lbnRGb250cywgdHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJ
LyoKQEAgLTU0Myw3ICs1ODAsNyBAQAogCQl7CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9s
aXN0KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0
b2tlbnNbMV0sIHRva2Vuc19jb3VudCwgJmF0ZW5kX0RvY3VtZW50UHJvY1NldHMsIHRyYWls
ZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxl
X2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCAmYXRlbmRfRG9jdW1lbnRQcm9jU2V0cywg
dHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVyc2VkZWQo
dHJhaWxlciwgJmZvdW5kX0RvY3VtZW50UHJvY1NldHMsIFJFUkVGX1VOQ0xFQVIsICJwcm9j
c2V0IikpCkBAIC01NTUsNyArNTkyLDcgQEAKIAkJewogCQlpbnQgeDsKIAotCQlpZih0cmFw
X25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2Vuc1sw
XSwgdG9rZW5zWzFdLCB0b2tlbnNfY291bnQsICZhdGVuZF9Eb2N1bWVudE5lZWRlZFJlc291
cmNlcywgdHJhaWxlcikpCisJCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFd
KSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zLCB0b2tlbnNfY291bnQsICZhdGVuZF9Eb2N1bWVu
dE5lZWRlZFJlc291cmNlcywgdHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYo
aGFuZGxlX3N1cGVyc2VkZWQodHJhaWxlciwgJmZvdW5kX0RvY3VtZW50TmVlZGVkUmVzb3Vy
Y2VzLCBSRVJFRl9ORUVERUQsIChjaGFyKilOVUxMKSkKQEAgLTU2Nyw3ICs2MDQsNyBAQAog
CQl7CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFd
KSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3VudCwg
JmF0ZW5kX0RvY3VtZW50TmVlZGVkRmlsZXMsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vbGlz
dCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2VucywgdG9rZW5z
X2NvdW50LCAmYXRlbmRfRG9jdW1lbnROZWVkZWRGaWxlcywgdHJhaWxlcikpCiAJCSAgICBy
ZXR1cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVyc2VkZWQodHJhaWxlciwgJmZvdW5kX0Rv
Y3VtZW50TmVlZGVkRmlsZXMsIFJFUkVGX05FRURFRCwgImZpbGUiKSkKQEAgLTU3OSw3ICs2
MTYsNyBAQAogCQl7CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwg
dG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vu
c19jb3VudCwgJmF0ZW5kX0RvY3VtZW50TmVlZGVkRm9udHMsIHRyYWlsZXIpKQorCQlpZih0
cmFwX25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2Vu
cywgdG9rZW5zX2NvdW50LCAmYXRlbmRfRG9jdW1lbnROZWVkZWRGb250cywgdHJhaWxlcikp
CiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVyc2VkZWQodHJhaWxlciwg
JmZvdW5kX0RvY3VtZW50TmVlZGVkRm9udHMsIFJFUkVGX05FRURFRCwgImZvbnQiKSkKQEAg
LTU5MSw3ICs2MjgsNyBAQAogCQl7CiAJCWludCB4OwogCi0JCWlmKHRyYXBfbm9saXN0KHRv
a2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zWzBdLCB0b2tlbnNb
MV0sIHRva2Vuc19jb3VudCwgJmF0ZW5kX0RvY3VtZW50TmVlZGVkUHJvY1NldHMsIHRyYWls
ZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxl
X2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCAmYXRlbmRfRG9jdW1lbnROZWVkZWRQcm9j
U2V0cywgdHJhaWxlcikpCiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVy
c2VkZWQodHJhaWxlciwgJmZvdW5kX0RvY3VtZW50TmVlZGVkUHJvY1NldHMsIFJFUkVGX05F
RURFRCwgInByb2NzZXQiKSkKQEAgLTYwMyw3ICs2NDAsNyBAQAogCQl7CiAJCWludCB4Owog
Ci0JCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRl
bmQodG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3VudCwgJmF0ZW5kX0RvY3VtZW50
U3VwcGxpZWRSZXNvdXJjZXMsIHRyYWlsZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNb
MF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCAm
YXRlbmRfRG9jdW1lbnRTdXBwbGllZFJlc291cmNlcywgdHJhaWxlcikpCiAJCSAgICByZXR1
cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVyc2VkZWQodHJhaWxlciwgJmZvdW5kX0RvY3Vt
ZW50U3VwcGxpZWRSZXNvdXJjZXMsIFJFUkVGX1NVUFBMSUVELCAoY2hhciopTlVMTCkpCkBA
IC02MTUsNyArNjUyLDcgQEAKIAkJewogCQlpbnQgeDsKIAotCQlpZih0cmFwX25vbGlzdCh0
b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxlX2F0ZW5kKHRva2Vuc1swXSwgdG9rZW5z
WzFdLCB0b2tlbnNfY291bnQsICZhdGVuZF9Eb2N1bWVudFN1cHBsaWVkRmlsZXMsIHRyYWls
ZXIpKQorCQlpZih0cmFwX25vbGlzdCh0b2tlbnNbMF0sIHRva2Vuc1sxXSkgfHwgaGFuZGxl
X2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCAmYXRlbmRfRG9jdW1lbnRTdXBwbGllZEZp
bGVzLCB0cmFpbGVyKSkKIAkJICAgIHJldHVybiAtMTsKIAogCQlpZihoYW5kbGVfc3VwZXJz
ZWRlZCh0cmFpbGVyLCAmZm91bmRfRG9jdW1lbnRTdXBwbGllZEZpbGVzLCBSRVJFRl9TVVBQ
TElFRCwgImZpbGUiKSkKQEAgLTYyNyw3ICs2NjQsNyBAQAogCQl7CiAJCWludCB4OwogCi0J
CWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQo
dG9rZW5zWzBdLCB0b2tlbnNbMV0sIHRva2Vuc19jb3VudCwgJmF0ZW5kX0RvY3VtZW50U3Vw
cGxpZWRGb250cywgdHJhaWxlcikpCisJCWlmKHRyYXBfbm9saXN0KHRva2Vuc1swXSwgdG9r
ZW5zWzFdKSB8fCBoYW5kbGVfYXRlbmQodG9rZW5zLCB0b2tlbnNfY291bnQsICZhdGVuZF9E
b2N1bWVudFN1cHBsaWVkRm9udHMsIHRyYWlsZXIpKQogCQkgICAgcmV0dXJuIC0xOwogCiAJ
CWlmKGhhbmRsZV9zdXBlcnNlZGVkKHRyYWlsZXIsICZmb3VuZF9Eb2N1bWVudFN1cHBsaWVk
Rm9udHMsIFJFUkVGX1NVUFBMSUVELCAiZm9udCIpKQpAQCAtNjM5LDcgKzY3Niw3IEBACiAJ
CXsKIAkJaW50IHg7CiAKLQkJaWYodHJhcF9ub2xpc3QodG9rZW5zWzBdLCB0b2tlbnNbMV0p
IHx8IGhhbmRsZV9hdGVuZCh0b2tlbnNbMF0sIHRva2Vuc1sxXSwgdG9rZW5zX2NvdW50LCAm
YXRlbmRfRG9jdW1lbnRTdXBwbGllZFByb2NTZXRzLCB0cmFpbGVyKSkKKwkJaWYodHJhcF9u
b2xpc3QodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IGhhbmRsZV9hdGVuZCh0b2tlbnMsIHRv
a2Vuc19jb3VudCwgJmF0ZW5kX0RvY3VtZW50U3VwcGxpZWRQcm9jU2V0cywgdHJhaWxlcikp
CiAJCSAgICByZXR1cm4gLTE7CiAKIAkJaWYoaGFuZGxlX3N1cGVyc2VkZWQodHJhaWxlciwg
JmZvdW5kX0RvY3VtZW50U3VwcGxpZWRQcm9jU2V0cywgUkVSRUZfU1VQUExJRUQsICJwcm9j
c2V0IikpCkBAIC02NDksNyArNjg2LDcgQEAKIAkJfQogCSAgICBpZihzdHJjbXAodG9rZW5z
WzBdLCAiJSVEb2N1bWVudERhdGE6IikgPT0gMCkKIAkgICAgCXsKLQkJaWYodHJhcF9ub2xp
c3QodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IHRyYXBfYXRlbmQodG9rZW5zWzBdLCB0b2tl
bnNbMV0sIHRva2Vuc19jb3VudCwgdHJhaWxlcikpCisJCWlmKHRyYXBfbm9saXN0KHRva2Vu
c1swXSwgdG9rZW5zWzFdKSB8fCB0cmFwX2F0ZW5kKHRva2VucywgdG9rZW5zX2NvdW50LCB0
cmFpbGVyKSkKIAkJICAgIHJldHVybiAtMTsKIAogCQlpZiggISBmb3VuZF9Eb2N1bWVudERh
dGEgKQpAQCAtNjgxLDcgKzcxOCw3IEBACiAJY2FzZSAnTyc6CiAJICAgIGlmKHN0cmNtcCh0
b2tlbnNbMF0sICIlJU9yaWVudGF0aW9uOiIpID09IDApCiAJICAgIAl7Ci0JCWlmKHRyYXBf
bm9hcmcodG9rZW5zWzBdLCB0b2tlbnNbMV0pIHx8IGhhbmRsZV9hdGVuZCh0b2tlbnNbMF0s
IHRva2Vuc1sxXSwgdG9rZW5zX2NvdW50LCAmYXRlbmRfT3JpZW50YXRpb24sIHRyYWlsZXIp
KQorCQlpZih0cmFwX25vYXJnKHRva2Vuc1swXSwgdG9rZW5zWzFdKSB8fCBoYW5kbGVfYXRl
bmQodG9rZW5zLCB0b2tlbnNfY291bnQsICZhdGVuZF9PcmllbnRhdGlvbiwgdHJhaWxlcikp
CiAJCSAgICByZXR1cm4gLTE7CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgT3JpZW50
YXRpb24gY29tbWVudCBvciB0aGlzIGlzIHRoZSB0cmFpbGVyLCAqLwo=
- --------------9EFBDBBC64EB383CD33D4A37--