From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id sKIPObx52WOUzgAAbAwnHQ (envelope-from ) for ; Tue, 31 Jan 2023 21:27:41 +0100 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id 8DgRObx52WNnZgAA9RJhRA (envelope-from ) for ; Tue, 31 Jan 2023 21:27:40 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 42DB023C26 for ; Tue, 31 Jan 2023 21:27:39 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pMxDU-0000sz-SZ; Tue, 31 Jan 2023 15:26:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pMxDT-0000sp-1X for emacs-orgmode@gnu.org; Tue, 31 Jan 2023 15:26:55 -0500 Received: from mx0.riseup.net ([198.252.153.6]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pMxDQ-0003uU-Qj for emacs-orgmode@gnu.org; Tue, 31 Jan 2023 15:26:54 -0500 Received: from fews1.riseup.net (fews1-pn.riseup.net [10.0.1.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.riseup.net", Issuer "R3" (not verified)) by mx0.riseup.net (Postfix) with ESMTPS id 4P5xRF5fHCz9rwy for ; Tue, 31 Jan 2023 20:26:49 +0000 (UTC) X-Riseup-User-ID: 7F0AEFCEB159416A53023FE32967CA5768C0068B7271A79A6EEF1776276BD922 Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews1.riseup.net (Postfix) with ESMTPSA id 4P5xRD6R0mz5vRl for ; Tue, 31 Jan 2023 20:26:48 +0000 (UTC) From: Hanno Perrey To: Subject: [BUG] hang in org-element-cache-map triggered by org-icalendar-export-to-ics Date: Tue, 31 Jan 2023 21:10:05 +0100 Message-ID: <87pmau4fi3.fsf@hoowl.se> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: none client-ip=198.252.153.6; envelope-from=hanno@hoowl.se; helo=mx0.riseup.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Seal: i=1; s=key1; d=yhetil.org; t=1675196859; a=rsa-sha256; cv=none; b=etDSocKJHIhsfTXcoxNYOwdVsZ4jgR/8iSr6wg/3zoXw0d+HYxKiGn516I16LLGKOJXw/E 3zogHHRnK+94m0nLdavq6Ec6ibbn0rOSYMJBmLGGdrENceNTH819oKjZWoK5TmdALGE15Q TNZRIiHAD3ST2U+APK8jLIk+l0ttb6xZsL8Z96ornaTRVitvV2VRRJXGGz1hfThAFgis72 LMYASI11cR+0P2S0uyjNNoXZjGBRsoMh3sxUSzHtYAcyPdxyiith08oL5qxbe0B1UcFJhQ 9KDVu0jvjTLQZg9Fu2DTp6cgx+KEdtG6ksMhrQpG9UUOuoP4Y8Jr8t4EJtgi+A== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1675196859; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=cIHJwDTfjf37MJWIybIj8IdW9rnhhCiSvo68QfqC8BQ=; b=nrQet/oeYqinvBM6ADd7OUeJ9SFZ+OGaL7YfY4+vU2g6MO9BO0iX8quwDsXTv9flyUF0Uk hc1ghE1z/T9x6rLP+G1t97aP1txWlb7lj07uayUnnK/uWtRE+AELipjaKrqJEOG8YizIxH tTfouQoxhap5jAdrzJacevd4SL3MNokvTn4erif+ns5+jF3mTzvTZ3TvL4QkK8Mu8IhPTE gmQFGmUxDA2pFIG2mUEIF3PvAoC4XsGwvO/1+c5A2R1YhfjG9770OL0MQmowTGx02faYfs Jlv00kuGLF6V7Et06q6WtzbqCcvY0DRYyM9zUFmxTpF+B1YKTzig3rPIhmy+tw== Authentication-Results: aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=none X-Migadu-Scanner: scn1.migadu.com X-Migadu-Spam-Score: -1.48 X-Spam-Score: -1.48 X-Migadu-Queue-Id: 42DB023C26 X-TUID: mdCuMQrZRWgs --=-=-= Content-Type: text/plain Dear all, I have noticed a problem in =org-element-cache-map= that can be triggered under specific circumstances through =org-icalendar-export-to-ics= where the execution of the latter would simply hang apparently indefinitely. This happens if - =org-icalendar-store-UID= set to ='t= - =org-icalendar-use-scheduled= set to = '(event-if-not-todo))= - the buffer is narrowed to a tree with multiple sub-headings, each with a scheduled time If =org-element-use-cache= is set to =nil= then the export succeeds almost instantly. I attach an org file with detailed steps for reproducing this on the latest =main= using =make repro= on Emacs 28.1.90. I am a little stuck debugging this further as I am not at all familiar with the inner workings of Org's element cache. Any help or suggestions would be much appreciated as I am using just this particular configuration quite frequently when capturing new events and importing them into my calendar. Thanks and cheers, Hanno -- Hanno Perrey https://hoowl.se --=-=-= Content-Type: application/vnd.lotus-organizer Content-Disposition: attachment; filename=test_subtree_ical_export.org Content-Transfer-Encoding: base64 UnVuIHRoZSBmb2xsb3dpbmcgYmxvY2sgdG8gY29uZmlndXJlID1pY2FsZW5kYXI9OgoKIytiZWdp bl9zcmMgZW1hY3MtbGlzcAogIChzZXRxCiAgIG9yZy1pY2FsZW5kYXItc3RvcmUtVUlEICd0CiAg IG9yZy1pY2FsZW5kYXItdXNlLXNjaGVkdWxlZCAnKGV2ZW50LWlmLW5vdC10b2RvKSkKKG9yZy12 ZXJzaW9uKQojK2VuZF9zcmMKCiMrUkVTVUxUUzoKOiA5LjYuMQoKTm93IHBsYWNlIHRoZSBjdXJz b3Igb24gdGhlIHRvcCBoZWFkaW5nIGJlbG93ICgiTWFpbiBFdmVudCIpIGFuZCBydW4Kfk0teCBv cmctdHJlZS10by1pbmRpcmVjdC1idWZmZXJ+IHRvIG5hcnJvdyB0byB0aGF0IHRyZWUsIHNlbGVj dCB0aGUKaW5kaXJlY3QgYnVmZmVyIGFuZCBydW4gfk0teCBvcmctaWNhbGVuZGFyLWV4cG9ydC10 by1pY3N+LgoKLSBFeHBlY3RlZCBvdXRjb21lIDo6IGFuID0uaWNzPSBmaWxlIHNob3VsZCBiZSBj cmVhdGVkIHdpdGggYQogID1WQ0FMRU5EQVI9IGNvbnRhaW5pbmcgYSA9VkVWRU5UPSBmb3IgZWFj aCBvZiB0aGUgaGVhZGluZ3Mgc2hvd24gaW4KICB0aGUgaW5kaXJlY3QgYnVmZmVyLgotIFdoYXQg YWN0dWFsbHkgaGFwcGVucyA6OiBUaGUgZXhlY3V0aW9uIGRvZXMgbm90IHNlZW0gdG8gZXZlciBm aW5pc2g7CiAgcHJlc3NpbmcgfkMtZ34gd2lsbCBmaW5hbGx5IGxlYXZlIGFuIFVJRCBmb3IgdGhl IGZpcnN0IGhlYWRpbmcgYnV0CiAgbm90IGFueSBvZiB0aGUgZm9sbG93aW5nLiBObyA9aWNzPSBm aWxlIGlzIGJlaW5nIGNyZWF0ZWQuCi0gV29ya2Fyb3VuZCA6OiAgfihzZXRxIG9yZy1lbGVtZW50 LXVzZS1jYWNoZSBuaWwpfiB3aWxsIG1ha2UgdGhlCiAgcmVzdWx0cyBhcHBlYXIgYWxtb3N0IGlu c3RhbnRseSAoYXMgZXhwZWN0ZWQpCgoqIE1haW4gRXZlbnQKU0NIRURVTEVEOiA8MjAyMy0wMi0w NyBUdWU+CioqIFN1YiBldmVudCAxClNDSEVEVUxFRDogPDIwMjMtMDMtMDcgVHVlPgoqKiBTdWIg ZXZlbnQgMgpTQ0hFRFVMRUQ6IDwyMDIzLTAzLTE0IFR1ZT4KCiogQmFja3RyYWNlCiMrYmVnaW5f ZXhhbXBsZQpEZWJ1Z2dlciBlbnRlcmVkLS1MaXNwIGVycm9yOiAocXVpdCkKICAoY29uZCAoKG5v dCAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKSkgb3V0bGluZS1yZWdleHApICgobm90IChmZWF0 dXJlcCAnb3JnLWlubGluZXRhc2spKSBvcmctb3V0bGluZS1yZWdleHApICh0IChsZXQqICgobGlt aXQtbGV2ZWwgKDEtIG9yZy1pbmxpbmV0YXNrLW1pbi1sZXZlbCkpIChuc3RhcnMgKGlmIG9yZy1v ZGQtbGV2ZWxzLW9ubHkgKDEtICgqIGxpbWl0LWxldmVsIDIpKSBsaW1pdC1sZXZlbCkpKSAoZm9y bWF0ICJcXCpcXHsxLCVkXFx9ICIgbnN0YXJzKSkpKQogIG9yZy1nZXQtbGltaXRlZC1vdXRsaW5l LXJlZ2V4cCgpCiAgKGxldCogKChvcmctY2FsbGVkLXdpdGgtbGltaXRlZC1sZXZlbHMgdCkgKG9y Zy1vdXRsaW5lLXJlZ2V4cCAob3JnLWdldC1saW1pdGVkLW91dGxpbmUtcmVnZXhwKSkgKG91dGxp bmUtcmVnZXhwIG9yZy1vdXRsaW5lLXJlZ2V4cCkgKG9yZy1vdXRsaW5lLXJlZ2V4cC1ib2wgKGNv bmNhdCAiXiIgb3JnLW91dGxpbmUtcmVnZXhwKSkpIChvdXRsaW5lLXByZXZpb3VzLWhlYWRpbmcp KQogIChwcm9nbiAoZGVmdmFyIG9yZy1jYWxsZWQtd2l0aC1saW1pdGVkLWxldmVscykgKGRlZnZh ciBvcmctb3V0bGluZS1yZWdleHApIChkZWZ2YXIgb3V0bGluZS1yZWdleHApIChkZWZ2YXIgb3Jn LW91dGxpbmUtcmVnZXhwLWJvbCkgKGxldCogKChvcmctY2FsbGVkLXdpdGgtbGltaXRlZC1sZXZl bHMgdCkgKG9yZy1vdXRsaW5lLXJlZ2V4cCAob3JnLWdldC1saW1pdGVkLW91dGxpbmUtcmVnZXhw KSkgKG91dGxpbmUtcmVnZXhwIG9yZy1vdXRsaW5lLXJlZ2V4cCkgKG9yZy1vdXRsaW5lLXJlZ2V4 cC1ib2wgKGNvbmNhdCAiXiIgb3JnLW91dGxpbmUtcmVnZXhwKSkpIChvdXRsaW5lLXByZXZpb3Vz LWhlYWRpbmcpKSkKICAoaWYgKHByb2duIChkZWZ2YXIgb3JnLWNhbGxlZC13aXRoLWxpbWl0ZWQt bGV2ZWxzKSAoZGVmdmFyIG9yZy1vdXRsaW5lLXJlZ2V4cCkgKGRlZnZhciBvdXRsaW5lLXJlZ2V4 cCkgKGRlZnZhciBvcmctb3V0bGluZS1yZWdleHAtYm9sKSAobGV0KiAoKG9yZy1jYWxsZWQtd2l0 aC1saW1pdGVkLWxldmVscyB0KSAob3JnLW91dGxpbmUtcmVnZXhwIChvcmctZ2V0LWxpbWl0ZWQt b3V0bGluZS1yZWdleHApKSAob3V0bGluZS1yZWdleHAgb3JnLW91dGxpbmUtcmVnZXhwKSAob3Jn LW91dGxpbmUtcmVnZXhwLWJvbCAoY29uY2F0ICJeIiBvcmctb3V0bGluZS1yZWdleHApKSkgKG91 dGxpbmUtcHJldmlvdXMtaGVhZGluZykpKSAocHJvZ24gKHNldHEgZWxlbWVudCAob3JnLWVsZW1l bnQtaGVhZGxpbmUtcGFyc2VyIG5pbCAnZmFzdCkpIChzZXRxIG1vZGUgJ3BsYW5uaW5nKSAoZm9y d2FyZC1saW5lKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQtb3JnLWRhdGEtcGFyc2VyKSkg KHNldHEgbW9kZSAnb3JnLWRhdGEpKQogIChjb25kICgoYW5kIChub3QgY2FjaGVkKSAob3JnLWVs ZW1lbnQtLWNhY2hlLWFjdGl2ZS1wKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQtb3JnLWRh dGEtcGFyc2VyKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkgbmls IChsZXQqICgoZm9ybWF0LXN0cmluZyAoZm9ybWF0ICJFcnJvciBwYXJzaW5nIG9yZy1kYXRhLiBH b3QgJVNcblBsZWFzZSByZXBvcnQgdG8gT3IuLi4iIGVsZW1lbnQpKSAoZm9ybWF0LXN0cmluZyAo aWYgKG9yIC4uLiAuLi4pIGZvcm1hdC1zdHJpbmcgKHByb2cxIC4uLiAuLi4pKSkpIChpZiAoYW5k IChib3VuZHAgJ29yZy1iYXRjaC10ZXN0KSBvcmctYmF0Y2gtdGVzdCkgKGVycm9yICIlcyIgKGNv bmNhdCAib3JnLWVsZW1lbnQtLWNhY2hlOiAiIGZvcm1hdC1zdHJpbmcpKSAoZGlzcGxheS13YXJu aW5nICdvcmctZWxlbWVudC1jYWNoZSAoY29uY2F0ICJvcmctZWxlbWVudC0tY2FjaGU6ICIgZm9y bWF0LXN0cmluZykpKSkpIChpZiAob3Igb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChl cSBvcmctZWxlbWVudC0tY2FjaGUtc2VsZi12ZXJpZnkgJ2JhY2t0cmFjZSkpIChwcm9nbiAobGV0 KiAoKGZvcm1hdC1zdHJpbmcgKGNvbmNhdCAuLi4gIk5vdGhpbmcgaW4gY2FjaGUuIEFkZGluZyBv cmctZGF0YTogJVMiKSkgKGZvcm1hdC1zdHJpbmcgKGZvcm1hdCBmb3JtYXQtc3RyaW5nIC4uLikp KSAoaWYgb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChkaXNwbGF5LXdhcm5pbmcgJ29y Zy1lbGVtZW50LWNhY2hlIGZvcm1hdC1zdHJpbmcpIChpZiBvcmctZWxlbWVudC0tY2FjaGUtZGlh Z25vc3RpY3MtcmluZyBuaWwgKHNldHEgb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzLXJp bmcgLi4uKSkgKHJpbmctaW5zZXJ0IG9yZy1lbGVtZW50LS1jYWNoZS1kaWFnbm9zdGljcy1yaW5n IGZvcm1hdC1zdHJpbmcpKSkpKSAob3JnLWVsZW1lbnQtLWNhY2hlLXB1dCBlbGVtZW50KSAoZ290 by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtYmVnaW4gZWxlbWVudCkpIChz ZXRxIG1vZGUgJ29yZy1kYXRhKSkgKChub3QgY2FjaGVkKSAoaWYgKHByb2duIChkZWZ2YXIgb3Jn LWNhbGxlZC13aXRoLWxpbWl0ZWQtbGV2ZWxzKSAoZGVmdmFyIG9yZy1vdXRsaW5lLXJlZ2V4cCkg KGRlZnZhciBvdXRsaW5lLXJlZ2V4cCkgKGRlZnZhciBvcmctb3V0bGluZS1yZWdleHAtYm9sKSAo bGV0KiAoKG9yZy1jYWxsZWQtd2l0aC1saW1pdGVkLWxldmVscyB0KSAob3JnLW91dGxpbmUtcmVn ZXhwIChvcmctZ2V0LWxpbWl0ZWQtb3V0bGluZS1yZWdleHApKSAob3V0bGluZS1yZWdleHAgb3Jn LW91dGxpbmUtcmVnZXhwKSAob3JnLW91dGxpbmUtcmVnZXhwLWJvbCAoY29uY2F0ICJeIiBvcmct b3V0bGluZS1yZWdleHApKSkgKG91dGxpbmUtcHJldmlvdXMtaGVhZGluZykpKSAocHJvZ24gKHNl dHEgZWxlbWVudCAob3JnLWVsZW1lbnQtaGVhZGxpbmUtcGFyc2VyIG5pbCAnZmFzdCkpIChzZXRx IG1vZGUgJ3BsYW5uaW5nKSAoZm9yd2FyZC1saW5lKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1l bnQtb3JnLWRhdGEtcGFyc2VyKSkgKHNldHEgbW9kZSAnb3JnLWRhdGEpKSAob3JnLXNraXAtd2hp dGVzcGFjZSkgKGJlZ2lubmluZy1vZi1saW5lKSkgKHQgKGxldCAoKHVwIGNhY2hlZCkgKHBvcyAo aWYgKD0gKHBvaW50LW1heCkgcG9zKSAoMS0gcG9zKSBwb3MpKSkgKHdoaWxlIChhbmQgdXAgKDw9 IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHVwKSBwb3MpKSAoZ290by1jaGFyIChvcmctZWxl bWVudC1wcm9wZXJ0eSA6ZW5kIHVwKSkgKHNldHEgZWxlbWVudCB1cCBtb2RlIChvcmctZWxlbWVu dC0tbmV4dC1tb2RlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bW9kZSBlbGVtZW50KSAob3JnLWVs ZW1lbnQtdHlwZSBlbGVtZW50KSBuaWwpIHVwIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGFyZW50 IHVwKSBuZXh0IChwb2ludCkpKSAoaWYgdXAgKHByb2duIChzZXRxIGVsZW1lbnQgdXApKSkpKSkK ICAobGV0KiAoKGNhY2hlZCAoYW5kIChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApIChvcmct ZWxlbWVudC0tY2FjaGUtZmluZCBwb3MgbmlsKSkpIChtb2RlIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6bW9kZSBjYWNoZWQpKSBlbGVtZW50IG5leHQpIChjb25kICgoYW5kIChub3QgY2FjaGVkKSAo b3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2ZS1wKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQt b3JnLWRhdGEtcGFyc2VyKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVu dCkgbmlsIChsZXQqICgoZm9ybWF0LXN0cmluZyAoZm9ybWF0ICJFcnJvciBwYXJzaW5nIG9yZy1k YXRhLiBHb3QgJVNcblBsZWFzZSByZXBvcnQgdG8gT3IuLi4iIGVsZW1lbnQpKSAoZm9ybWF0LXN0 cmluZyAoaWYgLi4uIGZvcm1hdC1zdHJpbmcgLi4uKSkpIChpZiAoYW5kIChib3VuZHAgLi4uKSBv cmctYmF0Y2gtdGVzdCkgKGVycm9yICIlcyIgKGNvbmNhdCAib3JnLWVsZW1lbnQtLWNhY2hlOiAi IGZvcm1hdC1zdHJpbmcpKSAoZGlzcGxheS13YXJuaW5nICdvcmctZWxlbWVudC1jYWNoZSAoY29u Y2F0ICJvcmctZWxlbWVudC0tY2FjaGU6ICIgZm9ybWF0LXN0cmluZykpKSkpIChpZiAob3Igb3Jn LWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChlcSBvcmctZWxlbWVudC0tY2FjaGUtc2VsZi12 ZXJpZnkgJ2JhY2t0cmFjZSkpIChwcm9nbiAobGV0KiAoKGZvcm1hdC1zdHJpbmcgLi4uKSAoZm9y bWF0LXN0cmluZyAuLi4pKSAoaWYgb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChkaXNw bGF5LXdhcm5pbmcgLi4uIGZvcm1hdC1zdHJpbmcpIChpZiBvcmctZWxlbWVudC0tY2FjaGUtZGlh Z25vc3RpY3MtcmluZyBuaWwgLi4uKSAocmluZy1pbnNlcnQgb3JnLWVsZW1lbnQtLWNhY2hlLWRp YWdub3N0aWNzLXJpbmcgZm9ybWF0LXN0cmluZykpKSkpIChvcmctZWxlbWVudC0tY2FjaGUtcHV0 IGVsZW1lbnQpIChnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1iZWdp biBlbGVtZW50KSkgKHNldHEgbW9kZSAnb3JnLWRhdGEpKSAoKG5vdCBjYWNoZWQpIChpZiAocHJv Z24gKGRlZnZhciBvcmctY2FsbGVkLXdpdGgtbGltaXRlZC1sZXZlbHMpIChkZWZ2YXIgb3JnLW91 dGxpbmUtcmVnZXhwKSAoZGVmdmFyIG91dGxpbmUtcmVnZXhwKSAoZGVmdmFyIG9yZy1vdXRsaW5l LXJlZ2V4cC1ib2wpIChsZXQqICgob3JnLWNhbGxlZC13aXRoLWxpbWl0ZWQtbGV2ZWxzIHQpIChv cmctb3V0bGluZS1yZWdleHAgLi4uKSAob3V0bGluZS1yZWdleHAgb3JnLW91dGxpbmUtcmVnZXhw KSAob3JnLW91dGxpbmUtcmVnZXhwLWJvbCAuLi4pKSAob3V0bGluZS1wcmV2aW91cy1oZWFkaW5n KSkpIChwcm9nbiAoc2V0cSBlbGVtZW50IChvcmctZWxlbWVudC1oZWFkbGluZS1wYXJzZXIgbmls ICdmYXN0KSkgKHNldHEgbW9kZSAncGxhbm5pbmcpIChmb3J3YXJkLWxpbmUpKSAoc2V0cSBlbGVt ZW50IChvcmctZWxlbWVudC1vcmctZGF0YS1wYXJzZXIpKSAoc2V0cSBtb2RlICdvcmctZGF0YSkp IChvcmctc2tpcC13aGl0ZXNwYWNlKSAoYmVnaW5uaW5nLW9mLWxpbmUpKSAodCAobGV0ICgodXAg Y2FjaGVkKSAocG9zIChpZiAoPSAuLi4gcG9zKSAoMS0gcG9zKSBwb3MpKSkgKHdoaWxlIChhbmQg dXAgKDw9IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHVwKSBwb3MpKSAoZ290by1jaGFyIChv cmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHVwKSkgKHNldHEgZWxlbWVudCB1cCBtb2RlIChvcmct ZWxlbWVudC0tbmV4dC1tb2RlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bW9kZSBlbGVtZW50KSAo b3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSBuaWwpIHVwIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 cGFyZW50IHVwKSBuZXh0IChwb2ludCkpKSAoaWYgdXAgKHByb2duIChzZXRxIGVsZW1lbnQgdXAp KSkpKSkgKGxldCAoKGVuZCAob3IgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkg KHBvaW50LW1heCkpKSAocGFyZW50IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGFyZW50IGVsZW1l bnQpKSkgKHdoaWxlIHQgKGlmIChvcmctZWxlbWVudC0tY2FjaGUtaW50ZXJydXB0LXAgdGltZS1s aW1pdCkgKHByb2duICh0aHJvdyAnb3JnLWVsZW1lbnQtLWNhY2hlLWludGVycnVwdCBuaWwpKSkg KGlmIChhbmQgaW5oaWJpdC1xdWl0IG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtQy1nIHF1 aXQtZmxhZykgKHByb2duIChpZiBxdWl0LWZsYWcgKHByb2duIChzZXRxIG9yZy1lbGVtZW50LS1j YWNoZS1pbnRlcnJ1cHQtQy1nLWNvdW50IC4uLikgKHNldHEgcXVpdC1mbGFnIG5pbCkpKSAoaWYg KD49IG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtQy1nLWNvdW50IG9yZy1lbGVtZW50LS1j YWNoZS1pbnRlcnJ1cHQtQy1nLW1heC1jb3VudCkgKHByb2duIChzZXRxIHF1aXQtZmxhZyB0KSAo c2V0cSBvcmctZWxlbWVudC0tY2FjaGUtaW50ZXJydXB0LUMtZy1jb3VudCAwKSAob3JnLWVsZW1l bnQtY2FjaGUtcmVzZXQpIChlcnJvciAib3JnLWVsZW1lbnQ6IFBhcnNpbmcgYWJvcnRlZCBieSB1 c2VyLiAgQ2FjaGUgaGFzIGIuLi4iKSkpIChtZXNzYWdlIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5 cyAiYG9yZy1lbGVtZW50LS1wYXJzZS1idWZmZXInOiBTdXBwcmVzc2VkIGBcXFtrZXlib2FyLi4u IikgKC0gb3JnLWVsZW1lbnQtLWNhY2hlLWludGVycnVwdC1DLWctbWF4LWNvdW50IG9yZy1lbGVt ZW50LS1jYWNoZS1pbnRlcnJ1cHQtQy1nLWNvdW50KSkpKSAoaWYgZWxlbWVudCBuaWwgKGlmIChz YXZlLWV4Y3Vyc2lvbiAob3JnLXNraXAtd2hpdGVzcGFjZSkgKGVvYnApKSBuaWwgKGxldCogKCh2 bmV3IC4uLikgKG9sZCAuLi4pKSAodW53aW5kLXByb3RlY3QgKHByb2duIC4uLiAuLi4pIChmc2V0 IC4uLiBvbGQpKSkpIChpZiBlbGVtZW50IChzZXRxIGVsZW1lbnQgKG9yIChvcmctZWxlbWVudC0t Y2FjaGUtcHV0IGVsZW1lbnQpIGVsZW1lbnQpKSAodGhyb3cgJ2V4aXQgcGFyZW50KSkgKGlmIChv ciAobm90IChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApKSBwYXJlbnQpIG5pbCAobGV0KiAo KGZvcm1hdC1zdHJpbmcgLi4uKSAoZm9ybWF0LXN0cmluZyAuLi4pKSAoaWYgKGFuZCAuLi4gb3Jn LWJhdGNoLXRlc3QpIChlcnJvciAiJXMiIC4uLikgKGRpc3BsYXktd2FybmluZyAuLi4gLi4uKSkp KSAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGVsZW1lbnQgOnBhcmVudCBwYXJlbnQpKSAobGV0 ICgoZWxlbS1lbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkpICh0eXBlIChv cmctZWxlbWVudC10eXBlIGVsZW1lbnQpKSkgKGNvbmQgKChhbmQgKDw9IGVsZW0tZW5kIHBvcykg KC89IC4uLiBlbGVtLWVuZCkpIChnb3RvLWNoYXIgZWxlbS1lbmQpIChpZiAoZXEgdHlwZSAuLi4p IChwcm9nbiAuLi4pKSAoc2V0cSBtb2RlIChvcmctZWxlbWVudC0tbmV4dC1tb2RlIG1vZGUgdHlw ZSBuaWwpKSkgKChub3QgKG1lbXEgdHlwZSBvcmctZWxlbWVudC1ncmVhdGVyLWVsZW1lbnRzKSkg KHRocm93ICdleGl0IChpZiBzeW5jcCBwYXJlbnQgZWxlbWVudCkpKSAoKGxldCAoLi4uIC4uLikg KGlmIC4uLiAuLi4pKSkgKHQgKHRocm93ICdleGl0IChpZiBzeW5jcCBwYXJlbnQgZWxlbWVudCkp KSkpIChzZXRxIGVsZW1lbnQgbmlsKSkpKQogIChzYXZlLXJlc3RyaWN0aW9uICh3aWRlbikgKGdv dG8tY2hhciBwb3MpIChzYXZlLWV4Y3Vyc2lvbiAoZW5kLW9mLWxpbmUpIChza2lwLWNoYXJzLWJh Y2t3YXJkICIgXDE1XDExXG4iKSAoaWYgKGJvYnApIChwcm9nbiAodGhyb3cgJ2V4aXQgbmlsKSkp KSAobGV0KiAoKGNhY2hlZCAoYW5kIChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApIChvcmct ZWxlbWVudC0tY2FjaGUtZmluZCBwb3MgbmlsKSkpIChtb2RlIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6bW9kZSBjYWNoZWQpKSBlbGVtZW50IG5leHQpIChjb25kICgoYW5kIChub3QgY2FjaGVkKSAo b3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2ZS1wKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQt b3JnLWRhdGEtcGFyc2VyKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVu dCkgbmlsIChsZXQqICgoZm9ybWF0LXN0cmluZyAuLi4pIChmb3JtYXQtc3RyaW5nIC4uLikpIChp ZiAoYW5kIC4uLiBvcmctYmF0Y2gtdGVzdCkgKGVycm9yICIlcyIgLi4uKSAoZGlzcGxheS13YXJu aW5nIC4uLiAuLi4pKSkpIChpZiAob3Igb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChl cSBvcmctZWxlbWVudC0tY2FjaGUtc2VsZi12ZXJpZnkgJ2JhY2t0cmFjZSkpIChwcm9nbiAobGV0 KiAoLi4uIC4uLikgKGlmIG9yZy1lbGVtZW50LS1jYWNoZS1kaWFnbm9zdGljcyAuLi4gLi4uIC4u LikpKSkgKG9yZy1lbGVtZW50LS1jYWNoZS1wdXQgZWxlbWVudCkgKGdvdG8tY2hhciAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2luIGVsZW1lbnQpKSAoc2V0cSBtb2RlICdvcmct ZGF0YSkpICgobm90IGNhY2hlZCkgKGlmIChwcm9nbiAoZGVmdmFyIG9yZy1jYWxsZWQtd2l0aC1s aW1pdGVkLWxldmVscykgKGRlZnZhciBvcmctb3V0bGluZS1yZWdleHApIChkZWZ2YXIgb3V0bGlu ZS1yZWdleHApIChkZWZ2YXIgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCkgKGxldCogKC4uLiAuLi4g Li4uIC4uLikgKG91dGxpbmUtcHJldmlvdXMtaGVhZGluZykpKSAocHJvZ24gKHNldHEgZWxlbWVu dCAob3JnLWVsZW1lbnQtaGVhZGxpbmUtcGFyc2VyIG5pbCAuLi4pKSAoc2V0cSBtb2RlICdwbGFu bmluZykgKGZvcndhcmQtbGluZSkpIChzZXRxIGVsZW1lbnQgKG9yZy1lbGVtZW50LW9yZy1kYXRh LXBhcnNlcikpIChzZXRxIG1vZGUgJ29yZy1kYXRhKSkgKG9yZy1za2lwLXdoaXRlc3BhY2UpIChi ZWdpbm5pbmctb2YtbGluZSkpICh0IChsZXQgKCh1cCBjYWNoZWQpIChwb3MgKGlmIC4uLiAuLi4g cG9zKSkpICh3aGlsZSAoYW5kIHVwICg8PSAuLi4gcG9zKSkgKGdvdG8tY2hhciAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmVuZCB1cCkpIChzZXRxIGVsZW1lbnQgdXAgbW9kZSAob3JnLWVsZW1lbnQt LW5leHQtbW9kZSAuLi4gLi4uIG5pbCkgdXAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQg dXApIG5leHQgKHBvaW50KSkpIChpZiB1cCAocHJvZ24gKHNldHEgZWxlbWVudCB1cCkpKSkpKSAo bGV0ICgoZW5kIChvciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KSAocG9pbnQt bWF4KSkpIChwYXJlbnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVudCkpKSAo d2hpbGUgdCAoaWYgKG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtcCB0aW1lLWxpbWl0KSAo cHJvZ24gKHRocm93ICdvcmctZWxlbWVudC0tY2FjaGUtaW50ZXJydXB0IG5pbCkpKSAoaWYgKGFu ZCBpbmhpYml0LXF1aXQgb3JnLWVsZW1lbnQtLWNhY2hlLWludGVycnVwdC1DLWcgcXVpdC1mbGFn KSAocHJvZ24gKGlmIHF1aXQtZmxhZyAocHJvZ24gLi4uIC4uLikpIChpZiAoPj0gb3JnLWVsZW1l bnQtLWNhY2hlLWludGVycnVwdC1DLWctY291bnQgb3JnLWVsZW1lbnQtLWNhY2hlLWludGVycnVw dC1DLWctbWF4LWNvdW50KSAocHJvZ24gLi4uIC4uLiAuLi4gLi4uKSkgKG1lc3NhZ2UgKHN1YnN0 aXR1dGUtY29tbWFuZC1rZXlzICJgb3JnLWVsZW1lbnQtLXBhcnNlLWJ1ZmZlcic6IFN1cHByZXNz ZWQgYFxcW2tleWJvYXIuLi4iKSAoLSBvcmctZWxlbWVudC0tY2FjaGUtaW50ZXJydXB0LUMtZy1t YXgtY291bnQgb3JnLWVsZW1lbnQtLWNhY2hlLWludGVycnVwdC1DLWctY291bnQpKSkpIChpZiBl bGVtZW50IG5pbCAoaWYgKHNhdmUtZXhjdXJzaW9uIChvcmctc2tpcC13aGl0ZXNwYWNlKSAoZW9i cCkpIG5pbCAobGV0KiAoLi4uIC4uLikgKHVud2luZC1wcm90ZWN0IC4uLiAuLi4pKSkgKGlmIGVs ZW1lbnQgKHNldHEgZWxlbWVudCAob3IgLi4uIGVsZW1lbnQpKSAodGhyb3cgJ2V4aXQgcGFyZW50 KSkgKGlmIChvciAobm90IC4uLikgcGFyZW50KSBuaWwgKGxldCogKC4uLiAuLi4pIChpZiAuLi4g Li4uIC4uLikpKSAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGVsZW1lbnQgOnBhcmVudCBwYXJl bnQpKSAobGV0ICgoZWxlbS1lbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkp ICh0eXBlIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpKSkgKGNvbmQgKChhbmQgLi4uIC4uLikg KGdvdG8tY2hhciBlbGVtLWVuZCkgKGlmIC4uLiAuLi4pIChzZXRxIG1vZGUgLi4uKSkgKChub3Qg Li4uKSAodGhyb3cgLi4uIC4uLikpICgobGV0IC4uLiAuLi4pKSAodCAodGhyb3cgLi4uIC4uLikp KSkgKHNldHEgZWxlbWVudCBuaWwpKSkpKQogIChzYXZlLWV4Y3Vyc2lvbiAoc2F2ZS1yZXN0cmlj dGlvbiAod2lkZW4pIChnb3RvLWNoYXIgcG9zKSAoc2F2ZS1leGN1cnNpb24gKGVuZC1vZi1saW5l KSAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFwxNVwxMVxuIikgKGlmIChib2JwKSAocHJvZ24gKHRo cm93ICdleGl0IG5pbCkpKSkgKGxldCogKChjYWNoZWQgKGFuZCAob3JnLWVsZW1lbnQtLWNhY2hl LWFjdGl2ZS1wKSAob3JnLWVsZW1lbnQtLWNhY2hlLWZpbmQgcG9zIG5pbCkpKSAobW9kZSAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOm1vZGUgY2FjaGVkKSkgZWxlbWVudCBuZXh0KSAoY29uZCAoKGFu ZCAobm90IGNhY2hlZCkgKG9yZy1lbGVtZW50LS1jYWNoZS1hY3RpdmUtcCkpIChzZXRxIGVsZW1l bnQgKG9yZy1lbGVtZW50LW9yZy1kYXRhLXBhcnNlcikpIChpZiAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOmJlZ2luIGVsZW1lbnQpIG5pbCAobGV0KiAoLi4uIC4uLikgKGlmIC4uLiAuLi4gLi4uKSkp IChpZiAob3Igb3JnLWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzIChlcSBvcmctZWxlbWVudC0t Y2FjaGUtc2VsZi12ZXJpZnkgLi4uKSkgKHByb2duIChsZXQqIC4uLiAuLi4pKSkgKG9yZy1lbGVt ZW50LS1jYWNoZS1wdXQgZWxlbWVudCkgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmNvbnRlbnRzLWJlZ2luIGVsZW1lbnQpKSAoc2V0cSBtb2RlICdvcmctZGF0YSkpICgobm90IGNh Y2hlZCkgKGlmIChwcm9nbiAoZGVmdmFyIG9yZy1jYWxsZWQtd2l0aC1saW1pdGVkLWxldmVscykg KGRlZnZhciBvcmctb3V0bGluZS1yZWdleHApIChkZWZ2YXIgb3V0bGluZS1yZWdleHApIChkZWZ2 YXIgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCkgKGxldCogLi4uIC4uLikpIChwcm9nbiAoc2V0cSBl bGVtZW50IC4uLikgKHNldHEgbW9kZSAuLi4pIChmb3J3YXJkLWxpbmUpKSAoc2V0cSBlbGVtZW50 IChvcmctZWxlbWVudC1vcmctZGF0YS1wYXJzZXIpKSAoc2V0cSBtb2RlICdvcmctZGF0YSkpIChv cmctc2tpcC13aGl0ZXNwYWNlKSAoYmVnaW5uaW5nLW9mLWxpbmUpKSAodCAobGV0ICgodXAgY2Fj aGVkKSAocG9zIC4uLikpICh3aGlsZSAoYW5kIHVwIC4uLikgKGdvdG8tY2hhciAuLi4pIChzZXRx IGVsZW1lbnQgdXAgbW9kZSAuLi4gdXAgLi4uIG5leHQgLi4uKSkgKGlmIHVwIChwcm9nbiAuLi4p KSkpKSAobGV0ICgoZW5kIChvciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KSAo cG9pbnQtbWF4KSkpIChwYXJlbnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVu dCkpKSAod2hpbGUgdCAoaWYgKG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtcCB0aW1lLWxp bWl0KSAocHJvZ24gKHRocm93IC4uLiBuaWwpKSkgKGlmIChhbmQgaW5oaWJpdC1xdWl0IG9yZy1l bGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtQy1nIHF1aXQtZmxhZykgKHByb2duIChpZiBxdWl0LWZs YWcgLi4uKSAoaWYgLi4uIC4uLikgKG1lc3NhZ2UgLi4uIC4uLikpKSAoaWYgZWxlbWVudCBuaWwg KGlmIChzYXZlLWV4Y3Vyc2lvbiAuLi4gLi4uKSBuaWwgKGxldCogLi4uIC4uLikpIChpZiBlbGVt ZW50IChzZXRxIGVsZW1lbnQgLi4uKSAodGhyb3cgLi4uIHBhcmVudCkpIChpZiAob3IgLi4uIHBh cmVudCkgbmlsIChsZXQqIC4uLiAuLi4pKSAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGVsZW1l bnQgOnBhcmVudCBwYXJlbnQpKSAobGV0ICgoZWxlbS1lbmQgLi4uKSAodHlwZSAuLi4pKSAoY29u ZCAoLi4uIC4uLiAuLi4gLi4uKSAoLi4uIC4uLikgKC4uLikgKHQgLi4uKSkpIChzZXRxIGVsZW1l bnQgbmlsKSkpKSkpCiAgKHNhdmUtY3VycmVudC1idWZmZXIgKHNldC1idWZmZXIgKG9yIChidWZm ZXItYmFzZS1idWZmZXIgbmlsKSAob3IgbmlsIChjdXJyZW50LWJ1ZmZlcikpKSkgKHNhdmUtZXhj dXJzaW9uIChzYXZlLXJlc3RyaWN0aW9uICh3aWRlbikgKGdvdG8tY2hhciBwb3MpIChzYXZlLWV4 Y3Vyc2lvbiAoZW5kLW9mLWxpbmUpIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXDE1XDExXG4iKSAo aWYgKGJvYnApIChwcm9nbiAodGhyb3cgJ2V4aXQgbmlsKSkpKSAobGV0KiAoKGNhY2hlZCAoYW5k IChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApIChvcmctZWxlbWVudC0tY2FjaGUtZmluZCBw b3MgbmlsKSkpIChtb2RlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bW9kZSBjYWNoZWQpKSBlbGVt ZW50IG5leHQpIChjb25kICgoYW5kIChub3QgY2FjaGVkKSAob3JnLWVsZW1lbnQtLWNhY2hlLWFj dGl2ZS1wKSkgKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQtb3JnLWRhdGEtcGFyc2VyKSkgKGlm IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkgbmlsIChsZXQqIC4uLiAuLi4p KSAoaWYgKG9yIG9yZy1lbGVtZW50LS1jYWNoZS1kaWFnbm9zdGljcyAuLi4pIChwcm9nbiAuLi4p KSAob3JnLWVsZW1lbnQtLWNhY2hlLXB1dCBlbGVtZW50KSAoZ290by1jaGFyIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6Y29udGVudHMtYmVnaW4gZWxlbWVudCkpIChzZXRxIG1vZGUgJ29yZy1kYXRh KSkgKChub3QgY2FjaGVkKSAoaWYgKHByb2duIC4uLiAuLi4gLi4uIC4uLiAuLi4pIChwcm9nbiAu Li4gLi4uIC4uLikgKHNldHEgZWxlbWVudCAuLi4pIChzZXRxIG1vZGUgLi4uKSkgKG9yZy1za2lw LXdoaXRlc3BhY2UpIChiZWdpbm5pbmctb2YtbGluZSkpICh0IChsZXQgKC4uLiAuLi4pICh3aGls ZSAuLi4gLi4uIC4uLikgKGlmIHVwIC4uLikpKSkgKGxldCAoKGVuZCAob3IgLi4uIC4uLikpIChw YXJlbnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVudCkpKSAod2hpbGUgdCAo aWYgKG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtcCB0aW1lLWxpbWl0KSAocHJvZ24gLi4u KSkgKGlmIChhbmQgaW5oaWJpdC1xdWl0IG9yZy1lbGVtZW50LS1jYWNoZS1pbnRlcnJ1cHQtQy1n IHF1aXQtZmxhZykgKHByb2duIC4uLiAuLi4gLi4uKSkgKGlmIGVsZW1lbnQgbmlsIChpZiAuLi4g bmlsIC4uLikgKGlmIGVsZW1lbnQgLi4uIC4uLikgKGlmIC4uLiBuaWwgLi4uKSAob3JnLWVsZW1l bnQtcHV0LXByb3BlcnR5IGVsZW1lbnQgOnBhcmVudCBwYXJlbnQpKSAobGV0ICguLi4gLi4uKSAo Y29uZCAuLi4gLi4uIC4uLiAuLi4pKSAoc2V0cSBlbGVtZW50IG5pbCkpKSkpKSkKICAocHJvZ24g KHNhdmUtY3VycmVudC1idWZmZXIgKHNldC1idWZmZXIgKG9yIChidWZmZXItYmFzZS1idWZmZXIg bmlsKSAob3IgbmlsIChjdXJyZW50LWJ1ZmZlcikpKSkgKHNhdmUtZXhjdXJzaW9uIChzYXZlLXJl c3RyaWN0aW9uICh3aWRlbikgKGdvdG8tY2hhciBwb3MpIChzYXZlLWV4Y3Vyc2lvbiAoZW5kLW9m LWxpbmUpIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXDE1XDExXG4iKSAoaWYgKGJvYnApIChwcm9n biAodGhyb3cgLi4uIG5pbCkpKSkgKGxldCogKChjYWNoZWQgKGFuZCAuLi4gLi4uKSkgKG1vZGUg KG9yZy1lbGVtZW50LXByb3BlcnR5IDptb2RlIGNhY2hlZCkpIGVsZW1lbnQgbmV4dCkgKGNvbmQg KChhbmQgLi4uIC4uLikgKHNldHEgZWxlbWVudCAuLi4pIChpZiAuLi4gbmlsIC4uLikgKGlmIC4u LiAuLi4pIChvcmctZWxlbWVudC0tY2FjaGUtcHV0IGVsZW1lbnQpIChnb3RvLWNoYXIgLi4uKSAo c2V0cSBtb2RlIC4uLikpICgobm90IGNhY2hlZCkgKGlmIC4uLiAuLi4gLi4uIC4uLikgKG9yZy1z a2lwLXdoaXRlc3BhY2UpIChiZWdpbm5pbmctb2YtbGluZSkpICh0IChsZXQgLi4uIC4uLiAuLi4p KSkgKGxldCAoKGVuZCAuLi4pIChwYXJlbnQgLi4uKSkgKHdoaWxlIHQgKGlmIC4uLiAuLi4pIChp ZiAuLi4gLi4uKSAoaWYgZWxlbWVudCBuaWwgLi4uIC4uLiAuLi4gLi4uKSAobGV0IC4uLiAuLi4p IChzZXRxIGVsZW1lbnQgbmlsKSkpKSkpKSkKICAodW53aW5kLXByb3RlY3QgKHByb2duIChzYXZl LWN1cnJlbnQtYnVmZmVyIChzZXQtYnVmZmVyIChvciAoYnVmZmVyLWJhc2UtYnVmZmVyIG5pbCkg KG9yIG5pbCAoY3VycmVudC1idWZmZXIpKSkpIChzYXZlLWV4Y3Vyc2lvbiAoc2F2ZS1yZXN0cmlj dGlvbiAod2lkZW4pIChnb3RvLWNoYXIgcG9zKSAoc2F2ZS1leGN1cnNpb24gKGVuZC1vZi1saW5l KSAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFwxNVwxMVxuIikgKGlmIChib2JwKSAocHJvZ24gLi4u KSkpIChsZXQqICgoY2FjaGVkIC4uLikgKG1vZGUgLi4uKSBlbGVtZW50IG5leHQpIChjb25kICgu Li4gLi4uIC4uLiAuLi4gLi4uIC4uLiAuLi4pICguLi4gLi4uIC4uLiAuLi4pICh0IC4uLikpIChs ZXQgKC4uLiAuLi4pICh3aGlsZSB0IC4uLiAuLi4gLi4uIC4uLiAuLi4pKSkpKSkpIChzZXQtbWF0 Y2gtZGF0YSBzYXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwgJ2V2YXBvcmF0ZSkpCiAgKGxldCAoKHNh dmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAobWF0Y2gtZGF0YSkpKSAodW53aW5kLXByb3RlY3QgKHBy b2duIChzYXZlLWN1cnJlbnQtYnVmZmVyIChzZXQtYnVmZmVyIChvciAoYnVmZmVyLWJhc2UtYnVm ZmVyIG5pbCkgKG9yIG5pbCAoY3VycmVudC1idWZmZXIpKSkpIChzYXZlLWV4Y3Vyc2lvbiAoc2F2 ZS1yZXN0cmljdGlvbiAod2lkZW4pIChnb3RvLWNoYXIgcG9zKSAoc2F2ZS1leGN1cnNpb24gKGVu ZC1vZi1saW5lKSAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFwxNVwxMVxuIikgKGlmIC4uLiAuLi4p KSAobGV0KiAoLi4uIC4uLiBlbGVtZW50IG5leHQpIChjb25kIC4uLiAuLi4gLi4uKSAobGV0IC4u LiAuLi4pKSkpKSkgKHNldC1tYXRjaC1kYXRhIHNhdmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAnZXZh cG9yYXRlKSkpCiAgKGNhdGNoICdleGl0IChsZXQgKChzYXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwg KG1hdGNoLWRhdGEpKSkgKHVud2luZC1wcm90ZWN0IChwcm9nbiAoc2F2ZS1jdXJyZW50LWJ1ZmZl ciAoc2V0LWJ1ZmZlciAob3IgKGJ1ZmZlci1iYXNlLWJ1ZmZlciBuaWwpIChvciBuaWwgLi4uKSkp IChzYXZlLWV4Y3Vyc2lvbiAoc2F2ZS1yZXN0cmljdGlvbiAod2lkZW4pIChnb3RvLWNoYXIgcG9z KSAoc2F2ZS1leGN1cnNpb24gLi4uIC4uLiAuLi4pIChsZXQqIC4uLiAuLi4gLi4uKSkpKSkgKHNl dC1tYXRjaC1kYXRhIHNhdmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAnZXZhcG9yYXRlKSkpKQogIG9y Zy1lbGVtZW50LS1wYXJzZS10byg2NjUpCiAgKGxldCAob3JnLWVsZW1lbnQtdXNlLWNhY2hlKSAo b3JnLWVsZW1lbnQtLXBhcnNlLXRvIChpZiAobWVtcSAob3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50 KSAnKHRhYmxlLXJvdyBpdGVtKSkgKDErIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxl bWVudCkpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkpKSkKICAobGV0ICgo cmVhbC1lbGVtZW50IChsZXQgKG9yZy1lbGVtZW50LXVzZS1jYWNoZSkgKG9yZy1lbGVtZW50LS1w YXJzZS10byAoaWYgKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkgJy4uLikgKDErIChv cmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkpIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6YmVnaW4gZWxlbWVudCkpKSkpKSAoaWYgKGFuZCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgcmVh bC1lbGVtZW50KSAob3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1w cm9wZXJ0eSA6YmVnaW4gcmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2lu IGVsZW1lbnQpKSAoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgcmVhbC1lbGVtZW50KSAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6Y29udGVudHMtYmVnaW4gcmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmNvbnRlbnRzLWJlZ2luIGVsZW1lbnQpKSAoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250 ZW50cy1lbmQgcmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWVu ZCBlbGVtZW50KSkgKG9yIChub3QgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpJRCByZWFsLWVsZW1l bnQpKSAoc3RyaW5nPSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOklEIHJlYWwtZWxlbWVudCkgKG9y Zy1lbGVtZW50LXByb3BlcnR5IDpJRCBlbGVtZW50KSkpKSBuaWwgKGxldCogKChmb3JtYXQtc3Ry aW5nIChmb3JtYXQgIiglUykgQ2FjaGVkIGVsZW1lbnQgaXMgaW5jb3JyZWN0IGluICVzLiAoQ2Fj aGUgdGljLi4uIiB0aGlzLWNvbW1hbmQgKGJ1ZmZlci1uYW1lIChjdXJyZW50LWJ1ZmZlcikpIChp ZiAoLz0gb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMgLi4uKSAibm8iICJ5ZXMiKSAobGV0 ICguLi4gLi4uKSAocHJpbjEtdG8tc3RyaW5nIGVsZW1lbnQpKSAobGV0ICguLi4gLi4uKSAocHJp bjEtdG8tc3RyaW5nIHJlYWwtZWxlbWVudCkpIChvcmctZWxlbWVudC0tY2FjaGUtZmluZCAoMS0g Li4uKSkgKGNhciAob3JnLWVsZW1lbnQtLWNhY2hlLWZpbmQgLi4uIC4uLikpIChjZHIgKG9yZy1l bGVtZW50LS1jYWNoZS1maW5kIC4uLiAuLi4pKSkpIChmb3JtYXQtc3RyaW5nIChpZiAob3IgKG5v dCBvcmctZWxlbWVudC0tY2FjaGUtZGlhZ25vc3RpY3MtcmluZykgKG5vdCAuLi4pKSBmb3JtYXQt c3RyaW5nIChwcm9nMSAoY29uY2F0IC4uLiBmb3JtYXQtc3RyaW5nICJcbkJhY2t0cmFjZTpcbiAg IiAuLi4pIChzZXRxIG9yZy1lbGVtZW50LS1jYWNoZS1kaWFnbm9zdGljcy1yaW5nIG5pbCkpKSkp IChpZiAoYW5kIChib3VuZHAgJ29yZy1iYXRjaC10ZXN0KSBvcmctYmF0Y2gtdGVzdCkgKGVycm9y ICIlcyIgKGNvbmNhdCAib3JnLWVsZW1lbnQtLWNhY2hlOiAiIGZvcm1hdC1zdHJpbmcpKSAoZGlz cGxheS13YXJuaW5nICdvcmctZWxlbWVudC1jYWNoZSAoY29uY2F0ICJvcmctZWxlbWVudC0tY2Fj aGU6ICIgZm9ybWF0LXN0cmluZykpKSkgKG9yZy1lbGVtZW50LWNhY2hlLXJlc2V0KSkpCiAgKHBy b2duIChsZXQgKChyZWFsLWVsZW1lbnQgKGxldCAob3JnLWVsZW1lbnQtdXNlLWNhY2hlKSAob3Jn LWVsZW1lbnQtLXBhcnNlLXRvIChpZiAobWVtcSAuLi4gLi4uKSAoMSsgLi4uKSAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmJlZ2luIGVsZW1lbnQpKSkpKSkgKGlmIChhbmQgKGVxIChvcmctZWxlbWVu dC10eXBlIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkpIChlcSAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpiZWdpbiBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHJlYWwt ZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkpIChlcSAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2luIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpjb250ZW50cy1iZWdpbiBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6Y29udGVudHMtZW5kIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpj b250ZW50cy1lbmQgZWxlbWVudCkpIChvciAobm90IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6SUQg cmVhbC1lbGVtZW50KSkgKHN0cmluZz0gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpJRCByZWFsLWVs ZW1lbnQpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6SUQgZWxlbWVudCkpKSkgbmlsIChsZXQqICgo Zm9ybWF0LXN0cmluZyAoZm9ybWF0ICIoJVMpIENhY2hlZCBlbGVtZW50IGlzIGluY29ycmVjdCBp biAlcy4gKENhY2hlIHRpYy4uLiIgdGhpcy1jb21tYW5kIChidWZmZXItbmFtZSAuLi4pIChpZiAu Li4gIm5vIiAieWVzIikgKGxldCAuLi4gLi4uKSAobGV0IC4uLiAuLi4pIChvcmctZWxlbWVudC0t Y2FjaGUtZmluZCAuLi4pIChjYXIgLi4uKSAoY2RyIC4uLikpKSAoZm9ybWF0LXN0cmluZyAoaWYg KG9yIC4uLiAuLi4pIGZvcm1hdC1zdHJpbmcgKHByb2cxIC4uLiAuLi4pKSkpIChpZiAoYW5kIChi b3VuZHAgJ29yZy1iYXRjaC10ZXN0KSBvcmctYmF0Y2gtdGVzdCkgKGVycm9yICIlcyIgKGNvbmNh dCAib3JnLWVsZW1lbnQtLWNhY2hlOiAiIGZvcm1hdC1zdHJpbmcpKSAoZGlzcGxheS13YXJuaW5n ICdvcmctZWxlbWVudC1jYWNoZSAoY29uY2F0ICJvcmctZWxlbWVudC0tY2FjaGU6ICIgZm9ybWF0 LXN0cmluZykpKSkgKG9yZy1lbGVtZW50LWNhY2hlLXJlc2V0KSkpKQogIChpZiAoYW5kIG9yZy1l bGVtZW50LS1jYWNoZS1zZWxmLXZlcmlmeSAob3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2ZS1wKSBl bGVtZW50IChub3QgKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkgJyhzZWN0aW9uIG9y Zy1kYXRhKSkpICg8IChyYW5kb20gMTAwMCkgKCogMTAwMCBvcmctZWxlbWVudC0tY2FjaGUtc2Vs Zi12ZXJpZnktZnJlcXVlbmN5KSkpIChwcm9nbiAobGV0ICgocmVhbC1lbGVtZW50IChsZXQgKG9y Zy1lbGVtZW50LXVzZS1jYWNoZSkgKG9yZy1lbGVtZW50LS1wYXJzZS10byAoaWYgLi4uIC4uLiAu Li4pKSkpKSAoaWYgKGFuZCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgcmVhbC1lbGVtZW50KSAob3Jn LWVsZW1lbnQtdHlwZSBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4g cmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsZW1lbnQpKSAoZXEg KG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgcmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmVuZCBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMt YmVnaW4gcmVhbC1lbGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2lu IGVsZW1lbnQpKSAoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1lbmQgcmVhbC1l bGVtZW50KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWVuZCBlbGVtZW50KSkgKG9y IChub3QgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpJRCByZWFsLWVsZW1lbnQpKSAoc3RyaW5nPSAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOklEIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpJRCBlbGVtZW50KSkpKSBuaWwgKGxldCogKChmb3JtYXQtc3RyaW5nIChmb3JtYXQgIigl UykgQ2FjaGVkIGVsZW1lbnQgaXMgaW5jb3JyZWN0IGluICVzLiAoQ2FjaGUgdGljLi4uIiB0aGlz LWNvbW1hbmQgLi4uIC4uLiAuLi4gLi4uIC4uLiAuLi4gLi4uKSkgKGZvcm1hdC1zdHJpbmcgKGlm IC4uLiBmb3JtYXQtc3RyaW5nIC4uLikpKSAoaWYgKGFuZCAoYm91bmRwIC4uLikgb3JnLWJhdGNo LXRlc3QpIChlcnJvciAiJXMiIChjb25jYXQgIm9yZy1lbGVtZW50LS1jYWNoZTogIiBmb3JtYXQt c3RyaW5nKSkgKGRpc3BsYXktd2FybmluZyAnb3JnLWVsZW1lbnQtY2FjaGUgKGNvbmNhdCAib3Jn LWVsZW1lbnQtLWNhY2hlOiAiIGZvcm1hdC1zdHJpbmcpKSkpIChvcmctZWxlbWVudC1jYWNoZS1y ZXNldCkpKSkpCiAgKGxldCAoKG9yZy1lbGVtZW50LS1jYWNoZS1zZWxmLXZlcmlmeSAob3Igb3Jn LWVsZW1lbnQtLWNhY2hlLXNlbGYtdmVyaWZ5IChhbmQgKGJvdW5kcCAnb3JnLWJhdGNoLXRlc3Qp IG9yZy1iYXRjaC10ZXN0KSkpIChvcmctZWxlbWVudC0tY2FjaGUtc2VsZi12ZXJpZnktZnJlcXVl bmN5IChpZiAoYW5kIChib3VuZHAgJ29yZy1iYXRjaC10ZXN0KSBvcmctYmF0Y2gtdGVzdCkgMSBv cmctZWxlbWVudC0tY2FjaGUtc2VsZi12ZXJpZnktZnJlcXVlbmN5KSkpIChpZiAob3IgKG5vdCBv cmctZWxlbWVudC0tY2FjaGUtc2VsZi12ZXJpZnkpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGFy ZW50IGVsZW1lbnQpIChlcSAnb3JnLWRhdGEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkpKSBu aWwgKGxldCogKChmb3JtYXQtc3RyaW5nIChmb3JtYXQgIkdvdCBlbGVtZW50IHdpdGhvdXQgcGFy ZW50IChjYWNoZSBhY3RpdmU/OiAlUykuIFBsLi4uIiAob3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2 ZS1wKSBlbGVtZW50KSkgKGZvcm1hdC1zdHJpbmcgKGlmIChvciAobm90IG9yZy1lbGVtZW50LS1j YWNoZS1kaWFnbm9zdGljcy1yaW5nKSAobm90IC4uLikpIGZvcm1hdC1zdHJpbmcgKHByb2cxIChj b25jYXQgLi4uIGZvcm1hdC1zdHJpbmcgIlxuQmFja3RyYWNlOlxuICAiIC4uLikgKHNldHEgb3Jn LWVsZW1lbnQtLWNhY2hlLWRpYWdub3N0aWNzLXJpbmcgbmlsKSkpKSkgKGlmIChhbmQgKGJvdW5k cCAnb3JnLWJhdGNoLXRlc3QpIG9yZy1iYXRjaC10ZXN0KSAoZXJyb3IgIiVzIiAoY29uY2F0ICJv cmctZWxlbWVudC0tY2FjaGU6ICIgZm9ybWF0LXN0cmluZykpIChkaXNwbGF5LXdhcm5pbmcgJ29y Zy1lbGVtZW50LWNhY2hlIChjb25jYXQgIm9yZy1lbGVtZW50LS1jYWNoZTogIiBmb3JtYXQtc3Ry aW5nKSkpKSAob3JnLWVsZW1lbnQtY2FjaGUtcmVzZXQpKSAoaWYgKGFuZCBvcmctZWxlbWVudC0t Y2FjaGUtc2VsZi12ZXJpZnkgKG9yZy1lbGVtZW50LS1jYWNoZS1hY3RpdmUtcCkgKGVxICdoZWFk bGluZSAob3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSkgKDwgKHJhbmRvbSAxMDAwKSAoKiAxMDAw IG9yZy1lbGVtZW50LS1jYWNoZS1zZWxmLXZlcmlmeS1mcmVxdWVuY3kpKSkgKHByb2duIChsZXQg KCgtLW1wb20gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBlbGVtZW50KSkpIChzYXZlLWV4 Y3Vyc2lvbiAoaWYgKG1hcmtlcnAgLS1tcG9tKSAocHJvZ24gKHNldC1idWZmZXIgLi4uKSkpIChz YXZlLWV4Y3Vyc2lvbiAoc2F2ZS1yZXN0cmljdGlvbiAod2lkZW4pIChnb3RvLWNoYXIgLi4uKSAo bGV0KiAuLi4gLi4uKSAoaWYgLi4uIG5pbCAuLi4gLi4uKSAob3JnLWVsZW1lbnQtLWNhY2hlLXZl cmlmeS1lbGVtZW50IC4uLikpKSkpKSkgKGlmIChhbmQgb3JnLWVsZW1lbnQtLWNhY2hlLXNlbGYt dmVyaWZ5IChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApIGVsZW1lbnQgKG5vdCAobWVtcSAo b3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSAnKHNlY3Rpb24gb3JnLWRhdGEpKSkgKDwgKHJhbmRv bSAxMDAwKSAoKiAxMDAwIG9yZy1lbGVtZW50LS1jYWNoZS1zZWxmLXZlcmlmeS1mcmVxdWVuY3kp KSkgKHByb2duIChsZXQgKChyZWFsLWVsZW1lbnQgKGxldCAob3JnLWVsZW1lbnQtdXNlLWNhY2hl KSAob3JnLWVsZW1lbnQtLXBhcnNlLXRvIC4uLikpKSkgKGlmIChhbmQgKGVxIChvcmctZWxlbWVu dC10eXBlIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkpIChlcSAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpiZWdpbiBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHJlYWwt ZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkpIChlcSAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2luIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpjb250ZW50cy1iZWdpbiBlbGVtZW50KSkgKGVxIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6Y29udGVudHMtZW5kIHJlYWwtZWxlbWVudCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpj b250ZW50cy1lbmQgZWxlbWVudCkpIChvciAobm90IC4uLikgKHN0cmluZz0gLi4uIC4uLikpKSBu aWwgKGxldCogKChmb3JtYXQtc3RyaW5nIC4uLikgKGZvcm1hdC1zdHJpbmcgLi4uKSkgKGlmIChh bmQgLi4uIG9yZy1iYXRjaC10ZXN0KSAoZXJyb3IgIiVzIiAuLi4pIChkaXNwbGF5LXdhcm5pbmcg Li4uIC4uLikpKSAob3JnLWVsZW1lbnQtY2FjaGUtcmVzZXQpKSkpKSkKICBvcmctZWxlbWVudC0t Y2FjaGUtdmVyaWZ5LWVsZW1lbnQoKHBsYW5uaW5nICg6Y2xvc2VkIG5pbCA6ZGVhZGxpbmUgbmls IDpzY2hlZHVsZWQgKHRpbWVzdGFtcCAoOnR5cGUgYWN0aXZlIDpyYXctdmFsdWUgIjwyMDIzLTAz LTE0IFR1ZT4iIDp5ZWFyLXN0YXJ0IDIwMjMgOm1vbnRoLXN0YXJ0IDMgOmRheS1zdGFydCAxNCA6 aG91ci1zdGFydCBuaWwgOm1pbnV0ZS1zdGFydCBuaWwgOnllYXItZW5kIDIwMjMgOm1vbnRoLWVu ZCAzIDpkYXktZW5kIDE0IDpob3VyLWVuZCBuaWwgOm1pbnV0ZS1lbmQgbmlsIDpiZWdpbiA2NzYg OmVuZCA2OTIgOnBvc3QtYmxhbmsgMCkpIDpiZWdpbiA2NjUgOmVuZCA2OTQgOnBvc3QtYmxhbmsg MSA6cG9zdC1hZmZpbGlhdGVkIDY2NSA6bW9kZSBwbGFubmluZyA6Z3JhbnVsYXJpdHkgZWxlbWVu dCA6Y2FjaGVkIHQgOnBhcmVudCAoc2VjdGlvbiAoOmJlZ2luIDY2NSA6ZW5kIDY5NCA6Y29udGVu dHMtYmVnaW4gNjY1IDpjb250ZW50cy1lbmQgNjkzIDpyb2J1c3QtYmVnaW4gNjY1IDpyb2J1c3Qt ZW5kIDY5MSA6cG9zdC1ibGFuayAxIDpwb3N0LWFmZmlsaWF0ZWQgNjY1IDptb2RlIHNlY3Rpb24g OmdyYW51bGFyaXR5IGVsZW1lbnQgOmNhY2hlZCB0IDpwYXJlbnQgKGhlYWRsaW5lICg6cmF3LXZh bHVlICJTdWIgZXZlbnQgMiIgOmJlZ2luIDY1MCA6ZW5kIDY5NCA6cHJlLWJsYW5rIDAgOmNvbnRl bnRzLWJlZ2luIDY2NSA6Y29udGVudHMtZW5kIDY5MyA6cm9idXN0LWJlZ2luIG5pbCA6cm9idXN0 LWVuZCBuaWwgOmxldmVsIDIgOnByaW9yaXR5IG5pbCA6dGFncyBuaWwgOnRvZG8ta2V5d29yZCBu aWwgOnRvZG8tdHlwZSBuaWwgOnBvc3QtYmxhbmsgMSA6Zm9vdG5vdGUtc2VjdGlvbi1wIG5pbCA6 YXJjaGl2ZWRwIG5pbCA6Y29tbWVudGVkcCBuaWwgOnBvc3QtYWZmaWxpYXRlZCA2NTAgOnNjaGVk dWxlZCAodGltZXN0YW1wIC4uLikgOnRpdGxlICJTdWIgZXZlbnQgMiIgOm1vZGUgbmlsIDpncmFu dWxhcml0eSBlbGVtZW50IDpjYWNoZWQgdCA6cGFyZW50IChoZWFkbGluZSAuLi4pKSkpKSkpKQog IChhbmQgKG9yZy1lbGVtZW50LS1jYWNoZS1hY3RpdmUtcCkgZWxlbWVudCAob3JnLWVsZW1lbnQt LWNhY2hlLXZlcmlmeS1lbGVtZW50IGVsZW1lbnQpKQogIChpZiAoYW5kIChvcmctZWxlbWVudC0t Y2FjaGUtYWN0aXZlLXApIGVsZW1lbnQgKG9yZy1lbGVtZW50LS1jYWNoZS12ZXJpZnktZWxlbWVu dCBlbGVtZW50KSkgKHByb2duIChzZXRxIGVsZW1lbnQgKG9yZy1lbGVtZW50LS1wYXJzZS10byBw b20pKSkpCiAgKGxldCAoZWxlbWVudCkgKGlmIChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXAp IChwcm9nbiAoaWYgKG5vdCBvcmctZWxlbWVudC0tY2FjaGUpIChvcmctZWxlbWVudC1jYWNoZS1y ZXNldCkgKGlmIGNhY2hlZC1vbmx5IG5pbCAob3JnLWVsZW1lbnQtLWNhY2hlLXN5bmMgKGN1cnJl bnQtYnVmZmVyKSBwb20pKSkpKSAoc2V0cSBlbGVtZW50IChpZiBjYWNoZWQtb25seSAoaWYgKGFu ZCAob3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2ZS1wKSAob3IgKG5vdCBvcmctZWxlbWVudC0tY2Fj aGUtc3luYy1yZXF1ZXN0cykgKDwgcG9tIChhcmVmIC4uLiAxKSkpKSAocHJvZ24gKG9yZy1lbGVt ZW50LS1jYWNoZS1maW5kIHBvbSkpKSAoY29uZGl0aW9uLWNhc2UgZXJyIChvcmctZWxlbWVudC0t cGFyc2UtdG8gcG9tKSAoZXJyb3IgKGxldCogKChmb3JtYXQtc3RyaW5nIC4uLikgKGZvcm1hdC1z dHJpbmcgLi4uKSkgKGlmIChhbmQgLi4uIG9yZy1iYXRjaC10ZXN0KSAoZXJyb3IgIiVzIiAuLi4p IChkaXNwbGF5LXdhcm5pbmcgLi4uIC4uLikpKSAob3JnLWVsZW1lbnQtY2FjaGUtcmVzZXQpIChv cmctZWxlbWVudC0tcGFyc2UtdG8gcG9tKSkpKSkgKGlmIChhbmQgKG9yZy1lbGVtZW50LS1jYWNo ZS1hY3RpdmUtcCkgZWxlbWVudCAob3JnLWVsZW1lbnQtLWNhY2hlLXZlcmlmeS1lbGVtZW50IGVs ZW1lbnQpKSAocHJvZ24gKHNldHEgZWxlbWVudCAob3JnLWVsZW1lbnQtLXBhcnNlLXRvIHBvbSkp KSkgKGlmIChlcSAnb3JnLWRhdGEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkpIG5pbCAoaWYg KGFuZCBjYWNoZWQtb25seSAobm90IChhbmQgZWxlbWVudCAob3IgKD0gcG9tIC4uLikgKGFuZCAu Li4gLi4uIC4uLikgKGFuZCAuLi4gLi4uIC4uLikgKGFuZCAuLi4gLi4uIC4uLikpKSkpIG5pbCAo aWYgKG5vdCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkgJ3NlY3Rpb24pKSBlbGVtZW50 IChvcmctZWxlbWVudC1hdC1wb2ludCAoMSsgcG9tKSBjYWNoZWQtb25seSkpKSkpCiAgb3JnLWVs ZW1lbnQtYXQtcG9pbnQoNjkzKQogIChwcm9nbiAob3JnLWVsZW1lbnQtYXQtcG9pbnQgKHBvaW50 LW1heCkpIChzZXRxIG5vZGUgKGlmIChtZW1xIGdyYW51bGFyaXR5ICcoaGVhZGxpbmUgaGVhZGxp bmUraW5saW5ldGFzaykpIChvcmctZWxlbWVudC0taGVhZGxpbmUtY2FjaGUtcm9vdCkgKG9yZy1l bGVtZW50LS1jYWNoZS1yb290KSkgc3RhY2sgKGxpc3QgbmlsKSBsZWZ0cCB0IGNvbnRpbnVlLWZs YWcgdCkpCiAgKGlmIG5vZGUgKHByb2duIChvcmctZWxlbWVudC1hdC1wb2ludCAocG9pbnQtbWF4 KSkgKHNldHEgbm9kZSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkgJyhoZWFkbGluZSBoZWFkbGluZStp bmxpbmV0YXNrKSkgKG9yZy1lbGVtZW50LS1oZWFkbGluZS1jYWNoZS1yb290KSAob3JnLWVsZW1l bnQtLWNhY2hlLXJvb3QpKSBzdGFjayAobGlzdCBuaWwpIGxlZnRwIHQgY29udGludWUtZmxhZyB0 KSkpCiAgKGlmIChvciAobm90IHN0YXJ0KSAoPSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2lu IGRhdGEpIHN0YXJ0KSkgKHByb2duIChzZXRxIG1vZGlmaWVkLXRpYyBvcmctZWxlbWVudC0tY2Fj aGUtY2hhbmdlLXRpYykgKHNldHEgY2FjaGUtc2l6ZSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkgJyho ZWFkbGluZSBoZWFkbGluZStpbmxpbmV0YXNrKSkgb3JnLWVsZW1lbnQtLWhlYWRsaW5lLWNhY2hl LXNpemUgb3JnLWVsZW1lbnQtLWNhY2hlLXNpemUpKSAoaWYgKGlmIGxhc3QtbWF0Y2ggbmV4dC1y ZSBmYWlsLXJlKSAocHJvZ24gKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2lu IGRhdGEpKSAobGV0ICgoc2F2ZS1tYXRjaC1kYXRhLWludGVybmFsIChtYXRjaC1kYXRhKSkpICh1 bndpbmQtcHJvdGVjdCAocHJvZ24gKGlmIC4uLiAuLi4gLi4uKSkgKHNldC1tYXRjaC1kYXRhIHNh dmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAnZXZhcG9yYXRlKSkpKSkgKGlmIChhbmQgKG9yIChub3Qg c3RhcnQpIChlcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGRhdGEpIHN0YXJ0KSkgKDwg KG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRhKSB0by1wb3MpKSAocHJvZ24gKHNldHEg c3RhcnQgKHByb2duIChzZXRxIHRtcG5leHQtc3RhcnQgbmlsKSAoaWYgKG1lbXEgZ3JhbnVsYXJp dHkgLi4uKSAoc2V0cSB0bXBuZXh0LXN0YXJ0IC4uLikgKHNldHEgdG1wbmV4dC1zdGFydCAuLi4p KSAoc2V0cSB0bXBwYXJlbnQgZGF0YSkgKGNhdGNoIDpleGl0IChpZiAuLi4gLi4uKSAod2hpbGUg Li4uIC4uLikpIHRtcG5leHQtc3RhcnQpKSAoZ290by1jaGFyIHN0YXJ0KSAoaWYgKGFuZCBuZXh0 LWVsZW1lbnQtcmUgKG5vdCAoZXEgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMgLi4uKSkp IChwcm9nbiAobGV0ICguLi4pICh1bndpbmQtcHJvdGVjdCAuLi4gLi4uKSkgKGdvdG8tY2hhciBz dGFydCkpKSAoaWYgKG9yIChub3QgcmVzdHJpY3QtZWxlbWVudHMpIChtZW1xIChvcmctZWxlbWVu dC10eXBlIGRhdGEpIHJlc3RyaWN0LWVsZW1lbnRzKSkgKHByb2duIChzZXRxIG9yZy1lbGVtZW50 LWNhY2hlLW1hcC1jb250aW51ZS1mcm9tIG5pbCkgKGlmIG9yZy1lbGVtZW50LS1jYWNoZS1tYXAt c3RhdGlzdGljcyAocHJvZ24gLi4uIC4uLiAuLi4gLi4uKSAoc2V0cSByZXN1bHQgLi4uKSAoaWYg Li4uIC4uLikpIChzZXRxIGxhc3QtbWF0Y2ggKGNhciByZXN1bHQpKSAoaWYgb3JnLWVsZW1lbnQt Y2FjaGUtbWFwLWNvbnRpbnVlLWZyb20gKHByb2duIC4uLikpIChpZiAoPiAuLi4gc3RhcnQpIChw cm9nbiAuLi4gLi4uKSkgKGlmIChjYXIgcmVzdWx0KSBuaWwgKGNhci1zYWZlIC4uLikpKSkgKGlm IChhbmQgKGVxIG9yZy1lbGVtZW50LS1jYWNoZS1jaGFuZ2UtdGljIChhbGlzdC1nZXQgZ3JhbnVs YXJpdHkgb3JnLWVsZW1lbnQtLWNhY2hlLWdhcGxlc3MpKSAoZXEgKHByb2duIC4uLiAuLi4gLi4u IC4uLiB0bXBuZXh0LXN0YXJ0KSBzdGFydCkpIChwcm9nbiAoc2V0cSBzdGFydCBuaWwpKSkgKGlm IChhbmQgKGVxIG1vZGlmaWVkLXRpYyBvcmctZWxlbWVudC0tY2FjaGUtY2hhbmdlLXRpYykgKGVx IGNhY2hlLXNpemUgKGlmIC4uLiBvcmctZWxlbWVudC0taGVhZGxpbmUtY2FjaGUtc2l6ZSBvcmct ZWxlbWVudC0tY2FjaGUtc2l6ZSkpKSBuaWwgKHNldHEgc3RhcnQgbmlsKSAobGV0ICgoc2F2ZS1t YXRjaC1kYXRhLWludGVybmFsIC4uLikpICh1bndpbmQtcHJvdGVjdCAocHJvZ24gLi4uKSAoc2V0 LW1hdGNoLWRhdGEgc2F2ZS1tYXRjaC1kYXRhLWludGVybmFsIC4uLikpKSAoaWYgKGFuZCBzdGFy dCAoPD0gc3RhcnQgLi4uKSAobm90IG9yZy1lbGVtZW50LWNhY2hlLW1hcC1jb250aW51ZS1mcm9t KSkgKHByb2duIChnb3RvLWNoYXIgc3RhcnQpIChzZXRxIGRhdGEgLi4uKSAoaWYgZGF0YSAuLi4p KSkgKG9yZy1lbGVtZW50LWF0LXBvaW50IHRvLXBvcykgKGlmIG5vZGUgKHByb2duIChvcmctZWxl bWVudC1hdC1wb2ludCAuLi4pIChzZXRxIG5vZGUgLi4uIHN0YWNrIC4uLiBsZWZ0cCB0IGNvbnRp bnVlLWZsYWcgdCkpKSkgKGlmIChhbmQgbGltaXQtY291bnQgKD49IGNvdW50LXByZWRpY2F0ZS1j YWxscy1tYXRjaCBsaW1pdC1jb3VudCkpIChwcm9nbiAoc2V0cSBjb250aW51ZS1mbGFnIHQgbm9k ZSBuaWwpKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y2FjaGVkIGRhdGEpIChzZXRxIHBy ZXYgZGF0YSkgKHNldHEgcHJldiBuaWwpKSkpKSAoaWYgKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUg KG9yZy1lbGVtZW50LS1wYXJzZS10byBzdGFydCkpICcocGxhaW4tbGlzdCB0YWJsZSkpIChvcmct ZWxlbWVudC0tcGFyc2UtdG8gKDErIHN0YXJ0KSkpIChpZiBub2RlIChwcm9nbiAob3JnLWVsZW1l bnQtYXQtcG9pbnQgKHBvaW50LW1heCkpIChzZXRxIG5vZGUgKGlmIChtZW1xIGdyYW51bGFyaXR5 ICcoaGVhZGxpbmUgaGVhZGxpbmUraW5saW5ldGFzaykpIChvcmctZWxlbWVudC0taGVhZGxpbmUt Y2FjaGUtcm9vdCkgKG9yZy1lbGVtZW50LS1jYWNoZS1yb290KSkgc3RhY2sgKGxpc3QgbmlsKSBs ZWZ0cCB0IGNvbnRpbnVlLWZsYWcgdCkpKSkKICAoaWYgKG9yIChhbmQgc3RhcnQgKDwgKG9yZy1l bGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRhKSBzdGFydCkpIChhbmQgcHJldiAobm90IChvcmct ZWxlbWVudC0tY2FjaGUta2V5LWxlc3MtcCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleSBwcmV2KSAo b3JnLWVsZW1lbnQtLWNhY2hlLWtleSBkYXRhKSkpKSkgbmlsIChpZiAob3IgKG5vdCBzdGFydCkg KD0gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRhKSBzdGFydCkpIChwcm9nbiAoc2V0 cSBtb2RpZmllZC10aWMgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMpIChzZXRxIGNhY2hl LXNpemUgKGlmIChtZW1xIGdyYW51bGFyaXR5ICcoaGVhZGxpbmUgaGVhZGxpbmUraW5saW5ldGFz aykpIG9yZy1lbGVtZW50LS1oZWFkbGluZS1jYWNoZS1zaXplIG9yZy1lbGVtZW50LS1jYWNoZS1z aXplKSkgKGlmIChpZiBsYXN0LW1hdGNoIG5leHQtcmUgZmFpbC1yZSkgKHByb2duIChnb3RvLWNo YXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRhKSkgKGxldCAoKHNhdmUtbWF0Y2gt ZGF0YS1pbnRlcm5hbCAuLi4pKSAodW53aW5kLXByb3RlY3QgKHByb2duIC4uLikgKHNldC1tYXRj aC1kYXRhIHNhdmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAuLi4pKSkpKSAoaWYgKGFuZCAob3IgKG5v dCBzdGFydCkgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZGF0YSkgc3RhcnQpKSAo PCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGRhdGEpIHRvLXBvcykpIChwcm9nbiAoc2V0 cSBzdGFydCAocHJvZ24gKHNldHEgdG1wbmV4dC1zdGFydCBuaWwpIChpZiAuLi4gLi4uIC4uLikg KHNldHEgdG1wcGFyZW50IGRhdGEpIChjYXRjaCA6ZXhpdCAuLi4gLi4uKSB0bXBuZXh0LXN0YXJ0 KSkgKGdvdG8tY2hhciBzdGFydCkgKGlmIChhbmQgbmV4dC1lbGVtZW50LXJlIChub3QgLi4uKSkg KHByb2duIChsZXQgLi4uIC4uLikgKGdvdG8tY2hhciBzdGFydCkpKSAoaWYgKG9yIChub3QgcmVz dHJpY3QtZWxlbWVudHMpIChtZW1xIC4uLiByZXN0cmljdC1lbGVtZW50cykpIChwcm9nbiAoc2V0 cSBvcmctZWxlbWVudC1jYWNoZS1tYXAtY29udGludWUtZnJvbSBuaWwpIChpZiBvcmctZWxlbWVu dC0tY2FjaGUtbWFwLXN0YXRpc3RpY3MgLi4uIC4uLiAuLi4pIChzZXRxIGxhc3QtbWF0Y2ggLi4u KSAoaWYgb3JnLWVsZW1lbnQtY2FjaGUtbWFwLWNvbnRpbnVlLWZyb20gLi4uKSAoaWYgLi4uIC4u LikgKGlmIC4uLiBuaWwgLi4uKSkpIChpZiAoYW5kIChlcSBvcmctZWxlbWVudC0tY2FjaGUtY2hh bmdlLXRpYyAuLi4pIChlcSAuLi4gc3RhcnQpKSAocHJvZ24gKHNldHEgc3RhcnQgbmlsKSkpIChp ZiAoYW5kIChlcSBtb2RpZmllZC10aWMgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMpIChl cSBjYWNoZS1zaXplIC4uLikpIG5pbCAoc2V0cSBzdGFydCBuaWwpIChsZXQgKC4uLikgKHVud2lu ZC1wcm90ZWN0IC4uLiAuLi4pKSAoaWYgKGFuZCBzdGFydCAuLi4gLi4uKSAocHJvZ24gLi4uIC4u LiAuLi4pKSAob3JnLWVsZW1lbnQtYXQtcG9pbnQgdG8tcG9zKSAoaWYgbm9kZSAocHJvZ24gLi4u IC4uLikpKSAoaWYgKGFuZCBsaW1pdC1jb3VudCAoPj0gY291bnQtcHJlZGljYXRlLWNhbGxzLW1h dGNoIGxpbWl0LWNvdW50KSkgKHByb2duIChzZXRxIGNvbnRpbnVlLWZsYWcgdCBub2RlIG5pbCkp KSAoaWYgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjYWNoZWQgZGF0YSkgKHNldHEgcHJldiBkYXRh KSAoc2V0cSBwcmV2IG5pbCkpKSkpIChpZiAobWVtcSAob3JnLWVsZW1lbnQtdHlwZSAob3JnLWVs ZW1lbnQtLXBhcnNlLXRvIHN0YXJ0KSkgJyhwbGFpbi1saXN0IHRhYmxlKSkgKG9yZy1lbGVtZW50 LS1wYXJzZS10byAoMSsgc3RhcnQpKSkgKGlmIG5vZGUgKHByb2duIChvcmctZWxlbWVudC1hdC1w b2ludCAocG9pbnQtbWF4KSkgKHNldHEgbm9kZSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkgJy4uLikg KG9yZy1lbGVtZW50LS1oZWFkbGluZS1jYWNoZS1yb290KSAob3JnLWVsZW1lbnQtLWNhY2hlLXJv b3QpKSBzdGFjayAobGlzdCBuaWwpIGxlZnRwIHQgY29udGludWUtZmxhZyB0KSkpKSkKICAoaWYg KGFuZCBsZWZ0cCAocHJvZ24gKHByb2duIChhcmVmIG5vZGUgMCkpKSAob3IgKG5vdCBwcmV2KSAo bm90IChvcmctZWxlbWVudC0tY2FjaGUta2V5LWxlc3MtcCAob3JnLWVsZW1lbnQtLWNhY2hlLWtl eSBkYXRhKSAob3JnLWVsZW1lbnQtLWNhY2hlLWtleSBwcmV2KSkpKSAob3IgKG5vdCBzdGFydCkg KG5vdCAoPiBzdGFydCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGRhdGEpKSkpKSAocHJv Z24gKHNldHEgc3RhY2sgKGNvbnMgbm9kZSBzdGFjaykpIChzZXRxIG5vZGUgKHByb2duIChwcm9n biAoYXJlZiBub2RlIDApKSkpKSAoaWYgKG9yIChhbmQgc3RhcnQgKDwgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpiZWdpbiBkYXRhKSBzdGFydCkpIChhbmQgcHJldiAobm90IChvcmctZWxlbWVudC0t Y2FjaGUta2V5LWxlc3MtcCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleSBwcmV2KSAob3JnLWVsZW1l bnQtLWNhY2hlLWtleSBkYXRhKSkpKSkgbmlsIChpZiAob3IgKG5vdCBzdGFydCkgKD0gKG9yZy1l bGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRhKSBzdGFydCkpIChwcm9nbiAoc2V0cSBtb2RpZmll ZC10aWMgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMpIChzZXRxIGNhY2hlLXNpemUgKGlm IChtZW1xIGdyYW51bGFyaXR5ICcuLi4pIG9yZy1lbGVtZW50LS1oZWFkbGluZS1jYWNoZS1zaXpl IG9yZy1lbGVtZW50LS1jYWNoZS1zaXplKSkgKGlmIChpZiBsYXN0LW1hdGNoIG5leHQtcmUgZmFp bC1yZSkgKHByb2duIChnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRh KSkgKGxldCAoLi4uKSAodW53aW5kLXByb3RlY3QgLi4uIC4uLikpKSkgKGlmIChhbmQgKG9yIChu b3Qgc3RhcnQpIChlcSAuLi4gc3RhcnQpKSAoPCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2lu IGRhdGEpIHRvLXBvcykpIChwcm9nbiAoc2V0cSBzdGFydCAocHJvZ24gLi4uIC4uLiAuLi4gLi4u IHRtcG5leHQtc3RhcnQpKSAoZ290by1jaGFyIHN0YXJ0KSAoaWYgKGFuZCBuZXh0LWVsZW1lbnQt cmUgLi4uKSAocHJvZ24gLi4uIC4uLikpIChpZiAob3IgLi4uIC4uLikgKHByb2duIC4uLiAuLi4g Li4uIC4uLiAuLi4gLi4uKSkgKGlmIChhbmQgLi4uIC4uLikgKHByb2duIC4uLikpIChpZiAoYW5k IC4uLiAuLi4pIG5pbCAoc2V0cSBzdGFydCBuaWwpIChsZXQgLi4uIC4uLikgKGlmIC4uLiAuLi4p IChvcmctZWxlbWVudC1hdC1wb2ludCB0by1wb3MpIChpZiBub2RlIC4uLikpIChpZiAoYW5kIGxp bWl0LWNvdW50IC4uLikgKHByb2duIC4uLikpIChpZiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNh Y2hlZCBkYXRhKSAoc2V0cSBwcmV2IGRhdGEpIChzZXRxIHByZXYgbmlsKSkpKSkgKGlmIChtZW1x IChvcmctZWxlbWVudC10eXBlIChvcmctZWxlbWVudC0tcGFyc2UtdG8gc3RhcnQpKSAnKHBsYWlu LWxpc3QgdGFibGUpKSAob3JnLWVsZW1lbnQtLXBhcnNlLXRvICgxKyBzdGFydCkpKSAoaWYgbm9k ZSAocHJvZ24gKG9yZy1lbGVtZW50LWF0LXBvaW50IChwb2ludC1tYXgpKSAoc2V0cSBub2RlIChp ZiAobWVtcSBncmFudWxhcml0eSAuLi4pIChvcmctZWxlbWVudC0taGVhZGxpbmUtY2FjaGUtcm9v dCkgKG9yZy1lbGVtZW50LS1jYWNoZS1yb290KSkgc3RhY2sgKGxpc3QgbmlsKSBsZWZ0cCB0IGNv bnRpbnVlLWZsYWcgdCkpKSkpIChpZiBjb250aW51ZS1mbGFnIChzZXRxIGNvbnRpbnVlLWZsYWcg bmlsKSAoc2V0cSBub2RlIChpZiAoYW5kIChjYXIgc3RhY2spIChvciAoYW5kIHN0YXJ0ICg8IC4u LiBzdGFydCkpIChhbmQgcHJldiAob3JnLWVsZW1lbnQtLWNhY2hlLWtleS1sZXNzLXAgLi4uIC4u LikpKSkgKHByb2duIChzZXRxIGxlZnRwIG5pbCkgKGNhci1zYWZlIChwcm9nMSBzdGFjayAoc2V0 cSBzdGFjayAuLi4pKSkpIChpZiAoc2V0cSBsZWZ0cCAocHJvZ24gKHByb2duIC4uLikpKSAocHJv Z24gKHByb2duIChhcmVmIG5vZGUgMSkpKSAoY2FyLXNhZmUgKHByb2cxIHN0YWNrIChzZXRxIHN0 YWNrIC4uLikpKSkpKSkpCiAgKHdoaWxlIG5vZGUgKHNldHEgZGF0YSAocHJvZ24gKHByb2duIChh cmVmIG5vZGUgMikpKSkgKGlmIChhbmQgbGVmdHAgKHByb2duIChwcm9nbiAoYXJlZiBub2RlIDAp KSkgKG9yIChub3QgcHJldikgKG5vdCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleS1sZXNzLXAgKG9y Zy1lbGVtZW50LS1jYWNoZS1rZXkgZGF0YSkgKG9yZy1lbGVtZW50LS1jYWNoZS1rZXkgcHJldikp KSkgKG9yIChub3Qgc3RhcnQpIChub3QgKD4gc3RhcnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpi ZWdpbiBkYXRhKSkpKSkgKHByb2duIChzZXRxIHN0YWNrIChjb25zIG5vZGUgc3RhY2spKSAoc2V0 cSBub2RlIChwcm9nbiAocHJvZ24gKGFyZWYgbm9kZSAwKSkpKSkgKGlmIChvciAoYW5kIHN0YXJ0 ICg8IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZGF0YSkgc3RhcnQpKSAoYW5kIHByZXYg KG5vdCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleS1sZXNzLXAgKG9yZy1lbGVtZW50LS1jYWNoZS1r ZXkgcHJldikgKG9yZy1lbGVtZW50LS1jYWNoZS1rZXkgZGF0YSkpKSkpIG5pbCAoaWYgKG9yIChu b3Qgc3RhcnQpICg9IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZGF0YSkgc3RhcnQpKSAo cHJvZ24gKHNldHEgbW9kaWZpZWQtdGljIG9yZy1lbGVtZW50LS1jYWNoZS1jaGFuZ2UtdGljKSAo c2V0cSBjYWNoZS1zaXplIChpZiAobWVtcSBncmFudWxhcml0eSAuLi4pIG9yZy1lbGVtZW50LS1o ZWFkbGluZS1jYWNoZS1zaXplIG9yZy1lbGVtZW50LS1jYWNoZS1zaXplKSkgKGlmIChpZiBsYXN0 LW1hdGNoIG5leHQtcmUgZmFpbC1yZSkgKHByb2duIChnb3RvLWNoYXIgLi4uKSAobGV0IC4uLiAu Li4pKSkgKGlmIChhbmQgKG9yIC4uLiAuLi4pICg8IC4uLiB0by1wb3MpKSAocHJvZ24gKHNldHEg c3RhcnQgLi4uKSAoZ290by1jaGFyIHN0YXJ0KSAoaWYgLi4uIC4uLikgKGlmIC4uLiAuLi4pIChp ZiAuLi4gLi4uKSAoaWYgLi4uIG5pbCAuLi4gLi4uIC4uLiAuLi4gLi4uKSAoaWYgLi4uIC4uLikg KGlmIC4uLiAuLi4gLi4uKSkpKSAoaWYgKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgKG9yZy1lbGVt ZW50LS1wYXJzZS10byBzdGFydCkpICcocGxhaW4tbGlzdCB0YWJsZSkpIChvcmctZWxlbWVudC0t cGFyc2UtdG8gKDErIHN0YXJ0KSkpIChpZiBub2RlIChwcm9nbiAob3JnLWVsZW1lbnQtYXQtcG9p bnQgKHBvaW50LW1heCkpIChzZXRxIG5vZGUgKGlmIC4uLiAuLi4gLi4uKSBzdGFjayAobGlzdCBu aWwpIGxlZnRwIHQgY29udGludWUtZmxhZyB0KSkpKSkgKGlmIGNvbnRpbnVlLWZsYWcgKHNldHEg Y29udGludWUtZmxhZyBuaWwpIChzZXRxIG5vZGUgKGlmIChhbmQgKGNhciBzdGFjaykgKG9yIChh bmQgc3RhcnQgLi4uKSAoYW5kIHByZXYgLi4uKSkpIChwcm9nbiAoc2V0cSBsZWZ0cCBuaWwpIChj YXItc2FmZSAocHJvZzEgc3RhY2sgLi4uKSkpIChpZiAoc2V0cSBsZWZ0cCAocHJvZ24gLi4uKSkg KHByb2duIChwcm9nbiAuLi4pKSAoY2FyLXNhZmUgKHByb2cxIHN0YWNrIC4uLikpKSkpKSkpCiAg KGlmIChhbmQgc3RhcnQgKD49IHN0YXJ0IHRvLXBvcykpIG5pbCAod2hpbGUgbm9kZSAoc2V0cSBk YXRhIChwcm9nbiAocHJvZ24gKGFyZWYgbm9kZSAyKSkpKSAoaWYgKGFuZCBsZWZ0cCAocHJvZ24g KHByb2duIChhcmVmIG5vZGUgMCkpKSAob3IgKG5vdCBwcmV2KSAobm90IChvcmctZWxlbWVudC0t Y2FjaGUta2V5LWxlc3MtcCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleSBkYXRhKSAob3JnLWVsZW1l bnQtLWNhY2hlLWtleSBwcmV2KSkpKSAob3IgKG5vdCBzdGFydCkgKG5vdCAoPiBzdGFydCAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGRhdGEpKSkpKSAocHJvZ24gKHNldHEgc3RhY2sgKGNv bnMgbm9kZSBzdGFjaykpIChzZXRxIG5vZGUgKHByb2duIChwcm9nbiAoYXJlZiBub2RlIDApKSkp KSAoaWYgKG9yIChhbmQgc3RhcnQgKDwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXRh KSBzdGFydCkpIChhbmQgcHJldiAobm90IChvcmctZWxlbWVudC0tY2FjaGUta2V5LWxlc3MtcCAu Li4gLi4uKSkpKSBuaWwgKGlmIChvciAobm90IHN0YXJ0KSAoPSAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOmJlZ2luIGRhdGEpIHN0YXJ0KSkgKHByb2duIChzZXRxIG1vZGlmaWVkLXRpYyBvcmctZWxl bWVudC0tY2FjaGUtY2hhbmdlLXRpYykgKHNldHEgY2FjaGUtc2l6ZSAoaWYgLi4uIG9yZy1lbGVt ZW50LS1oZWFkbGluZS1jYWNoZS1zaXplIG9yZy1lbGVtZW50LS1jYWNoZS1zaXplKSkgKGlmIChp ZiBsYXN0LW1hdGNoIG5leHQtcmUgZmFpbC1yZSkgKHByb2duIC4uLiAuLi4pKSAoaWYgKGFuZCAu Li4gLi4uKSAocHJvZ24gLi4uIC4uLiAuLi4gLi4uIC4uLiAuLi4gLi4uIC4uLikpKSAoaWYgKG1l bXEgKG9yZy1lbGVtZW50LXR5cGUgLi4uKSAnLi4uKSAob3JnLWVsZW1lbnQtLXBhcnNlLXRvICgx KyBzdGFydCkpKSAoaWYgbm9kZSAocHJvZ24gKG9yZy1lbGVtZW50LWF0LXBvaW50IC4uLikgKHNl dHEgbm9kZSAuLi4gc3RhY2sgLi4uIGxlZnRwIHQgY29udGludWUtZmxhZyB0KSkpKSkgKGlmIGNv bnRpbnVlLWZsYWcgKHNldHEgY29udGludWUtZmxhZyBuaWwpIChzZXRxIG5vZGUgKGlmIChhbmQg KGNhciBzdGFjaykgKG9yIC4uLiAuLi4pKSAocHJvZ24gKHNldHEgbGVmdHAgbmlsKSAoY2FyLXNh ZmUgLi4uKSkgKGlmIChzZXRxIGxlZnRwIC4uLikgKHByb2duIC4uLikgKGNhci1zYWZlIC4uLikp KSkpKSkpCiAgKGxldCogKChzdGFydCAoYW5kIGZyb20tcG9zIChwcm9nbiAoZ290by1jaGFyIGZy b20tcG9zKSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIChwcm9nbiAoaWYgb3JnLWVsZW1l bnQtLWNhY2hlLXN5bmMtcmVxdWVzdHMgLi4uKSAoaWYgcmVzdHJpY3QtZWxlbWVudHMgLi4uIC4u LikpKSkpKSAocHJldiBhZnRlci1lbGVtZW50KSAobm9kZSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkg JyhoZWFkbGluZSBoZWFkbGluZStpbmxpbmV0YXNrKSkgKG9yZy1lbGVtZW50LS1oZWFkbGluZS1j YWNoZS1yb290KSAob3JnLWVsZW1lbnQtLWNhY2hlLXJvb3QpKSkgZGF0YSAoc3RhY2sgKGxpc3Qg bmlsKSkgKGxlZnRwIHQpIHJlc3VsdCAobGFzdC1tYXRjaCB0KSBjb250aW51ZS1mbGFnIChuZXh0 LWVsZW1lbnQtcmUgKGxldCogKChwY2FzZS0wICMnKGxhbWJkYSBuaWwgLi4uKSkpIChjb25kICgo ZXEgZ3JhbnVsYXJpdHkgJ2hlYWRsaW5lKSAoZnVuY2FsbCBwY2FzZS0wKSkgKChlcSAnLi4uIHJl c3RyaWN0LWVsZW1lbnRzKSAoZnVuY2FsbCBwY2FzZS0wKSkgKChlcSBncmFudWxhcml0eSAnaGVh ZGxpbmUraW5saW5ldGFzaykgKGxldCBuaWwgKGNvbnMgLi4uIC4uLikpKSAodCAnbmlsKSkpKSAo bmV4dC1yZSAoaWYgKGFuZCBuZXh0LXJlIChzdHJpbmc9IG5leHQtcmUgKG9yIChjYXItc2FmZSBu ZXh0LWVsZW1lbnQtcmUpIG5leHQtZWxlbWVudC1yZSkpKSBuaWwgbmV4dC1yZSkpIChmYWlsLXJl IChpZiAoYW5kIGZhaWwtcmUgKHN0cmluZz0gZmFpbC1yZSAob3IgKGNhci1zYWZlIG5leHQtZWxl bWVudC1yZSkgbmV4dC1lbGVtZW50LXJlKSkpIG5pbCBmYWlsLXJlKSkgKHJlc3RyaWN0LWVsZW1l bnRzIChvciByZXN0cmljdC1lbGVtZW50cyAoY29uZCAoKGVxIGdyYW51bGFyaXR5ICdoZWFkbGlu ZSkgKGxldCBuaWwgJy4uLikpICgoZXEgZ3JhbnVsYXJpdHkgJ2hlYWRsaW5lK2lubGluZXRhc2sp IChsZXQgbmlsICcuLi4pKSAoKGVxIGdyYW51bGFyaXR5ICdncmVhdGVyLWVsZW1lbnQpIChsZXQg bmlsIG9yZy1lbGVtZW50LWdyZWF0ZXItZWxlbWVudHMpKSAodCAnbmlsKSkpKSAodGltZSAoZmxv YXQtdGltZSkpIChwcmVkaWNhdGUtdGltZSAwKSAocHJlLXByb2Nlc3MtdGltZSAwKSAocmUtc2Vh cmNoLXRpbWUgMCkgKGNvdW50LXByZWRpY2F0ZS1jYWxscy1tYXRjaCAwKSAoY291bnQtcHJlZGlj YXRlLWNhbGxzLWZhaWwgMCkgY2FjaGUtc2l6ZSBiZWZvcmUtdGltZSBtb2RpZmllZC10aWMpIChn b3RvLWNoYXIgKG9yIHN0YXJ0IChwb2ludC1taW4pKSkgKGxldCAoKHNhdmUtbWF0Y2gtZGF0YS1p bnRlcm5hbCAobWF0Y2gtZGF0YSkpKSAodW53aW5kLXByb3RlY3QgKHByb2duIChpZiAob3IgKG5v dCBuZXh0LWVsZW1lbnQtcmUpIChpZiBvcmctZWxlbWVudC0tY2FjaGUtbWFwLXN0YXRpc3RpY3Mg KHByb2duIC4uLiAuLi4gLi4uKSAocmUtc2VhcmNoLWZvcndhcmQgLi4uIG5pbCAuLi4pKSkgKGlm IChvciAoPCAuLi4gLi4uKSAoYW5kIGRhdGEgLi4uKSkgbmlsIChpZiAoY2RyLXNhZmUgbmV4dC1l bGVtZW50LXJlKSAoc2V0cSBzdGFydCAuLi4pIChzZXRxIHN0YXJ0IC4uLikpIChpZiAoPj0gc3Rh cnQgdG8tcG9zKSAocHJvZ24gLi4uKSkgKGlmIChlcSBzdGFydCAtMSkgKHByb2duIC4uLikpKSAo c2V0cSBjb250aW51ZS1mbGFnIHQgbm9kZSBuaWwpKSkgKHNldC1tYXRjaC1kYXRhIHNhdmUtbWF0 Y2gtZGF0YS1pbnRlcm5hbCAnZXZhcG9yYXRlKSkpIChpZiAoYW5kIHN0YXJ0ICg+PSBzdGFydCB0 by1wb3MpKSBuaWwgKHdoaWxlIG5vZGUgKHNldHEgZGF0YSAocHJvZ24gKHByb2duIChhcmVmIG5v ZGUgMikpKSkgKGlmIChhbmQgbGVmdHAgKHByb2duIChwcm9nbiAoYXJlZiBub2RlIDApKSkgKG9y IChub3QgcHJldikgKG5vdCAob3JnLWVsZW1lbnQtLWNhY2hlLWtleS1sZXNzLXAgLi4uIC4uLikp KSAob3IgKG5vdCBzdGFydCkgKG5vdCAoPiBzdGFydCAuLi4pKSkpIChwcm9nbiAoc2V0cSBzdGFj ayAoY29ucyBub2RlIHN0YWNrKSkgKHNldHEgbm9kZSAocHJvZ24gKHByb2duIC4uLikpKSkgKGlm IChvciAoYW5kIHN0YXJ0ICg8IC4uLiBzdGFydCkpIChhbmQgcHJldiAobm90IC4uLikpKSBuaWwg KGlmIChvciAobm90IHN0YXJ0KSAoPSAuLi4gc3RhcnQpKSAocHJvZ24gKHNldHEgbW9kaWZpZWQt dGljIG9yZy1lbGVtZW50LS1jYWNoZS1jaGFuZ2UtdGljKSAoc2V0cSBjYWNoZS1zaXplIC4uLikg KGlmIC4uLiAuLi4pIChpZiAuLi4gLi4uKSkgKGlmIChtZW1xIC4uLiAuLi4pIChvcmctZWxlbWVu dC0tcGFyc2UtdG8gLi4uKSkgKGlmIG5vZGUgKHByb2duIC4uLiAuLi4pKSkpIChpZiBjb250aW51 ZS1mbGFnIChzZXRxIGNvbnRpbnVlLWZsYWcgbmlsKSAoc2V0cSBub2RlIChpZiAoYW5kIC4uLiAu Li4pIChwcm9nbiAuLi4gLi4uKSAoaWYgLi4uIC4uLiAuLi4pKSkpKSkpIChpZiAoYW5kIG9yZy1l bGVtZW50LS1jYWNoZS1tYXAtc3RhdGlzdGljcyAob3IgKG5vdCBvcmctZWxlbWVudC0tY2FjaGUt bWFwLXN0YXRpc3RpY3MtdGhyZXNob2xkKSAoPiAoLSAoZmxvYXQtdGltZSkgdGltZSkgb3JnLWVs ZW1lbnQtLWNhY2hlLW1hcC1zdGF0aXN0aWNzLXRocmVzaG9sZCkpKSAocHJvZ24gKG1lc3NhZ2Ug Ik1hcHBlZCBvdmVyIGVsZW1lbnRzIGluICVTLiAlZC8lZCBwcmVkaWNhdGUgbWF0Y2hlLi4uIiAo Y3VycmVudC1idWZmZXIpIGNvdW50LXByZWRpY2F0ZS1jYWxscy1tYXRjaCAoKyBjb3VudC1wcmVk aWNhdGUtY2FsbHMtbWF0Y2ggY291bnQtcHJlZGljYXRlLWNhbGxzLWZhaWwpICgtIChmbG9hdC10 aW1lKSB0aW1lKSBwcmUtcHJvY2Vzcy10aW1lIHByZWRpY2F0ZS10aW1lIHJlLXNlYXJjaC10aW1l IGdyYW51bGFyaXR5IHJlc3RyaWN0LWVsZW1lbnRzIG5leHQtcmUgZmFpbC1yZSBmcm9tLXBvcyB0 by1wb3MgbGltaXQtY291bnQgYWZ0ZXItZWxlbWVudCkpKSAobnJldmVyc2UgcmVzdWx0KSkKICAo c2F2ZS1yZXN0cmljdGlvbiAoaWYgbmFycm93IG5pbCAod2lkZW4pKSAob3JnLWVsZW1lbnQtYXQt cG9pbnQgdG8tcG9zKSAobGV0KiAoKHN0YXJ0IChhbmQgZnJvbS1wb3MgKHByb2duIChnb3RvLWNo YXIgZnJvbS1wb3MpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gKHByb2duIC4uLiAuLi4p KSkpKSAocHJldiBhZnRlci1lbGVtZW50KSAobm9kZSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkgJyho ZWFkbGluZSBoZWFkbGluZStpbmxpbmV0YXNrKSkgKG9yZy1lbGVtZW50LS1oZWFkbGluZS1jYWNo ZS1yb290KSAob3JnLWVsZW1lbnQtLWNhY2hlLXJvb3QpKSkgZGF0YSAoc3RhY2sgKGxpc3Qgbmls KSkgKGxlZnRwIHQpIHJlc3VsdCAobGFzdC1tYXRjaCB0KSBjb250aW51ZS1mbGFnIChuZXh0LWVs ZW1lbnQtcmUgKGxldCogKChwY2FzZS0wICMnLi4uKSkgKGNvbmQgKChlcSBncmFudWxhcml0eSAu Li4pIChmdW5jYWxsIHBjYXNlLTApKSAoKGVxIC4uLiByZXN0cmljdC1lbGVtZW50cykgKGZ1bmNh bGwgcGNhc2UtMCkpICgoZXEgZ3JhbnVsYXJpdHkgLi4uKSAobGV0IG5pbCAuLi4pKSAodCAnbmls KSkpKSAobmV4dC1yZSAoaWYgKGFuZCBuZXh0LXJlIChzdHJpbmc9IG5leHQtcmUgKG9yIC4uLiBu ZXh0LWVsZW1lbnQtcmUpKSkgbmlsIG5leHQtcmUpKSAoZmFpbC1yZSAoaWYgKGFuZCBmYWlsLXJl IChzdHJpbmc9IGZhaWwtcmUgKG9yIC4uLiBuZXh0LWVsZW1lbnQtcmUpKSkgbmlsIGZhaWwtcmUp KSAocmVzdHJpY3QtZWxlbWVudHMgKG9yIHJlc3RyaWN0LWVsZW1lbnRzIChjb25kICgoZXEgZ3Jh bnVsYXJpdHkgLi4uKSAobGV0IG5pbCAuLi4pKSAoKGVxIGdyYW51bGFyaXR5IC4uLikgKGxldCBu aWwgLi4uKSkgKChlcSBncmFudWxhcml0eSAuLi4pIChsZXQgbmlsIG9yZy1lbGVtZW50LWdyZWF0 ZXItZWxlbWVudHMpKSAodCAnbmlsKSkpKSAodGltZSAoZmxvYXQtdGltZSkpIChwcmVkaWNhdGUt dGltZSAwKSAocHJlLXByb2Nlc3MtdGltZSAwKSAocmUtc2VhcmNoLXRpbWUgMCkgKGNvdW50LXBy ZWRpY2F0ZS1jYWxscy1tYXRjaCAwKSAoY291bnQtcHJlZGljYXRlLWNhbGxzLWZhaWwgMCkgY2Fj aGUtc2l6ZSBiZWZvcmUtdGltZSBtb2RpZmllZC10aWMpIChnb3RvLWNoYXIgKG9yIHN0YXJ0IChw b2ludC1taW4pKSkgKGxldCAoKHNhdmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAobWF0Y2gtZGF0YSkp KSAodW53aW5kLXByb3RlY3QgKHByb2duIChpZiAob3IgKG5vdCBuZXh0LWVsZW1lbnQtcmUpIChp ZiBvcmctZWxlbWVudC0tY2FjaGUtbWFwLXN0YXRpc3RpY3MgLi4uIC4uLikpIChpZiAob3IgLi4u IC4uLikgbmlsIChpZiAuLi4gLi4uIC4uLikgKGlmIC4uLiAuLi4pIChpZiAuLi4gLi4uKSkgKHNl dHEgY29udGludWUtZmxhZyB0IG5vZGUgbmlsKSkpIChzZXQtbWF0Y2gtZGF0YSBzYXZlLW1hdGNo LWRhdGEtaW50ZXJuYWwgJ2V2YXBvcmF0ZSkpKSAoaWYgKGFuZCBzdGFydCAoPj0gc3RhcnQgdG8t cG9zKSkgbmlsICh3aGlsZSBub2RlIChzZXRxIGRhdGEgKHByb2duIChwcm9nbiAoYXJlZiBub2Rl IDIpKSkpIChpZiAoYW5kIGxlZnRwIChwcm9nbiAocHJvZ24gLi4uKSkgKG9yIChub3QgcHJldikg KG5vdCAuLi4pKSAob3IgKG5vdCBzdGFydCkgKG5vdCAuLi4pKSkgKHByb2duIChzZXRxIHN0YWNr IChjb25zIG5vZGUgc3RhY2spKSAoc2V0cSBub2RlIChwcm9nbiAuLi4pKSkgKGlmIChvciAoYW5k IHN0YXJ0IC4uLikgKGFuZCBwcmV2IC4uLikpIG5pbCAoaWYgKG9yIC4uLiAuLi4pIChwcm9nbiAu Li4gLi4uIC4uLiAuLi4pIChpZiAuLi4gLi4uKSAoaWYgbm9kZSAuLi4pKSkgKGlmIGNvbnRpbnVl LWZsYWcgKHNldHEgY29udGludWUtZmxhZyBuaWwpIChzZXRxIG5vZGUgKGlmIC4uLiAuLi4gLi4u KSkpKSkpIChpZiAoYW5kIG9yZy1lbGVtZW50LS1jYWNoZS1tYXAtc3RhdGlzdGljcyAob3IgKG5v dCBvcmctZWxlbWVudC0tY2FjaGUtbWFwLXN0YXRpc3RpY3MtdGhyZXNob2xkKSAoPiAoLSAoZmxv YXQtdGltZSkgdGltZSkgb3JnLWVsZW1lbnQtLWNhY2hlLW1hcC1zdGF0aXN0aWNzLXRocmVzaG9s ZCkpKSAocHJvZ24gKG1lc3NhZ2UgIk1hcHBlZCBvdmVyIGVsZW1lbnRzIGluICVTLiAlZC8lZCBw cmVkaWNhdGUgbWF0Y2hlLi4uIiAoY3VycmVudC1idWZmZXIpIGNvdW50LXByZWRpY2F0ZS1jYWxs cy1tYXRjaCAoKyBjb3VudC1wcmVkaWNhdGUtY2FsbHMtbWF0Y2ggY291bnQtcHJlZGljYXRlLWNh bGxzLWZhaWwpICgtIChmbG9hdC10aW1lKSB0aW1lKSBwcmUtcHJvY2Vzcy10aW1lIHByZWRpY2F0 ZS10aW1lIHJlLXNlYXJjaC10aW1lIGdyYW51bGFyaXR5IHJlc3RyaWN0LWVsZW1lbnRzIG5leHQt cmUgZmFpbC1yZSBmcm9tLXBvcyB0by1wb3MgbGltaXQtY291bnQgYWZ0ZXItZWxlbWVudCkpKSAo bnJldmVyc2UgcmVzdWx0KSkpCiAgKHNhdmUtZXhjdXJzaW9uIChzYXZlLXJlc3RyaWN0aW9uIChp ZiBuYXJyb3cgbmlsICh3aWRlbikpIChvcmctZWxlbWVudC1hdC1wb2ludCB0by1wb3MpIChsZXQq ICgoc3RhcnQgKGFuZCBmcm9tLXBvcyAocHJvZ24gKGdvdG8tY2hhciBmcm9tLXBvcykgKG9yZy1l bGVtZW50LXByb3BlcnR5IDpiZWdpbiAuLi4pKSkpIChwcmV2IGFmdGVyLWVsZW1lbnQpIChub2Rl IChpZiAobWVtcSBncmFudWxhcml0eSAnLi4uKSAob3JnLWVsZW1lbnQtLWhlYWRsaW5lLWNhY2hl LXJvb3QpIChvcmctZWxlbWVudC0tY2FjaGUtcm9vdCkpKSBkYXRhIChzdGFjayAobGlzdCBuaWwp KSAobGVmdHAgdCkgcmVzdWx0IChsYXN0LW1hdGNoIHQpIGNvbnRpbnVlLWZsYWcgKG5leHQtZWxl bWVudC1yZSAobGV0KiAoKHBjYXNlLTAgLi4uKSkgKGNvbmQgKC4uLiAuLi4pICguLi4gLi4uKSAo Li4uIC4uLikgKHQgLi4uKSkpKSAobmV4dC1yZSAoaWYgKGFuZCBuZXh0LXJlIChzdHJpbmc9IG5l eHQtcmUgLi4uKSkgbmlsIG5leHQtcmUpKSAoZmFpbC1yZSAoaWYgKGFuZCBmYWlsLXJlIChzdHJp bmc9IGZhaWwtcmUgLi4uKSkgbmlsIGZhaWwtcmUpKSAocmVzdHJpY3QtZWxlbWVudHMgKG9yIHJl c3RyaWN0LWVsZW1lbnRzIChjb25kICguLi4gLi4uKSAoLi4uIC4uLikgKC4uLiAuLi4pICh0IC4u LikpKSkgKHRpbWUgKGZsb2F0LXRpbWUpKSAocHJlZGljYXRlLXRpbWUgMCkgKHByZS1wcm9jZXNz LXRpbWUgMCkgKHJlLXNlYXJjaC10aW1lIDApIChjb3VudC1wcmVkaWNhdGUtY2FsbHMtbWF0Y2gg MCkgKGNvdW50LXByZWRpY2F0ZS1jYWxscy1mYWlsIDApIGNhY2hlLXNpemUgYmVmb3JlLXRpbWUg bW9kaWZpZWQtdGljKSAoZ290by1jaGFyIChvciBzdGFydCAocG9pbnQtbWluKSkpIChsZXQgKChz YXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwgKG1hdGNoLWRhdGEpKSkgKHVud2luZC1wcm90ZWN0IChw cm9nbiAoaWYgKG9yIC4uLiAuLi4pIChpZiAuLi4gbmlsIC4uLiAuLi4gLi4uKSAoc2V0cSBjb250 aW51ZS1mbGFnIHQgbm9kZSBuaWwpKSkgKHNldC1tYXRjaC1kYXRhIHNhdmUtbWF0Y2gtZGF0YS1p bnRlcm5hbCAnZXZhcG9yYXRlKSkpIChpZiAoYW5kIHN0YXJ0ICg+PSBzdGFydCB0by1wb3MpKSBu aWwgKHdoaWxlIG5vZGUgKHNldHEgZGF0YSAocHJvZ24gKHByb2duIC4uLikpKSAoaWYgKGFuZCBs ZWZ0cCAocHJvZ24gLi4uKSAob3IgLi4uIC4uLikgKG9yIC4uLiAuLi4pKSAocHJvZ24gKHNldHEg c3RhY2sgLi4uKSAoc2V0cSBub2RlIC4uLikpIChpZiAob3IgLi4uIC4uLikgbmlsIChpZiAuLi4g Li4uIC4uLiAuLi4pKSAoaWYgY29udGludWUtZmxhZyAoc2V0cSBjb250aW51ZS1mbGFnIG5pbCkg KHNldHEgbm9kZSAuLi4pKSkpKSAoaWYgKGFuZCBvcmctZWxlbWVudC0tY2FjaGUtbWFwLXN0YXRp c3RpY3MgKG9yIChub3Qgb3JnLWVsZW1lbnQtLWNhY2hlLW1hcC1zdGF0aXN0aWNzLXRocmVzaG9s ZCkgKD4gKC0gLi4uIHRpbWUpIG9yZy1lbGVtZW50LS1jYWNoZS1tYXAtc3RhdGlzdGljcy10aHJl c2hvbGQpKSkgKHByb2duIChtZXNzYWdlICJNYXBwZWQgb3ZlciBlbGVtZW50cyBpbiAlUy4gJWQv JWQgcHJlZGljYXRlIG1hdGNoZS4uLiIgKGN1cnJlbnQtYnVmZmVyKSBjb3VudC1wcmVkaWNhdGUt Y2FsbHMtbWF0Y2ggKCsgY291bnQtcHJlZGljYXRlLWNhbGxzLW1hdGNoIGNvdW50LXByZWRpY2F0 ZS1jYWxscy1mYWlsKSAoLSAoZmxvYXQtdGltZSkgdGltZSkgcHJlLXByb2Nlc3MtdGltZSBwcmVk aWNhdGUtdGltZSByZS1zZWFyY2gtdGltZSBncmFudWxhcml0eSByZXN0cmljdC1lbGVtZW50cyBu ZXh0LXJlIGZhaWwtcmUgZnJvbS1wb3MgdG8tcG9zIGxpbWl0LWNvdW50IGFmdGVyLWVsZW1lbnQp KSkgKG5yZXZlcnNlIHJlc3VsdCkpKSkKICAobGV0ICh0bXBuZXh0LXN0YXJ0IHRtcHBhcmVudCB0 bXBlbGVtZW50KSAoc2F2ZS1leGN1cnNpb24gKHNhdmUtcmVzdHJpY3Rpb24gKGlmIG5hcnJvdyBu aWwgKHdpZGVuKSkgKG9yZy1lbGVtZW50LWF0LXBvaW50IHRvLXBvcykgKGxldCogKChzdGFydCAo YW5kIGZyb20tcG9zIChwcm9nbiAuLi4gLi4uKSkpIChwcmV2IGFmdGVyLWVsZW1lbnQpIChub2Rl IChpZiAobWVtcSBncmFudWxhcml0eSAuLi4pIChvcmctZWxlbWVudC0taGVhZGxpbmUtY2FjaGUt cm9vdCkgKG9yZy1lbGVtZW50LS1jYWNoZS1yb290KSkpIGRhdGEgKHN0YWNrIChsaXN0IG5pbCkp IChsZWZ0cCB0KSByZXN1bHQgKGxhc3QtbWF0Y2ggdCkgY29udGludWUtZmxhZyAobmV4dC1lbGVt ZW50LXJlIChsZXQqICguLi4pIChjb25kIC4uLiAuLi4gLi4uIC4uLikpKSAobmV4dC1yZSAoaWYg KGFuZCBuZXh0LXJlIC4uLikgbmlsIG5leHQtcmUpKSAoZmFpbC1yZSAoaWYgKGFuZCBmYWlsLXJl IC4uLikgbmlsIGZhaWwtcmUpKSAocmVzdHJpY3QtZWxlbWVudHMgKG9yIHJlc3RyaWN0LWVsZW1l bnRzIChjb25kIC4uLiAuLi4gLi4uIC4uLikpKSAodGltZSAoZmxvYXQtdGltZSkpIChwcmVkaWNh dGUtdGltZSAwKSAocHJlLXByb2Nlc3MtdGltZSAwKSAocmUtc2VhcmNoLXRpbWUgMCkgKGNvdW50 LXByZWRpY2F0ZS1jYWxscy1tYXRjaCAwKSAoY291bnQtcHJlZGljYXRlLWNhbGxzLWZhaWwgMCkg Y2FjaGUtc2l6ZSBiZWZvcmUtdGltZSBtb2RpZmllZC10aWMpIChnb3RvLWNoYXIgKG9yIHN0YXJ0 IChwb2ludC1taW4pKSkgKGxldCAoKHNhdmUtbWF0Y2gtZGF0YS1pbnRlcm5hbCAobWF0Y2gtZGF0 YSkpKSAodW53aW5kLXByb3RlY3QgKHByb2duIChpZiAuLi4gLi4uIC4uLikpIChzZXQtbWF0Y2gt ZGF0YSBzYXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwgJ2V2YXBvcmF0ZSkpKSAoaWYgKGFuZCBzdGFy dCAoPj0gc3RhcnQgdG8tcG9zKSkgbmlsICh3aGlsZSBub2RlIChzZXRxIGRhdGEgKHByb2duIC4u LikpIChpZiAoYW5kIGxlZnRwIC4uLiAuLi4gLi4uKSAocHJvZ24gLi4uIC4uLikgKGlmIC4uLiBu aWwgLi4uKSAoaWYgY29udGludWUtZmxhZyAuLi4gLi4uKSkpKSAoaWYgKGFuZCBvcmctZWxlbWVu dC0tY2FjaGUtbWFwLXN0YXRpc3RpY3MgKG9yIChub3Qgb3JnLWVsZW1lbnQtLWNhY2hlLW1hcC1z dGF0aXN0aWNzLXRocmVzaG9sZCkgKD4gLi4uIG9yZy1lbGVtZW50LS1jYWNoZS1tYXAtc3RhdGlz dGljcy10aHJlc2hvbGQpKSkgKHByb2duIChtZXNzYWdlICJNYXBwZWQgb3ZlciBlbGVtZW50cyBp biAlUy4gJWQvJWQgcHJlZGljYXRlIG1hdGNoZS4uLiIgKGN1cnJlbnQtYnVmZmVyKSBjb3VudC1w cmVkaWNhdGUtY2FsbHMtbWF0Y2ggKCsgY291bnQtcHJlZGljYXRlLWNhbGxzLW1hdGNoIGNvdW50 LXByZWRpY2F0ZS1jYWxscy1mYWlsKSAoLSAuLi4gdGltZSkgcHJlLXByb2Nlc3MtdGltZSBwcmVk aWNhdGUtdGltZSByZS1zZWFyY2gtdGltZSBncmFudWxhcml0eSByZXN0cmljdC1lbGVtZW50cyBu ZXh0LXJlIGZhaWwtcmUgZnJvbS1wb3MgdG8tcG9zIGxpbWl0LWNvdW50IGFmdGVyLWVsZW1lbnQp KSkgKG5yZXZlcnNlIHJlc3VsdCkpKSkpCiAgKHByb2duIChpZiAob3JnLWVsZW1lbnQtLWNhY2hl LWFjdGl2ZS1wKSBuaWwgKGVycm9yICJDYWNoZSBtdXN0IGJlIGFjdGl2ZS4iKSkgKGlmIChtZW1x IGdyYW51bGFyaXR5ICcoaGVhZGxpbmUgaGVhZGxpbmUraW5saW5ldGFzayBncmVhdGVyLWVsZW1l bnQgZWxlbWVudCkpIG5pbCAoZXJyb3IgIlVuc3VwcG9ydGVkIGdyYW51bGFyaXR5OiAlUyIgZ3Jh bnVsYXJpdHkpKSAoaWYgKG1hcmtlcnAgdG8tcG9zKSBuaWwgKGxldCAoKG1rIChtYWtlLW1hcmtl cikpKSAoc2V0LW1hcmtlciBtayB0by1wb3MpIChzZXRxIHRvLXBvcyBtaykpKSAobGV0ICh0bXBu ZXh0LXN0YXJ0IHRtcHBhcmVudCB0bXBlbGVtZW50KSAoc2F2ZS1leGN1cnNpb24gKHNhdmUtcmVz dHJpY3Rpb24gKGlmIG5hcnJvdyBuaWwgKHdpZGVuKSkgKG9yZy1lbGVtZW50LWF0LXBvaW50IHRv LXBvcykgKGxldCogKChzdGFydCAoYW5kIGZyb20tcG9zIC4uLikpIChwcmV2IGFmdGVyLWVsZW1l bnQpIChub2RlIChpZiAuLi4gLi4uIC4uLikpIGRhdGEgKHN0YWNrIChsaXN0IG5pbCkpIChsZWZ0 cCB0KSByZXN1bHQgKGxhc3QtbWF0Y2ggdCkgY29udGludWUtZmxhZyAobmV4dC1lbGVtZW50LXJl IChsZXQqIC4uLiAuLi4pKSAobmV4dC1yZSAoaWYgLi4uIG5pbCBuZXh0LXJlKSkgKGZhaWwtcmUg KGlmIC4uLiBuaWwgZmFpbC1yZSkpIChyZXN0cmljdC1lbGVtZW50cyAob3IgcmVzdHJpY3QtZWxl bWVudHMgLi4uKSkgKHRpbWUgKGZsb2F0LXRpbWUpKSAocHJlZGljYXRlLXRpbWUgMCkgKHByZS1w cm9jZXNzLXRpbWUgMCkgKHJlLXNlYXJjaC10aW1lIDApIChjb3VudC1wcmVkaWNhdGUtY2FsbHMt bWF0Y2ggMCkgKGNvdW50LXByZWRpY2F0ZS1jYWxscy1mYWlsIDApIGNhY2hlLXNpemUgYmVmb3Jl LXRpbWUgbW9kaWZpZWQtdGljKSAoZ290by1jaGFyIChvciBzdGFydCAocG9pbnQtbWluKSkpIChs ZXQgKChzYXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwgLi4uKSkgKHVud2luZC1wcm90ZWN0IChwcm9n biAuLi4pIChzZXQtbWF0Y2gtZGF0YSBzYXZlLW1hdGNoLWRhdGEtaW50ZXJuYWwgLi4uKSkpIChp ZiAoYW5kIHN0YXJ0ICg+PSBzdGFydCB0by1wb3MpKSBuaWwgKHdoaWxlIG5vZGUgKHNldHEgZGF0 YSAuLi4pIChpZiAuLi4gLi4uIC4uLiAuLi4pKSkgKGlmIChhbmQgb3JnLWVsZW1lbnQtLWNhY2hl LW1hcC1zdGF0aXN0aWNzIChvciAuLi4gLi4uKSkgKHByb2duIChtZXNzYWdlICJNYXBwZWQgb3Zl ciBlbGVtZW50cyBpbiAlUy4gJWQvJWQgcHJlZGljYXRlIG1hdGNoZS4uLiIgLi4uIGNvdW50LXBy ZWRpY2F0ZS1jYWxscy1tYXRjaCAuLi4gLi4uIHByZS1wcm9jZXNzLXRpbWUgcHJlZGljYXRlLXRp bWUgcmUtc2VhcmNoLXRpbWUgZ3JhbnVsYXJpdHkgcmVzdHJpY3QtZWxlbWVudHMgbmV4dC1yZSBm YWlsLXJlIGZyb20tcG9zIHRvLXBvcyBsaW1pdC1jb3VudCBhZnRlci1lbGVtZW50KSkpIChucmV2 ZXJzZSByZXN1bHQpKSkpKSkKICAocHJvZ24gKGxldCAoKC0tY2wta2V5cy0tIC0tY2wtcmVzdC0t KSkgKHdoaWxlIC0tY2wta2V5cy0tIChjb25kICgobWVtcSAoY2FyIC0tY2wta2V5cy0tKSAnKDpn cmFudWxhcml0eSA6cmVzdHJpY3QtZWxlbWVudHMgOm5leHQtcmUgOmZhaWwtcmUgOmZyb20tcG9z IDp0by1wb3MgOmFmdGVyLWVsZW1lbnQgOmxpbWl0LWNvdW50IDpuYXJyb3cgOmFsbG93LW90aGVy LWtleXMpKSAoc2V0cSAtLWNsLWtleXMtLSAoY2RyIChjZHIgLS1jbC1rZXlzLS0pKSkpICgoY2Fy IChjZHIgKG1lbXEgLi4uIC0tY2wtcmVzdC0tKSkpIChzZXRxIC0tY2wta2V5cy0tIG5pbCkpICh0 IChlcnJvciAiS2V5d29yZCBhcmd1bWVudCAlcyBub3Qgb25lIG9mICg6Z3JhbnVsYXJpdHkgOnJl c3QuLi4iIChjYXIgLS1jbC1rZXlzLS0pKSkpKSkgKHByb2duIChpZiAob3JnLWVsZW1lbnQtLWNh Y2hlLWFjdGl2ZS1wKSBuaWwgKGVycm9yICJDYWNoZSBtdXN0IGJlIGFjdGl2ZS4iKSkgKGlmICht ZW1xIGdyYW51bGFyaXR5ICcoaGVhZGxpbmUgaGVhZGxpbmUraW5saW5ldGFzayBncmVhdGVyLWVs ZW1lbnQgZWxlbWVudCkpIG5pbCAoZXJyb3IgIlVuc3VwcG9ydGVkIGdyYW51bGFyaXR5OiAlUyIg Z3JhbnVsYXJpdHkpKSAoaWYgKG1hcmtlcnAgdG8tcG9zKSBuaWwgKGxldCAoKG1rIChtYWtlLW1h cmtlcikpKSAoc2V0LW1hcmtlciBtayB0by1wb3MpIChzZXRxIHRvLXBvcyBtaykpKSAobGV0ICh0 bXBuZXh0LXN0YXJ0IHRtcHBhcmVudCB0bXBlbGVtZW50KSAoc2F2ZS1leGN1cnNpb24gKHNhdmUt cmVzdHJpY3Rpb24gKGlmIG5hcnJvdyBuaWwgKHdpZGVuKSkgKG9yZy1lbGVtZW50LWF0LXBvaW50 IHRvLXBvcykgKGxldCogKChzdGFydCAuLi4pIChwcmV2IGFmdGVyLWVsZW1lbnQpIChub2RlIC4u LikgZGF0YSAoc3RhY2sgLi4uKSAobGVmdHAgdCkgcmVzdWx0IChsYXN0LW1hdGNoIHQpIGNvbnRp bnVlLWZsYWcgKG5leHQtZWxlbWVudC1yZSAuLi4pIChuZXh0LXJlIC4uLikgKGZhaWwtcmUgLi4u KSAocmVzdHJpY3QtZWxlbWVudHMgLi4uKSAodGltZSAuLi4pIChwcmVkaWNhdGUtdGltZSAwKSAo cHJlLXByb2Nlc3MtdGltZSAwKSAocmUtc2VhcmNoLXRpbWUgMCkgKGNvdW50LXByZWRpY2F0ZS1j YWxscy1tYXRjaCAwKSAoY291bnQtcHJlZGljYXRlLWNhbGxzLWZhaWwgMCkgY2FjaGUtc2l6ZSBi ZWZvcmUtdGltZSBtb2RpZmllZC10aWMpIChnb3RvLWNoYXIgKG9yIHN0YXJ0IC4uLikpIChsZXQg KC4uLikgKHVud2luZC1wcm90ZWN0IC4uLiAuLi4pKSAoaWYgKGFuZCBzdGFydCAuLi4pIG5pbCAo d2hpbGUgbm9kZSAuLi4gLi4uKSkgKGlmIChhbmQgb3JnLWVsZW1lbnQtLWNhY2hlLW1hcC1zdGF0 aXN0aWNzIC4uLikgKHByb2duIC4uLikpIChucmV2ZXJzZSByZXN1bHQpKSkpKSkpCiAgKGxldCog KChncmFudWxhcml0eSAoY2FyIChjZHIgKG9yIChwbGlzdC1tZW1iZXIgLS1jbC1yZXN0LS0gJzpn cmFudWxhcml0eSkgJyhuaWwgaGVhZGxpbmUraW5saW5ldGFzaykpKSkpIChyZXN0cmljdC1lbGVt ZW50cyAoY2FyIChjZHIgKHBsaXN0LW1lbWJlciAtLWNsLXJlc3QtLSAnOnJlc3RyaWN0LWVsZW1l bnRzKSkpKSAobmV4dC1yZSAoY2FyIChjZHIgKHBsaXN0LW1lbWJlciAtLWNsLXJlc3QtLSAnOm5l eHQtcmUpKSkpIChmYWlsLXJlIChjYXIgKGNkciAocGxpc3QtbWVtYmVyIC0tY2wtcmVzdC0tICc6 ZmFpbC1yZSkpKSkgKGZyb20tcG9zIChjYXIgKGNkciAocGxpc3QtbWVtYmVyIC0tY2wtcmVzdC0t ICc6ZnJvbS1wb3MpKSkpICh0by1wb3MgKGNhciAoY2RyIChvciAocGxpc3QtbWVtYmVyIC0tY2wt cmVzdC0tICc6dG8tcG9zKSAobGlzdCBuaWwgKHBvaW50LW1heC1tYXJrZXIpKSkpKSkgKGFmdGVy LWVsZW1lbnQgKGNhciAoY2RyIChwbGlzdC1tZW1iZXIgLS1jbC1yZXN0LS0gJzphZnRlci1lbGVt ZW50KSkpKSAobGltaXQtY291bnQgKGNhciAoY2RyIChwbGlzdC1tZW1iZXIgLS1jbC1yZXN0LS0g JzpsaW1pdC1jb3VudCkpKSkgKG5hcnJvdyAoY2FyIChjZHIgKHBsaXN0LW1lbWJlciAtLWNsLXJl c3QtLSAnOm5hcnJvdykpKSkpIChwcm9nbiAobGV0ICgoLS1jbC1rZXlzLS0gLS1jbC1yZXN0LS0p KSAod2hpbGUgLS1jbC1rZXlzLS0gKGNvbmQgKChtZW1xIChjYXIgLS1jbC1rZXlzLS0pICcuLi4p IChzZXRxIC0tY2wta2V5cy0tIChjZHIgLi4uKSkpICgoY2FyIChjZHIgLi4uKSkgKHNldHEgLS1j bC1rZXlzLS0gbmlsKSkgKHQgKGVycm9yICJLZXl3b3JkIGFyZ3VtZW50ICVzIG5vdCBvbmUgb2Yg KDpncmFudWxhcml0eSA6cmVzdC4uLiIgKGNhciAtLWNsLWtleXMtLSkpKSkpKSAocHJvZ24gKGlm IChvcmctZWxlbWVudC0tY2FjaGUtYWN0aXZlLXApIG5pbCAoZXJyb3IgIkNhY2hlIG11c3QgYmUg YWN0aXZlLiIpKSAoaWYgKG1lbXEgZ3JhbnVsYXJpdHkgJyhoZWFkbGluZSBoZWFkbGluZStpbmxp bmV0YXNrIGdyZWF0ZXItZWxlbWVudCBlbGVtZW50KSkgbmlsIChlcnJvciAiVW5zdXBwb3J0ZWQg Z3JhbnVsYXJpdHk6ICVTIiBncmFudWxhcml0eSkpIChpZiAobWFya2VycCB0by1wb3MpIG5pbCAo bGV0ICgobWsgKG1ha2UtbWFya2VyKSkpIChzZXQtbWFya2VyIG1rIHRvLXBvcykgKHNldHEgdG8t cG9zIG1rKSkpIChsZXQgKHRtcG5leHQtc3RhcnQgdG1wcGFyZW50IHRtcGVsZW1lbnQpIChzYXZl LWV4Y3Vyc2lvbiAoc2F2ZS1yZXN0cmljdGlvbiAoaWYgbmFycm93IG5pbCAod2lkZW4pKSAob3Jn LWVsZW1lbnQtYXQtcG9pbnQgdG8tcG9zKSAobGV0KiAoLi4uIC4uLiAuLi4gZGF0YSAuLi4gLi4u IHJlc3VsdCAuLi4gY29udGludWUtZmxhZyAuLi4gLi4uIC4uLiAuLi4gLi4uIC4uLiAuLi4gLi4u IC4uLiAuLi4gY2FjaGUtc2l6ZSBiZWZvcmUtdGltZSBtb2RpZmllZC10aWMpIChnb3RvLWNoYXIg Li4uKSAobGV0IC4uLiAuLi4pIChpZiAuLi4gbmlsIC4uLikgKGlmIC4uLiAuLi4pIChucmV2ZXJz ZSByZXN1bHQpKSkpKSkpKQogIG9yZy1lbGVtZW50LWNhY2hlLW1hcCgoY2xvc3VyZSAoKGZhc3Qt cmUgLiAiXlxcKisgIikgKHRzLWRhdGUtcGFpcikgKHRzLWRhdGUtdHlwZSkgKHRzLWRhdGUpIChw cmlvcml0eSkgKGVudHJ5KSAobWFya2VyKSAodG9kbykgKHR4dCkgKGkpIChjYXRlZ29yeSAuICJ0 ZXN0X3N1YnRyZWVfaWNhbF9leHBvcnQiKSAobGV2ZWwgLiAxKSAocnRuMSAuIDApIChydG4gMCkg KGxsYXN0IC4gMCkgKHRhZ3MtYWxpc3QgKDApKSAodGFncy1saXN0KSAodGFncykgKGxzcG9zKSAo cHJvcHMgZmFjZSBkZWZhdWx0IGRvbmUtZmFjZSBvcmctYWdlbmRhLWRvbmUgdW5kb25lLWZhY2Ug ZGVmYXVsdCBtb3VzZS1mYWNlIGhpZ2hsaWdodCBvcmctbm90LWRvbmUtcmVnZXhwICJcXChUT0RP XFwpIiBvcmctdG9kby1yZWdleHAgIlxcKERPTkVcXHxUT0RPXFwpIiBvcmctY29tcGxleC1oZWFk aW5nLXJlZ2V4cCAiXlxcKFxcKitcXClcXCg/OiArXFwoRE9ORVxcfFRPRE9cXClcXCk/XFwoPzog K1xcKFxcWyMuXFxdXFwpXFwpPy4uLiIgaGVscC1lY2hvICJtb3VzZS0yIG9yIFJFVCBqdW1wIHRv IE9yZyBmaWxlIFwifi9zcmMva2hhbGVsL3Rlc3QuLi4iKSAocmUgLiAiXlxcKisgICpcXCg/Olxc KFxcKERPTkVcXHxUT0RPXFwpXFwpIFxcKT8gKlxcKC4qP1xcKVxcKFsgXDExXTpcXC4uLiIpIChz dGFydC1sZXZlbCkgKHRvZG8tb25seSkgKG1hdGNoZXIgLiB0KSAoYWN0aW9uIGNsb3N1cmUgKCht b2RpZmllZC1mbGFnIC4gdCkgKGJlbGwgLiB3YXJuLXVzZXIpIChmaWxlIC4gIi9ob21lL2hhbm5v L3NyYy9raGFsZWwvdGVzdF9zdWJ0cmVlX2ljYWxfZXhwb3J0Lm9yLi4uIikgdCkgbmlsIChsZXQg KChlbnRyeSAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6SUQgZW50cnkpIG5pbCAob3JnLWlkLWdldC1jcmVhdGUpIChzZXRxIG1vZGlmaWVkLWZsYWcg dCkgKGZvcndhcmQtbGluZSkpKSkgb3JnLWFnZW5kYS1hcmNoaXZlcy1tb2RlIG9yZy1lbmQtdGlt ZS13YXMtZ2l2ZW4gb3JnLXRpbWUtd2FzLWdpdmVuIG9yZy1sb2ctbm90ZS1leHRyYSBvcmctbG9n LW5vdGUtcHVycG9zZSBvcmctbG9nLXBvc3QtbWVzc2FnZSBvcmctbGFzdC1pbnNlcnRlZC10aW1l c3RhbXAgb3JnLWxhc3QtY2hhbmdlZC10aW1lc3RhbXAgb3JnLWVudHJ5LXByb3BlcnR5LWluaGVy aXRlZC1mcm9tIG9yZy1ibG9ja2VkLWJ5LWNoZWNrYm94ZXMgb3JnLXN0YXRlIG9yZy1hZ2VuZGEt aGVhZGxpbmUtc25hcHNob3QtYmVmb3JlLXJlcGVhdCBvcmctYWdlbmRhLWJ1ZmZlci1uYW1lIG9y Zy1hZ2VuZGEtc3RhcnQtb24td2Vla2RheSBvcmctYWdlbmRhLWJ1ZmZlci10bXAtbmFtZSBvcmct cHJpb3JpdHktcmVnZXhwIG9yZy1tb2RlLWFiYnJldi10YWJsZSBvcmctbW9kZS1zeW50YXgtdGFi bGUgb3JnLWVsZW1lbnQtY2FjaGUtcGVyc2lzdGVudCBidWZmZXItZmFjZS1tb2RlLWZhY2Ugb3Jn LXRibC1tZW51IG9yZy1vcmctbWVudSBvcmctc3RydWN0LW1lbnUgb3JnLWVudGl0aWVzIG9yZy1s YXN0LXN0YXRlIC4uLikgKGVsKSAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gZWwpKSAoc2V0cSB0b2RvIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dG9kby1rZXl3b3JkIGVs KSBsZXZlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGVsKSBjYXRlZ29yeSAob3JnLWVu dHJ5LWdldC13aXRoLWluaGVyaXRhbmNlICJDQVRFR09SWSIgbmlsIGVsKSB0YWdzLWxpc3QgKG9y Zy1nZXQtdGFncyBlbCkgb3JnLXNjYW5uZXItdGFncyB0YWdzLWxpc3QpIChpZiAoZXEgYWN0aW9u ICdhZ2VuZGEpIChwcm9nbiAoc2V0cSB0cy1kYXRlLXBhaXIgKG9yZy1hZ2VuZGEtZW50cnktZ2V0 LWFnZW5kYS10aW1lc3RhbXAgKHBvaW50KSkgdHMtZGF0ZSAoY2FyIHRzLWRhdGUtcGFpcikgdHMt ZGF0ZS10eXBlIChjZHIgdHMtZGF0ZS1wYWlyKSkpKSAoY2F0Y2ggOnNraXAgKGlmIChhbmQgKGFu ZCAob3IgKG5vdCB0b2RvLW9ubHkpIChtZW1iZXIgdG9kbyBvcmctdG9kby1rZXl3b3Jkcy0xKSkg KGlmIChmdW5jdGlvbnAgbWF0Y2hlcikgKGxldCAuLi4gLi4uKSBtYXRjaGVyKSkgKHByb2duIChp ZiAoZXEgYWN0aW9uIC4uLikgbmlsIChvcmctYWdlbmRhLXNraXAgZWwpKSB0KSAob3IgKG5vdCB0 b2RvLW9ubHkpIChhbmQgKG1lbWJlciB0b2RvIG9yZy10b2RvLWtleXdvcmRzLTEpIChvciAuLi4g Li4uKSkpKSAocHJvZ24gKGNvbmQgKChlcSBhY3Rpb24gLi4uKSAoYW5kIG9yZy1oaWdobGlnaHQt c3BhcnNlLXRyZWUtbWF0Y2hlcyAuLi4gLi4uIC4uLikgKG9yZy1mb2xkLXNob3ctY29udGV4dCAu Li4pKSAoKGVxIGFjdGlvbiAuLi4pIChsZXQqIC4uLiAuLi4gLi4uKSAoZ290by1jaGFyIC4uLikg KHNldHEgbWFya2VyIC4uLikgKG9yZy1hZGQtcHJvcHMgdHh0IHByb3BzIC4uLiBtYXJrZXIgLi4u IG1hcmtlciAuLi4gY2F0ZWdvcnkgLi4uIHRvZG8gLi4uIHRzLWRhdGUgLi4uIHByaW9yaXR5IC4u LiAuLi4pIChzZXRxIHJ0biAuLi4pKSAoKGZ1bmN0aW9ucCBhY3Rpb24pIChzZXRxIG9yZy1tYXAt Y29udGludWUtZnJvbSBuaWwpIChzYXZlLWV4Y3Vyc2lvbiAuLi4gLi4uKSkgKHQgKHVzZXItZXJy b3IgIkludmFsaWQgYWN0aW9uIikpKSAoaWYgb3JnLXRhZ3MtbWF0Y2gtbGlzdC1zdWJsZXZlbHMg bmlsIChnb3RvLWNoYXIgKDEtIC4uLikpKSkpKSAoaWYgb3JnLW1hcC1jb250aW51ZS1mcm9tIChw cm9nbiAoc2V0cSBvcmctZWxlbWVudC1jYWNoZS1tYXAtY29udGludWUtZnJvbSBvcmctbWFwLWNv bnRpbnVlLWZyb20pIChnb3RvLWNoYXIgb3JnLW1hcC1jb250aW51ZS1mcm9tKSkpIG5pbCkgOm5l eHQtcmUgIl5cXCorICIgOmZhaWwtcmUgIl5cXCorICIgOm5hcnJvdyB0KQogIChsZXQgKChmYXN0 LXJlIChjb25jYXQgIl4iIChpZiBzdGFydC1sZXZlbCAoY29uY2F0ICJcXCpcXHsiIChudW1iZXIt dG8tc3RyaW5nIHN0YXJ0LWxldmVsKSAiXFx9ICIpIG9yZy1vdXRsaW5lLXJlZ2V4cCkpKSkgKG9y Zy1lbGVtZW50LWNhY2hlLW1hcCAjJyhsYW1iZGEgKGVsKSAoZ290by1jaGFyIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6YmVnaW4gZWwpKSAoc2V0cSB0b2RvIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 dG9kby1rZXl3b3JkIGVsKSBsZXZlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGVsKSBj YXRlZ29yeSAob3JnLWVudHJ5LWdldC13aXRoLWluaGVyaXRhbmNlICJDQVRFR09SWSIgbmlsIGVs KSB0YWdzLWxpc3QgKG9yZy1nZXQtdGFncyBlbCkgb3JnLXNjYW5uZXItdGFncyB0YWdzLWxpc3Qp IChpZiAoZXEgYWN0aW9uICdhZ2VuZGEpIChwcm9nbiAoc2V0cSB0cy1kYXRlLXBhaXIgKG9yZy1h Z2VuZGEtZW50cnktZ2V0LWFnZW5kYS10aW1lc3RhbXAgLi4uKSB0cy1kYXRlIChjYXIgdHMtZGF0 ZS1wYWlyKSB0cy1kYXRlLXR5cGUgKGNkciB0cy1kYXRlLXBhaXIpKSkpIChjYXRjaCA6c2tpcCAo aWYgKGFuZCAoYW5kIC4uLiAuLi4pIChwcm9nbiAuLi4gdCkgKG9yIC4uLiAuLi4pKSAocHJvZ24g KGNvbmQgLi4uIC4uLiAuLi4gLi4uKSAoaWYgb3JnLXRhZ3MtbWF0Y2gtbGlzdC1zdWJsZXZlbHMg bmlsIC4uLikpKSkgKGlmIG9yZy1tYXAtY29udGludWUtZnJvbSAocHJvZ24gKHNldHEgb3JnLWVs ZW1lbnQtY2FjaGUtbWFwLWNvbnRpbnVlLWZyb20gb3JnLW1hcC1jb250aW51ZS1mcm9tKSAoZ290 by1jaGFyIG9yZy1tYXAtY29udGludWUtZnJvbSkpKSBuaWwpIDpuZXh0LXJlIGZhc3QtcmUgOmZh aWwtcmUgZmFzdC1yZSA6bmFycm93IHQpKQogIChpZiAob3JnLWVsZW1lbnQtLWNhY2hlLWFjdGl2 ZS1wKSAobGV0ICgoZmFzdC1yZSAoY29uY2F0ICJeIiAoaWYgc3RhcnQtbGV2ZWwgKGNvbmNhdCAi XFwqXFx7IiAobnVtYmVyLXRvLXN0cmluZyBzdGFydC1sZXZlbCkgIlxcfSAiKSBvcmctb3V0bGlu ZS1yZWdleHApKSkpIChvcmctZWxlbWVudC1jYWNoZS1tYXAgIycobGFtYmRhIChlbCkgKGdvdG8t Y2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGVsKSkgKHNldHEgdG9kbyAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnRvZG8ta2V5d29yZCBlbCkgbGV2ZWwgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpsZXZlbCBlbCkgY2F0ZWdvcnkgKG9yZy1lbnRyeS1nZXQtd2l0aC1pbmhlcml0YW5jZSAi Q0FURUdPUlkiIG5pbCBlbCkgdGFncy1saXN0IChvcmctZ2V0LXRhZ3MgZWwpIG9yZy1zY2FubmVy LXRhZ3MgdGFncy1saXN0KSAoaWYgKGVxIGFjdGlvbiAnYWdlbmRhKSAocHJvZ24gKHNldHEgdHMt ZGF0ZS1wYWlyIC4uLiB0cy1kYXRlIC4uLiB0cy1kYXRlLXR5cGUgLi4uKSkpIChjYXRjaCA6c2tp cCAoaWYgKGFuZCAuLi4gLi4uIC4uLikgKHByb2duIC4uLiAuLi4pKSkgKGlmIG9yZy1tYXAtY29u dGludWUtZnJvbSAocHJvZ24gKHNldHEgb3JnLWVsZW1lbnQtY2FjaGUtbWFwLWNvbnRpbnVlLWZy b20gb3JnLW1hcC1jb250aW51ZS1mcm9tKSAoZ290by1jaGFyIG9yZy1tYXAtY29udGludWUtZnJv bSkpKSBuaWwpIDpuZXh0LXJlIGZhc3QtcmUgOmZhaWwtcmUgZmFzdC1yZSA6bmFycm93IHQpKSAo d2hpbGUgKGxldCAoY2FzZS1mb2xkLXNlYXJjaCkgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0 KSkgKHNldHEgb3JnLW1hcC1jb250aW51ZS1mcm9tIG5pbCkgKGNhdGNoIDpza2lwIChpZiAoYW5k IChmYm91bmRwICdvcmctaW5saW5ldGFzay1lbmQtcCkgKG9yZy1pbmxpbmV0YXNrLWVuZC1wKSkg KHByb2duICh0aHJvdyA6c2tpcCB0KSkpIChzZXRxIHRvZG8gKGFuZCAobWF0Y2gtZW5kIDEpICht YXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkpIChzZXRxIHRhZ3MgKGFuZCAobWF0Y2gtZW5k IDQpIChvcmctdHJpbSAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNCkpKSkgKGdvdG8tY2hh ciAoc2V0cSBsc3BvcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkgKHNldHEgbGV2ZWwgKG9yZy1yZWR1 Y2VkLWxldmVsIChvcmctb3V0bGluZS1sZXZlbCkpIGNhdGVnb3J5IChvcmctZ2V0LWNhdGVnb3J5 KSkgKGlmIChlcSBhY3Rpb24gJ2FnZW5kYSkgKHByb2duIChzZXRxIHRzLWRhdGUtcGFpciAob3Jn LWFnZW5kYS1lbnRyeS1nZXQtYWdlbmRhLXRpbWVzdGFtcCAocG9pbnQpKSB0cy1kYXRlIChjYXIg dHMtZGF0ZS1wYWlyKSB0cy1kYXRlLXR5cGUgKGNkciB0cy1kYXRlLXBhaXIpKSkpIChzZXRxIGkg bGxhc3QgbGxhc3QgbGV2ZWwpICh3aGlsZSAoPj0gaSBsZXZlbCkgKGlmIChzZXRxIGVudHJ5IChh c3NvYyBpIHRhZ3MtYWxpc3QpKSAocHJvZ24gKHNldHEgdGFncy1hbGlzdCAoZGVsZXRlIGVudHJ5 IHRhZ3MtYWxpc3QpKSkpIChzZXRxIGkgKDEtIGkpKSkgKGlmIHRhZ3MgKHByb2duIChzZXRxIHRh Z3MgKG9yZy1zcGxpdC1zdHJpbmcgdGFncyAiOiIpIHRhZ3MtYWxpc3QgKGNvbnMgKGNvbnMgbGV2 ZWwgdGFncykgdGFncy1hbGlzdCkpKSkgKHNldHEgdGFncy1saXN0IChpZiBvcmctdXNlLXRhZy1p bmhlcml0YW5jZSAoYXBwbHkgJ2FwcGVuZCAobWFwY2FyICdjZHIgKHJldmVyc2UgdGFncy1hbGlz dCkpKSB0YWdzKSBvcmctc2Nhbm5lci10YWdzIHRhZ3MtbGlzdCkgKGlmIG9yZy11c2UtdGFnLWlu aGVyaXRhbmNlIChwcm9nbiAoc2V0Y2RyIChjYXIgdGFncy1hbGlzdCkgKG1hcGNhciAjJy4uLiAo Y2RyIC4uLikpKSkpIChpZiAoYW5kIHRhZ3Mgb3JnLXVzZS10YWctaW5oZXJpdGFuY2UgKG9yIChu b3QgKGVxIHQgb3JnLXVzZS10YWctaW5oZXJpdGFuY2UpKSBvcmctdGFncy1leGNsdWRlLWZyb20t aW5oZXJpdGFuY2UpKSAocHJvZ24gKHNldGNkciAoY2FyIHRhZ3MtYWxpc3QpIChvcmctcmVtb3Zl LXVuaW5oZXJpdGVkLXRhZ3MgKGNkciAuLi4pKSkpKSAoaWYgKGFuZCAoYW5kIChvciAobm90IHRv ZG8tb25seSkgKG1lbWJlciB0b2RvIG9yZy10b2RvLWtleXdvcmRzLTEpKSAoaWYgKGZ1bmN0aW9u cCBtYXRjaGVyKSAobGV0IC4uLiAuLi4pIG1hdGNoZXIpKSAocHJvZ24gKGlmIChlcSBhY3Rpb24g Li4uKSBuaWwgKG9yZy1hZ2VuZGEtc2tpcCkpIHQpIChvciAobm90IHRvZG8tb25seSkgKGFuZCAo bWVtYmVyIHRvZG8gb3JnLXRvZG8ta2V5d29yZHMtMSkgKG9yIC4uLiAuLi4pKSkpIChwcm9nbiAo Y29uZCAoKGVxIGFjdGlvbiAuLi4pIChhbmQgb3JnLWhpZ2hsaWdodC1zcGFyc2UtdHJlZS1tYXRj aGVzIC4uLiAuLi4gLi4uKSAob3JnLWZvbGQtc2hvdy1jb250ZXh0IC4uLikpICgoZXEgYWN0aW9u IC4uLikgKHNldHEgdHh0IC4uLiBwcmlvcml0eSAuLi4pIChnb3RvLWNoYXIgbHNwb3MpIChzZXRx IG1hcmtlciAuLi4pIChvcmctYWRkLXByb3BzIHR4dCBwcm9wcyAuLi4gbWFya2VyIC4uLiBtYXJr ZXIgLi4uIGNhdGVnb3J5IC4uLiB0b2RvIC4uLiB0cy1kYXRlIC4uLiBwcmlvcml0eSAuLi4gLi4u KSAoc2V0cSBydG4gLi4uKSkgKChmdW5jdGlvbnAgYWN0aW9uKSAoc2V0cSBvcmctbWFwLWNvbnRp bnVlLWZyb20gbmlsKSAoc2F2ZS1leGN1cnNpb24gLi4uIC4uLikpICh0ICh1c2VyLWVycm9yICJJ bnZhbGlkIGFjdGlvbiIpKSkgKGlmIG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzIG5pbCAo b3JnLWVuZC1vZi1zdWJ0cmVlIHQpIChiYWNrd2FyZC1jaGFyIDEpKSkpKSAoaWYgb3JnLW1hcC1j b250aW51ZS1mcm9tIChnb3RvLWNoYXIgb3JnLW1hcC1jb250aW51ZS1mcm9tKSAoYW5kICg9IChw b2ludCkgbHNwb3MpIChlbmQtb2YtbGluZSAxKSkpKSkKICAoc2F2ZS1leGN1cnNpb24gKGdvdG8t Y2hhciAocG9pbnQtbWluKSkgKGlmIChlcSBhY3Rpb24gJ3NwYXJzZS10cmVlKSAocHJvZ24gKG9y Zy1jeWNsZS1vdmVydmlldykgKG9yZy1yZW1vdmUtb2NjdXItaGlnaGxpZ2h0cykpKSAoaWYgKG9y Zy1lbGVtZW50LS1jYWNoZS1hY3RpdmUtcCkgKGxldCAoKGZhc3QtcmUgKGNvbmNhdCAiXiIgKGlm IHN0YXJ0LWxldmVsIChjb25jYXQgIlxcKlxceyIgLi4uICJcXH0gIikgb3JnLW91dGxpbmUtcmVn ZXhwKSkpKSAob3JnLWVsZW1lbnQtY2FjaGUtbWFwICMnKGxhbWJkYSAoZWwpIChnb3RvLWNoYXIg KG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBlbCkpIChzZXRxIHRvZG8gKG9yZy1lbGVtZW50 LXByb3BlcnR5IDp0b2RvLWtleXdvcmQgZWwpIGxldmVsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 bGV2ZWwgZWwpIGNhdGVnb3J5IChvcmctZW50cnktZ2V0LXdpdGgtaW5oZXJpdGFuY2UgIkNBVEVH T1JZIiBuaWwgZWwpIHRhZ3MtbGlzdCAob3JnLWdldC10YWdzIGVsKSBvcmctc2Nhbm5lci10YWdz IHRhZ3MtbGlzdCkgKGlmIChlcSBhY3Rpb24gLi4uKSAocHJvZ24gLi4uKSkgKGNhdGNoIDpza2lw IChpZiAuLi4gLi4uKSkgKGlmIG9yZy1tYXAtY29udGludWUtZnJvbSAocHJvZ24gLi4uIC4uLikp IG5pbCkgOm5leHQtcmUgZmFzdC1yZSA6ZmFpbC1yZSBmYXN0LXJlIDpuYXJyb3cgdCkpICh3aGls ZSAobGV0IChjYXNlLWZvbGQtc2VhcmNoKSAocmUtc2VhcmNoLWZvcndhcmQgcmUgbmlsIHQpKSAo c2V0cSBvcmctbWFwLWNvbnRpbnVlLWZyb20gbmlsKSAoY2F0Y2ggOnNraXAgKGlmIChhbmQgKGZi b3VuZHAgJ29yZy1pbmxpbmV0YXNrLWVuZC1wKSAob3JnLWlubGluZXRhc2stZW5kLXApKSAocHJv Z24gKHRocm93IDpza2lwIHQpKSkgKHNldHEgdG9kbyAoYW5kIChtYXRjaC1lbmQgMSkgKG1hdGNo LXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKSkgKHNldHEgdGFncyAoYW5kIChtYXRjaC1lbmQgNCkg KG9yZy10cmltIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA0KSkpKSAoZ290by1jaGFyIChz ZXRxIGxzcG9zIChtYXRjaC1iZWdpbm5pbmcgMCkpKSAoc2V0cSBsZXZlbCAob3JnLXJlZHVjZWQt bGV2ZWwgKG9yZy1vdXRsaW5lLWxldmVsKSkgY2F0ZWdvcnkgKG9yZy1nZXQtY2F0ZWdvcnkpKSAo aWYgKGVxIGFjdGlvbiAnYWdlbmRhKSAocHJvZ24gKHNldHEgdHMtZGF0ZS1wYWlyIChvcmctYWdl bmRhLWVudHJ5LWdldC1hZ2VuZGEtdGltZXN0YW1wIC4uLikgdHMtZGF0ZSAoY2FyIHRzLWRhdGUt cGFpcikgdHMtZGF0ZS10eXBlIChjZHIgdHMtZGF0ZS1wYWlyKSkpKSAoc2V0cSBpIGxsYXN0IGxs YXN0IGxldmVsKSAod2hpbGUgKD49IGkgbGV2ZWwpIChpZiAoc2V0cSBlbnRyeSAoYXNzb2MgaSB0 YWdzLWFsaXN0KSkgKHByb2duIChzZXRxIHRhZ3MtYWxpc3QgLi4uKSkpIChzZXRxIGkgKDEtIGkp KSkgKGlmIHRhZ3MgKHByb2duIChzZXRxIHRhZ3MgKG9yZy1zcGxpdC1zdHJpbmcgdGFncyAiOiIp IHRhZ3MtYWxpc3QgKGNvbnMgLi4uIHRhZ3MtYWxpc3QpKSkpIChzZXRxIHRhZ3MtbGlzdCAoaWYg b3JnLXVzZS10YWctaW5oZXJpdGFuY2UgKGFwcGx5ICdhcHBlbmQgKG1hcGNhciAuLi4gLi4uKSkg dGFncykgb3JnLXNjYW5uZXItdGFncyB0YWdzLWxpc3QpIChpZiBvcmctdXNlLXRhZy1pbmhlcml0 YW5jZSAocHJvZ24gKHNldGNkciAoY2FyIHRhZ3MtYWxpc3QpIChtYXBjYXIgLi4uIC4uLikpKSkg KGlmIChhbmQgdGFncyBvcmctdXNlLXRhZy1pbmhlcml0YW5jZSAob3IgKG5vdCAuLi4pIG9yZy10 YWdzLWV4Y2x1ZGUtZnJvbS1pbmhlcml0YW5jZSkpIChwcm9nbiAoc2V0Y2RyIChjYXIgdGFncy1h bGlzdCkgKG9yZy1yZW1vdmUtdW5pbmhlcml0ZWQtdGFncyAuLi4pKSkpIChpZiAoYW5kIChhbmQg KG9yIC4uLiAuLi4pIChpZiAuLi4gLi4uIG1hdGNoZXIpKSAocHJvZ24gKGlmIC4uLiBuaWwgLi4u KSB0KSAob3IgKG5vdCB0b2RvLW9ubHkpIChhbmQgLi4uIC4uLikpKSAocHJvZ24gKGNvbmQgKC4u LiAuLi4gLi4uKSAoLi4uIC4uLiAuLi4gLi4uIC4uLiAuLi4pICguLi4gLi4uIC4uLikgKHQgLi4u KSkgKGlmIG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzIG5pbCAob3JnLWVuZC1vZi1zdWJ0 cmVlIHQpIChiYWNrd2FyZC1jaGFyIDEpKSkpKSAoaWYgb3JnLW1hcC1jb250aW51ZS1mcm9tIChn b3RvLWNoYXIgb3JnLW1hcC1jb250aW51ZS1mcm9tKSAoYW5kICg9IChwb2ludCkgbHNwb3MpIChl bmQtb2YtbGluZSAxKSkpKSkpCiAgKGxldCogKChyZSAoY29uY2F0ICJeIiAoaWYgc3RhcnQtbGV2 ZWwgKGNvbmNhdCAiXFwqXFx7IiAobnVtYmVyLXRvLXN0cmluZyBzdGFydC1sZXZlbCkgIlxcfSAi KSBvcmctb3V0bGluZS1yZWdleHApICIgKlxcKD86XFwoIiAocmVnZXhwLW9wdCBvcmctdG9kby1r ZXl3b3Jkcy0xIHQpICJcXCkgXFwpPyIgIiAqXFwoLio/XFwpXFwoWyBcMTFdOlxcKD86IiBvcmct dGFnLXJlICI6XFwpK1xcKT9bIFwxMV0qJCIpKSAocHJvcHMgKGxpc3QgJ2ZhY2UgJ2RlZmF1bHQg J2RvbmUtZmFjZSAnb3JnLWFnZW5kYS1kb25lICd1bmRvbmUtZmFjZSAnZGVmYXVsdCAnbW91c2Ut ZmFjZSAnaGlnaGxpZ2h0ICdvcmctbm90LWRvbmUtcmVnZXhwIG9yZy1ub3QtZG9uZS1yZWdleHAg J29yZy10b2RvLXJlZ2V4cCBvcmctdG9kby1yZWdleHAgJ29yZy1jb21wbGV4LWhlYWRpbmctcmVn ZXhwIG9yZy1jb21wbGV4LWhlYWRpbmctcmVnZXhwICdoZWxwLWVjaG8gKGZvcm1hdCAibW91c2Ut MiBvciBSRVQganVtcCB0byBPcmcgZmlsZSAlUyIgKGFiYnJldmlhdGUtZmlsZS1uYW1lIChvciAo YnVmZmVyLWZpbGUtbmFtZSAuLi4pIChidWZmZXItbmFtZSAuLi4pKSkpKSkgKG9yZy1tYXAtY29u dGludWUtZnJvbSBuaWwpIGxzcG9zIHRhZ3MgdGFncy1saXN0ICh0YWdzLWFsaXN0IChsaXN0IChj b25zIDAgb3JnLWZpbGUtdGFncykpKSAobGxhc3QgMCkgcnRuIHJ0bjEgbGV2ZWwgY2F0ZWdvcnkg aSB0eHQgdG9kbyBtYXJrZXIgZW50cnkgcHJpb3JpdHkgdHMtZGF0ZSB0cy1kYXRlLXR5cGUgdHMt ZGF0ZS1wYWlyKSAoaWYgKG9yIChtZW1iZXIgYWN0aW9uICcoYWdlbmRhIHNwYXJzZS10cmVlKSkg KGZ1bmN0aW9ucCBhY3Rpb24pKSBuaWwgKHNldHEgYWN0aW9uIChsaXN0ICdsYW1iZGEgbmlsIGFj dGlvbikpKSAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciAocG9pbnQtbWluKSkgKGlmIChlcSBh Y3Rpb24gJ3NwYXJzZS10cmVlKSAocHJvZ24gKG9yZy1jeWNsZS1vdmVydmlldykgKG9yZy1yZW1v dmUtb2NjdXItaGlnaGxpZ2h0cykpKSAoaWYgKG9yZy1lbGVtZW50LS1jYWNoZS1hY3RpdmUtcCkg KGxldCAoKGZhc3QtcmUgKGNvbmNhdCAiXiIgKGlmIHN0YXJ0LWxldmVsIC4uLiBvcmctb3V0bGlu ZS1yZWdleHApKSkpIChvcmctZWxlbWVudC1jYWNoZS1tYXAgIycobGFtYmRhIChlbCkgKGdvdG8t Y2hhciAuLi4pIChzZXRxIHRvZG8gLi4uIGxldmVsIC4uLiBjYXRlZ29yeSAuLi4gdGFncy1saXN0 IC4uLiBvcmctc2Nhbm5lci10YWdzIHRhZ3MtbGlzdCkgKGlmIC4uLiAuLi4pIChjYXRjaCA6c2tp cCAuLi4pIChpZiBvcmctbWFwLWNvbnRpbnVlLWZyb20gLi4uKSBuaWwpIDpuZXh0LXJlIGZhc3Qt cmUgOmZhaWwtcmUgZmFzdC1yZSA6bmFycm93IHQpKSAod2hpbGUgKGxldCAoY2FzZS1mb2xkLXNl YXJjaCkgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0KSkgKHNldHEgb3JnLW1hcC1jb250aW51 ZS1mcm9tIG5pbCkgKGNhdGNoIDpza2lwIChpZiAoYW5kIChmYm91bmRwIC4uLikgKG9yZy1pbmxp bmV0YXNrLWVuZC1wKSkgKHByb2duICh0aHJvdyA6c2tpcCB0KSkpIChzZXRxIHRvZG8gKGFuZCAo bWF0Y2gtZW5kIDEpIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkpIChzZXRxIHRhZ3Mg KGFuZCAobWF0Y2gtZW5kIDQpIChvcmctdHJpbSAuLi4pKSkgKGdvdG8tY2hhciAoc2V0cSBsc3Bv cyAobWF0Y2gtYmVnaW5uaW5nIDApKSkgKHNldHEgbGV2ZWwgKG9yZy1yZWR1Y2VkLWxldmVsIChv cmctb3V0bGluZS1sZXZlbCkpIGNhdGVnb3J5IChvcmctZ2V0LWNhdGVnb3J5KSkgKGlmIChlcSBh Y3Rpb24gJ2FnZW5kYSkgKHByb2duIChzZXRxIHRzLWRhdGUtcGFpciAuLi4gdHMtZGF0ZSAuLi4g dHMtZGF0ZS10eXBlIC4uLikpKSAoc2V0cSBpIGxsYXN0IGxsYXN0IGxldmVsKSAod2hpbGUgKD49 IGkgbGV2ZWwpIChpZiAoc2V0cSBlbnRyeSAuLi4pIChwcm9nbiAuLi4pKSAoc2V0cSBpICgxLSBp KSkpIChpZiB0YWdzIChwcm9nbiAoc2V0cSB0YWdzIC4uLiB0YWdzLWFsaXN0IC4uLikpKSAoc2V0 cSB0YWdzLWxpc3QgKGlmIG9yZy11c2UtdGFnLWluaGVyaXRhbmNlIChhcHBseSAuLi4gLi4uKSB0 YWdzKSBvcmctc2Nhbm5lci10YWdzIHRhZ3MtbGlzdCkgKGlmIG9yZy11c2UtdGFnLWluaGVyaXRh bmNlIChwcm9nbiAoc2V0Y2RyIC4uLiAuLi4pKSkgKGlmIChhbmQgdGFncyBvcmctdXNlLXRhZy1p bmhlcml0YW5jZSAob3IgLi4uIG9yZy10YWdzLWV4Y2x1ZGUtZnJvbS1pbmhlcml0YW5jZSkpIChw cm9nbiAoc2V0Y2RyIC4uLiAuLi4pKSkgKGlmIChhbmQgKGFuZCAuLi4gLi4uKSAocHJvZ24gLi4u IHQpIChvciAuLi4gLi4uKSkgKHByb2duIChjb25kIC4uLiAuLi4gLi4uIC4uLikgKGlmIG9yZy10 YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzIG5pbCAuLi4gLi4uKSkpKSAoaWYgb3JnLW1hcC1jb250 aW51ZS1mcm9tIChnb3RvLWNoYXIgb3JnLW1hcC1jb250aW51ZS1mcm9tKSAoYW5kICg9IChwb2lu dCkgbHNwb3MpIChlbmQtb2YtbGluZSAxKSkpKSkpIChpZiAoYW5kIChlcSBhY3Rpb24gJ3NwYXJz ZS10cmVlKSAobm90IG9yZy1zcGFyc2UtdHJlZS1vcGVuLWFyY2hpdmVkLXRyZWVzKSkgKHByb2du IChvcmctZm9sZC1oaWRlLWFyY2hpdmVkLXN1YnRyZWVzIChwb2ludC1taW4pIChwb2ludC1tYXgp KSkpIChucmV2ZXJzZSBydG4pKQogIG9yZy1zY2FuLXRhZ3MoKGNsb3N1cmUgKChtb2RpZmllZC1m bGFnIC4gdCkgKGJlbGwgLiB3YXJuLXVzZXIpIChmaWxlIC4gIi9ob21lL2hhbm5vL3NyYy9raGFs ZWwvdGVzdF9zdWJ0cmVlX2ljYWxfZXhwb3J0Lm9yLi4uIikgdCkgbmlsIChsZXQgKChlbnRyeSAo b3JnLWVsZW1lbnQtYXQtcG9pbnQpKSkgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6SUQgZW50 cnkpIG5pbCAob3JnLWlkLWdldC1jcmVhdGUpIChzZXRxIG1vZGlmaWVkLWZsYWcgdCkgKGZvcndh cmQtbGluZSkpKSkgdCBuaWwgbmlsKQogIChzZXRxIHJlcyAob3JnLXNjYW4tdGFncyBmdW5jIG1h dGNoZXIgb3JnLS1tYXRjaGVyLXRhZ3MtdG9kby1vbmx5IHN0YXJ0LWxldmVsKSkKICAocHJvZ24g KGlmIGJ1ZmZlci1maWxlLW5hbWUgKHByb2duIChvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVycyAo YW5kIGJ1ZmZlci1maWxlLW5hbWUgKGxpc3QgYnVmZmVyLWZpbGUtbmFtZSkpKSkpIChzZXRxIHJl cyAob3JnLXNjYW4tdGFncyBmdW5jIG1hdGNoZXIgb3JnLS1tYXRjaGVyLXRhZ3MtdG9kby1vbmx5 IHN0YXJ0LWxldmVsKSkpCiAgKGlmIChub3Qgc2NvcGUpIChwcm9nbiAoaWYgYnVmZmVyLWZpbGUt bmFtZSAocHJvZ24gKG9yZy1hZ2VuZGEtcHJlcGFyZS1idWZmZXJzIChhbmQgYnVmZmVyLWZpbGUt bmFtZSAobGlzdCBidWZmZXItZmlsZS1uYW1lKSkpKSkgKHNldHEgcmVzIChvcmctc2Nhbi10YWdz IGZ1bmMgbWF0Y2hlciBvcmctLW1hdGNoZXItdGFncy10b2RvLW9ubHkgc3RhcnQtbGV2ZWwpKSkg KGNvbmQgKChhbmQgc2NvcGUgKGxpc3RwIHNjb3BlKSAoc3ltYm9scCAoY2FyIHNjb3BlKSkpIChz ZXRxIHNjb3BlIChldmFsIHNjb3BlIHQpKSkgKChlcSBzY29wZSAnYWdlbmRhKSAoc2V0cSBzY29w ZSAob3JnLWFnZW5kYS1maWxlcyB0KSkpICgoZXEgc2NvcGUgJ2FnZW5kYS13aXRoLWFyY2hpdmVz KSAoc2V0cSBzY29wZSAob3JnLWFnZW5kYS1maWxlcyB0KSkgKHNldHEgc2NvcGUgKG9yZy1hZGQt YXJjaGl2ZS1maWxlcyBzY29wZSkpKSAoKGVxIHNjb3BlICdmaWxlKSAoc2V0cSBzY29wZSAoYW5k IGJ1ZmZlci1maWxlLW5hbWUgKGxpc3QgYnVmZmVyLWZpbGUtbmFtZSkpKSkgKChlcSBzY29wZSAn ZmlsZS13aXRoLWFyY2hpdmVzKSAoc2V0cSBzY29wZSAob3JnLWFkZC1hcmNoaXZlLWZpbGVzIChs aXN0IChidWZmZXItZmlsZS1uYW1lKSkpKSkpIChvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVycyBz Y29wZSkgKGxldCAoKC0tZG9saXN0LXRhaWwtLSBzY29wZSkpICh3aGlsZSAtLWRvbGlzdC10YWls LS0gKGxldCAoKGZpbGUgKGNhciAtLWRvbGlzdC10YWlsLS0pKSkgKHNhdmUtY3VycmVudC1idWZm ZXIgKHNldC1idWZmZXIgKG9yZy1maW5kLWJhc2UtYnVmZmVyLXZpc2l0aW5nIGZpbGUpKSAoc2F2 ZS1leGN1cnNpb24gKHNhdmUtcmVzdHJpY3Rpb24gKHdpZGVuKSAoZ290by1jaGFyIC4uLikgKHNl dHEgcmVzIC4uLikpKSkgKHNldHEgLS1kb2xpc3QtdGFpbC0tIChjZHIgLS1kb2xpc3QtdGFpbC0t KSkpKSkpCiAgKHNhdmUtcmVzdHJpY3Rpb24gKGNvbmQgKChlcSBzY29wZSAndHJlZSkgKG9yZy1i YWNrLXRvLWhlYWRpbmcgdCkgKG9yZy1uYXJyb3ctdG8tc3VidHJlZSkgKHNldHEgc2NvcGUgbmls KSkgKChhbmQgKG9yIChlcSBzY29wZSAncmVnaW9uKSAoZXEgc2NvcGUgJ3JlZ2lvbi1zdGFydC1s ZXZlbCkpIChvcmctcmVnaW9uLWFjdGl2ZS1wKSkgKGlmIHN0YXJ0LWxldmVsIChwcm9nbiAoc2F2 ZS1leGN1cnNpb24gKGdvdG8tY2hhciAocmVnaW9uLWJlZ2lubmluZykpIChpZiAob3JnLWF0LWhl YWRpbmctcCkgbmlsIChvdXRsaW5lLW5leHQtaGVhZGluZykpIChzZXRxIHN0YXJ0LWxldmVsIChv cmctY3VycmVudC1sZXZlbCkpKSkpIChuYXJyb3ctdG8tcmVnaW9uIChyZWdpb24tYmVnaW5uaW5n KSAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciAocmVnaW9uLWVuZCkpIChpZiAoYW5kIChib2xw KSAob3JnLWF0LWhlYWRpbmctcCkpIG5pbCAob3V0bGluZS1uZXh0LWhlYWRpbmcpKSAocG9pbnQp KSkgKHNldHEgc2NvcGUgbmlsKSkpIChpZiAobm90IHNjb3BlKSAocHJvZ24gKGlmIGJ1ZmZlci1m aWxlLW5hbWUgKHByb2duIChvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVycyAoYW5kIGJ1ZmZlci1m aWxlLW5hbWUgKGxpc3QgYnVmZmVyLWZpbGUtbmFtZSkpKSkpIChzZXRxIHJlcyAob3JnLXNjYW4t dGFncyBmdW5jIG1hdGNoZXIgb3JnLS1tYXRjaGVyLXRhZ3MtdG9kby1vbmx5IHN0YXJ0LWxldmVs KSkpIChjb25kICgoYW5kIHNjb3BlIChsaXN0cCBzY29wZSkgKHN5bWJvbHAgKGNhciBzY29wZSkp KSAoc2V0cSBzY29wZSAoZXZhbCBzY29wZSB0KSkpICgoZXEgc2NvcGUgJ2FnZW5kYSkgKHNldHEg c2NvcGUgKG9yZy1hZ2VuZGEtZmlsZXMgdCkpKSAoKGVxIHNjb3BlICdhZ2VuZGEtd2l0aC1hcmNo aXZlcykgKHNldHEgc2NvcGUgKG9yZy1hZ2VuZGEtZmlsZXMgdCkpIChzZXRxIHNjb3BlIChvcmct YWRkLWFyY2hpdmUtZmlsZXMgc2NvcGUpKSkgKChlcSBzY29wZSAnZmlsZSkgKHNldHEgc2NvcGUg KGFuZCBidWZmZXItZmlsZS1uYW1lIChsaXN0IGJ1ZmZlci1maWxlLW5hbWUpKSkpICgoZXEgc2Nv cGUgJ2ZpbGUtd2l0aC1hcmNoaXZlcykgKHNldHEgc2NvcGUgKG9yZy1hZGQtYXJjaGl2ZS1maWxl cyAobGlzdCAoYnVmZmVyLWZpbGUtbmFtZSkpKSkpKSAob3JnLWFnZW5kYS1wcmVwYXJlLWJ1ZmZl cnMgc2NvcGUpIChsZXQgKCgtLWRvbGlzdC10YWlsLS0gc2NvcGUpKSAod2hpbGUgLS1kb2xpc3Qt dGFpbC0tIChsZXQgKChmaWxlIChjYXIgLS1kb2xpc3QtdGFpbC0tKSkpIChzYXZlLWN1cnJlbnQt YnVmZmVyIChzZXQtYnVmZmVyIChvcmctZmluZC1iYXNlLWJ1ZmZlci12aXNpdGluZyBmaWxlKSkg KHNhdmUtZXhjdXJzaW9uIChzYXZlLXJlc3RyaWN0aW9uIC4uLiAuLi4gLi4uKSkpIChzZXRxIC0t ZG9saXN0LXRhaWwtLSAoY2RyIC0tZG9saXN0LXRhaWwtLSkpKSkpKSkKICAoc2F2ZS1leGN1cnNp b24gKHNhdmUtcmVzdHJpY3Rpb24gKGNvbmQgKChlcSBzY29wZSAndHJlZSkgKG9yZy1iYWNrLXRv LWhlYWRpbmcgdCkgKG9yZy1uYXJyb3ctdG8tc3VidHJlZSkgKHNldHEgc2NvcGUgbmlsKSkgKChh bmQgKG9yIChlcSBzY29wZSAncmVnaW9uKSAoZXEgc2NvcGUgJ3JlZ2lvbi1zdGFydC1sZXZlbCkp IChvcmctcmVnaW9uLWFjdGl2ZS1wKSkgKGlmIHN0YXJ0LWxldmVsIChwcm9nbiAoc2F2ZS1leGN1 cnNpb24gKGdvdG8tY2hhciAuLi4pIChpZiAuLi4gbmlsIC4uLikgKHNldHEgc3RhcnQtbGV2ZWwg Li4uKSkpKSAobmFycm93LXRvLXJlZ2lvbiAocmVnaW9uLWJlZ2lubmluZykgKHNhdmUtZXhjdXJz aW9uIChnb3RvLWNoYXIgKHJlZ2lvbi1lbmQpKSAoaWYgKGFuZCAuLi4gLi4uKSBuaWwgKG91dGxp bmUtbmV4dC1oZWFkaW5nKSkgKHBvaW50KSkpIChzZXRxIHNjb3BlIG5pbCkpKSAoaWYgKG5vdCBz Y29wZSkgKHByb2duIChpZiBidWZmZXItZmlsZS1uYW1lIChwcm9nbiAob3JnLWFnZW5kYS1wcmVw YXJlLWJ1ZmZlcnMgKGFuZCBidWZmZXItZmlsZS1uYW1lIC4uLikpKSkgKHNldHEgcmVzIChvcmct c2Nhbi10YWdzIGZ1bmMgbWF0Y2hlciBvcmctLW1hdGNoZXItdGFncy10b2RvLW9ubHkgc3RhcnQt bGV2ZWwpKSkgKGNvbmQgKChhbmQgc2NvcGUgKGxpc3RwIHNjb3BlKSAoc3ltYm9scCAoY2FyIHNj b3BlKSkpIChzZXRxIHNjb3BlIChldmFsIHNjb3BlIHQpKSkgKChlcSBzY29wZSAnYWdlbmRhKSAo c2V0cSBzY29wZSAob3JnLWFnZW5kYS1maWxlcyB0KSkpICgoZXEgc2NvcGUgJ2FnZW5kYS13aXRo LWFyY2hpdmVzKSAoc2V0cSBzY29wZSAob3JnLWFnZW5kYS1maWxlcyB0KSkgKHNldHEgc2NvcGUg KG9yZy1hZGQtYXJjaGl2ZS1maWxlcyBzY29wZSkpKSAoKGVxIHNjb3BlICdmaWxlKSAoc2V0cSBz Y29wZSAoYW5kIGJ1ZmZlci1maWxlLW5hbWUgKGxpc3QgYnVmZmVyLWZpbGUtbmFtZSkpKSkgKChl cSBzY29wZSAnZmlsZS13aXRoLWFyY2hpdmVzKSAoc2V0cSBzY29wZSAob3JnLWFkZC1hcmNoaXZl LWZpbGVzIChsaXN0IC4uLikpKSkpIChvcmctYWdlbmRhLXByZXBhcmUtYnVmZmVycyBzY29wZSkg KGxldCAoKC0tZG9saXN0LXRhaWwtLSBzY29wZSkpICh3aGlsZSAtLWRvbGlzdC10YWlsLS0gKGxl dCAoKGZpbGUgLi4uKSkgKHNhdmUtY3VycmVudC1idWZmZXIgKHNldC1idWZmZXIgLi4uKSAoc2F2 ZS1leGN1cnNpb24gLi4uKSkgKHNldHEgLS1kb2xpc3QtdGFpbC0tIChjZHIgLS1kb2xpc3QtdGFp bC0tKSkpKSkpKSkKICAobGV0KiAoKG9yZy1hZ2VuZGEtYXJjaGl2ZXMtbW9kZSBuaWwpIChvcmct YWdlbmRhLXNraXAtYXJjaGl2ZWQtdHJlZXMgKG1lbXEgJ2FyY2hpdmUgc2tpcCkpIChvcmctYWdl bmRhLXNraXAtY29tbWVudC10cmVlcyAobWVtcSAnY29tbWVudCBza2lwKSkgKG9yZy1hZ2VuZGEt c2tpcC1mdW5jdGlvbiAoY2FyIChvcmctZGVsZXRlLWFsbCAnKGNvbW1lbnQgYXJjaGl2ZSkgc2tp cCkpKSAob3JnLXRhZ3MtbWF0Y2gtbGlzdC1zdWJsZXZlbHMgdCkgKHN0YXJ0LWxldmVsIChlcSBz Y29wZSAncmVnaW9uLXN0YXJ0LWxldmVsKSkgbWF0Y2hlciByZXMgb3JnLXRvZG8ta2V5d29yZHMt Zm9yLWFnZW5kYSBvcmctZG9uZS1rZXl3b3Jkcy1mb3ItYWdlbmRhIG9yZy10b2RvLWtleXdvcmQt YWxpc3QtZm9yLWFnZW5kYSBvcmctdGFnLWFsaXN0LWZvci1hZ2VuZGEgb3JnLS1tYXRjaGVyLXRh Z3MtdG9kby1vbmx5KSAoY29uZCAoKGVxIG1hdGNoIHQpIChzZXRxIG1hdGNoZXIgdCkpICgoZXEg bWF0Y2ggbmlsKSAoc2V0cSBtYXRjaGVyIHQpKSAodCAoc2V0cSBtYXRjaGVyIChpZiBtYXRjaCAo Y2RyIChvcmctbWFrZS10YWdzLW1hdGNoZXIgbWF0Y2gpKSB0KSkpKSAoc2F2ZS1leGN1cnNpb24g KHNhdmUtcmVzdHJpY3Rpb24gKGNvbmQgKChlcSBzY29wZSAndHJlZSkgKG9yZy1iYWNrLXRvLWhl YWRpbmcgdCkgKG9yZy1uYXJyb3ctdG8tc3VidHJlZSkgKHNldHEgc2NvcGUgbmlsKSkgKChhbmQg KG9yIChlcSBzY29wZSAuLi4pIChlcSBzY29wZSAuLi4pKSAob3JnLXJlZ2lvbi1hY3RpdmUtcCkp IChpZiBzdGFydC1sZXZlbCAocHJvZ24gKHNhdmUtZXhjdXJzaW9uIC4uLiAuLi4gLi4uKSkpIChu YXJyb3ctdG8tcmVnaW9uIChyZWdpb24tYmVnaW5uaW5nKSAoc2F2ZS1leGN1cnNpb24gKGdvdG8t Y2hhciAuLi4pIChpZiAuLi4gbmlsIC4uLikgKHBvaW50KSkpIChzZXRxIHNjb3BlIG5pbCkpKSAo aWYgKG5vdCBzY29wZSkgKHByb2duIChpZiBidWZmZXItZmlsZS1uYW1lIChwcm9nbiAob3JnLWFn ZW5kYS1wcmVwYXJlLWJ1ZmZlcnMgLi4uKSkpIChzZXRxIHJlcyAob3JnLXNjYW4tdGFncyBmdW5j IG1hdGNoZXIgb3JnLS1tYXRjaGVyLXRhZ3MtdG9kby1vbmx5IHN0YXJ0LWxldmVsKSkpIChjb25k ICgoYW5kIHNjb3BlIChsaXN0cCBzY29wZSkgKHN5bWJvbHAgLi4uKSkgKHNldHEgc2NvcGUgKGV2 YWwgc2NvcGUgdCkpKSAoKGVxIHNjb3BlICdhZ2VuZGEpIChzZXRxIHNjb3BlIChvcmctYWdlbmRh LWZpbGVzIHQpKSkgKChlcSBzY29wZSAnYWdlbmRhLXdpdGgtYXJjaGl2ZXMpIChzZXRxIHNjb3Bl IChvcmctYWdlbmRhLWZpbGVzIHQpKSAoc2V0cSBzY29wZSAob3JnLWFkZC1hcmNoaXZlLWZpbGVz IHNjb3BlKSkpICgoZXEgc2NvcGUgJ2ZpbGUpIChzZXRxIHNjb3BlIChhbmQgYnVmZmVyLWZpbGUt bmFtZSAuLi4pKSkgKChlcSBzY29wZSAnZmlsZS13aXRoLWFyY2hpdmVzKSAoc2V0cSBzY29wZSAo b3JnLWFkZC1hcmNoaXZlLWZpbGVzIC4uLikpKSkgKG9yZy1hZ2VuZGEtcHJlcGFyZS1idWZmZXJz IHNjb3BlKSAobGV0ICgoLS1kb2xpc3QtdGFpbC0tIHNjb3BlKSkgKHdoaWxlIC0tZG9saXN0LXRh aWwtLSAobGV0ICguLi4pIChzYXZlLWN1cnJlbnQtYnVmZmVyIC4uLiAuLi4pIChzZXRxIC0tZG9s aXN0LXRhaWwtLSAuLi4pKSkpKSkpIHJlcykKICAoaWYgKGFuZCAob3IgKGVxIHNjb3BlICdyZWdp b24pIChlcSBzY29wZSAncmVnaW9uLXN0YXJ0LWxldmVsKSkgKG5vdCAob3JnLXJlZ2lvbi1hY3Rp dmUtcCkpKSBuaWwgKGxldCogKChvcmctYWdlbmRhLWFyY2hpdmVzLW1vZGUgbmlsKSAob3JnLWFn ZW5kYS1za2lwLWFyY2hpdmVkLXRyZWVzIChtZW1xICdhcmNoaXZlIHNraXApKSAob3JnLWFnZW5k YS1za2lwLWNvbW1lbnQtdHJlZXMgKG1lbXEgJ2NvbW1lbnQgc2tpcCkpIChvcmctYWdlbmRhLXNr aXAtZnVuY3Rpb24gKGNhciAob3JnLWRlbGV0ZS1hbGwgJyhjb21tZW50IGFyY2hpdmUpIHNraXAp KSkgKG9yZy10YWdzLW1hdGNoLWxpc3Qtc3VibGV2ZWxzIHQpIChzdGFydC1sZXZlbCAoZXEgc2Nv cGUgJ3JlZ2lvbi1zdGFydC1sZXZlbCkpIG1hdGNoZXIgcmVzIG9yZy10b2RvLWtleXdvcmRzLWZv ci1hZ2VuZGEgb3JnLWRvbmUta2V5d29yZHMtZm9yLWFnZW5kYSBvcmctdG9kby1rZXl3b3JkLWFs aXN0LWZvci1hZ2VuZGEgb3JnLXRhZy1hbGlzdC1mb3ItYWdlbmRhIG9yZy0tbWF0Y2hlci10YWdz LXRvZG8tb25seSkgKGNvbmQgKChlcSBtYXRjaCB0KSAoc2V0cSBtYXRjaGVyIHQpKSAoKGVxIG1h dGNoIG5pbCkgKHNldHEgbWF0Y2hlciB0KSkgKHQgKHNldHEgbWF0Y2hlciAoaWYgbWF0Y2ggKGNk ciAob3JnLW1ha2UtdGFncy1tYXRjaGVyIG1hdGNoKSkgdCkpKSkgKHNhdmUtZXhjdXJzaW9uIChz YXZlLXJlc3RyaWN0aW9uIChjb25kICgoZXEgc2NvcGUgJ3RyZWUpIChvcmctYmFjay10by1oZWFk aW5nIHQpIChvcmctbmFycm93LXRvLXN1YnRyZWUpIChzZXRxIHNjb3BlIG5pbCkpICgoYW5kIChv ciAuLi4gLi4uKSAob3JnLXJlZ2lvbi1hY3RpdmUtcCkpIChpZiBzdGFydC1sZXZlbCAocHJvZ24g Li4uKSkgKG5hcnJvdy10by1yZWdpb24gKHJlZ2lvbi1iZWdpbm5pbmcpIChzYXZlLWV4Y3Vyc2lv biAuLi4gLi4uIC4uLikpIChzZXRxIHNjb3BlIG5pbCkpKSAoaWYgKG5vdCBzY29wZSkgKHByb2du IChpZiBidWZmZXItZmlsZS1uYW1lIChwcm9nbiAuLi4pKSAoc2V0cSByZXMgKG9yZy1zY2FuLXRh Z3MgZnVuYyBtYXRjaGVyIG9yZy0tbWF0Y2hlci10YWdzLXRvZG8tb25seSBzdGFydC1sZXZlbCkp KSAoY29uZCAoKGFuZCBzY29wZSAuLi4gLi4uKSAoc2V0cSBzY29wZSAuLi4pKSAoKGVxIHNjb3Bl IC4uLikgKHNldHEgc2NvcGUgLi4uKSkgKChlcSBzY29wZSAuLi4pIChzZXRxIHNjb3BlIC4uLikg KHNldHEgc2NvcGUgLi4uKSkgKChlcSBzY29wZSAuLi4pIChzZXRxIHNjb3BlIC4uLikpICgoZXEg c2NvcGUgLi4uKSAoc2V0cSBzY29wZSAuLi4pKSkgKG9yZy1hZ2VuZGEtcHJlcGFyZS1idWZmZXJz IHNjb3BlKSAobGV0ICgoLS1kb2xpc3QtdGFpbC0tIHNjb3BlKSkgKHdoaWxlIC0tZG9saXN0LXRh aWwtLSAobGV0IC4uLiAuLi4gLi4uKSkpKSkpIHJlcykpCiAgb3JnLW1hcC1lbnRyaWVzKChjbG9z dXJlICgobW9kaWZpZWQtZmxhZyAuIHQpIChiZWxsIC4gd2Fybi11c2VyKSAoZmlsZSAuICIvaG9t ZS9oYW5uby9zcmMva2hhbGVsL3Rlc3Rfc3VidHJlZV9pY2FsX2V4cG9ydC5vci4uLiIpIHQpIG5p bCAobGV0ICgoZW50cnkgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpIChpZiAob3JnLWVsZW1lbnQt cHJvcGVydHkgOklEIGVudHJ5KSBuaWwgKG9yZy1pZC1nZXQtY3JlYXRlKSAoc2V0cSBtb2RpZmll ZC1mbGFnIHQpIChmb3J3YXJkLWxpbmUpKSkpIG5pbCBuaWwgY29tbWVudCkKICAobGV0IChtb2Rp ZmllZC1mbGFnKSAob3JnLW1hcC1lbnRyaWVzICMnKGxhbWJkYSBuaWwgKGxldCAoKGVudHJ5IChv cmctZWxlbWVudC1hdC1wb2ludCkpKSAoaWYgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpJRCBlbnRy eSkgbmlsIChvcmctaWQtZ2V0LWNyZWF0ZSkgKHNldHEgbW9kaWZpZWQtZmxhZyB0KSAoZm9yd2Fy ZC1saW5lKSkpKSBuaWwgbmlsICdjb21tZW50KSAoaWYgKGFuZCBiZWxsIG1vZGlmaWVkLWZsYWcp IChwcm9nbiAobWVzc2FnZSAiSUQgcHJvcGVydGllcyBjcmVhdGVkIGluIGZpbGUgXCIlc1wiIiBm aWxlKSAoc2l0LWZvciAyKSkpKQogIG9yZy1pY2FsZW5kYXItY3JlYXRlLXVpZCgiL2hvbWUvaGFu bm8vc3JjL2toYWxlbC90ZXN0X3N1YnRyZWVfaWNhbF9leHBvcnQub3IuLi4iIHdhcm4tdXNlcikK ICAocHJvZ24gKG9yZy1pY2FsZW5kYXItY3JlYXRlLXVpZCBmaWxlICd3YXJuLXVzZXIpKQogIChp ZiAoYW5kIGZpbGUgb3JnLWljYWxlbmRhci1zdG9yZS1VSUQpIChwcm9nbiAob3JnLWljYWxlbmRh ci1jcmVhdGUtdWlkIGZpbGUgJ3dhcm4tdXNlcikpKQogIChsZXQgKChmaWxlIChidWZmZXItZmls ZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSkpIChpZiAoYW5kIGZpbGUgb3JnLWljYWxlbmRh ci1zdG9yZS1VSUQpIChwcm9nbiAob3JnLWljYWxlbmRhci1jcmVhdGUtdWlkIGZpbGUgJ3dhcm4t dXNlcikpKSkKICBvcmctaWNhbGVuZGFyLWV4cG9ydC10by1pY3MoKQogIGZ1bmNhbGwtaW50ZXJh Y3RpdmVseShvcmctaWNhbGVuZGFyLWV4cG9ydC10by1pY3MpCiAgY29tbWFuZC1leGVjdXRlKG9y Zy1pY2FsZW5kYXItZXhwb3J0LXRvLWljcyByZWNvcmQpCiAgZXhlY3V0ZS1leHRlbmRlZC1jb21t YW5kKG5pbCAib3JnLWljYWxlbmRhci1leHBvcnQtdG8taWNzIiAib3JnLWljYWxlbmRhci1leHBv cnQtdG8iKQogIGZ1bmNhbGwtaW50ZXJhY3RpdmVseShleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQg bmlsICJvcmctaWNhbGVuZGFyLWV4cG9ydC10by1pY3MiICJvcmctaWNhbGVuZGFyLWV4cG9ydC10 byIpCiAgY29tbWFuZC1leGVjdXRlKGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZCkKIytlbmRfZXhh bXBsZQo= --=-=-=--