Re[2]: [XviD-devel] Other clip with Bframes, quality vs size

Christoph Lampert xvid-devel@xvid.org
Mon, 19 Aug 2002 18:09:46 +0200 (CEST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---595374472-2110913467-1029773386=:22031
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Mon, 19 Aug 2002, Radoslaw 'sysKin' Czyz wrote:
> 
> Do you have a working PSNR-computing thingy for B-frames? Do you think
> you could send it to me?

Hi,

it's a really ugly version, full of unnecessary changes and not for public
use. But it works, at least for me. There are two new options 
mbf = max_bframes, bqr = bquant_ratio

Usage: 
./xvid_b  X-dim Y-dim  quality  quant/bitrate  fps maxtotalframes mbf bqr

as usual you must use X-dim=0, Y-dim=0 for PGM input. 

I always wanted to clean this up and commit to examples-dir, but I always
was too busy doing less important stuff.

Christoph 

-- 
Christoph H. Lampert chl@math,uni-bonn,de | Diese Signature wurde maschi-     
Beringstr. 6, Raum 14 Tel. (0228) 73-2948 | nell erstellt und bedarf
Sprechstunden: keine, aber meistens da    | keiner Unterschrift. AZ 27B-6 

---595374472-2110913467-1029773386=:22031
Content-Type: TEXT/plain; name="xvid_b.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0208191809460.22031@lieb.math.uni-bonn.de>
Content-Description: 
Content-Disposition: attachment; filename="xvid_b.c"

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogICAgICBY
VklEIE1QRUctNCBWSURFTyBDT0RFQyAtIEV4YW1wbGUgZm9yIGVuY29kaW5n
IGFuZCBkZWNvZGluZw0KICoNCiAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkNCiAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAqICAg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAqICAgICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiAgICAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLA0KICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogICAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlDQogKiAgICAgIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKg0KICogICAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQ0KICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICog
ICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRn
ZSwgTUEgMDIxMzksIFVTQS4NCiAqDQogKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICoJ
CSAgICAgICAgICAgICAgICAgICAgDQogKiAgUFNOUiBhbmQgU3BlZWQgdGVz
dCByb3V0aW5lIGZvciBYdmlEIHVzaW5nIHRoZSBYdmlELUFQSSAgICAgICAg
ICAgICAgICAgICAgICANCiAqICAoQykgQ2hyaXN0b3BoIExhbXBlcnQsIDIw
MDIvMDQvMTMNCiAqCQkgICAgICAgICAgICAgICAgICAgIA0KICogIEEgc2Vx
dWVuY2Ugb2YgWVVWIHBpY3MgaW4gUEdNIGZpbGUgZm9ybWF0IGlzIGVuY29k
ZWQgYW5kIGRlY29kZWQNCiAqICBUaGUgc3BlZWQgaXMgbWVhc3VyZWQgYW5k
IFBTTlIgb2YgZGVjb2RlZCBwaWN0dXJlIGlzIGNhbGN1bGF0ZWQuIA0KICoJ
CSAgICAgICAgICAgICAgICAgICANCiAqICBUaGUgcHJvZ3JhbSBpcyBwbGFp
biBDIGFuZCBuZWVkcyBubyBsaWJyYXJpZXMgZXhjZXB0IGZvciBsaWJ4dmlk
Y29yZSwgDQogKiAgYW5kIG1hdGhzLWxpYiAsc28gd2l0aCBVTipYIHlvdSBz
aW1wbHkgY29tcGlsZSBieQ0KICogDQogKiAgIGdjYyB4dmlkX3N0YXQuYyAt
bHh2aWRjb3JlIC1sbSAtbyB4dmlkX3N0YXQNCiAqDQogKiAgUnVuIHdpdGhv
dXQgb3Igd2l0aCBpbGxlZ2FsIHBhcmFtZXRlcnMsIHRoZW4gUEdNIGlucHV0
IGlucHV0IGlzIHJlYWQgDQogKiAgZnJvbSBzdGRpbi4NCiAqIA0KICogIFBh
cmFtZXRlcnMgYXJlOiB4dmlkX3N0YXQgWERJTSBZRElNIFFVQUxJVFkgQklU
UkFURS9RVUFOVElaRVIgRlJBTUVSQVRFIA0KICogDQogKiAgaWYgWERJTSBv
ciBZRElNIGFyZSBpbGxlZ2FsIChlLmcuIDApLCB0aGV5IGFyZSBpZ25vcmVk
IGFuZCBpbnB1dCBpcyANCiAqICBjb25zaWRlcmVkIHRvIGJlIFBHTS4gT3Ro
ZXJ3aXNlIChYIGFuZCBZIGJvdGggZ3JlYXRlciB0aGFuIDApIHJhdyBZVVYg
DQogKiAgaXMgZXhwZWN0ZWQsIGFzIGUuZy4gdGhlIHN0YW5kYXJkIE1QRUcg
dGVzdC1maWxlcywgbGlrZSAiZm9yZW1hbiINCiAqIA0KICogIDAgPD0gUVVB
TElUWSA8PSA2ICAoZGVmYXVsdCA1KQ0KICoNCiAqICBCSVRSQVRFIGlzIGlu
IGticHMgKGRlZmF1bHQgOTAwKSwgDQogKiAgICAgIGlmIEJJVFJBVEU8MzIs
IHRoZW4gdmFsdWUgaXMgdGFrZW4gaXMgZml4ZWQgUVVBTlRJWkVSDQogKiAN
CiAqICBGUkFNRVJBVEUgaXMgYSBmbG9hdCAod2l0aCBvciB3aXRob3V0IGRl
Y2ltYWwgZG90KSwgZGVmYXVsdCBpcyAyNS4wMA0KICoNCiAqICBpbnB1dC9v
dXRwdXQgYW5kIG00di1vdXRwdXQgaXMgc2F2ZWQsIGlmIGNvcnJlc3BvbmRp
bmcgZmxhZ3MgYXJlIHNldCANCiAqIA0KICogIFBHTSBpbnB1dCBtdXN0IGlu
IGEgdmVyeSBzcGVjaWZpYyBmb3JtYXQsIHNlZSByZWFkX3BnbWhlYWRlciAN
CiAqICBpdCBjYW4gYmUgZ2VuZXJhdGVkIGUuZy4gZnJvbSBNUEVHMiBieSAg
ICBtcGVnMmRlYyAtbyBwZ21waXBlICAgDQogKgkNCiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCiAqCQkgICAgICAgICAgICAgICAgICAgIA0KICogIEZvciBFWEFNUExF
UyBob3cgdG8gdXNlIHRoaXMsIHNlZSB0aGUgc2VwZXJhdGUgZmlsZSB4dmlk
X3N0YXQuZXhhbXBsZXMNCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLw0KDQojZGVmaW5lIEJGUkFNRVMNCg0KI2luY2x1ZGUgPHN0ZGlvLmg+
DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8bWF0aC5oPgkJLy8g
bmVlZGVkIGZvciBsb2cxMA0KI2luY2x1ZGUgPHN5cy90aW1lLmg+CQkvLyBv
bmx5IG5lZWRlZCBmb3IgZ2V0dGltZW9mZGF5DQoNCiNpbmNsdWRlICJ4dmlk
LmgiCQkvKiBjb21lcyB3aXRoIFh2aUQgKi8NCg0KaW50IG1vdGlvbl9wcmVz
ZXRzWzddID0gew0KCTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRIDANCglQTVZf
RUFSTFlTVE9QMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUSAxDQoJUE1WX0VBUkxZU1RPUDE2LAkJCQkJ
CS8vIFEgMg0KCVBNVl9FQVJMWVNUT1AxNiB8IFBNVl9IQUxGUEVMUkVGSU5F
MTYsCQkJCS8vIFEgMw0KCVBNVl9FQVJMWVNUT1AxNiB8IFBNVl9IQUxGUEVM
UkVGSU5FMTYsCQkJCS8vIFEgNA0KCVBNVl9FQVJMWVNUT1AxNiB8IFBNVl9I
QUxGUEVMUkVGSU5FMTYgfCBQTVZfRUFSTFlTVE9QOAkgCS8vIFEgNQ0KIAkJ
CXwgUE1WX0hBTEZQRUxSRUZJTkU4LCAJDQoJUE1WX0VBUkxZU1RPUDE2IHwg
UE1WX0hBTEZQRUxSRUZJTkUxNiB8IFBNVl9FWFRTRUFSQ0gxNiAJLy8gUSA2
DQoJCQl8IFBNVl9VU0VTUVVBUkVTOCB8IFBNVl9VU0VTUVVBUkVTMTYgfCBQ
TVZfRUFSTFlTVE9QOCB8IFBNVl9IQUxGUEVMUkVGSU5FOA0KCX07DQoNCmlu
dCBnZW5lcmFsX3ByZXNldHNbN10gPSB7DQoJWFZJRF9IMjYzUVVBTlQsCS8q
IG9yIHVzZSBYVklEX01QRUdRVUFOVCAqLwkJLy8gUSAwDQoJWFZJRF9NUEVH
UVVBTlQsIAkJCQkJLy8gUSAxDQoJWFZJRF9IMjYzUVVBTlQgfCBYVklEX0hB
TEZQRUwsICAJCQkgICAgICAgLy8gUSAyDQoJWFZJRF9IMjYzUVVBTlQgfCBY
VklEX0hBTEZQRUwsCQkJCS8vIFEgMw0KCVhWSURfSDI2M1FVQU5UIHwgWFZJ
RF9IQUxGUEVMIHwgWFZJRF9JTlRFUjRWLAkJLy8gUSA0DQoJWFZJRF9IMjYz
UVVBTlQgfCBYVklEX0hBTEZQRUwgfCBYVklEX0lOVEVSNFYsCQkvLyBRIDUN
CglYVklEX0gyNjNRVUFOVCB8IFhWSURfSEFMRlBFTCB8IFhWSURfSU5URVI0
ViB9OwkJLy8gUSA2DQoJCQ0KDQovKiBteSBkZWZhdWx0IHZhbHVlcyBmb3Ig
ZW5jb2RpbmcgKi8NCg0KI2RlZmluZSBBQlNfTUFYRlJBTUVOUiA5OTk5ICAg
ICAgICAgICAgICAgLy8gbWF4IG51bWJlciBvZiBmcmFtZXMNCg0KaW50IEFS
R19CSVRSQVRFPTgwMDsNCmludCBBUkdfUVVBTlRJPTA7DQoNCmludCBBUkdf
UVVBTElUWSA9NjsNCmludCBBUkdfTUlOUVVBTlQ9MTsNCmludCBBUkdfTUFY
UVVBTlQ9MzE7DQpmbG9hdCBBUkdfRlJBTUVSQVRFPTI1LjAwOw0KDQppbnQg
QVJHX01BWF9CRlJBTUVTPTE7DQppbnQgTlVNQlVGRkVSUzsNCmludCBBUkdf
QlFVQU5UX1JBVElPPTIwMDsNCg0KaW50IEFSR19NQVhGUkFNRU5SPUFCU19N
QVhGUkFNRU5SOw0KDQoNCiNkZWZpbmUgTUFYKEEsQikgKCAoKEEpPihCKSkg
PyAoQSkgOiAoQikgKQ0KI2RlZmluZSBTTUFMTF9FUFMgMWUtMTANCg0KDQov
KiB0aGVzZSBhcmUgZ2xvYmFsIHZhcmlhYmxlcy4gTm90IHZlcnkgZWxlZ2Fu
dCwgYnV0IGVhc3ksIGFuZCB0aGlzIGlzIGFuIGVhc3kgcHJvZ3JhbSAqLw0K
CQ0KaW50IFhESU09MDsNCmludCBZRElNPTA7CS8vIHdpbGwgYmUgc2V0IHdo
ZW4gcmVhZGluZyBmaXJzdCBpbWFnZQ0KaW50IGksZmlsZW5yID0gMDsNCg0K
aW50IHNhdmVfbTR2X2ZsYWcgPSAwOwkJLy8gc2F2ZSBNUEVHNC1ieXRlc3Ry
ZWFtPw0KaW50IHNhdmVfZGVjX2ZsYWcgPSAwOwkJLy8gc2F2ZSBkZWNvbXBy
ZXNzZWQgYnl0ZXN0cmVhbT8NCmludCBzYXZlX3JlZl9mbGFnID0gMDsJCS8v
IA0KDQppbnQgcGdtZmxhZyA9IDA7CQkvLyBhIGZsYWcsIGlmIGlucHV0IGlz
IGluIFBHTSBmb3JtYXQsIG92ZXJ3cml0dGVuIGluIGluaXQtcGhhc2UNCmNo
YXIgZmlsZXBhdGhbMjU2XSA9ICIuLyI7CS8vIHRoZSBwYXRoIHdoZXJlIHRv
IHNhdmUgb3V0cHV0IA0KDQp2b2lkICplbmNfaGFuZGxlID0gTlVMTDsJCS8v
IGludGVybmFsIHN0cnVjdHVyZXMgKGhhbmRsZXMpIGZvciBlbmNvZGluZw0K
dm9pZCAqZGVjX2hhbmRsZSA9IE5VTEw7CQkvLyBhbmQgZGVjb2RpbmcNCg0K
DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoJICAgICAgICAgICAg
ICAgInN0YXRpc3RpY2FsIiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAg
ICAgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogIHRoZXNl
IGFyZSBub3QgbmVlZGVkIGZvciBlbmNvZGluZyBvciBkZWNvZGluZywgYnV0
IGZvciBtZWFzdXJpbmcgKi8NCi8qICB0aW1lIGFuZCBxdWFsaXR5LCB0aGVy
ZSBpbiBub3RoaW5nIHNwZWNpZmljIHRvIFh2aUQgaW4gdGhlc2UgICAgICov
DQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCg0KZG91YmxlIG1zZWNvbmQoKSAgCQ0KLyogcmV0dXJu
IHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcyghKSAgKi8NCnsJDQoJc3Ry
dWN0IHRpbWV2YWwgIHR2Ow0KCWdldHRpbWVvZmRheSgmdHYsIDApOw0KCXJl
dHVybiB0di50dl9zZWMgKyB0di50dl91c2VjICogMS4wZS02Ow0KfQ0KDQoN
Cg0KZG91YmxlIGFic2Rpc3RxKGludCB4LGludCB5LCB1bnNpZ25lZCBjaGFy
KiBidWYxLCBpbnQgc3RyaWRlMSwgdW5zaWduZWQgY2hhciogYnVmMiwgaW50
IHN0cmlkZTIpDQovKiByZXR1cm5zIHRoZSBzdW0gb2Ygc3F1YXJlZCBkaXN0
YW5jZXMgKFNTRCkgYmV0d2VlbiB0d28gaW1hZ2VzIG9mIGRpbWVuc2lvbnMg
eCB0aW1lcyB5ICovDQp7DQoJZG91YmxlIGRpc3Q9MC47DQoJaW50IGksaix2
YWw7DQoNCglmb3IgKGk9MDtpPHk7aSsrKQ0KCXsJDQoJCXZhbD0wOw0KCQlm
b3IgKGo9MDtqPHg7aisrKQ0KCQkJdmFsKz0gKChpbnQpYnVmMVtqXS0oaW50
KWJ1ZjJbal0pKigoaW50KWJ1ZjFbal0tKGludClidWYyW2pdKTsNCgkNCgkJ
ZGlzdCArPSAoZG91YmxlKXZhbDsNCgkJYnVmMSArPSBzdHJpZGUxOw0KCQli
dWYyICs9IHN0cmlkZTI7DQoJfQ0KICAgcmV0dXJuIGRpc3QvKHgqeSk7DQp9
DQoNCg0KZG91YmxlIFBTTlIoaW50IHgsaW50IHksIHVuc2lnbmVkIGNoYXIq
IGJ1ZjEsIGludCBzdHJpZGUxLCB1bnNpZ25lZCBjaGFyKiBidWYyLCBpbnQg
c3RyaWRlMiApDQovKiByZXR1cm4gdGhlIFBTTlIgYmV0d2VlbiB0byBpbWFn
ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovDQovKiB0aGlzIGlzIGEgbG9nYXJpdGhtaWMgbWVhc3VyZSBmb3Ig
InF1YWxpdHkiIGZyb20gdGhlIHdvcmxkIG9mIHNpZ25hbCBwcm9jZXNzaW5n
ICovDQovKiBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzLCBzaW1wbHkg
YWNjZXB0IHRoYXQgaGlnaGVyIHZhbHVlcyBhcmUgYmV0dGVyICAgICAgICov
DQp7DQogICByZXR1cm4gMTAqKGxvZzEwKDI1NSoyNTUpLWxvZzEwKCBhYnNk
aXN0cSh4LCB5LCBidWYxLCBzdHJpZGUxLCBidWYyLCBzdHJpZGUyKSApKTsN
Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoJICAgICAg
ICAgICAgICBpbnB1dCBhbmQgb3V0cHV0IGZ1bmN0aW9ucyAgICAgICAgICAg
ICAgICAgICAgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyog
dGhlIGFyZSBzbWFsbCBhbmQgc2ltcGxlIHJvdXRpbmVzIHRvIHJlYWQgYW5k
IHdyaXRlIFBHTSBhbmQgWVVWICAgKi8NCi8qIGltYWdlLiBJdCdzIGp1c3Qg
Zm9yIGNvbnZlbmllbmNlLCBhZ2FpbiBub3RoaW5nIHNwZWNpZmljIHRvIFh2
aUQgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8NCg0KaW50IHJlYWRfcGdtaGVhZGVyKEZJTEUq
IGhhbmRsZSkNCnsJDQoJaW50IGJ5dGVzLHhzaXplLHlzaXplLGRlcHRoOw0K
CWNoYXIgZHVtbXlbMl07DQoJDQoJYnl0ZXMgPSBmcmVhZChkdW1teSwxLDIs
aGFuZGxlKTsNCg0KCWlmICggKGJ5dGVzIDwgMikgfHwgKGR1bW15WzBdICE9
ICdQJykgfHwgKGR1bW15WzFdICE9ICc1JyApKQ0KICAgCQlyZXR1cm4gMTsN
Cglmc2NhbmYoaGFuZGxlLCIlZCAlZCAlZCIsJnhzaXplLCZ5c2l6ZSwmZGVw
dGgpOyANCglpZiAoICh4c2l6ZSA+IDE0NDApIHx8ICh5c2l6ZSA+IDI4ODAg
KSB8fCAoZGVwdGggIT0gMjU1KSApDQoJew0KCQlmcHJpbnRmKHN0ZGVyciwi
JWQgJWQgJWRcbiIseHNpemUseXNpemUsZGVwdGgpOw0KCSAgIAlyZXR1cm4g
MjsNCgl9DQoJaWYgKCAoWERJTT09MCkgfHwgKFlESU09PTApICkNCgl7CVhE
SU09eHNpemU7DQoJCVlESU09eXNpemU7DQoJfQ0KDQoJcmV0dXJuIDA7DQp9
DQoNCmludCByZWFkX3BnbWRhdGEoRklMRSogaGFuZGxlLCB1bnNpZ25lZCBj
aGFyICppbWFnZSkNCnsJDQoJaW50IGksc3RhdHVzOw0KCWNoYXIgZHVtbXk7
DQogICANCgl1bnNpZ25lZCBjaGFyKiBidWZmMV9wdHIyID0gaW1hZ2UgKyBY
RElNKllESU07DQoJdW5zaWduZWQgY2hhciogYnVmZjFfcHRyMyA9IGltYWdl
ICsgWERJTSpZRElNICsgWERJTS8yKllESU0vMjsgDQoNCglmcmVhZChpbWFn
ZSxYRElNKllESU0sMSxzdGRpbik7CS8vIHJlYWQgWSBjb21wb25lbnQgb2Yg
cGljdHVyZQ0KIA0KICAgCWZvciAoaT0wO2k8WURJTS8yO2krKykNCgl7DQoJ
CWZyZWFkKGJ1ZmYxX3B0cjIsWERJTS8yLDEsc3RkaW4pOyAgICAgICAgLy8g
cmVhZCBVDQoJCWJ1ZmYxX3B0cjIgKz0gWERJTS8yOw0KCQlmcmVhZChidWZm
MV9wdHIzLFhESU0vMiwxLHN0ZGluKTsgICAgICAJIC8vIHJlYWQgVg0KCQli
dWZmMV9wdHIzICs9IFhESU0vMjsNCgl9DQoJZnJlYWQoJmR1bW15LDEsMSxo
YW5kbGUpOwkvLyAgSSBkb24ndCBrbm93IHdoeSwgYnV0IHRoaXMgc2VlbXMg
bmVlZGVkDQoJcmV0dXJuIDA7DQp9DQoNCmludCByZWFkX3l1dmRhdGEoRklM
RSogaGFuZGxlLCB1bnNpZ25lZCBjaGFyICppbWFnZSkNCnsJaW50IGk7DQoJ
Y2hhciBkdW1teTsNCiAgIA0KCXVuc2lnbmVkIGNoYXIqIGJ1ZmYxX3B0cjIg
PSBpbWFnZSArIFhESU0qWURJTTsNCgl1bnNpZ25lZCBjaGFyKiBidWZmMV9w
dHIzID0gaW1hZ2UgKyBYRElNKllESU0gKyBYRElNLzIqWURJTS8yOyANCg0K
CWlmIChmcmVhZChpbWFnZSxYRElNLFlESU0qMy8yLHN0ZGluKSAhPSBZRElN
KjMvMikgDQoJCXJldHVybiAxOw0KCWVsc2UJDQoJCXJldHVybiAwOw0KfQ0K
DQppbnQgd3JpdGVfcGdtKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFy
ICppbWFnZSkNCnsNCglGSUxFICpmaWxlaGFuZGxlOw0KCWZpbGVoYW5kbGU9
Zm9wZW4oZmlsZW5hbWUsIndiIik7DQoJaWYgKGZpbGVoYW5kbGUpDQogICAg
ICAgIHsNCgkJZnByaW50ZihmaWxlaGFuZGxlLCJQNVxuXG4iKTsJCS8vIA0K
CQlmcHJpbnRmKGZpbGVoYW5kbGUsIiVkICVkIDI1NVxuIixYRElNLFlESU0q
My8yKTsNCgkJZndyaXRlKGltYWdlLFhESU0sWURJTSozLzIsZmlsZWhhbmRs
ZSk7DQoJCWZjbG9zZShmaWxlaGFuZGxlKTsNCgkJcmV0dXJuIDA7DQoJfQ0K
CWVsc2UNCgkJcmV0dXJuIDE7DQp9DQoNCg0KDQovKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLw0KLyogUm91dGluZXMgZm9yIGVuY29kaW5nOiBpbml0IGVu
Y29kZXIsIGZyYW1lIHN0ZXAsIHJlbGVhc2UgZW5jb2RlciAgKi8NCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovDQoNCiNkZWZpbmUgRlJBTUVSQVRFX0lO
Q1IgMTAwMQ0KDQoNCmludCBlbmNfaW5pdChpbnQgdXNlX2Fzc2VtYmxlcikN
CnsJLyogaW5pdGlhbGl6ZSBlbmNvZGVyIGZvciBmaXJzdCB1c2UsIHBhc3Mg
YWxsIG5lZWRlZCBwYXJhbWV0ZXJzIHRvIHRoZSBjb2RlYyAqLw0KCWludCB4
ZXJyOw0KCQ0KCVhWSURfSU5JVF9QQVJBTSB4aW5pdDsNCglYVklEX0VOQ19Q
QVJBTSB4cGFyYW07DQoNCglpZih1c2VfYXNzZW1ibGVyKQ0KDQojaWZkZWYg
QVJDSF9JQTY0DQoJCXhpbml0LmNwdV9mbGFncyA9IFhWSURfQ1BVX0ZPUkNF
IHwgWFZJRF9DUFVfSUE2NDsNCiNlbHNlDQoJCXhpbml0LmNwdV9mbGFncyA9
IDA7DQojZW5kaWYNCg0KCWVsc2UNCgkJeGluaXQuY3B1X2ZsYWdzID0gWFZJ
RF9DUFVfRk9SQ0U7DQoNCgl4dmlkX2luaXQoTlVMTCwgMCwgJnhpbml0LCBO
VUxMKTsNCg0KCXhwYXJhbS53aWR0aCA9IFhESU07DQoJeHBhcmFtLmhlaWdo
dCA9IFlESU07DQoJaWYgKChBUkdfRlJBTUVSQVRFIC0gKGludClBUkdfRlJB
TUVSQVRFKSA8IFNNQUxMX0VQUykNCgl7DQoJICAgICAgICB4cGFyYW0uZmlu
Y3IgPSAxOw0KCSAgICAgICAgeHBhcmFtLmZiYXNlID0gKGludClBUkdfRlJB
TUVSQVRFOw0KCX0NCgllbHNlDQoJew0KCSAgICAgICAgeHBhcmFtLmZpbmNy
ID0gRlJBTUVSQVRFX0lOQ1I7DQoJICAgICAgICB4cGFyYW0uZmJhc2UgPSAo
aW50KShGUkFNRVJBVEVfSU5DUiAqIEFSR19GUkFNRVJBVEUpOw0KCX0NCgl4
cGFyYW0ucmNfcmVhY3Rpb25fZGVsYXlfZmFjdG9yID0gMTY7DQogICAgeHBh
cmFtLnJjX2F2ZXJhZ2luZ19wZXJpb2QgPSAxMDA7DQogICAgeHBhcmFtLnJj
X2J1ZmZlciA9IDEwOw0KDQoJCS8qIEkgdXNlIHNtYWxsIHZhbHVlcyBoZXJl
LCBzaW5jZSB3ZSB3aWxsIG5vdCANCgkJICAgZW5jb2RlIHdob2xlIG1vdmll
cywgYnV0IHNob3J0IGNsaXBzICovDQoNCgl4cGFyYW0ucmNfYml0cmF0ZSA9
IEFSR19CSVRSQVRFKjEwMDA7IA0KCXhwYXJhbS5taW5fcXVhbnRpemVyID0g
MTsNCgl4cGFyYW0ubWF4X3F1YW50aXplciA9IDMxOw0KCXhwYXJhbS5tYXhf
a2V5X2ludGVydmFsID0gKGludClBUkdfRlJBTUVSQVRFKjEwOw0KDQoJeHBh
cmFtLmdsb2JhbCA9IFhWSURfR0xPQkFMX0RYNTBCVk9QOy8vWFZJRF9HTE9C
QUxfREVCVUc7IC8vWFZJRF9HTE9CQUxfUEFDS0VEfFhWSURfR0xPQkFMX0RY
NTBCVk9QOy8vfFhWSURfR0xPQkFMX0RFQlVHOw0KCXhwYXJhbS5tYXhfYmZy
YW1lcyA9IEFSR19NQVhfQkZSQU1FUzsNCgl4cGFyYW0uYnF1YW50X3JhdGlv
ID0gQVJHX0JRVUFOVF9SQVRJTzsNCg0KCXhwYXJhbS5mcmFtZV9kcm9wX3Jh
dGlvID0gMDsNCg0KCXhlcnIgPSB4dmlkX2VuY29yZShOVUxMLCBYVklEX0VO
Q19DUkVBVEUsICZ4cGFyYW0sIE5VTEwpOw0KCWVuY19oYW5kbGU9eHBhcmFt
LmhhbmRsZTsNCg0KCXJldHVybiB4ZXJyOw0KfQ0KDQppbnQgIGVuY19zdG9w
KCkNCnsJaW50IHhlcnI7DQoNCgl4ZXJyID0geHZpZF9lbmNvcmUoZW5jX2hh
bmRsZSwgWFZJRF9FTkNfREVTVFJPWSwgTlVMTCwgTlVMTCk7DQogICAgICAg
IHJldHVybiB4ZXJyOw0KfQ0KDQppbnQgIGVuY19tYWluKHVuc2lnbmVkIGNo
YXIqIGltYWdlLCB1bnNpZ25lZCBjaGFyKiBiaXRzdHJlYW0sIGludCAqc3Ry
ZWFtbGVuZ3RoLCBpbnQqIGZyYW1ldHlwZSkNCnsJaW50IHhlcnI7DQoNCglY
VklEX0VOQ19GUkFNRSB4ZnJhbWU7DQoJWFZJRF9FTkNfU1RBVFMgeHN0YXRz
Ow0KDQoJeGZyYW1lLmJpdHN0cmVhbSA9IGJpdHN0cmVhbTsNCgl4ZnJhbWUu
bGVuZ3RoID0gLTE7IAkvLyB0aGlzIGlzIHdyaXR0ZW4gYnkgdGhlIHJvdXRp
bmUNCg0KCXhmcmFtZS5pbWFnZSA9IGltYWdlOw0KICAgICAgICB4ZnJhbWUu
Y29sb3JzcGFjZSA9IFhWSURfQ1NQX1lWMTI7CS8vIGRlZmluZWQgaW4gPHh2
aWQuaD4NCg0KCXhmcmFtZS5pbnRyYSA9IC0xOyAvLyBsZXQgdGhlIGNvZGVj
IGRlY2lkZSBiZXR3ZWVuIEktZnJhbWUgKDEpIGFuZCBQLWZyYW1lICgwKQ0K
DQoJeGZyYW1lLnF1YW50ID0gQVJHX1FVQU5USTsJLy8gaWYgcXVhbnQgIT0g
MCwgdXNlIGEgZml4ZWQgcXVhbnQgKGFuZCBpZ25vcmUgYml0cmF0ZSkNCgl4
ZnJhbWUuYnF1YW50ID0gMDsNCgkNCg0KCXhmcmFtZS5tb3Rpb24gPSBtb3Rp
b25fcHJlc2V0c1tBUkdfUVVBTElUWV07DQoJeGZyYW1lLmdlbmVyYWwgPSBn
ZW5lcmFsX3ByZXNldHNbQVJHX1FVQUxJVFldOw0KCXhmcmFtZS5xdWFudF9p
bnRyYV9tYXRyaXggPSB4ZnJhbWUucXVhbnRfaW50ZXJfbWF0cml4ID0gTlVM
TDsNCg0KCXhlcnIgPSB4dmlkX2VuY29yZShlbmNfaGFuZGxlLCBYVklEX0VO
Q19FTkNPREUsICZ4ZnJhbWUsICZ4c3RhdHMpOw0KDQovKgkgICAgICAgIGVu
Y19yZXN1bHQtPmlzX2tleV9mcmFtZSA9IHhmcmFtZS5pbnRyYTsNCgkgICAg
ICAgIGVuY19yZXN1bHQtPnF1YW50aXplciA9IHhmcmFtZS5xdWFudDsNCgkg
ICAgICAgIGVuY19yZXN1bHQtPnRvdGFsX2JpdHMgPSB4ZnJhbWUubGVuZ3Ro
ICogODsNCgkgICAgICAgIGVuY19yZXN1bHQtPm1vdGlvbl9iaXRzID0geHN0
YXRzLmhsZW5ndGggKiA4Ow0KCSAgICAgICAgZW5jX3Jlc3VsdC0+dGV4dHVy
ZV9iaXRzID0gZW5jX3Jlc3VsdC0+dG90YWxfYml0cyAtIGVuY19yZXN1bHQt
Pm1vdGlvbl9iaXRzOw0KKi8gDQoNCi8qICBUaGlzIGlzIHN0YXRpY3RpY2Fs
IGRhdGEsIGUuZy4gZm9yIDItcGFzcy4gDQogICAgSWYgeW91IGFyZSBub3Qg
aW50ZXJlc3RlZCBpbiBhbnkgb2YgdGhpcywgeW91IGNhbiB1c2UgTlVMTCBp
bnN0ZWFkIG9mICZ4c3RhdHMNCiovDQoJKmZyYW1ldHlwZSA9IHhmcmFtZS5p
bnRyYTsNCgkqc3RyZWFtbGVuZ3RoID0geGZyYW1lLmxlbmd0aDsNCg0KCXJl
dHVybiB4ZXJyOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
DQovKiBSb3V0aW5lcyBmb3IgZGVjb2Rpbmc6IGluaXQgZW5jb2RlciwgZnJh
bWUgc3RlcCwgcmVsZWFzZSBlbmNvZGVyICAqLw0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCg0KaW50IGRlY19pbml0KGludCB1c2VfYXNzZW1ibGVy
KQkvKiBpbml0IGRlY29kZXIgYmVmb3JlIGZpcnN0IHJ1biAqLw0Kew0KICAg
ICAgICBpbnQgeGVycjsNCg0KICAgICAgICBYVklEX0lOSVRfUEFSQU0geGlu
aXQ7DQogICAgICAgIFhWSURfREVDX1BBUkFNIHhwYXJhbTsNCg0KCQlpZih1
c2VfYXNzZW1ibGVyKQ0KDQojaWZkZWYgQVJDSF9JQTY0DQoJCQl4aW5pdC5j
cHVfZmxhZ3MgPSBYVklEX0NQVV9GT1JDRSB8IFhWSURfQ1BVX0lBNjQ7DQoj
ZWxzZQ0KCQkJeGluaXQuY3B1X2ZsYWdzID0gMDsNCiNlbmRpZg0KDQoJCWVs
c2UNCgkJCXhpbml0LmNwdV9mbGFncyA9IFhWSURfQ1BVX0ZPUkNFOw0KDQog
ICAgICAgIHh2aWRfaW5pdChOVUxMLCAwLCAmeGluaXQsIE5VTEwpOw0KICAg
ICAgICB4cGFyYW0ud2lkdGggPSBYRElNOw0KICAgICAgICB4cGFyYW0uaGVp
Z2h0ID0gWURJTTsNCg0KICAgICAgICB4ZXJyID0geHZpZF9kZWNvcmUoTlVM
TCwgWFZJRF9ERUNfQ1JFQVRFLCAmeHBhcmFtLCBOVUxMKTsNCiAgICAgICAg
ZGVjX2hhbmRsZSA9IHhwYXJhbS5oYW5kbGU7DQoNCiAgICAgICAgcmV0dXJu
IHhlcnI7DQp9DQoNCmludCBkZWNfbWFpbih1bnNpZ25lZCBjaGFyICptNHZf
YnVmZmVyLCB1bnNpZ25lZCBjaGFyICpvdXRfYnVmZmVyLCBpbnQgKm00dl9z
aXplKQ0KewkvKiBkZWNvZGUgb25lIGZyYW1lICAqLw0KDQogICAgICAgIGlu
dCB4ZXJyOw0KICAgICAgICBYVklEX0RFQ19GUkFNRSB4ZnJhbWU7DQoNCiAg
ICAgICAgeGZyYW1lLmJpdHN0cmVhbSA9IG00dl9idWZmZXI7DQogICAgICAg
IHhmcmFtZS5sZW5ndGggPSAxMjM0OyAvLyptNHZfc2l6ZTsNCiAgICAgICAg
eGZyYW1lLmltYWdlID0gb3V0X2J1ZmZlcjsNCiAgICAgICAgeGZyYW1lLnN0
cmlkZSA9IFhESU07DQogICAgICAgIHhmcmFtZS5jb2xvcnNwYWNlID0gWFZJ
RF9DU1BfWVYxMjsgICAgICAgICAgICAgLy8gWFZJRF9DU1BfVVNFUiBpcyBm
YXN0ZXN0IChubyBtZW1jb3B5IGludm9sdmVkKQ0KDQogICAgICAgIHhlcnIg
PSB4dmlkX2RlY29yZShkZWNfaGFuZGxlLCBYVklEX0RFQ19ERUNPREUsICZ4
ZnJhbWUsIE5VTEwpOw0KCQkNCgkJKm00dl9zaXplID0geGZyYW1lLmxlbmd0
aDsNCiAgICAgICAgcmV0dXJuIHhlcnI7DQp9DQoNCmludCBkZWNfc3RvcCgp
CS8qIGNsb3NlIGRlY29kZXIgdG8gcmVsZWFzZSByZXNvdXJjZXMgKi8NCnsN
CiAgICAgICAgaW50IHhlcnI7DQogICAgICAgIHhlcnIgPSB4dmlkX2RlY29y
ZShkZWNfaGFuZGxlLCBYVklEX0RFQ19ERVNUUk9ZLCBOVUxMLCBOVUxMKTsN
Cg0KICAgICAgICByZXR1cm4geGVycjsNCn0NCg0KDQovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLw0KLyogICAgICAgICAgICAgICAgICAgICAgICAgIE1h
aW4gcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovDQoNCmludCBtYWluKGludCBhcmdj
LCBjaGFyICphcmd2W10pDQp7DQogIHVuc2lnbmVkIGNoYXIgKmRpdnhfYnVm
ZmVyID0gTlVMTDsNCiAgdW5zaWduZWQgY2hhciAqZGl2eF9yZWFkID0gTlVM
TDsNCiAgdW5zaWduZWQgY2hhciAqZGl2eF93cml0ZSA9IE5VTEw7DQogIHVu
c2lnbmVkIGNoYXIgKippbl9idWZmZXI7DQogIHVuc2lnbmVkIGNoYXIgKm91
dF9idWZmZXIgPSBOVUxMOw0KICB1bnNpZ25lZCBjaGFyICpkaXZ4X3BvczsJ
DQoNCglpbnQgazsNCgkNCiAgZG91YmxlIGVuY3RpbWUsZGVjdGltZTsNCiAg
ZG91YmxlIHRvdGFsZW5jdGltZT0wLjsNCiAgZG91YmxlIHRvdGFsZGVjdGlt
ZT0wLjsNCiAgDQogIGxvbmcgdG90YWxzaXplPTA7DQogIGludCBzdGF0dXM7
DQogDQogIGludCBsb29wOyAgDQogIGludCBtNHZfc2l6ZT0wOw0KICBpbnQg
ZW5jX3NpemU9MDsNCiAgaW50IGZyYW1lX3R5cGVbQUJTX01BWEZSQU1FTlJd
Ow0KICBpbnQgSWZyYW1lcz0wLCBQZnJhbWVzPTAsIEJmcmFtZXM9MCwgdXNl
X2Fzc2VtYmxlcj0wOw0KICBkb3VibGUgZnJhbWVwc25yW0FCU19NQVhGUkFN
RU5SXTsNCiAgDQogIGRvdWJsZSBJcHNucj0wLixJbWF4cHNucj0wLixJbWlu
cHNucj05OTkuLEl2YXJwc25yPTAuOw0KICBkb3VibGUgUHBzbnI9MC4sUG1h
eHBzbnI9MC4sUG1pbnBzbnI9OTk5LixQdmFycHNucj0wLjsNCiAgZG91Ymxl
IEJwc25yPTAuLEJtYXhwc25yPTAuLEJtaW5wc25yPTk5OS4sQnZhcnBzbnI9
MC47DQogIA0KICBjaGFyIGZpbGVuYW1lWzI1Nl07DQogIA0KICBGSUxFICpm
aWxlaGFuZGxlOw0KDQovKiByZWFkIFlVViBpbiBwZ20gZm9ybWF0IGZyb20g
c3RkaW4gKi8NCiAgaWYgKCFwZ21mbGFnKQ0KICB7CQ0KCXBnbWZsYWcgPSAx
Ow0KDQoJaWYgKGFyZ2M9PTIgJiYgIXN0cmNtcChhcmd2WzFdLCItYXNtIikp
IA0KCSAgdXNlX2Fzc2VtYmxlciA9IDE7DQogIAlpZiAoYXJnYz49MykNCgl7
CVhESU0gPSBhdG9pKGFyZ3ZbMV0pOw0KCSAgCVlESU0gPSBhdG9pKGFyZ3Zb
Ml0pOw0KCQlpZiAoIChYRElNIDw9IDApIHx8IChYRElNID49IDIwNDgpIHx8
IChZRElNIDw9MCkgfHwgKFlESU0gPj0gMjA0OCkgKQ0KCQl7CWZwcmludGYo
c3RkZXJyLCJXcm9uZyBmcmFtZXMgc2l6ZSAlZCAlZCwgdHJ5aW5nIFBHTSBc
biIsWERJTSwgWURJTSk7IA0KCQl9DQoJCWVsc2UgDQoJCXsNCgkJCVlESU0g
PSBZRElNKjMvMjsgLyogZm9yIFlVViAqLw0KCQkJcGdtZmxhZyA9IDA7DQoJ
CX0NCgl9DQogIH0NCiAgDQogIGlmIChwZ21mbGFnKSAgDQogIHsJaWYgKHJl
YWRfcGdtaGVhZGVyKHN0ZGluKSkNCgkgICAgew0KCSAgICAgIHByaW50Zigi
V3JvbmcgaW5wdXQgZm9ybWF0LCBJIHdhbnQgWVVWIGVuY2Fwc3VsYXRlZCBp
biBQR01cbiIpOw0KCSAgICAgIHJldHVybiAxOw0KCSAgICB9DQogIH0NCiAg
DQogIGlmIChhcmdjPj00KQ0KICB7CUFSR19RVUFMSVRZID0gYXRvaShhcmd2
WzNdKTsNCiAgCWlmICggKEFSR19RVUFMSVRZIDwgMCkgfHwgKEFSR19RVUFM
SVRZID4gNikgKQ0KCQl7IGZwcmludGYoc3RkZXJyLCJXcm9uZyBRdWFsaXR5
XG4iKTsgcmV0dXJuIC0xOyB9DQoJZWxzZQ0KCQkgIHByaW50ZigiUXVhbGl0
eSAlZFxuIixBUkdfUVVBTElUWSk7DQogIH0NCiAgaWYgKGFyZ2M+PTUpDQog
IHsJQVJHX0JJVFJBVEUgPSBhdG9pKGFyZ3ZbNF0pOw0KICAJaWYgKCAoQVJH
X0JJVFJBVEUgPD0gMCkgKQ0KCQl7IGZwcmludGYoc3RkZXJyLCJXcm9uZyBC
aXRyYXRlXG4iKTsgcmV0dXJuIC0xOyB9DQogIAlpZiAoIChBUkdfQklUUkFU
RSA8PSAzMikgKQ0KCQl7IEFSR19RVUFOVEkgPSBBUkdfQklUUkFURTsgDQoJ
CSAgQVJHX0JJVFJBVEU9MDsNCgkJICBwcmludGYoIlF1YW50aXplciAlZFxu
IixBUkdfUVVBTlRJKTsNCgkJfQ0KCWVsc2UNCgkJICBwcmludGYoIkJpdHJh
dGUgJWQga2Jwc1xuIixBUkdfQklUUkFURSk7DQogIH0NCiAgaWYgKGFyZ2M+
PTYpDQogIHsgICAgIEFSR19GUkFNRVJBVEUgPSAoZmxvYXQpYXRvZihhcmd2
WzVdKTsNCiAgICAgICAgaWYgKCAoQVJHX0ZSQU1FUkFURSA8PSAwKSApDQog
ICAgICAgICAgICAgICAgeyBmcHJpbnRmKHN0ZGVyciwiV3JvbmcgRnJhdGVy
YXRlICVzIFxuIixhcmd2WzVdKTsgcmV0dXJuIC0xOyB9DQogICAgICAgIHBy
aW50ZigiRnJhbWVyYXRlICU2LjNmIGZwc1xuIixBUkdfRlJBTUVSQVRFKTsN
CiAgfSANCg0KICBpZiAoYXJnYz49NykNCiAgewlBUkdfTUFYRlJBTUVOUiA9
IGF0b2koYXJndls2XSk7DQoJaWYgKCAoQVJHX01BWEZSQU1FTlIgPD0gMCkg
KQ0KCSB7IGZwcmludGYoc3RkZXJyLCJXcm9uZyBudW1iZXIgb2YgZnJhbWVz
XG4iKTsgcmV0dXJuIC0xOyB9DQoJcHJpbnRmKCJtYXguIEZyYW1lbnIuICVk
XG4iLEFSR19NQVhGUkFNRU5SKTsNCiAgfQ0KDQogIGlmIChhcmdjPj04KQ0K
ICB7CUFSR19NQVhfQkZSQU1FUyA9IGF0b2koYXJndls3XSk7DQoJaWYgKCAo
QVJHX01BWF9CRlJBTUVTIDwgLTEpICkNCgkgeyBmcHJpbnRmKHN0ZGVyciwi
V3JvbmcgbnVtYmVyIG9mIGJmcmFtZXNcbiIpOyByZXR1cm4gLTE7IH0NCglw
cmludGYoIm1heC4gQi1GcmFtZXMgJWRcbiIsQVJHX01BWF9CRlJBTUVTKTsN
CiAgfQ0KICBOVU1CVUZGRVJTID0gQVJHX01BWF9CRlJBTUVTKzI7DQoNCiAg
aWYgKGFyZ2M+PTkpDQogIHsJQVJHX0JRVUFOVF9SQVRJTyA9IGF0b2koYXJn
dls4XSk7DQoJaWYgKCAoQVJHX0JRVUFOVF9SQVRJTyA8PSAwKSApDQoJIHsg
ZnByaW50ZihzdGRlcnIsIldyb25nIGJxdWFudCByYXRpb1xuIik7IHJldHVy
biAtMTsgfQ0KCXByaW50ZigiYnF1YW50IHJhdGlvICVkXG4iLEFSR19CUVVB
TlRfUkFUSU8pOw0KICB9DQoNCi8qIG5vdyB3ZSBrbm93IHRoZSBzaXplcywg
c28gYWxsb2NhdGUgbWVtb3J5ICovDQoNCiAgaW5fYnVmZmVyID0gbWFsbG9j
KCBOVU1CVUZGRVJTKnNpemVvZih1bnNpZ25lZCBjaGFyKikgKTsNCiAgaWYg
KCFpbl9idWZmZXIpDQogIAlnb3RvIGZyZWVfYWxsX21lbW9yeTsgDQoJDQog
IGZvciAoaz0wO2s8TlVNQlVGRkVSUztrKyspDQogIAlpbl9idWZmZXJba10g
PSBOVUxMOw0KDQogIGZvciAoaz0wO2s8TlVNQlVGRkVSUztrKyspDQogIHsN
CgkgIGluX2J1ZmZlcltrXSA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhY
RElNKllESU0pOwkNCgkgIGlmICghaW5fYnVmZmVyW2tdKQ0KICAgIAlnb3Rv
IGZyZWVfYWxsX21lbW9yeTsJLy8gZ290byBpcyBvbmUgb2YgdGhlIG1vc3Qg
dW5kZXJlc3RpbWF0ZWQgaW5zdHJ1Y3Rpb25zIGluIEMgISEhDQogIH0NCg0K
I2RlZmluZSBESVZYX1NJWkUgKFhESU0qWURJTSoyMDApDQogIGRpdnhfYnVm
ZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKDIqRElWWF9TSVpFKTsJ
Ly8gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGVub3VnaCBtZW1vcnkhDQogIGlm
ICghZGl2eF9idWZmZXIpDQogICAgZ290byBmcmVlX2FsbF9tZW1vcnk7CQ0K
ICANCiAgZGl2eF93cml0ZSA9IGRpdnhfYnVmZmVyOw0KICBkaXZ4X3JlYWQg
PSBkaXZ4X2J1ZmZlcjsNCiAgDQogIFlESU0gPSBZRElNKjIvMzsgLy8gUEdN
IGlzIFlVViA0OjI6MCBmb3JtYXQsIHNvIHJlYWwgaW1hZ2UgaGVpZ2h0IGlz
ICoyLzMgb2YgUEdNIHBpY3R1cmUgDQogICAgDQogIG91dF9idWZmZXIgPSAo
dW5zaWduZWQgY2hhciAqKSBtYWxsb2MoWERJTSpZRElNKjQpOwkNCiAgaWYg
KCFvdXRfYnVmZmVyKQ0KICAgIGdvdG8gZnJlZV9hbGxfbWVtb3J5OwkNCg0K
DQoNCg0KDQoJSWZyYW1lcz0wLCBQZnJhbWVzPTAsIEJmcmFtZXM9MCwgdXNl
X2Fzc2VtYmxlcj0wOw0KCWZpbGVucj0wOwkNCg0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCi8qCSAgICAgICAgICAgICAgICAgICBYdmlEIFBBUlQg
IFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8NCg0KDQogIHN0YXR1cyA9IGVuY19pbml0KHVz
ZV9hc3NlbWJsZXIpOw0KCWlmIChzdGF0dXMpICAgIA0KCXsgDQoJCXByaW50
ZigiRW5jb3JlIElOSVQgcHJvYmxlbSwgcmV0dXJuIHZhbHVlICVkXG4iLCBz
dGF0dXMpOw0KCQlnb3RvIHJlbGVhc2VfYWxsOw0KCX0NCg0KCXN0YXR1cyA9
IGRlY19pbml0KHVzZV9hc3NlbWJsZXIpOw0KCWlmIChzdGF0dXMpIA0KCXsN
CgkJcHJpbnRmKCJEZWNvcmUgSU5JVCBwcm9ibGVtLCByZXR1cm4gdmFsdWUg
JWRcbiIsIHN0YXR1cyk7DQoJCWdvdG8gcmVsZWFzZV9hbGw7DQoJfQ0KDQoN
Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKgkgICAgICAgICAgICAg
ICAgICAgICAgICAgTWFpbiBsb29wICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiAgZG8NCiAg
ICB7DQoJaWYgKHBnbWZsYWcpIA0KCSAgICAgIHN0YXR1cyA9IHJlYWRfcGdt
ZGF0YShzdGRpbiwgaW5fYnVmZmVyW2ZpbGVuciVOVU1CVUZGRVJTXSk7CS8v
IHJlYWQgUEdNIGRhdGEgKFlVVi1mb3JtYXQpDQoJZWxzZQ0KCSAgICAgIHN0
YXR1cyA9IHJlYWRfeXV2ZGF0YShzdGRpbiwgaW5fYnVmZmVyW2ZpbGVuciVO
VU1CVUZGRVJTXSk7CS8vIHJlYWQgcmF3IGRhdGEgKFlVVi1mb3JtYXQpDQoJ
ICAgICAgDQogICAgaWYgKHN0YXR1cykNCgl7DQoJICAvLyBDb3VsZG4ndCBy
ZWFkIGltYWdlLCBtb3N0IGxpa2VseSBlbmQtb2YtZmlsZQ0KCSAgY29udGlu
dWU7DQoJfQ0KDQoNCiAgICBpZiAoc2F2ZV9yZWZfZmxhZykNCgl7DQoJCXNw
cmludGYoZmlsZW5hbWUsICIlcyUwNWQucGdtIiwgZmlsZXBhdGgsIGZpbGVu
cik7DQoJCXdyaXRlX3BnbShmaWxlbmFtZSxpbl9idWZmZXJbZmlsZW5yJU5V
TUJVRkZFUlNdKTsNCiAJfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovDQovKiAgICAgICAgICAgICAgIGFuYWx5c2UgdGhpcyBmcmFtZSBiZWZv
cmUgZW5jb2RpbmcgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCg0KLy8Jbm90aGluZyBpcyBkb25lIGhlcmUgYXQg
dGhlIG1vbWVudCwgYnV0IHlvdSBjb3VsZCBlLmcuIGNyZWF0ZSANCi8vCWhp
c3RvZ3JhbXMgb3IgbWVhc3VyZSBlbnRyb3B5IG9yIGFwcGx5IHByZXByb2Nl
c3NpbmcgZmlsdGVycy4uLiANCg0KLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8NCi8qICAgICAgICAgICAgICAgZW5jb2RlIGFuZCBkZWNvZGUgdGhpcyBm
cmFtZSAgICAgICAgICAgICAgICAgICAgICAgICovDQovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLw0KDQoJZW5jdGltZSA9IC1tc2Vjb25kKCk7DQoJc3Rh
dHVzID0gZW5jX21haW4oaW5fYnVmZmVyW2ZpbGVuciVOVU1CVUZGRVJTXSwg
ZGl2eF93cml0ZSwgJmVuY19zaXplLCAmZnJhbWVfdHlwZVtmaWxlbnJdKTsN
CgllbmN0aW1lICs9IG1zZWNvbmQoKTsNCg0KCWlmIChzdGF0dXMpDQoJCXBy
aW50ZigiRW5jX21haW4gc3RhdHVzOiAlZFxuIixzdGF0dXMpOw0KCXRvdGFs
ZW5jdGltZSArPSBlbmN0aW1lOw0KCXRvdGFsc2l6ZSArPSBlbmNfc2l6ZTsN
Cg0KCXByaW50ZigiRnJhbWUgJTVkOiBpbnRyYSAlZCwgZW5jdGltZSA9JTYu
MWYgbXMgbGVuZ3RoPSU3ZCBieXRlcyBcbiIsDQoJCSBmaWxlbnIsIGZyYW1l
X3R5cGVbZmlsZW5yXSwgZW5jdGltZSoxMDAwLCBlbmNfc2l6ZSk7DQoNCglp
ZiAoc2F2ZV9tNHZfZmxhZykNCgl7DQoJCXNwcmludGYoZmlsZW5hbWUsICIl
c2ZyYW1lJTA1ZC5tNHYiLCBmaWxlcGF0aCwgZmlsZW5yKTsNCgkJZmlsZWhh
bmRsZSA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsNCgkJZndyaXRlKGRpdnhf
d3JpdGUsIGVuY19zaXplLCAxLCBmaWxlaGFuZGxlKTsNCgkJZmNsb3NlKGZp
bGVoYW5kbGUpOw0KCX0NCglkaXZ4X3dyaXRlICs9IGVuY19zaXplOw0KCSpk
aXZ4X3dyaXRlPTA7CQkJLyogc29tZSBraW5kIG9mIHBhZGRpbmcgKi8NCgkq
KGRpdnhfd3JpdGUrMSk9MDsNCgkqKGRpdnhfd3JpdGUrMik9MDsNCgkqKGRp
dnhfd3JpdGUrMyk9MDsNCgkNCglpZiAoZmlsZW5yPEFSR19NQVhfQkZSQU1F
UykNCgkJZ290byBuZXh0ZmlsZTsNCg0KCWRvIHsNCgkJZGVjdGltZSA9IC1t
c2Vjb25kKCk7DQoJCXN0YXR1cyA9IGRlY19tYWluKGRpdnhfcmVhZCwgb3V0
X2J1ZmZlciwgJm00dl9zaXplKTsNCgkJZGVjdGltZSArPSBtc2Vjb25kKCk7
DQoJCWRpdnhfcmVhZCArPSBtNHZfc2l6ZTsNCgkJcHJpbnRmKCJEZWNGcmFt
ZSAlNWQ6IGxlbmd0aD0lN2QgYnl0ZXMgKGxlZnQ6ICU3ZClcbiIsIGZpbGVu
ci0oQVJHX01BWF9CRlJBTUVTKSwgbTR2X3NpemUsDQoJCQkoZGl2eF93cml0
ZS1kaXZ4X3JlYWQpKTsNCgkNCgl9IHdoaWxlIChtNHZfc2l6ZTw3KTsNCgkJ
DQoJaWYgKHN0YXR1cykNCgkJcHJpbnRmKCJkZWNfbWFpbiBTdGF0dXMgPSVk
XG4iLHN0YXR1cyk7DQoJdG90YWxkZWN0aW1lICs9IGRlY3RpbWU7ICAgICAg
DQogICAgICANCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiAgICAg
ICAgYW5hbHlzZSB0aGUgZGVjb2RlZCBmcmFtZSBhbmQgY29tcGFyZSB0byBv
cmlnaW5hbCAgICAgICAgICAqLw0KLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8NCg0KICAgIGlmIChmaWxlbnI+QVJHX01BWF9CRlJBTUVTKSB7DQoJCWZy
YW1lcHNucltmaWxlbnItKEFSR19NQVhfQkZSQU1FUysxKV0gPSBQU05SKFhE
SU0sWURJTSwgaW5fYnVmZmVyWyhmaWxlbnItKEFSR19NQVhfQkZSQU1FUysx
KSklTlVNQlVGRkVSU10sIFhESU0sIG91dF9idWZmZXIsIFhESU0gKTsNCgkJ
cHJpbnRmKCJkZWN0aW1lID0lNi4xZiBtcyBQU05SICU1LjJmXG4iLGRlY3Rp
bWUqMTAwMCwgZnJhbWVwc25yW2ZpbGVuci0oQVJHX01BWF9CRlJBTUVTKzEp
XSk7DQoJfQ0KDQogICAgaWYgKGZpbGVucj5BUkdfTUFYX0JGUkFNRVMpIA0K
CWlmIChzYXZlX2RlY19mbGFnKQ0KCXsNCgkJc3ByaW50ZihmaWxlbmFtZSwg
IiVzZGVjJTA1ZC5wZ20iLCBmaWxlcGF0aCwgZmlsZW5yLShBUkdfTUFYX0JG
UkFNRVMrMSkpOw0KIAkgICAgICAgCXdyaXRlX3BnbShmaWxlbmFtZSxvdXRf
YnVmZmVyKTsNCiAJfQ0KDQpuZXh0ZmlsZToNCg0KCWZpbGVucisrOw0KDQoJ
aWYgKChpbnQpKGRpdnhfcmVhZCAtIGRpdnhfYnVmZmVyKSA+IERJVlhfU0la
RSkNCgl7DQoJCW1lbW1vdmUoZGl2eF9idWZmZXIsIGRpdnhfcmVhZCwgKGlu
dCkoZGl2eF9idWZmZXIrMipESVZYX1NJWkUtZGl2eF9yZWFkKSk7DQoJCWRp
dnhfd3JpdGUgLT0gKGludCkoZGl2eF9yZWFkLWRpdnhfYnVmZmVyKTsNCgkJ
ZGl2eF9yZWFkID0gZGl2eF9idWZmZXI7DQoJCWZwcmludGYoc3RkZXJyLCJE
SVZYLWJ1ZmZlciBjb3BpZWRcbiIpOw0KDQoJfQ0KDQoJaWYgKHBnbWZsYWcp
DQoJCXN0YXR1cyA9IHJlYWRfcGdtaGVhZGVyKHN0ZGluKTsJCS8vIGJlY2F1
c2UgaWYgdGhpcyB3YXMgdGhlIGxhc3QgUEdNLCBzdG9wIG5vdyANCg0KICAg
fSB3aGlsZSAoICghc3RhdHVzKSAmJiAoZmlsZW5yPEFSR19NQVhGUkFNRU5S
KSApOw0KCQ0KCXByaW50ZigiU3RhdHVzPSVkIGZpbGVucj0lZFxuIixzdGF0
dXMsZmlsZW5yKTsNCglmaWxlbnItLTsJDQoJDQogICAgICANCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovDQovKiAgICAgY2FsY3VsYXRlIHRvdGFscyBh
bmQgYXZlcmFnZXMgZm9yIG91dHB1dCwgcHJpbnQgcmVzdWx0cyAgICAgICAq
Lw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KCWlmIChmaWxlbnIp
DQoJewl0b3RhbHNpemUgICAgLz0gZmlsZW5yOw0KCQl0b3RhbGVuY3RpbWUg
Lz0gZmlsZW5yOw0KCQl0b3RhbGRlY3RpbWUgLz0gZmlsZW5yOw0KCX0NCg0K
CWZvciAoaT0wO2k8ZmlsZW5yLShBUkdfTUFYX0JGUkFNRVMrMSk7aSsrKQ0K
CXsNCgkJc3dpdGNoIChmcmFtZV90eXBlW2ldKQ0KCQl7DQoJCWNhc2UgMDoN
CgkJCVBmcmFtZXMrKzsNCgkJCVBwc25yICs9IGZyYW1lcHNucltpXTsNCgkJ
CWJyZWFrOw0KCQljYXNlIDE6DQoJCQlJZnJhbWVzKys7DQoJCQlJcHNuciAr
PSBmcmFtZXBzbnJbaV07DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQlkZWZh
dWx0Og0KCQkJQmZyYW1lcysrOw0KCQkJQnBzbnIgKz0gZnJhbWVwc25yW2ld
Ow0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJDQoJaWYgKFBmcmFtZXMpDQoJCVBw
c25yIC89IFBmcmFtZXM7CQ0KCWlmIChJZnJhbWVzKQ0KCQlJcHNuciAvPSBJ
ZnJhbWVzOwkNCglpZiAoQmZyYW1lcykNCgkJQnBzbnIgLz0gQmZyYW1lczsJ
DQoJCQ0KCQkNCglmb3IgKGk9MDtpPGZpbGVuci0oQVJHX01BWF9CRlJBTUVT
KzEpO2krKykJLy8gY2FsY3VsYXRlIHN0YXRpc3RpY3MgZm9yIGV2ZXJ5IGZy
YW1ldHlwZTogUCxJIChhbmQgQikNCgl7CQ0KCQlzd2l0Y2ggKGZyYW1lX3R5
cGVbaV0pDQoJCXsNCgkJY2FzZSAwOg0KCQkJaWYgKGZyYW1lcHNucltpXSA+
IFBtYXhwc25yKQ0KCQkJCVBtYXhwc25yID0gZnJhbWVwc25yW2ldOw0KCQkJ
aWYgKGZyYW1lcHNucltpXSA8IFBtaW5wc25yKQ0KCQkJCVBtaW5wc25yID0g
ZnJhbWVwc25yW2ldOw0KCQkJUHZhcnBzbnIgKz0gKGZyYW1lcHNucltpXSAt
IFBwc25yKSooZnJhbWVwc25yW2ldIC0gUHBzbnIpIC9QZnJhbWVzOw0KCQkJ
YnJlYWs7DQoJCWNhc2UgMToNCgkJCWlmIChmcmFtZXBzbnJbaV0gPiBJbWF4
cHNucikNCgkJCQlJbWF4cHNuciA9IGZyYW1lcHNucltpXTsNCgkJCWlmIChm
cmFtZXBzbnJbaV0gPCBQbWlucHNucikNCgkJCQlJbWlucHNuciA9IGZyYW1l
cHNucltpXTsNCgkJCUl2YXJwc25yICs9IChmcmFtZXBzbnJbaV0gLSBJcHNu
cikqKGZyYW1lcHNucltpXSAtIElwc25yKSAvSWZyYW1lczsNCgkJCWJyZWFr
Ow0KCQljYXNlIDI6DQoJCQlpZiAoZnJhbWVwc25yW2ldID4gQm1heHBzbnIp
DQoJCQkJQm1heHBzbnIgPSBmcmFtZXBzbnJbaV07DQoJCQlpZiAoZnJhbWVw
c25yW2ldIDwgUG1pbnBzbnIpDQoJCQkJQm1pbnBzbnIgPSBmcmFtZXBzbnJb
aV07DQoJCQlCdmFycHNuciArPSAoZnJhbWVwc25yW2ldIC0gQnBzbnIpKihm
cmFtZXBzbnJbaV0gLSBCcHNucikgL0JmcmFtZXM7DQoJCQlicmVhazsNCgkJ
fQ0KCX0NCgkNCglwcmludGYoIkF2Zy4gUSUxZCAlMnMgIixBUkdfUVVBTElU
WSwgKEFSR19RVUFOVEkgPyAiIHEiIDogImJyIikpOw0KCXByaW50ZigiJTA0
ZCAiLE1BWChBUkdfUVVBTlRJLEFSR19CSVRSQVRFKSk7DQoJcHJpbnRmKCJt
YmYgJTAxZCAiLEFSR19NQVhfQkZSQU1FUyk7DQoJcHJpbnRmKCJicXIgJTAz
ZCAiLEFSR19NQVhfQkZSQU1FUz4wID8gQVJHX0JRVUFOVF9SQVRJTyA6IDAp
Ow0KCXByaW50ZigiKCAlLjNmIGJwcCkgIiwgKGRvdWJsZSlBUkdfQklUUkFU
RSoxMDAwL1hESU0vWURJTS9BUkdfRlJBTUVSQVRFKTsNCglwcmludGYoInNp
emUgJTZkICIsdG90YWxzaXplKTsNCglwcmludGYoIiggJTRkIGticHMgIiwo
aW50KSh0b3RhbHNpemUqOCpBUkdfRlJBTUVSQVRFLzEwMDApKTsNCglwcmlu
dGYoIi8gJS4zZiBicHApICIsKGRvdWJsZSl0b3RhbHNpemUqOC9YRElNL1lE
SU0pOw0KCXByaW50ZigiZW5jOiAlNi4xZiBmcHMsIGRlYzogJTYuMWYgZnBz
ICIsMS90b3RhbGVuY3RpbWUsIDEvdG90YWxkZWN0aW1lKTsNCglwcmludGYo
IlBTTlIgUCglZCk6ICU1LjJmICggJTUuMmYgLCAlNS4yZiA7ICU1LjRmICkg
IixQZnJhbWVzLFBwc25yLFBtaW5wc25yLFBtYXhwc25yLHNxcnQoUHZhcnBz
bnIvZmlsZW5yKSk7DQoJcHJpbnRmKCJJKCVkKTogJTUuMmYgKCAlNS4yZiAs
ICU1LjJmIDsgJTUuNGYgKSAiLElmcmFtZXMsSXBzbnIsSW1pbnBzbnIsSW1h
eHBzbnIsc3FydChJdmFycHNuci9maWxlbnIpKTsNCglpZiAoQmZyYW1lcykN
CgkJcHJpbnRmKCJCKCVkKTogJTUuMmYgKCAlNS4yZiAsICU1LjJmIDsgJTUu
NGYgKSAiLEJmcmFtZXMsQnBzbnIsQm1pbnBzbnIsQm1heHBzbnIsc3FydChC
dmFycHNuci9maWxlbnIpKTsNCglwcmludGYoIlxuIik7DQoJCQ0KLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8NCi8qCSAgICAgICAgICAgICAgICAgICBY
dmlEIFBBUlQgIFN0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KcmVsZWFzZV9hbGw6DQoN
CiAgCWlmIChlbmNfaGFuZGxlKQ0KCXsJDQoJCXN0YXR1cyA9IGVuY19zdG9w
KCk7DQoJCWlmIChzdGF0dXMpICAgIA0KCQkJcHJpbnRmKCJFbmNvcmUgUkVM
RUFTRSBwcm9ibGVtIHJldHVybiB2YWx1ZSAlZFxuIiwgc3RhdHVzKTsNCgl9
DQoNCiAgCWlmIChkZWNfaGFuZGxlKQ0KCXsNCgkgIAlzdGF0dXMgPSBkZWNf
c3RvcCgpOw0KCQlpZiAoc3RhdHVzKSAgICANCgkJCXByaW50ZigiRGVjb3Jl
IFJFTEVBU0UgcHJvYmxlbSByZXR1cm4gdmFsdWUgJWRcbiIsIHN0YXR1cyk7
DQoJfQ0KDQoNCmZyZWVfYWxsX21lbW9yeToNCglmcmVlKG91dF9idWZmZXIp
Ow0KCWZyZWUoZGl2eF9idWZmZXIpOw0KCWlmIChpbl9idWZmZXIpDQoJCWZv
ciAoaz0wO2s8TlVNQlVGRkVSUztrKyspDQoJCQlmcmVlKGluX2J1ZmZlcltr
XSk7DQoNCiAgcmV0dXJuIDA7DQp9DQo=
---595374472-2110913467-1029773386=:22031--