MakeClass ( 4 )

Jacek M. Holeczek (holeczek@us.edu.pl)
Mon, 19 Apr 1999 17:11:56 +0200 (MET DST)


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.

---559023410-851401618-924534716=:18119
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi,
Please find attached the new version of my MakeClass.cxx macro.
Possibly it works for arrays and other objects now.
Due to CINT limitations one cannot write 'x=leaf()[]; leaf()[]=y', one
must say 'tmp=leaf(); x=tmp[]; tmp[]=y'.
Due to CINT limitations one cannot use code generated by this macro for
two-dimensional arrays directly in CINT ( as a CINT macro ), one needs to
compile the analysis code and create the shared library.
Have fun,
Jacek.
P.S. The code for arrays is not really tested. Please test it and report
any problems. Jacek.

---559023410-851401618-924534716=:18119
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MakeClass.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990419171156.18119B@uranos.cto.us.edu.pl>
Content-Description: MakeClass.cxx

Ly9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQpJbnRfdCBN
YWtlQ2xhc3MoVFRyZWUgKnQsIGNvbnN0IGNoYXIgKmNsYXNzbmFtZSA9IDAp
DQp7DQovLz09PT0+DQovLyotKi0qLSotKi0qLSpHZW5lcmF0ZSBza2VsZXRv
biBhbmFseXNpcyBjbGFzcyBmb3IgdGhpcyBUcmVlKi0qLSotKi0qLSotKg0K
Ly8qLSogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLy8NCi8vICAgVGhlIGZvbGxvd2luZyBmaWxl
cyBhcmUgcHJvZHVjZWQ6IGNsYXNzbmFtZS5oeHggYW5kIGNsYXNzbmFtZS5j
eHgNCi8vICAgaWYgY2xhc3NuYW1lIGlzIE5VTEwsIGNsYXNzbmFtZSB3aWxs
IGJlIG5hbWVvZnRyZWUuDQovLw0KLy8gICBUaGUgZ2VuZXJhdGVkIGNvZGUg
aW4gY2xhc3NuYW1lLmh4eCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nOg0KLy8g
ICAgICAtIElkZW50aWZpY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBUcmVlIGFu
ZCBJbnB1dCBmaWxlIG5hbWUNCi8vICAgICAgLSBEZWZpbml0aW9uIG9mIGFu
YWx5c2lzIGNsYXNzIChkYXRhIGFuZCBmdW5jdGlvbnMpDQovLyAgICAgIC0g
dGhlIGZvbGxvd2luZyBjbGFzcyBmdW5jdGlvbnM6DQovLyAgICAgICAgIC1j
b25zdHJ1Y3RvciAoY29ubmVjdGluZyBieSBkZWZhdWx0IHRoZSBUcmVlIGZp
bGUpDQovLyAgICAgICAgIC1HZXRFdmVudChJbnRfdCBldmVudCkNCi8vICAg
ICAgICAgLUluaXQoVFRyZWUgKnRyZWUpIHRvIGluaXRpYWxpemUgYSBuZXcg
VFRyZWUNCi8vICAgICAgICAgLVNob3coSW50X3QgZXZlbnQpIHRvIHJlYWQg
YW5kIER1bXAgZXZlbnQNCi8vDQovLyAgIFRoZSBnZW5lcmF0ZWQgY29kZSBp
biBjbGFzc25hbWUuY3h4IGluY2x1ZGVzIG9ubHkgdGhlIG1haW4NCi8vICAg
YW5hbHlzaXMgZnVuY3Rpb24gTG9vcC4NCi8vDQovLyAgIFRvIHVzZSB0aGlz
IGZ1bmN0aW9uOg0KLy8gICAgICAtIGNvbm5lY3QgeW91ciBUcmVlIGZpbGUg
KGVnOiBURmlsZSBmKCJteWZpbGUucm9vdCIpOykNCi8vICAgICAgLSBULT5N
YWtlQ2xhc3MoIk15Q2xhc3MiKTsNCi8vICAgd2hlcmUgVCBpcyB0aGUgbmFt
ZSBvZiB0aGUgVHJlZSBpbiB0aGUgbXlmaWxlLnJvb3QgZmlsZSwNCi8vICAg
YW5kIE15Q2xhc3MuaHh4LCBNeUNsYXNzLmN4eCBhcmUgbmFtZXMgb2YgZmls
ZXMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uLg0KLy8gICBJbiBhIFJvb3Qg
c2Vzc2lvbiwgeW91IGNhbiBkbzoNCi8vICAgICAgUm9vdCA+IC5MIE15Q2xh
c3MuY3h4DQovLyAgICAgIFJvb3QgPiBNeUNsYXNzIHQNCi8vICAgICAgUm9v
dCA+IHQuR2V0RXZlbnQoMTIpOyAvLyBGaWxsIHQgZGF0YSBtZW1iZXJzIHdp
dGggZXZlbnQgbnVtYmVyIDEyDQovLyAgICAgIFJvb3QgPiB0LlNob3coKTsg
ICAgICAgLy8gU2hvdyB2YWx1ZXMgb2YgZXZlbnQgMTINCi8vICAgICAgUm9v
dCA+IHQuU2hvdygxNik7ICAgICAvLyBSZWFkIGFuZCBzaG93IHZhbHVlcyBv
ZiBldmVudCAxNg0KLy8gICAgICBSb290ID4gdC5Mb29wKCk7ICAgICAgIC8v
IExvb3Agb24gYWxsIGV2ZW50cw0KLy8NCi8vPT09PT4NCg0KLy8gQ2hlY2sg
YWdhaW5zdCBhbiBpbnZhbGlkIFRyZWUgcG9pbnRlcg0KICAgaWYgKCF0KSBy
ZXR1cm4gMTsNCiAgIGlmICghdC0+SXNBKCktPkluaGVyaXRzRnJvbSgiVFRy
ZWUiKSkgew0KICAgICAgcHJpbnRmKCJBdHRlbXB0IHRvIE1ha2VDbGFzcyBm
b3IgYSBub24tVFRyZWUgb2JqZWN0XG4iKTsNCiAgICAgIHJldHVybiAyOw0K
ICAgfQ0KDQovLyBDb25uZWN0IG91dHB1dCBmaWxlcw0KICAgY2hhciAqdGhl
YWQgPSBuZXcgY2hhclsyNTZdOw0KDQogICBpZiAoIWNsYXNzbmFtZSkgY2xh
c3NuYW1lID0gdC0+R2V0TmFtZSgpOw0KICAgc3ByaW50Zih0aGVhZCwiJXMu
aHh4IixjbGFzc25hbWUpOw0KICAgRklMRSAqZnAgPSBmb3Blbih0aGVhZCwi
dyIpOw0KICAgaWYgKCFmcCkgew0KICAgICAgcHJpbnRmKCJDYW5ub3Qgb3Bl
biBvdXRwdXQgZmlsZTolc1xuIix0aGVhZCk7DQogICAgICBkZWxldGUgW10g
dGhlYWQ7DQogICAgICByZXR1cm4gMzsNCiAgIH0NCiAgIGNoYXIgKnRjaW1w
ID0gbmV3IGNoYXJbMjU2XTsNCiAgIHNwcmludGYodGNpbXAsIiVzLmN4eCIs
Y2xhc3NuYW1lKTsNCiAgIEZJTEUgKmZwYyA9IGZvcGVuKHRjaW1wLCJ3Iik7
DQogICBpZiAoIWZwYykgew0KICAgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiBv
dXRwdXQgZmlsZTolc1xuIix0Y2ltcCk7DQogICAgICBkZWxldGUgW10gdGhl
YWQ7DQogICAgICBkZWxldGUgW10gdGNpbXA7DQogICAgICByZXR1cm4gMzsN
CiAgIH0NCiAgIGNoYXIgKnRyZWVmaWxlID0gbmV3IGNoYXJbMTAwMF07DQog
ICBpZiAodC0+R2V0RGlyZWN0b3J5KCkgJiYgdC0+R2V0RGlyZWN0b3J5KCkt
PkdldEZpbGUoKSkNCiAgICAgICAgICAgICAgICBzdHJjcHkodHJlZWZpbGUs
dC0+R2V0RGlyZWN0b3J5KCktPkdldEZpbGUoKS0+R2V0TmFtZSgpKTsNCiAg
IGVsc2UgICAgICAgICBzdHJjcHkodHJlZWZpbGUsIk1lbW9yeSBEaXJlY3Rv
cnkiKTsNCg0KLy89PT09PT09PT09PT09PT09PT09PT09R2VuZXJhdGUgY2xh
c3NuYW1lLmh4eD09PT09PT09PT09PT09PT09PT09PQ0KICAgLy8gUHJpbnQg
aGVhZGVyDQogICBUT2JqQXJyYXkgKmxlYXZlcyA9IHQtPkdldExpc3RPZkxl
YXZlcygpOw0KICAgSW50X3QgbmxlYXZlcyA9IGxlYXZlcy0+R2V0RW50cmll
c0Zhc3QoKTsNCiAgIFREYXRpbWUgdGQ7DQogICBmcHJpbnRmKGZwLCIvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4iKTsNCiAgIGZwcmludGYoZnAsIi8vICAgVGhpcyBjbGFz
cyBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBcbiIpOw0KICAg
ZnByaW50ZihmcCwiLy8gICAoJXMgYnkgUk9PVCB2ZXJzaW9uJXMpXG4iLHRk
LkFzU3RyaW5nKCksZ1JPT1QtPkdldFZlcnNpb24oKSk7DQogICBmcHJpbnRm
KGZwLCIvLyAgIGZyb20gVFRyZWUgJXMvJXNcbiIsdC0+R2V0TmFtZSgpLHQt
PkdldFRpdGxlKCkpOw0KICAgZnByaW50ZihmcCwiLy8gICBmb3VuZCBvbiBm
aWxlOiAlc1xuIix0cmVlZmlsZSk7DQogICBmcHJpbnRmKGZwLCIvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vXG4iKTsNCiAgIGZwcmludGYoZnAsIlxuIik7DQogICBmcHJpbnRm
KGZwLCJcbiIpOw0KICAgZnByaW50ZihmcCwiI2lmbmRlZiAlc19oeHhcbiIs
Y2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIiNkZWZpbmUgJXNfaHh4XG4i
LGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCJcbiIpOw0KICAgZnByaW50
ZihmcCwiI2lmbmRlZiBfX0NJTlRfX1xuIik7DQogICBmcHJpbnRmKGZwLCIj
aW5jbHVkZSBcIlRST09ULmhcIlxuIik7DQogICBmcHJpbnRmKGZwLCIjaW5j
bHVkZSBcIlRCcmFuY2guaFwiXG4iKTsNCiAgIGZwcmludGYoZnAsIiNpbmNs
dWRlIFwiVFRyZWUuaFwiXG4iKTsNCiAgIGZwcmludGYoZnAsIiNpbmNsdWRl
IFwiVEZpbGUuaFwiXG4iKTsNCiAgIGZwcmludGYoZnAsIiNlbHNlXG4iKTsN
CiAgIGZwcmludGYoZnAsImNsYXNzIFRCcmFuY2g7XG4iKTsNCiAgIGZwcmlu
dGYoZnAsImNsYXNzIFRUcmVlO1xuIik7DQogICBmcHJpbnRmKGZwLCJjbGFz
cyBURmlsZTtcbiIpOw0KICAgZnByaW50ZihmcCwiI2VuZGlmXG4iKTsNCiAg
IGZwcmludGYoZnAsIlxuIik7DQogICBmcHJpbnRmKGZwLCJjbGFzcyAlcyB7
XG4iLGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCIgICBwdWJsaWMgOlxu
Iik7DQogICBmcHJpbnRmKGZwLCIgICBUVHJlZSAgICAgICAgICAgKmZUcmVl
OyAvLyBwb2ludGVyIHRvIHRoZSBhbmFseXplZCBUVHJlZVxuIik7DQogICBm
cHJpbnRmKGZwLCIgICBJbnRfdCAgICAgICAgICAgZkV2ZW50OyAvLyBjdXJy
ZW50IEV2ZW50IG51bWJlclxuIik7DQoNCg0KLy8gRmlyc3QgbG9vcCBvbiBh
bGwgYnJhbmNoZXMgdG8gZ2VuZXJhdGUgYnJhbmNoIGRlY2xhcmF0aW9ucw0K
ICAgZnByaW50ZihmcCwiICAgLy8gZGVjbGFyYXRpb24gb2YgYnJhbmNoZXNc
biIpOw0KICAgSW50X3QgbmIsIGk7DQogICBuYiA9IHQtPkdldExpc3RPZkJy
YW5jaGVzKCkuR2V0RW50cmllc0Zhc3QoKTsNCiAgIGZvciAoaT0wO2k8bmI7
aSsrKSAgew0KICAgICAgYnJhbmNoID0gKFRCcmFuY2gqKXQtPkdldExpc3RP
ZkJyYW5jaGVzKCkuVW5jaGVja2VkQXQoaSk7DQogICAgICBmcHJpbnRmKGZw
LCIlcyUtMTVzIGJyYW5jaF8lcztcbiIsIiAgICIsIkludF90IiwgYnJhbmNo
LT5HZXROYW1lKCkpOw0KICAgICAgZnByaW50ZihmcCwiJXMlLTE1cyAqYnJh
bmNoX3BvaW50ZXJfJXM7XG4iLCIgICAiLCJUQnJhbmNoIiwgYnJhbmNoLT5H
ZXROYW1lKCkpOw0KICAgfQ0KDQovLyBGaXJzdCBsb29wIG9uIGFsbCBsZWF2
ZXMgdG8gZ2VuZXJhdGUgbGVhZiBkZWNsYXJhdGlvbnMNCiAgIGZwcmludGYo
ZnAsIiAgIC8vIGRlY2xhcmF0aW9uIG9mIGxlYXZlc1xuIik7DQogICBJbnRf
dCBsZW4sIGw7DQogICBUTGVhZiAqbGVhZmNvdW50Ow0KICAgVExlYWZPYmpl
Y3QgKmxlYWZvYmo7DQogICBjaGFyICpibmFtZTsNCiAgIGNvbnN0IGNoYXIg
KmhlYWRPSyAgPSAiICAgIjsNCiAgIGNvbnN0IGNoYXIgKmhlYWRjb20gPSAi
IC8vIjsNCiAgIGNvbnN0IGNoYXIgKmhlYWQ7DQogICBjaGFyIGJyYW5jaG5h
bWVbNjRdOw0KICAgZm9yIChsPTA7bDxubGVhdmVzO2wrKykgew0KICAgICAg
VExlYWYgKmxlYWYgPSAoVExlYWYqKWxlYXZlcy0+VW5jaGVja2VkQXQobCk7
DQogICAgICBsZW4gPSBsZWFmLT5HZXRMZW4oKTsNCiAgICAgIGxlYWZjb3Vu
dCA9bGVhZi0+R2V0TGVhZkNvdW50KCk7DQogICAgICBUQnJhbmNoICpicmFu
Y2ggPSBsZWFmLT5HZXRCcmFuY2goKTsNCiAgICAgIGlmIChsZWFmY291bnQp
IHN0cmNweShicmFuY2huYW1lLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgICAg
IGVsc2UgICAgICAgICAgIHN0cmNweShicmFuY2huYW1lLGxlYWYtPkdldFRp
dGxlKCkpOw0KICAgICAgY2hhciAqdHdvZGltID0gKGNoYXIqKXN0cnN0cihs
ZWFmLT5HZXRUaXRsZSgpLCJdWyIpOw0KICAgICAgYm5hbWUgPSBicmFuY2hu
YW1lOw0KICAgICAgd2hpbGUgKCpibmFtZSkge2lmICgqYm5hbWUgPT0gJy4n
KSAqYm5hbWU9J18nOyBibmFtZSsrO30NCiAgICAgIGlmIChicmFuY2gtPklz
QSgpID09IFRCcmFuY2hPYmplY3Q6OkNsYXNzKCkpIHsNCiAgICAgICAgIGlm
IChicmFuY2gtPkdldExpc3RPZkJyYW5jaGVzKCktPkdldEVudHJpZXNGYXN0
KCkpIGNvbnRpbnVlOw0KICAgICAgICAgbGVhZm9iaiA9IChUTGVhZk9iamVj
dCopbGVhZjsNCiAgICAgICAgIGlmIChsZWFmb2JqLT5HZXRDbGFzcygpKSBo
ZWFkID0gaGVhZE9LOw0KICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAg
ICAgIGhlYWQgPSBoZWFkY29tOw0KICAgICAgICAgZnByaW50ZihmcCwiJXMl
LTE1cyAqbGVhZl8lcztcbiIsaGVhZCxsZWFmb2JqLT5HZXRUeXBlTmFtZSgp
LGxlYWZvYmotPkdldE5hbWUoKSk7DQogICAgICAgICBmcHJpbnRmKGZwLCIl
cyUtMTVzIColcygpIHsiLGhlYWQsbGVhZm9iai0+R2V0VHlwZU5hbWUoKSxs
ZWFmb2JqLT5HZXROYW1lKCkpOw0KICAgICAgICAgZnByaW50ZihmcCwiaWYg
KGJyYW5jaF8lcykgcmV0dXJuIGxlYWZfJXM7IixicmFuY2gtPkdldE5hbWUo
KSxsZWFmb2JqLT5HZXROYW1lKCkpOw0KICAgICAgICAgZnByaW50ZihmcCwi
YnJhbmNoX3BvaW50ZXJfJXMtPkdldEV2ZW50KGZFdmVudCk7IixicmFuY2gt
PkdldE5hbWUoKSk7DQogICAgICAgICBmcHJpbnRmKGZwLCJicmFuY2hfJXMg
PSAxO3JldHVybiBsZWFmXyVzO31cbiIsYnJhbmNoLT5HZXROYW1lKCksbGVh
Zm9iai0+R2V0TmFtZSgpKTsNCiAgICAgICAgIGNvbnRpbnVlOw0KICAgICAg
fQ0KICAgICAgaWYgKGxlYWZjb3VudCkgew0KICAgICAgICAgbGVuID0gbGVh
ZmNvdW50LT5HZXRNYXhpbXVtKCk7DQogICAgICAgICBpZiAodHdvZGltKSB7
DQogICAgICAgICAgICBmcHJpbnRmKGZwLCIgICAlLTE1cyBsZWFmXyVzWyVk
XSVzO1xuIixsZWFmLT5HZXRUeXBlTmFtZSgpLGJyYW5jaG5hbWUsbGVuLChj
aGFyKikodHdvZGltKzEpKTsNCiAgICAgICAgICAgIC8vIGZwcmludGYoZnAs
IiAgICUtMTVzICgmJXMoKSlbJWRdJXMgeyIsbGVhZi0+R2V0VHlwZU5hbWUo
KSxicmFuY2huYW1lLGxlbiwoY2hhciopKHR3b2RpbSsxKSk7DQogICAgICAg
ICAgICBmcHJpbnRmKGZwLCIgICAlLTE1cyAoKiVzKCkpJXMgeyIsbGVhZi0+
R2V0VHlwZU5hbWUoKSxicmFuY2huYW1lLChjaGFyKikodHdvZGltKzEpKTsN
CiAgICAgICAgICAgIGZwcmludGYoZnAsImlmIChicmFuY2hfJXMpIHJldHVy
biBsZWFmXyVzOyIsYnJhbmNoLT5HZXROYW1lKCksYnJhbmNobmFtZSk7DQog
ICAgICAgICAgICBmcHJpbnRmKGZwLCJicmFuY2hfcG9pbnRlcl8lcy0+R2V0
RXZlbnQoZkV2ZW50KTsiLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgICAgICAg
ICAgIGZwcmludGYoZnAsImJyYW5jaF8lcyA9IDE7cmV0dXJuIGxlYWZfJXM7
fVxuIixicmFuY2gtPkdldE5hbWUoKSxicmFuY2huYW1lKTsNCiAgICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgICBmcHJpbnRmKGZwLCIgICAlLTE1cyBs
ZWFmXyVzWyVkXTtcbiIsbGVhZi0+R2V0VHlwZU5hbWUoKSwgYnJhbmNobmFt
ZSxsZW4pOw0KICAgICAgICAgICAgLy8gZnByaW50ZihmcCwiICAgJS0xNXMg
KCYlcygpKVslZF0geyIsbGVhZi0+R2V0VHlwZU5hbWUoKSxicmFuY2huYW1l
LGxlbik7DQogICAgICAgICAgICBmcHJpbnRmKGZwLCIgICAlLTE1cyAqcygp
IHsiLGxlYWYtPkdldFR5cGVOYW1lKCksYnJhbmNobmFtZSk7DQogICAgICAg
ICAgICBmcHJpbnRmKGZwLCJpZiAoYnJhbmNoXyVzKSByZXR1cm4gbGVhZl8l
czsiLGJyYW5jaC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgICAgICAg
ICAgZnByaW50ZihmcCwiYnJhbmNoX3BvaW50ZXJfJXMtPkdldEV2ZW50KGZF
dmVudCk7IixicmFuY2gtPkdldE5hbWUoKSk7DQogICAgICAgICAgICBmcHJp
bnRmKGZwLCJicmFuY2hfJXMgPSAxO3JldHVybiBsZWFmXyVzO31cbiIsYnJh
bmNoLT5HZXROYW1lKCksYnJhbmNobmFtZSk7DQogICAgICAgICB9DQogICAg
ICB9IGVsc2Ugew0KICAgICAgICAgZnByaW50ZihmcCwiICAgJS0xNXMgbGVh
Zl8lcztcbiIsbGVhZi0+R2V0VHlwZU5hbWUoKSxicmFuY2huYW1lKTsNCiAg
ICAgICAgIGZwcmludGYoZnAsIiAgICUtMTVzICYlcygpIHsiLGxlYWYtPkdl
dFR5cGVOYW1lKCksYnJhbmNobmFtZSk7DQogICAgICAgICBmcHJpbnRmKGZw
LCJpZiAoYnJhbmNoXyVzKSByZXR1cm4gbGVhZl8lczsiLGJyYW5jaC0+R2V0
TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgICAgICAgZnByaW50ZihmcCwiYnJh
bmNoX3BvaW50ZXJfJXMtPkdldEV2ZW50KGZFdmVudCk7IixicmFuY2gtPkdl
dE5hbWUoKSk7DQogICAgICAgICBmcHJpbnRmKGZwLCJicmFuY2hfJXMgPSAx
O3JldHVybiBsZWFmXyVzO31cbiIsYnJhbmNoLT5HZXROYW1lKCksYnJhbmNo
bmFtZSk7DQogICAgICB9DQogICB9DQoNCi8vIGdlbmVyYXRlIGNsYXNzIG1l
bWJlciBmdW5jdGlvbnMgcHJvdG90eXBlcw0KICAgZnByaW50ZihmcCwiXG4i
KTsNCiAgIGZwcmludGYoZnAsIiAgICVzKFRUcmVlICp0cmVlID0gMCk7XG4i
LGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCIgICB+JXMoKSB7O31cbiIs
Y2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIiAgIEludF90IEdldEV2ZW50
KEludF90IGV2ZW50KTtcbiIpOw0KICAgZnByaW50ZihmcCwiICAgdm9pZCBJ
bml0KFRUcmVlICp0cmVlKTtcbiIpOw0KICAgZnByaW50ZihmcCwiICAgdm9p
ZCBMb29wKCk7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIHZvaWQgU2hvdyhJ
bnRfdCBldmVudCA9IC0xKTtcbiIpOw0KICAgZnByaW50ZihmcCwifTtcbiIp
Ow0KICAgZnByaW50ZihmcCwiXG4iKTsNCiAgIGZwcmludGYoZnAsIiNlbmRp
ZlxuIik7DQogICBmcHJpbnRmKGZwLCJcbiIpOw0KDQogICBmcHJpbnRmKGZw
LCIjaWZkZWYgJXNfY3h4XG4iLGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZw
LCJcbiIpOw0KDQovLyBnZW5lcmF0ZSBjb2RlIGZvciBjbGFzcyBjb25zdHJ1
Y3Rvcg0KICAgZnByaW50ZihmcCwiJXM6OiVzKFRUcmVlICp0cmVlKVxuIixj
bGFzc25hbWUsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIntcbiIpOw0K
ICAgZnByaW50ZihmcCwiICAgLy8gSWYgcGFyYW1ldGVyIHRyZWUgaXMgbm90
IHNwZWNpZmllZCAob3IgemVybyksIGNvbm5lY3QgdGhlIGZpbGVcbiIpOw0K
ICAgZnByaW50ZihmcCwiICAgLy8gdXNlZCB0byBnZW5lcmF0ZSB0aGlzIGNs
YXNzIGFuZCByZWFkIHRoZSBUcmVlLlxuIik7DQogICBmcHJpbnRmKGZwLCIg
ICBpZiAodHJlZSA9PSAwKSB7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgICAg
IFRGaWxlICpmID0gKFRGaWxlKilnUk9PVC0+R2V0TGlzdE9mRmlsZXMoKS0+
RmluZE9iamVjdChcIiVzXCIpO1xuIix0cmVlZmlsZSk7DQogICBmcHJpbnRm
KGZwLCIgICAgICBpZiAoIWYpIHtcbiIpOw0KICAgZnByaW50ZihmcCwiICAg
ICAgICAgZiA9IG5ldyBURmlsZShcIiVzXCIpO1xuIix0cmVlZmlsZSk7DQog
ICBmcHJpbnRmKGZwLCIgICAgICB9XG4iKTsNCiAgIGZwcmludGYoZnAsIiAg
ICAgIHRyZWUgPSAoVFRyZWUqKWdEaXJlY3RvcnktPkdldChcIiVzXCIpO1xu
XG4iLHQtPkdldE5hbWUoKSk7DQogICBmcHJpbnRmKGZwLCIgICB9XG4iKTsN
CiAgIGZwcmludGYoZnAsIiAgIEluaXQodHJlZSk7XG4iKTsNCiAgIGZwcmlu
dGYoZnAsIn1cbiIpOw0KICAgZnByaW50ZihmcCwiXG4iKTsNCg0KLy8gZ2Vu
ZXJhdGUgY29kZSBmb3IgY2xhc3MgbWVtYmVyIGZ1bmN0aW9uIEdldEV2ZW50
KCkNCiAgIGZwcmludGYoZnAsIkludF90ICVzOjpHZXRFdmVudChJbnRfdCBl
dmVudClcbiIsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIntcbiIpOw0K
ICAgZnByaW50ZihmcCwiICAgLy8gUHJlcGFyZSB0byByZWFkIHNwZWNpZmll
ZCBldmVudCBmcm9tIHRoZSBUcmVlLlxuIik7DQogICBmcHJpbnRmKGZwLCIg
ICBpZiAoIWZUcmVlKSByZXR1cm4gMDtcbiIpOw0KICAgZnByaW50ZihmcCwi
ICAgLy8gaWYgKGZFdmVudD09ZXZlbnQpIHJldHVybiAxO1xuIik7DQogICBu
YiA9IHQtPkdldExpc3RPZkJyYW5jaGVzKCkuR2V0RW50cmllc0Zhc3QoKTsN
CiAgIGZvciAoaT0wO2k8bmI7aSsrKSAgew0KICAgICAgYnJhbmNoID0gKFRC
cmFuY2gqKXQtPkdldExpc3RPZkJyYW5jaGVzKCkuVW5jaGVja2VkQXQoaSk7
DQogICAgICBmcHJpbnRmKGZwLCIgICBicmFuY2hfJXMgPSAwO1xuIixicmFu
Y2gtPkdldE5hbWUoKSk7DQogICB9DQogICBmcHJpbnRmKGZwLCIgICBmRXZl
bnQgPSBldmVudDtcbiIpOw0KICAgZnByaW50ZihmcCwiICAgcmV0dXJuIDE7
XG4iKTsNCiAgIGZwcmludGYoZnAsIn1cbiIpOw0KICAgZnByaW50ZihmcCwi
XG4iKTsNCg0KDQovLyBnZW5lcmF0ZSBjb2RlIGZvciBjbGFzcyBtZW1iZXIg
ZnVuY3Rpb24gSW5pdCgpDQogICBmcHJpbnRmKGZwLCJ2b2lkICVzOjpJbml0
KFRUcmVlICp0cmVlKVxuIixjbGFzc25hbWUpOw0KICAgZnByaW50ZihmcCwi
e1xuIik7DQogICBmcHJpbnRmKGZwLCIgICAvLyBTZXQgYnJhbmNoIGFkZHJl
c3Nlcy5cbiIpOw0KICAgZnByaW50ZihmcCwiICAgaWYgKHRyZWUgPT0gMCkg
cmV0dXJuO1xuIik7DQogICBmcHJpbnRmKGZwLCIgICBmVHJlZSA9IHRyZWU7
XG4iKTsNCiAgIGZvciAobD0wO2w8bmxlYXZlcztsKyspIHsNCiAgICAgIFRM
ZWFmICpsZWFmID0gKFRMZWFmKilsZWF2ZXMtPlVuY2hlY2tlZEF0KGwpOw0K
ICAgICAgbGVuID0gbGVhZi0+R2V0TGVuKCk7DQogICAgICBsZWFmY291bnQg
PWxlYWYtPkdldExlYWZDb3VudCgpOw0KICAgICAgVEJyYW5jaCAqYnJhbmNo
ID0gbGVhZi0+R2V0QnJhbmNoKCk7DQogICAgICBpZiAobGVhZmNvdW50KSBz
dHJjcHkoYnJhbmNobmFtZSxicmFuY2gtPkdldE5hbWUoKSk7DQogICAgICBl
bHNlICAgICAgICAgICBzdHJjcHkoYnJhbmNobmFtZSxsZWFmLT5HZXRUaXRs
ZSgpKTsNCiAgICAgIGJuYW1lID0gYnJhbmNobmFtZTsNCiAgICAgIHdoaWxl
ICgqYm5hbWUpIHtpZiAoKmJuYW1lID09ICcuJykgKmJuYW1lPSdfJzsgYm5h
bWUrKzt9DQogICAgICBjaGFyICpicmFrID0gc3Ryc3RyKGJyYW5jaG5hbWUs
IlsiKTsNCiAgICAgIGlmIChicmFrKSAqYnJhayA9IDA7DQogICAgICBoZWFk
ID0gaGVhZE9LOw0KICAgICAgaWYgKGJyYW5jaC0+SXNBKCkgPT0gVEJyYW5j
aE9iamVjdDo6Q2xhc3MoKSkgew0KICAgICAgICAgaWYgKGJyYW5jaC0+R2V0
TGlzdE9mQnJhbmNoZXMoKS0+R2V0RW50cmllc0Zhc3QoKSkgY29udGludWU7
DQogICAgICAgICBsZWFmb2JqID0gKFRMZWFmT2JqZWN0KilsZWFmOw0KICAg
ICAgICAgaWYgKCFsZWFmb2JqLT5HZXRDbGFzcygpKSBoZWFkID0gaGVhZGNv
bTsNCiAgICAgICAgIHN0cmNweShicmFuY2huYW1lLGJyYW5jaC0+R2V0TmFt
ZSgpKTsNCiAgICAgIH0NCiAgICAgIGlmIChsZWFmY291bnQpIGxlbiA9IGxl
YWZjb3VudC0+R2V0TWF4aW11bSgpKzE7DQogICAgICBpZiAobGVuID4gMSkg
ZnByaW50ZihmcCwiJXNmVHJlZS0+U2V0QnJhbmNoQWRkcmVzcyhcIiVzXCIs
bGVhZl8lcyk7XG4iLGhlYWQsYnJhbmNoLT5HZXROYW1lKCksYnJhbmNobmFt
ZSk7DQogICAgICBlbHNlICAgICAgICAgZnByaW50ZihmcCwiJXNmVHJlZS0+
U2V0QnJhbmNoQWRkcmVzcyhcIiVzXCIsJmxlYWZfJXMpO1xuIixoZWFkLGJy
YW5jaC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgfQ0KICAgZnByaW50
ZihmcCwiICAgZlRyZWUtPlNldEJyYW5jaFN0YXR1cyhcIipcIiwwKTsgIC8v
IGRpc2FibGUgYWxsIGJyYW5jaGVzXG4iKTsNCiAgIG5iID0gdC0+R2V0TGlz
dE9mQnJhbmNoZXMoKS5HZXRFbnRyaWVzRmFzdCgpOw0KICAgZm9yIChpPTA7
aTxuYjtpKyspICB7DQogICAgICBicmFuY2ggPSAoVEJyYW5jaCopdC0+R2V0
TGlzdE9mQnJhbmNoZXMoKS5VbmNoZWNrZWRBdChpKTsNCiAgICAgIGZwcmlu
dGYoZnAsIiAgIGJyYW5jaF8lcyA9IDA7XG4iLGJyYW5jaC0+R2V0TmFtZSgp
KTsNCiAgICAgIGZwcmludGYoZnAsIiAgIGJyYW5jaF9wb2ludGVyXyVzID0g
ZlRyZWUtPkdldEJyYW5jaChcIiVzXCIpO1xuIixicmFuY2gtPkdldE5hbWUo
KSxicmFuY2gtPkdldE5hbWUoKSk7DQogICB9DQogICBmcHJpbnRmKGZwLCIg
ICBmRXZlbnQgPSAtMTtcbiIpOw0KICAgZnByaW50ZihmcCwifVxuIik7DQog
ICBmcHJpbnRmKGZwLCJcbiIpOw0KDQovLyBnZW5lcmF0ZSBjb2RlIGZvciBj
bGFzcyBtZW1iZXIgZnVuY3Rpb24gU2hvdygpDQogICBmcHJpbnRmKGZwLCJ2
b2lkICVzOjpTaG93KEludF90IGV2ZW50KVxuIixjbGFzc25hbWUpOw0KICAg
ZnByaW50ZihmcCwie1xuIik7DQogICBmcHJpbnRmKGZwLCIgICAvLyBQcmlu
dCBjb250ZW50cyBvZiBldmVudC5cbiIpOw0KICAgZnByaW50ZihmcCwiICAg
Ly8gSWYgZXZlbnQgaXMgbm90IHNwZWNpZmllZCwgcHJpbnQgY3VycmVudCBl
dmVudC5cbiIpOw0KDQogICBmcHJpbnRmKGZwLCIgICBpZiAoIWZUcmVlKSBy
ZXR1cm47XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIGlmIChldmVudD49MCkg
ZkV2ZW50ID0gZXZlbnQ7IGVsc2UgZXZlbnQgPSBmRXZlbnQ7XG4iKTsNCiAg
IGZwcmludGYoZnAsIiAgIGlmIChmRXZlbnQ8MCkgcmV0dXJuO1xuIik7DQog
ICBmcHJpbnRmKGZwLCIgICBmVHJlZS0+U2V0QnJhbmNoU3RhdHVzKFwiKlwi
LDEpOyAgLy8gZW5hYmxlIGFsbCBicmFuY2hlc1xuIik7DQogICBmcHJpbnRm
KGZwLCIgICBmVHJlZS0+U2hvdyhmRXZlbnQpO1xuIik7DQogICBmcHJpbnRm
KGZwLCIgICBmVHJlZS0+U2V0QnJhbmNoU3RhdHVzKFwiKlwiLDApOyAgLy8g
ZGlzYWJsZSBhbGwgYnJhbmNoZXNcbiIpOw0KICAgbmIgPSB0LT5HZXRMaXN0
T2ZCcmFuY2hlcygpLkdldEVudHJpZXNGYXN0KCk7DQogICBmb3IgKGk9MDtp
PG5iO2krKykgIHsNCiAgICAgIGJyYW5jaCA9IChUQnJhbmNoKil0LT5HZXRM
aXN0T2ZCcmFuY2hlcygpLlVuY2hlY2tlZEF0KGkpOw0KICAgICAgZnByaW50
ZihmcCwiICAgYnJhbmNoXyVzID0gMTtcbiIsYnJhbmNoLT5HZXROYW1lKCkp
Ow0KICAgfQ0KICAgZnByaW50ZihmcCwifVxuIik7DQogICBmcHJpbnRmKGZw
LCJcbiIpOw0KDQogICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0KICAgZnBy
aW50ZihmcCwiXG4iKTsNCg0KLy89PT09PT09PT09PT09PT09PT09PT09R2Vu
ZXJhdGUgY2xhc3NuYW1lLmN4eD09PT09PT09PT09PT09PT09PT09PQ0KLy8g
Z2VuZXJhdGUgY29kZSBmb3IgY2xhc3MgbWVtYmVyIGZ1bmN0aW9uIExvb3Ao
KQ0KICAgZnByaW50ZihmcGMsIiNpZm5kZWYgJXNfY3h4XG4iLGNsYXNzbmFt
ZSk7DQogICBmcHJpbnRmKGZwYywiI2RlZmluZSAlc19jeHhcbiIsY2xhc3Nu
YW1lKTsNCiAgIGZwcmludGYoZnBjLCIjZW5kaWZcbiIpOw0KICAgZnByaW50
ZihmcGMsIlxuIik7DQogICBmcHJpbnRmKGZwYywiI2luY2x1ZGUgXCIlc1wi
XG4iLHRoZWFkKTsNCiAgIGZwcmludGYoZnBjLCJcbiIpOw0KICAgZnByaW50
ZihmcGMsIiNpZm5kZWYgX19DSU5UX19cbiIpOw0KICAgZnByaW50ZihmcGMs
Ii8vIFBsYWNlIGhlcmUgYWxsIFJPT1QgcmVsYXRlZCBpbmNsdWRlcyB0aGF0
IHlvdSBuZWVkLlxuIik7DQogICBmcHJpbnRmKGZwYywiI2VuZGlmXG4iKTsN
CiAgIGZwcmludGYoZnBjLCJcbiIpOw0KICAgZnByaW50ZihmcGMsInZvaWQg
JXM6Okxvb3AoKVxuIixjbGFzc25hbWUpOw0KICAgZnByaW50ZihmcGMsIntc
biIpOw0KICAgZnByaW50ZihmcGMsIlxuICAgLy8gVGhpcyBpcyB0aGUgbG9v
cCBza2VsZXRvbi5cbiIpOw0KICAgZnByaW50ZihmcGMsIiAgIGlmIChmVHJl
ZSA9PSAwKSByZXR1cm47XG4iKTsNCiAgIGZwcmludGYoZnBjLCJcbiAgIFN0
YXRfdCBuZW50cmllcyA9IGZUcmVlLT5HZXRFbnRyaWVzKCk7XG4iKTsNCiAg
IGZwcmludGYoZnBjLCJcbiAgIEludF90IG5lID0gMCwgbmV2ZW50cyA9IDA7
XG4iKTsNCiAgIGZwcmludGYoZnBjLCIgICBmb3IgKEludF90IGk9MDsgaTxu
ZW50cmllczsgaSsrKSB7XG4iKTsNCiAgIGZwcmludGYoZnBjLCIgICAgICBu
ZSA9IGZUcmVlLT5HZXRFdmVudChpKTsgbmV2ZW50cyArPSBuZTtcbiIpOw0K
ICAgZnByaW50ZihmcGMsIiAgIH1cbiIpOw0KICAgZnByaW50ZihmcGMsIn1c
biIpOw0KICAgZnByaW50ZihmcGMsIlxuIik7DQoNCiAgIHByaW50ZigiRmls
ZXM6ICVzIGFuZCAlcyBnZW5lcmF0ZWQgZnJvbSBUcmVlOiAlc1xuIix0aGVh
ZCx0Y2ltcCx0LT5HZXROYW1lKCkpOw0KICAgZGVsZXRlIFtdIHRoZWFkOw0K
ICAgZGVsZXRlIFtdIHRjaW1wOw0KICAgZGVsZXRlIFtdIHRyZWVmaWxlOw0K
ICAgZmNsb3NlKGZwKTsNCiAgIGZjbG9zZShmcGMpOw0KDQogICByZXR1cm4g
MDsNCn0NCg0KLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K

---559023410-851401618-924534716=:18119--