From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: A Soare Newsgroups: gmane.emacs.devel Subject: Embedding Html in Lisp Date: Sun, 22 Jun 2008 22:56:15 +0200 (CEST) Message-ID: <6020102.8572091214168175976.JavaMail.www@wwinf4622> Reply-To: alinsoar@voila.fr NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_131904_18940734.1214168175975" X-Trace: ger.gmane.org 1214168196 17787 80.91.229.12 (22 Jun 2008 20:56:36 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 22 Jun 2008 20:56:36 +0000 (UTC) To: "Emacs Dev [emacs-devel]" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jun 22 22:57:18 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KAWcd-0002ud-SC for ged-emacs-devel@m.gmane.org; Sun, 22 Jun 2008 22:57:17 +0200 Original-Received: from localhost ([127.0.0.1]:47519 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KAWbo-0005x7-Ir for ged-emacs-devel@m.gmane.org; Sun, 22 Jun 2008 16:56:24 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KAWbi-0005x1-UI for emacs-devel@gnu.org; Sun, 22 Jun 2008 16:56:19 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KAWbi-0005wo-6d for emacs-devel@gnu.org; Sun, 22 Jun 2008 16:56:18 -0400 Original-Received: from [199.232.76.173] (port=36115 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KAWbh-0005wl-Ux for emacs-devel@gnu.org; Sun, 22 Jun 2008 16:56:17 -0400 Original-Received: from smtp3.voila.fr ([193.252.22.173]:47185) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KAWbg-0001ZH-Jn for emacs-devel@gnu.org; Sun, 22 Jun 2008 16:56:17 -0400 Original-Received: from me-wanadoo.net (localhost [127.0.0.1]) by mwinf4207.voila.fr (SMTP Server) with ESMTP id 212B17000084 for ; Sun, 22 Jun 2008 22:56:16 +0200 (CEST) Original-Received: from wwinf4622 (wwinf4622 [10.232.13.46]) by mwinf4207.voila.fr (SMTP Server) with ESMTP id F01587000082 for ; Sun, 22 Jun 2008 22:56:15 +0200 (CEST) X-ME-UUID: 20080622205615983.F01587000082@mwinf4207.voila.fr X-Originating-IP: [93.112.69.191] X-Wum-Nature: EMAIL-NATURE X-WUM-FROM: |~| X-WUM-TO: |~| X-WUM-REPLYTO: |~| X-me-spamlevel: not-spam X-me-spamrating: 40.000000 X-me-spamcause: OK, (-65)(0000)fghrlhcuvffnffculddutddmneesvcftvggtihhpihgvnhhtshculddquddttddmnegsohhnjhhouhhrucdlqddvhedmnefvrghgshcuihhnuchtvgigthcuphgrrhhtucdlhedtmd X-detected-kernel: by monty-python.gnu.org: Linux 2.4-2.6 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:99714 Archived-At: ------=_Part_131904_18940734.1214168175975 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Bonjour =C3=A0 tous. I have to prepare an exam and I needed a good access to a French dictionary. I considered that the best choice is http://www.cnrtl.fr/, a database of the "Centre national de la recherche scientifique". This dictionary is provided in html format. So I thought how to get access to a html page. I tried to define html. I define html as =C2=AB html is a programming language like any other programming language =C2=BB. Being a language, it can be transformed in lisp and evaluated using the lisp evaluator. Apart a few special tags (like BR, HR, , etc), the grammar of the html is identical ( via an isomorphism ) to the lisp grammar: text <----> (tag (expr) text) So I transformed html in lisp via this iso.
x y
a b
will become (table (tr (td "x") (td "y")) (tr (td "a") (td "b"))) and this form will be evaluated after the rules of the emacs lisp evaluator. Now I have to give the tags' definitions. I observe that the lisp evaluator will first call the functions `td' with a string as parameter, and then will call the functions `tr' with the output of `td' as parameter, and finally will call `table' with a list of elements that are the ouputs from `tr' functions as parameter. Hence html is a subset of lisp, in which the functions are the symbols like table, div, input, center, I, B, et ctera. So I did so: 1. I downloaded the page from CNRTL. 2. I filtered it to extract just the definition, and cut the unuseful informations. (using a signal->filter->accumulate library (not included in the example I send here)) 3. I transformed the result using the grammar isomorphism 4. I evaluated the resulted lisp structure. The result of the 4th step is the context of the filtered html page (just the definition). So that was my implementation of html. Now if I look in the dictionary, to see the definition of html: http://fr.wikipedia.org/wiki/Hypertext_Markup_Language =C2=AB L'Hypertext Markup Language, g=C3=A9n=C3=A9ralement abr=C3=A9g=C3=A9= HTML, est le **format de donn=C3=A9es** con=C3=A7u pour repr=C3=A9senter les pages web. = Il permet notamment d'implanter de l'hypertexte dans le contenu des pages et repose sur un **langage de balisage**, d=E2=80=99o=C3=B9 son nom =C2=BB More, look at the definition of =C2=ABlangage de balisage=C2=BB: http://fr.wikipedia.org/wiki/Langage_de_balisage =C2=AB L'inclusion de balises permet de transf=C3=A9rer =C3=A0 la fois la s= tructure du document et son contenu. Cette structure est compr=C3=A9hensible par un **programme informatique** , ce qui autorise un affichage personnalis=C3=A9 selon des r=C3=A8gles pr=C3=A9-=C3=A9tablies =C2=BB So, in the dictionaries, html is considered as a data structure, that can be rendered by a program. Maybe the lisp evaluator is that program in my code... and the data structure is a lisp structure obtained by html->lisp... When I first read this definition, it sounded me very strange. I redefined html as a programming language =C2=ABen tant que tel=C2=BB, as = any other programming language, neither as a =C2=ABlangage de balisage=C2=BB, n= or as =C2=ABformat de donn=C3=A9es=C2=BB. In this new implementation of html the emacs lisp user will have all the liberty to redefine the rendering of every html (=3D lisp) symbol as one wishes. For example, if the user does not like the default implementation of the tag `table', he will know that the tag `table' is a lisp function that receives as parameter a list that contains many list (rows), and every such list contains strings that are the information of columns (depending of the implementation of TD and TR). The function must return a string that is the image of the table. More than that, one could attach to this tag everything semantically, like a cond form in lisp, or progn. But in this case the html standard would not be accomplished. In lisp a procedure must always return an object (Lisp_Object) that can be of a few types. In html we return an object that must be a string or a list, depending on the html function (id est: we chop, like Edward Scissorhands, the lisp evaluator and we obtain so a html evaluator). When a table is inside another table (or any object inside another object), the inner table will be evaluated first, then the outside table. Maybe the outside object (function) will not like the dimensions of the returned image of the inner object, and want to rescale it. To solve this, during parsing one can add the quoted text of every procedure after its definition, for example: (table (tr (td "x") '(td "x") (td "y") '(td "y")) '(tr (td "x") '(td "x") (td "y") '(td "y")) (tr (td (table (tr (td "a") '(td "a") (td "b") '(td "b")) (tr (td "x") '(td "x") (td "b") '(td "b"))) '(table (tr (td "a") '(td "a") (td "b") '(td "b")) (tr (td "x") '(td "x") (td "b") '(td "b")))) (td "o"))) and, in case the table "x y" will be able to rescale the inner table "a b". This has the disavantage that the lisp code grows exponentially with the html tree's deep. Another solution is to insert the percentage of the current object during the transformation html->lisp. For example: (table (tr (td 50 "x") (td 50 "y")) (tr (td 40 "a") (td 60 "b"))) When the lisp evaluator will call every function, it will know exactly how huch the width of that element must me. There are many possibilities to solve this problem. The transformation of structures from html to lisp in html->lisp is very inefficient in my implementation (it's just for test) and have to be embedded in C (with DEFUN) for a good speed. For the rest, I will write in the near future for myself a few more filters for a few French newspapers that I read dayly, and I will add some more definitions like , etc. But I will not define all the tags of the html language; I will define just that ones that I need for these pages. The current definitions of div, span, etc, are adapted for the CNRTL dictionnary. That was just what I needed here. One can test it using the call (cnrtl-get 'french-word). I believe that the ideas from this implementation of html (cnrtl), can be used in future to implement a complete web browser embedded in emacs lisp, more customizable than any other browser of emacs (in fact emacs does not have an incorporated web browser). Html is lisp. Finally, I wish to dedicate this implementation of html as a programming language to Julie B. White from San Diego with all the gratitude for her encouragements and for a beautiful friendship. Alin C. Soare PS: I promised 1 year ago that I would send the indentation of the lisp code in O(n) time complexity, and I will send it, I hope soon, because I have much to work and I do not have time at this instant to check it out before. ____________________________________________________ En quelques secondes, cr=C3=A9ez-vous une autre adresse mail ! http://mail.= voila.fr ------=_Part_131904_18940734.1214168175975 Content-Type: text/x-emacs-lisp; name="/mnt/lisp/elisp/cnrtl.el" content-transfer-encoding: base64 Content-Disposition: attachment; filename="/mnt/lisp/elisp/cnrtl.el" CihkZWZ1biBjb25jYXQqICh0ZXh0KQogIChsZXQgKChyICIiKSkKICAgIChkb2xpc3QgKGkgdGV4 dCkKICAgICAgKGFuZCAoZXF1YWwgaSAiLSIpIChzZXRxIGkgIlxuLSIpKQogICAgICAoc2V0cSBy IChjb25jYXQgciAoZm9ybWF0ICIlcyAiIGkgKSkpKQogICAgcikpCgooZGVmdW4gaHRtbC0+cmVh ZC1zdHJ1Y3R1cmUtbmFtZSAobGltaXQgYnVmZmVyIG9mZnNldCBiYWNrKQogICh3aXRoLWN1cnJl bnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgIChza2lwLWNoYXJzLWZv cndhcmQgIiAiKQogICAgKGZvcndhcmQtY2hhciBvZmZzZXQpCiAgICAobGV0ICgodyAodXBjYXNl IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAgIChw b2ludCkgKHByb2cyIChzZWFyY2gtZm9yd2FyZC1yZWdleHAgbGltaXQgbmlsIHQpIChtYXRjaC1i ZWdpbm5pbmcgMCkpKSkpKQogICAgICAoYmFja3dhcmQtY2hhciBiYWNrKQogICAgICAoaWYgKG1l bWJlciAoZWx0IHcgMCkgJyg/IykpCiAgICAgICAgICAoZm9ybWF0ICJcIiVzXCIiIHcpCiAgICAg ICAgdykpKSkKCihkZWZ1biBodG1sLT5hZGQtcmV0dXJuICgmb3B0aW9uYWwgYnVmZmVyKQogICh3 aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCiAgICAoc2VhcmNoLWZvcndhcmQgIjxkaXYgIiBuaWwgdCkKICAg ICh3aGlsZSAoc2VhcmNoLWZvcndhcmQgIjxkaXYgIiBuaWwgdCkKICAgICAgKGdvdG8tY2hhciAo bWF0Y2gtYmVnaW5uaW5nIDApKQogICAgICAoaW5zZXJ0LWNoYXIgP1xuIDIpCiAgICAgIChnb3Rv LWNoYXIgKG1hdGNoLWVuZCAwKSkpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgOzso d2hpbGUgKHNlYXJjaC1mb3J3YXJkICI8L2Rpdj4iIG5pbCB0KQogICAgOzsgIChnb3RvLWNoYXIg KG1hdGNoLWJlZ2lubmluZyAwKSkKICAgIDs7ICAoaW5zZXJ0LWNoYXIgP1xuIDEpCiAgICA7OyAg KGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkpCiAgICApKQoKKGRlZnVuIGh0bWwtPmV4dHJhY3Qt YXJ0aWNsZSAoJm9wdGlvbmFsIGJ1ZmZlcikKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAob3IgYnVm ZmVyIChjdXJyZW50LWJ1ZmZlcikpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKGlm IChzZWFyY2gtZm9yd2FyZCAiPGRpdiBpZD1cImFydCIgbmlsIHQpCiAgICAgICAgKGxldCAoKGJl ZyAobWF0Y2gtYmVnaW5uaW5nIDApKSBlbmQgKG4gMSkpCiAgICAgICAgICAgKHdoaWxlIChub3Qg KHplcm9wIG4pKQogICAgICAgICAgICAgKHNlYXJjaC1mb3J3YXJkICJkaXYiIG5pbCB0KQogICAg ICAgICAgICAgKGNvbmQgKChhbmQgKGVxdWFsIChjaGFyLWJlZm9yZSAobWF0Y2gtYmVnaW5uaW5n IDApKSA/LykKICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAoY2hhci1iZWZvcmUgKDEt IChtYXRjaC1iZWdpbm5pbmcgMCkpKSA/PCkpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgbiAo MS0gbikpKQogICAgICAgICAgICAgICAgICAgKChhbmQgKGVxdWFsIChjaGFyLWJlZm9yZSAobWF0 Y2gtYmVnaW5uaW5nIDApKSA/PCkKICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAoY2hh ci1hZnRlciAobWF0Y2gtZW5kIDApKSA/ICkpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgbiAo MSsgbikpKSkpCiAgICAgICAgICAgKHNldHEgZW5kICgxKyAobWF0Y2gtZW5kIDApKSkKICAgICAg ICAgICAobGlzdCBiZWcgZW5kKSkKICAgICAgKGh0bWwtZmFpbC1wcm9wb3NlZC13b3JkcykpKSkK ICAKKGRlZnVuIGh0bWwtZmFpbC1wcm9wb3NlZC13b3JkcyAoJm9wdGlvbmFsIGJ1ZmZlcikKICAo d2l0aC1jdXJyZW50LWJ1ZmZlciAob3IgYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCiAgICAobGV0 IChiZWcgZW5kIGxpc3QtZGVmaW5pdGlvbnMpCiAgICAgIChnb3RvLWNoYXIgMSkKICAgICAgKGlm IChzZWFyY2gtZm9yd2FyZCAiTGUgcG9ydGFpbCB2b3VzIHByb3Bvc2UgbGVzIHRlcm1lcyBzdWl2 YW50czoiIG5pbCB0KQogICAgICAgICAgKHByb2duCiAgICAgICAgICAgICh3aGlsZSAoc2VhcmNo LWZvcndhcmQgIioiIG5pbCB0KQogICAgICAgICAgICAgIChzZWFyY2gtZm9yd2FyZCAiPGEgaHJl Zj0iKQogICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIpCiAgICAgICAgICAgICAgKHNldHEgYmVn IChwb2ludCkpCiAgICAgICAgICAgICAgKHNlYXJjaC1mb3J3YXJkICJcIiIpCiAgICAgICAgICAg ICAgKGJhY2t3YXJkLWNoYXIpCiAgICAgICAgICAgICAgKHNldHEgZW5kIChwb2ludCkpCiAgICAg ICAgICAgICAgKHNldHEgbGlzdC1kZWZpbml0aW9ucyAoYXBwZW5kIGxpc3QtZGVmaW5pdGlvbnMg KGxpc3QgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBiZWcgZW5kKSkpKSkKICAgICAg ICAgICAgKGVyYXNlLWJ1ZmZlcikKICAgICAgICAgICAgKGluc2VydCAiXG5cbkxlIHBvcnRhaWwg dm91cyBwcm9wb3NlIGxlcyB0ZXJtZXMgc3VpdmFudHM6ICIpCiAgICAgICAgICAgIChkb2xpc3Qg KGkgbGlzdC1kZWZpbml0aW9ucykKICAgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIlxuJXMi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzdHJpbmcgaSAoMSsgKGFuZCBpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWwg KGVsdCBpIDApID8vKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN0cmluZy1tYXRjaCAiLyIgaSAxKSkpKSkpKSkKICAgICAgICAoZXJhc2UtYnVm ZmVyKQogICAgICAgIChpbnNlcnQgKGZvcm1hdCAiTGUgdGVybWUgJXMgZXN0IGludHJvdXZhYmxl LiIgbW90KSkpCiAgICAgICgpKSkpCgooZGVmdW4gaHRtbC0+ZmlsdGVyICgmb3B0aW9uYWwgYnVm ZmVyKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkK ICAgIChsZXQgKChsaW0gKGh0bWwtPmV4dHJhY3QtYXJ0aWNsZSBidWZmZXIpKSkKICAgICAgKGlm IGxpbQogICAgICAgICAgKHByb2duCiAgICAgICAgICAgIChzZXRxIG90aGVyLWRlZmluaXRpb25z IChodG1sLT5leHRyYWN0LWRlZmluaXRpb25zIGJ1ZmZlcikpCiAgICAgICAgICAgIChkZWxldGUt cmVnaW9uIChjYWRyIGxpbSkgKHBvaW50LW1heCkpCiAgICAgICAgICAgIChkZWxldGUtcmVnaW9u IDEgKGNhciBsaW0pKQogICAgICAgICAgICB0KQogICAgICAgIChzd2l0Y2gtdG8tYnVmZmVyIGJ1 ZmZlcikKICAgICAgICAoKSkpKSkKCihkZWZ1biBodG1sLT5leHRyYWN0LWRlZmluaXRpb25zICgm b3B0aW9uYWwgYnVmZmVyKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJl bnQtYnVmZmVyKSkKICAgIChsZXQgKGJlZyBlbmQgYSB3IGxpc3QtZGVmaW5pdGlvbnMpCiAgICAg IChnb3RvLWNoYXIgMSkKICAgICAgKHdoaWxlIChzZWFyY2gtZm9yd2FyZCAicmV0dXJuIHNlbmRS ZXF1ZXN0KDUsIiBuaWwgdCkKICAgICAgICAoc2VhcmNoLWZvcndhcmQgIlwnIikKICAgICAgICAo c2V0cSBiZWcgKG1hdGNoLWVuZCAwKSkKICAgICAgICAoc2VhcmNoLWZvcndhcmQgIlwnIikKICAg ICAgICAoc2V0cSBlbmQgKG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAoc2V0cSBhIChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVnIGVuZCkpCiAgICAgICAgKHNlYXJjaC1mb3J3 YXJkICI8aDE+IikKICAgICAgICAoc2V0cSBiZWcgKG1hdGNoLWVuZCAwKSkKICAgICAgICAoc2Vh cmNoLWZvcndhcmQgIjwvaDE+IikKICAgICAgICAoc2V0cSBlbmQgKG1hdGNoLWJlZ2lubmluZyAw KSkKICAgICAgICAoc2V0cSB3IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgYmVnIGVu ZCkpCiAgICAgICAgKHNlYXJjaC1mb3J3YXJkICI8aDI+IikKICAgICAgICAoc2V0cSBiZWcgKG1h dGNoLWVuZCAwKSkKICAgICAgICAoc2VhcmNoLWZvcndhcmQgIjwvaDI+IikKICAgICAgICAoc2V0 cSBlbmQgKG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAoc2V0cSB3IChjb25jYXQgdyAiLSIg KGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBiZWcgZW5kKSkpCiAgICAgICAgKHNldHEg bGlzdC1kZWZpbml0aW9ucyAoYXBwZW5kIGxpc3QtZGVmaW5pdGlvbnMgKGxpc3QgKGNvbnMgdyBh KSkpKSkKICAgICAgbGlzdC1kZWZpbml0aW9ucyApKSkKCihkZWZ1biBodG1sLXN0ZXAtZm9yd2Fy ZCAoJm9wdGlvbmFsIGJ1ZmZlcikKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAob3IgYnVmZmVyIChj dXJyZW50LWJ1ZmZlcikpCiAgICAoYW5kIChlb2JwKSAoZXJyb3IgImlsIHkgYSB1bmUgZXJyZXVy IGRhbnMgbGUgZmljaGllciAoZmluIGR5IGZpY2hpZXIpIikpCiAgICAoc2tpcC1jaGFycy1mb3J3 YXJkICIgXGZcdFxuXHJcdiIpCiAgICAobGV0ICgocCAocG9pbnQpKSkKICAgICAgKGlmIChlcXVh bCAoY2hhci1hZnRlcikgPzwpCiAgICAgICAgICAocHJvZzEgbmlsCiAgICAgICAgICAgIChzZWFy Y2gtZm9yd2FyZCAiPiIgbmlsIHQpCiAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoc2VhcmNo LWJhY2t3YXJkICI8IiBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuICg+ IChwb2ludCkgcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJDaGFyYWN0 w6hyZSBkw6lmZW5kdSBkYW5zIGxlIHRleHRlIChwb3NpdGlvbiAlZCAtICVkKSIgcCAocG9pbnQp KSkpKQogICAgICAgIChzZWFyY2gtZm9yd2FyZCAiPCIgbmlsIHQpCiAgICAgICAgKGJhY2t3YXJk LWNoYXIpCiAgICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcZlx0XG5cclx2IikpKSkpCgoo ZGVmdW4gaHRtbC1zdGVwLWJhY2t3YXJkICgmb3B0aW9uYWwgYnVmZmVyKQogICh3aXRoLWN1cnJl bnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgIChza2lwLWNoYXJzLWJh Y2t3YXJkICIgXGZcdFxuXHJcdiIpCiAgICAobGV0ICgocCAocG9pbnQpKSkKICAgICAgKGlmIChl cXVhbCAoY2hhci1iZWZvcmUpID8+KQogICAgICAgICAgKHByb2cxIG5pbAogICAgICAgICAgICAo c2VhcmNoLWJhY2t3YXJkICI8IiBuaWwgdCkKICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uIChz ZWFyY2gtZm9yd2FyZCAiPiIgbmlsIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hl biAoPCAocG9pbnQpIHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiQ2hh cmFjdMOocmUgZMOpZmVuZHUgZGFucyBsZSB0ZXh0ZSAocG9zaXRpb24gJWQgLSAlZCkiIChwb2lu dCkgcCkpKSkKICAgICAgICAoc2VhcmNoLWJhY2t3YXJkICI+IiBuaWwgdCkKICAgICAgICAoZm9y d2FyZC1jaGFyKQogICAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcZlx0XG5cclx2IikpKSkp CgooZGVmdW4gY25ydGwtZ2V0IChtb3QpCiAgKGxldCogKChhZGRyZXNzIChjb25jYXQgImh0dHA6 Ly93d3cuY25ydGwuZnIvZGVmaW5pdGlvbi8iIChzeW1ib2wtbmFtZSBtb3QpKSkKICAgICAgICAg KGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlICd1dGYtOCkKICAgICAgICAgKGNvZGluZy1zeXN0ZW0t Zm9yLXJlYWQgJ3V0Zi04KQogICAgICAgICAodGVtcG9yYXJ5LWZpbGUtZGlyZWN0b3J5CiAgICAg ICAgICAiL3RtcC9jbnJ0bC8iKQogICAgICAgICAoZiAocHJvZzIgKG9yIChmaWxlLWV4aXN0cy1w IHRlbXBvcmFyeS1maWxlLWRpcmVjdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICAobWFrZS1k aXJlY3RvcnkgdGVtcG9yYXJ5LWZpbGUtZGlyZWN0b3J5KSkKICAgICAgICAgICAgICAgIChtYWtl LXRlbXAtZmlsZSAoY29uY2F0ICJjbnJ0bCIgIi0iICJtb3QiKSkpKQogICAgICAgICAoYnVmZmVy ICh1cmwtcmV0cmlldmUtc3luY2hyb25vdXNseSBhZGRyZXNzKSkKICAgICAgICAgb3RoZXItZGVm aW5pdGlvbnMKICAgICAgICAgKQogICAgOzsoaHRtbC1jaGVjay1jb2Rpbmctc3lzdGVtIGJ1ZmZl cikKICAgICh3aGVuIChodG1sLT5maWx0ZXIgYnVmZmVyKQogICAgICAoaHRtbC0+YWRkLXJldHVy biBidWZmZXIpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQt YnVmZmVyKSkgKHdyaXRlLXJlZ2lvbiBuaWwgbmlsIGYpKQogICAgICAoc2V0cSBidWZmZXIgKGZp bmQtZmlsZS1ub3NlbGVjdCBmKSkKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAg ICAgICAgKGh0bWwtPmxpc3ApCiAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKICAgICAg ICAobWVzc2FnZSAiZXZhbHVhdGluZyB0aGUgaHRtbCBjcGRlLi4uIikKICAgICAgICAobGV0ICgo ciAoZXZhbC1sYXN0LXNleHAgdCkpKQogICAgICAgICAgKGVyYXNlLWJ1ZmZlcikKICAgICAgICAg IChpbnNlcnQgcikKICAgICAgICAgICkpCiAgICAgIChzd2l0Y2gtdG8tYnVmZmVyIGJ1ZmZlcikK ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkpKSkKCihkZWZ1biBodG1sLT5yZWFkLXRhZyBu aWwKICAoaWYgKGVxdWFsIChjaGFyLWFmdGVyKSA/PCkKICAgICAgKGxldCAoKHRhZy1uYW1lIChw cm9nMgogICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKGh0bWwtPnJlYWQtc3RydWN0dXJlLW5hbWUgIlsgPl0iIChjdXJyZW50 LWJ1ZmZlcikgMCAxKSkpCiAgICAgICAgICAgIGluZm8KICAgICAgICAgICAgbmFtZQogICAgICAg ICAgICApCiAgICAgICAgKGNhdGNoICdFTkQtVEFHCiAgICAgICAgICAod2hpbGUgdAogICAgICAg ICAgICAod2hlbiAob3IgKGxvb2tpbmctYXQgIj4iKSAobG9va2luZy1iYWNrICI+IikpCiAgICAg ICAgICAgICAgKHRocm93ICdFTkQtVEFHIDApKQogICAgICAgICAgICAoc2V0cSBuYW1lIChodG1s LT5yZWFkLXN0cnVjdHVyZS1uYW1lICJbID0+XSIgKGN1cnJlbnQtYnVmZmVyKSAwIDEpKQogICAg ICAgICAgICAoaWYgKGxvb2tpbmctYXQgIj1cIiIpCiAgICAgICAgICAgICAgICAoc2V0cSBpbmZv IChhcHBlbmQgaW5mbyAobGlzdCAoY29ucyBuYW1lIChodG1sLT5yZWFkLXN0cnVjdHVyZS1uYW1l CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiXCIiIChjdXJyZW50LWJ1ZmZlcikgMiAwKSkpKSkKICAgICAgICAgICAgICAoc2V0cSBpbmZv IChjb25zIChsaXN0IG5hbWUpIGluZm8pKSkpKQogICAgICAgIChhbmQgKGxvb2tpbmctYXQgIj4i KSAoZm9yd2FyZC1jaGFyKSkKICAgICAgICAoY29ucyB0YWctbmFtZSBpbmZvKSkKICAgIG5pbCkp CgooZGVmdW4gaHRtbC0+cmVhZC10ZXh0IG5pbAogIChsZXQgKCh3IChidWZmZXItc3Vic3RyaW5n LW5vLXByb3BlcnRpZXMgKHBvaW50KSAocHJvZzIgKGh0bWwtc3RlcC1mb3J3YXJkKSAocG9pbnQp KSkpKQogICAgKGNvbmQgKChzdHJpbmctZXF1YWwgdyAoc3RyaW5nIDk4MzApKSAoc2V0cSB3ICJc blxuIMKnIikpCiAgICAgICAgICAoKHN0cmluZy1lcXVhbCB3IChzdHJpbmcgODcyMikpIChzZXRx IHcgIlxuXG4gIyIpKSkKICAgIHcpKQoKKGRlZmNvbnN0IGh0bWwtc3BlY2lhbC10YWdzCiAgJygo IkJSIiAuICJORVdMSU5FIikpKQoKKGRlZnVuIGh0bWwtPnN0cnVjdCBuaWwKICAoc2tpcC1jaGFy cy1mb3J3YXJkICIgXGZcdFxuXHJcdiIpCiAgKGxldCAoKHAgKHBvaW50KSkpCiAgICAoc2V0cSBz IChvciAoaHRtbC0+cmVhZC10YWcpCiAgICAgICAgICAgICAgICAoaHRtbC0+cmVhZC10ZXh0KSkp CiAgICAoZGVsZXRlLXJlZ2lvbiBwIChwb2ludCkpCiAgICAoc2V0cSB0eXBlIChjb25kICgobGlz dHAgcykKICAgICAgICAgICAgICAgICAgICAgIChjb25kICgoYXNzb2MgKGNhciBzKSBodG1sLXNw ZWNpYWwtdGFncykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1BFQ0lBTC1UQUcpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKG1lbWJlciAiLyIgKGNhZHIgcykpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ1VOVVNFRC1UQUcpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKGVxdWFsIChlbHQgKGNhciBzKSAwKSA/LykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnQ0xPU0UtVEFHKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnT1BFTi1UQUcpKSkKICAgICAgICAgICAgICAgICAgICAgKCdU RVhUKSkpCiAgICAoc2V0cSBleHByCiAgICAgICAgICAoY29uZCAoKGVxIHR5cGUgJ1NQRUNJQUwt VEFHKQogICAgICAgICAgICAgICAgIChmb3JtYXQgIiglcykgIiAoY2RyIChhc3NvYyAoY2FyIHMp IGh0bWwtc3BlY2lhbC10YWdzKSkpKQogICAgICAgICAgICAgICAgKChlcSB0eXBlICdVTlVTRUQt VEFHKQogICAgICAgICAgICAgICAgICIiKQogICAgICAgICAgICAgICAgKChlcSB0eXBlICdDTE9T RS1UQUcpCiAgICAgICAgICAgICAgICAgKHNldHEgZGVwdGggKDEtIGRlcHRoKSkKICAgICAgICAg ICAgICAgICAiKSAiKQogICAgICAgICAgICAgICAgKChlcSB0eXBlICdPUEVOLVRBRykKICAgICAg ICAgICAgICAgICAoc2V0cSBkZXB0aCAoMSsgZGVwdGgpKQogICAgICAgICAgICAgICAgIChmb3Jt YXQgIiglcyBcJyVzICIgKGNhciBzKSAoY2RyIHMpKSkKICAgICAgICAgICAgICAgICgoZXEgdHlw ZSAnVEVYVCkKICAgICAgICAgICAgICAgICAoZm9ybWF0ICJcIiVzXCIgIiBzKSkpKSkpCgooZGVm dW4gaHRtbC0+bGlzcCAoKQogIChtZXNzYWdlICJodG1sLT5saXNwIHN0YXJ0IikKICAoY2F0Y2gg J0VORAogICAgKGxldCAoKGRlcHRoIDApCiAgICAgICAgICBzCiAgICAgICAgICB0eXBlCiAgICAg ICAgICBleHByKQogICAgICAod2hpbGUgdAogICAgICAgIChodG1sLT5zdHJ1Y3QpCiAgICAgICAg KGluc2VydCBleHByKQogICAgICAgICh3aGVuICh6ZXJvcCBkZXB0aCkKICAgICAgICAgICh0aHJv dyAnRU5EIG5pbCkpKSkpCiAgKG1lc3NhZ2UgImh0bWwtPmxpc3AgZW5kIikKICApCgooZGVmdW4g aHRtbC0+cHJldHR5LXByaW50ICh0ZXh0IGluZGVudCkKICAobGV0IChyIHMpCiAgICAoc2V0cSBz IChzcGxpdC1zdHJpbmcgdGV4dCkpCiAgICAoY2F0Y2ggJ1NUT1AKICAgICAgKHdoaWxlIHQKICAg ICAgICAobGV0IChubCkKICAgICAgICAgICh3aGlsZSAob3IgKGFuZCBzICg8IChsZW5ndGggbmwp ICgtIDEwMCBpbmRlbnQpKSkKICAgICAgICAgICAgICAgICAgICAgKGFuZCBzIChudWxsIChzdHJp bmctbWF0Y2ggIltbOmFscGhhOl1dIiAoc3Vic3RyaW5nIChjYXIgcykgMCAxKSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKG5vdCAobWVtYmVyIChlbHQgKGNhciBzKSAwKSAnKD9cKCA/XMKr KSApKSkpCiAgICAgICAgICAgIChzZXRxIG5sIChjb25jYXQgbmwgKGlmIChtZW1iZXIgKGVsdCAo Y2FyIHMpIDApICcoPywgPy4pKSAiIiAiICIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNhciBzKSkKICAgICAgICAgICAgICAgICAgcyAoY2RyIHMpKSkKICAgICAgICAgIChzZXRxIHIg KGNvbmNhdCByIChjb25jYXQgIlxuIiAobWFrZS1zdHJpbmcgaW5kZW50ID8gKSBubCkpKSkKICAg ICAgICAoYW5kIChudWxsIHMpCiAgICAgICAgICAgICAodGhyb3cgJ1NUT1AgcikpKSkpKQoKOzsg aHRtbCBkZWZpbml0aW9uCgooZGVmdW4gQiAocHJvcCAmcmVzdCB0ZXh0KQogIChjb25jYXQqIHRl eHQpKQoKKGRlZnVuIFNVUCAocHJvcCAmcmVzdCB0ZXh0KQogIChjb25jYXQqIHRleHQpKQoKKGRl ZnVuIEkgKHByb3AgJnJlc3QgdGV4dCkKICAoY29uY2F0KiB0ZXh0KSkKCihkZWZ1biBDRU5URVIg KHByb3AgJnJlc3QgdGV4dCkKICAoY29uY2F0KiB0ZXh0KSkKCihkZWZ1biBJTlBVVCAocHJvcCAm cmVzdCB0ZXh0KQogICIiKQoKKGRlZmNvbnN0IGRpdi1mb3JiaWRkZW4tY2xhc3NlcyBuaWwpCgoo ZGVmdW4gRElWIChwcm9wICZyZXN0IHRleHQpCiAgKGxldCogKChkY2xhc3MgKGNkciAoYXNzb2Mg J0NMQVNTIHByb3ApKSkKICAgICAgICAgKGRpZCAoY2RyIChhc3NvYyAnSUQgcHJvcCkpKQogICAg ICAgICBpbmRlbnQKICAgICAgICAgKEUgIiIpCiAgICAgICAgICkKICAgIChjb25kICgobWVtYmVy IGRjbGFzcyBkaXYtZm9yYmlkZGVuLWNsYXNzZXMpCiAgICAgICAgICAgKQogICAgICAgICAgKChz dHJpbmctZXF1YWwgKGNhYXIgcHJvcCkgIklEIikKICAgICAgICAgICAoc2V0cSBpbmRlbnQgNCkp CiAgICAgICAgICAoKHN0cmluZy1lcXVhbCAiVExGX1BBUkFQVVRJUiIgZGNsYXNzKQogICAgICAg ICAgIChhbmQgdGV4dCAoc2V0Y2FyIChjZHIgdGV4dCkgKHN1YnN0cmluZyAoY2FkciB0ZXh0KSAo c3RyaW5nLW1hdGNoICJbWzpncmFwaDpdXSIgKGNhZHIgdGV4dCkpKSkpCiAgICAgICAgICAgKHNl dHEgRSAoY29uY2F0KiB0ZXh0KSkKICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAwIDEg JyhmYWNlICg6Zm9yZWdyb3VuZCAiZ3JlZW4iICkpICBFKQogICAgICAgICAgIChzZXRxIEUgKGNv bmNhdCAiXG5cbiAiIEUpKSkKICAgICAgICAgICgoYW5kIHRleHQKICAgICAgICAgICAgICAgIChz dHJpbmctZXF1YWwgIlRMRl9QQVJPVEhFUlMiIGRjbGFzcykKICAgICAgICAgICAgICAgIChvciAo c3RyaW5nLW1hdGNoICJQcm9ub25jLiIgKGNhciB0ZXh0KSkKICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLW1hdGNoICJCQkcuIiAoY2FyIHRleHQpKQogICAgICAgICAgICAgICAgICAgIChzdHJp bmctbWF0Y2ggIlNUQVQuIiAoY2FyIHRleHQpKQogICAgICAgICAgICAgICAgICAgIChzdHJpbmct bWF0Y2ggIsOJdHltb2wuIiAoY2FyIHRleHQpKSkpCiAgICAgICAgICAgKQogICAgICAgICAgKChh bmQgdGV4dAogICAgICAgICAgICAgICAgKHN0cmluZy1lcXVhbCAiVExGX1BBUk9USEVSUyIgZGNs YXNzKQogICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiUmVtLiIgKGNhciB0ZXh0KSkpCiAg ICAgICAgICAgKHNldHEgRSAoY29uY2F0KiB0ZXh0KSkKICAgICAgICAgICAoYWRkLXRleHQtcHJv cGVydGllcyAwIChsZW5ndGggRSkgJyhmYWNlICg6Zm9yZWdyb3VuZCAieWVsbG93IiApKSAgRSkK ICAgICAgICAgICAoc2V0cSBFIChodG1sLT5wcmV0dHktcHJpbnQgRSA3KSkKICAgICAgICAgICAo c2V0cSBFIChjb25jYXQgIlxuIiBFKSkKICAgICAgICAgICApCiAgICAgICAgICAoKHN0cmluZy1l cXVhbCAiVExGX0NWRURFVFRFIiBkY2xhc3MpCiAgICAgICAgICAgKGxldCogKHoKICAgICAgICAg ICAgICAgICAgKGRlZiAobWFwY2FyICdjYXIgb3RoZXItZGVmaW5pdGlvbnMpKSkKICAgICAgICAg ICAgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdCAoY29uY2F0ICLCqyAiIChjb25jYXQqIHRleHQp ICIgwrsiIChmb3JtYXQgIiAgJXMgIiBkZWYpKSkpCiAgICAgICAgICAgKHNldHEgaW5kZW50IG5p bCkKICAgICAgICAgICApCiAgICAgICAgICAoKHN0cmluZy1lcXVhbCAiVExGX1BBUkFIIiBkY2xh c3MpCiAgICAgICAgICAgKGFuZCB0ZXh0IChzZXRjYXIgdGV4dCAoc3Vic3RyaW5nIChjYXIgdGV4 dCkgMCAoc3RyaW5nLW1hdGNoICIgIiAoY2FyIHRleHQpKSkpKQogICAgICAgICAgIChhbmQgdGV4 dCAoc2V0Y2FyIChjZHIgdGV4dCkgKHN1YnN0cmluZyAoY2FkciB0ZXh0KSAoc3RyaW5nLW1hdGNo ICJbWzpncmFwaDpdXSIgKGNhZHIgdGV4dCkpKSkpCiAgICAgICAgICAgKHNldHEgRSAoY29uY2F0 KiB0ZXh0KSkKICAgICAgICAgICAoc2V0cSBFIChjb25jYXQgIlxuXG4gIiBFKSkKICAgICAgICAg ICApCiAgICAgICAgICAoKHN0cmluZy1lcXVhbCAiVExGX1RBQlVMQVRJT04iIGRjbGFzcykKICAg ICAgICAgICAoc2V0cSBpbmRlbnQgMTApKQogICAgICAgICAgKHQKICAgICAgICAgICAoc2V0cSBp bmRlbnQgMCkKICAgICAgICAgICAoc2V0cSB0ZXh0IChhcHBlbmQgdGV4dCAnKCJcbiIpKSkpKQog ICAgKGlmIGluZGVudAogICAgICAgIChjb25jYXQgIlxuIiAobWFrZS1zdHJpbmcgaW5kZW50ID8g KSAoY29uY2F0KiB0ZXh0KSkKICAgICAgRSkpKQoKKGRlZmNvbnN0IHNwYW4tZm9yYmlkZGVuLWNs YXNzZXMgbmlsKQoKKGRlZnVuIFNQQU4gKHByb3AgJnJlc3QgdGV4dCkKICAobGV0ICgoc2NsYXNz IChjZGFyIHByb3ApKSByIGkgYyBmb3JiaWQpCiAgICAoY29uZCAoKG1lbWJlciBzY2xhc3Mgc3Bh bi1mb3JiaWRkZW4tY2xhc3NlcykKICAgICAgICAgICAiIiApCiAgICAgICAgKChzdHJpbmctZXF1 YWwgc2NsYXNzICJUTEZfQ01PVCIpCiAgICAgICAgIChzZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3Vu ZCAicmVkIiApKSkgKGNvbmNhdCogdGV4dCkpCiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNz ICJUTEZfQ0NPREUiKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAoOmZvcmVncm91bmQgImdyZWVu IiApKSkgKGNvbmNhdCogdGV4dCkpCiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNzICJUTEZf Q1BMQU4iKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAoOmZvcmVncm91bmQgIkRlZXBQaW5rMSIg KSkpIChjb25jYXQqIHRleHQpKQogICAgICAgICgoc3RyaW5nLWVxdWFsIHNjbGFzcyAiVExGX0NF TVBMT0kiKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAoOmZvcmVncm91bmQgImN5YW4iICkpCiAg ICAgICAgICAgICAgIGkgMykpCiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNzICJUTEZfQ0RF RklOSVRJT04iKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAoOmZvcmVncm91bmQgIkRvZGdlckJs dWUiICkpCiAgICAgICAgICAgICAgIGkgNSkpCiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNz ICJUTEZfUEFSQUgiKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAoOmZvcmVncm91bmQgIlNsYXRl Qmx1ZSIgKSkpIChjb25jYXQqIHRleHQpKQogICAgICAgICgoc3RyaW5nLWVxdWFsIHNjbGFzcyAi VExGX0NTWU5PTklNRSIpCiAgICAgICAgIChzZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAiTWVk aXVtU2VhR3JlZW4iICkpCiAgICAgICAgICAgICAgIGkgMTApKQogICAgICAgICgoc3RyaW5nLWVx dWFsIHNjbGFzcyAiVExGX0NTWU5UQUdNRSIpCiAgICAgICAgIChzZXRxIGMgJyhmYWNlICg6Zm9y ZWdyb3VuZCAiRGFya0dyZWVuIiApKQogICAgICAgICAgICAgICBpIDEyKSkKICAgICAgICAoKHN0 cmluZy1lcXVhbCBzY2xhc3MgIlRMRl9DVElUUkUiKQogICAgICAgICAoc2V0cSBjICcoZmFjZSAo OmZvcmVncm91bmQgIkxhd25HcmVlbiIgKSkKICAgICAgICAgICAgICAgZm9yYmlkIHQpKQogICAg ICAgICgoc3RyaW5nLWVxdWFsIHNjbGFzcyAiVExGX0NDUk9DSEVUIikKICAgICAgICAgKHNldHEg YyAnKGZhY2UgKDpmb3JlZ3JvdW5kICJJbmRpYW5SZWQiICkpCiAgICAgICAgICAgICAgIGkgNSkp CiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNzICJUTEZfQ0FVVEVVUiIpCiAgICAgICAgIChz ZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAiRGFya0toYWtpIiApKQogICAgICAgICAgICAgICBm b3JiaWQgdCkpCiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNzICJUTEZfU01BTExDQVBTIikK ICAgICAgICAgKHdoZW4gdGV4dCAoc2V0cSB0ZXh0IChsaXN0ICh1cGNhc2UgKGNvbmNhdCogdGV4 dCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAib3Jh bmdlIiApKSkpCiAgICAgICAgICkKICAgICAgICAoKHN0cmluZy1lcXVhbCBzY2xhc3MgIlRMRl9D RVhFTVBMRSIpCiAgICAgICAgIChzZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAidG9tYXRvMSIg KSkKICAgICAgICAgICAgICAgaSAxNSkKICAgICAgICAgKQogICAgICAgICgoc3RyaW5nLWVxdWFs IHNjbGFzcyAiVExGX0NEQVRFIikKICAgICAgICAgKHNldHEgYyAnKGZhY2UgKDpmb3JlZ3JvdW5k ICJCbHVlVmlvbGV0IiApKQogICAgICAgICAgICAgICBmb3JiaWQgdCkpCiAgICAgICAgKChzdHJp bmctZXF1YWwgc2NsYXNzICJUTEZfQ0NPTlNUUlVDVElPTiIpCiAgICAgICAgIChzZXRxIGMgJyhm YWNlICg6Zm9yZWdyb3VuZCAiTGVtb25DaGlmZm9uMyIgKSkKICAgICAgICAgICAgICAgaSAxNCkp CiAgICAgICAgKChzdHJpbmctZXF1YWwgc2NsYXNzICJUTEZfQ1NPVVJDRSIpCiAgICAgICAgIChz ZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAiTGF2ZW5kZXJCbHVzaDMiICkpKSAoY29uY2F0KiB0 ZXh0KSkKICAgICAgICAoKHN0cmluZy1lcXVhbCBzY2xhc3MgIlRMRl9DRE9NQUlORSIpCiAgICAg ICAgIChzZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAiRGVlcFNreUJsdWU0ICIgKSkpIChjb25j YXQqIHRleHQpKQogICAgICAgICgoc3RyaW5nLWVxdWFsIHNjbGFzcyAiVExGX0NQVUJMSUNBVElP TiIpCiAgICAgICAgIChzZXRxIGMgJyhmYWNlICg6Zm9yZWdyb3VuZCAiTGVtb25DaGlmZm9uMyIg KSkpIChjb25jYXQqIHRleHQpKQogICAgICAgICh0CiAgICAgICAgIChtZXNzYWdlICJiYWxpc2Ug JXMgaW5jb25udWUiIHNjbGFzcykKICAgICAgICAgKHNldHEgYyAnKGZhY2UgKDpmb3JlZ3JvdW5k ICJMZW1vbkNoaWZmb24zIiApKSkpKQogICAgKHNldHEgciAoY29uY2F0KiB0ZXh0KSkKICAgIChh bmQgaSAoc2V0cSByIChodG1sLT5wcmV0dHktcHJpbnQgciBpKSkpCiAgICAoYWRkLXRleHQtcHJv cGVydGllcyAwIChsZW5ndGggcikgYyAgcikKICAgIChpZiBmb3JiaWQgIlgiIHIpKSkKCihkZWZ1 biBUUiAocHJvcCAmcmVzdCB0ZXh0KQogIHRleHQpCgooZGVmdW4gVEQgKHByb3AgJnJlc3QgdGV4 dCkKICB0ZXh0KQoKKGRlZnVuIFRBQkxFIChwcm9wICZyZXN0IHJvd3MpCiAgcm93cykKCihkZWZ1 biBORVdMSU5FICgmcmVzdCB4KQogICJcbiIpCgo7OyAoY25ydGwtZ2V0ICdtYXJtaXRlKQo= ------=_Part_131904_18940734.1214168175975--