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=sNMZ8doUeBXMdSVrJpfAdnZp6V7zPrO+//4BakDQkUY=; b=oWQHp1/BkZtUi/mWqS/Mvr8eGl7DL22tx9i2QxQwyHoQGXjvRNydA86Q805O8IActC gOzFSZJf0DHzqsOEY/tSniEw98zK9Es2+7AkvqEhbimjFEbxHz60aCamxOOWQENk3lOV 0aBpN7FkKgJUW2ZC4YkyaMPSfLJd7BEovosZli3YbvUHW1UucaRynQ+OLIAI9gL1+60j oJB71oytFowPiuiLz1sIcUd9kj4sTBfqdQtLQAKNGyQ8yhT2UTPI1AbB2zit3NpMtxbx qulh27P5jIDqfkjJObaE4VIO8J2vV09E66g1FDMjMZjNSw781WS56jB2Egy7bqvkcFAA uPhg== MIME-Version: 1.0 X-Received: by 10.182.55.3 with SMTP id n3mr3609337obp.55.1398449294666; Fri, 25 Apr 2014 11:08:14 -0700 (PDT) In-Reply-To: References: <20140127234944 DOT 924148045B78 AT turkos DOT aspodata DOT se> <20140128201110 DOT DF7D78045B78 AT turkos DOT aspodata DOT se> <20140129072550 DOT GA24560 AT localhost DOT localdomain> <86CABBE6-EE80-4347-B7AA-3F5A8DA4C658 AT noqsi DOT com> <1394402434 DOT 2151 DOT 28 DOT camel AT AMD64X2 DOT fritz DOT box> <20140311130801 DOT 94D928020170 AT turkos DOT aspodata DOT se> <20140311211548 DOT 2A88E8020170 AT turkos DOT aspodata DOT se> <201403131446 DOT s2DEkjg0008539 AT envy DOT delorie DOT com> Date: Fri, 25 Apr 2014 22:08:14 +0400 Message-ID: Subject: Re: [geda-user] identical symbol names From: =?UTF-8?B?0JDQu9C10LrRgdC10Lkg0KXQsNGA0YzQutC+0LLRgdC60LjQuQ==?= To: geda-user AT delorie DOT com Content-Type: multipart/mixed; boundary=089e015387027227e604f7e1d9d8 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 --089e015387027227e604f7e1d9d8 Content-Type: multipart/alternative; boundary=089e015387027227e004f7e1d9d6 --089e015387027227e004f7e1d9d6 Content-Type: text/plain; charset=UTF-8 Hello All. Attached script allowing to work with library section of sch file. It can save symbol from library section to file in current directory or save all symbols to corresponding symbol files. Also it may remove one symbol from library section or remove all library section completely. Also it allowing replacing symbol in library section with external symbol file. For add attached new attributes in schematic to symbol file use --with-attr option See lib_sec_util.py --help for more. --089e015387027227e004f7e1d9d6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hello All.

Atta= ched script allowing to work with library section of sch file.

It can save symbol from library section to file in current directory or sa= ve all symbols to corresponding symbol files.
Also it may remove one symbol from library section or remove all libr= ary section completely.

Also it allowing replacing symbol in l= ibrary section with external symbol file.

For add attached new= attributes in schematic to symbol file use --with-attr option

