X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=aU1KkcJ/FxkBfu2AK/R2g9/XHxkdzZlStOfnWHXjFrY=; b=mYW8MVnjPQdTU4GFf6oQTsOnjDCEGHOnpEMcjm9I0tBcjV7PgMak6Wkj2hcV65n2W0 gHM2Kx8Kx5i4TgBoioZ33/wcsGW31TAu8x3RfmXNfdDZTJr2WlWq4sI121ANL/RYNy1k MyqFn37bW41/ISsLh6MijpciiWj3Ed97g5Ywp/xO3allP8YMDZ5Iq/1jh4IYB4pJANj2 1DfZcMe3rnV1YY5KO5/DDzIcALkcibTg44DiPmwmTZOO2l+KuAB0JOLYbdpM2K8u+PZ/ JrfnUw3B2UXgJRhwluoPm2w5LShj36I+GdVOBvxpFbEWj12D0FwC0dCeL7gjShem0tUA shWg== MIME-Version: 1.0 X-Received: by 10.182.117.195 with SMTP id kg3mr14547509obb.17.1391142223143; Thu, 30 Jan 2014 20:23:43 -0800 (PST) In-Reply-To: <kp224q$20f$1@ger.gmane.org> References: <CACPio-6QgmXwj8LwYoR6zq1hfXHh8ymmnDNhrJd5oEVg6pt0Gg AT mail DOT gmail DOT com> <CACPio-7zTB0N7x8hGALcZzGgaCAexKr5DUb4imd=QAzH7Pj61A AT mail DOT gmail DOT com> <CAG4ve9Jm00oyLb7uLgQjSTjfBpXOL9a0tXkjAQx09325ibChPg AT mail DOT gmail DOT com> <CACPio-7ucw-yxsykwOyV+p=+xUqKbwHLhQv1ODNS9Qd+gf3GPQ AT mail DOT gmail DOT com> <CAG4ve9KAB6POcUvMhh3KsCt3eRyWus8L+V1WFyupgL-4QckRJA AT mail DOT gmail DOT com> <CACPio-7yV1a08b99NyjrGtD0b7qdKWxLPQxA0nUr3qAL9yz7pQ AT mail DOT gmail DOT com> <CAG4ve9KKG_4Z6V0V3HCjAjo6jwD=t5AmwGdVgGqYJbM9q6B_zA AT mail DOT gmail DOT com> <CACPio-66SHLWYAusnwq0acYBL+QX0uwuuT8zeUotYE90a5pCHQ AT mail DOT gmail DOT com> <CAG4ve9KeBYS_Gs_5y2o6ZWVREq0tEFtJiEQbX692SbRzTdSxgw AT mail DOT gmail DOT com> <CAG4ve9+wP0VAnXAFpB+gJQHUphnNTYn71_wBphuMafL09k9YnQ AT mail DOT gmail DOT com> <koto2c$r5i$1 AT ger DOT gmane DOT org> <CAG4ve9KJeGATHFoUuosCnOeUNa9TcunM1+C9EJwxAbTQ3yU0dw AT mail DOT gmail DOT com> <kp224q$20f$1 AT ger DOT gmane DOT org> Date: Fri, 31 Jan 2014 08:23:42 +0400 Message-ID: <CAG4ve9+RgrKFe7-F13QxMqb4sx3jYqQuaFxwzPnVuayPq9U8fw@mail.gmail.com> Subject: Re: [geda-user] Re: refdes renumber From: =?KOI8-R?B?4czFy9PFyiDowdLYy8/X08vJyg==?= <svetonomer AT gmail DOT com> To: geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=089e0149c5060b3ee304f13c8af8 Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --089e0149c5060b3ee304f13c8af8 Content-Type: multipart/alternative; boundary=089e0149c5060b3edf04f13c8af6 --089e0149c5060b3edf04f13c8af6 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: quoted-printable 2013-06-09 Kai-Martin Knaak <kmk AT familieknaak DOT de> > =E1=CC=C5=CB=D3=C5=CA =E8=C1=D2=D8=CB=CF=D7=D3=CB=C9=CA wrote: > > >>> My most pressing wish with regard to renumber scripts: > >>>Play nice with multi part symbols. > >>> > >>>It is good practice to split power pins or function blocks of > >>>integrated components into separate symbols. Thy all share the same > >>>value of the refdes attribute. This sameness of refdes values lets > >>>gedalib know that two symbols are meant to refer to the same > >>>component. The same applies to slotted symbols. > > Attach Example please. I do not using separate symbols, but I have > > interesting. > > I attached my symbols for a dual operational amplifier. The symbol > opamp_dual.sym contains the triangle with input and output pins. It > features two slots for the two opamps the device contains. > > Then there is opamp_dual_pwr.sym . This is a rectangle with just the > two supply pins of the component. I usually put all the power symbol > somewhere on the bottom of the schematic, connect them to power nets > and attach the necessary 100 nF capacitors. That way, power connection > is explicitely visible in the schematic. But it does not clutter the > functional part of the schematic. See the attached PDF of my favorite > photo diode amplifier for an example. > > ---<)kaimartin(>--- > -- > Kai-Martin Knaak > This is added. Read help more. --089e0149c5060b3edf04f13c8af6 Content-Type: text/html; charset=KOI8-R Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><br><div class=3D"gmail= _quote">2013-06-09 Kai-Martin Knaak <span dir=3D"ltr"><<a href=3D"mailto= :kmk AT familieknaak DOT de" target=3D"_blank">kmk AT familieknaak DOT de</a>></span><= br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left= :1px #ccc solid;padding-left:1ex"> <div class=3D"im">=E1=CC=C5=CB=D3=C5=CA =E8=C1=D2=D8=CB=CF=D7=D3=CB=C9=CA w= rote:<br> <br> >>> My most pressing wish with regard to renumber scripts:<br> >>>Play nice with multi part symbols.<br> >>><br> >>>It is good practice to split power pins or function blocks of<b= r> >>>integrated components into separate symbols. Thy all share the = same<br> >>>value of the refdes attribute. This sameness of refdes values l= ets<br> >>>gedalib know that two symbols are meant to refer to the same<br= > >>>component. The same applies to slotted symbols.<br> > Attach Example please. I do not using separate symbols, but I have<br> > interesting.<br> <br> </div>I attached my symbols for a dual operational amplifier. The symbol<br= > opamp_dual.sym contains the triangle with input and output pins. It<br> features two slots for the two opamps the device contains.<br> <br> Then there is opamp_dual_pwr.sym . This is a rectangle with just the<br> two supply pins of the component. I usually put all the power symbol<br> somewhere on the bottom of the schematic, connect them to power nets<br> and attach the necessary 100 nF capacitors. That way, power connection<br> is explicitely visible in the schematic. But it does not clutter the<br> functional part of the schematic. See the attached PDF of my favorite<br> photo diode amplifier for an example.<br> <div class=3D"HOEnZb"><div class=3D"h5"><br> ---<)kaimartin(>---<br> --<br> Kai-Martin Knaak</div></div></blockquote></div><br><br></div><div class=3D"= gmail_extra">This is added.<br></div><div class=3D"gmail_extra">Read help m= ore.<br></div></div> --089e0149c5060b3edf04f13c8af6-- --089e0149c5060b3ee304f13c8af8 Content-Type: text/x-python; charset=US-ASCII; name="refdes_renum.py" Content-Disposition: attachment; filename="refdes_renum.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hr2y70se3 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKaGVscCA9ICIiIgpVc2FnZToKCglyZWZkZXNfcmVudW0u cHkgWy0tbm9jb3B5XSBbLS1wZ3NraXAgW251bWJlcl0gXSBmaWxlMS5zY2ggW2ZpbGUyLnNjaCBm aWxlLnBjYiBbIHBhdGh0by9wcm9qZWN0ZmlsZSBdIF0KCXJlZmRlc19yZW51bS5weSAtLWhlbHAK CXJlZmRlc19yZW51bS5weSAtLXZlcnNpb24KCnJlZmRlc19yZW51bS5weSByZWFkcyBhIGdzY2hl bSBzY2hlbWF0aWMgZmlsZSBvciBmaWxlcyBhbmQgcmVudW1iZXJzIGFsbCByZWZlcmVuY2UKZGVz aWduYXRvcnMuICBUaGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGFyZSBudW1iZXJlZCBzdGFydGlu ZyB3aXRoIDEgYW5kIHRoZQpvbGQgc2NoZW1hdGljIGZpbGUgaXMgcmVwbGFjZWQgYnkgdGhlIG1v ZGlmaWVkIHNjaGVtYXRpYyBmaWxlLiBBbHNvIHJlcGxhY2VkIFJFRkRFU3MgaW4gcGNiIGZpbGUo cykgYWNjb3JkaW5nbHkgdG8gc2NoZW1hdGljIGZpbGUocykuCnJlZmRlc19yZW51bS5weSBjYW4g cmVhZCB0aGUgcHJvamVjdCBmaWxlKGZpbGVzKSBhbmQgcmVudW1iZXIgYWxsIFJFRkRFU3MgaW4g cHJvamVjdC4KCldhcm5pbmc6IEZvciBwcm9wZXJseSByZW51bWJlciBvZiBzbG90dGVkIGFuZCBj b21wbGV4KG1hbnkgc3ltYm9scykgY29tcG9uZW50cyBZb3UgbXVzdCBwbGFjZSBpZGVudGljYWwg UkVGREVTIHRvIGhpbS4gCkV4YW1wbGU6IFUxLCBVMSBvciBVMTAxLCBVMTAxLCBVMTAxCgpyZWZk ZXNfcmVudW0ucHkgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CgogICAgLS1oZWxwICAg ICAgRGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UuCgogICAgLS1ub2NvcHkgICAgSWYgZ2l2ZW4s IHRoaXMgZmxhZyBsZWF2ZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGluIG5ldyBmaWxlcwogICAgICAg ICAgICAgICAgd2hvc2UgbmFtZXMgYXJlIGdlbmVyYXRlZCBieSBhcHBlbmRpbmcgYSAiLnJlbnVt IiB0byB0aGUKICAgICAgICAgICAgICAgIG9yaWdpbmFsIGZpbGUgbmFtZXMuICBUaGUgZGVmYXVs dCBpcyB0byBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsLgoKICAgIC0tcGdza2lwIE4gIFdoZW4gdGhp cyBmbGFnIGlzIHVzZWQsIGNvbXBvbmVudHMgb24gdGhlIGZpcnN0IHNjaGVtYXRpYyBzaGVldAog ICAgICAgICAgICAgICAgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMTAxLiAgT24gdGhlIHNl Y29uZCBzaGVldCwgdGhleSBzdGFydAogICAgICAgICAgICAgICAgd2l0aCAyMDEsIGV0YyAgU3Bl Y2lmeWluZyBhIHZhbHVlIChOKSBnaXZlcyB0aGUgc3RlcCBiZXR3ZWVuIHBhZ2VzLgogICAgICAg ICAgICAgICAgRm9yIGV4YW1wbGUgLS1wZ3NraXAgMTAgd2lsbCBzdGFydCB3aXRoIDExLCAyMSwg MzEsIGV0Yy4KCiAgICAtLWdlbnRsZSAgICBUaGlzIGZsYWcgdGVsbHMgcmVmZGVzX3JlbnVtLnB5 IHRvIGxlYXZlIGFueSByZWZkZXNlcwogICAgICAgICAgICAgICAgYWxvbmUgaWYgdGhleSBhbHJl YWR5IGhhdmUgbnVtYmVycy4gIFVzZSB0aGlzIG9wdGlvbiB0byBudW1iZXIKICAgICAgICAgICAg ICAgIG5ldyBjb21wb25lbnRzIGluIGEgc2NoZW1hdGljIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4g bnVtYmVyZWQuCiAgICAgICAgICAgICAgICBOb3RlIHRoYXQgLS1nZW50bGUgaXMgc2V0IGJ5IGRl ZmF1bHQhCgogICAgLS1mb3JjZSAgICAgU2V0IHRoaXMgZmxhZyB0byByZW51bWJlciBhbGwgcmVm ZGVzZXMsIHdoZXRoZXIgdGhleSBhcmUgYWxyZWFkeQogICAgICAgICAgICAgICAgbnVtYmVyZWQg b3Igbm90LgoKCS0tc29ydCBBTEcJU2V0IHRoZSBzb3J0ZWQgYWxnb3JpdGhtLgoJCQkJUGVybWlz c2libGUgdmFsdWUgZm9yIC0tc29ydCBvcHRpb24gKEFMRykgaXM6CgkJZGlhZwkJLSBEaWFnb25h bCByZW51bWJlciAoYXMgZ3NjaGVtIHByb2dyYW0pCgkJdG9wdG9ib3QJLSBSZW51bWJlciByZWZk ZXMgYmVnYW4gd2l0aCB0b3AgYW5kIGVuZHMgYXQgYm90dG9tLgoJCWJvdHRvdG9wCS0gUmVudW1i ZXIgcmVmZGVzIGNvbnRyYXJpd2lzZSBhcyB0b3B0b2JvdAoJCWxlZnR0b3JpZ2h0CS0gUmVudW1i ZXIgcmVmZGVzIGJlZ2FuIHdpdGggbGVmdCBhbmQgdG8gcmlnaHQKCQlyaWdodHRvbGVmdCAtIFJl bnVtYmVyIHJlZmRlcyBjb250cmFyaXdpc2UgYXMgbGVmdHRvcmlnaHQKCQlmaWxlCQktIFJlbnVt YmVyIHJlZmRlcyBhcyB0ZXh0IGZpbGUgb3JkZXIKCgktLWxvZwkJUHJpbnQgcmVudW1iZXIgaW5m b3JtYXRoaW9uIHRvIHN0ZG91dAoKCS0tY29tcG9uZW50IFJlbnVtYmVyIHJlZmRlcyB3aXRoIGNv bXBvbmVudCBjb29yZGluYXRlcwoJCQkJQnkgZGVmYXVsdCByZWZkZXNfcmVudW0ucHkgcHJvZ3Jh bSB1c2luZyBjb29yZGluYXRlcyBvZiAicmVmZGVzIiBhdHRyaWJ1dGVzCgoJLS1hdHRyIE5hbWUJ U2V0IGF0dHJpYnV0ZSBuYW1lIGZvciByZW51bWJlcmluZy4gQXQgZGVmYXVsdCBSRUZERVMKCiAg ICAtLXZlcmJvc2UgICBFbmFibGVzIHZlcmJvc2Ugb3V0cHV0LgoKICAgIC0tdmVyc2lvbiAgIFNo b3dzIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcHJvZ3JhbS4KCgpSZXR1cm4gY29kZXM6CgoJcmVmZGVz X3JlbnVtLnB5IHJldHVybnMgdGhlIGZvbGxvd2luZyBjb2RlcyB0byB0aGUgc2hlbGwgdXBvbiBj b21wbGV0aW9uOgoKICAgICAgICAgIDAgICBQcm9ncmFtIHJhbiBzdWNjZXNzZnVsbHkuCiAgICAg ICAgICAxICAgRXJyb3Igb3BlbmluZyBvciByZWFkaW5nIGlucHV0IGZpbGUuCiAgICAgICAgICAy ICAgRXJyb3Igb3BlbmluZyBvciB3cml0aW5nIG91dHB1dCBmaWxlLgogICAgICAgICAgMyAgIFRv byBtYW55IGNvbXBvbmVudHMgZm9yIC0tcGdza2lwIHNldHRpbmcuCiAgICAgICAgICA0ICAgSW50 ZXJuYWwgZXJyb3IgKHByb2dyYW0gYnVnIGVuY291bnRlcmVkKS4KClVzYWdlIGV4YW1wbGVzOgoK MS4JVG8gcmVudW1iZXIgdGhlIHJlZmVyZW5jZSBkZXNpZ25hdG9ycyBpbiBhIHNpbmdsZSBwYWdl IHNjaGVtYXRpYwoJbXlzY2guc2NoOgoKCQlyZWZkZXNfcmVudW0ucHkgbXlzY2guc2NoCgkJCgoy LglUbyByZW51bWJlciB0aGUgcmVmZXJlbmNlIGRlc2lnbmF0b3JzIGluIHNjaGVtYXRpYyBwYWdl cyBwZzEuc2NoLAoJcGcyLnNjaCBhbmQgcGczLnNjaCwgd2l0aCB0aGUgcmVmZXJlbmNlIGRlc2ln bmF0b3JzIG9uIHBnMS5zY2gKCWJlZ2lubmluZyBhdCAxMDEsIHRoZSBkZXNpZ25hdG9ycyBvbiBw ZzIuc2NoIGJlZ2lubmluZyBhdCAyMDEsCglhbmQgdGhlIGRlc2lnbmF0b3JzIG9uIHBnMy5zY2gg YmVnaW5uaW5nIGF0IDMwMToKCgkJcmVmZGVzX3JlbnVtLnB5IC0tcGdza2lwIHBnMS5zY2ggcGcy LnNjaCBwZzMuc2NoCgoJCjMuCUZvcmNlIHJlcGxhY2VkIHRoZSBSRUZERVNzIGluIHNjaGVtYXRp YyBhbmQgUENCIGZpbGVzLgoJTm8gZm9yZ290IGdzY2gycGNiIHByb2dyYW0gZm9yIGdlbmVyYXRl IHByb3BlciBuZXRsaXN0IDopCgkJCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgZm9vMS5zY2gg Zm9vMi5zY2ggZm9vLnBjYgoJCgo0LglGb3JjZSByZXBsYWNlZCB0aGUgUkVGREVTcyBpbiBjdXJy ZW50IChvciBub24gY3VycmVudCkgd29ya2VkIHByb2plY3QuCgkJCgkJcmVmZGVzX3JlbnVtLnB5 IC0tZm9yY2UgcHJvamVjdAoJCXJlZmRlc19yZW51bS5weSAtLWZvcmNlIC4uLy4uL2Rlc2lnbi9n ZWRhL3Byb2plY3QKCQoKNS4JUmVwbGFjaW5nIHdpdGggbm9uIGRlZmF1bHQgc29ydGluZyBhbGdv cml0aG0KCgkJcmVmZGVzX3JlbnVtLnB5IC0tZm9yY2UgcHJvamVjdCAtLXNvcnQgbGVmdHRvcmln aHQKCQoKCnJlZmRlc19yZW51bS5weSB3YXMgd3JpdHRlbiBieSBLaGFya292c2t5IEFsZXhleSA8 c3ZldG9ub21lckBnbWFpbC5jb20+CiIiIgoKdmVyc2lvbj0ncmVmZGVzX3JlbnVtLnB5IHYxLjAg YnkgS2hhcmtvdnNreSBBbGV4ZXkgOiknCnNvcnRfbWV0aG9kID0gWydkaWFnJywndG9wdG9ib3Qn LCdib3R0b3RvcCcsJ2xlZnR0b3JpZ2h0JywncmlnaHR0b2xlZnQnLCdmaWxlJ10KCmltcG9ydCBz eXMsb3MKaW1wb3J0IHJlCgppZiBsZW4oc3lzLmFyZ3YpID09IDE6CglwcmludCBoZWxwCglleGl0 KDApCgppZiAnLS1oZWxwJyBpbiBzeXMuYXJndjoKCXByaW50IGhlbHAKCWV4aXQoMCkKCmlmICct LXZlcnNpb24nIGluIHN5cy5hcmd2OgoJcHJpbnQgdmVyc2lvbgoJZXhpdCgwKQoKaWYgJy0tbm9j b3B5JyAgaW4gc3lzLmFyZ3Y6CglTdWZmaXggPSAnLnJlbnVtJwoJc3lzLmFyZ3YucmVtb3ZlKCct LW5vY29weScpCmVsc2U6CglTdWZmaXggPSAnJwoKaWYgJy0tcGdza2lwJyAgaW4gc3lzLmFyZ3Y6 CglpZiBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1wZ3NraXAnKSsxXSBpcyBpbnQ6CgkJYWRk X3BhZ2VfbnVtID0gc3lzLmFyZ3Zbc3lzLmFyZ3YuaW5kZXgoJy0tcGdza2lwJykrMV0KCWVsc2U6 YWRkX3BhZ2VfbnVtID0gMTAwICNQYWdlIGluY3JlbWVudCAKCXN5cy5hcmd2ID0gc3lzLmFyZ3Zb OnN5cy5hcmd2LmluZGV4KCctLXBnc2tpcCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCct LXBnc2tpcCcpKzI6XQplbHNlOgoJYWRkX3BhZ2VfbnVtID0gMCNQYWdlIGluY3JlbWVudCAKCmlm ICctLWdlbnRsZScgIGluIHN5cy5hcmd2OgoJc3lzLmFyZ3YucmVtb3ZlKCctLWdlbnRsZScpCglp ZiAnLS1mb3JjZScgIGluIHN5cy5hcmd2OgoJCXByaW50ICdEbyBub3QgdXNlIFwiLS1nZW50bGVc IiBhbmQgXCItLWZvcmNlXCIgc3VtYWx0ZW51b3VzbHknCgkJZXhpdCgwKQoKaWYgJy0tZm9yY2Un ICBpbiBzeXMuYXJndjoKCWZvcmNlID0gVHJ1ZQoJc3lzLmFyZ3YucmVtb3ZlKCctLWZvcmNlJykK ZWxzZToKCWZvcmNlID0gRmFsc2UKCmlmICctLXZlcmJvc2UnICBpbiBzeXMuYXJndjoKCXZlcmJv c2UgPSBUcnVlCglzeXMuYXJndi5yZW1vdmUoJy0tdmVyYm9zZScpCmVsc2U6Cgl2ZXJib3NlID0g RmFsc2UKCmlmICctLXNvcnQnICBpbiBzeXMuYXJndjoKCWlmIHN5cy5hcmd2W3N5cy5hcmd2Lmlu ZGV4KCctLXNvcnQnKSsxXSBpbiBzb3J0X21ldGhvZDoKCQlzb3J0ID0gc3lzLmFyZ3Zbc3lzLmFy Z3YuaW5kZXgoJy0tc29ydCcpKzFdICNzb3J0IG1ldGhvZAoJZWxzZToKCQlwcmludCAnVW5rbm93 biBhcmd1bWVudCBmb3IgLS1zb3J0IG9yIHNvcnQgbWV0aG9kIGlzIHNraXBwZWQnCgkJcHJpbnQg J1RoZSBwZXJtaXNzaWJsZSB2YWx1ZSBmb3Igc29ydCBtZXRob2Q6ICcgLCBzdHIoc29ydF9tZXRo b2QpCgkJZXhpdCgwKQoJc3lzLmFyZ3YgPSBzeXMuYXJndls6c3lzLmFyZ3YuaW5kZXgoJy0tc29y dCcpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCctLXNvcnQnKSsyOl0KZWxzZToKCXNvcnQg PSAndG9wdG9ib3QnCgppZiAnLS1sb2cnIGluIHN5cy5hcmd2OgoJbG9nID0gVHJ1ZQoJc3lzLmFy Z3YucmVtb3ZlKCctLWxvZycpCmVsc2U6Cglsb2cgPSBGYWxzZQoKaWYgJy0tY29tcG9uZW50JyBp biBzeXMuYXJndjoKCWF0dHJfY29vcmQgPSBGYWxzZSAjIGZvciBjb21wb25lbnQgY29vcmRpbmF0 ZXMgdXNpbmcKCXN5cy5hcmd2LnJlbW92ZSgnLS1jb21wb25lbnQnKSAKZWxzZToKCWF0dHJfY29v cmQgPSBUcnVlCgppZiAnLS1hdHRyJyAgaW4gc3lzLmFyZ3Y6CglhdHRyID0gc3lzLmFyZ3Zbc3lz LmFyZ3YuaW5kZXgoJy0tYXR0cicpKzFdICNhdHRyIG1ldGhvZAoJc3lzLmFyZ3YgPSBzeXMuYXJn dls6c3lzLmFyZ3YuaW5kZXgoJy0tYXR0cicpXSArIHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCct LWF0dHInKSsyOl0KZWxzZToKCWF0dHIgPSAncmVmZGVzJwoKaWYgJy0tYXR0ci1wcmVmaXgnIGlu IHN5cy5hcmd2OgoJYXR0cl9wcmVmaXggPSBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1hdHRy LXByZWZpeCcpKzFdICNhdHRyIG1ldGhvZAoJc3lzLmFyZ3YgPSBzeXMuYXJndls6c3lzLmFyZ3Yu aW5kZXgoJy0tYXR0cl9wcmVmaXgnKV0gKyBzeXMuYXJndltzeXMuYXJndi5pbmRleCgnLS1hdHRy JykrMjpdCmVsc2U6CglhdHRyX3ByZWZpeCA9ICcnCgpwY2JuYW1lcyA9IFtdCnBjYmNvbnRlbnQg PSBbXQpzY2hlbV9uYW1lcyA9IFtdCmZvciBpIGluIHN5cy5hcmd2WzE6XToKCWlmIHJlLnNlYXJj aCgnLipcLnBjYiQnLGksZmxhZ3M9cmUuRE9UQUxMKTogI1RydWUgaWYgZW5kIG9mIGZpbGVuYW1l IGlzIC5wY2IKCQlpZiBpIG5vdCBpbiBwY2JuYW1lczoKCQkJcGNibmFtZXMuYXBwZW5kKGkpCgll bGlmIHJlLnNlYXJjaCgnLipcLnNjaCQnLGksZmxhZ3M9cmUuRE9UQUxMKTogI1RydWUgaWYgZW5k IG9mIGZpbGVuYW1lIGlzIC5zY2gKCQlpZiBpIG5vdCBpbiBzY2hlbV9uYW1lczoKCQkJc2NoZW1f bmFtZXMuYXBwZW5kKGkpCgllbHNlOiAjZmlsZSBpcyBub3QgcGNiIGFuZCBzY2ggPT4gdGhpcyBm aWxlIGlzIHByb2plY3QgZmlsZQoJCWZpbGU9b3BlbihpLCdydCcpCgkJY29udGVudCA9IGZpbGUu cmVhZCgpCgkJZmlsZS5jbG9zZSgpCgkJZm9yIHRlbXAxIGluIHJlLmZpbmRhbGwoJ3NjaGVtYXRp Y3NccysuKlwuc2NoJyxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCk6ICNUaGlzIHN0cmluZyBhcmUg Y29udGFuaW5nIHRoZSBzY2hlbWF0aWMgZmlsZSBuYW1lcwoJCQlmb3IgdGVtcCBpbiB0ZW1wMS5z cGxpdCgpWzE6XToKCQkJCXRlbXAgPSBvcy5wYXRoLmRpcm5hbWUoaSkrJy8nKyB0ZW1wICMgQWRk IHBhdGggdG8gZmlsZSAoVXNlZnVsIGlmIHByb2plY3QgZmlsZSBub3QgaW4gY3VycmVudCBkaXJl Y3RvcnkpCgkJCQlpZiB0ZW1wIG5vdCBpbiBzY2hlbV9uYW1lczoKCQkJCQlzY2hlbV9uYW1lcy5h cHBlbmQodGVtcCkKCQlmb3IgdGVtcDEgaW4gcmUuZmluZGFsbCgnb3V0cHV0LW5hbWVccysuKlwu cGNiJyxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCk6I1RoaXMgc3RyaW5nIGFyZSBjb250YW5pbmcg dGhlIHNjaGVtYXRpYyBmaWxlIG5hbWVzCgkJCWZvciB0ZW1wIGluIHRlbXAxLnNwbGl0KClbMTpd OgoJCQkJdGVtcCA9IG9zLnBhdGguZGlybmFtZShpKSsnLycrIHRlbXAgKyAnLnBjYicjIEFkZCBw YXRoIHRvIGZpbGUgKFVzZWZ1bCBpZiBwcm9qZWN0IGZpbGUgbm90IGluIGN1cnJlbnQgZGlyZWN0 b3J5KS4gQWZ0ZXIgYWRkIC5wY2IgKGFjdHVhbCBmb3IgcHJvamVjdCBmaWxlKSAKI1doZW4gaW4g cHJvamVjdCBmaWxlICJvdXRwdXQtbmFtZSBmb28ucGNiIiwgZ3NjaDJwY2IgY3JlYXRlICBmb28u cGNiLnBjYiwgdGhlcmVmb3JlIHRoaXMgZmlsZSBJUyBtYWluIFBDQi4KCQkJCWlmIHRlbXAgbm90 IGluIHBjYm5hbWVzOgoJCQkJCXBjYm5hbWVzLmFwcGVuZCh0ZW1wKQojIFJlYWQgY29udGVudCBv ZiBQQ0IgZmlsZQpmb3IgaSBpbiBwY2JuYW1lczoKCWZpbGU9b3BlbihpLCdydCcpCglwY2Jjb250 ZW50LmFwcGVuZChmaWxlLnJlYWQoKSkKCWZpbGUuY2xvc2UoKQojIFJlYWQgY29udGVudCBvZiBQ Q0IgZmlsZXMgCgpwYWdlX251bSA9IDAKZm9yIGZpbGVuYW1lIGluIHNjaGVtX25hbWVzOiAjIFRo aXMgCgkjUmVhZCBjb250ZW50IFNDSCBmaWxlcyBvbmUgYXQgYSB0aW1lISEhIEluIGZ1dHVyZSBt YXkgYmUgcmVwbGFjZSBmb3IgcmVhZCBjb250ZW50IGFsbCBTQ0ggZmlsZXMKCWZpbGU9b3Blbihm aWxlbmFtZSwncnQnKQoJY29udGVudCA9IGZpbGUucmVhZCgpCglmaWxlLmNsb3NlKCkKCglwcmlu dCBhdHRyCiNGaW5kIGFsbCByZXBsYWNpbmcgc3RyaW5ncyBpbiBjdXJyZW50IHNjaGVtYXRpYwoJ aWYgYXR0cl9jb29yZD09VHJ1ZTogI0lmIHVzZWQgcmVmZGVzIGF0dHJpYnV0ZSBjb29yZGluYXRl cwoJCWlmIGZvcmNlOiMgQWxsIHJlZmRlcyBhdHRyaWJ1dGVzIGFyZSBzZWxlY3RlZAoJCQljb21w X2xpc3QgID0gcmUuZmluZGFsbCgnVFteXG5dK1xzKyVzPVx3Klw/PycgJShhdHRyKSAsY29udGVu dCxmbGFncz1yZS5ET1RBTEwpCgkJZWxzZTojIE9ubHkgTk9OIG51bWJlcmluZyByZWZkZXMgYXR0 cmlidXRlcyBhcmUgc2VsZWN0ZWQgKEV4YW1wbGU6IFI/IEREPyBldGMuKQoJCQljb21wX2xpc3Qg ID0gcmUuZmluZGFsbCgnVFteXG5dK1xzKyVzPVx3Klw/JyAlKGF0dHIpICxjb250ZW50LGZsYWdz PXJlLkRPVEFMTCkKCQkKCWVsc2U6ICNJZiB1c2VkIGNvbXBvbmVudCBjb29yZGluYXRlcyAobGlz dCBvZiBzdHJpbmdzKQoJCWlmIGZvcmNlOgoJCQkjZm9yIGVtYmVkZGVkIGNvbXBvbmVudHMKCQkJ Y29tcF9saXN0ICA9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytcZCtc cytFTUJFRERFRC4rP1xbLis/XF1ccytce1tee31dKiVzPVx3Klw/P1tee31dKlx9JyAlKGF0dHIp ICxjb250ZW50LGZsYWdzPXJlLkRPVEFMTCkKCQkJI2ZvciBub24gZW1iZWRkZWQgY29tcG9uZW50 cwoJCQljb21wX2xpc3QgKz0gcmUuZmluZGFsbCgnQ1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xz K1xkK1teXG5dK1xzK1x7W157fV0qJXM9XHcqXD8/W157fV0qXH0nICUoYXR0cikgLGNvbnRlbnQs ZmxhZ3M9cmUuRE9UQUxMKQoJCWVsc2U6CgkJCSNmb3IgZW1iZWRkZWQgY29tcG9uZW50cwoJCQlj b21wX2xpc3QgID0gcmUuZmluZGFsbCgnQ1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xzK1xkK1xz K0VNQkVEREVELis/XFsuKz9cXVxzK1x7W157fV0qJXM9XHcqXD9bXnt9XSpcfScgJShhdHRyKSAs Y29udGVudCxmbGFncz1yZS5ET1RBTEwpCgkJCSNmb3Igbm9uIGVtYmVkZGVkIGNvbXBvbmVudHMK CQkJY29tcF9saXN0ICs9IHJlLmZpbmRhbGwoJ0NccytcZCtccytcZCtccytcZCtccytcZCtccytc ZCtbXlxuXStccytce1tee31dKiVzPVx3Klw/W157fV0qXH0nICUoYXR0cikgLGNvbnRlbnQsZmxh Z3M9cmUuRE9UQUxMKQoKCWlmIG5vdCBjb21wX2xpc3Q6ICNUcnVlIGlmIG5vIFJFRkRFU3MgZm9y IHJlcGxhY2luZwoJCXByaW50IGNvbXBfbGlzdAoJCWNvbnRpbnVlCgkKCXBhZ2VfbnVtICs9IGFk ZF9wYWdlX251bSAgIyBBZGRpbmcgUGFnZSBiaWFzIGZvciBuZXcgZmlsZSAKCSMgT2J0YWluaW5n IHRoZSBjb21wb25lbnQgbGlzdAoJZm9yIGkgaW4gcmFuZ2UoMCxsZW4oY29tcF9saXN0KSk6ICNG aW5kIGNvb3JkaW5hdGVzIHRvIHJlcGxhY2luZwoJCXh5ID0gY29tcF9saXN0W2ldLnNwbGl0KE5v bmUsMylbMTozXQoJCXh5WzBdID0gaW50KHh5WzBdKQoJCXh5WzFdID0gaW50KHh5WzFdKQoKI1Nl bGVjdCByZXBsYWNpbmcgYWxnb3J5dGhtIGJ5IHByb3BlciBzZXR1cCBjb29yZGluYXRlcyBsb2Nh dGlvbiBvcmRlciBhbmQgc29tZSBjb21wdXRhdGlvbgoJCWlmIHNvcnQgPT0gJ2RpYWcnOgoJCQlj b21wX2xpc3RbaV0gPSBbeHlbMF0gLSB4eVsxXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29y dCA9PSAnbGVmdHRvcmlnaHQnOgoJCQljb21wX2xpc3RbaV0gPSBbeHlbMF1dICsgWy14eVsxXV0g KyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAndG9wdG9ib3QnOgoJCQljb21wX2xpc3Rb aV0gPSBbLXh5WzFdXSArIFt4eVswXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAn cmlnaHR0b2xlZnQnOgoJCQljb21wX2xpc3RbaV0gPSBbLXh5WzBdXSArIFt4eVsxXV0gKyBbY29t cF9saXN0W2ldXQoJCWVsaWYgc29ydCA9PSAnYm90dG90b3AnOgoJCQljb21wX2xpc3RbaV0gPSBb eHlbMV1dICsgWy14eVswXV0gKyBbY29tcF9saXN0W2ldXQoJCWVsc2U6CgkJCWNvbXBfbGlzdFtp XSA9IFtjb21wX2xpc3RbaV1dCgoJCSNjb21wX2xpc3QgY29udGVudDogW2Nvb3JkMSwgY29vcmQy LCAncmVwbGFjZWQgc3RyaW5nIG9mIGZpbGUnXQoJCSNFeGFtcGxlOgkJCVstNTA4MDAgLCA2NTEw MCAsICdDIDY1MTAwIDUwODAwIC4uLiByZXNpc3Rvci0xLnN5bSB7Li4uLnJlZmRlcz1SMTIuLi59 J10KCQkKCQkjRmluZCB0aGUgcmVwbGFjZWQgUkVGREVTIGxldHRlciBwcmVmaXggYW5kIG51bWJl ciBzdWZmaXggYW5kIEFERCB0byBjb21wb25lbnQgbGlzdCAKCQlyZWZkZXM9cmUuc2VhcmNoKCco LiopJXM9KFthLXpBLVpdKikoXGQrfFw/KiknICUoYXR0cikgLGNvbXBfbGlzdFtpXVstMV0sZmxh Z3M9cmUuRE9UQUxMKQoJCWNvbXBfbGlzdFtpXS5pbnNlcnQoMCxyZWZkZXMuZ3JvdXAoMikpCgkJ Y29tcF9saXN0W2ldLmFwcGVuZChyZWZkZXMuZ3JvdXAoMykgaWYgcmVmZGVzLmdyb3VwKDMpIGVs c2UgJycpICNGb3IgbGV0dGVycyBvbmx5IFJFRkRFU3MgKGluIGZ1dHVyZSBXZSBjYW4gcmVtb3Zl IHRoZXkgZnJvbSByZWNwbGFjaW5nIGxpc3QpCgoJCSNjb21wX2xpc3QgY29udGVudDogWydSRUZE RVMgcHJlZml4JywgY29vcmQxLCBjb29yZDIsICdyZXBsYWNlZCBzdHJpbmcgb2YgZmlsZScJCQkJ CQkJCSwnT2xkIE5VTUJFUiBvZiBSRUZERVMnXQoJCSNFeGFtcGxlOgkJCVsgICdSJwkJCSwgLTUw ODAwICwgNjUxMDAgLCAnQyA2NTEwMCA1MDgwMCAuLi4gcmVzaXN0b3ItMS5zeW0gey4uLi5yZWZk ZXM9UjEyLi4ufSwnMTInXQoKCgkjIFNvcnRpbmcgdGhlIHJlcGxhY2VkIGNvbXBvbmVudC9yZWZk ZXMgbGlzdCB3aXRoIFJFRkRFU3MgcHJlZml4IGFuZCBhZnRlciB3aXRoIHNlbGVjdGVkIHNvcnQg YWxnb3JpdGhtCgljb21wX2xpc3QgPSBzb3J0ZWQoY29tcF9saXN0KQoJCglyZWZfY3Vycl9wcmVm PScwJyAjVGhpcyBpcyBOT04gYWxmYWJldGljIGZvciBhdmFpbGFibGUgcmVudW1iZXIgb2YgZW1w dHkgcmVmZGVzcyAoZS5nLiAiMSIsICIyIiwgIjIzNCIpCglpZiAncmVmX2xhc3RfbnVtcycgbm90 IGluIGxvY2FscygpOgoJCXJlZl9sYXN0X251bXM9e30gI0xhc3RzIG51bWJlcnMgZm9yIFJFRkRF U3MgcHJldmlvdXMgc2NoZW1hdGljIChGb3IgZGlzY29udGludW91cyByZW51bWJlciAod2l0aG91 dCAtLXBnc2tpcCkpIAoJCSNFeGFtcGxlIG9mIHRoaXMgZGljdCBjb250ZW50OiB7J0REJzo1LCAn Uic6MTQsICdDJzo0NX0KCglmb3IgaSBpbiByYW5nZShsZW4oY29tcF9saXN0KSk6ICNSZXBsYWNp bmcgc29ydGVkIGF0dHJpYnV0ZXMKCQkjQ29tcGxleCBjYWxjdWxhdGUgb2YgY3VycmVudCBudW1i ZXIgb2YgYXR0cmlidXRlCgkJaWYgcmVmX2N1cnJfcHJlZiA9PSBjb21wX2xpc3RbaV1bMF06ICMg VGhpcyBBdHRyaWJ1cmUgKHdpdGggY3VycmVudCBwcmVmaXgpIGlzIG5vdCBmaXJzdCBpbiB0aGlz IFNjaGVtYXRpYyBmaWxlCgkJCWlmIGNvbXBfbGlzdFtpXVt+MF0hPSc/JyBhbmQgY29tcF9saXN0 W2ldW34wXSBpbiBtYXAobGFtYmRhIHg6eFt+MV0sY29tcF9saXN0W2lfZmlyc3RfcHJlZml4Omld KTogI1JlcGVhdGluZyBhdHRyaWJ1dGUsIGUuZyBOZXcgU0xPVCBvZiBleGlzdGluZyBSRUZERVMp CgkJCQljb21wX2xpc3RbaV0uYXBwZW5kKHN0cihjb21wX2xpc3RbaV9maXJzdF9wcmVmaXgrbWFw KGxhbWJkYSB4OnhbfjFdLGNvbXBfbGlzdFtpX2ZpcnN0X3ByZWZpeDppXSkuaW5kZXgoY29tcF9s aXN0W2ldW34wXSldW34wXSkpICNBZGQgcHJldmlvdXMgbnVtYmVyIG9mIHRoaXMgc3ltYm9sIGZv ciB0aGlzIFNMT1Qgb3IgUEFSVChmb3IgbWFueSBzeW1ib2xzIGNvbXBvbmVudCkKCQkJZWxzZTog I05leHQgbnVtYmVyIGF0dHJpYnV0ZQoJCQkJcmVmX2N1cnJfbnVtICs9IDEKCQkJCWNvbXBfbGlz dFtpXS5hcHBlbmQoc3RyKHJlZl9jdXJyX251bSkpICNBZGQgY3VycmVudCBudW1iZXIgdG8gY29t cG9uZW50IGxpc3QKCQllbHNlOgoJCQl0cnk6cmVmX2N1cnJfbnVtID0gcGFnZV9udW0gKyAxIGlm IHBhZ2VfbnVtICE9IDAgZWxzZSByZWZfbGFzdF9udW1zW2NvbXBfbGlzdFtpXVswXV0gKyAxIAoJ CQlleGNlcHQ6cmVmX2N1cnJfbnVtPTEKCQkJY29tcF9saXN0W2ldLmFwcGVuZChzdHIocmVmX2N1 cnJfbnVtKSkgI0FkZCBjdXJyZW50IG51bWJlciB0byBjb21wb25lbnQgbGlzdAoJCQlyZWZfY3Vy cl9wcmVmID0gY29tcF9saXN0W2ldWzBdCiAgICAgICAgICAgICAgICAgICAgICAgIGlfZmlyc3Rf cHJlZml4ID0gaSAjIEJlZ2luIG9mIGN1cnJlbnQgcHJlZml4CgkJcmVmX2xhc3RfbnVtc1tyZWZf Y3Vycl9wcmVmXT1yZWZfY3Vycl9udW0gIyBBZGQgY3VycmVudCBSRUZERVMgaW4gbGFzdCBudW1i ZXJzCgoJCSNjb21wX2xpc3QgY29udGVudDogWydSRUZERVMgcHJlZml4JywgY29vcmQxLCBjb29y ZDIsICdyZXBsYWNlZCBzdHJpbmcgb2YgZmlsZScJCQkJLCdPbGQgTlVNQkVSJywnTmV3IE5VTUJF UiddCgkJI0V4YW1wbGU6CQkJWyAgJ1InCQkJLCAtNTA4MDAgLCA2NTEwMCAsICdDIDY1MTAwIDUw ODAwIC4uLnsuLi4ucmVmZGVzPVIxMi4uLn0sCScxMicJICwJJzQnXQoJCQoJCWNvbnRlbnQgPSBj b250ZW50LnJlcGxhY2UoY29tcF9saXN0W2ldW34yXSxjb21wX2xpc3RbaV1bfjJdLnJlcGxhY2Uo JyVzPScgJShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MV0sJyVzPScgJShh dHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MF0pKSAjUmVwbGFjaW5nIGN1cnJl bnQgc3RyaW5nIHdpdGggTmV3IFJFRkRFUwoJCWlmIGxvZyBhbmQgdmVyYm9zZToKCQkJcHJpbnQg J1JlcGxhY2luZyBpbiBzY2ggOiAnLCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSwg JyA9PiAnLCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXQoJCQlwcmludCAnPDw8ICcs IGNvbXBfbGlzdFtpXVt+Ml0KCQkJcHJpbnQgJz4+PiAnLCBjb21wX2xpc3RbaV1bfjJdLnJlcGxh Y2UoJyVzPScgJShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MV0sJyVzPScg JShhdHRyKSArY29tcF9saXN0W2ldWzBdK2NvbXBfbGlzdFtpXVt+MF0pCgkJCXByaW50ICctLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCgoJCWlmIGF0dHI9PSdyZWZkZXMnOgoJ CQlmb3IgcGNiX2luZGV4IGluIHJhbmdlKDAsbGVuKHBjYmNvbnRlbnQpKTogI1NlYXJjaCBjdXJy ZW50IFJFRkRFUyBpbiBwY2IgZmlsZXMgYW5kIEFERCBjb250ZXh0IG9mIFJFRkRFUyAoYXBwcm9w cmlhdGUgZWxlbWVudCBvbnRleCBjb21wbGV0ZWx5KSB0byBsaXN0IG9mIHJlcGxhY2VzCgkJCQll bGVtID0gcmUuc2VhcmNoKCdFbGVtZW50XFtbXltcXV0qIiVzIlteW1xdXSpcXScgJShjb21wX2xp c3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSkscGNiY29udGVudFtwY2JfaW5kZXhdICxmbGFncz1y ZS5ET1RBTEwpCgkJCQlpZiBlbGVtOgoJCQkJCXRyeToKCQkJCQkJcGNiX3JlcGxhY2VzLmFwcGVu ZChbcGNiX2luZGV4LGVsZW0uZ3JvdXAoKSxlbGVtLmdyb3VwKCkucmVwbGFjZShjb21wX2xpc3Rb aV1bMF0rY29tcF9saXN0W2ldW34xXSxjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXSld KSAKCQkJCQlleGNlcHQ6cGNiX3JlcGxhY2VzID0gIFtbcGNiX2luZGV4LGVsZW0uZ3JvdXAoKSxl bGVtLmdyb3VwKCkucmVwbGFjZShjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSxjb21w X2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34wXSldXSAjQ3JlYXRlIG5ldyByZXBsYWNlIGxpc3QK CQkJCQlpZiBsb2cgYW5kIHZlcmJvc2U6CgkJCQkJCXByaW50ICdSZXBsYWNpbmcgaW4gcGNiOiAn LCBjb21wX2xpc3RbaV1bMF0rY29tcF9saXN0W2ldW34xXSwgJyA9PiAnLCBjb21wX2xpc3RbaV1b MF0rY29tcF9saXN0W2ldW34wXQoJCQkJCQlwcmludCAnPDw8ICcsIGVsZW0uZ3JvdXAoKQoJCQkJ CQlwcmludCAnPj4+ICcsIGVsZW0uZ3JvdXAoKS5yZXBsYWNlKGNvbXBfbGlzdFtpXVswXStjb21w X2xpc3RbaV1bfjFdLGNvbXBfbGlzdFtpXVswXStjb21wX2xpc3RbaV1bfjBdKQoJCQkJCQlwcmlu dCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwoKCWlmICdwY2JfcmVwbGFj ZXMnIGluIHZhcnMoKTogI0lmIFBDQiByZXBsYWNlIGxpc3QgYXJlIGV4aXN0cwoJCWZvciBpIGlu IHBjYl9yZXBsYWNlczoJI1JlcGxhY2UgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb250ZXh0cywg Y29udGFpbmluZyByZXBsYWNlZCBSRUZERVNzCgkJCXBjYmNvbnRlbnRbaVswXV0gPSBwY2Jjb250 ZW50W2lbMF1dLnJlcGxhY2UoaVsxXSxpWzJdKQoKIyBXcml0ZSBjdXJyZW50IHJlcGxhY2VkIGNv bnRlbnQgKHNjaGVtYXRpYykgdG8gY3VycmVudCBzY2hlbWF0aWMgZmlsZQoJZmlsZT1vcGVuKGZp bGVuYW1lK1N1ZmZpeCwnd3QnKQoJZmlsZS53cml0ZShjb250ZW50KQoJZmlsZS5jbG9zZSgpCgoj V3JpdGUgYWxsIFBDQiByZXBsYWNlZCBjb250ZW50cyB0byBjb3JyZXNwb25pbmcgUENCIGZpbGUK Zm9yIGkgaW4gcmFuZ2UoMCxsZW4ocGNiY29udGVudCkpOgoJZmlsZT1vcGVuKHBjYm5hbWVzW2ld K1N1ZmZpeCwnd3QnKQoJZmlsZS53cml0ZShwY2Jjb250ZW50W2ldKQoJZmlsZS5jbG9zZSgpCgoj UHJpbnQgbG9nIG1lc3NhZ2UgdG8gc3Rkb3V0IChzdW1tYXJ5IHJlcGxhY2VkKQppZiBsb2c6Cglw cmludCAnU3VtbWFyeSByZXBsYWNlZCcKCWZvciBpIGluIGNvbXBfbGlzdDoKCQlwcmludCBpWzBd K2lbfjFdLCAnID0+ICcsIGlbMF0raVt+MF0KCQkKCg== --089e0149c5060b3ee304f13c8af8--