See lib_sec_util.py --help for more.
=
--089e015387027227e004f7e1d9d6-- --089e015387027227e604f7e1d9d8 Content-Type: text/x-python; charset=US-ASCII; name="lib_sec_util.py" Content-Disposition: attachment; filename="lib_sec_util.py" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hufsefdd0 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgoKZGVmIGF0dHJfZ2VuKGNvbXBfc3RyKToKICAgIGF0dHJz ID0gcmUuc2VhcmNoKCdDIChcZCspIChcZCspIC4qXHtcbiguKilcblx9JywgY29tcF9zdHIsIHJl LkRPVEFMTCkgIyBDb21wb25lbnQgY29vcmRpbmF0ZXMgYW5kIGNvbnRlbnQgcGFyc2UKICAgIHgg PSBpbnQoYXR0cnMuZ3JvdXAoMSkpICMgeC1jb29yZCBvZiBjb21wb25lbnQKICAgIHkgPSBpbnQo YXR0cnMuZ3JvdXAoMikpICMgeS1jb29yZCBvZiBjb21wb25lbnQKICAgIGF0dHJzID0gYXR0cnMu Z3JvdXAoMykgICMgY29udGVudCBvZiBjb21wb25lbnQKICAgIGF0dHJzPXJlLnNwbGl0KCdcbj9U IChcZCspIChcZCspICguKj9cbikoXFMrKT0nLCBhdHRycywgcmUuRE9UQUxMKVsxOl0gIyBMaXN0 IG9mIGNvbXBvbmVudCBhdHRyaWJ1dGVzIFsgeCwgeSwgcGxhY2VtZW50IHBhcmFtcywgbmFtZSwg dmFsdWUsIHgseSwuLi4uLi5dCiAgICBsaXN0X2F0dHJzID0ge30gI05ldyBkaWN0CiAgICBmb3Ig aSBpbiByYW5nZShsZW4oYXR0cnMpLzUpOiAjIDUgLT4gbGVuIG9mIGxpc3QgZWxlbWVudHMgZm9y IE9ORSB0ZXh0IGF0dHJpYnV0ZQogICAgICAgIGxpc3RfYXR0cnNbYXR0cnNbaSo1KzNdXSA9IFtp bnQoYXR0cnNbaSo1XSkteCxpbnQoYXR0cnNbaSo1KzFdKS15LGF0dHJzW2kqNSsyXSwgYXR0cnNb aSo1KzRdXSAgICMgS2V5IG9mIGRpY3QgaXMgQVRUUiBuYW1lCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWYWx1ZSAtPiBvdGhlciA0IGVsZW1lbnRzIG9m IGxpc3Q6IFJlbGFpdGl2ZSBhdHRyaWJ1dGVzICh4LHkpIG90cmhlciB0ZXh0IHBhcmFtcyBhbmQg VmFsdWUgb2YgQXR0cmlidXRlLgogICAgcmV0dXJuIGxpc3RfYXR0cnMgIyBEaWN0IHJldHVybgoK CmhlbHAgPSAiIiIKVXNhZ2U6IGxpYl9zZWNfdXRpbHMgWy0td2l0aC1hdHRyc10gY29tbWFuZCBz eW1ib2wgU0NIRklMRQpFeGFtcGxlczoKCiAgICBsaWJfc2VjX3V0aWxzIHNhdmUge1JFRkRFUyB8 IFN5bU5hbWV9IFNDSEZJTEUgICAgICAgICAgICAgICAgIyBUaGlzIGNvbW1hbmQgc2F2ZXMgbGli cmFyeSBzaW1ib2wgZnJvbSBsaWIgc2VjdGlvbiBvZiAuc2NoIGZpbGUgdG8gZmlsZSBpbiBjdXJy ZW50IGRpcmVjdG9yeS4gRmlsZSBuYW1lZCBzaW1pbGFyIHN5bWJvbCBuYW1lLgoKICAgIGxpYl9z ZWNfdXRpbHMgc2F2ZWFsbCBTQ0hGSUxFICAgICAgICAgICAgICAgICMgVGhpcyBjb21tYW5kIHNh dmVzIGFsbCBsaWJyYXJ5IHNpbWJvbHMgZnJvbSBsaWIgc2VjdGlvbiBvZiAuc2NoIGZpbGUgdG8g ZmlsZSBpbiBjdXJyZW50IGRpcmVjdG9yeS4gRmlsZXMgbmFtZWQgc2ltaWxhciBzeW1ib2wgbmFt ZS4KCiAgICBsaWJfc2VjX3V0aWxzIC0td2l0aC1hdHRycyBzYXZlIHtSRUZERVMgfCBTeW1OYW1l fSBTQ0hGSUxFICAgICAjIFRoaXMgY29tbWFuZCBhcyBwcmV2aW91cywgYnV0IHNhdmVzIHRvIGZp bGUgbG9jYWxseSBhdHRhY2hlZCBhdHRyaWJ1dGVzIChleGNlcHRpb24gY3VycmVudGx5IGV4aXN0 ZWQpLgogICAgCiAgICBsaWJfc2VjX3V0aWxzIHJlbW92ZSB7UkVGREVTIHwgU3ltTmFtZX0gU0NI RklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjb21tYW5kIHJl bW92ZXMgbGlicmFyeSBzeW1ib2wgd2l0aCBzZWxlY3QgUkVGREVTIG9yIHN5bWJvbCBuYW1lIGZy b20gbGlicmFyeSBzZWN0aW9uCiAgICAKICAgIGxpYl9zZWNfdXRpbHMgcmVtb3ZhbGwgU0NIRklM RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY29tbWFuZCByZW1vdmVz IHdob2xlIGxpYnJhcnkgc2VjdGlvbiBmcm9tIGZpbGUuCiAgICAKICAgIGxpYl9zZWNfdXRpbHMg cmVwbGFjZSB7UkVGREVTIHwgU3ltTmFtZX0gW3BhdGgvdG8vc3ltZmlsZV0gU0NIRklMRSAgIyBU aGlzIGNvbW1hbmQgcmVwbGFjZWQgc3ltYm9sIG9mIFJFRkRFUyBvciBTeW1OYW1lIGluIGxpYnJh cnkgc2VjdGlvbiBvZiBmaWxlIHdpdGggc3ltYm9sIGZyb20gcGF0aC90by9zeW1maWxlIGZpbGUg b3IgZmlsZSBmcm9tIGN1cnJlbnQgZGlyIHdpdGggbmFtZSBhcyBSRUZERVMgc3ltYm9sIChkZWZh dWx0KS4KICAgIAogICAgbGliX3NlY191dGlscyAtLXdpdGgtYXR0cnMgcmVwbGFjZSB7UkVGREVT IHwgU3ltTmFtZX0gW3BhdGgvdG8vc3ltZmlsZV0gU0NIRklMRSAgICAgICAgIyBSZXBsYWNlZCB0 aGUgZmlsZSBhbmQgcmVtb3ZlIGV4aXN0ZWQgYXR0cmlidXRlcyBpbiBuZXcgc3ltYm9sIGZyb20g Q29tcG9uZW50IChleGNlcHRpb24gUkVGREVTKQoKIiIiCgp2ZXJzaW9uPSdsaWJfc2VjX3V0aWwu cHkgdjEuMCBieSBLaGFya292c2t5IEFsZXhleSA6KScKCmltcG9ydCBzeXMsb3MKaW1wb3J0IHJl CgppZiAobGVuKHN5cy5hcmd2KSA9PSAxKSBvciAoJy0taGVscCcgaW4gc3lzLmFyZ3YpOgoJcHJp bnQgaGVscAoJZXhpdCgwKQoKaWYgJy0tdmVyc2lvbicgaW4gc3lzLmFyZ3Y6CglwcmludCB2ZXJz aW9uCglleGl0KDApCgppZiAnLS13aXRoLWF0dHJzJyBpbiBzeXMuYXJndjoKCXdpdGhfYXR0cnMg PSBUcnVlCglzeXMuYXJndi5yZW1vdmUoJy0td2l0aC1hdHRycycpCmVsc2U6Cgl3aXRoX2F0dHJz ID0gRmFsc2UKCmNvbW1hbmQgPSBzeXMuYXJndlsxXSAgICAgICAjIGNvbW1hbmQgOikKc3lzLmFy Z3YucmVtb3ZlKGNvbW1hbmQpICAgICMgCgpzY2hfZmlsZW5hbWUgPSBzeXMuYXJndlt+MF0gIyBz Y2gvc3ltIGZpbGVuYW1lIChsYXN0IGVsZW1lbnQgb2YgYXJndW1lbnQgbGlzdCkKc3lzLmFyZ3Yu cmVtb3ZlKHNjaF9maWxlbmFtZSkKCmlmIGNvbW1hbmQgPT0gJ3JlbW92YWxsJzoKICAgIHNjaF9m aWxlID0gb3BlbihzY2hfZmlsZW5hbWUsJ3J0JykKICAgIGNvbnRlbnQgPSBzY2hfZmlsZS5yZWFk KCkuc3BsaXQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tbGlicmFyeSBzZWN0aW9uLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0nLCAxKVswXQogICAgc2NoX2ZpbGUuY2xvc2UoKQogICAgc2No X2ZpbGUgPSBvcGVuKHNjaF9maWxlbmFtZSwnd3QnKQogICAgc2NoX2ZpbGUud3JpdGUoY29udGVu dCkKICAgIHNjaF9maWxlLmNsb3NlKCkKICAgIHN5cy5leGl0KDApCgplbGlmIGNvbW1hbmQgPT0g J3NhdmVhbGwnOgogICAgc2NoX2ZpbGUgPSBvcGVuKHNjaF9maWxlbmFtZSwncnQnKQogICAgY29u dGVudCA9IHNjaF9maWxlLnJlYWQoKS5zcGxpdCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1s aWJyYXJ5IHNlY3Rpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJywgMSlbMV0KICAgIHNj aF9maWxlLmNsb3NlKCkKICAgIHdoaWxlIChyZS5zZWFyY2goJ1xTKycsY29udGVudCkpOgogICAg ICAgICNzeW1uYW1lID0gcmUuc3BsaXQoJ1xuKFxTKz8pXG5ce1xuJyAlKHN5bW5hbWUpICxjb250 ZW50LCAxKSAjIFNlYXJjaCBzaW1ib2wgaW4gbGlicmFyeSBzZWN0aW9uCiAgICAgICAgc3ltbmFt ZSxjb250ZW50ID0gY29udGVudC5zcGxpdCgnXG57XG4nLDEpCiAgICAgICAgaT0xCiAgICAgICAg ZW5kPTAKICAgICAgICB3aGlsZSBpPjA6ICAjc2VhcmNoIGVuZCBvZiBzeW1ib2wKICAgICAgICAg ICAgYmVnX2Jsb2NrID0gY29udGVudFtlbmQ6XS5maW5kKCd7JykKICAgICAgICAgICAgZW5kX2Js b2NrID0gY29udGVudFtlbmQ6XS5maW5kKCd9JykKICAgICAgICAgICAgaWYgYmVnX2Jsb2NrID09 IC0xIGFuZCBlbmRfYmxvY2shPS0xOgogICAgICAgICAgICAgICAgYmVnX2Jsb2NrPWxlbihjb250 ZW50KQogICAgICAgICAgICBpZiBlbmRfYmxvY2s9PS0xOgogICAgICAgICAgICAgICAgcHJpbnQg J2xhY2tzIGEgY2xvc2luZyBwYXJlbnRoZXNpc1xuJwogICAgICAgICAgICAgICAgc3lzLmV4aXQo MSkKCiAgICAgICAgICAgIGlmIGJlZ19ibG9jayA8IGVuZF9ibG9jazoKICAgICAgICAgICAgICAg IGkrPTEKICAgICAgICAgICAgICAgIGVuZCs9Y29udGVudFtlbmQ6XS5maW5kKCd7JykrMQogICAg ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaS09MQogICAgICAgICAgICAgICAgZW5kKz1j b250ZW50W2VuZDpdLmZpbmQoJ30nKSsxCiAgICAgICAgc3ltX2ZpbGUgPSBvcGVuKHN5bW5hbWUs J3d0JykKICAgICAgICBzeW1fZmlsZS53cml0ZShjb250ZW50WzplbmQtMV0pCiAgICAgICAgc3lt X2ZpbGUuY2xvc2UoKQogICAgICAgIGNvbnRlbnQgPSBjb250ZW50W2VuZCsxOl0gI0Z1bGwgc3lt Ym9sIGNvbnRlbnQKICAgIHN5cy5leGl0KDApCgoKcmVmZGVzID0gc3lzLmFyZ3ZbMV0gICAgICAg ICNyZWZkZXMgTmFtZSBvciBzeW1ib2wgTmFtZQpzeXMuYXJndi5yZW1vdmUocmVmZGVzKSAgICAg I3JlbW92ZSByZWZkZXMgZnJvbSBsaXN0IAoKaWYgbGVuKHN5cy5hcmd2KSA+MiA6CiAgICBwcmlu dCAiZ2FyYmFkZSBpbiBzdHJpbmcgb3IgUmVhZCB0aGUgaGVscCBwbGVhc2UgOikiCiAgICBzeXMu ZXhpdCgxKQplbGlmIGxlbihzeXMuYXJndikgPT0yOgogICAgc3ltX2ZpbGVuYW1lID0gc3lzLmFy Z3ZbMV0KZWxzZTogc3ltX2ZpbGVuYW1lID0gJycKCnRyeToKICAgIHNjaF9maWxlID0gb3Blbihz Y2hfZmlsZW5hbWUsJ3J0JykgICAgICAgICAgCmV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAg cHJpbnQgJ1JlYWQgZmlsZSBlcnJvcjogXCIlc1wiJyAlKGVycikKY29udGVudCA9IHNjaF9maWxl LnJlYWQoKQpzY2hfZmlsZS5jbG9zZSgpCgpjb21wID0gcmUuc2VhcmNoKCdDIFxkKyBcZCsgXGQr IFxkKyBcZCsgKFxTKylcblx7W157fV0qcmVmZGVzPSVzJyAlKHJlZmRlcykgLGNvbnRlbnQpICMg c2VhcmNoIGNvbXBvbmVudCB3aXRoIHJlZmRlcwppZiBjb21wOiAjIElmIGNvbXAgd2FzIGZpbmRl ZCAtIHJlZmRlcyBpcyBUcnVlCiAgICBzeW1uYW1lID0gY29tcC5ncm91cCgxKSAjIHN5bW5hbWUg b2YgY29tcG9uZW50CiAgICBpZiB3aXRoX2F0dHJzOiAjIFNlYXJjaCBjb21wb25lbnQgYXR0cmli dXRlcwogICAgICAgIGF0dHJzID0gYXR0cl9nZW4ocmUuc2VhcmNoKCdDIFxkKyBcZCsgXGQrIFxk KyBcZCsgJXNcblx7Lio/XH0nICUoc3ltbmFtZSkgLCBjb250ZW50LCByZS5ET1RBTEwpLmdyb3Vw KDApKQplbHNlOiAgICAjIElmIGNvbXAgd2Fzbid0IGZpbmRlZCwgbmVlZCB0byBzZWFyY2ggc3lt Ym9sIG5hbWUKICAgIHN5bW5hbWUgPSByZWZkZXMKCmNvbnRlbnQgPSByZS5zcGxpdCgnXG4lc1xu XHtcbicgJShzeW1uYW1lKSAsY29udGVudCwgMSkgIyBTZWFyY2ggc2ltYm9sIGluIGxpYnJhcnkg c2VjdGlvbgppZiBsZW4oY29udGVudCk8MjogIAogICAgcHJpbnQgJ05vIGNvbXBvbmVudCB3YXMg ZmluZGVkICVzXG4nICUocmVmZGVzKQogICAgc3lzLmV4aXQoMSkKY29udGVudCA9IGNvbnRlbnRb MV0KaT0xCmVuZD0wCndoaWxlIGk+MDogICNzZWFyY2ggZW5kIG9mIHN5bWJvbAogICAgYmVnX2Js b2NrID0gY29udGVudFtlbmQ6XS5maW5kKCd7JykKICAgIGVuZF9ibG9jayA9IGNvbnRlbnRbZW5k Ol0uZmluZCgnfScpCiAgICBpZiBiZWdfYmxvY2sgPT0gLTEgYW5kIGVuZF9ibG9jayE9LTE6CiAg ICAgICAgYmVnX2Jsb2NrPWxlbihjb250ZW50KQogICAgaWYgZW5kX2Jsb2NrPT0tMToKICAgICAg ICBwcmludCAnbGFja3MgYSBjbG9zaW5nIHBhcmVudGhlc2lzXG4nCiAgICAgICAgc3lzLmV4aXQo MSkKCiAgICBpZiBiZWdfYmxvY2sgPCBlbmRfYmxvY2s6CiAgICAgICAgaSs9MQogICAgICAgIGVu ZCs9Y29udGVudFtlbmQ6XS5maW5kKCd7JykrMQogICAgZWxzZToKICAgICAgICBpLT0xCiAgICAg ICAgZW5kKz1jb250ZW50W2VuZDpdLmZpbmQoJ30nKSsxCmNvbnRlbnQgPSBjb250ZW50WzplbmQt MV0gI0Z1bGwgc3ltYm9sIGNvbnRlbnQKCmlmIGNvbW1hbmQgPT0gJ3NhdmUnOiAjIFNhdmUgZmlu ZGVkIHN5bWJvbCB0byBmaWxlCiAgICBpZiB3aXRoX2F0dHJzOiAjIEFkZCBsb2NhbGx5IGF0dGFj aGVkIGF0dHJpYnV0ZXMgdG8gc3ltYm9sIAogICAgICAgIGlmIG5vdCBjb21wOgogICAgICAgICAg ICBwcmludCAnRm9yIHNlYXJjaCBsb2NhbGx5IGF0dGFjaGVkIGF0dHJpYnMgbmVlZCB1c2UgUkVG REVTIGluc3RlYWQgU3ltTmFtZScKICAgICAgICAgICAgI3N5cy5leGl0KDEpCiAgICAgICAgZWxz ZToKICAgICAgICAgICAgZm9yIGkgaW4gYXR0cnMua2V5cygpOiAjIFNlYXJjaCBsb2NhbGx5IGF0 dHJpYnMgaW4gc3ltYm9sCiAgICAgICAgICAgICAgICBpZiBpICE9ICdyZWZkZXMnOgogICAgICAg ICAgICAgICAgICAgIGF0dHIgPSByZS5zZWFyY2goJyhUIFxkKyBcZCsgXGQrIFxkKyBcZCsgXGQr IFxkKyBcZCsgXGQrXG4lcz0oLio/KSkoXG5MfFxuSHxcbkJ8XG5HfFxuVnxcblV8XG5DfFxuVHxc blB8XG5BfFxuWCknICUoaSksIGNvbnRlbnQsIHJlLkRPVEFMTCkKICAgICAgICAgICAgICAgICAg ICBpZiBhdHRyID09IE5vbmU6ICMgSWYgYXR0ciBub3QgZmluZGVkIChuZXcgYWRkZWQpLCBhZGQg dG8gZmlsZQogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9ICdUICVkICVkICVzJXM9 JXMnICUoYXR0cnNbaV1bMF0sYXR0cnNbaV1bMV0sYXR0cnNbaV1bMl0saSxhdHRyc1tpXVszXSkK ICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50 ID0gY29udGVudC5yZXBsYWNlKGF0dHIuZ3JvdXAoMSksICdUICVkICVkICVzJXM9JXMnICUoYXR0 cnNbaV1bMF0sYXR0cnNbaV1bMV0sYXR0cnNbaV1bMl0saSxhdHRyc1tpXVszXSkpICMgQXR0ciB3 YXMgZmluZGVkLCByZXBsYWNlIHZhbHVlIGFuZCBjb29yZGluYXRlcyAKCiAgICBzeW1fZmlsZSA9 IG9wZW4oc3ltbmFtZSBpZiBzeW1fZmlsZW5hbWU9PScnIGVsc2Ugc3ltX2ZpbGVuYW1lLCd3dCcp CiAgICBzeW1fZmlsZS53cml0ZShjb250ZW50KQogICAgc3ltX2ZpbGUuY2xvc2UoKQoKZWxpZiBj b21tYW5kID09ICdyZW1vdmUnOgogICAgc2NoX2ZpbGUgPSBvcGVuKHNjaF9maWxlbmFtZSwncicp CiAgICBjb250ZW50ID0gc2NoX2ZpbGUucmVhZCgpLnJlcGxhY2UoJyVzXG57XG4lc31cbicgJShz eW1uYW1lLGNvbnRlbnQpLCcnKQogICAgc2NoX2ZpbGUuY2xvc2UoKQogICAgc2NoX2ZpbGUgPSBv cGVuKHNjaF9maWxlbmFtZSwnd3QnKQogICAgc2NoX2ZpbGUud3JpdGUoY29udGVudCkKICAgIHNj aF9maWxlLmNsb3NlKCkKCmVsaWYgY29tbWFuZCA9PSAncmVwbGFjZSc6CiAgICBzeW1fZmlsZSA9 IG9wZW4oc3ltbmFtZSBpZiBzeW1fZmlsZW5hbWU9PScnIGVsc2Ugc3ltX2ZpbGVuYW1lLCdydCcp CiAgICBzY2hfZmlsZSA9IG9wZW4oc2NoX2ZpbGVuYW1lLCdydCcpCiAgICBjb250ZW50ID0gc2No X2ZpbGUucmVhZCgpLnJlcGxhY2UoY29udGVudCxzeW1fZmlsZS5yZWFkKCkpCiAgICBzY2hfZmls ZS5jbG9zZSgpCiAgICBpZiB3aXRoX2F0dHJzOiAjIEFkZCBsb2NhbGx5IGF0dGFjaGVkIGF0dHJp YnV0ZXMgdG8gc3ltYm9sIAojICAgICAgICBpZiBub3QgY29tcDoKIyAgICAgICAgICAgIHByaW50 ICdGb3Igc2VhcmNoIGxvY2FsbHkgYXR0YWNoZWQgYXR0cmlicyBuZWVkIHVzZSBSRUZERVMgaW5z dGVhZCBTeW1OYW1lJwojICAgICAgICAgICAgI3N5cy5leGl0KDEpCiMgICAgICAgIGVsc2U6CiMg ICAgICAgICAgICBmb3IgaSBpbiBhdHRycy5rZXlzKCk6ICMgU2VhcmNoIGxvY2FsbHkgYXR0cmli cyBpbiBzeW1ib2wKIyAgICAgICAgICAgICAgICBpZiBpICE9ICdyZWZkZXMnOgojICAgICAgICAg ICAgICAgICAgICBhdHRyID0gcmUuc2VhcmNoKCcoVCBcZCsgXGQrIFxkKyBcZCsgXGQrIFxkKyBc ZCsgXGQrIFxkK1xuJXM9KC4qPykpKFxuTHxcbkh8XG5CfFxuR3xcblZ8XG5VfFxuQ3xcblR8XG5Q fFxuQXxcblgpJyAlKGkpLCBjb250ZW50LCByZS5ET1RBTEwpCiMgICAgICAgICAgICAgICAgICAg IGlmIGF0dHIgPT0gTm9uZTogIyBJZiBhdHRyIG5vdCBmaW5kZWQgKG5ldyBhZGRlZCksIGFkZCB0 byBmaWxlCiMgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9ICdUICVkICVkICVzJXM9 JXMnICUoYXR0cnNbaV1bMF0sYXR0cnNbaV1bMV0sYXR0cnNbaV1bMl0saSxhdHRyc1tpXVszXSkK IyAgICAgICAgICAgICAgICAgICAgZWxzZToKIyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl bnQgPSBjb250ZW50LnJlcGxhY2UoYXR0ci5ncm91cCgxKSwgJ1QgJWQgJWQgJXMlcz0lcycgJShh dHRyc1tpXVswXSxhdHRyc1tpXVsxXSxhdHRyc1tpXVsyXSxpLGF0dHJzW2ldWzNdKSkgIyBBdHRy IHdhcyBmaW5kZWQsIHJlcGxhY2UgdmFsdWUgYW5kIGNvb3JkaW5hdGVzIAogICAgc3ltX2ZpbGUu Y2xvc2UoKQogICAgc2NoX2ZpbGUgPSBvcGVuKHNjaF9maWxlbmFtZSwnd3QnKQogICAgc2NoX2Zp bGUud3JpdGUoY29udGVudCkKICAgIHNjaF9maWxlLmNsb3NlKCkKICAgIAplbHNlOgogICAgcHJp bnQgJ1Vua25vd24gY29tbWFuZDogVXNlIC0taGVscCBvcHRpb24gZm9yIHJlY2lldmUgY29tbWFu ZCBsaXN0JwoK --089e015387027227e604f7e1d9d8--