<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>5975</bug_id>
          
          <creation_ts>2005-12-06 04:26:12 -0800</creation_ts>
          <short_desc>WebCore needs to use KDOM-like DOM binding autogeneration</short_desc>
          <delta_ts>2006-01-25 13:55:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>6737</dependson>
          <blocked>4249</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25625</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-06 04:26:12 -0800</bug_when>
    <thetext>WebCore needs to use KDOM-like DOM binding autogeneration

This is required to make KSVG DOM bindings work again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26362</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-22 02:34:23 -0800</bug_when>
    <thetext>Anders is actually working on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29627</commentid>
    <comment_count>2</comment_count>
      <attachid>5892</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-23 15:40:36 -0800</bug_when>
    <thetext>Created attachment 5892
First cut

Here&apos;s a first cut. I&apos;ve never done anything serious in Perl before so there are probably things which can be done much better...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29650</commentid>
    <comment_count>3</comment_count>
      <attachid>5892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 19:29:37 -0800</bug_when>
    <thetext>Comment on attachment 5892
First cut

Two thoughts:

   1) I think the .idl files should probably go right alongside the actual source files rather than in the bindings directories.
    2) I&apos;d much prefer a solution that puts the files into the DerivedSources directory, even if we compile all the bindings in one big include file at once.

But this is a great first step. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29733</commentid>
    <comment_count>4</comment_count>
      <attachid>5923</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-24 12:53:56 -0800</bug_when>
    <thetext>Created attachment 5923
Address comments

Here&apos;s a new patch that addresses both comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29737</commentid>
    <comment_count>5</comment_count>
      <attachid>5923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-24 13:06:16 -0800</bug_when>
    <thetext>Comment on attachment 5923
Address comments

Don&apos;t forget to put copyright and license information in the patch.

I&apos;m not clear on why we need to use /usr/bin/env to invoke perl.

JavaScript has a capital S and that&apos;s not right in the Xcode project.

Looks fine, r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5892</attachid>
            <date>2006-01-23 15:40:36 -0800</date>
            <delta_ts>2006-01-24 12:53:56 -0800</delta_ts>
            <desc>First cut</desc>
            <filename>autogeneration.txt</filename>
            <type>text/plain</type>
            <size>67913</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNt
YS9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMTIzMTYpCisrKyBraHRtbC9lY21hL2tqc19ldmVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAorI2luY2x1ZGUgIkpTV2hlZWxFdmVu
dC5oIgorCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtNTAyLDcgKzUwNCw3IEBAIEpTVmFsdWUgKmdldERPTUV2ZW50KEV4ZWNTdGF0ZSAqZXhlYywg
RXYKICAgICBlbHNlIGlmIChlLT5pc01vdXNlRXZlbnQoKSkKICAgICAgIHJldCA9IG5ldyBET01N
b3VzZUV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KGUpKTsKICAgICBl
bHNlIGlmIChlLT5pc1doZWVsRXZlbnQoKSkKLSAgICAgIHJldCA9IG5ldyBET01XaGVlbEV2ZW50
KGV4ZWMsIHN0YXRpY19jYXN0PFdoZWVsRXZlbnRJbXBsICo+KGUpKTsKKyAgICAgIHJldCA9IG5l
dyBKU1doZWVsRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8V2hlZWxFdmVudEltcGwgKj4oZSkpOwog
ICAgIGVsc2UgaWYgKGUtPmlzVUlFdmVudCgpKQogICAgICAgcmV0ID0gbmV3IERPTVVJRXZlbnQo
ZXhlYywgc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwgKj4oZSkpOwogICAgIGVsc2UgaWYgKGUtPmlz
TXV0YXRpb25FdmVudCgpKQpAQCAtOTE2LDgzICs5MTgsNiBAQCBKU1ZhbHVlICpET01NdXRhdGlv
bkV2ZW50UHJvdG9GdW5jOjpjYWxsCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY29uc3QgQ2xh
c3NJbmZvIERPTVdoZWVsRXZlbnQ6OmluZm8gPSB7ICJXaGVlbEV2ZW50IiwgJkRPTUV2ZW50Ojpp
bmZvLCAmRE9NV2hlZWxFdmVudFRhYmxlLCAwIH07Ci0vKgotQGJlZ2luIERPTVdoZWVsRXZlbnRU
YWJsZSAxMAotICAgIGFsdEtleSAgICAgIERPTVdoZWVsRXZlbnQ6OkFsdEtleSAgICAgICBEb250
RGVsZXRlfFJlYWRPbmx5Ci0gICAgY2xpZW50WCAgICAgRE9NV2hlZWxFdmVudDo6Q2xpZW50WCAg
ICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgICBjbGllbnRZICAgICBET01XaGVlbEV2ZW50OjpD
bGllbnRZICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIGN0cmxLZXkgICAgIERPTVdoZWVs
RXZlbnQ6OkN0cmxLZXkgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gICAgbWV0YUtleSAgICAg
RE9NV2hlZWxFdmVudDo6TWV0YUtleSAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgICBvZmZz
ZXRYICAgICBET01XaGVlbEV2ZW50OjpPZmZzZXRYICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICAgIG9mZnNldFkgICAgIERPTVdoZWVsRXZlbnQ6Ok9mZnNldFkgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gICAgc2NyZWVuWCAgICAgRE9NV2hlZWxFdmVudDo6U2NyZWVuWCAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgICBzY3JlZW5ZICAgICBET01XaGVlbEV2ZW50OjpTY3JlZW5ZICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIHNoaWZ0S2V5ICAgIERPTVdoZWVsRXZlbnQ6OlNo
aWZ0S2V5ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gICAgd2hlZWxEZWx0YSAgRE9NV2hlZWxF
dmVudDo6V2hlZWxEZWx0YSAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgICB4ICAgICAgICAgICBE
T01XaGVlbEV2ZW50OjpYICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIHkgICAg
ICAgICAgIERPTVdoZWVsRXZlbnQ6OlkgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1A
ZW5kCi1AYmVnaW4gRE9NV2hlZWxFdmVudFByb3RvVGFibGUgMQotQGVuZAotKi8KLUtKU19ERUZJ
TkVfUFJPVE9UWVBFKERPTVdoZWVsRXZlbnRQcm90bykKLUtKU19JTVBMRU1FTlRfUFJPVE9GVU5D
KERPTVdoZWVsRXZlbnRQcm90b0Z1bmMpCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRV9XSVRIX1BB
UkVOVCgiRE9NV2hlZWxFdmVudCIsRE9NV2hlZWxFdmVudFByb3RvLERPTVdoZWVsRXZlbnRQcm90
b0Z1bmMsRE9NRXZlbnRQcm90bykKLQotRE9NV2hlZWxFdmVudDo6RE9NV2hlZWxFdmVudChFeGVj
U3RhdGUgKmV4ZWMsIERPTTo6V2hlZWxFdmVudEltcGwgKmUpCi0gICAgOiBET01VSUV2ZW50KGV4
ZWMsIGUpCi17Ci19Ci0KLWJvb2wgRE9NV2hlZWxFdmVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01XaGVlbEV2ZW50
LCBET01FdmVudD4oZXhlYywgJkRPTVdoZWVsRXZlbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKLX0KLQotSlNWYWx1ZSAqRE9NV2hlZWxFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgICBET006OldoZWVsRXZlbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8RE9NOjpXaGVlbEV2ZW50SW1wbCAqPihpbXBsKCkpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBBbHRLZXk6Ci0gICAgICAgICAgICByZXR1
cm4ganNCb29sZWFuKGUtPmFsdEtleSgpKTsKLSAgICAgICAgY2FzZSBDbGllbnRYOgotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGUtPmNsaWVudFgoKSk7Ci0gICAgICAgIGNhc2UgQ2xpZW50
WToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihlLT5jbGllbnRZKCkpOwotICAgICAgICBj
YXNlIEN0cmxLZXk6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZS0+Y3RybEtleSgpKTsK
LSAgICAgICAgY2FzZSBNZXRhS2V5OgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGUtPm1l
dGFLZXkoKSk7Ci0gICAgICAgIGNhc2UgT2Zmc2V0WDoKLSAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihlLT5vZmZzZXRYKCkpOwotICAgICAgICBjYXNlIE9mZnNldFk6Ci0gICAgICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZS0+b2Zmc2V0WSgpKTsKLSAgICAgICAgY2FzZSBTY3JlZW5YOgotICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGUtPnNjcmVlblgoKSk7Ci0gICAgICAgIGNhc2UgU2Ny
ZWVuWToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihlLT5zY3JlZW5ZKCkpOwotICAgICAg
ICBjYXNlIFNoaWZ0S2V5OgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihlLT5zaGlmdEtl
eSgpKTsKLSAgICAgICAgY2FzZSBXaGVlbERlbHRhOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGUtPndoZWVsRGVsdGEoKSk7Ci0gICAgICAgIGNhc2UgWDoKLSAgICAgICAgICAgIHJldHVy
biBqc051bWJlcihlLT54KCkpOwotICAgICAgICBjYXNlIFk6Ci0gICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoZS0+eSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0K
LUpTVmFsdWUgKkRPTVdoZWVsRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCi17Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmRE9NV2hlZWxFdmVudDo6aW5mbykpCi0gICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogY29uc3QgQ2xhc3NJbmZvIENsaXBib2FyZDo6
aW5mbyA9IHsgIkNsaXBib2FyZCIsIDAsICZDbGlwYm9hcmRUYWJsZSwgMCB9OwogCiAvKiBTb3Vy
Y2UgZm9yIENsaXBib2FyZFRhYmxlLiBVc2UgIm1ha2UgaGFzaHRhYmxlcyIgdG8gcmVnZW5lcmF0
ZS4KSW5kZXg6IGtodG1sL2VjbWEva2pzX2V2ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2Vj
bWEva2pzX2V2ZW50cy5oCShyZXZpc2lvbiAxMjMxNikKKysrIGtodG1sL2VjbWEva2pzX2V2ZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVzcGFjZSBET00gewogICAg
IGNsYXNzIE1vdXNlRXZlbnRJbXBsOwogICAgIGNsYXNzIE11dGF0aW9uRXZlbnRJbXBsOwogICAg
IGNsYXNzIFVJRXZlbnRJbXBsOwotICAgIGNsYXNzIFdoZWVsRXZlbnRJbXBsOwogfQogCiBuYW1l
c3BhY2UgS0pTIHsKQEAgLTIwNywxOCArMjA2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICBJbml0TXV0YXRpb25FdmVudCB9OwogICAgIH07CiAgIAotICAgIGNsYXNzIERPTVdo
ZWVsRXZlbnQgOiBwdWJsaWMgRE9NVUlFdmVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBET01X
aGVlbEV2ZW50KEV4ZWNTdGF0ZSosIERPTTo6V2hlZWxFdmVudEltcGwqKTsKLSAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQt
b25seQotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwot
ICAgICAgICBlbnVtIHsgU2NyZWVuWCwgU2NyZWVuWSwgQ2xpZW50WCwgWCwgQ2xpZW50WSwgWSwg
T2Zmc2V0WCwgT2Zmc2V0WSwKLSAgICAgICAgICAgICAgIEN0cmxLZXksIFNoaWZ0S2V5LCBBbHRL
ZXksIE1ldGFLZXksIFdoZWVsRGVsdGEgfTsKLSAgICB9OwotCiAgICAgY2xhc3MgQ2xpcGJvYXJk
IDogcHVibGljIERPTU9iamVjdCB7CiAgICAgZnJpZW5kIGNsYXNzIENsaXBib2FyZFByb3RvRnVu
YzsKICAgICBwdWJsaWM6CkluZGV4OiBiaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdz
LnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwJ
KHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisjIS91c3IvYmluL3BlcmwgLXcKKworIyBUaGlz
IHNjcmlwdCBpcyBhIHRlbXBvcmFyeSBoYWNrLgorIyBGaWxlcyBhcmUgZ2VuZXJhdGVkIGluIHRo
ZSBzb3VyY2UgZGlyZWN0b3J5LCB3aGVuIHRoZXkgcmVhbGx5IHNob3VsZCBnbworIyB0byB0aGUg
RGVyaXZlZFNvdXJjZXMgZGlyZWN0b3J5LgorIyBUaGlzIHNob3VsZCBhbHNvIGV2ZW50dWFsbHkg
YmUgYSBidWlsZCBydWxlIGRyaXZlbiBvZmYgb2YgLmlkbCBmaWxlcworIyBob3dldmVyIGEgYnVp
bGQgcnVsZSBvbmx5IHNvbHV0aW9uIGlzIGJsb2NrZWQgYnkgc2V2ZXJhbCByYWRhcnM6CisjIDxy
ZGFyOi8vcHJvYmxlbXMvNDI1MTc4MSY0MjUxNzg1PgorCit1c2Ugc3RyaWN0OworCit1c2UgRmls
ZTo6UGF0aDsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgQ3dkOworCit1c2UgSURMUGFyc2VyOwor
dXNlIENvZGVHZW5lcmF0b3I7CisKK215ICRpZGxEaXJlY3Rvcnk7CitteSAkb3V0cHV0RGlyZWN0
b3J5OworbXkgJGdlbmVyYXRvcjsKKworR2V0T3B0aW9ucygnaWRsZGlyPXMnID0+IFwkaWRsRGly
ZWN0b3J5LAorCQkJICAnb3V0cHV0ZGlyPXMnID0+IFwkb3V0cHV0RGlyZWN0b3J5LAorCQkJICAn
Z2VuZXJhdG9yPXMnID0+IFwkZ2VuZXJhdG9yKTsKKworaWYgKCFkZWZpbmVkKCRpZGxEaXJlY3Rv
cnkpIG9yICFkZWZpbmVkKCRvdXRwdXREaXJlY3RvcnkpKSB7CisJZGllKCdNdXN0IHNwZWNpZnkg
Ym90aCBpZGxkaXIgYW5kIG91dHB1dGRpcicpOworfQorCitpZiAoIWRlZmluZWQoJGdlbmVyYXRv
cikpIHsKKyAgZGllKCdNdXN0IHNwZWNpZnkgZ2VuZXJhdG9yJykKK30KKworJGlkbERpcmVjdG9y
eSA9ICgmY3dkKSAuICIvJGlkbERpcmVjdG9yeSIgdW5sZXNzICRpZGxEaXJlY3RvcnkgPX4gL15c
Ly87Ciskb3V0cHV0RGlyZWN0b3J5ID0gKCZjd2QpIC4gIi8kb3V0cHV0RGlyZWN0b3J5IiB1bmxl
c3MgJG91dHB1dERpcmVjdG9yeSA9fiAvXlwvLzsKKworbXkgQGlkbEZpbGVzOworcHVzaCBAaWRs
RmlsZXMsIG1hcCB7IGNob21wOyAkXyB9IGBmaW5kICRpZGxEaXJlY3RvcnkgLW5hbWUgJyouaWRs
JyAtcHJpbnQgfCBncmVwIC12IGRlZnNgOworCitteSBAaW5jbHVkZURpcnM7CitwdXNoKEBpbmNs
dWRlRGlycywgJGlkbERpcmVjdG9yeSk7CisKK2ZvciBteSAkaWRsUGF0aCAoQGlkbEZpbGVzKSB7
ICAgCisJIyBQYXJzZSB0aGUgZ2l2ZW4gSURMIGZpbGUuCisJbXkgJHBhcnNlciA9IElETFBhcnNl
ci0+bmV3KDEpOworCQorCW15ICRkb2N1bWVudCA9ICRwYXJzZXItPlBhcnNlKCRpZGxQYXRoKTsK
KwkKKwkjIEdlbmVyYXRlIGRlc2lyZWQgb3V0cHV0IGZvciBnaXZlbiBJREwgZmlsZS4KKwlteSAk
Y29kZUdlbiA9IENvZGVHZW5lcmF0b3ItPm5ldyhcQGluY2x1ZGVEaXJzLCAkZ2VuZXJhdG9yLCAk
b3V0cHV0RGlyZWN0b3J5KTsKKwkkY29kZUdlbi0+UHJvY2Vzc0RvY3VtZW50KCRkb2N1bWVudCk7
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBiaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRp
bmdzLnBsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogYmlu
ZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0JKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNl
ci5wbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODYgQEAKKyMKKyMgS0RPTSBJREwgcGFyc2Vy
CisjCisjIENvcHlyaWdodCAoYykgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2Rl
Lm9yZz4KKyMKK3BhY2thZ2UgSURMUGFyc2VyOworCit1c2UgSURMU3RydWN0dXJlOworCit1c2Ug
Y29uc3RhbnQgTU9ERV9VTkRFRiAgICA9PiAwOyAjIERlZmF1bHQgbW9kZS4KKwordXNlIGNvbnN0
YW50IE1PREVfTU9EVUxFICA9PiAxMDsgIyAnbW9kdWxlJyBzZWN0aW9uCit1c2UgY29uc3RhbnQg
TU9ERV9JTlRFUkZBQ0UgID0+IDExOyAjICdpbnRlcmZhY2UnIHNlY3Rpb24KK3VzZSBjb25zdGFu
dCBNT0RFX0VYQ0VQVElPTiAgPT4gMTI7ICMgJ2V4Y2VwdGlvbicgc2VjdGlvbgordXNlIGNvbnN0
YW50IE1PREVfQUxJQVMgICAgPT4gMTM7ICMgJ2FsaWFzJyBzZWN0aW9uCisKKyMgSGVscGVyIHZh
cmlhYmxlcworbXkgQHRlbXBvcmFyeUNvbnRlbnQgPSAiIjsKKworbXkgJHBhcnNlTW9kZSA9IE1P
REVfVU5ERUY7CitteSAkcHJlc2VydmVkUGFyc2VNb2RlID0gTU9ERV9VTkRFRjsKKworbXkgJGJl
UXVpZXQ7ICMgU2hvdWxkIG5vdCBkaXNwbGF5IGFueXRoaW5nIG9uIFNURE9VVD8KK215ICRkb2N1
bWVudCA9IDA7ICMgV2lsbCBob2xkIHRoZSByZXN1bHRpbmcgJ2lkbERvY3VtZW50JworCisjIERl
ZmF1bHQgQ29uc3RydWN0b3IKK3N1YiBuZXcKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBt
eSAkcmVmZXJlbmNlID0geyB9OworCisgICRkb2N1bWVudCA9IDA7CisgICRiZVF1aWV0ID0gc2hp
ZnQ7CisKKyAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7CisgIHJldHVybiAkcmVmZXJlbmNl
OworfQorCisjIFJldHVybnMgdGhlIHBhcnNlZCAnaWRsRG9jdW1lbnQnCitzdWIgUGFyc2UKK3sK
KyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAkZmlsZU5hbWUgPSBzaGlmdDsKKworICBwcmlu
dCAiIHwgKioqIFN0YXJ0aW5nIHRvIHBhcnNlICRmaWxlTmFtZS4uLlxuIHxcbiIgaWYoISRiZVF1
aWV0KTsKKyAgb3BlbihGSUxFLCAiPCRmaWxlTmFtZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBy
ZXF1ZXN0ZWQgZmlsZSAoZmlsZTogJGZpbGVOYW1lKSEiOworICBteSBAZG9jdW1lbnRDb250ZW50
ID0gPEZJTEU+OworICBjbG9zZShGSUxFKTsKKworICAjIFJlbW92ZSBhbGwgY29tbWVudHMsIHBs
ZWFzaW5nIG91ciBwYXJzaW5nIGVuZ2luZSBhIGxvdC4uLgorICBteSAkZG9jdW1lbnREYXRhID0g
am9pbigiIyIsIEBkb2N1bWVudENvbnRlbnQpOworICAkZG9jdW1lbnREYXRhID1+IHMvXC9cKigu
fFtcblxyXSkqP1wqXC8vL2c7ICAjIC8qIC4uLiAqLyBzdHlsZSBjb21tZW50cworICAkZG9jdW1l
bnREYXRhID1+IHMvXC9cL1teXG5ccl0qLy9nOyAgICAgICMgLy8gLi4uLi4uIHN0eWxlIGNvbW1l
bnRzCisgIEBkb2N1bWVudENvbnRlbnQgPSBzcGxpdCgiIyIsICRkb2N1bWVudERhdGEpOworCisg
IG15ICRkYXRhQXZhaWxhYmxlID0gMDsKKworICAjIFNpbXBsZSBJREwgUGFyc2VyICh0bSkKKyAg
Zm9yZWFjaChAZG9jdW1lbnRDb250ZW50KSB7CisgICAgbXkgJG5ld1BhcnNlTW9kZSA9ICRvYmpl
Y3QtPkRldGVybWluZVBhcnNlTW9kZSgkXyk7CisKKyAgICBpZigkbmV3UGFyc2VNb2RlIG5lIE1P
REVfVU5ERUYpIHsKKyAgICAgIGlmKCRkYXRhQXZhaWxhYmxlIGVxIDApIHsKKyAgICAgICAgJGRh
dGFBdmFpbGFibGUgPSAxOyAjIFN0YXJ0IG5vZGUgYnVpbGRpbmcuLi4KKyAgICAgIH0gZWxzZSB7
CisgICAgICAgICRvYmplY3QtPlByb2Nlc3NTZWN0aW9uKCk7CisgICAgICB9CisgICAgfQorCisg
ICAgIyBVcGRhdGUgZGV0ZWN0ZWQgZGF0YSBzdHJlYW0gbW9kZS4uLgorICAgIGlmKCRuZXdQYXJz
ZU1vZGUgbmUgTU9ERV9VTkRFRikgeworICAgICAgJHBhcnNlTW9kZSA9ICRuZXdQYXJzZU1vZGU7
CisgICAgfQorCisgICAgcHVzaChAdGVtcG9yYXJ5Q29udGVudCwgJF8pOworICB9CisKKyAgIyBD
aGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyByZW1haW5pbmcgdG8gcGFyc2UuLi4KKyAgaWYoKCRw
YXJzZU1vZGUgbmUgTU9ERV9VTkRFRikgYW5kICgkI3RlbXBvcmFyeUNvbnRlbnQgPiAwKSkgewor
ICAgICRvYmplY3QtPlByb2Nlc3NTZWN0aW9uKCk7CisgIH0KKworICBwcmludCAiIHwgKioqIEZp
bmlzaGVkIHBhcnNpbmchXG4iIGlmKCEkYmVRdWlldCk7CisgIAorICAkZG9jdW1lbnQtPmZpbGVO
YW1lKCRmaWxlTmFtZSk7CisgIAorICByZXR1cm4gJGRvY3VtZW50OworfQorCitzdWIgUGFyc2VN
b2R1bGUKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAkZGF0YU5vZGUgPSBzaGlmdDsK
KworICBwcmludCAiIHwtIFRyeWluZyB0byBwYXJzZSBtb2R1bGUuLi5cbiIgaWYoISRiZVF1aWV0
KTsKKworICBteSAkZGF0YSA9IGpvaW4oIiIsIEB0ZW1wb3JhcnlDb250ZW50KTsKKyAgJGRhdGEg
PX4gLyRJRExTdHJ1Y3R1cmU6Om1vZHVsZVNlbGVjdG9yLzsKKworICBteSAkbW9kdWxlTmFtZSA9
IChkZWZpbmVkKCQxKSA/ICQxIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGRhdGFc
bikiKSk7CisgICRkYXRhTm9kZS0+bW9kdWxlKCRtb2R1bGVOYW1lKTsKKworICBwcmludCAiICB8
LS0tLT4gTW9kdWxlOyBOQU1FIFwiJG1vZHVsZU5hbWVcIlxuIHwtXG4gfFxuIiBpZighJGJlUXVp
ZXQpOworfQorCitzdWIgZHVtcEV4dGVuZGVkQXR0cmlidXRlcworeworICBteSAkcGFkU3RyID0g
c2hpZnQ7CisgIG15ICRhdHRycyA9IHNoaWZ0OworCisgIGlmICghJXskYXR0cnN9KSB7CisgICAg
cmV0dXJuICIiOworICB9CisKKyAgbXkgQHRlbXA7CisgIHdoaWxlICgoJG5hbWUsICR2YWx1ZSkg
PSBlYWNoKCV7JGF0dHJzfSkpIHsKKyAgICBwdXNoKEB0ZW1wLCAiJG5hbWU9JHZhbHVlIik7Cisg
IH0KKyAgCisgIHJldHVybiAkcGFkU3RyIC4gIlsiIC4gam9pbigiLCAiLCBAdGVtcCkgLiAiXSI7
Cit9CisKK3N1YiBwYXJzZUV4dGVuZGVkQXR0cmlidXRlcworeworICBteSAkc3RyID0gc2hpZnQ7
CisgICRzdHIgPX4gcy9cW1xzKiguKilcXS8kMS9nOworICAKKyAgbXkgJWF0dHJzID0gKCk7Cisg
IAorICBmb3JlYWNoIG15ICR2YWx1ZSAoc3BsaXQoL1xzKixccyovLCAkc3RyKSkgeworICAgICgk
bmFtZSwkdmFsdWUpID0gc3BsaXQoL1xzKj1ccyovLCR2YWx1ZSwyKTsKKworICAgICMgQXR0cmli
dXRlcyB3aXRoIG5vIHZhbHVlIGFyZSBzZXQgdG8gYmUgdHJ1ZQorICAgICR2YWx1ZSA9IDEgdW5s
ZXNzIGRlZmluZWQgJHZhbHVlOworICAgICRhdHRyc3skbmFtZX0gPSAkdmFsdWU7CisgIH0KKyAg
CisgIHJldHVybiAlYXR0cnM7Cit9CisKK3N1YiBQYXJzZUludGVyZmFjZQoreworICBteSAkb2Jq
ZWN0ID0gc2hpZnQ7CisgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICBteSAkc2VjdGlvbk5hbWUg
PSBzaGlmdDsKKworICBteSAkZGF0YSA9IGpvaW4oIiIsIEB0ZW1wb3JhcnlDb250ZW50KTsKKwor
ICAjIExvb2sgZm9yIGVuZC1vZi1pbnRlcmZhY2UgbWFyaworICAkZGF0YSA9fiAvfTsvZzsKKyAg
JGRhdGEgPSBzdWJzdHIoJGRhdGEsIGluZGV4KCRkYXRhLCAkc2VjdGlvbk5hbWUpLCBwb3MoJGRh
dGEpIC0gbGVuZ3RoKCRkYXRhKSk7CisKKyAgJGRhdGEgPX4gcy9bXG5ccl0vL2c7CisKKyAgIyBC
ZWdpbm5pbmcgb2YgdGhlIHJlZ2V4cCBwYXJzaW5nIG1hZ2ljCisgIGlmKCRzZWN0aW9uTmFtZSBl
cSAiZXhjZXB0aW9uIikgeworICAgIHByaW50ICIgfC0gVHJ5aW5nIHRvIHBhcnNlIGV4Y2VwdGlv
bi4uLlxuIiBpZighJGJlUXVpZXQpOworCisgICAgbXkgJGV4Y2VwdGlvbk5hbWUgPSAiIjsgbXkg
JGV4Y2VwdGlvbkRhdGEgPSAiIjsKKyAgICBteSAkZXhjZXB0aW9uRGF0YU5hbWUgPSAiIjsgbXkg
JGV4Y2VwdGlvbkRhdGFUeXBlID0gIiI7CisgIAorICAgICMgTWF0Y2ggaWRlbnRpZmllciBvZiB0
aGUgZXhjZXB0aW9uLCBhbmQgZW5jbG9zZWQgZGF0YS4uLgorICAgICRkYXRhID1+IC8kSURMU3Ry
dWN0dXJlOjpleGNlcHRpb25TZWxlY3Rvci87CisgICAgJGV4Y2VwdGlvbk5hbWUgPSAoZGVmaW5l
ZCgkMSkgPyAkMSA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRkYXRhXG4pIikpOwor
ICAgICRleGNlcHRpb25EYXRhID0gKGRlZmluZWQoJDIpID8gJDIgOiBkaWUoIlBhcnNpbmcgZXJy
b3IhXG5Tb3VyY2U6XG4kZGF0YVxuKSIpKTsKKworICAgICgnJyA9fiAvXi8pOyAjIFJlc2V0IHZh
cmlhYmxlcyBuZWVkZWQgZm9yIHJlZ2V4cCBtYXRjaGluZworCisgICAgIyAuLi4gcGFyc2UgZW5j
bG9zZWQgZGF0YSAoZ2V0LiBuYW1lICYgdHlwZSkKKyAgICAkZXhjZXB0aW9uRGF0YSA9fiAvJElE
TFN0cnVjdHVyZTo6ZXhjZXB0aW9uU3ViU2VsZWN0b3IvOworICAgICRleGNlcHRpb25EYXRhVHlw
ZSA9IChkZWZpbmVkKCQxKSA/ICQxIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGRh
dGFcbikiKSk7CisgICAgJGV4Y2VwdGlvbkRhdGFOYW1lID0gKGRlZmluZWQoJDIpID8gJDIgOiBk
aWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kZGF0YVxuKSIpKTsKKworICAgICMgRmlsbCBp
biBkb21DbGFzcyBkYXRhc3RydWN0dXJlCisgICAgJGRhdGFOb2RlLT5uYW1lKCRleGNlcHRpb25O
YW1lKTsKKworICAgIG15ICRuZXdEYXRhTm9kZSA9IG5ldyBkb21BdHRyaWJ1dGUoKTsKKyAgICAk
bmV3RGF0YU5vZGUtPnR5cGUoInJlYWRvbmx5IGF0dHJpYnV0ZSIpOworICAgICRuZXdEYXRhTm9k
ZS0+c2lnbmF0dXJlKG5ldyBkb21TaWduYXR1cmUoKSk7CisKKyAgICAkbmV3RGF0YU5vZGUtPnNp
Z25hdHVyZS0+bmFtZSgkZXhjZXB0aW9uRGF0YU5hbWUpOworICAgICRuZXdEYXRhTm9kZS0+c2ln
bmF0dXJlLT50eXBlKCRleGNlcHRpb25EYXRhVHlwZSk7CisgICAgJG5ld0RhdGFOb2RlLT5zaWdu
YXR1cmUtPmhhc1B0ckZsYWcoMCk7CisKKyAgICBteSAkYXJyYXlSZWYgPSAkZGF0YU5vZGUtPmF0
dHJpYnV0ZXM7CisgICAgcHVzaChAJGFycmF5UmVmLCAkbmV3RGF0YU5vZGUpOworCisgICAgcHJp
bnQgIiAgfC0tLS0+IEV4Y2VwdGlvbjsgTkFNRSBcIiRleGNlcHRpb25OYW1lXCIgREFUQSBUWVBF
IFwiJGV4Y2VwdGlvbkRhdGFUeXBlXCIgREFUQSBOQU1FIFwiJGV4Y2VwdGlvbkRhdGFOYW1lXCJc
biB8LVxuIHxcbiIgaWYoISRiZVF1aWV0KTsKKyAgfSBlbHNpZigkc2VjdGlvbk5hbWUgZXEgImlu
dGVyZmFjZSIpIHsKKyAgICBwcmludCAiIHwtIFRyeWluZyB0byBwYXJzZSBpbnRlcmZhY2UuLi5c
biIgaWYoISRiZVF1aWV0KTsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gIiI7CisgICAgbXkg
JGludGVyZmFjZURhdGEgPSAiIjsKKyAgICAKKyAgICAjIE1hdGNoIGlkZW50aWZpZXIgb2YgdGhl
IGludGVyZmFjZSwgYW5kIGVuY2xvc2VkIGRhdGEuLi4KKyAgICAkZGF0YSA9fiAvJElETFN0cnVj
dHVyZTo6aW50ZXJmYWNlU2VsZWN0b3IvOworICAgIAorICAgICRpbnRlcmZhY2VFeHRlbmRlZEF0
dHJpYnV0ZXMgPSAoZGVmaW5lZCgkMSkgPyAkMSA6ICIgIik7IGNob3AoJGludGVyZmFjZUV4dGVu
ZGVkQXR0cmlidXRlcyk7CisgICAgJGludGVyZmFjZU5hbWUgPSAoZGVmaW5lZCgkMikgPyAkMiA6
IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRkYXRhXG4pIikpOworICAgICRpbnRlcmZh
Y2VCYXNlID0gKGRlZmluZWQoJDMpID8gJDMgOiAiIik7CisgICAgJGludGVyZmFjZURhdGEgPSAo
ZGVmaW5lZCgkNCkgPyAkNCA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRkYXRhXG4p
IikpOworCisgICAgIyBGaWxsIGluIGtub3duIHBhcnRzIG9mIHRoZSBkb21DbGFzcyBkYXRhc3Ry
dWN0dXJlIG5vdy4uLgorICAgICRkYXRhTm9kZS0+bmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMocGFyc2VFeHRlbmRlZEF0dHJpYnV0ZXMoJGlu
dGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlcykpOworCisgICAgIyBJbmhlcml0YW5jZSBkZXRlY3Rp
b24KKyAgICBteSBAaW50ZXJmYWNlUGFyZW50cyA9IHNwbGl0KC8sLywgJGludGVyZmFjZUJhc2Up
OworICAgIGZvcmVhY2goQGludGVyZmFjZVBhcmVudHMpIHsKKyAgICAgIG15ICRsaW5lID0gJF87
CisgICAgICAkbGluZSA9fiBzL1xzKi8vZzsKKworICAgICAgbXkgJGFycmF5UmVmID0gJGRhdGFO
b2RlLT5wYXJlbnRzOworICAgICAgcHVzaChAJGFycmF5UmVmLCAkbGluZSk7CisgICAgfQorCisg
ICAgJGludGVyZmFjZURhdGEgPX4gcy9bXG5ccl0vL2c7CisgICAgbXkgQGludGVyZmFjZU1ldGhv
ZHMgPSBzcGxpdCgvOy8sICRpbnRlcmZhY2VEYXRhKTsKKworICAgIGZvcmVhY2goQGludGVyZmFj
ZU1ldGhvZHMpIHsKKyAgICAgIG15ICRsaW5lID0gJF87CisKKyAgICAgIGlmKCRsaW5lID1+IC9h
dHRyaWJ1dGUvKSB7CisgICAgICAgICRsaW5lID1+IC8kSURMU3RydWN0dXJlOjppbnRlcmZhY2VB
dHRyaWJ1dGVTZWxlY3Rvci87CisKKyAgICAgICAgbXkgJGF0dHJpYnV0ZVR5cGUgPSAoZGVmaW5l
ZCgkMSkgPyAkMSA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRsaW5lXG4pIikpOwor
ICAgICAgICBteSAkYXR0cmlidXRlRXh0ZW5kZWRBdHRyaWJ1dGVzID0gKGRlZmluZWQoJDIpID8g
JDIgOiAiICIpOyBjaG9wKCRhdHRyaWJ1dGVFeHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICAgICBt
eSAkYXR0cmlidXRlRGF0YVR5cGUgPSAoZGVmaW5lZCgkMykgPyAkMyA6IGRpZSgiUGFyc2luZyBl
cnJvciFcblNvdXJjZTpcbiRsaW5lXG4pIikpOworICAgICAgICBteSAkYXR0cmlidXRlRGF0YU5h
bWUgPSAoZGVmaW5lZCgkNCkgPyAkNCA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRs
aW5lXG4pIikpOworICAgICAgICAgIAorICAgICAgICAoJycgPX4gL14vKTsgIyBSZXNldCB2YXJp
YWJsZXMgbmVlZGVkIGZvciByZWdleHAgbWF0Y2hpbmcKKyAgICAgICAgCisgICAgICAgICRsaW5l
ID1+IC8kSURMU3RydWN0dXJlOjpyYWlzZXNTZWxlY3Rvci87CisgICAgICAgIG15ICRhdHRyaWJ1
dGVFeGNlcHRpb24gPSAoZGVmaW5lZCgkMSkgPyAkMSA6ICIiKTsKKyAgICAgIAorICAgICAgICBt
eSAkbmV3RGF0YU5vZGUgPSBuZXcgZG9tQXR0cmlidXRlKCk7CisgICAgICAgICRuZXdEYXRhTm9k
ZS0+dHlwZSgkYXR0cmlidXRlVHlwZSk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0dXJl
KG5ldyBkb21TaWduYXR1cmUoKSk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzKHBhcnNlRXh0ZW5kZWRBdHRyaWJ1dGVzKCRhdHRyaWJ1dGVFeHRlbmRlZEF0dHJpYnV0
ZXMpKTsKKworICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+bmFtZSgkYXR0cmlidXRl
RGF0YU5hbWUpOworICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+dHlwZSgkYXR0cmli
dXRlRGF0YVR5cGUpOworCisgICAgICAgIG15ICRhcnJheVJlZiA9ICRkYXRhTm9kZS0+YXR0cmli
dXRlczsKKyAgICAgICAgcHVzaChAJGFycmF5UmVmLCAkbmV3RGF0YU5vZGUpOworCisgICAgICAg
IHByaW50ICIgIHwgIHw+ICBBdHRyaWJ1dGU7IFRZUEUgXCIkYXR0cmlidXRlVHlwZVwiIERBVEEg
TkFNRSBcIiRhdHRyaWJ1dGVEYXRhTmFtZVwiIERBVEEgVFlQRSBcIiRhdHRyaWJ1dGVEYXRhVHlw
ZVwiIEVYQ0VQVElPTj8gXCIkYXR0cmlidXRlRXhjZXB0aW9uXCIiIC4KKyAgICAgICAgICAgICAg
ZHVtcEV4dGVuZGVkQXR0cmlidXRlcygiXG4gIHwgICAgICAgICAgICAgICAgICIsICRuZXdEYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSAuICJcbiIgaWYoISRiZVF1aWV0KTsKKworICAgICAg
ICAkYXR0cmlidXRlRXhjZXB0aW9uID1+IHMvXHMrLy9nOworICAgICAgICBAeyRuZXdEYXRhTm9k
ZS0+cmFpc2VzRXhjZXB0aW9uc30gPSBzcGxpdCgvLC8sICRhdHRyaWJ1dGVFeGNlcHRpb24pOwor
ICAgICAgfSBlbHNpZigoJGxpbmUgIX4gcy9eXHMqJC8vZykgYW5kICgkbGluZSAhfiAvXlxzK2Nv
bnN0LykpIHsKKyAgICAgICAgJGxpbmUgPX4gLyRJRExTdHJ1Y3R1cmU6OmludGVyZmFjZU1ldGhv
ZFNlbGVjdG9yLzsKKworICAgICAgICBteSAkbWV0aG9kRXh0ZW5kZWRBdHRyaWJ1dGVzID0gKGRl
ZmluZWQoJDEpID8gJDEgOiAiICIpOyBjaG9wKCRtZXRob2RFeHRlbmRlZEF0dHJpYnV0ZXMpOwor
ICAgICAgICBteSAkbWV0aG9kVHlwZSA9IChkZWZpbmVkKCQyKSA/ICQyIDogZGllKCJQYXJzaW5n
IGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAgICAgIG15ICRtZXRob2ROYW1lID0g
KGRlZmluZWQoJDMpID8gJDMgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kbGluZVxu
KSIpKTsKKyAgICAgICAgbXkgJG1ldGhvZFNpZ25hdHVyZSA9IChkZWZpbmVkKCQ0KSA/ICQ0IDog
ZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAgICAgIAorICAg
ICAgICAoJycgPX4gL14vKTsgIyBSZXNldCB2YXJpYWJsZXMgbmVlZGVkIGZvciByZWdleHAgbWF0
Y2hpbmcKKyAgICAgICAgCisgICAgICAgICRsaW5lID1+IC8kSURMU3RydWN0dXJlOjpyYWlzZXNT
ZWxlY3Rvci87CisgICAgICAgIG15ICRtZXRob2RFeGNlcHRpb24gPSAoZGVmaW5lZCgkMSkgPyAk
MSA6ICIiKTsKKworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBuZXcgZG9tRnVuY3Rpb24oKTsK
KworICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZShuZXcgZG9tU2lnbmF0dXJlKCkpOwor
ICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+bmFtZSgkbWV0aG9kTmFtZSk7CisgICAg
ICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0dXJlLT50eXBlKCRtZXRob2RUeXBlKTsKKyAgICAgICAg
JG5ld0RhdGFOb2RlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcyhwYXJzZUV4dGVuZGVk
QXR0cmlidXRlcygkbWV0aG9kRXh0ZW5kZWRBdHRyaWJ1dGVzKSk7CisKKyAgICAgICAgcHJpbnQg
IiAgfCAgfC0gIE1ldGhvZDsgVFlQRSBcIiRtZXRob2RUeXBlXCIgTkFNRSBcIiRtZXRob2ROYW1l
XCIgRVhDRVBUSU9OPyBcIiRtZXRob2RFeGNlcHRpb25cIiIgLgorICAgICAgICAgIGR1bXBFeHRl
bmRlZEF0dHJpYnV0ZXMoIlxuICB8ICAgICAgICAgICAgICAiLCAkbmV3RGF0YU5vZGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSAuICJcbiIgaWYoISRiZVF1aWV0KTsKKworICAgICAg
ICAkbWV0aG9kRXhjZXB0aW9uID1+IHMvXHMrLy9nOworICAgICAgICBAeyRuZXdEYXRhTm9kZS0+
cmFpc2VzRXhjZXB0aW9uc30gPSBzcGxpdCgvLC8sICRtZXRob2RFeGNlcHRpb24pOworCisgICAg
ICAgIG15IEBwYXJhbXMgPSBzcGxpdCgvLC8sICRtZXRob2RTaWduYXR1cmUpOworICAgICAgICBm
b3JlYWNoKEBwYXJhbXMpIHsKKyAgICAgICAgICBteSAkbGluZSA9ICRfOworCisgICAgICAgICAg
JGxpbmUgPX4gLyRJRExTdHJ1Y3R1cmU6OmludGVyZmFjZVBhcmFtZXRlclNlbGVjdG9yLzsKKyAg
ICAgICAgICBteSAkcGFyYW1FeHRlbmRlZEF0dHJpYnV0ZXMgPSAoZGVmaW5lZCgkMSkgPyAkMSA6
ICIgIik7IGNob3AoJHBhcmFtRXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgICBteSAkcGFy
YW1UeXBlID0gKGRlZmluZWQoJDIpID8gJDIgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6
XG4kbGluZVxuKSIpKTsKKyAgICAgICAgICBteSAkcGFyYW1OYW1lID0gKGRlZmluZWQoJDMpID8g
JDMgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsKKworICAgICAg
ICAgIG15ICRwYXJhbURhdGFOb2RlID0gbmV3IGRvbVNpZ25hdHVyZSgpOworICAgICAgICAgICRw
YXJhbURhdGFOb2RlLT5uYW1lKCRwYXJhbU5hbWUpOworICAgICAgICAgICRwYXJhbURhdGFOb2Rl
LT50eXBlKCRwYXJhbVR5cGUpOworICAgICAgICAgICRwYXJhbURhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMocGFyc2VFeHRlbmRlZEF0dHJpYnV0ZXMoJHBhcmFtRXh0ZW5kZWRBdHRyaWJ1dGVz
KSk7CisKKyAgICAgICAgICBteSAkYXJyYXlSZWYgPSAkbmV3RGF0YU5vZGUtPnBhcmFtZXRlcnM7
CisgICAgICAgICAgcHVzaChAJGFycmF5UmVmLCAkcGFyYW1EYXRhTm9kZSk7CisKKyAgICAgICAg
ICBwcmludCAiICB8ICAgfD4gIFBhcmFtOyBUWVBFIFwiJHBhcmFtVHlwZVwiIE5BTUUgXCIkcGFy
YW1OYW1lXCIiIC4gCisgICAgICAgICAgICBkdW1wRXh0ZW5kZWRBdHRyaWJ1dGVzKCJcbiAgfCAg
ICAgICAgICAgICAgIiwgJHBhcmFtRGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcykgLiAiXG4i
IGlmKCEkYmVRdWlldCk7ICAgICAgICAgIAorICAgICAgICB9CisKKyAgICAgICAgbXkgJGFycmF5
UmVmID0gJGRhdGFOb2RlLT5mdW5jdGlvbnM7CisgICAgICAgIHB1c2goQCRhcnJheVJlZiwgJG5l
d0RhdGFOb2RlKTsKKyAgICAgIH0gZWxzaWYoJGxpbmUgPX4gL15ccytjb25zdC8pIHsKKyAgICAg
ICAgJGxpbmUgPX4gLyRJRExTdHJ1Y3R1cmU6OmNvbnN0YW50U2VsZWN0b3IvOworICAgICAgICBt
eSAkY29uc3RUeXBlID0gKGRlZmluZWQoJDEpID8gJDEgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5T
b3VyY2U6XG4kbGluZVxuKSIpKTsKKyAgICAgICAgbXkgJGNvbnN0TmFtZSA9IChkZWZpbmVkKCQy
KSA/ICQyIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAg
ICAgIG15ICRjb25zdFZhbHVlID0gKGRlZmluZWQoJDMpID8gJDMgOiBkaWUoIlBhcnNpbmcgZXJy
b3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsKKworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBu
ZXcgZG9tQ29uc3RhbnQoKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5uYW1lKCRjb25zdE5hbWUp
OworICAgICAgICAkbmV3RGF0YU5vZGUtPnR5cGUoJGNvbnN0VHlwZSk7CisgICAgICAgICRuZXdE
YXRhTm9kZS0+dmFsdWUoJGNvbnN0VmFsdWUpOworCisgICAgICAgIG15ICRhcnJheVJlZiA9ICRk
YXRhTm9kZS0+Y29uc3RhbnRzOworICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRuZXdEYXRhTm9k
ZSk7CisKKyAgICAgICAgcHJpbnQgIiAgfCAgIHw+ICBDb25zdGFudDsgVFlQRSBcIiRjb25zdFR5
cGVcIiBOQU1FIFwiJGNvbnN0TmFtZVwiIFZBTFVFIFwiJGNvbnN0VmFsdWVcIlxuIiBpZighJGJl
UXVpZXQpOworICAgICAgfQorICAgIH0KKworICAgIHByaW50ICIgIHwtLS0tPiBJbnRlcmZhY2U7
IE5BTUUgXCIkaW50ZXJmYWNlTmFtZVwiIiAuCisgICAgICAgICAgZHVtcEV4dGVuZGVkQXR0cmli
dXRlcygiXG4gIHwgICAgICAgICAgICAgICAgICIsICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKSAuICJcbiB8LVxuIHxcbiIgaWYoISRiZVF1aWV0KTsKKyAgfQorfQorCisjIEludGVybmFs
IGhlbHBlcgorc3ViIERldGVybWluZVBhcnNlTW9kZQoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7
ICAKKyAgbXkgJGxpbmUgPSBzaGlmdDsKKworICBteSAkbW9kZSA9IE1PREVfVU5ERUY7CisgIGlm
KCRfID1+IC9tb2R1bGUvKSB7CisgICAgJG1vZGUgPSBNT0RFX01PRFVMRTsKKyAgfSBlbHNpZigk
XyA9fiAvaW50ZXJmYWNlLykgeworICAgICRtb2RlID0gTU9ERV9JTlRFUkZBQ0U7CisgIH0gZWxz
aWYoJF8gPX4gL2V4Y2VwdGlvbi8pIHsKKyAgICAkbW9kZSA9IE1PREVfRVhDRVBUSU9OOworICB9
IGVsc2lmKCRfID1+IC9hbGlhcy8pIHsKKyAgICAkbW9kZSA9IE1PREVfQUxJQVM7CisgIH0KKwor
ICByZXR1cm4gJG1vZGU7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIgUHJvY2Vzc1NlY3Rp
b24KK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAKKyAgaWYoJHBhcnNlTW9kZSBlcSBNT0RF
X01PRFVMRSkgeworICAgIGRpZSAoIlR3byBtb2R1bGVzIGluIG9uZSBmaWxlISBGYXRhbCBlcnJv
ciFcbiIpIGlmKCRkb2N1bWVudCBuZSAwKTsKKyAgICAkZG9jdW1lbnQgPSBuZXcgaWRsRG9jdW1l
bnQoKTsKKyAgICAkb2JqZWN0LT5QYXJzZU1vZHVsZSgkZG9jdW1lbnQpOworICB9IGVsc2lmKCRw
YXJzZU1vZGUgZXEgTU9ERV9JTlRFUkZBQ0UpIHsKKyAgICBteSAkbm9kZSA9IG5ldyBkb21DbGFz
cygpOworICAgICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRub2RlLCAiaW50ZXJmYWNlIik7Cisg
ICAgCisgICAgZGllICgiTm8gbW9kdWxlIHNwZWNpZmllZCEgRmF0YWwgRXJyb3IhXG4iKSBpZigk
ZG9jdW1lbnQgZXEgMCk7CisgICAgbXkgJGFycmF5UmVmID0gJGRvY3VtZW50LT5jbGFzc2VzOwor
ICAgIHB1c2goQCRhcnJheVJlZiwgJG5vZGUpOworICB9IGVsc2lmKCRwYXJzZU1vZGUgZXEgTU9E
RV9FWENFUFRJT04pIHsKKyAgICBteSAkbm9kZSA9IG5ldyBkb21DbGFzcygpOworICAgICRvYmpl
Y3QtPlBhcnNlSW50ZXJmYWNlKCRub2RlLCAiZXhjZXB0aW9uIik7CisKKyAgICBkaWUgKCJObyBt
b2R1bGUgc3BlY2lmaWVkISBGYXRhbCBFcnJvciFcbiIpIGlmKCRkb2N1bWVudCBlcSAwKTsKKyAg
ICBteSAkYXJyYXlSZWYgPSAkZG9jdW1lbnQtPmNsYXNzZXM7CisgICAgcHVzaChAJGFycmF5UmVm
LCAkbm9kZSk7CisgIH0gZWxzaWYoJHBhcnNlTW9kZSBlcSBNT0RFX0FMSUFTKSB7CisgICAgcHJp
bnQgIiB8LSBUcnlpbmcgdG8gcGFyc2UgYWxpYXMuLi5cbiIgaWYoISRiZVF1aWV0KTsKKyAgICAK
KyAgICBteSAkbGluZSA9IGpvaW4oIiIsIEB0ZW1wb3JhcnlDb250ZW50KTsKKyAgICAkbGluZSA9
fiAvJElETFN0cnVjdHVyZTo6YWxpYXNTZWxlY3Rvci87CisKKyAgICBteSAkaW50ZXJmYWNlTmFt
ZSA9IChkZWZpbmVkKCQxKSA/ICQxIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxp
bmVcbikiKSk7CisgICAgbXkgJHdyYXBwZXJOYW1lID0gKGRlZmluZWQoJDIpID8gJDIgOiBkaWUo
IlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsKKyAgICAKKyAgICBwcmludCAi
ICB8LS0tLT4gQWxpYXM7IElOVEVSRkFDRSBcIiRpbnRlcmZhY2VOYW1lXCIgV1JBUFBFUiBcIiR3
cmFwcGVyTmFtZVwiXG4gfC1cbiB8XG4iIGlmKCEkYmVRdWlldCk7CisKKyAgICAjIEZJWE1FOiBD
aGVjayBpZiBhbGlhcyBpcyBhbHJlYWR5IGluIGFsaWFzZXMKKyAgICBteSAkYWxpYXNlcyA9ICRk
b2N1bWVudC0+YWxpYXNlczsKKyAgICAkYWxpYXNlcy0+eyRpbnRlcmZhY2VOYW1lfSA9ICR3cmFw
cGVyTmFtZTsKKyAgfQorCisgIEB0ZW1wb3JhcnlDb250ZW50ID0gIiI7Cit9CisKKzE7CkluZGV4
OiBiaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5n
cy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQkocmV2aXNpb24gMCkKKysrIGJpbmRpbmdzL3Njcmlw
dHMvSURMU3RydWN0dXJlLnBtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisjCisjIEtE
T00gSURMIHBhcnNlcgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CisjCitwYWNrYWdlIElETFN0cnVjdHVyZTsKKwordXNlIENsYXNz
OjpTdHJ1Y3Q7CisKKyMgVXNlZCB0byByZXByZXNlbnQgYSBwYXJzZWQgSURMIGRvY3VtZW50Citz
dHJ1Y3QoIGlkbERvY3VtZW50ID0+IHsKKyAgICBtb2R1bGUgPT4gJyQnLCAgICMgTW9kdWxlIGlk
ZW50aWZpZXIKKyAgICBjbGFzc2VzID0+ICdAJywgICMgQWxsIHBhcnNlZCBpbnRlcmZhY2VzCisg
ICAgZmlsZU5hbWUgPT4gJyQnICAjIGZpbGUgbmFtZQorfSk7CisKKyMgVXNlZCB0byByZXByZXNl
bnQgJ2ludGVyZmFjZScgLyAnZXhjZXB0aW9uJyBibG9ja3MKK3N0cnVjdCggZG9tQ2xhc3MgPT4g
eworICAgIG5hbWUgPT4gJyQnLCAgICAgICMgQ2xhc3MgaWRlbnRpZmllciAod2l0aG91dCBtb2R1
bGUpCisgICAgcGFyZW50cyA9PiAnQCcsICAgICAgIyBMaXN0IG9mIHN0cmluZ3MKKyAgICBjb25z
dGFudHMgPT4gJ0AnLCAgICAjIExpc3Qgb2YgJ2RvbUNvbnN0YW50JworICAgIGZ1bmN0aW9ucyA9
PiAnQCcsICAgICMgTGlzdCBvZiAnZG9tRnVuY3Rpb24nCisgICAgYXR0cmlidXRlcyA9PiAnQCcs
ICAgICMgTGlzdCBvZiAnZG9tQXR0cmlidXRlJyAgICAKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMg
PT4gJyUnLCAjIEV4dGVuZGVkIGF0dHJpYnV0ZXMKK30pOworCisjIFVzZWQgdG8gcmVwcmVzZW50
IGRvbUNsYXNzIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQorc3RydWN0KCBk
b21GdW5jdGlvbiA9PiB7CisgICAgc2lnbmF0dXJlID0+ICckJywgICAgIyBSZXR1cm4gdHlwZS9P
YmplY3QgbmFtZS9leHRlbmRlZCBhdHRyaWJ1dGVzCisgICAgcGFyYW1ldGVycyA9PiAnQCcsICAg
ICMgTGlzdCBvZiAnZG9tU2lnbmF0dXJlJworICAgIHJhaXNlc0V4Y2VwdGlvbnMgPT4gJ0AnLCAg
IyBQb3NzaWJseSByYWlzZWQgZXhjZXB0aW9ucy4KK30pOworCisjIFVzZWQgdG8gcmVwcmVzZW50
IGRvbUNsYXNzIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQorc3RydWN0KCBk
b21BdHRyaWJ1dGUgPT4geworICAgIHR5cGUgPT4gJyQnLCAgICAgICAgICAgICAgIyBBdHRyaWJ1
dGUgdHlwZSAoaW5jbHVkaW5nIG5hbWVzcGFjZSkKKyAgICBzaWduYXR1cmUgPT4gJyQnLCAgICAg
ICAgICAjIEF0dHJpYnV0ZSBzaWduYXR1cmUKKyAgICBleGNlcHRpb25OYW1lID0+ICckJywgICAg
ICAjIE5hbWUgb2YgZXhjZXB0aW9uCisgICAgcmFpc2VzRXhjZXB0aW9ucyA9PiAnQCcsICAjIFBv
c3NpYmx5IHJhaXNlZCBleGNlcHRpb25zLgorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJScg
IyBFeHRlbmRlZCBhdHRyaWJ1dGVzCit9KTsKKworIyBVc2VkIHRvIHJlcHJlc2VudCBhIG1hcCBv
ZiAndmFyaWFibGUgbmFtZScgPC0+ICd2YXJpYWJsZSB0eXBlJworc3RydWN0KCBkb21TaWduYXR1
cmUgPT4geworICAgIG5hbWUgPT4gJyQnLCAgICAgICMgVmFyaWFibGUgbmFtZQorICAgIHR5cGUg
PT4gJyQnLCAgICAgICMgVmFyaWFibGUgdHlwZQorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAn
JScgIyBFeHRlbmRlZCBhdHRyaWJ1dGVzCit9KTsKKworIyBVc2VkIHRvIHJlcHJlc2VudCBzdHJp
bmcgY29uc3RhbnRzCitzdHJ1Y3QoIGRvbUNvbnN0YW50ID0+IHsKKyAgICBuYW1lID0+ICckJywg
ICAgICAjIERPTSBDb25zdGFudCBpZGVudGlmaWVyCisgICAgdHlwZSA9PiAnJCcsICAgICAgIyBU
eXBlIG9mIGRhdGEKKyAgICB2YWx1ZSA9PiAnJCcsICAgICAgIyBDb25zdGFudCB2YWx1ZQorfSk7
CisKKyMgSGVscGVycworJGlkbElkID0gJ1thLXpBLVowLTldJzsgICAgICAgICMgR2VuZXJpYyBp
ZGVudGlmaWVyCiskaWRsSWROcyA9ICdbYS16QS1aMC05Ol0nOyAgICAgICMgR2VuZXJpYyBpZGVu
dGlmaWVyIGluY2x1ZGluZyBuYW1lc3BhY2UKKyRpZGxJZE5zTGlzdCA9ICdbYS16QS1aMC05Oixc
IF0nOyAgIyBMaXN0IG9mIEdlbmVyaWMgaWRlbnRpZmllcnMgaW5jbHVkaW5nIG5hbWVzcGFjZQor
CiskaWRsVHlwZSA9ICdbYS16QS1aMC05X10nOyAgICAgICMgR2VuZXJpYyB0eXBlLyJ2YWx1ZSBz
dHJpbmciIGlkZW50aWZpZXIKKyRpZGxEYXRhVHlwZSA9ICdbYS16QS1aMC05XCBdJzsgICAjIEdl
bmVyaWMgZGF0YSB0eXBlIGlkZW50aWZpZXIKKworIyBNYWdpYyBJREwgcGFyc2luZyByZWd1bGFy
IGV4cHJlc3Npb25zCitteSAkc3VwcG9ydGVkVHlwZXMgPSAiKCg/OnVuc2lnbmVkICk/KD86aW50
fHNob3J0fGxvbmcpfCg/OiRpZGxJZE5zKikpIjsKKworIyBTcGVjaWFsIElETCBub3RhdGlvbnMK
KyRleHRlbmRlZEF0dHJpYnV0ZVN5bnRheCA9ICdcW1teXV0qXF0nOyAjIFVzZWQgZm9yIGV4dGVu
ZGVkIGF0dHJpYnV0ZXMKKworIyBSZWd1bGFyIGV4cHJlc3Npb24gYmFzZWQgSURMICdzeW50YWN0
aWNhbCB0b2tlbml6ZXInIHVzZWQgaW4gdGhlIElETFBhcnNlcgorJG1vZHVsZVNlbGVjdG9yID0g
J21vZHVsZVxzKignIC4gJGlkbElkIC4gJyopXHMqeyc7CiskbW9kdWxlTlNTZWxlY3RvciA9ICdt
b2R1bGVccyooJyAuICRpZGxJZCAuICcqKVxzKlxbbnNccyooJyAuICRpZGxJZE5zIC4gJyopXHMq
KCcgLiAkaWRsSWROcyAuICcqKVxdXHMqOyc7CiskY29uc3RhbnRTZWxlY3RvciA9ICdjb25zdFxz
KicgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsVHlwZSAuICcqKVxzKj1ccyooJyAu
ICRpZGxUeXBlIC4gJyopJzsKKyRyYWlzZXNTZWxlY3RvciA9ICdyYWlzZXNccypcKCgnIC4gJGlk
bElkTnNMaXN0IC4gJyopXHMqXCknOworCiskdHlwZU5hbWVzcGFjZVNlbGVjdG9yID0gJygoPzon
IC4gJGlkbElkIC4gJyo6OikqKVxzKignIC4gJGlkbERhdGFUeXBlIC4gJyopJzsKKworJGV4Y2Vw
dGlvblNlbGVjdG9yID0gJ2V4Y2VwdGlvblxzKignIC4gJGlkbElkTnMgLiAnKilccyooW2EtekEt
WlxzeztdKn07KSc7CiskZXhjZXB0aW9uU3ViU2VsZWN0b3IgPSAne1xzKicgLiAkc3VwcG9ydGVk
VHlwZXMgLiAnXHMqKCcgLiAkaWRsVHlwZSAuICcqKVxzKjtccyp9JzsKKworJGludGVyZmFjZVNl
bGVjdG9yID0gJ2ludGVyZmFjZVxzKigoPzonIC4gJGV4dGVuZGVkQXR0cmlidXRlU3ludGF4IC4g
JyApPykoJyAuICRpZGxJZE5zIC4gJyopXHMqKD86OihccypbXntdKikpP3soW2EtekEtWjAtOV89
XHMoKSw7OlxbXF1dKiknOworJGludGVyZmFjZU1ldGhvZFNlbGVjdG9yID0gJ1xzKigoPzonIC4g
JGV4dGVuZGVkQXR0cmlidXRlU3ludGF4IC4gJyApPyknIC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xz
KignIC4gJGlkbElkTnMgLiAnKilccypcKFxzKihbYS16QS1aMC05OlxzLFxbXF1dKiknOworJGlu
dGVyZmFjZVBhcmFtZXRlclNlbGVjdG9yID0gJ2luXHMqKCg/OicgLiAkZXh0ZW5kZWRBdHRyaWJ1
dGVTeW50YXggLiAnICk/KScgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsSWROcyAu
ICcqKSc7CisKKyRpbnRlcmZhY2VBdHRyaWJ1dGVTZWxlY3RvciA9ICdccyoocmVhZG9ubHkgYXR0
cmlidXRlfGF0dHJpYnV0ZSlccyooJyAuICRleHRlbmRlZEF0dHJpYnV0ZVN5bnRheCAuICcgKT8n
IC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xzKignIC4gJGlkbFR5cGUgLiAnKiknOworCisxOwpJbmRl
eDogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDApCisrKyBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NDIg
QEAKKyMKKyMgS0RPTSBJREwgcGFyc2VyCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBOaWtvbGFz
IFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyMgQ29weXJpZ2h0IChjKSAyMDA2IEFuZGVy
cyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KKyMKK3BhY2thZ2UgQ29kZUdlbmVyYXRvckpT
OworCit1c2UgRmlsZTo6c3RhdDsKKworbXkgJG1vZHVsZSA9ICIiOworbXkgJG91dHB1dERpciA9
ICIiOworbXkgJWltcGxJbmNsdWRlcyA9ICgpOworCisjIERlZmF1bHQgLmggdGVtcGxhdGUKK215
ICRoZWFkZXJUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBr
ZG9taWRsLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorKi8KK0VPRgorCisjIERlZmF1bHQgY29uc3RydWN0b3IKK3N1
YiBuZXcKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAkcmVmZXJlbmNlID0geyB9Owor
CisgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7CisgICRvdXRwdXREaXIgPSBzaGlmdDsKKworICBi
bGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKKyAgcmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1
YiBmaW5pc2gKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgICMgQ29tbWl0IGNoYW5nZXMh
CisgICRvYmplY3QtPldyaXRlRGF0YSgpOworfQorCitzdWIgRmlsZUlzTmV3ZXIKK3sKKyAgbXkg
JGZpbGVOYW1lID0gc2hpZnQ7CisgIG15ICRtdGltZSA9IHNoaWZ0OworICAKKyAgbXkgJHN0YXRJ
bmZvID0gc3RhdCgkZmlsZU5hbWUpOworICAKKyAgaWYgKCFkZWZpbmVkKCRzdGF0SW5mbykpIHsK
KyAgICAjIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgaXQgY2FuJ3QgYmUgbmV3ZXIKKyAgICBy
ZXR1cm4gMDsKKyAgfQorICAKKyAgcmV0dXJuICgkc3RhdEluZm8tPm10aW1lID4gJG10aW1lKTsK
K30KKworc3ViIFNob3VsZEdlbmVyYXRlRmlsZXMKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0Owor
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsgIAorICBteSAkbmFtZSA9IHNoaWZ0OworCisgIG15ICRp
ZGxtdGltZSA9IHN0YXQoJGRhdGFOb2RlLT5maWxlTmFtZSktPm10aW1lOworICAKKyAgaWYgKEZp
bGVJc05ld2VyKCIkb3V0cHV0RGlyL0pTJG5hbWUuaCIsICRpZGxtdGltZSkpIHsKKyAgICByZXR1
cm4gMDsKKyAgfQorCisgIGlmIChGaWxlSXNOZXdlcigiJG91dHB1dERpci9KUyRuYW1lLmNwcCIs
ICRpZGxtdGltZSkpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICAKKyMgIG15ICRoZWFkZXJGaWxl
TmFtZSA9IDsKKyMgIG15ICRpbXBsRmlsZU5hbWUgPSAiJG91dHB1dERpci9KUyRuYW1lLmNwcCI7
CisKKyAgcmV0dXJuIDE7Cit9CisKKyMgUGFyYW1zOiAnZG9tQ2xhc3MnIHN0cnVjdAorc3ViIEdl
bmVyYXRlSW50ZXJmYWNlCit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2Rl
ID0gc2hpZnQ7CisKKyAgIyBGSVhNRTogQ2hlY2sgZGF0ZXMgdG8gc2VlIGlmIHdlIG5lZWQgdG8g
cmUtZ2VuZXJhdGUgYW55dGhpbmcKKyAgCisgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24uLgor
IyAgcHJpbnQgIiAgfCAgfD4gIEdlbmVyYXRpbmcgaGVhZGVyLi4uXG4iOworICAkb2JqZWN0LT5H
ZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOworICAKKyMgIHByaW50ICIgIHwgIHw+ICBHZW5lcmF0
aW5nIGltcGxlbWVudGF0aW9uLi4uXG4iOworICAkb2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVudGF0
aW9uKCRkYXRhTm9kZSk7CisKKyAgbXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgIAorICAj
IE9wZW4gZmlsZXMgZm9yIHdyaXRpbmcuLi4KKyAgbXkgJGhlYWRlckZpbGVOYW1lID0gIiRvdXRw
dXREaXIvSlMkbmFtZS5oIjsKKyAgbXkgJGltcGxGaWxlTmFtZSA9ICIkb3V0cHV0RGlyL0pTJG5h
bWUuY3BwIjsKKworICBvcGVuKCRJTVBMLCAiPiRpbXBsRmlsZU5hbWUiKSB8fCBkaWUgIkNvdWRs
bid0IG9wZW4gZmlsZSAkaW1wbEZpbGVOYW1lIjsKKyAgb3BlbigkSEVBREVSLCAiPiRoZWFkZXJG
aWxlTmFtZSIpIHx8IGRpZSAiQ291ZGxuJ3Qgb3BlbiBmaWxlICRoZWFkZXJGaWxlTmFtZSI7CisK
KyMgIHByaW50ICIgfC1cbiB8XG4iOworfQorCisjIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1
Y3QKK3N1YiBHZW5lcmF0ZU1vZHVsZQoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OyAgCisgIAorICAkbW9kdWxlID0gJGRhdGFOb2RlLT5tb2R1bGU7CisK
K30KKworc3ViIEdldFBhcmVudENsYXNzTmFtZQoreworICBteSAkZGF0YU5vZGUgPSBzaGlmdDsK
KyAgCisgIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCkgeworICAgIHJldHVybiAiS0pT
OjpET01PYmplY3QiOworICB9CisgIAorICAjIENoZWNrIGlmIHRoZXJlJ3MgYSBsZWdhY3kgcGFy
ZW50IGNsYXNzIHNldCBhbmQKKyAgIyB1c2UgaXQuCisgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSkgeworICAgIHJldHVybiAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgfSBlbHNlIHsKKyAgICByZXR1
cm4gIkpTIiAuICRkYXRhTm9kZS0+cGFyZW50cygwKTsKKyAgfQorfQorCitzdWIgR2V0TGVnYWN5
SGVhZGVySW5jbHVkZXMKK3sKKyAgaWYgKCRtb2R1bGUgZXEgImV2ZW50cyIpIHsKKyAgICByZXR1
cm4gIiNpbmNsdWRlIFwia2pzX2V2ZW50cy5oXCJcblxuIjsKKyAgfSBlbHNpZiAoJG1vZHVsZSBl
cSAiY29yZSIpIHsKKyAgICByZXR1cm4gIiNpbmNsdWRlIFwia2pzX2RvbS5oXCJcblxuIjsKKyAg
fSBlbHNlIHsKKyAgICBkaWUgKCJEb24ndCBrbm93IHdoYXQgaGVhZGVycyB0byBpbmNsdWRlIGZv
ciBtb2R1bGUgJG1vZHVsZSIpOworICB9Cit9CisKK3N1YiBHZXRMZWdhY3lJbXBsZW1lbnRhdGlv
bkluY2x1ZGVzCit7CisgIGlmICgkbW9kdWxlIGVxICJldmVudHMiKSB7CisgICAgcmV0dXJuICIj
aW5jbHVkZSBcImRvbTJfZXZlbnRzaW1wbC5oXCJcbiI7CisgIH0gZWxzaWYgKCRtb2R1bGUgZXEg
ImNvcmUiKSB7CisgICAgcmV0dXJuICIjaW5jbHVkZSBcImRvbV90ZXh0aW1wbC5oXCJcbiI7Cisg
IH0gZWxzZSB7CisgICAgZGllICgiRG9uJ3Qga25vdyB3aGF0IGhlYWRlcnMgdG8gaW5jbHVkZSBm
b3IgbW9kdWxlICRtb2R1bGUiKTsKKyAgfSAgCit9CisKK3N1YiBHZW5lcmF0ZUhlYWRlcgorewor
ICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgIG15ICRp
bnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICBteSAkY2xhc3NOYW1lID0gIkpTJGlu
dGVyZmFjZU5hbWUiOworICBteSAkaW1wbENsYXNzTmFtZSA9ICRpbnRlcmZhY2VOYW1lIC4gIklt
cGwiOworICAKKyAgIyBGSVhNRTogSWYgd2UncmUgc3VyZSB0aGF0IGFuIGludGVyZmFjZSBjYW4n
dCBoYXZlIG1vcmUgdGhhbgorICAjIG9uZSBwYXJlbnQgd2UgY2FuIGRvIHRoZSBjaGVjayBpbiB0
aGUgcGFyc2VyIGluc3RlYWQKKyAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSA+IDEpIHsKKyAg
ICBkaWUgIkEgY2xhc3MgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIHBhcmVudCI7CisgIH0KKyAg
CisgIG15ICRoYXNQYXJlbnQgPSBAeyRkYXRhTm9kZS0+cGFyZW50c30gPiAwOworICBteSAkcGFy
ZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7CisgIAorICAjIC0g
QWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgIEBoZWFkZXJDb250ZW50ID0gc3BsaXQoIlxy
IiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAjIC0gQWRkIGhlYWRlciBwcm90ZWN0aW9uCisgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbiNpZm5kZWYgJGNsYXNzTmFtZSIgLiAiX0giKTsKKyAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJfSFxuXG4iKTsKKyAg
CisgIGlmIChleGlzdHMgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFy
ZW50In0pIHsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZXRMZWdhY3lIZWFkZXJJbmNsdWRl
cygpKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoJGhhc1BhcmVudCkgeworICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHBhcmVudENsYXNzTmFtZS5oXCJcbiIpOworICAgIH0g
ZWxzZSB7CisgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJranNfYmluZGlu
Zy5oXCJcbiIpOworICAgIH0KKyAgfQorICAKKyAgbXkgJG51bUF0dHJpYnV0ZXMgPSBAeyRkYXRh
Tm9kZS0+YXR0cmlidXRlc307CisgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRkYXRhTm9kZS0+ZnVu
Y3Rpb25zfTsKKyAgCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3Jl
IHtcblxuIik7CisgIAorICAjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvcndhcmQgZGVjbGFyYXRp
b24KKyAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRpbXBsQ2xhc3NOYW1lO1xuXG4iKTsK
KworICAjIENsYXNzIGRlY2xhcmF0aW9uCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAk
Y2xhc3NOYW1lIDogcHVibGljICRwYXJlbnRDbGFzc05hbWUge1xuIik7CisgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKKyAgCisgICMgQ29uc3RydWN0b3IKKyAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlKiwgJGltcGxDbGFzc05h
bWUqKTtcbiIpOworICAgIAorICAjIERlc3RydWN0b3IKKyAgIyBGSVhNRTogSWYgd2Uga25vdyB0
aGF0IGEgY2xhc3MgY2FuJ3QgaGF2ZSBzdWJjbGFzc2VzLCB3ZSBkb24ndCBuZWVkIGEgdmlydHVh
bCBkZXN0cnVjdG9yCisgIGlmICghJGhhc1BhcmVudCkgeworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdmlydHVhbCB+JGNsYXNzTmFtZSgpO1xuIik7CisgIH0KKyAgCisgICMgR2V0dGVy
cworICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwgY29u
c3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgS0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDtcbiIpOworICB9CisgIAorICAjIENoZWNrIGlm
IHdlIGhhdmUgYW55IHdyaXRhYmxlIHByb3BlcnRpZXMKKyAgbXkgJGhhc1JlYWRXcml0ZVByb3Bl
cnRpZXMgPSAwOworICBmb3JlYWNoKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgIGlm
KCRfLT50eXBlICF+IC9ecmVhZG9ubHlcIGF0dHJpYnV0ZSQvKSB7CisgICAgICAkaGFzUmVhZFdy
aXRlUHJvcGVydGllcyA9IDE7CisgICAgfQorICB9CisgIAorICBpZiAoJGhhc1JlYWRXcml0ZVBy
b3BlcnRpZXMpIHsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBw
dXQoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUq
LCBpbnQgYXR0ciA9IEtKUzo6Tm9uZSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCwgS0pTOjpKU1Zh
bHVlKiwgaW50KTtcbiIpOworICB9CisgIAorICAjIENsYXNzIGluZm8KKyAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfVxuIik7CisgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87XG4iKTsKKyAgCisgICMgQXR0cmlidXRl
IGFuZCBmdW5jdGlvbiBlbnVtcworICBpZiAoJG51bUF0dHJpYnV0ZXMgKyAkbnVtRnVuY3Rpb25z
ID4gMCkgeworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgZW51bSB7XG4iKQorICB9Cisg
IAorICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAgICAgLy8gQXR0cmlidXRlc1xuICAgICAgICAiKTsKKyAgICAKKyAgICBteSAkaSA9IC0x
OworICAgIGZvcmVhY2goQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICBteSAkYXR0
cmlidXRlID0gJF87CisKKyAgICAgICRpKys7CisgICAgICBpZigoKCRpICUgNCkgZXEgMCkgYW5k
ICgkaSBuZSAwKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4gICAgICAgICIp
OworICAgICAgfQorCisgICAgICBteSAkdmFsdWUgPSB1Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+bmFtZSk7CisgICAgICAkdmFsdWUgLj0gIiwgIiBpZigoJGkgPCAkbnVtQXR0cmlidXRl
cyAtIDEpKTsKKyAgICAgICR2YWx1ZSAuPSAiLCAiIGlmKCgkaSBlcSAkbnVtQXR0cmlidXRlcyAt
IDEpIGFuZCAoJG51bUZ1bmN0aW9ucyBuZSAwKSk7CisgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAkdmFsdWUpOworICAgIH0KKyAgfQorICAKKyAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7Cisg
ICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkgeworICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlxuXG4iKTsKKyAgICB9CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwiICAgICAgICAvLyBGdW5j
dGlvbnNcbiAgICAgICAgIik7CisKKyAgICAkaSA9IC0xOworICAgIGZvcmVhY2goQHskZGF0YU5v
ZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgIG15ICRmdW5jdGlvbiA9ICRfOworCisgICAgICAkaSsr
OworICAgICAgaWYgKCgoJGkgJSA0KSBlcSAwKSBhbmQgKCRpIG5lIDApKSB7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbiAgICAgICAgIik7CisgICAgICB9CisKKyAgICAgIG15ICR2
YWx1ZSA9IHVjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOworICAgICAgJHZhbHVl
IC49ICIsICIgaWYgKCRpIDwgJG51bUZ1bmN0aW9ucyAtIDEpOworICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgJHZhbHVlKTsKKyAgICB9CisgIH0KKyAgCisgIGlmICgkbnVtQXR0cmlidXRlcyAr
ICRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuICAgIH07
XG4iKTsKKyAgfQorCisgIGlmICghJGhhc1BhcmVudCkgeworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH1c
biIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIFJlZlB0cjwkaW1wbENsYXNzTmFtZT4gbV9pbXBsO1xuIik7
CisgIH0KKyAgCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKKyAgCisgICMgQWRk
IHByb3RvdHlwZSBkZWNsYXJhdGlvbgorICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsgICAgCisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIktKU19ERUZJTkVfUFJPVE9UWVBFKCR7Y2xhc3NOYW1l
fVByb3RvKTtcblxuIik7CisgIH0KKyAgCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiNl
bmRpZlxuIik7Cit9CisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCit7CisgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgIAorICBteSAkaW50ZXJmYWNl
TmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VO
YW1lIjsKKyAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICJJbXBsIjsKKyAg
CisgIG15ICRoYXNQYXJlbnQgPSBAeyRkYXRhTm9kZS0+cGFyZW50c30gPiAwOworICBteSAkcGFy
ZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7CisgIAorICAjIC0g
QWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgIEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0
KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CisgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4j
aW5jbHVkZSBcImNvbmZpZy5oXCJcbiIpOworICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNp
bmNsdWRlIFwiJGNsYXNzTmFtZS5oXCJcblxuIik7CisKKyAgaWYgKGV4aXN0cyAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSkgeworICAgIHB1c2goQGltcGxD
b250ZW50SGVhZGVyLCBHZXRMZWdhY3lJbXBsZW1lbnRhdGlvbkluY2x1ZGVzKCkpOworICB9IGVs
c2UgeworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkaW1wbENsYXNz
TmFtZS5oXCJcblxuIik7CisgIH0KKworICBAaW1wbENvbnRlbnQgPSAoKTsKKworICBwdXNoKEBp
bXBsQ29udGVudCwgIlxudXNpbmcgbmFtZXNwYWNlIEtKUztcblxuIik7ICAKKyAgcHVzaChAaW1w
bENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAKKyAgIyAtIEFkZCBhbGwg
YXR0cmlidXRlcyBpbiBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCisgIG15ICRudW1BdHRyaWJ1dGVz
ID0gQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OworICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7
CisgICAgbXkgJGhhc2hTaXplID0gJG51bUF0dHJpYnV0ZXM7CisgICAgbXkgJGhhc2hOYW1lID0g
JGNsYXNzTmFtZSAuICJUYWJsZSI7CisKKyAgICBteSBAaGFzaEtleXMgPSAoKTsgICAgICAjIGll
LiAnaW5zZXJ0QmVmb3JlJworICAgIG15IEBoYXNoVmFsdWVzID0gKCk7ICAgICMgaWUuICdKU05v
ZGU6Okluc2VydEJlZm9yZScKKyAgICBteSBAaGFzaFNwZWNpYWxzID0gKCk7ICAgICMgaWUuICdE
b250RGVsZXRlfEZ1bmN0aW9uJworICAgIG15IEBoYXNoUGFyYW1ldGVycyA9ICgpOyAgIyBpZS4g
JzInCisKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVz
fSkgeworICAgICAgbXkgJG5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICBwdXNoKEBoYXNoS2V5cywgJG5hbWUpOworICAgICAgCisgICAgICBteSAkdmFsdWUgPSAkY2xh
c3NOYW1lIC4gIjo6IiAuIHVjZmlyc3QoJG5hbWUpOworICAgICAgcHVzaChAaGFzaFZhbHVlcywg
JHZhbHVlKTsKKworICAgICAgbXkgJHNwZWNpYWwgPSAiRG9udERlbGV0ZSI7CisgICAgICAkc3Bl
Y2lhbCAuPSAifFJlYWRPbmx5IiBpZigkYXR0cmlidXRlLT50eXBlID1+IC9yZWFkb25seS8pOwor
ICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7CisKKyAgICAgIG15ICRudW1QYXJh
bWV0ZXJzID0gIjAiOworICAgICAgcHVzaChAaGFzaFBhcmFtZXRlcnMsICRudW1QYXJhbWV0ZXJz
KTsgICAgICAKKyAgICB9CisKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJsZSgkaGFzaE5h
bWUsICRoYXNoU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBc
QGhhc2hWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaFNwZWNpYWxz
LCBcQGhhc2hQYXJhbWV0ZXJzKTsKKyAgfQorICAKKyAgIyAtIEFkZCBhbGwgZnVuY3Rpb25zIGlu
IGEgaGFzaHRhYmxlIGRlZmluaXRpb24sIGlmIHdlIGhhdmUgYW55LgorICBteSAkbnVtRnVuY3Rp
b25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisgIGlmICgkbnVtRnVuY3Rpb25zIG5lIDAp
IHsKKyAgICAkaGFzaFNpemUgPSAkbnVtRnVuY3Rpb25zOworICAgICRoYXNoTmFtZSA9ICRjbGFz
c05hbWUgLiAiUHJvdG9UYWJsZSI7CisKKyAgICBAaGFzaEtleXMgPSAoKTsKKyAgICBAaGFzaFZh
bHVlcyA9ICgpOworICAgIEBoYXNoU3BlY2lhbHMgPSAoKTsKKyAgICBAaGFzaFBhcmFtZXRlcnMg
PSAoKTsKKworICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25z
fSkgeworICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAg
IHB1c2goQGhhc2hLZXlzLCAkbmFtZSk7CisgICAgCisgICAgICBteSAkdmFsdWUgPSAkY2xhc3NO
YW1lIC4gIjo6IiAuIHVjZmlyc3QoJG5hbWUpOworICAgICAgcHVzaChAaGFzaFZhbHVlcywgJHZh
bHVlKTsKKyAgICAKKyAgICAgIG15ICRzcGVjaWFsID0gIkRvbnREZWxldGV8RnVuY3Rpb24iOwor
ICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7CisgICAgCisgICAgICBteSAkbnVt
UGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgIHB1c2goQGhhc2hQ
YXJhbWV0ZXJzLCAkbnVtUGFyYW1ldGVycyk7CisgICAgfQorICAgIAorICAgICRvYmplY3QtPkdl
bmVyYXRlSGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxAaGFzaEtleXMsIFxAaGFzaFZhbHVlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcQGhhc2hTcGVjaWFscywgXEBoYXNoUGFyYW1ldGVycyk7CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIktKU19JTVBMRU1FTlRfUFJPVE9GVU5DKCR7Y2xhc3NOYW1lfVBy
b3RvRnVuYylcbiIpOworCisgICAgaWYgKCRoYXNQYXJlbnQpIHsKKyAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfV0lUSF9QQVJFTlQoXCIkaW50ZXJmYWNl
TmFtZVwiLCAiIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtjbGFzc05hbWV9UHJvdG8s
ICR7Y2xhc3NOYW1lfVByb3RvRnVuYywgJHtwYXJlbnRDbGFzc05hbWV9UHJvdG8pXG5cbiIpOwor
ICAgIH0gZWxzZSB7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIktKU19JTVBMRU1FTlRfUFJP
VE9UWVBFKFwiJGNsYXNzTmFtZVwiLCAke2NsYXNzTmFtZX1Qcm90bywgJHtjbGFzc05hbWV9UHJv
dG9GdW5jKVxuXG4iKTsKKyAgICB9CisgIAorICB9CisgIAorICAjIC0gSW5pdGlhbGl6ZSBzdGF0
aWMgQ2xhc3NJbmZvIG9iamVjdAorICBwdXNoKEBpbXBsQ29udGVudCwgImNvbnN0IENsYXNzSW5m
byAkY2xhc3NOYW1lIiAuICI6OmluZm8gPSB7IFwiJGludGVyZmFjZU5hbWVcIiwgIik7CisgIGlm
ICgkaGFzUGFyZW50KSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICImIiAuJHBhcmVudENsYXNz
TmFtZSAuICI6OmluZm8sICIpOworICB9IGVsc2UgeworICAgIHB1c2goQGltcGxDb250ZW50LCAi
MCwgIik7CisgIH0KKyAgCisgIGlmICgkbnVtQXR0cmlidXRlcyA+IDApIHsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiYke2NsYXNzTmFtZX1UYWJsZSwgIik7CisgIH0gZWxzZSB7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIwLCAiKQorICB9CisgIHB1c2goQGltcGxDb250ZW50LCAiMCB9O1xu
XG4iKTsKKyAgICAKKyAgIyBDb25zdHJ1Y3RvcgorICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xh
c3NOYW1lfTo6JGNsYXNzTmFtZShFeGVjU3RhdGUqIGV4ZWMsICRpbXBsQ2xhc3NOYW1lKiBpbXBs
KVxuIik7CisgIGlmICgkaGFzUGFyZW50KSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
OiAkcGFyZW50Q2xhc3NOYW1lKGV4ZWMsIGltcGwpXG4iKTsKKyAgfSBlbHNlIHsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICA6IG1faW1wbChpbXBsKVxuIik7CisgIH0KKyAgCisgIGlmICgk
bnVtRnVuY3Rpb25zIG5lIDApIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiAgICBzZXRQ
cm90b3R5cGUoJHtjbGFzc05hbWV9UHJvdG86OnNlbGYoZXhlYykpO1xufVxuXG4iKTsKKyAgfSBl
bHNlIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbn1cblxuIik7ICAgIAorICB9CisgIAor
ICAjIERlc3RydWN0b3IKKyAgaWYgKCEkaGFzUGFyZW50KSB7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIke2NsYXNzTmFtZX06On4kY2xhc3NOYW1lKClcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuICAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdl
dCgpKTtcbn1cblxuIik7ICAgIAorICB9CisgIAorICAjIEF0dHJpYnV0ZXMKKyAgaWYgKCRudW1B
dHRyaWJ1dGVzIG5lIDApIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05h
bWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8JGNsYXNzTmFtZSwgJHBh
cmVudENsYXNzTmFtZT4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgIihleGVjLCAmJHtjbGFz
c05hbWV9VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG59XG5cbiIpOworICAKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7Y2xhc3NOYW1lfTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3RcbntcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsID0gc3RhdGljX2Nhc3Q8JGlt
cGxDbGFzc05hbWUqPihtX2ltcGwuZ2V0KCkpO1xuXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBzd2l0Y2ggKHRva2VuKSB7XG4iKTsKKworICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgCisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBj
YXNlICIgLiB1Y2ZpcnN0KCRuYW1lKSAuICI6XG4iKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsICJpbXBsLT4kbmFtZSgpIikgLiAiO1xuIik7CisgICAgfQorCisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgfVxuICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xufVxuXG4iKTsKKyAgICAK
KyAgICAjIENoZWNrIGlmIHdlIGhhdmUgYW55IHdyaXRhYmxlIGF0dHJpYnV0ZXMgYW5kIGlmIHRo
ZXkgcmFpc2UgZXhjZXB0aW9ucworICAgIG15ICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMDsK
KyAgICBteSAkcmFpc2VzRXhjZXB0aW9ucyA9IDA7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgIGlmKCRhdHRyaWJ1dGUtPnR5cGUg
IX4gL15yZWFkb25seVwgYXR0cmlidXRlJC8pIHsKKyAgICAgICAgJGhhc1JlYWRXcml0ZVByb3Bl
cnRpZXMgPSAxOworCisgICAgICAgIGlmIChAeyRhdHRyaWJ1dGUtPnJhaXNlc0V4Y2VwdGlvbnN9
KSB7CisgICAgICAgICAgJHJhaXNlc0V4Y2VwdGlvbnMgPSAxOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmICgkaGFzUmVhZFdyaXRlUHJvcGVydGllcykgeworICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0
dHIpXG4iKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuICAgIGxvb2t1cFB1dDwkY2xh
c3NOYW1lLCAkcGFyZW50Q2xhc3NOYW1lPiIgLgorICAgICAgICAgICAgICAgICAgICAgICAgICIo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJiR7Y2xhc3NOYW1lfVRhYmxlLCB0aGlz
KTtcbn1cblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IC8qYXR0ciovKVxuIik7CisgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25z
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpO1xuIik7CisgICAgICB9CisgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1l
Kj4obV9pbXBsLmdldCgpKTtcblxuIik7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBz
d2l0Y2ggKHRva2VuKSB7XG4iKTsKKyAgICAgIAorICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgaWYoJGF0dHJpYnV0ZS0+dHlw
ZSAhfiAvXnJlYWRvbmx5XCBhdHRyaWJ1dGUkLykgeworICAgICAgICAgIG15ICRuYW1lID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGNhc2UgIiAuIHVjZmlyc3QoJG5hbWUpIC4iOlxuIik7CisgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIGltcGwtPnNldCIgLiB1Y2ZpcnN0KCRuYW1lKSAuICIoIiAuIEpT
VmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpKTsKKyAgICAgICAg
ICBpZiAoQHskYXR0cmlidXRlLT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIsIGV4Y2VwdGlvbiIpCisgICAgICAgICAgfQorICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiKTtcbiAgICAgICAgYnJlYWs7XG4iKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxufVxuXG4iKTsKKyAgICAgIAor
ICAgIH0KKyAgfQorICAKKyAgIyBGdW5jdGlvbnMKKyAgaWYoJG51bUZ1bmN0aW9ucyBuZSAwKSB7
CisgICAgbXkgJHJhaXNlc0V4Y2VwdGlvbnMgPSAwOworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRo
ZSBmdW5jdGlvbnMgdGhyb3cgZXhjZXB0aW9ucworICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChA
eyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNF
eGNlcHRpb25zfSkgeworICAgICAgICAkcmFpc2VzRXhjZXB0aW9ucyA9IDE7CisgICAgICB9Cisg
ICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtjbGFzc05hbWV9UHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JiBhcmdzKVxue1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmJHtjbGFzc05hbWV9OjppbmZvKSlcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTtc
blxuIik7CisKKyAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKKyAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpO1xuIik7
CisgICAgfQorICAgIAorICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1l
KiBpbXBsID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4odGhpc09iaiktPmltcGwoKSk7XG5cbiIpOworICAgIAorICAgIAorICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHN3aXRjaCAoaWQpIHtcbiIpOworICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeyAgICAgIAorICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgY2FzZSAke2NsYXNzTmFtZX06OiIgLiB1Y2ZpcnN0KCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lKSAuICI6IHtcbiIpOworICAgICAgCisgICAgICBteSAkcGFyYW1JbmRleCA9
IDA7CisgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wbC0+IiAuICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIC4gIigiOworICAgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc307CisgICAgICAKKyAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+
bmFtZTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICIgLiBHZXROYXRpdmVU
eXBlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRl
ciwgImFyZ3NbJHBhcmFtSW5kZXhdIikgLiAiO1xuIik7ICAgICAgICAKKyAgICAgICAgJHBhcmFt
SW5kZXgrKzsKKyAgICAgICAgCisgICAgICAgIGlmICgkcGFyYW1JbmRleCA8ICRudW1QYXJhbWV0
ZXJzKSB7CisgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIkbmFtZSwgIjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiRuYW1lIjsKKyAgICAgICAg
fSAgICAgICAgIAorICAgICAgfQorICAKKyAgICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhj
ZXB0aW9uc30pIHsKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsIGV4Y2VwdGlvbikiOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIpIjsKKyAgICAgIH0K
KyAgICAgIAorICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJ2b2lkIikg
eworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgICAgICAkZnVuY3Rpb25TdHJpbmc7
XG4gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgICAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJGZ1bmN0aW9uU3RyaW5nKSAuICI7XG4iKTsKKyAg
ICAgIH0KKyAgICAgIAorICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAg
fQorICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG4iKQorICB9CisgIAorICBwdXNoKEBpbXBsQ29udGVudCwgIlxufVxuIik7Cit9CisK
K3N1YiBHZXROYXRpdmVUeXBlCit7CisgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgCisgIG15
ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKKyAgCisgIGlmICgkdHlwZSBlcSAiYm9vbGVhbiIp
IHsKKyAgICByZXR1cm4gImJvb2wiOworICB9IGVsc2lmICgkdHlwZSBlcSAidW5zaWduZWQgbG9u
ZyIpIHsKKyAgICByZXR1cm4gInVuc2lnbmVkIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgImxvbmci
KSB7CisgICAgcmV0dXJuICJpbnQiOworICB9IGVsc2lmICgkdHlwZSBlcSAidW5zaWduZWQgc2hv
cnQiKSB7CisgICAgcmV0dXJuICJ1bnNpZ25lZCBzaG9ydCI7CisgIH0gZWxzaWYgKCR0eXBlIGVx
ICJBdG9taWNTdHJpbmciKSB7CisgICAgcmV0dXJuICJBdG9taWNTdHJpbmciOworICB9IGVsc2lm
ICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgeworICAgIHJldHVybiAiRE9NU3RyaW5nIjsKKyAgfSBl
bHNpZiAoJHR5cGUgZXEgInZpZXdzOjpBYnN0cmFjdFZpZXciKSB7CisgICAgcmV0dXJuICJBYnN0
cmFjdFZpZXdJbXBsKiI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJOb2RlIikgeworICAgIHJldHVy
biAiTm9kZUltcGwqIjsKKyAgfSBlbHNlIHsKKyAgICBkaWUgIkRvbid0IGtub3cgaG93IHRoZSBu
YXRpdmUgdHlwZSBvZiAkdHlwZSI7CisgIH0KK30KKworc3ViIEpTVmFsdWVUb05hdGl2ZQorewor
ICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAKKyAgbXkg
JHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOworCisgIGlmICgkdHlwZSBlcSAiYm9vbGVhbiIpIHsK
KyAgICByZXR1cm4gIiR2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpIjsKKyAgfSBlbHNpZiAoJHR5cGUg
ZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJsb25nIikgeworICAgIHJldHVybiAiJHZh
bHVlLT50b0ludDMyKGV4ZWMpIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0
IikgeworICAgIHJldHVybiAiJHZhbHVlLT50b0ludDMyKGV4ZWMpIjsKKyAgfSBlbHNpZiAoJHR5
cGUgZXEgIkF0b21pY1N0cmluZyIpIHsKKyAgICByZXR1cm4gIkF0b21pY1N0cmluZygkdmFsdWUt
PnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJET01T
dHJpbmciKSB7CisgICAgcmV0dXJuICIkdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygp
IjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgInZpZXdzOjpBYnN0cmFjdFZpZXciKSB7CisgICAgJGlt
cGxJbmNsdWRlc3sia2pzX3ZpZXdzLmgifSA9IDE7CisgICAgcmV0dXJuICJ0b0Fic3RyYWN0Vmll
dygkdmFsdWUpIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgIk5vZGUiKSB7CisgICAgJGltcGxJbmNs
dWRlc3sia2pzX2RvbS5oIn0gPSAxOworICAgIHJldHVybiAidG9Ob2RlKCR2YWx1ZSkiOworICB9
IGVsc2UgeworICAgIGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9m
IHR5cGUgJHR5cGUuIgorICB9Cit9CisKK3N1YiBOYXRpdmVUb0pTVmFsdWUKK3sKKyAgbXkgJHNp
Z25hdHVyZSA9IHNoaWZ0OworICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgCisgIG15ICR0eXBlID0g
JHNpZ25hdHVyZS0+dHlwZTsKKyAgCisgIGlmICgkdHlwZSBlcSAiYm9vbGVhbiIpIHsKKyAgICBy
ZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgImxvbmciIG9y
ICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIikgeworICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CisgICAgcmV0dXJuICJqc1N0
cmluZygkdmFsdWUpIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgIk5vZGUiIG9yICR0eXBlIGVxICJU
ZXh0IikgeworICAgICMgQWRkIG5lY2Vzc2FyeSBpbmNsdWRlcworICAgICRpbXBsSW5jbHVkZXN7
Imtqc19kb20uaCJ9ID0gMTsgICAKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlSW1wbC5oIn0gPSAx
OyAgICAgCisgICAgcmV0dXJuICJnZXRET01Ob2RlKGV4ZWMsICR2YWx1ZSkiOworICB9IGVsc2Ug
eworICAgIGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5
cGUgdG8gYSBKUyBWYWx1ZSI7CisgIH0KKyAgCisgIGRpZSAoIiR2YWx1ZSAiIC4gJHNpZ25hdHVy
ZS0+dHlwZSk7Cit9CisKKyMgSW50ZXJuYWwgSGVscGVyCitzdWIgR2VuZXJhdGVIYXNoVGFibGUK
K3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgIG15ICRuYW1lID0gc2hpZnQ7CisgIG15ICRz
aXplID0gc2hpZnQ7CisgIG15ICRrZXlzID0gc2hpZnQ7CisgIG15ICR2YWx1ZXMgPSBzaGlmdDsK
KyAgbXkgJHNwZWNpYWxzID0gc2hpZnQ7CisgIG15ICRwYXJhbWV0ZXJzID0gc2hpZnQ7CisKKyAg
IyBIZWxwZXJzCisgIG15IEB0YWJsZSA9ICgpOworICBteSBAbGlua3MgPSAoKTsKKworICBteSAk
bWF4RGVwdGggPSAwOworICBteSAkY29sbGlzaW9ucyA9IDA7CisgIG15ICRzYXZlZFNpemUgPSAk
c2l6ZTsKKworICAjIENvbGxlY3QgaGFzaHRhYmxlIGluZm9ybWF0aW9uLi4uCisgIG15ICRpID0g
MDsKKyAgZm9yZWFjaChAeyRrZXlzfSkgeworICAgIG15ICRkZXB0aCA9IDA7CisgICAgbXkgJGgg
PSAkb2JqZWN0LT5HZW5lcmF0ZUhhc2hWYWx1ZSgkXykgJSAkc2F2ZWRTaXplOworCisgICAgd2hp
bGUoZGVmaW5lZCgkdGFibGVbJGhdKSkgeworICAgICAgaWYoZGVmaW5lZCgkbGlua3NbJGhdKSkg
eworICAgICAgICAkaCA9ICRsaW5rc1skaF07CisgICAgICAgICRkZXB0aCsrOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgJGNvbGxpc2lvbnMrKzsKKyAgICAgICAgJGxpbmtzWyRoXSA9ICRzaXpl
OworICAgICAgICAkaCA9ICRzaXplOworICAgICAgICAkc2l6ZSsrOworICAgICAgfQorICAgIH0K
KyAgCisgICAgJHRhYmxlWyRoXSA9ICRpOworCisgICAgJGkrKzsKKyAgICAkbWF4RGVwdGggPSAk
ZGVwdGggaWYoJGRlcHRoID4gJG1heERlcHRoKTsKKyAgfQorCisgICMgRW5zdXJlIHRhYmxlIGlz
IGJpZyBlbm91Z2ggKGluIGNhc2Ugb2YgdW5kZWYgZW50cmllcyBhdCB0aGUgZW5kKQorICBpZigk
I3RhYmxlICsgMSA8ICRzaXplKSB7CisgICAgJCN0YWJsZSA9ICRzaXplIC0gMTsKKyAgfQorCisg
ICMgU3RhcnQgb3V0cHV0aW5nIHRoZSBoYXNodGFibGVzLi4uCisgIG15ICRuYW1lRW50cmllcyA9
ICIke25hbWV9RW50cmllcyI7CisgICRuYW1lRW50cmllcyA9fiBzLzovXy9nOworCisgICMgZmly
c3QsIGJ1aWxkIHRoZSBzdHJpbmcgdGFibGUKKyAgbXkgJXNvZmZzZXQgPSAoKTsKKyAgaWYoKCRu
YW1lID1+IC9Qcm90by8pIG9yICgkbmFtZSA9fiAvQ29uc3RydWN0b3IvKSkgeworICAgIG15ICR0
eXBlID0gJG5hbWU7CisgICAgbXkgJGltcGxDbGFzczsKKworICAgIGlmKCRuYW1lID1+IC9Qcm90
by8pIHsKKyAgICAgICR0eXBlID1+IHMvUHJvdG8uKi8vOworICAgICAgJGltcGxDbGFzcyA9ICR0
eXBlOyAkaW1wbENsYXNzID1+IHMvV3JhcHBlciQvLzsKKyAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovXG4iKTsKKyAgICB9IGVsc2UgeworICAg
ICAgJHR5cGUgPX4gcy9Db25zdHJ1Y3Rvci4qLy87CisgICAgICAkaW1wbENsYXNzID0gJHR5cGU7
ICRpbXBsQ2xhc3MgPX4gcy9Db25zdHJ1Y3RvciQvLzsKKyAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi9cbiIpOworICAgIH0KKyAgfSBlbHNl
IHsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8qIEhhc2ggdGFibGUgKi9cbiIpOworICB9CisK
KyAgIyBEdW1wIHRoZSBoYXNoIHRhYmxlLi4uCisgIHB1c2goQGltcGxDb250ZW50LCAiXG5zdGF0
aWMgY29uc3Qgc3RydWN0IEhhc2hFbnRyeSAkbmFtZUVudHJpZXNcW1xdID1cblx7XG4iKTsKKwor
ICAkaSA9IDA7CisgIGZvcmVhY2ggJGVudHJ5IChAdGFibGUpIHsKKyAgICBpZihkZWZpbmVkKCRl
bnRyeSkpIHsKKyAgICAgIG15ICRrZXkgPSBAJGtleXNbJGVudHJ5XTsKKworICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgXHsgXCIiIC4gJGtleSAuICJcIiIpOworICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIsICIgLiBAJHZhbHVlc1skZW50cnldKTsKKyAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiLCAiIC4gQCRzcGVjaWFsc1skZW50cnldKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiLCAiIC4gQCRwYXJhbWV0ZXJzWyRlbnRyeV0pOworICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIsICIpOworCisgICAgICBpZihkZWZpbmVkKCRsaW5rc1skaV0pKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiJiR7bmFtZUVudHJpZXN9WyRsaW5rc1skaV1dIiAuICIgXH0iKTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiMCBcfSIpOworICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBceyAwLCAwLCAw
LCAwLCAwIFx9Iik7CisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIsIikgdW5sZXNz
KCRpIGVxICRzaXplIC0gMSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworCisgICAg
JGkrKzsKKyAgfQorCisgIHB1c2goQGltcGxDb250ZW50LCAifTtcblxuIik7CisgIHB1c2goQGlt
cGxDb250ZW50LCAiY29uc3Qgc3RydWN0IEhhc2hUYWJsZSAkbmFtZSA9IFxuIik7CisgIHB1c2go
QGltcGxDb250ZW50LCAie1xuICAgIDIsICRzaXplLCAkbmFtZUVudHJpZXMsICRzYXZlZFNpemVc
bn07XG5cbiIpOworfQorCisjIEludGVybmFsIGhlbHBlcgorc3ViIEdlbmVyYXRlSGFzaFZhbHVl
Cit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKworICBAY2hhcnMgPSBzcGxpdCgvICovLCAkX1sw
XSk7CisKKyAgIyBUaGlzIGhhc2ggaXMgZGVzaWduZWQgdG8gd29yayBvbiAxNi1iaXQgY2h1bmtz
IGF0IGEgdGltZS4gQnV0IHNpbmNlIHRoZSBub3JtYWwgY2FzZQorICAjIChhYm92ZSkgaXMgdG8g
aGFzaCBVVEYtMTYgY2hhcmFjdGVycywgd2UganVzdCB0cmVhdCB0aGUgOC1iaXQgY2hhcnMgYXMg
aWYgdGhleQorICAjIHdlcmUgMTYtYml0IGNodW5rcywgd2hpY2ggc2hvdWxkIGdpdmUgbWF0Y2hp
bmcgcmVzdWx0cworCisgIG15ICRFWFAyXzMyID0gNDI5NDk2NzI5NjsKKworICBteSAkaGFzaCA9
IDB4OWUzNzc5Yjk7CisgIG15ICRsICAgID0gc2NhbGFyIEBjaGFyczsgI0kgd2lzaCB0aGlzIHdh
cyBpbiBSdWJ5IC0tLSBNYWtzCisgIG15ICRyZW0gID0gJGwgJiAxOworICAkbCA9ICRsID4+IDE7
CisKKyAgbXkgJHMgPSAwOworCisgICMgTWFpbiBsb29wCisgIGZvciAoOyAkbCA+IDA7ICRsLS0p
IHsKKyAgICAkaGFzaCAgICs9IG9yZCgkY2hhcnNbJHNdKTsKKyAgICBteSAkdG1wID0gKG9yZCgk
Y2hhcnNbJHMrMV0pIDw8IDExKSBeICRoYXNoOworICAgICRoYXNoICAgPSAoKCRoYXNoIDw8IDE2
KSUgJEVYUDJfMzIpIF4gJHRtcDsKKyAgICAkcyArPSAyOworICAgICRoYXNoICs9ICRoYXNoID4+
IDExOworICB9CisKKyAgIyBIYW5kbGUgZW5kIGNhc2UKKyAgaWYgKCRyZW0gIT0wKSB7CisgICAg
JGhhc2ggKz0gb3JkKCRjaGFyc1skc10pOworICAgICRoYXNoIF49ICgoJGhhc2ggPDwgMTEpJSAk
RVhQMl8zMik7CisgICAgJGhhc2ggKz0gJGhhc2ggPj4gMTc7CisgIH0KKworICAjIEZvcmNlICJh
dmFsYW5jaGluZyIgb2YgZmluYWwgMTI3IGJpdHMKKyAgJGhhc2ggXj0gKCRoYXNoIDw8IDMpOwor
ICAkaGFzaCArPSAoJGhhc2ggPj4gNSk7CisgICRoYXNoID0gKCRoYXNoJSAkRVhQMl8zMik7Cisg
ICRoYXNoIF49ICgoJGhhc2ggPDwgMiklICRFWFAyXzMyKTsKKyAgJGhhc2ggKz0gKCRoYXNoID4+
IDE1KTsKKyAgJGhhc2ggPSAkaGFzaCUgJEVYUDJfMzI7CisgICRoYXNoIF49ICgoJGhhc2ggPDwg
MTApJSAkRVhQMl8zMik7CisgIAorICAjIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFz
aCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAjIHNpZ25hbCAiaGFzaCBub3Qg
Y29tcHV0ZWQgeWV0IiwgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIGxpa2VseSB0byBiZQorICAjIGVm
ZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIDAgd2hlbiB0aGUgbG93IGJpdHMgYXJlIG1hc2tlZAorICAk
aGFzaCA9IDB4ODAwMDAwMDAgIGlmICgkaGFzaCA9PSAwKTsKKworICByZXR1cm4gJGhhc2g7Cit9
CisKKyMgSW50ZXJuYWwgaGVscGVyCitzdWIgV3JpdGVEYXRhCit7CisgIGlmIChkZWZpbmVkKCRJ
TVBMKSkgeworICAgICMgV3JpdGUgY29udGVudCB0byBmaWxlLgorICAgIHByaW50ICRJTVBMIEBp
bXBsQ29udGVudEhlYWRlcjsKKyAgCisgICAgZm9yZWFjaCBteSAkaW1wbEluY2x1ZGUgKHNvcnQg
a2V5cyglaW1wbEluY2x1ZGVzKSkgeworICAgICAgcHJpbnQgJElNUEwgIiNpbmNsdWRlIFwiJGlt
cGxJbmNsdWRlXCJcbiI7CisgICAgfQorCisgICAgcHJpbnQgJElNUEwgQGltcGxDb250ZW50Owor
ICAgIGNsb3NlKCRJTVBMKTsKKyAgICB1bmRlZigkSU1QTCk7CisKKyAgICBAaW1wbEhlYWRlckNv
bnRlbnQgPSAiIjsKKyAgICBAaW1wbENvbnRlbnQgPSAiIjsgICAgCisgICAgJWltcGxJbmNsdWRl
cyA9ICgpOworICB9CisKKyAgaWYgKGRlZmluZWQoJEhFQURFUikpIHsKKyAgICAjIFdyaXRlIGNv
bnRlbnQgdG8gZmlsZS4KKyAgICBwcmludCAkSEVBREVSIEBoZWFkZXJDb250ZW50OworICAgIGNs
b3NlKCRIRUFERVIpOworICAgIHVuZGVmKCRIRUFERVIpOworCisgICAgQGhlYWRlckNvbnRlbnQg
PSAiIjsKKyAgfQorfQorCisxOwpJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2
aXNpb24gMCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOTIgQEAKKyMKKyMgS0RPTSBJREwgcGFyc2VyCisjCisjIENvcHlyaWdo
dCAoYykgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyMKK3BhY2th
Z2UgQ29kZUdlbmVyYXRvcjsKKworbXkgJHVzZURvY3VtZW50ID0gIiI7CitteSAkdXNlR2VuZXJh
dG9yID0gIiI7CitteSAkdXNlT3V0cHV0RGlyID0gIiI7CitteSAkdXNlRGlyZWN0b3JpZXMgPSAi
IjsKK215ICR1c2VMYXllck9uVG9wID0gMDsKKworbXkgJGNvZGVHZW5lcmF0b3IgPSAwOworCisj
IFVzZWQgdG8gbWFwIGJldHdlZW4gbW9kdWxlcyAmIG5hbWVzcGFjZXMKK215ICVtb2R1bGVOYW1l
c3BhY2VIYXNoOworCisjIFVzZWQgdG8gbWFwIGJldHdlZW4gbW9kdWxlcyBhbmQgdGhlaXIgaW1w
bGVtZW50YXRpb24gbmFtZXNwYWNlcworbXkgJW1vZHVsZUltcGxlbWVudGF0aW9uTmFtZXNwYWNl
SGFzaDsKKworIyBIZWxwZXJzIGZvciAnU2NhbkRpcmVjdG9yeScKK215ICRlbmRDb25kaXRpb24g
PSAwOworbXkgJGZvdW5kRmlsZW5hbWUgPSAiIjsKK215IEBmb3VuZEZpbGVuYW1lcyA9ICgpOwor
CisjIERlZmF1bHQgY29uc3RydWN0b3IKK3N1YiBuZXcKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0
OworICBteSAkcmVmZXJlbmNlID0geyB9OworCisgICR1c2VEaXJlY3RvcmllcyA9IHNoaWZ0Owor
ICAkdXNlR2VuZXJhdG9yID0gc2hpZnQ7CisgICR1c2VPdXRwdXREaXIgPSBzaGlmdDsKKyAgJHVz
ZUxheWVyT25Ub3AgPSBzaGlmdDsKKworICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKKyAg
cmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBQcm9jZXNzRG9jdW1lbnQKK3sKKyAgbXkgJG9i
amVjdCA9IHNoaWZ0OworICAkdXNlRG9jdW1lbnQgPSBzaGlmdDsKKworICBteSAkaWZhY2VOYW1l
ID0gJHVzZUdlbmVyYXRvcjsKKyAgJGlmYWNlTmFtZSA9fiBzL1xiKFx3KS9cVSQxL2c7ICMgTWFr
ZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIHVwcGVyY2FzZQorICAkaWZhY2VOYW1lID0gIkNv
ZGVHZW5lcmF0b3IkaWZhY2VOYW1lIjsKKworICAjIER5bmFtaWNhbGx5IGxvYWQgZXh0ZXJuYWwg
Y29kZSBnZW5lcmF0aW9uIHBlcmwgbW9kdWxlLi4uCisgIHJlcXVpcmUgJGlmYWNlTmFtZSAuICIu
cG0iOworICAkY29kZUdlbmVyYXRvciA9ICRpZmFjZU5hbWUtPm5ldygkb2JqZWN0LCAkdXNlT3V0
cHV0RGlyLCAkdXNlTGF5ZXJPblRvcCk7CisKKyMgIHByaW50ICIgfCAqKiogU3RhcnRpbmcgdG8g
Z2VuZXJhdGUgY29kZSB1c2luZyBcIiRpZmFjZU5hbWVcIi4uLlxuIHxcbiI7CisKKyAgIyBTdGFy
dCB0aGUgYWN0dWFsIGNvZGUgZ2VuZXJhdGlvbiEKKyAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRl
TW9kdWxlKCR1c2VEb2N1bWVudCk7CisKKyAgbXkgJGFycmF5UmVmID0gJHVzZURvY3VtZW50LT5j
bGFzc2VzOworICBmb3JlYWNoKEAkYXJyYXlSZWYpIHsKKyAgICBteSAkY2xhc3MgPSAkXzsKKwor
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+U2hvdWxkR2VuZXJhdGVGaWxlcygkdXNlRG9jdW1lbnQs
ICRjbGFzcy0+bmFtZSkpIHsKKyAgICAgIHByaW50ICIgfC0gUHJvY2Vzc2luZyBpbnRlcmZhY2Ug
XCIiIC4gJGNsYXNzLT5uYW1lIC4gIlwiLi4uXG4iOworCisgICAgICAkY29kZUdlbmVyYXRvci0+
R2VuZXJhdGVJbnRlcmZhY2UoJGNsYXNzKTsKKyAgICB9CisgIH0KKworICAkY29kZUdlbmVyYXRv
ci0+ZmluaXNoKCk7CisKKyMgIHByaW50ICIgfCAqKiogRmluaXNoZWQgZ2VuZXJhdGlvbiFcbiI7
Cit9CisKKyMgSGVscGVyIGZvciBhbGwgQ29kZUdlbmVyYXRvcioqKi5wbSBtb2R1bGVzCitzdWIg
RmluZFRvcEJhc2VDbGFzcworeworICAjIElmIHlvdSBhcmUgcHJvY2Vzc2luZyB0aGUgJ0F0dHIn
IGludGVyZmFjZSwgaXQgaGFzIHRoZSBzaW5nbGUKKyAgIyBwYXJlbnQgaW50ZXJmYWNlICdOb2Rl
Jywgd2hpY2ggaXMgdGhlIHRvcG1vc3QgYmFzZSBjbGFzcy4gUmV0dXJuIGl0LgorICAjCisgICMg
SXQgZ2V0cyB0cmlja2llciBmb3IgaWUuIHRoZSAnTW91c2VFdmVudCcgaW50ZXJmYWNlLCB3aG9z
ZSBwYXJlbnQgaXMKKyAgIyB0aGUgJ1VJRXZlbnQnIGludGVyZmFjZSwgd2hvc2UgcGFyZW50IGlz
IHRoZSAnRXZlbnQnIGludGVyZmFjZS4gUmV0dXJuIGl0LgorICBteSAkb2JqZWN0ID0gc2hpZnQ7
CisKKyAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAkaW50ZXJmYWNlID1+IHMvW2EtekEtWjAt
OV0qOjovLzsgIyBTdHJpcCBtb2R1bGUuCisKKyAgbXkgJHRvcEJhc2VDbGFzcyA9ICIiOworICAK
KyAgIyBMb29wIHVudGlsIHdlIGZvdW5kIHRoZSB0b3AgbW9zdCBiYXNlIGNsYXNzIGZvciAnaW50
ZXJmYWNlJworICB3aGlsZSgkaW50ZXJmYWNlIG5lICIiKSB7CisgICAgIyBTdGVwICMxOiBGaW5k
IHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdpdGggJ2ludGVyZmFjZScKKyAgICAkZW5kQ29uZGl0
aW9uID0gMDsgJGZvdW5kRmlsZW5hbWUgPSAiIjsKKworICAgIGZvcmVhY2goQHskdXNlRGlyZWN0
b3JpZXN9KSB7CisgICAgICBpZigkZm91bmRGaWxlbmFtZSBlcSAiIikgeworICAgICAgICAkb2Jq
ZWN0LT5TY2FuRGlyZWN0b3J5KCIkaW50ZXJmYWNlLmlkbCIsICRfLCAkXywgMCk7CisgICAgICB9
CisgICAgfQorCisgICAgaWYoJGZvdW5kRmlsZW5hbWUgbmUgIiIpIHsKKyAgICAgIHByaW50ICIg
IHwgIHw+ICBQYXJzaW5nIHBhcmVudCBJREwgXCIkZm91bmRGaWxlbmFtZVwiIGZvciBpbnRlcmZh
Y2UgXCIkaW50ZXJmYWNlXCJcbiI7CisKKyAgICAgICMgU3RlcCAjMjogUGFyc2UgdGhlIGZvdW5k
IElETCBmaWxlIChpbiBxdWlldCBtb2RlKS4KKyAgICAgIG15ICRwYXJzZXIgPSBJRExQYXJzZXIt
Pm5ldygxKTsKKyAgICAgIG15ICRkb2N1bWVudCA9ICRwYXJzZXItPlBhcnNlKCRmb3VuZEZpbGVu
YW1lKTsKKworICAgICAgIyBTdGVwICMzOiBDaGVjayB3aGV0ZXIgdGhlIHBhcnNlZCBJREwgZmls
ZSBoYXMgcGFyZW50cworICAgICAgZm9yZWFjaChAeyRkb2N1bWVudC0+Y2xhc3Nlc30pIHsKKyAg
ICAgICAgbXkgJGNsYXNzID0gJF87CisKKyAgICAgICAgbXkgJHVzZUludGVyZmFjZSA9ICRpbnRl
cmZhY2U7CisKKyAgICAgICAgaWYoJGNsYXNzLT5uYW1lIGVxICR1c2VJbnRlcmZhY2UpIHsKKyAg
ICAgICAgICBteSBAcGFyZW50cyA9IEB7JGNsYXNzLT5wYXJlbnRzfTsKKyAgICAgICAgICBteSAk
cGFyZW50c01heCA9IEB7JGNsYXNzLT5wYXJlbnRzfTsKKworICAgICAgICAgICRpbnRlcmZhY2Ug
PSAiIjsKKworICAgICAgICAgICMgRXhjZXB0aW9uOiBGb3IgdGhlIERPTSAnTm9kZScgaXMgb3Vy
IHRvcG1vc3QgYmFzZWNsYXNzLCBub3QgRXZlbnRUYXJnZXQuCisgICAgICAgICAgaWYoKCRwYXJl
bnRzTWF4ID4gMCkgYW5kICgkcGFyZW50c1swXSBuZSAiZXZlbnRzOjpFdmVudFRhcmdldCIpKSB7
CisgICAgICAgICAgICAkaW50ZXJmYWNlID0gJHBhcmVudHNbMF07CisgICAgICAgICAgICAkaW50
ZXJmYWNlID1+IHMvW2EtekEtWjAtOV0qOjovLzsgIyBTdHJpcCBtb2R1bGU7CisgICAgICAgICAg
fSBlbHNpZighJGNsYXNzLT5ub0RQdHJGbGFnKSB7ICMgSW5jbHVkZSAnbW9kdWxlJyAuLi4KKyAg
ICAgICAgICAgICR0b3BCYXNlQ2xhc3MgPSAkZG9jdW1lbnQtPm1vZHVsZSAuICI6OiIgLiAkY2xh
c3MtPm5hbWU7CisgICAgICAgICAgfQorICAgICAgICB9ICAKKyAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgZGllKCJDb3VsZCBOT1QgZmluZCBzcGVjaWZpZWQgcGFyZW50IGludGVyZmFjZSBc
IiRpbnRlcmZhY2VcIiFcbiIpOworICAgIH0KKyAgfQorCisgIHJldHVybiAkdG9wQmFzZUNsYXNz
OworfQorCisjIEhlbHBlciBmb3IgYWxsIElETENvZGVHZW5lcmF0b3IqKioucG0gbW9kdWxlcwor
c3ViIENsYXNzSGFzV3JpdGVhYmxlQXR0cmlidXRlcworeworICAjIERldGVybWluZSB3aGV0ZXIg
YSBnaXZlbiBpbnRlcmZhY2UgaGFzIGFueSB3cml0ZWFibGUgYXR0cmlidXRlcy4uLgorICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisKKyAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAkaW50ZXJmYWNl
ID1+IHMvW2EtekEtWjAtOV0qOjovLzsgIyBTdHJpcCBtb2R1bGUuCisKKyAgbXkgJGhhc1dyaXRl
YWJsZUF0dHJpYnV0ZXMgPSAwOworICAKKyAgIyBTdGVwICMxOiBGaW5kIHRoZSBJREwgZmlsZSBh
c3NvY2lhdGVkIHdpdGggJ2ludGVyZmFjZScKKyAgJGVuZENvbmRpdGlvbiA9IDA7ICRmb3VuZEZp
bGVuYW1lID0gIiI7CisKKyAgZm9yZWFjaChAeyR1c2VEaXJlY3Rvcmllc30pIHsKKyAgICBpZigk
Zm91bmRGaWxlbmFtZSBlcSAiIikgeworICAgICAgJG9iamVjdC0+U2NhbkRpcmVjdG9yeSgiJGlu
dGVyZmFjZS5pZGwiLCAkXywgJF8sIDApOworICAgIH0KKyAgfQorCisgICMgU3RlcCAjMjogUGFy
c2UgdGhlIGZvdW5kIElETCBmaWxlIChpbiBxdWlldCBtb2RlKS4KKyAgbXkgJHBhcnNlciA9IElE
TFBhcnNlci0+bmV3KDEpOworICBteSAkZG9jdW1lbnQgPSAkcGFyc2VyLT5QYXJzZSgkZm91bmRG
aWxlbmFtZSk7CisKKyAgIyBTdGVwICMzOiBDaGVjayB3aGV0ZXIgdGhlIHBhcnNlZCBJREwgZmls
ZSBoYXMgcGFyZW50cworICBmb3JlYWNoKEB7JGRvY3VtZW50LT5jbGFzc2VzfSkgeworICAgIG15
ICRjbGFzcyA9ICRfOworCisgICAgaWYoJGNsYXNzLT5uYW1lIGVxICRpbnRlcmZhY2UpIHsKKyAg
ICAgIGZvcmVhY2goQHskY2xhc3MtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIGlmKCRfLT50eXBl
ICF+IC9ecmVhZG9ubHlcIGF0dHJpYnV0ZSQvKSB7CisgICAgICAgICAgJGhhc1dyaXRlYWJsZUF0
dHJpYnV0ZXMgPSAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJu
ICRoYXNXcml0ZWFibGVBdHRyaWJ1dGVzOworfQorCisjIEhlbHBlciBmb3IgYWxsIElETENvZGVH
ZW5lcmF0b3IqKioucG0gbW9kdWxlcworc3ViIEFsbENsYXNzZXNXaGljaEluaGVyaXRGcm9tCit7
CisgICMgRGV0ZXJtaW5lIHdoaWNoIGludGVyZmFjZXMgaW5oZXJpdCBmcm9tIHRoZSBwYXNzZWQg
b25lLi4uCisgIG15ICRvYmplY3QgPSBzaGlmdDsKKworICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
CisgICRpbnRlcmZhY2UgPX4gcy8oW2EtekEtWjAtOV0qOjopKi8vOyAjIFN0cmlwIG5hbWVzcGFj
ZShzKS4KKworICAjIFN0ZXAgIzE6IExvb3AgdGhyb3VnaCBhbGwgaW5jbHVkZWQgZGlyZWN0b3Jp
ZXMgdG8gc2NhbiBmb3IgYWxsIElETCBmaWxlcy4uLgorICBteSBAYWxsSURMRmlsZXMgPSAoKTsK
KyAgZm9yZWFjaChAeyR1c2VEaXJlY3Rvcmllc30pIHsKKyAgICAkZW5kQ29uZGl0aW9uID0gMDsK
KyAgICBAZm91bmRGaWxlbmFtZXMgPSAoKTsKKworICAgICRvYmplY3QtPlNjYW5EaXJlY3Rvcnko
ImFsbGlkbHMiLCAkXywgJF8sIDEpOworICAgIGZvcmVhY2goQGZvdW5kRmlsZW5hbWVzKSB7Cisg
ICAgICBwdXNoKEBhbGxJRExGaWxlcywgJF8pOworICAgIH0KKyAgfQorCisgICMgU3RlcCAjMjog
TG9vcCB0aHJvdWdoIGFsbCBmb3VuZCBJREwgZmlsZXMuLi4KKyAgbXkgJWNsYXNzRGF0YUNhY2hl
OworICBmb3JlYWNoKEBhbGxJRExGaWxlcykgeworICAgICMgU3RlcCAjMzogUGFyc2UgdGhlIGZv
dW5kIElETCBmaWxlIChpbiBxdWlldCBtb2RlKS4KKyAgICBteSAkcGFyc2VyID0gSURMUGFyc2Vy
LT5uZXcoMSk7CisgICAgbXkgJGRvY3VtZW50ID0gJHBhcnNlci0+UGFyc2UoJF8pOworCisgICAg
IyBTdGVwICM0OiBDYWNoZSB0aGUgcGFyc2VkIElETCBkYXRhc3RydWN0dXJlcy4KKyAgICBteSAk
Y2FjaGVIYW5kbGUgPSAkXzsgJGNhY2hlSGFuZGxlID1+IHMvLipcLyguKilcLmlkbC8vOworICAg
ICRjbGFzc0RhdGFDYWNoZXskMX0gPSAkZG9jdW1lbnQ7CisgIH0KKworICBteSAlY2xhc3NEYXRh
Q2FjaGVDb3B5ID0gJWNsYXNzRGF0YUNhY2hlOyAjIFByb3RlY3QhCisKKyAgIyBTdGVwICM1OiBM
b29wIHRocm91Z2ggYWxsIGNhY2hlZCBJREwgZG9jdW1lbnRzLi4uCisgIG15IEBjbGFzc0xpc3Qg
PSAoKTsKKyAgd2hpbGUobXkoJG5hbWUsICRkb2N1bWVudCkgPSBlYWNoICVjbGFzc0RhdGFDYWNo
ZSkgeworICAgICRlbmRDb25kaXRpb24gPSAwOworCisgICAgIyBTdGVwICM2OiBDaGVjayB3aGV0
ZXIgdGhlIHBhcnNlZCBJREwgZmlsZSBoYXMgcGFyZW50cy4uLgorICAgICRvYmplY3QtPlJlY3Vy
c2l2ZUluaGVyaXRhbmNlSGVscGVyKCRkb2N1bWVudCwgJGludGVyZmFjZSwgXEBjbGFzc0xpc3Qs
IFwlY2xhc3NEYXRhQ2FjaGVDb3B5KTsKKyAgfQorCisgICMgU3RlcCAjNzogUmV0dXJuIGxpc3Qg
b2YgYWxsIGNsYXNzZXMgd2hpY2ggaW5oZXJpdCBmcm9tIG1lIQorICByZXR1cm4gXEBjbGFzc0xp
c3Q7Cit9CisKKyMgSGVscGVyIGZvciBhbGwgSURMQ29kZUdlbmVyYXRvcioqKi5wbSBtb2R1bGVz
CitzdWIgQWxsQ2xhc3NlcworeworICAjIERldGVybWluZXMgYWxsIGludGVyZmFjZXMgd2l0aGlu
IGEgcHJvamVjdC4uLgorICBteSAkb2JqZWN0ID0gc2hpZnQ7CisKKyAgIyBTdGVwICMxOiBMb29w
IHRocm91Z2ggYWxsIGluY2x1ZGVkIGRpcmVjdG9yaWVzIHRvIHNjYW4gZm9yIGFsbCBJREwgZmls
ZXMuLi4KKyAgbXkgQGFsbElETEZpbGVzID0gKCk7CisgIGZvcmVhY2goQHskdXNlRGlyZWN0b3Jp
ZXN9KSB7CisgICAgJGVuZENvbmRpdGlvbiA9IDA7CisgICAgQGZvdW5kRmlsZW5hbWVzID0gKCk7
CisKKyAgICAkb2JqZWN0LT5TY2FuRGlyZWN0b3J5KCJhbGxpZGxzIiwgJF8sICRfLCAxKTsKKyAg
ICBmb3JlYWNoKEBmb3VuZEZpbGVuYW1lcykgeworICAgICAgcHVzaChAYWxsSURMRmlsZXMsICRf
KTsKKyAgICB9CisgIH0KKworICAjIFN0ZXAgIzI6IExvb3AgdGhyb3VnaCBhbGwgZm91bmQgSURM
IGZpbGVzLi4uCisgIG15IEBjbGFzc0xpc3QgPSAoKTsKKyAgZm9yZWFjaChAYWxsSURMRmlsZXMp
IHsKKyAgICAjIFN0ZXAgIzM6IFBhcnNlIHRoZSBmb3VuZCBJREwgZmlsZSAoaW4gcXVpZXQgbW9k
ZSkuCisgICAgbXkgJHBhcnNlciA9IElETFBhcnNlci0+bmV3KDEpOworICAgIG15ICRkb2N1bWVu
dCA9ICRwYXJzZXItPlBhcnNlKCRfKTsKKworICAgICMgU3RlcCAjNDogQ2hlY2sgaWYgY2xhc3Mg
aXMgYSBiYXNlY2xhc3MuLi4KKyAgICBmb3JlYWNoKEB7JGRvY3VtZW50LT5jbGFzc2VzfSkgewor
ICAgICAgbXkgJGNsYXNzID0gJF87CisKKyAgICAgIG15ICRpZGVudGlmaWVyID0gJGNsYXNzLT5u
YW1lOworICAgICAgbXkgJG5hbWVzcGFjZSA9ICRtb2R1bGVOYW1lc3BhY2VIYXNoeyRkb2N1bWVu
dC0+bW9kdWxlfTsKKyAgICAgICRpZGVudGlmaWVyID0gJG5hbWVzcGFjZSAuICI6OiIgLiAkaWRl
bnRpZmllciBpZigkbmFtZXNwYWNlIG5lICIiKTsKKworICAgICAgbXkgQGFycmF5ID0gZ3JlcCB7
IC9eJGlkZW50aWZpZXIkLyB9IEAkY2xhc3NMaXN0OworCisgICAgICBteSAkYXJyYXlTaXplID0g
QGFycmF5OworICAgICAgaWYoJGFycmF5U2l6ZSBlcSAwKSB7CisgICAgICAgIHB1c2goQGNsYXNz
TGlzdCwgJGlkZW50aWZpZXIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgICMgU3RlcCAjNzog
UmV0dXJuIGxpc3Qgb2YgYWxsIGJhc2UgY2xhc3NlcyEKKyAgcmV0dXJuIFxAY2xhc3NMaXN0Owor
fQorCisjIEludGVybmFsIGhlbHBlciBmb3IgJ0FsbENsYXNzZXNXaGljaEluaGVyaXRGcm9tJwor
c3ViIFJlY3Vyc2l2ZUluaGVyaXRhbmNlSGVscGVyCit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsK
KworICBteSAkZG9jdW1lbnQgPSBzaGlmdDsKKyAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICBt
eSAkY2xhc3NMaXN0ID0gc2hpZnQ7CisgIG15ICRjbGFzc0RhdGFDYWNoZSA9IHNoaWZ0OworCisg
IGlmKCRlbmRDb25kaXRpb24gZXEgMSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgZm9yZWFj
aChAeyRkb2N1bWVudC0+Y2xhc3Nlc30pIHsKKyAgICBteSAkY2xhc3MgPSAkXzsKKworICAgIGZv
cmVhY2goQHskY2xhc3MtPnBhcmVudHN9KSB7CisgICAgICBteSAkY2FjaGVIYW5kbGUgPSAkXzsK
KyAgICAgICRjYWNoZUhhbmRsZSA9fiBzL1thLXpBLVowLTldKjo6Ly87ICMgU3RyaXAgbW9kdWxl
LgorCisgICAgICBpZigkY2FjaGVIYW5kbGUgZXEgJGludGVyZmFjZSkgeworICAgICAgICBteSAk
aWRlbnRpZmllciA9ICRkb2N1bWVudC0+bW9kdWxlIC4gIjo6IiAuICRjbGFzcy0+bmFtZTsKKyAg
ICAgICAgbXkgQGFycmF5ID0gZ3JlcCB7IC9eJGlkZW50aWZpZXIkLyB9IEAkY2xhc3NMaXN0OyBt
eSAkYXJyYXlTaXplID0gQGFycmF5OworICAgICAgICBwdXNoKEAkY2xhc3NMaXN0LCAkaWRlbnRp
ZmllcikgaWYoJGFycmF5U2l6ZSBlcSAwKTsKKworICAgICAgICAkZW5kQ29uZGl0aW9uID0gMTsK
KyAgICAgICAgcmV0dXJuICRlbmRDb25kaXRpb247CisgICAgICB9IGVsc2UgeyAKKyAgICAgICAg
bXkgJWNhY2hlID0gJXskY2xhc3NEYXRhQ2FjaGV9OworCisgICAgICAgIG15ICRjaGVja0RvY3Vt
ZW50ID0gJGNhY2hleyRjYWNoZUhhbmRsZX07CisgICAgICAgICRlbmRDb25kaXRpb24gPSAkb2Jq
ZWN0LT5SZWN1cnNpdmVJbmhlcml0YW5jZUhlbHBlcigkY2hlY2tEb2N1bWVudCwgJGludGVyZmFj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhc3NMaXN0LCAkY2xhc3NE
YXRhQ2FjaGUpOworICAgICAgICBpZigkZW5kQ29uZGl0aW9uIGVxIDEpIHsKKyAgICAgICAgICBt
eSAkaWRlbnRpZmllciA9ICRkb2N1bWVudC0+bW9kdWxlIC4gIjo6IiAuICRjbGFzcy0+bmFtZTsK
KyAgICAgICAgICBteSBAYXJyYXkgPSBncmVwIHsgL14kaWRlbnRpZmllciQvIH0gQCRjbGFzc0xp
c3Q7IG15ICRhcnJheVNpemUgPSBAYXJyYXk7CisgICAgICAgICAgcHVzaChAJGNsYXNzTGlzdCwg
JGlkZW50aWZpZXIpIGlmKCRhcnJheVNpemUgZXEgMCk7CisKKyAgICAgICAgICByZXR1cm4gJGVu
ZENvbmRpdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAk
ZW5kQ29uZGl0aW9uOworfQorCisjIEhlbHBlciBmb3IgYWxsIENvZGVHZW5lcmF0b3IqKioucG0g
bW9kdWxlcworc3ViIElzUHJpbWl0aXZlVHlwZQoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisK
KyAgbXkgJHR5cGUgPSBzaGlmdDsKKworICBpZigoJHR5cGUgPX4gL15pbnQkLykgb3IgKCR0eXBl
ID1+IC9ec2hvcnQkLykgb3IgKCR0eXBlID1+IC9ebG9uZyQvKSBvcgorICAgICAoJHR5cGUgPX4g
L151bnNpZ25lZCBpbnQkLykgb3IgKCR0eXBlID1+IC9edW5zaWduZWQgc2hvcnQkLykgb3IgKCR0
eXBlID1+IC9edW5zaWduZWQgbG9uZyQvKSBvcgorICAgICAoJHR5cGUgPX4gL15mbG9hdCQvKSBv
ciAoJHR5cGUgPX4gL15kb3VibGUkLykgb3IgKCR0eXBlID1+IC9eYm9vbGVhbiQvKSBvciAoJHR5
cGUgPX4gL152b2lkJC8pKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30K
KworIyBJbnRlcm5hbCBIZWxwZXIKK3N1YiBTY2FuRGlyZWN0b3J5Cit7CisgIG15ICRvYmplY3Qg
PSBzaGlmdDsKKworICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgIG15ICRkaXJlY3RvcnkgPSBz
aGlmdDsKKyAgbXkgJHVzZURpcmVjdG9yeSA9IHNoaWZ0OworICBteSAkcmVwb3J0QWxsRmlsZXMg
PSBzaGlmdDsKKworICBpZigoJGVuZENvbmRpdGlvbiBlcSAxKSBhbmQgKCRyZXBvcnRBbGxGaWxl
cyBlcSAwKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGNoZGlyKCRkaXJlY3RvcnkpIG9yIGRp
ZSAiW0VSUk9SXSBDYW4ndCBlbnRlciBkaXJlY3RvcnkgJGRpcmVjdG9yeTogXCIkIVwiXG4iOwor
ICBvcGVuZGlyKERJUiwgIi4iKSBvciBkaWUgIltFUlJPUl0gQ2FuJ3Qgb3BlbiBkaXJlY3Rvcnkg
JGRpcmVjdG9yeTogXCIkIVwiXG4iOworCisgIG15IEBuYW1lcyA9IHJlYWRkaXIoRElSKSBvciBk
aWUgIltFUlJPUl0gQ2FudCd0IHJlYWQgZGlyZWN0b3J5ICRkaXJlY3Rvcnk6IFwiJCFcIlxuIjsK
KyAgY2xvc2VkaXIoRElSKTsKKworICBmb3JlYWNoKEBuYW1lcykgeworICAgIG15ICRuYW1lID0g
JF87CisKKyAgICAjIFNraXAgaWYgd2UgYWxyZWFkeSBmb3VuZCB0aGUgcmlnaHQgZmlsZSBvcgor
ICAgICMgaWYgd2UgZW5jb3VudGVyICdleG90aWMnIHN0dWZmIChpZS4gJy4nLCAnLi4nLCAnLnN2
bicpCisgICAgaWYoKCRlbmRDb25kaXRpb24gZXEgMSkgb3IgKCRuYW1lID1+IC9eXC4vKSkgewor
ICAgICAgbmV4dDsKKyAgICB9CisKKyAgICAjIFJlY3VyaXN2ZWx5IGVudGVyIGRpcmVjdG9yeS4u
LgorICAgIGlmKC1kICRuYW1lKSB7CisgICAgICAkb2JqZWN0LT5TY2FuRGlyZWN0b3J5KCRpbnRl
cmZhY2UsICRuYW1lLCAkdXNlRGlyZWN0b3J5LCAkcmVwb3J0QWxsRmlsZXMpOworICAgICAgbmV4
dDsKKyAgICB9CisKKyAgICAjIENoZWNrIHdoZXRlciB3ZSBmb3VuZCB0aGUgZGVzaXJlZCBmaWxl
Li4uCisgICAgbXkgJGNvbmRpdGlvbiA9ICgkbmFtZSBlcSAkaW50ZXJmYWNlKTsKKyAgICBpZigo
JGludGVyZmFjZSBlcSAiYWxsaWRscyIpIGFuZAorICAgICAgICgkbmFtZSA9fiAvXC5pZGwkLykp
IHsKKyAgICAgICRjb25kaXRpb24gPSAxOworICAgIH0KKworICAgIGlmKCRjb25kaXRpb24pIHsK
KyAgICAgICRmb3VuZEZpbGVuYW1lID0gIiR1c2VEaXJlY3RvcnkvJGRpcmVjdG9yeS8kbmFtZSI7
CisKKyAgICAgIGlmKCRyZXBvcnRBbGxGaWxlcyBlcSAwKSB7CisgICAgICAgICRlbmRDb25kaXRp
b24gPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAZm91bmRGaWxlbmFtZXMsICRm
b3VuZEZpbGVuYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjaGRpcigkdXNlRGlyZWN0b3J5
KSBvciBkaWUgIltFUlJPUl0gQ2FuJ3QgY2hhbmdlIGRpcmVjdG9yeSB0byAkdXNlRGlyZWN0b3J5
OiBcIiQhXCJcbiI7CisgIH0KK30KKworMTsKSW5kZXg6IGJpbmRpbmdzL2lkbC9XaGVlbEV2ZW50
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9pZGwvV2hlZWxFdmVudC5pZGwJKHJldmlzaW9u
IDApCisrKyBiaW5kaW5ncy9pZGwvV2hlZWxFdmVudC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTggQEAKK21vZHVsZSBldmVudHMgeworICAgICAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVu
dD1LSlM6OkRPTVVJRXZlbnRdIFdoZWVsRXZlbnQgOiBVSUV2ZW50IHsKKyAgICAgICAgICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBhbHRLZXk7CisgICAgICAgICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgY2xpZW50WDsKKyAgICAgICAgICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgbG9uZyAgICBjbGllbnRZOworICAgICAgICAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuIGN0cmxLZXk7CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGJvb2xlYW4gbWV0YUtleTsKKyAgICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
Ym9vbGVhbiBzaGlmdEtleTsKKworICAgICAgICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nICAgIHdoZWVsRGVsdGE7CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgICAgb2Zmc2V0WDsKKyAgICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAg
ICBvZmZzZXRZOworICAgICAgICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nICAgIHNj
cmVlblg7CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgc2NyZWVu
WTsKKyAgICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICB4OworICAgICAg
ICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nICAgIHk7CisgICAgICAgIH07Cit9Cklu
ZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjMxNikKKysrIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOCw2ICs4LDgg
QEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMUEzRDg1NTcwOTc2NDdC
NTAwMkM4NUQxIC8qIE9iamVjdENvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTNEODU1NjA5NzY0N0I0MDAyQzg1RDEgLyogT2JqZWN0Q29u
dGVudHMuaCAqLzsgfTsKKwkJMUE2MkJBMTIwOTg1OUEzQjAwMEU4RDdCIC8qIEpTV2hlZWxFdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTYy
QkExMDA5ODU5QTNCMDAwRThEN0IgLyogSlNXaGVlbEV2ZW50LmNwcCAqLzsgfTsKKwkJMUE2MkJB
MTMwOTg1OUEzQjAwMEU4RDdCIC8qIEpTV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2MkJBMTEwOTg1OUEzQjAwMEU4RDdCIC8qIEpT
V2hlZWxFdmVudC5oICovOyB9OwogCQkxQTY5RDM4MTA4NTYyNzQxMDAwOTg4MEQgLyogZG9tcGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTY5
RDM3RjA4NTYyNzQxMDAwOTg4MEQgLyogZG9tcGFyc2VyLmggKi87IH07CiAJCTFBNjlEMzgyMDg1
NjI3NDEwMDA5ODgwRCAvKiBkb21wYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2OUQzODAwODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNl
ci5jcHAgKi87IH07CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBkb21fcW5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIGRvbV9xbmFtZS5jcHAgKi87IH07CkBAIC0xMDkzLDYgKzEwOTUs
OCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMUEzRDg1NTYw
OTc2NDdCNDAwMkM4NUQxIC8qIE9iamVjdENvbnRlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBPYmplY3RDb250ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQTYyQkExMDA5ODU5QTNCMDAwRThEN0IgLyogSlNXaGVlbEV2ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1doZWVsRXZlbnQuY3BwOyBwYXRoID0g
YmluZGluZ3MvanMvSlNXaGVlbEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE2MkJBMTEwOTg1OUEzQjAwMEU4RDdCIC8qIEpTV2hlZWxFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXaGVlbEV2ZW50Lmg7IHBhdGggPSBiaW5kaW5ncy9q
cy9KU1doZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2OUQzN0Yw
ODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRvbXBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMUE2OUQzODAwODU2Mjc0MTAw
MDk4ODBEIC8qIGRvbXBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRvbXBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2
QjZGMUEgLyogS1dRQ2xpcGJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUNsaXBib2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTIzMzksNiArMjM0MywxNSBAQAog
CQkJbmFtZSA9IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTFBNjJCQTBGMDk4NTlBMUUwMDBFOEQ3QiAvKiBFdmVudHMgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNjJCQTEwMDk4NTlBM0IwMDBFOEQ3QiAvKiBK
U1doZWVsRXZlbnQuY3BwICovLAorCQkJCTFBNjJCQTExMDk4NTlBM0IwMDBFOEQ3QiAvKiBKU1do
ZWVsRXZlbnQuaCAqLywKKwkJCSk7CisJCQluYW1lID0gRXZlbnRzOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTU5OThBNTcwNTJCNTk4RjAwMTdBNkMxIC8qIEFjY2Vzc2li
aWxpdHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMzA0
Miw2ICszMDU1LDcgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAwMTlGM0Q4IC8qIEphdmFTY3JpcHQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFBNjJCQTBG
MDk4NTlBMUUwMDBFOEQ3QiAvKiBFdmVudHMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEphdmFTY3Jp
cHQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDM4Nyw2ICs0NDAxLDcgQEAKIAkJ
CQlFMUYwNDI0NzA5ODM5Mzg5MDA2Njk0RUEgLyogeG1saHR0cHJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4REY1RjRBMDk4NDQ4QzgwMDUyOTgxQiAvKiBKU1NWR0xhenlFdmVudExpc3Rl
bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGNUZBMzA5ODQ2MEFBMDA1Mjk4MUIgLyogU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTYyQkExMzA5ODU5QTNC
MDAwRThEN0IgLyogSlNXaGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ0MjIsNiArNDQz
Nyw3IEBACiAJCQkJQTg4QUQ1MjUwOTUyNEEzNDAwMUREMTk2IC8qIFhMaW5rTmFtZXMgKi8sCiAJ
CQkJQTg4QUQ1MjkwOTUyNEE0QTAwMUREMTk2IC8qIGtzdmdjc3Nwcm9wZXJ0aWVzLmMvaCAqLywK
IAkJCQlBODhBRDUyQjA5NTI0QTUyMDAxREQxOTYgLyoga3N2Z2Nzc3ZhbHVlcy5jL2ggKi8sCisJ
CQkJMUE2MkI5QzQwOTg1OTFFRjAwMEU4RDdCIC8qIEdlbmVyYXRlIEphdmFzY3JpcHQgQmluZGlu
Z3MgKi8sCiAJCQkJOTM3QTM2NTEwOTdFMjU3QjAwRTRFRTJGIC8qIFVzZXIgQWdlbnQgU3R5bGUg
U2hlZXQgKi8sCiAJCQkJOTNGMTk4QTYwODI0NUU1OTAwMUU5QUJDIC8qIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5RkQwODI0NUU1OTAwMUU5QUJDIC8qIFJlc291cmNlcyAqLywKQEAgLTQ1NTcsNiAr
NDU3MywyMCBAQAogLyogRW5kIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxQTYyQjlDNDA5
ODU5MUVGMDAwRThEN0IgLyogR2VuZXJhdGUgSmF2YXNjcmlwdCBCaW5kaW5ncyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJKTsK
KwkJCW5hbWUgPSAiR2VuZXJhdGUgSmF2YXNjcmlwdCBCaW5kaW5ncyI7CisJCQlvdXRwdXRQYXRo
cyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
KwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICIvdXNyL2Jpbi9lbnYg
cGVybCAtSVwiJFNSQ1JPT1QvYmluZGluZ3Mvc2NyaXB0c1wiIFwiJFNSQ1JPT1QvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbFwiIC0tZ2VuZXJhdG9yIEpTIC0taWRsZGlyIFwi
JFNSQ1JPT1QvYmluZGluZ3MvaWRsXCIgLS1vdXRwdXRkaXIgXCIkU1JDUk9PVC9iaW5kaW5ncy9q
c1wiXG4iOworCQl9OwogCQkxQTY5RDM4NzA4NTYyODY1MDAwOTg4MEQgLyogZG9tcGFyc2VyLmx1
dC5oICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTU0ODgsNiArNTUxOCw3IEBACiAJCQkJRTFGMDQy
NDYwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbGh0dHByZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4REY1RjQ5MDk4NDQ4QzcwMDUyOTgxQiAvKiBKU1NWR0xhenlFdmVudExpc3RlbmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY1RkE0MDk4NDYwQUEwMDUyOTgxQiAvKiBTVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE2MkJBMTIwOTg1OUEzQjAw
MEU4RDdCIC8qIEpTV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IENoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzE3KQorKysgQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDYtMDEtMjQgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgLSBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5NzUKKyAgICAgICAgV2ViQ29yZSBuZWVkcyB0byB1c2UgS0RPTS1saWtlIERP
TSBiaW5kaW5nIGF1dG9nZW5lcmF0aW9uCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgZmly
c3QgY3V0IGF0IGFuIGF1dG9nZW5lcmF0aW9uIGZyYW1ld29yayBiYXNlZCBvbiAKKyAgICAgICAg
d2hhdCBLRE9NIHVzZXMsIGJ1dCB3aXRoIHNvbWUgY2hhbmdlcyB0byBiZSBhYmxlIHRvIG1vdmUK
KyAgICAgICAgZ3JhZHVhbGx5IHRvIHVzaW5nIGF1dG9nZW5lcmF0ZWQgZmlsZXMuIEN1cnJlbnRs
eSBvbmx5IEphdmFzY3JpcHQKKyAgICAgICAgaXMgc3VwcG9ydGVkIGJ1dCwgT2JqQyBzdXBwb3J0
IGNvdWxkIGJlIGFkZGVkIGJ5IHdyaXRpbmcgYSBuZXcgY29kZQorICAgICAgICBnZW5lcmF0b3Ig
cGFja2FnZS4KKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBDYWxsIGdlbmVyYXRlLWJpbmRpbmdzLnBsCisgICAgICAgIAorICAg
ICAgICAqIGJpbmRpbmdzL2lkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvaWRsL1doZWVs
RXZlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0czog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsOiBBZGRlZC4KKyAgICAgICAgCisg
ICAgICAgICoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcDoKKyAgICAgICAgUmVtb3ZlIERPTVdo
ZWVsRXZlbnQgY2xhc3MuCisgICAgICAgIAorICAgICAgICAoS0pTOjpnZXRET01FdmVudCk6Cisg
ICAgICAgIFVzZSBKU1doZWVsRXZlbnQgaGVyZS4KKyAgICAgICAgCisgICAgICAgICoga2h0bWwv
ZWNtYS9ranNfZXZlbnRzLmg6CisgICAgICAgIFJlbW92ZSBET01XaGVlbEV2ZW50IGNsYXNzLgor
CiAyMDA2LTAxLTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgo=
</data>
<flag name="review"
          id="1376"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5923</attachid>
            <date>2006-01-24 12:53:56 -0800</date>
            <delta_ts>2006-01-24 13:06:16 -0800</delta_ts>
            <desc>Address comments</desc>
            <filename>autogeneration-2.txt</filename>
            <type>text/plain</type>
            <size>66646</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9XaGVlbEV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwv
V2hlZWxFdmVudC5pZGwJKHJldmlzaW9uIDApCisrKyBraHRtbC94bWwvV2hlZWxFdmVudC5pZGwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK21vZHVsZSBldmVudHMgeworICAgICAgICBp
bnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1LSlM6OkRPTVVJRXZlbnRdIFdoZWVsRXZlbnQgOiBVSUV2
ZW50IHsKKyAgICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBhbHRLZXk7
CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgY2xpZW50WDsKKyAg
ICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICBjbGllbnRZOworICAgICAg
ICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGN0cmxLZXk7CisgICAgICAgICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gbWV0YUtleTsKKyAgICAgICAgICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBzaGlmdEtleTsKKworICAgICAgICAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nICAgIHdoZWVsRGVsdGE7CisgICAgICAgICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgb2Zmc2V0WDsKKyAgICAgICAgICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyAgICBvZmZzZXRZOworICAgICAgICAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBsb25nICAgIHNjcmVlblg7CisgICAgICAgICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgICAgc2NyZWVuWTsKKyAgICAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgbG9uZyAgICB4OworICAgICAgICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nICAg
IHk7CisgICAgICAgIH07Cit9CkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDEyMzM2KQorKysg
a2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBA
QAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKKyNp
bmNsdWRlICJKU1doZWVsRXZlbnQuaCIKKwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUwMiw3ICs1MDQsNyBAQCBKU1ZhbHVlICpnZXRET01FdmVu
dChFeGVjU3RhdGUgKmV4ZWMsIEV2CiAgICAgZWxzZSBpZiAoZS0+aXNNb3VzZUV2ZW50KCkpCiAg
ICAgICByZXQgPSBuZXcgRE9NTW91c2VFdmVudChleGVjLCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
SW1wbCAqPihlKSk7CiAgICAgZWxzZSBpZiAoZS0+aXNXaGVlbEV2ZW50KCkpCi0gICAgICByZXQg
PSBuZXcgRE9NV2hlZWxFdmVudChleGVjLCBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50SW1wbCAqPihl
KSk7CisgICAgICByZXQgPSBuZXcgSlNXaGVlbEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFdoZWVs
RXZlbnRJbXBsICo+KGUpKTsKICAgICBlbHNlIGlmIChlLT5pc1VJRXZlbnQoKSkKICAgICAgIHJl
dCA9IG5ldyBET01VSUV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFVJRXZlbnRJbXBsICo+KGUpKTsK
ICAgICBlbHNlIGlmIChlLT5pc011dGF0aW9uRXZlbnQoKSkKQEAgLTkxNiw4MyArOTE4LDYgQEAg
SlNWYWx1ZSAqRE9NTXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbAogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLWNvbnN0IENsYXNzSW5mbyBET01XaGVlbEV2ZW50OjppbmZvID0geyAiV2hlZWxF
dmVudCIsICZET01FdmVudDo6aW5mbywgJkRPTVdoZWVsRXZlbnRUYWJsZSwgMCB9OwotLyoKLUBi
ZWdpbiBET01XaGVlbEV2ZW50VGFibGUgMTAKLSAgICBhbHRLZXkgICAgICBET01XaGVlbEV2ZW50
OjpBbHRLZXkgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIGNsaWVudFggICAgIERPTVdo
ZWVsRXZlbnQ6OkNsaWVudFggICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gICAgY2xpZW50WSAg
ICAgRE9NV2hlZWxFdmVudDo6Q2xpZW50WSAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgICBj
dHJsS2V5ICAgICBET01XaGVlbEV2ZW50OjpDdHJsS2V5ICAgICAgRG9udERlbGV0ZXxSZWFkT25s
eQotICAgIG1ldGFLZXkgICAgIERPTVdoZWVsRXZlbnQ6Ok1ldGFLZXkgICAgICBEb250RGVsZXRl
fFJlYWRPbmx5Ci0gICAgb2Zmc2V0WCAgICAgRE9NV2hlZWxFdmVudDo6T2Zmc2V0WCAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgICBvZmZzZXRZICAgICBET01XaGVlbEV2ZW50OjpPZmZzZXRZ
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIHNjcmVlblggICAgIERPTVdoZWVsRXZlbnQ6
OlNjcmVlblggICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gICAgc2NyZWVuWSAgICAgRE9NV2hl
ZWxFdmVudDo6U2NyZWVuWSAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgICBzaGlmdEtleSAg
ICBET01XaGVlbEV2ZW50OjpTaGlmdEtleSAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICAgIHdo
ZWVsRGVsdGEgIERPTVdoZWVsRXZlbnQ6OldoZWVsRGVsdGEgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gICAgeCAgICAgICAgICAgRE9NV2hlZWxFdmVudDo6WCAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgICB5ICAgICAgICAgICBET01XaGVlbEV2ZW50OjpZICAgICAgICAgICAgRG9u
dERlbGV0ZXxSZWFkT25seQotQGVuZAotQGJlZ2luIERPTVdoZWVsRXZlbnRQcm90b1RhYmxlIDEK
LUBlbmQKLSovCi1LSlNfREVGSU5FX1BST1RPVFlQRShET01XaGVlbEV2ZW50UHJvdG8pCi1LSlNf
SU1QTEVNRU5UX1BST1RPRlVOQyhET01XaGVlbEV2ZW50UHJvdG9GdW5jKQotS0pTX0lNUExFTUVO
VF9QUk9UT1RZUEVfV0lUSF9QQVJFTlQoIkRPTVdoZWVsRXZlbnQiLERPTVdoZWVsRXZlbnRQcm90
byxET01XaGVlbEV2ZW50UHJvdG9GdW5jLERPTUV2ZW50UHJvdG8pCi0KLURPTVdoZWVsRXZlbnQ6
OkRPTVdoZWVsRXZlbnQoRXhlY1N0YXRlICpleGVjLCBET006OldoZWVsRXZlbnRJbXBsICplKQot
ICAgIDogRE9NVUlFdmVudChleGVjLCBlKQotewotfQotCi1ib29sIERPTVdoZWVsRXZlbnQ6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1
ZVNsb3Q8RE9NV2hlZWxFdmVudCwgRE9NRXZlbnQ+KGV4ZWMsICZET01XaGVlbEV2ZW50VGFibGUs
IHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFsdWUgKkRPTVdoZWVsRXZlbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0g
ICAgRE9NOjpXaGVlbEV2ZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PERPTTo6V2hlZWxFdmVudElt
cGwgKj4oaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgQWx0S2V5
OgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihlLT5hbHRLZXkoKSk7Ci0gICAgICAgIGNh
c2UgQ2xpZW50WDoKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihlLT5jbGllbnRYKCkpOwot
ICAgICAgICBjYXNlIENsaWVudFk6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZS0+Y2xp
ZW50WSgpKTsKLSAgICAgICAgY2FzZSBDdHJsS2V5OgotICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGUtPmN0cmxLZXkoKSk7Ci0gICAgICAgIGNhc2UgTWV0YUtleToKLSAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihlLT5tZXRhS2V5KCkpOwotICAgICAgICBjYXNlIE9mZnNldFg6Ci0gICAg
ICAgICAgICByZXR1cm4ganNOdW1iZXIoZS0+b2Zmc2V0WCgpKTsKLSAgICAgICAgY2FzZSBPZmZz
ZXRZOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGUtPm9mZnNldFkoKSk7Ci0gICAgICAg
IGNhc2UgU2NyZWVuWDoKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihlLT5zY3JlZW5YKCkp
OwotICAgICAgICBjYXNlIFNjcmVlblk6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZS0+
c2NyZWVuWSgpKTsKLSAgICAgICAgY2FzZSBTaGlmdEtleToKLSAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oZS0+c2hpZnRLZXkoKSk7Ci0gICAgICAgIGNhc2UgV2hlZWxEZWx0YToKLSAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcihlLT53aGVlbERlbHRhKCkpOwotICAgICAgICBjYXNlIFg6
Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZS0+eCgpKTsKLSAgICAgICAgY2FzZSBZOgot
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGUtPnkoKSk7Ci0gICAgfQotICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlICpET01XaGVlbEV2ZW50UHJvdG9GdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQotewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTVdoZWVsRXZlbnQ6Omlu
Zm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNvbnN0IENs
YXNzSW5mbyBDbGlwYm9hcmQ6OmluZm8gPSB7ICJDbGlwYm9hcmQiLCAwLCAmQ2xpcGJvYXJkVGFi
bGUsIDAgfTsKIAogLyogU291cmNlIGZvciBDbGlwYm9hcmRUYWJsZS4gVXNlICJtYWtlIGhhc2h0
YWJsZXMiIHRvIHJlZ2VuZXJhdGUuCkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19ldmVudHMuaAkocmV2aXNpb24gMTIzMzYpCisrKyBr
aHRtbC9lY21hL2tqc19ldmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBu
YW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBNb3VzZUV2ZW50SW1wbDsKICAgICBjbGFzcyBNdXRh
dGlvbkV2ZW50SW1wbDsKICAgICBjbGFzcyBVSUV2ZW50SW1wbDsKLSAgICBjbGFzcyBXaGVlbEV2
ZW50SW1wbDsKIH0KIAogbmFtZXNwYWNlIEtKUyB7CkBAIC0yMDcsMTggKzIwNiw2IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICAgICAgSW5pdE11dGF0aW9uRXZlbnQgfTsKICAgICB9Owog
ICAKLSAgICBjbGFzcyBET01XaGVlbEV2ZW50IDogcHVibGljIERPTVVJRXZlbnQgewotICAgIHB1
YmxpYzoKLSAgICAgICAgRE9NV2hlZWxFdmVudChFeGVjU3RhdGUqLCBET006OldoZWVsRXZlbnRJ
bXBsKik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIC8v
IG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IFNjcmVlblgsIFNjcmVlblksIENsaWVu
dFgsIFgsIENsaWVudFksIFksIE9mZnNldFgsIE9mZnNldFksCi0gICAgICAgICAgICAgICBDdHJs
S2V5LCBTaGlmdEtleSwgQWx0S2V5LCBNZXRhS2V5LCBXaGVlbERlbHRhIH07Ci0gICAgfTsKLQog
ICAgIGNsYXNzIENsaXBib2FyZCA6IHB1YmxpYyBET01PYmplY3QgewogICAgIGZyaWVuZCBjbGFz
cyBDbGlwYm9hcmRQcm90b0Z1bmM7CiAgICAgcHVibGljOgpJbmRleDogYmluZGluZ3Mvc2NyaXB0
cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9zY3JpcHRzL2dl
bmVyYXRlLWJpbmRpbmdzLnBsCShyZXZpc2lvbiAwKQorKysgYmluZGluZ3Mvc2NyaXB0cy9nZW5l
cmF0ZS1iaW5kaW5ncy5wbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jp
bi9wZXJsIC13CisKKyMgVGhpcyBzY3JpcHQgaXMgYSB0ZW1wb3JhcnkgaGFjay4KKyMgRmlsZXMg
YXJlIGdlbmVyYXRlZCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSwgd2hlbiB0aGV5IHJlYWxseSBz
aG91bGQgZ28KKyMgdG8gdGhlIERlcml2ZWRTb3VyY2VzIGRpcmVjdG9yeS4KKyMgVGhpcyBzaG91
bGQgYWxzbyBldmVudHVhbGx5IGJlIGEgYnVpbGQgcnVsZSBkcml2ZW4gb2ZmIG9mIC5pZGwgZmls
ZXMKKyMgaG93ZXZlciBhIGJ1aWxkIHJ1bGUgb25seSBzb2x1dGlvbiBpcyBibG9ja2VkIGJ5IHNl
dmVyYWwgcmFkYXJzOgorIyA8cmRhcjovL3Byb2JsZW1zLzQyNTE3ODEmNDI1MTc4NT4KKwordXNl
IHN0cmljdDsKKwordXNlIEZpbGU6OlBhdGg7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIEN3ZDsK
KwordXNlIElETFBhcnNlcjsKK3VzZSBDb2RlR2VuZXJhdG9yOworCitteSBAaWRsRGlyZWN0b3Jp
ZXM7CitteSAkb3V0cHV0RGlyZWN0b3J5OworbXkgJGdlbmVyYXRvcjsKKworR2V0T3B0aW9ucygn
aWRsZGlyPXNAJyA9PiBcQGlkbERpcmVjdG9yaWVzLAorCQkJICAnb3V0cHV0ZGlyPXMnID0+IFwk
b3V0cHV0RGlyZWN0b3J5LAorCQkJICAnZ2VuZXJhdG9yPXMnID0+IFwkZ2VuZXJhdG9yKTsKKwor
aWYgKCFAaWRsRGlyZWN0b3JpZXMgb3IgIWRlZmluZWQoJG91dHB1dERpcmVjdG9yeSkpIHsKKwlk
aWUoJ011c3Qgc3BlY2lmeSBib3RoIGlkbGRpcnMgYW5kIG91dHB1dGRpcicpOworfQorCitpZiAo
IWRlZmluZWQoJGdlbmVyYXRvcikpIHsKKyAgZGllKCdNdXN0IHNwZWNpZnkgZ2VuZXJhdG9yJykK
K30KKworbXkgQGlkbEZpbGVzOworZm9yZWFjaCBteSAkaWRsRGlyZWN0b3J5IChAaWRsRGlyZWN0
b3JpZXMpIHsKKyAgcHVzaCBAaWRsRmlsZXMsIG1hcCB7IGNob21wOyAkXyB9IGBmaW5kICRpZGxE
aXJlY3RvcnkgLW5hbWUgJyouaWRsJyAtcHJpbnQgfCBncmVwIC12IGRlZnNgOworfQorCitmb3Ig
bXkgJGlkbFBhdGggKEBpZGxGaWxlcykgeyAgIAorCSMgUGFyc2UgdGhlIGdpdmVuIElETCBmaWxl
LgorCW15ICRwYXJzZXIgPSBJRExQYXJzZXItPm5ldygxKTsKKwkKKwlteSAkZG9jdW1lbnQgPSAk
cGFyc2VyLT5QYXJzZSgkaWRsUGF0aCk7CisJCisJIyBHZW5lcmF0ZSBkZXNpcmVkIG91dHB1dCBm
b3IgZ2l2ZW4gSURMIGZpbGUuCisJbXkgJGNvZGVHZW4gPSBDb2RlR2VuZXJhdG9yLT5uZXcoXEBp
ZGxEaXJlY3RvcmllcywgJGdlbmVyYXRvciwgJG91dHB1dERpcmVjdG9yeSk7CisJJGNvZGVHZW4t
PlByb2Nlc3NEb2N1bWVudCgkZG9jdW1lbnQpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogYmlu
ZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShyZXZpc2lvbiAwKQor
KysgYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
Mzg2IEBACisjCisjIEtET00gSURMIHBhcnNlcgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisjCitwYWNrYWdlIElETFBhcnNlcjsK
KwordXNlIElETFN0cnVjdHVyZTsKKwordXNlIGNvbnN0YW50IE1PREVfVU5ERUYgICAgPT4gMDsg
IyBEZWZhdWx0IG1vZGUuCisKK3VzZSBjb25zdGFudCBNT0RFX01PRFVMRSAgPT4gMTA7ICMgJ21v
ZHVsZScgc2VjdGlvbgordXNlIGNvbnN0YW50IE1PREVfSU5URVJGQUNFICA9PiAxMTsgIyAnaW50
ZXJmYWNlJyBzZWN0aW9uCit1c2UgY29uc3RhbnQgTU9ERV9FWENFUFRJT04gID0+IDEyOyAjICdl
eGNlcHRpb24nIHNlY3Rpb24KK3VzZSBjb25zdGFudCBNT0RFX0FMSUFTICAgID0+IDEzOyAjICdh
bGlhcycgc2VjdGlvbgorCisjIEhlbHBlciB2YXJpYWJsZXMKK215IEB0ZW1wb3JhcnlDb250ZW50
ID0gIiI7CisKK215ICRwYXJzZU1vZGUgPSBNT0RFX1VOREVGOworbXkgJHByZXNlcnZlZFBhcnNl
TW9kZSA9IE1PREVfVU5ERUY7CisKK215ICRiZVF1aWV0OyAjIFNob3VsZCBub3QgZGlzcGxheSBh
bnl0aGluZyBvbiBTVERPVVQ/CitteSAkZG9jdW1lbnQgPSAwOyAjIFdpbGwgaG9sZCB0aGUgcmVz
dWx0aW5nICdpZGxEb2N1bWVudCcKKworIyBEZWZhdWx0IENvbnN0cnVjdG9yCitzdWIgbmV3Cit7
CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKKworICAkZG9j
dW1lbnQgPSAwOworICAkYmVRdWlldCA9IHNoaWZ0OworCisgIGJsZXNzKCRyZWZlcmVuY2UsICRv
YmplY3QpOworICByZXR1cm4gJHJlZmVyZW5jZTsKK30KKworIyBSZXR1cm5zIHRoZSBwYXJzZWQg
J2lkbERvY3VtZW50Jworc3ViIFBhcnNlCit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkg
JGZpbGVOYW1lID0gc2hpZnQ7CisKKyAgcHJpbnQgIiB8ICoqKiBTdGFydGluZyB0byBwYXJzZSAk
ZmlsZU5hbWUuLi5cbiB8XG4iIGlmKCEkYmVRdWlldCk7CisgIG9wZW4oRklMRSwgIjwkZmlsZU5h
bWUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gcmVxdWVzdGVkIGZpbGUgKGZpbGU6ICRmaWxlTmFt
ZSkhIjsKKyAgbXkgQGRvY3VtZW50Q29udGVudCA9IDxGSUxFPjsKKyAgY2xvc2UoRklMRSk7CisK
KyAgIyBSZW1vdmUgYWxsIGNvbW1lbnRzLCBwbGVhc2luZyBvdXIgcGFyc2luZyBlbmdpbmUgYSBs
b3QuLi4KKyAgbXkgJGRvY3VtZW50RGF0YSA9IGpvaW4oIiMiLCBAZG9jdW1lbnRDb250ZW50KTsK
KyAgJGRvY3VtZW50RGF0YSA9fiBzL1wvXCooLnxbXG5ccl0pKj9cKlwvLy9nOyAgIyAvKiAuLi4g
Ki8gc3R5bGUgY29tbWVudHMKKyAgJGRvY3VtZW50RGF0YSA9fiBzL1wvXC9bXlxuXHJdKi8vZzsg
ICAgICAjIC8vIC4uLi4uLiBzdHlsZSBjb21tZW50cworICBAZG9jdW1lbnRDb250ZW50ID0gc3Bs
aXQoIiMiLCAkZG9jdW1lbnREYXRhKTsKKworICBteSAkZGF0YUF2YWlsYWJsZSA9IDA7CisKKyAg
IyBTaW1wbGUgSURMIFBhcnNlciAodG0pCisgIGZvcmVhY2goQGRvY3VtZW50Q29udGVudCkgewor
ICAgIG15ICRuZXdQYXJzZU1vZGUgPSAkb2JqZWN0LT5EZXRlcm1pbmVQYXJzZU1vZGUoJF8pOwor
CisgICAgaWYoJG5ld1BhcnNlTW9kZSBuZSBNT0RFX1VOREVGKSB7CisgICAgICBpZigkZGF0YUF2
YWlsYWJsZSBlcSAwKSB7CisgICAgICAgICRkYXRhQXZhaWxhYmxlID0gMTsgIyBTdGFydCBub2Rl
IGJ1aWxkaW5nLi4uCisgICAgICB9IGVsc2UgeworICAgICAgICAkb2JqZWN0LT5Qcm9jZXNzU2Vj
dGlvbigpOworICAgICAgfQorICAgIH0KKworICAgICMgVXBkYXRlIGRldGVjdGVkIGRhdGEgc3Ry
ZWFtIG1vZGUuLi4KKyAgICBpZigkbmV3UGFyc2VNb2RlIG5lIE1PREVfVU5ERUYpIHsKKyAgICAg
ICRwYXJzZU1vZGUgPSAkbmV3UGFyc2VNb2RlOworICAgIH0KKworICAgIHB1c2goQHRlbXBvcmFy
eUNvbnRlbnQsICRfKTsKKyAgfQorCisgICMgQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgcmVt
YWluaW5nIHRvIHBhcnNlLi4uCisgIGlmKCgkcGFyc2VNb2RlIG5lIE1PREVfVU5ERUYpIGFuZCAo
JCN0ZW1wb3JhcnlDb250ZW50ID4gMCkpIHsKKyAgICAkb2JqZWN0LT5Qcm9jZXNzU2VjdGlvbigp
OworICB9CisKKyAgcHJpbnQgIiB8ICoqKiBGaW5pc2hlZCBwYXJzaW5nIVxuIiBpZighJGJlUXVp
ZXQpOworICAKKyAgJGRvY3VtZW50LT5maWxlTmFtZSgkZmlsZU5hbWUpOworICAKKyAgcmV0dXJu
ICRkb2N1bWVudDsKK30KKworc3ViIFBhcnNlTW9kdWxlCit7CisgIG15ICRvYmplY3QgPSBzaGlm
dDsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgcHJpbnQgIiB8LSBUcnlpbmcgdG8gcGFy
c2UgbW9kdWxlLi4uXG4iIGlmKCEkYmVRdWlldCk7CisKKyAgbXkgJGRhdGEgPSBqb2luKCIiLCBA
dGVtcG9yYXJ5Q29udGVudCk7CisgICRkYXRhID1+IC8kSURMU3RydWN0dXJlOjptb2R1bGVTZWxl
Y3Rvci87CisKKyAgbXkgJG1vZHVsZU5hbWUgPSAoZGVmaW5lZCgkMSkgPyAkMSA6IGRpZSgiUGFy
c2luZyBlcnJvciFcblNvdXJjZTpcbiRkYXRhXG4pIikpOworICAkZGF0YU5vZGUtPm1vZHVsZSgk
bW9kdWxlTmFtZSk7CisKKyAgcHJpbnQgIiAgfC0tLS0+IE1vZHVsZTsgTkFNRSBcIiRtb2R1bGVO
YW1lXCJcbiB8LVxuIHxcbiIgaWYoISRiZVF1aWV0KTsKK30KKworc3ViIGR1bXBFeHRlbmRlZEF0
dHJpYnV0ZXMKK3sKKyAgbXkgJHBhZFN0ciA9IHNoaWZ0OworICBteSAkYXR0cnMgPSBzaGlmdDsK
KworICBpZiAoISV7JGF0dHJzfSkgeworICAgIHJldHVybiAiIjsKKyAgfQorCisgIG15IEB0ZW1w
OworICB3aGlsZSAoKCRuYW1lLCAkdmFsdWUpID0gZWFjaCgleyRhdHRyc30pKSB7CisgICAgcHVz
aChAdGVtcCwgIiRuYW1lPSR2YWx1ZSIpOworICB9CisgIAorICByZXR1cm4gJHBhZFN0ciAuICJb
IiAuIGpvaW4oIiwgIiwgQHRlbXApIC4gIl0iOworfQorCitzdWIgcGFyc2VFeHRlbmRlZEF0dHJp
YnV0ZXMKK3sKKyAgbXkgJHN0ciA9IHNoaWZ0OworICAkc3RyID1+IHMvXFtccyooLiopXF0vJDEv
ZzsKKyAgCisgIG15ICVhdHRycyA9ICgpOworICAKKyAgZm9yZWFjaCBteSAkdmFsdWUgKHNwbGl0
KC9ccyosXHMqLywgJHN0cikpIHsKKyAgICAoJG5hbWUsJHZhbHVlKSA9IHNwbGl0KC9ccyo9XHMq
LywkdmFsdWUsMik7CisKKyAgICAjIEF0dHJpYnV0ZXMgd2l0aCBubyB2YWx1ZSBhcmUgc2V0IHRv
IGJlIHRydWUKKyAgICAkdmFsdWUgPSAxIHVubGVzcyBkZWZpbmVkICR2YWx1ZTsKKyAgICAkYXR0
cnN7JG5hbWV9ID0gJHZhbHVlOworICB9CisgIAorICByZXR1cm4gJWF0dHJzOworfQorCitzdWIg
UGFyc2VJbnRlcmZhY2UKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAkZGF0YU5vZGUg
PSBzaGlmdDsKKyAgbXkgJHNlY3Rpb25OYW1lID0gc2hpZnQ7CisKKyAgbXkgJGRhdGEgPSBqb2lu
KCIiLCBAdGVtcG9yYXJ5Q29udGVudCk7CisKKyAgIyBMb29rIGZvciBlbmQtb2YtaW50ZXJmYWNl
IG1hcmsKKyAgJGRhdGEgPX4gL307L2c7CisgICRkYXRhID0gc3Vic3RyKCRkYXRhLCBpbmRleCgk
ZGF0YSwgJHNlY3Rpb25OYW1lKSwgcG9zKCRkYXRhKSAtIGxlbmd0aCgkZGF0YSkpOworCisgICRk
YXRhID1+IHMvW1xuXHJdLy9nOworCisgICMgQmVnaW5uaW5nIG9mIHRoZSByZWdleHAgcGFyc2lu
ZyBtYWdpYworICBpZigkc2VjdGlvbk5hbWUgZXEgImV4Y2VwdGlvbiIpIHsKKyAgICBwcmludCAi
IHwtIFRyeWluZyB0byBwYXJzZSBleGNlcHRpb24uLi5cbiIgaWYoISRiZVF1aWV0KTsKKworICAg
IG15ICRleGNlcHRpb25OYW1lID0gIiI7IG15ICRleGNlcHRpb25EYXRhID0gIiI7CisgICAgbXkg
JGV4Y2VwdGlvbkRhdGFOYW1lID0gIiI7IG15ICRleGNlcHRpb25EYXRhVHlwZSA9ICIiOworICAK
KyAgICAjIE1hdGNoIGlkZW50aWZpZXIgb2YgdGhlIGV4Y2VwdGlvbiwgYW5kIGVuY2xvc2VkIGRh
dGEuLi4KKyAgICAkZGF0YSA9fiAvJElETFN0cnVjdHVyZTo6ZXhjZXB0aW9uU2VsZWN0b3IvOwor
ICAgICRleGNlcHRpb25OYW1lID0gKGRlZmluZWQoJDEpID8gJDEgOiBkaWUoIlBhcnNpbmcgZXJy
b3IhXG5Tb3VyY2U6XG4kZGF0YVxuKSIpKTsKKyAgICAkZXhjZXB0aW9uRGF0YSA9IChkZWZpbmVk
KCQyKSA/ICQyIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGRhdGFcbikiKSk7CisK
KyAgICAoJycgPX4gL14vKTsgIyBSZXNldCB2YXJpYWJsZXMgbmVlZGVkIGZvciByZWdleHAgbWF0
Y2hpbmcKKworICAgICMgLi4uIHBhcnNlIGVuY2xvc2VkIGRhdGEgKGdldC4gbmFtZSAmIHR5cGUp
CisgICAgJGV4Y2VwdGlvbkRhdGEgPX4gLyRJRExTdHJ1Y3R1cmU6OmV4Y2VwdGlvblN1YlNlbGVj
dG9yLzsKKyAgICAkZXhjZXB0aW9uRGF0YVR5cGUgPSAoZGVmaW5lZCgkMSkgPyAkMSA6IGRpZSgi
UGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRkYXRhXG4pIikpOworICAgICRleGNlcHRpb25EYXRh
TmFtZSA9IChkZWZpbmVkKCQyKSA/ICQyIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxu
JGRhdGFcbikiKSk7CisKKyAgICAjIEZpbGwgaW4gZG9tQ2xhc3MgZGF0YXN0cnVjdHVyZQorICAg
ICRkYXRhTm9kZS0+bmFtZSgkZXhjZXB0aW9uTmFtZSk7CisKKyAgICBteSAkbmV3RGF0YU5vZGUg
PSBuZXcgZG9tQXR0cmlidXRlKCk7CisgICAgJG5ld0RhdGFOb2RlLT50eXBlKCJyZWFkb25seSBh
dHRyaWJ1dGUiKTsKKyAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZShuZXcgZG9tU2lnbmF0dXJl
KCkpOworCisgICAgJG5ld0RhdGFOb2RlLT5zaWduYXR1cmUtPm5hbWUoJGV4Y2VwdGlvbkRhdGFO
YW1lKTsKKyAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+dHlwZSgkZXhjZXB0aW9uRGF0YVR5
cGUpOworICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0dXJlLT5oYXNQdHJGbGFnKDApOworCisgICAg
bXkgJGFycmF5UmVmID0gJGRhdGFOb2RlLT5hdHRyaWJ1dGVzOworICAgIHB1c2goQCRhcnJheVJl
ZiwgJG5ld0RhdGFOb2RlKTsKKworICAgIHByaW50ICIgIHwtLS0tPiBFeGNlcHRpb247IE5BTUUg
XCIkZXhjZXB0aW9uTmFtZVwiIERBVEEgVFlQRSBcIiRleGNlcHRpb25EYXRhVHlwZVwiIERBVEEg
TkFNRSBcIiRleGNlcHRpb25EYXRhTmFtZVwiXG4gfC1cbiB8XG4iIGlmKCEkYmVRdWlldCk7Cisg
IH0gZWxzaWYoJHNlY3Rpb25OYW1lIGVxICJpbnRlcmZhY2UiKSB7CisgICAgcHJpbnQgIiB8LSBU
cnlpbmcgdG8gcGFyc2UgaW50ZXJmYWNlLi4uXG4iIGlmKCEkYmVRdWlldCk7CisKKyAgICBteSAk
aW50ZXJmYWNlTmFtZSA9ICIiOworICAgIG15ICRpbnRlcmZhY2VEYXRhID0gIiI7CisgICAgCisg
ICAgIyBNYXRjaCBpZGVudGlmaWVyIG9mIHRoZSBpbnRlcmZhY2UsIGFuZCBlbmNsb3NlZCBkYXRh
Li4uCisgICAgJGRhdGEgPX4gLyRJRExTdHJ1Y3R1cmU6OmludGVyZmFjZVNlbGVjdG9yLzsKKyAg
ICAKKyAgICAkaW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzID0gKGRlZmluZWQoJDEpID8gJDEg
OiAiICIpOyBjaG9wKCRpbnRlcmZhY2VFeHRlbmRlZEF0dHJpYnV0ZXMpOworICAgICRpbnRlcmZh
Y2VOYW1lID0gKGRlZmluZWQoJDIpID8gJDIgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6
XG4kZGF0YVxuKSIpKTsKKyAgICAkaW50ZXJmYWNlQmFzZSA9IChkZWZpbmVkKCQzKSA/ICQzIDog
IiIpOworICAgICRpbnRlcmZhY2VEYXRhID0gKGRlZmluZWQoJDQpID8gJDQgOiBkaWUoIlBhcnNp
bmcgZXJyb3IhXG5Tb3VyY2U6XG4kZGF0YVxuKSIpKTsKKworICAgICMgRmlsbCBpbiBrbm93biBw
YXJ0cyBvZiB0aGUgZG9tQ2xhc3MgZGF0YXN0cnVjdHVyZSBub3cuLi4KKyAgICAkZGF0YU5vZGUt
Pm5hbWUoJGludGVyZmFjZU5hbWUpOworICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
KHBhcnNlRXh0ZW5kZWRBdHRyaWJ1dGVzKCRpbnRlcmZhY2VFeHRlbmRlZEF0dHJpYnV0ZXMpKTsK
KworICAgICMgSW5oZXJpdGFuY2UgZGV0ZWN0aW9uCisgICAgbXkgQGludGVyZmFjZVBhcmVudHMg
PSBzcGxpdCgvLC8sICRpbnRlcmZhY2VCYXNlKTsKKyAgICBmb3JlYWNoKEBpbnRlcmZhY2VQYXJl
bnRzKSB7CisgICAgICBteSAkbGluZSA9ICRfOworICAgICAgJGxpbmUgPX4gcy9ccyovL2c7CisK
KyAgICAgIG15ICRhcnJheVJlZiA9ICRkYXRhTm9kZS0+cGFyZW50czsKKyAgICAgIHB1c2goQCRh
cnJheVJlZiwgJGxpbmUpOworICAgIH0KKworICAgICRpbnRlcmZhY2VEYXRhID1+IHMvW1xuXHJd
Ly9nOworICAgIG15IEBpbnRlcmZhY2VNZXRob2RzID0gc3BsaXQoLzsvLCAkaW50ZXJmYWNlRGF0
YSk7CisKKyAgICBmb3JlYWNoKEBpbnRlcmZhY2VNZXRob2RzKSB7CisgICAgICBteSAkbGluZSA9
ICRfOworCisgICAgICBpZigkbGluZSA9fiAvYXR0cmlidXRlLykgeworICAgICAgICAkbGluZSA9
fiAvJElETFN0cnVjdHVyZTo6aW50ZXJmYWNlQXR0cmlidXRlU2VsZWN0b3IvOworCisgICAgICAg
IG15ICRhdHRyaWJ1dGVUeXBlID0gKGRlZmluZWQoJDEpID8gJDEgOiBkaWUoIlBhcnNpbmcgZXJy
b3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZUV4dGVuZGVk
QXR0cmlidXRlcyA9IChkZWZpbmVkKCQyKSA/ICQyIDogIiAiKTsgY2hvcCgkYXR0cmlidXRlRXh0
ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZURhdGFUeXBlID0gKGRlZmlu
ZWQoJDMpID8gJDMgOiBkaWUoIlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsK
KyAgICAgICAgbXkgJGF0dHJpYnV0ZURhdGFOYW1lID0gKGRlZmluZWQoJDQpID8gJDQgOiBkaWUo
IlBhcnNpbmcgZXJyb3IhXG5Tb3VyY2U6XG4kbGluZVxuKSIpKTsKKyAgICAgICAgICAKKyAgICAg
ICAgKCcnID1+IC9eLyk7ICMgUmVzZXQgdmFyaWFibGVzIG5lZWRlZCBmb3IgcmVnZXhwIG1hdGNo
aW5nCisgICAgICAgIAorICAgICAgICAkbGluZSA9fiAvJElETFN0cnVjdHVyZTo6cmFpc2VzU2Vs
ZWN0b3IvOworICAgICAgICBteSAkYXR0cmlidXRlRXhjZXB0aW9uID0gKGRlZmluZWQoJDEpID8g
JDEgOiAiIik7CisgICAgICAKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gbmV3IGRvbUF0dHJp
YnV0ZSgpOworICAgICAgICAkbmV3RGF0YU5vZGUtPnR5cGUoJGF0dHJpYnV0ZVR5cGUpOworICAg
ICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZShuZXcgZG9tU2lnbmF0dXJlKCkpOworICAgICAg
ICAkbmV3RGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcyhwYXJzZUV4dGVuZGVkQXR0cmlidXRl
cygkYXR0cmlidXRlRXh0ZW5kZWRBdHRyaWJ1dGVzKSk7CisKKyAgICAgICAgJG5ld0RhdGFOb2Rl
LT5zaWduYXR1cmUtPm5hbWUoJGF0dHJpYnV0ZURhdGFOYW1lKTsKKyAgICAgICAgJG5ld0RhdGFO
b2RlLT5zaWduYXR1cmUtPnR5cGUoJGF0dHJpYnV0ZURhdGFUeXBlKTsKKworICAgICAgICBteSAk
YXJyYXlSZWYgPSAkZGF0YU5vZGUtPmF0dHJpYnV0ZXM7CisgICAgICAgIHB1c2goQCRhcnJheVJl
ZiwgJG5ld0RhdGFOb2RlKTsKKworICAgICAgICBwcmludCAiICB8ICB8PiAgQXR0cmlidXRlOyBU
WVBFIFwiJGF0dHJpYnV0ZVR5cGVcIiBEQVRBIE5BTUUgXCIkYXR0cmlidXRlRGF0YU5hbWVcIiBE
QVRBIFRZUEUgXCIkYXR0cmlidXRlRGF0YVR5cGVcIiBFWENFUFRJT04/IFwiJGF0dHJpYnV0ZUV4
Y2VwdGlvblwiIiAuCisgICAgICAgICAgICAgIGR1bXBFeHRlbmRlZEF0dHJpYnV0ZXMoIlxuICB8
ICAgICAgICAgICAgICAgICAiLCAkbmV3RGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcykgLiAi
XG4iIGlmKCEkYmVRdWlldCk7CisKKyAgICAgICAgJGF0dHJpYnV0ZUV4Y2VwdGlvbiA9fiBzL1xz
Ky8vZzsKKyAgICAgICAgQHskbmV3RGF0YU5vZGUtPnJhaXNlc0V4Y2VwdGlvbnN9ID0gc3BsaXQo
LywvLCAkYXR0cmlidXRlRXhjZXB0aW9uKTsKKyAgICAgIH0gZWxzaWYoKCRsaW5lICF+IHMvXlxz
KiQvL2cpIGFuZCAoJGxpbmUgIX4gL15ccytjb25zdC8pKSB7CisgICAgICAgICRsaW5lID1+IC8k
SURMU3RydWN0dXJlOjppbnRlcmZhY2VNZXRob2RTZWxlY3Rvci87CisKKyAgICAgICAgbXkgJG1l
dGhvZEV4dGVuZGVkQXR0cmlidXRlcyA9IChkZWZpbmVkKCQxKSA/ICQxIDogIiAiKTsgY2hvcCgk
bWV0aG9kRXh0ZW5kZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbXkgJG1ldGhvZFR5cGUgPSAoZGVm
aW5lZCgkMikgPyAkMiA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRsaW5lXG4pIikp
OworICAgICAgICBteSAkbWV0aG9kTmFtZSA9IChkZWZpbmVkKCQzKSA/ICQzIDogZGllKCJQYXJz
aW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAgICAgIG15ICRtZXRob2RTaWdu
YXR1cmUgPSAoZGVmaW5lZCgkNCkgPyAkNCA6IGRpZSgiUGFyc2luZyBlcnJvciFcblNvdXJjZTpc
biRsaW5lXG4pIikpOworICAgICAgICAKKyAgICAgICAgKCcnID1+IC9eLyk7ICMgUmVzZXQgdmFy
aWFibGVzIG5lZWRlZCBmb3IgcmVnZXhwIG1hdGNoaW5nCisgICAgICAgIAorICAgICAgICAkbGlu
ZSA9fiAvJElETFN0cnVjdHVyZTo6cmFpc2VzU2VsZWN0b3IvOworICAgICAgICBteSAkbWV0aG9k
RXhjZXB0aW9uID0gKGRlZmluZWQoJDEpID8gJDEgOiAiIik7CisKKyAgICAgICAgbXkgJG5ld0Rh
dGFOb2RlID0gbmV3IGRvbUZ1bmN0aW9uKCk7CisKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5zaWdu
YXR1cmUobmV3IGRvbVNpZ25hdHVyZSgpKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5zaWduYXR1
cmUtPm5hbWUoJG1ldGhvZE5hbWUpOworICAgICAgICAkbmV3RGF0YU5vZGUtPnNpZ25hdHVyZS0+
dHlwZSgkbWV0aG9kVHlwZSk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMocGFyc2VFeHRlbmRlZEF0dHJpYnV0ZXMoJG1ldGhvZEV4dGVuZGVkQXR0
cmlidXRlcykpOworCisgICAgICAgIHByaW50ICIgIHwgIHwtICBNZXRob2Q7IFRZUEUgXCIkbWV0
aG9kVHlwZVwiIE5BTUUgXCIkbWV0aG9kTmFtZVwiIEVYQ0VQVElPTj8gXCIkbWV0aG9kRXhjZXB0
aW9uXCIiIC4KKyAgICAgICAgICBkdW1wRXh0ZW5kZWRBdHRyaWJ1dGVzKCJcbiAgfCAgICAgICAg
ICAgICAgIiwgJG5ld0RhdGFOb2RlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykgLiAi
XG4iIGlmKCEkYmVRdWlldCk7CisKKyAgICAgICAgJG1ldGhvZEV4Y2VwdGlvbiA9fiBzL1xzKy8v
ZzsKKyAgICAgICAgQHskbmV3RGF0YU5vZGUtPnJhaXNlc0V4Y2VwdGlvbnN9ID0gc3BsaXQoLywv
LCAkbWV0aG9kRXhjZXB0aW9uKTsKKworICAgICAgICBteSBAcGFyYW1zID0gc3BsaXQoLywvLCAk
bWV0aG9kU2lnbmF0dXJlKTsKKyAgICAgICAgZm9yZWFjaChAcGFyYW1zKSB7CisgICAgICAgICAg
bXkgJGxpbmUgPSAkXzsKKworICAgICAgICAgICRsaW5lID1+IC8kSURMU3RydWN0dXJlOjppbnRl
cmZhY2VQYXJhbWV0ZXJTZWxlY3Rvci87CisgICAgICAgICAgbXkgJHBhcmFtRXh0ZW5kZWRBdHRy
aWJ1dGVzID0gKGRlZmluZWQoJDEpID8gJDEgOiAiICIpOyBjaG9wKCRwYXJhbUV4dGVuZGVkQXR0
cmlidXRlcyk7CisgICAgICAgICAgbXkgJHBhcmFtVHlwZSA9IChkZWZpbmVkKCQyKSA/ICQyIDog
ZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAgICAgICAgbXkg
JHBhcmFtTmFtZSA9IChkZWZpbmVkKCQzKSA/ICQzIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291
cmNlOlxuJGxpbmVcbikiKSk7CisKKyAgICAgICAgICBteSAkcGFyYW1EYXRhTm9kZSA9IG5ldyBk
b21TaWduYXR1cmUoKTsKKyAgICAgICAgICAkcGFyYW1EYXRhTm9kZS0+bmFtZSgkcGFyYW1OYW1l
KTsKKyAgICAgICAgICAkcGFyYW1EYXRhTm9kZS0+dHlwZSgkcGFyYW1UeXBlKTsKKyAgICAgICAg
ICAkcGFyYW1EYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKHBhcnNlRXh0ZW5kZWRBdHRyaWJ1
dGVzKCRwYXJhbUV4dGVuZGVkQXR0cmlidXRlcykpOworCisgICAgICAgICAgbXkgJGFycmF5UmVm
ID0gJG5ld0RhdGFOb2RlLT5wYXJhbWV0ZXJzOworICAgICAgICAgIHB1c2goQCRhcnJheVJlZiwg
JHBhcmFtRGF0YU5vZGUpOworCisgICAgICAgICAgcHJpbnQgIiAgfCAgIHw+ICBQYXJhbTsgVFlQ
RSBcIiRwYXJhbVR5cGVcIiBOQU1FIFwiJHBhcmFtTmFtZVwiIiAuIAorICAgICAgICAgICAgZHVt
cEV4dGVuZGVkQXR0cmlidXRlcygiXG4gIHwgICAgICAgICAgICAgICIsICRwYXJhbURhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMpIC4gIlxuIiBpZighJGJlUXVpZXQpOyAgICAgICAgICAKKyAg
ICAgICAgfQorCisgICAgICAgIG15ICRhcnJheVJlZiA9ICRkYXRhTm9kZS0+ZnVuY3Rpb25zOwor
ICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRuZXdEYXRhTm9kZSk7CisgICAgICB9IGVsc2lmKCRs
aW5lID1+IC9eXHMrY29uc3QvKSB7CisgICAgICAgICRsaW5lID1+IC8kSURMU3RydWN0dXJlOjpj
b25zdGFudFNlbGVjdG9yLzsKKyAgICAgICAgbXkgJGNvbnN0VHlwZSA9IChkZWZpbmVkKCQxKSA/
ICQxIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisgICAgICAg
IG15ICRjb25zdE5hbWUgPSAoZGVmaW5lZCgkMikgPyAkMiA6IGRpZSgiUGFyc2luZyBlcnJvciFc
blNvdXJjZTpcbiRsaW5lXG4pIikpOworICAgICAgICBteSAkY29uc3RWYWx1ZSA9IChkZWZpbmVk
KCQzKSA/ICQzIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxpbmVcbikiKSk7CisK
KyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gbmV3IGRvbUNvbnN0YW50KCk7CisgICAgICAgICRu
ZXdEYXRhTm9kZS0+bmFtZSgkY29uc3ROYW1lKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT50eXBl
KCRjb25zdFR5cGUpOworICAgICAgICAkbmV3RGF0YU5vZGUtPnZhbHVlKCRjb25zdFZhbHVlKTsK
KworICAgICAgICBteSAkYXJyYXlSZWYgPSAkZGF0YU5vZGUtPmNvbnN0YW50czsKKyAgICAgICAg
cHVzaChAJGFycmF5UmVmLCAkbmV3RGF0YU5vZGUpOworCisgICAgICAgIHByaW50ICIgIHwgICB8
PiAgQ29uc3RhbnQ7IFRZUEUgXCIkY29uc3RUeXBlXCIgTkFNRSBcIiRjb25zdE5hbWVcIiBWQUxV
RSBcIiRjb25zdFZhbHVlXCJcbiIgaWYoISRiZVF1aWV0KTsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICBwcmludCAiICB8LS0tLT4gSW50ZXJmYWNlOyBOQU1FIFwiJGludGVyZmFjZU5hbWVcIiIgLgor
ICAgICAgICAgIGR1bXBFeHRlbmRlZEF0dHJpYnV0ZXMoIlxuICB8ICAgICAgICAgICAgICAgICAi
LCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcykgLiAiXG4gfC1cbiB8XG4iIGlmKCEkYmVR
dWlldCk7CisgIH0KK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1YiBEZXRlcm1pbmVQYXJzZU1v
ZGUKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OyAgCisgIG15ICRsaW5lID0gc2hpZnQ7CisKKyAg
bXkgJG1vZGUgPSBNT0RFX1VOREVGOworICBpZigkXyA9fiAvbW9kdWxlLykgeworICAgICRtb2Rl
ID0gTU9ERV9NT0RVTEU7CisgIH0gZWxzaWYoJF8gPX4gL2ludGVyZmFjZS8pIHsKKyAgICAkbW9k
ZSA9IE1PREVfSU5URVJGQUNFOworICB9IGVsc2lmKCRfID1+IC9leGNlcHRpb24vKSB7CisgICAg
JG1vZGUgPSBNT0RFX0VYQ0VQVElPTjsKKyAgfSBlbHNpZigkXyA9fiAvYWxpYXMvKSB7CisgICAg
JG1vZGUgPSBNT0RFX0FMSUFTOworICB9CisKKyAgcmV0dXJuICRtb2RlOworfQorCisjIEludGVy
bmFsIGhlbHBlcgorc3ViIFByb2Nlc3NTZWN0aW9uCit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsK
KyAgCisgIGlmKCRwYXJzZU1vZGUgZXEgTU9ERV9NT0RVTEUpIHsKKyAgICBkaWUgKCJUd28gbW9k
dWxlcyBpbiBvbmUgZmlsZSEgRmF0YWwgZXJyb3IhXG4iKSBpZigkZG9jdW1lbnQgbmUgMCk7Cisg
ICAgJGRvY3VtZW50ID0gbmV3IGlkbERvY3VtZW50KCk7CisgICAgJG9iamVjdC0+UGFyc2VNb2R1
bGUoJGRvY3VtZW50KTsKKyAgfSBlbHNpZigkcGFyc2VNb2RlIGVxIE1PREVfSU5URVJGQUNFKSB7
CisgICAgbXkgJG5vZGUgPSBuZXcgZG9tQ2xhc3MoKTsKKyAgICAkb2JqZWN0LT5QYXJzZUludGVy
ZmFjZSgkbm9kZSwgImludGVyZmFjZSIpOworICAgIAorICAgIGRpZSAoIk5vIG1vZHVsZSBzcGVj
aWZpZWQhIEZhdGFsIEVycm9yIVxuIikgaWYoJGRvY3VtZW50IGVxIDApOworICAgIG15ICRhcnJh
eVJlZiA9ICRkb2N1bWVudC0+Y2xhc3NlczsKKyAgICBwdXNoKEAkYXJyYXlSZWYsICRub2RlKTsK
KyAgfSBlbHNpZigkcGFyc2VNb2RlIGVxIE1PREVfRVhDRVBUSU9OKSB7CisgICAgbXkgJG5vZGUg
PSBuZXcgZG9tQ2xhc3MoKTsKKyAgICAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkbm9kZSwgImV4
Y2VwdGlvbiIpOworCisgICAgZGllICgiTm8gbW9kdWxlIHNwZWNpZmllZCEgRmF0YWwgRXJyb3Ih
XG4iKSBpZigkZG9jdW1lbnQgZXEgMCk7CisgICAgbXkgJGFycmF5UmVmID0gJGRvY3VtZW50LT5j
bGFzc2VzOworICAgIHB1c2goQCRhcnJheVJlZiwgJG5vZGUpOworICB9IGVsc2lmKCRwYXJzZU1v
ZGUgZXEgTU9ERV9BTElBUykgeworICAgIHByaW50ICIgfC0gVHJ5aW5nIHRvIHBhcnNlIGFsaWFz
Li4uXG4iIGlmKCEkYmVRdWlldCk7CisgICAgCisgICAgbXkgJGxpbmUgPSBqb2luKCIiLCBAdGVt
cG9yYXJ5Q29udGVudCk7CisgICAgJGxpbmUgPX4gLyRJRExTdHJ1Y3R1cmU6OmFsaWFzU2VsZWN0
b3IvOworCisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAoZGVmaW5lZCgkMSkgPyAkMSA6IGRpZSgi
UGFyc2luZyBlcnJvciFcblNvdXJjZTpcbiRsaW5lXG4pIikpOworICAgIG15ICR3cmFwcGVyTmFt
ZSA9IChkZWZpbmVkKCQyKSA/ICQyIDogZGllKCJQYXJzaW5nIGVycm9yIVxuU291cmNlOlxuJGxp
bmVcbikiKSk7CisgICAgCisgICAgcHJpbnQgIiAgfC0tLS0+IEFsaWFzOyBJTlRFUkZBQ0UgXCIk
aW50ZXJmYWNlTmFtZVwiIFdSQVBQRVIgXCIkd3JhcHBlck5hbWVcIlxuIHwtXG4gfFxuIiBpZigh
JGJlUXVpZXQpOworCisgICAgIyBGSVhNRTogQ2hlY2sgaWYgYWxpYXMgaXMgYWxyZWFkeSBpbiBh
bGlhc2VzCisgICAgbXkgJGFsaWFzZXMgPSAkZG9jdW1lbnQtPmFsaWFzZXM7CisgICAgJGFsaWFz
ZXMtPnskaW50ZXJmYWNlTmFtZX0gPSAkd3JhcHBlck5hbWU7CisgIH0KKworICBAdGVtcG9yYXJ5
Q29udGVudCA9ICIiOworfQorCisxOwpJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1
cmUucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG0JKHJl
dmlzaW9uIDApCisrKyBiaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4OCBAQAorIworIyBLRE9NIElETCBwYXJzZXIKKyMKKyMgQ29weXJpZ2h0
IChjKSAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorIworcGFja2Fn
ZSBJRExTdHJ1Y3R1cmU7CisKK3VzZSBDbGFzczo6U3RydWN0OworCisjIFVzZWQgdG8gcmVwcmVz
ZW50IGEgcGFyc2VkIElETCBkb2N1bWVudAorc3RydWN0KCBpZGxEb2N1bWVudCA9PiB7CisgICAg
bW9kdWxlID0+ICckJywgICAjIE1vZHVsZSBpZGVudGlmaWVyCisgICAgY2xhc3NlcyA9PiAnQCcs
ICAjIEFsbCBwYXJzZWQgaW50ZXJmYWNlcworICAgIGZpbGVOYW1lID0+ICckJyAgIyBmaWxlIG5h
bWUKK30pOworCisjIFVzZWQgdG8gcmVwcmVzZW50ICdpbnRlcmZhY2UnIC8gJ2V4Y2VwdGlvbicg
YmxvY2tzCitzdHJ1Y3QoIGRvbUNsYXNzID0+IHsKKyAgICBuYW1lID0+ICckJywgICAgICAjIENs
YXNzIGlkZW50aWZpZXIgKHdpdGhvdXQgbW9kdWxlKQorICAgIHBhcmVudHMgPT4gJ0AnLCAgICAg
ICMgTGlzdCBvZiBzdHJpbmdzCisgICAgY29uc3RhbnRzID0+ICdAJywgICAgIyBMaXN0IG9mICdk
b21Db25zdGFudCcKKyAgICBmdW5jdGlvbnMgPT4gJ0AnLCAgICAjIExpc3Qgb2YgJ2RvbUZ1bmN0
aW9uJworICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAgICAjIExpc3Qgb2YgJ2RvbUF0dHJpYnV0ZScg
ICAgCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICclJywgIyBFeHRlbmRlZCBhdHRyaWJ1dGVz
Cit9KTsKKworIyBVc2VkIHRvIHJlcHJlc2VudCBkb21DbGFzcyBjb250ZW50cyAobmFtZSBvZiBt
ZXRob2QsIHNpZ25hdHVyZSkKK3N0cnVjdCggZG9tRnVuY3Rpb24gPT4geworICAgIHNpZ25hdHVy
ZSA9PiAnJCcsICAgICMgUmV0dXJuIHR5cGUvT2JqZWN0IG5hbWUvZXh0ZW5kZWQgYXR0cmlidXRl
cworICAgIHBhcmFtZXRlcnMgPT4gJ0AnLCAgICAjIExpc3Qgb2YgJ2RvbVNpZ25hdHVyZScKKyAg
ICByYWlzZXNFeGNlcHRpb25zID0+ICdAJywgICMgUG9zc2libHkgcmFpc2VkIGV4Y2VwdGlvbnMu
Cit9KTsKKworIyBVc2VkIHRvIHJlcHJlc2VudCBkb21DbGFzcyBjb250ZW50cyAobmFtZSBvZiBt
ZXRob2QsIHNpZ25hdHVyZSkKK3N0cnVjdCggZG9tQXR0cmlidXRlID0+IHsKKyAgICB0eXBlID0+
ICckJywgICAgICAgICAgICAgICMgQXR0cmlidXRlIHR5cGUgKGluY2x1ZGluZyBuYW1lc3BhY2Up
CisgICAgc2lnbmF0dXJlID0+ICckJywgICAgICAgICAgIyBBdHRyaWJ1dGUgc2lnbmF0dXJlCisg
ICAgZXhjZXB0aW9uTmFtZSA9PiAnJCcsICAgICAgIyBOYW1lIG9mIGV4Y2VwdGlvbgorICAgIHJh
aXNlc0V4Y2VwdGlvbnMgPT4gJ0AnLCAgIyBQb3NzaWJseSByYWlzZWQgZXhjZXB0aW9ucy4KKyAg
ICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnICMgRXh0ZW5kZWQgYXR0cmlidXRlcworfSk7CisK
KyMgVXNlZCB0byByZXByZXNlbnQgYSBtYXAgb2YgJ3ZhcmlhYmxlIG5hbWUnIDwtPiAndmFyaWFi
bGUgdHlwZScKK3N0cnVjdCggZG9tU2lnbmF0dXJlID0+IHsKKyAgICBuYW1lID0+ICckJywgICAg
ICAjIFZhcmlhYmxlIG5hbWUKKyAgICB0eXBlID0+ICckJywgICAgICAjIFZhcmlhYmxlIHR5cGUK
KyAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyUnICMgRXh0ZW5kZWQgYXR0cmlidXRlcworfSk7
CisKKyMgVXNlZCB0byByZXByZXNlbnQgc3RyaW5nIGNvbnN0YW50cworc3RydWN0KCBkb21Db25z
dGFudCA9PiB7CisgICAgbmFtZSA9PiAnJCcsICAgICAgIyBET00gQ29uc3RhbnQgaWRlbnRpZmll
cgorICAgIHR5cGUgPT4gJyQnLCAgICAgICMgVHlwZSBvZiBkYXRhCisgICAgdmFsdWUgPT4gJyQn
LCAgICAgICMgQ29uc3RhbnQgdmFsdWUKK30pOworCisjIEhlbHBlcnMKKyRpZGxJZCA9ICdbYS16
QS1aMC05XSc7ICAgICAgICAjIEdlbmVyaWMgaWRlbnRpZmllcgorJGlkbElkTnMgPSAnW2EtekEt
WjAtOTpdJzsgICAgICAjIEdlbmVyaWMgaWRlbnRpZmllciBpbmNsdWRpbmcgbmFtZXNwYWNlCisk
aWRsSWROc0xpc3QgPSAnW2EtekEtWjAtOTosXCBdJzsgICMgTGlzdCBvZiBHZW5lcmljIGlkZW50
aWZpZXJzIGluY2x1ZGluZyBuYW1lc3BhY2UKKworJGlkbFR5cGUgPSAnW2EtekEtWjAtOV9dJzsg
ICAgICAjIEdlbmVyaWMgdHlwZS8idmFsdWUgc3RyaW5nIiBpZGVudGlmaWVyCiskaWRsRGF0YVR5
cGUgPSAnW2EtekEtWjAtOVwgXSc7ICAgIyBHZW5lcmljIGRhdGEgdHlwZSBpZGVudGlmaWVyCisK
KyMgTWFnaWMgSURMIHBhcnNpbmcgcmVndWxhciBleHByZXNzaW9ucworbXkgJHN1cHBvcnRlZFR5
cGVzID0gIigoPzp1bnNpZ25lZCApPyg/OmludHxzaG9ydHxsb25nKXwoPzokaWRsSWROcyopKSI7
CisKKyMgU3BlY2lhbCBJREwgbm90YXRpb25zCiskZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXggPSAn
XFtbXl1dKlxdJzsgIyBVc2VkIGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzCisKKyMgUmVndWxhciBl
eHByZXNzaW9uIGJhc2VkIElETCAnc3ludGFjdGljYWwgdG9rZW5pemVyJyB1c2VkIGluIHRoZSBJ
RExQYXJzZXIKKyRtb2R1bGVTZWxlY3RvciA9ICdtb2R1bGVccyooJyAuICRpZGxJZCAuICcqKVxz
KnsnOworJG1vZHVsZU5TU2VsZWN0b3IgPSAnbW9kdWxlXHMqKCcgLiAkaWRsSWQgLiAnKilccypc
W25zXHMqKCcgLiAkaWRsSWROcyAuICcqKVxzKignIC4gJGlkbElkTnMgLiAnKilcXVxzKjsnOwor
JGNvbnN0YW50U2VsZWN0b3IgPSAnY29uc3RccyonIC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xzKign
IC4gJGlkbFR5cGUgLiAnKilccyo9XHMqKCcgLiAkaWRsVHlwZSAuICcqKSc7CiskcmFpc2VzU2Vs
ZWN0b3IgPSAncmFpc2VzXHMqXCgoJyAuICRpZGxJZE5zTGlzdCAuICcqKVxzKlwpJzsKKworJHR5
cGVOYW1lc3BhY2VTZWxlY3RvciA9ICcoKD86JyAuICRpZGxJZCAuICcqOjopKilccyooJyAuICRp
ZGxEYXRhVHlwZSAuICcqKSc7CisKKyRleGNlcHRpb25TZWxlY3RvciA9ICdleGNlcHRpb25ccyoo
JyAuICRpZGxJZE5zIC4gJyopXHMqKFthLXpBLVpcc3s7XSp9OyknOworJGV4Y2VwdGlvblN1YlNl
bGVjdG9yID0gJ3tccyonIC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xzKignIC4gJGlkbFR5cGUgLiAn
Kilccyo7XHMqfSc7CisKKyRpbnRlcmZhY2VTZWxlY3RvciA9ICdpbnRlcmZhY2VccyooKD86JyAu
ICRleHRlbmRlZEF0dHJpYnV0ZVN5bnRheCAuICcgKT8pKCcgLiAkaWRsSWROcyAuICcqKVxzKig/
OjooXHMqW157XSopKT97KFthLXpBLVowLTlfPVxzKCksOzpcW1xdXSopJzsKKyRpbnRlcmZhY2VN
ZXRob2RTZWxlY3RvciA9ICdccyooKD86JyAuICRleHRlbmRlZEF0dHJpYnV0ZVN5bnRheCAuICcg
KT8pJyAuICRzdXBwb3J0ZWRUeXBlcyAuICdccyooJyAuICRpZGxJZE5zIC4gJyopXHMqXChccyoo
W2EtekEtWjAtOTpccyxcW1xdXSopJzsKKyRpbnRlcmZhY2VQYXJhbWV0ZXJTZWxlY3RvciA9ICdp
blxzKigoPzonIC4gJGV4dGVuZGVkQXR0cmlidXRlU3ludGF4IC4gJyApPyknIC4gJHN1cHBvcnRl
ZFR5cGVzIC4gJ1xzKignIC4gJGlkbElkTnMgLiAnKiknOworCiskaW50ZXJmYWNlQXR0cmlidXRl
U2VsZWN0b3IgPSAnXHMqKHJlYWRvbmx5IGF0dHJpYnV0ZXxhdHRyaWJ1dGUpXHMqKCcgLiAkZXh0
ZW5kZWRBdHRyaWJ1dGVTeW50YXggLiAnICk/JyAuICRzdXBwb3J0ZWRUeXBlcyAuICdccyooJyAu
ICRpZGxUeXBlIC4gJyopJzsKKworMTsKSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAwKQorKysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQyIEBACisjCisjIEtET00gSURMIHBhcnNlcgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
CisjIENvcHlyaWdodCAoYykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+
CisjCitwYWNrYWdlIENvZGVHZW5lcmF0b3JKUzsKKwordXNlIEZpbGU6OnN0YXQ7CisKK215ICRt
b2R1bGUgPSAiIjsKK215ICRvdXRwdXREaXIgPSAiIjsKK215ICVpbXBsSW5jbHVkZXMgPSAoKTsK
KworIyBEZWZhdWx0IC5oIHRlbXBsYXRlCitteSAkaGVhZGVyVGVtcGxhdGUgPSA8PCAiRU9GIjsK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkga2RvbWlkbC5wbC4gRE8gTk9UIE1PRElGWSEKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCitFT0YK
KworIyBEZWZhdWx0IGNvbnN0cnVjdG9yCitzdWIgbmV3Cit7CisgIG15ICRvYmplY3QgPSBzaGlm
dDsKKyAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKKworICAkY29kZUdlbmVyYXRvciA9IHNoaWZ0Owor
ICAkb3V0cHV0RGlyID0gc2hpZnQ7CisKKyAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Cisg
IHJldHVybiAkcmVmZXJlbmNlOworfQorCitzdWIgZmluaXNoCit7CisgIG15ICRvYmplY3QgPSBz
aGlmdDsKKworICAjIENvbW1pdCBjaGFuZ2VzIQorICAkb2JqZWN0LT5Xcml0ZURhdGEoKTsKK30K
Kworc3ViIEZpbGVJc05ld2VyCit7CisgIG15ICRmaWxlTmFtZSA9IHNoaWZ0OworICBteSAkbXRp
bWUgPSBzaGlmdDsKKyAgCisgIG15ICRzdGF0SW5mbyA9IHN0YXQoJGZpbGVOYW1lKTsKKyAgCisg
IGlmICghZGVmaW5lZCgkc3RhdEluZm8pKSB7CisgICAgIyBJZiB0aGUgZmlsZSBkb2Vzbid0IGV4
aXN0IGl0IGNhbid0IGJlIG5ld2VyCisgICAgcmV0dXJuIDA7CisgIH0KKyAgCisgIHJldHVybiAo
JHN0YXRJbmZvLT5tdGltZSA+ICRtdGltZSk7Cit9CisKK3N1YiBTaG91bGRHZW5lcmF0ZUZpbGVz
Cit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7ICAKKyAg
bXkgJG5hbWUgPSBzaGlmdDsKKworICBteSAkaWRsbXRpbWUgPSBzdGF0KCRkYXRhTm9kZS0+Zmls
ZU5hbWUpLT5tdGltZTsKKyAgCisgIGlmIChGaWxlSXNOZXdlcigiJG91dHB1dERpci9KUyRuYW1l
LmgiLCAkaWRsbXRpbWUpKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoRmlsZUlzTmV3
ZXIoIiRvdXRwdXREaXIvSlMkbmFtZS5jcHAiLCAkaWRsbXRpbWUpKSB7CisgICAgcmV0dXJuIDA7
CisgIH0KKyAgCisjICBteSAkaGVhZGVyRmlsZU5hbWUgPSA7CisjICBteSAkaW1wbEZpbGVOYW1l
ID0gIiRvdXRwdXREaXIvSlMkbmFtZS5jcHAiOworCisgIHJldHVybiAxOworfQorCisjIFBhcmFt
czogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZUludGVyZmFjZQoreworICBteSAkb2Jq
ZWN0ID0gc2hpZnQ7CisgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICMgRklYTUU6IENoZWNr
IGRhdGVzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHJlLWdlbmVyYXRlIGFueXRoaW5nCisgIAorICAj
IFN0YXJ0IGFjdHVhbCBnZW5lcmF0aW9uLi4KKyMgIHByaW50ICIgIHwgIHw+ICBHZW5lcmF0aW5n
IGhlYWRlci4uLlxuIjsKKyAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGRhdGFOb2RlKTsKKyAg
CisjICBwcmludCAiICB8ICB8PiAgR2VuZXJhdGluZyBpbXBsZW1lbnRhdGlvbi4uLlxuIjsKKyAg
JG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkZGF0YU5vZGUpOworCisgIG15ICRuYW1l
ID0gJGRhdGFOb2RlLT5uYW1lOworICAKKyAgIyBPcGVuIGZpbGVzIGZvciB3cml0aW5nLi4uCisg
IG15ICRoZWFkZXJGaWxlTmFtZSA9ICIkb3V0cHV0RGlyL0pTJG5hbWUuaCI7CisgIG15ICRpbXBs
RmlsZU5hbWUgPSAiJG91dHB1dERpci9KUyRuYW1lLmNwcCI7CisKKyAgb3BlbigkSU1QTCwgIj4k
aW1wbEZpbGVOYW1lIikgfHwgZGllICJDb3VkbG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFtZSI7
CisgIG9wZW4oJEhFQURFUiwgIj4kaGVhZGVyRmlsZU5hbWUiKSB8fCBkaWUgIkNvdWRsbid0IG9w
ZW4gZmlsZSAkaGVhZGVyRmlsZU5hbWUiOworCisjICBwcmludCAiIHwtXG4gfFxuIjsKK30KKwor
IyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0CitzdWIgR2VuZXJhdGVNb2R1bGUKK3sKKyAg
bXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAkZGF0YU5vZGUgPSBzaGlmdDsgIAorICAKKyAgJG1v
ZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOworCit9CisKK3N1YiBHZXRQYXJlbnRDbGFzc05hbWUK
K3sKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgIAorICBpZiAoQHskZGF0YU5vZGUtPnBhcmVu
dHN9IGVxIDApIHsKKyAgICByZXR1cm4gIktKUzo6RE9NT2JqZWN0IjsKKyAgfQorICAKKyAgIyBD
aGVjayBpZiB0aGVyZSdzIGEgbGVnYWN5IHBhcmVudCBjbGFzcyBzZXQgYW5kCisgICMgdXNlIGl0
LgorICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In0p
IHsKKyAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFy
ZW50In07CisgIH0gZWxzZSB7CisgICAgcmV0dXJuICJKUyIgLiAkZGF0YU5vZGUtPnBhcmVudHMo
MCk7CisgIH0KK30KKworc3ViIEdldExlZ2FjeUhlYWRlckluY2x1ZGVzCit7CisgIGlmICgkbW9k
dWxlIGVxICJldmVudHMiKSB7CisgICAgcmV0dXJuICIjaW5jbHVkZSBcImtqc19ldmVudHMuaFwi
XG5cbiI7CisgIH0gZWxzaWYgKCRtb2R1bGUgZXEgImNvcmUiKSB7CisgICAgcmV0dXJuICIjaW5j
bHVkZSBcImtqc19kb20uaFwiXG5cbiI7CisgIH0gZWxzZSB7CisgICAgZGllICgiRG9uJ3Qga25v
dyB3aGF0IGhlYWRlcnMgdG8gaW5jbHVkZSBmb3IgbW9kdWxlICRtb2R1bGUiKTsKKyAgfQorfQor
CitzdWIgR2V0TGVnYWN5SW1wbGVtZW50YXRpb25JbmNsdWRlcworeworICBpZiAoJG1vZHVsZSBl
cSAiZXZlbnRzIikgeworICAgIHJldHVybiAiI2luY2x1ZGUgXCJkb20yX2V2ZW50c2ltcGwuaFwi
XG4iOworICB9IGVsc2lmICgkbW9kdWxlIGVxICJjb3JlIikgeworICAgIHJldHVybiAiI2luY2x1
ZGUgXCJkb21fdGV4dGltcGwuaFwiXG4iOworICB9IGVsc2UgeworICAgIGRpZSAoIkRvbid0IGtu
b3cgd2hhdCBoZWFkZXJzIHRvIGluY2x1ZGUgZm9yIG1vZHVsZSAkbW9kdWxlIik7CisgIH0gIAor
fQorCitzdWIgR2VuZXJhdGVIZWFkZXIKK3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKKworICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFt
ZTsKKyAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKKyAgbXkgJGltcGxDbGFz
c05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICJJbXBsIjsKKyAgCisgICMgRklYTUU6IElmIHdlJ3Jl
IHN1cmUgdGhhdCBhbiBpbnRlcmZhY2UgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4KKyAgIyBvbmUgcGFy
ZW50IHdlIGNhbiBkbyB0aGUgY2hlY2sgaW4gdGhlIHBhcnNlciBpbnN0ZWFkCisgIGlmIChAeyRk
YXRhTm9kZS0+cGFyZW50c30gPiAxKSB7CisgICAgZGllICJBIGNsYXNzIGNhbid0IGhhdmUgbW9y
ZSB0aGFuIG9uZSBwYXJlbnQiOworICB9CisgIAorICBteSAkaGFzUGFyZW50ID0gQHskZGF0YU5v
ZGUtPnBhcmVudHN9ID4gMDsKKyAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNz
TmFtZSgkZGF0YU5vZGUpOworICAKKyAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQor
ICBAaGVhZGVyQ29udGVudCA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CisKKyAgIyAt
IEFkZCBoZWFkZXIgcHJvdGVjdGlvbgorICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jaWZuZGVm
ICRjbGFzc05hbWUiIC4gIl9IIik7CisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNkZWZpbmUg
JGNsYXNzTmFtZSIgLiAiX0hcblxuIik7CisgIAorICBpZiAoZXhpc3RzICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9KSB7CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgR2V0TGVnYWN5SGVhZGVySW5jbHVkZXMoKSk7CisgIH0gZWxzZSB7CisgICAgaWYgKCRo
YXNQYXJlbnQpIHsKKyAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRwYXJl
bnRDbGFzc05hbWUuaFwiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiNpbmNsdWRlIFwia2pzX2JpbmRpbmcuaFwiXG4iKTsKKyAgICB9CisgIH0KKyAgCisg
IG15ICRudW1BdHRyaWJ1dGVzID0gQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OworICBteSAkbnVt
RnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0aW9uc307CisgIAorICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAKKyAgIyBJbXBsZW1lbnRh
dGlvbiBjbGFzcyBmb3J3YXJkIGRlY2xhcmF0aW9uCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICJj
bGFzcyAkaW1wbENsYXNzTmFtZTtcblxuIik7CisKKyAgIyBDbGFzcyBkZWNsYXJhdGlvbgorICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkcGFyZW50Q2xh
c3NOYW1lIHtcbiIpOworICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CisgIAor
ICAjIENvbnN0cnVjdG9yCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShL
SlM6OkV4ZWNTdGF0ZSosICRpbXBsQ2xhc3NOYW1lKik7XG4iKTsKKyAgICAKKyAgIyBEZXN0cnVj
dG9yCisgICMgRklYTUU6IElmIHdlIGtub3cgdGhhdCBhIGNsYXNzIGNhbid0IGhhdmUgc3ViY2xh
c3Nlcywgd2UgZG9uJ3QgbmVlZCBhIHZpcnR1YWwgZGVzdHJ1Y3RvcgorICBpZiAoISRoYXNQYXJl
bnQpIHsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUo
KTtcbiIpOworICB9CisgIAorICAjIEdldHRlcnMKKyAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkg
eworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEtKUzo6SlNW
YWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7
XG4iKTsKKyAgfQorICAKKyAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJsZSBwcm9wZXJ0
aWVzCisgIG15ICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMDsKKyAgZm9yZWFjaChAeyRkYXRh
Tm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICBpZigkXy0+dHlwZSAhfiAvXnJlYWRvbmx5XCBhdHRy
aWJ1dGUkLykgeworICAgICAgJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMgPSAxOworICAgIH0KKyAg
fQorICAKKyAgaWYgKCRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzKSB7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pT
OjpJZGVudGlmaWVyJiwgS0pTOjpKU1ZhbHVlKiwgaW50IGF0dHIgPSBLSlM6Ok5vbmUpO1xuIik7
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqLCBpbnQsIEtKUzo6SlNWYWx1ZSosIGludCk7XG4iKTsKKyAgfQorICAKKyAg
IyBDbGFzcyBpbmZvCisgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBjb25zdCBL
SlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH1cbiIpOwor
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBp
bmZvO1xuIik7CisgIAorICAjIEF0dHJpYnV0ZSBhbmQgZnVuY3Rpb24gZW51bXMKKyAgaWYgKCRu
dW1BdHRyaWJ1dGVzICsgJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIGVudW0ge1xuIikKKyAgfQorICAKKyAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkg
eworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAg
ICAgIik7CisgICAgCisgICAgbXkgJGkgPSAtMTsKKyAgICBmb3JlYWNoKEB7JGRhdGFOb2RlLT5h
dHRyaWJ1dGVzfSkgeworICAgICAgbXkgJGF0dHJpYnV0ZSA9ICRfOworCisgICAgICAkaSsrOwor
ICAgICAgaWYoKCgkaSAlIDQpIGVxIDApIGFuZCAoJGkgbmUgMCkpIHsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIlxuICAgICAgICAiKTsKKyAgICAgIH0KKworICAgICAgbXkgJHZhbHVl
ID0gdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOworICAgICAgJHZhbHVlIC49
ICIsICIgaWYoKCRpIDwgJG51bUF0dHJpYnV0ZXMgLSAxKSk7CisgICAgICAkdmFsdWUgLj0gIiwg
IiBpZigoJGkgZXEgJG51bUF0dHJpYnV0ZXMgLSAxKSBhbmQgKCRudW1GdW5jdGlvbnMgbmUgMCkp
OworICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJHZhbHVlKTsKKyAgICB9CisgIH0KKyAgCisg
IGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDApIHsK
KyAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcblxuIik7CisgICAgfQorICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIiAgICAgICAgLy8gRnVuY3Rpb25zXG4gICAgICAgICIpOworCisgICAgJGkg
PSAtMTsKKyAgICBmb3JlYWNoKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICBteSAk
ZnVuY3Rpb24gPSAkXzsKKworICAgICAgJGkrKzsKKyAgICAgIGlmICgoKCRpICUgNCkgZXEgMCkg
YW5kICgkaSBuZSAwKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4gICAgICAg
ICIpOworICAgICAgfQorCisgICAgICBteSAkdmFsdWUgPSB1Y2ZpcnN0KCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lKTsKKyAgICAgICR2YWx1ZSAuPSAiLCAiIGlmICgkaSA8ICRudW1GdW5jdGlv
bnMgLSAxKTsKKyAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICR2YWx1ZSk7CisgICAgfQorICB9
CisgIAorICBpZiAoJG51bUF0dHJpYnV0ZXMgKyAkbnVtRnVuY3Rpb25zID4gMCkgeworICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbiAgICB9O1xuIik7CisgIH0KKworICBpZiAoISRoYXNQYXJl
bnQpIHsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBs
KCkgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAicHJvdGVjdGVkOlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBSZWZQdHI8
JGltcGxDbGFzc05hbWU+IG1faW1wbDtcbiIpOworICB9CisgIAorICBwdXNoKEBoZWFkZXJDb250
ZW50LCAifTtcblxuIik7CisgIAorICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24KKyAgaWYg
KCRudW1GdW5jdGlvbnMgPiAwKSB7ICAgIAorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJLSlNf
REVGSU5FX1BST1RPVFlQRSgke2NsYXNzTmFtZX1Qcm90byk7XG5cbiIpOworICB9CisgIAorICBw
dXNoKEBoZWFkZXJDb250ZW50LCAifVxuXG4jZW5kaWZcbiIpOworfQorCitzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgIG15ICRkYXRhTm9kZSA9
IHNoaWZ0OworICAKKyAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgIG15
ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CisgIG15ICRpbXBsQ2xhc3NOYW1lID0g
JGludGVyZmFjZU5hbWUgLiAiSW1wbCI7CisgIAorICBteSAkaGFzUGFyZW50ID0gQHskZGF0YU5v
ZGUtPnBhcmVudHN9ID4gMDsKKyAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNz
TmFtZSgkZGF0YU5vZGUpOworICAKKyAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQor
ICBAaW1wbENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxhdGUpOworICBw
dXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iKTsKKyAg
cHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIiRjbGFzc05hbWUuaFwiXG5cbiIp
OworCisgIGlmIChleGlzdHMgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5
UGFyZW50In0pIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2V0TGVnYWN5SW1wbGVt
ZW50YXRpb25JbmNsdWRlcygpKTsKKyAgfSBlbHNlIHsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhl
YWRlciwgIiNpbmNsdWRlIFwiJGltcGxDbGFzc05hbWUuaFwiXG5cbiIpOworICB9CisKKyAgQGlt
cGxDb250ZW50ID0gKCk7CisKKyAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5nIG5hbWVzcGFj
ZSBLSlM7XG5cbiIpOyAgCisgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUg
e1xuXG4iKTsKKyAgCisgICMgLSBBZGQgYWxsIGF0dHJpYnV0ZXMgaW4gYSBoYXNodGFibGUgZGVm
aW5pdGlvbgorICBteSAkbnVtQXR0cmlidXRlcyA9IEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfTsK
KyAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkgeworICAgIG15ICRoYXNoU2l6ZSA9ICRudW1BdHRy
aWJ1dGVzOworICAgIG15ICRoYXNoTmFtZSA9ICRjbGFzc05hbWUgLiAiVGFibGUiOworCisgICAg
bXkgQGhhc2hLZXlzID0gKCk7ICAgICAgIyBpZS4gJ2luc2VydEJlZm9yZScKKyAgICBteSBAaGFz
aFZhbHVlcyA9ICgpOyAgICAjIGllLiAnSlNOb2RlOjpJbnNlcnRCZWZvcmUnCisgICAgbXkgQGhh
c2hTcGVjaWFscyA9ICgpOyAgICAjIGllLiAnRG9udERlbGV0ZXxGdW5jdGlvbicKKyAgICBteSBA
aGFzaFBhcmFtZXRlcnMgPSAoKTsgICMgaWUuICcyJworCisgICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgIG15ICRuYW1lID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgcHVzaChAaGFzaEtleXMsICRuYW1lKTsKKyAg
ICAgIAorICAgICAgbXkgJHZhbHVlID0gJGNsYXNzTmFtZSAuICI6OiIgLiB1Y2ZpcnN0KCRuYW1l
KTsKKyAgICAgIHB1c2goQGhhc2hWYWx1ZXMsICR2YWx1ZSk7CisKKyAgICAgIG15ICRzcGVjaWFs
ID0gIkRvbnREZWxldGUiOworICAgICAgJHNwZWNpYWwgLj0gInxSZWFkT25seSIgaWYoJGF0dHJp
YnV0ZS0+dHlwZSA9fiAvcmVhZG9ubHkvKTsKKyAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgJHNw
ZWNpYWwpOworCisgICAgICBteSAkbnVtUGFyYW1ldGVycyA9ICIwIjsKKyAgICAgIHB1c2goQGhh
c2hQYXJhbWV0ZXJzLCAkbnVtUGFyYW1ldGVycyk7ICAgICAgCisgICAgfQorCisgICAgJG9iamVj
dC0+R2VuZXJhdGVIYXNoVGFibGUoJGhhc2hOYW1lLCAkaGFzaFNpemUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXEBoYXNoS2V5cywgXEBoYXNoVmFsdWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcQGhhc2hTcGVjaWFscywgXEBoYXNoUGFyYW1ldGVycyk7CisgIH0KKyAg
CisgICMgLSBBZGQgYWxsIGZ1bmN0aW9ucyBpbiBhIGhhc2h0YWJsZSBkZWZpbml0aW9uLCBpZiB3
ZSBoYXZlIGFueS4KKyAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9
OworICBpZiAoJG51bUZ1bmN0aW9ucyBuZSAwKSB7CisgICAgJGhhc2hTaXplID0gJG51bUZ1bmN0
aW9uczsKKyAgICAkaGFzaE5hbWUgPSAkY2xhc3NOYW1lIC4gIlByb3RvVGFibGUiOworCisgICAg
QGhhc2hLZXlzID0gKCk7CisgICAgQGhhc2hWYWx1ZXMgPSAoKTsKKyAgICBAaGFzaFNwZWNpYWxz
ID0gKCk7CisgICAgQGhhc2hQYXJhbWV0ZXJzID0gKCk7CisKKyAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgIG15ICRuYW1lID0gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICBwdXNoKEBoYXNoS2V5cywgJG5hbWUpOworICAg
IAorICAgICAgbXkgJHZhbHVlID0gJGNsYXNzTmFtZSAuICI6OiIgLiB1Y2ZpcnN0KCRuYW1lKTsK
KyAgICAgIHB1c2goQGhhc2hWYWx1ZXMsICR2YWx1ZSk7CisgICAgCisgICAgICBteSAkc3BlY2lh
bCA9ICJEb250RGVsZXRlfEZ1bmN0aW9uIjsKKyAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgJHNw
ZWNpYWwpOworICAgIAorICAgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc307CisgICAgICBwdXNoKEBoYXNoUGFyYW1ldGVycywgJG51bVBhcmFtZXRlcnMpOwor
ICAgIH0KKyAgICAKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRo
YXNoU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhh
c2hWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoU3BlY2lhbHMs
IFxAaGFzaFBhcmFtZXRlcnMpOworCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJLSlNfSU1QTEVN
RU5UX1BST1RPRlVOQygke2NsYXNzTmFtZX1Qcm90b0Z1bmMpXG4iKTsKKworICAgIGlmICgkaGFz
UGFyZW50KSB7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIktKU19JTVBMRU1FTlRfUFJPVE9U
WVBFX1dJVEhfUEFSRU5UKFwiJGludGVyZmFjZU5hbWVcIiwgIiAuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiR7Y2xhc3NOYW1lfVByb3RvLCAke2NsYXNzTmFtZX1Qcm90b0Z1bmMsICR7cGFy
ZW50Q2xhc3NOYW1lfVByb3RvKVxuXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJLSlNfSU1QTEVNRU5UX1BST1RPVFlQRShcIiRjbGFzc05hbWVcIiwgJHtjbGFz
c05hbWV9UHJvdG8sICR7Y2xhc3NOYW1lfVByb3RvRnVuYylcblxuIik7CisgICAgfQorICAKKyAg
fQorICAKKyAgIyAtIEluaXRpYWxpemUgc3RhdGljIENsYXNzSW5mbyBvYmplY3QKKyAgcHVzaChA
aW1wbENvbnRlbnQsICJjb25zdCBDbGFzc0luZm8gJGNsYXNzTmFtZSIgLiAiOjppbmZvID0geyBc
IiRpbnRlcmZhY2VOYW1lXCIsICIpOworICBpZiAoJGhhc1BhcmVudCkgeworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJiIgLiRwYXJlbnRDbGFzc05hbWUgLiAiOjppbmZvLCAiKTsKKyAgfSBlbHNl
IHsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIjAsICIpOworICB9CisgIAorICBpZiAoJG51bUF0
dHJpYnV0ZXMgPiAwKSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICImJHtjbGFzc05hbWV9VGFi
bGUsICIpOworICB9IGVsc2UgeworICAgIHB1c2goQGltcGxDb250ZW50LCAiMCwgIikKKyAgfQor
ICBwdXNoKEBpbXBsQ29udGVudCwgIjAgfTtcblxuIik7CisgICAgCisgICMgQ29uc3RydWN0b3IK
KyAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoRXhlY1N0YXRl
KiBleGVjLCAkaW1wbENsYXNzTmFtZSogaW1wbClcbiIpOworICBpZiAoJGhhc1BhcmVudCkgewor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShleGVjLCBpbXBs
KVxuIik7CisgIH0gZWxzZSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBtX2ltcGwo
aW1wbClcbiIpOworICB9CisgIAorICBpZiAoJG51bUZ1bmN0aW9ucyBuZSAwKSB7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4gICAgc2V0UHJvdG90eXBlKCR7Y2xhc3NOYW1lfVByb3RvOjpz
ZWxmKGV4ZWMpKTtcbn1cblxuIik7CisgIH0gZWxzZSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG59XG5cbiIpOyAgICAKKyAgfQorICAKKyAgIyBEZXN0cnVjdG9yCisgIGlmICghJGhhc1Bh
cmVudCkgeworICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojp+JGNsYXNzTmFt
ZSgpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiAgICBTY3JpcHRJbnRlcnByZXRl
cjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7XG59XG5cbiIpOyAgICAKKyAgfQorICAK
KyAgIyBBdHRyaWJ1dGVzCisgIGlmICgkbnVtQXR0cmlidXRlcyBuZSAwKSB7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVTbG90PCRjbGFzc05hbWUsICRwYXJlbnRDbGFzc05hbWU+IiAuCisgICAgICAgICAg
ICAgICAgICAgICAgICIoZXhlYywgJiR7Y2xhc3NOYW1lfVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpO1xufVxuXG4iKTsKKyAgCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVl
KiAke2NsYXNzTmFtZX06OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0XG57XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNz
TmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4obV9pbXBsLmdldCgpKTtc
blxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3dpdGNoICh0b2tlbikge1xuIik7
CisKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkg
eworICAgICAgbXkgJG5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgIAorICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzZSAiIC4gdWNmaXJzdCgkbmFtZSkgLiAiOlxu
Iik7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAiaW1wbC0+JG5hbWUoKSIpIC4gIjtcbiIp
OworICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiAgICByZXR1cm4ganNV
bmRlZmluZWQoKTtcbn1cblxuIik7CisgICAgCisgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3
cml0YWJsZSBhdHRyaWJ1dGVzIGFuZCBpZiB0aGV5IHJhaXNlIGV4Y2VwdGlvbnMKKyAgICBteSAk
aGFzUmVhZFdyaXRlUHJvcGVydGllcyA9IDA7CisgICAgbXkgJHJhaXNlc0V4Y2VwdGlvbnMgPSAw
OworICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICBpZigkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHlcIGF0dHJpYnV0ZSQvKSB7
CisgICAgICAgICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMTsKKworICAgICAgICBpZiAoQHsk
YXR0cmlidXRlLT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICAgICAgICRyYWlzZXNFeGNlcHRp
b25zID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoJGhhc1Jl
YWRXcml0ZVByb3BlcnRpZXMpIHsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2Ns
YXNzTmFtZX06OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKVxuIik7CisgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiAgICBsb29rdXBQdXQ8JGNsYXNzTmFtZSwgJHBhcmVudENsYXNzTmFtZT4iIC4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHIsICYke2NsYXNzTmFtZX1UYWJsZSwgdGhpcyk7XG59XG5cbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSogdmFs
dWUsIGludCAvKmF0dHIqLylcbiIpOworICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
KyAgICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTtcbiIpOworICAg
ICAgfQorICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwg
PSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KG1faW1wbC5nZXQoKSk7XG5cbiIpOworICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3dpdGNoICh0b2tlbikge1xuIik7CisgICAgICAK
KyAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICAgIGlmKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFkb25seVwgYXR0cmlidXRlJC8p
IHsKKyAgICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXNlICIgLiB1Y2ZpcnN0KCRuYW1lKSAu
IjpcbiIpOworICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpbXBsLT5zZXQi
IC4gdWNmaXJzdCgkbmFtZSkgLiAiKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAidmFsdWUiKSk7CisgICAgICAgICAgaWYgKEB7JGF0dHJpYnV0ZS0+cmFpc2VzRXhj
ZXB0aW9uc30pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCBleGNlcHRpb24i
KQorICAgICAgICAgIH0KKyAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4gICAgICAg
IGJyZWFrO1xuIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbn1cblxuIik7CisgICAgICAKKyAgICB9CisgIH0KKyAgCisgICMgRnVuY3Rpb25z
CisgIGlmKCRudW1GdW5jdGlvbnMgbmUgMCkgeworICAgIG15ICRyYWlzZXNFeGNlcHRpb25zID0g
MDsKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgZnVuY3Rpb25zIHRocm93IGV4Y2VwdGlvbnMK
KyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAg
ICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKyAgICAgICAgJHJhaXNl
c0V4Y2VwdGlvbnMgPSAxOworICAgICAgfQorICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IkpTVmFsdWUqICR7Y2xhc3NOYW1lfVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncylcbntcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJiR7Y2xhc3NO
YW1lfTo6aW5mbykpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7XG5cbiIpOworCisgICAgaWYgKCRyYWlzZXNFeGNl
cHRpb25zKSB7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBET01FeGNlcHRpb25UcmFu
c2xhdG9yIGV4Y2VwdGlvbihleGVjKTtcbiIpOworICAgIH0KKyAgICAKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xh
c3NOYW1lKj4oc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmopLT5pbXBsKCkpO1xuXG4i
KTsKKyAgICAKKyAgICAKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzd2l0Y2ggKGlkKSB7
XG4iKTsKKyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30p
IHsgICAgICAKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc2UgJHtjbGFzc05hbWV9
OjoiIC4gdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSkgLiAiOiB7XG4iKTsKKyAg
ICAgIAorICAgICAgbXkgJHBhcmFtSW5kZXggPSAwOworICAgICAgbXkgJGZ1bmN0aW9uU3RyaW5n
ID0gImltcGwtPiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIjsKKyAgICAgIG15
ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgCisgICAg
ICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAg
ICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICAiIC4gR2V0TmF0aXZlVHlwZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUgPSAi
IC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIpIC4gIjtc
biIpOyAgICAgICAgCisgICAgICAgICRwYXJhbUluZGV4Kys7CisgICAgICAgIAorICAgICAgICBp
ZiAoJHBhcmFtSW5kZXggPCAkbnVtUGFyYW1ldGVycykgeworICAgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAiJG5hbWUsICI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJGZ1bmN0aW9u
U3RyaW5nIC49ICIkbmFtZSI7CisgICAgICAgIH0gICAgICAgICAKKyAgICAgIH0KKyAgCisgICAg
ICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CisgICAgICAgICRmdW5jdGlv
blN0cmluZyAuPSAiLCBleGNlcHRpb24pIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRmdW5j
dGlvblN0cmluZyAuPSAiKSI7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICgkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+dHlwZSBlcSAidm9pZCIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiAgICAgICAgJGZ1bmN0aW9uU3RyaW5nO1xuICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTtcbiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAg
ICAgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRm
dW5jdGlvblN0cmluZykgLiAiO1xuIik7CisgICAgICB9CisgICAgICAKKyAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB9XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4ganNVbmRlZmluZWQo
KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIikKKyAgfQorICAKKyAgcHVzaChA
aW1wbENvbnRlbnQsICJcbn1cbiIpOworfQorCitzdWIgR2V0TmF0aXZlVHlwZQoreworICBteSAk
c2lnbmF0dXJlID0gc2hpZnQ7CisgIAorICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7Cisg
IAorICBpZiAoJHR5cGUgZXEgImJvb2xlYW4iKSB7CisgICAgcmV0dXJuICJib29sIjsKKyAgfSBl
bHNpZiAoJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciKSB7CisgICAgcmV0dXJuICJ1bnNpZ25lZCI7
CisgIH0gZWxzaWYgKCR0eXBlIGVxICJsb25nIikgeworICAgIHJldHVybiAiaW50IjsKKyAgfSBl
bHNpZiAoJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IikgeworICAgIHJldHVybiAidW5zaWduZWQg
c2hvcnQiOworICB9IGVsc2lmICgkdHlwZSBlcSAiQXRvbWljU3RyaW5nIikgeworICAgIHJldHVy
biAiQXRvbWljU3RyaW5nIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTVN0cmluZyIpIHsKKyAg
ICByZXR1cm4gIkRPTVN0cmluZyI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJ2aWV3czo6QWJzdHJh
Y3RWaWV3IikgeworICAgIHJldHVybiAiQWJzdHJhY3RWaWV3SW1wbCoiOworICB9IGVsc2lmICgk
dHlwZSBlcSAiTm9kZSIpIHsKKyAgICByZXR1cm4gIk5vZGVJbXBsKiI7CisgIH0gZWxzZSB7Cisg
ICAgZGllICJEb24ndCBrbm93IGhvdyB0aGUgbmF0aXZlIHR5cGUgb2YgJHR5cGUiOworICB9Cit9
CisKK3N1YiBKU1ZhbHVlVG9OYXRpdmUKK3sKKyAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworICBt
eSAkdmFsdWUgPSBzaGlmdDsKKyAgCisgIG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKKwor
ICBpZiAoJHR5cGUgZXEgImJvb2xlYW4iKSB7CisgICAgcmV0dXJuICIkdmFsdWUtPnRvQm9vbGVh
bihleGVjKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIiBvciAkdHlwZSBl
cSAibG9uZyIpIHsKKyAgICByZXR1cm4gIiR2YWx1ZS0+dG9JbnQzMihleGVjKSI7CisgIH0gZWxz
aWYgKCR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpIHsKKyAgICByZXR1cm4gIiR2YWx1ZS0+dG9J
bnQzMihleGVjKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJBdG9taWNTdHJpbmciKSB7CisgICAg
cmV0dXJuICJBdG9taWNTdHJpbmcoJHZhbHVlLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSki
OworICB9IGVsc2lmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgeworICAgIHJldHVybiAiJHZhbHVl
LT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJ2aWV3
czo6QWJzdHJhY3RWaWV3IikgeworICAgICRpbXBsSW5jbHVkZXN7Imtqc192aWV3cy5oIn0gPSAx
OworICAgIHJldHVybiAidG9BYnN0cmFjdFZpZXcoJHZhbHVlKSI7CisgIH0gZWxzaWYgKCR0eXBl
IGVxICJOb2RlIikgeworICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICBy
ZXR1cm4gInRvTm9kZSgkdmFsdWUpIjsKKyAgfSBlbHNlIHsKKyAgICBkaWUgIkRvbid0IGtub3cg
aG93IHRvIGNvbnZlcnQgYSBKUyB2YWx1ZSBvZiB0eXBlICR0eXBlLiIKKyAgfQorfQorCitzdWIg
TmF0aXZlVG9KU1ZhbHVlCit7CisgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgbXkgJHZhbHVl
ID0gc2hpZnQ7CisgIAorICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7CisgIAorICBpZiAo
JHR5cGUgZXEgImJvb2xlYW4iKSB7CisgICAgcmV0dXJuICJqc0Jvb2xlYW4oJHZhbHVlKSI7Cisg
IH0gZWxzaWYgKCR0eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIpIHsK
KyAgICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiOworICB9IGVsc2lmICgkdHlwZSBlcSAiRE9N
U3RyaW5nIikgeworICAgIHJldHVybiAianNTdHJpbmcoJHZhbHVlKSI7CisgIH0gZWxzaWYgKCR0
eXBlIGVxICJOb2RlIiBvciAkdHlwZSBlcSAiVGV4dCIpIHsKKyAgICAjIEFkZCBuZWNlc3Nhcnkg
aW5jbHVkZXMKKyAgICAkaW1wbEluY2x1ZGVzeyJranNfZG9tLmgifSA9IDE7ICAgCisgICAgJGlt
cGxJbmNsdWRlc3siTm9kZUltcGwuaCJ9ID0gMTsgICAgIAorICAgIHJldHVybiAiZ2V0RE9NTm9k
ZShleGVjLCAkdmFsdWUpIjsKKyAgfSBlbHNlIHsKKyAgICBkaWUgIkRvbid0IGtub3cgaG93IHRv
IGNvbnZlcnQgYSB2YWx1ZSBvZiB0eXBlICR0eXBlIHRvIGEgSlMgVmFsdWUiOworICB9CisgIAor
ICBkaWUgKCIkdmFsdWUgIiAuICRzaWduYXR1cmUtPnR5cGUpOworfQorCisjIEludGVybmFsIEhl
bHBlcgorc3ViIEdlbmVyYXRlSGFzaFRhYmxlCit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKwor
ICBteSAkbmFtZSA9IHNoaWZ0OworICBteSAkc2l6ZSA9IHNoaWZ0OworICBteSAka2V5cyA9IHNo
aWZ0OworICBteSAkdmFsdWVzID0gc2hpZnQ7CisgIG15ICRzcGVjaWFscyA9IHNoaWZ0OworICBt
eSAkcGFyYW1ldGVycyA9IHNoaWZ0OworCisgICMgSGVscGVycworICBteSBAdGFibGUgPSAoKTsK
KyAgbXkgQGxpbmtzID0gKCk7CisKKyAgbXkgJG1heERlcHRoID0gMDsKKyAgbXkgJGNvbGxpc2lv
bnMgPSAwOworICBteSAkc2F2ZWRTaXplID0gJHNpemU7CisKKyAgIyBDb2xsZWN0IGhhc2h0YWJs
ZSBpbmZvcm1hdGlvbi4uLgorICBteSAkaSA9IDA7CisgIGZvcmVhY2goQHska2V5c30pIHsKKyAg
ICBteSAkZGVwdGggPSAwOworICAgIG15ICRoID0gJG9iamVjdC0+R2VuZXJhdGVIYXNoVmFsdWUo
JF8pICUgJHNhdmVkU2l6ZTsKKworICAgIHdoaWxlKGRlZmluZWQoJHRhYmxlWyRoXSkpIHsKKyAg
ICAgIGlmKGRlZmluZWQoJGxpbmtzWyRoXSkpIHsKKyAgICAgICAgJGggPSAkbGlua3NbJGhdOwor
ICAgICAgICAkZGVwdGgrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRjb2xsaXNpb25zKys7
CisgICAgICAgICRsaW5rc1skaF0gPSAkc2l6ZTsKKyAgICAgICAgJGggPSAkc2l6ZTsKKyAgICAg
ICAgJHNpemUrKzsKKyAgICAgIH0KKyAgICB9CisgIAorICAgICR0YWJsZVskaF0gPSAkaTsKKwor
ICAgICRpKys7CisgICAgJG1heERlcHRoID0gJGRlcHRoIGlmKCRkZXB0aCA+ICRtYXhEZXB0aCk7
CisgIH0KKworICAjIEVuc3VyZSB0YWJsZSBpcyBiaWcgZW5vdWdoIChpbiBjYXNlIG9mIHVuZGVm
IGVudHJpZXMgYXQgdGhlIGVuZCkKKyAgaWYoJCN0YWJsZSArIDEgPCAkc2l6ZSkgeworICAgICQj
dGFibGUgPSAkc2l6ZSAtIDE7CisgIH0KKworICAjIFN0YXJ0IG91dHB1dGluZyB0aGUgaGFzaHRh
Ymxlcy4uLgorICBteSAkbmFtZUVudHJpZXMgPSAiJHtuYW1lfUVudHJpZXMiOworICAkbmFtZUVu
dHJpZXMgPX4gcy86L18vZzsKKworICAjIGZpcnN0LCBidWlsZCB0aGUgc3RyaW5nIHRhYmxlCisg
IG15ICVzb2Zmc2V0ID0gKCk7CisgIGlmKCgkbmFtZSA9fiAvUHJvdG8vKSBvciAoJG5hbWUgPX4g
L0NvbnN0cnVjdG9yLykpIHsKKyAgICBteSAkdHlwZSA9ICRuYW1lOworICAgIG15ICRpbXBsQ2xh
c3M7CisKKyAgICBpZigkbmFtZSA9fiAvUHJvdG8vKSB7CisgICAgICAkdHlwZSA9fiBzL1Byb3Rv
LiovLzsKKyAgICAgICRpbXBsQ2xhc3MgPSAkdHlwZTsgJGltcGxDbGFzcyA9fiBzL1dyYXBwZXIk
Ly87CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlw
ZSAqL1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICR0eXBlID1+IHMvQ29uc3RydWN0b3IuKi8v
OworICAgICAgJGltcGxDbGFzcyA9ICR0eXBlOyAkaW1wbENsYXNzID1+IHMvQ29uc3RydWN0b3Ik
Ly87CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVj
dG9yICovXG4iKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIv
KiBIYXNoIHRhYmxlICovXG4iKTsKKyAgfQorCisgICMgRHVtcCB0aGUgaGFzaCB0YWJsZS4uLgor
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoRW50cnkgJG5h
bWVFbnRyaWVzXFtcXSA9XG5ce1xuIik7CisKKyAgJGkgPSAwOworICBmb3JlYWNoICRlbnRyeSAo
QHRhYmxlKSB7CisgICAgaWYoZGVmaW5lZCgkZW50cnkpKSB7CisgICAgICBteSAka2V5ID0gQCRr
ZXlzWyRlbnRyeV07CisKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFx7IFwiIiAuICRr
ZXkgLiAiXCIiKTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAiIC4gQCR2YWx1ZXNbJGVu
dHJ5XSk7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAuIEAkc3BlY2lhbHNbJGVudHJ5
XSk7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAuIEAkcGFyYW1ldGVyc1skZW50cnld
KTsKKyAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAiKTsKKworICAgICAgaWYoZGVmaW5lZCgk
bGlua3NbJGldKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiYke25hbWVFbnRyaWVz
fVskbGlua3NbJGldXSIgLiAiIFx9Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIjAgXH0iKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgXHsgMCwgMCwgMCwgMCwgMCBcfSIpOworICAgIH0KKworICAgIHB1
c2goQGltcGxDb250ZW50LCAiLCIpIHVubGVzcygkaSBlcSAkc2l6ZSAtIDEpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKKworICAgICRpKys7CisgIH0KKworICBwdXNoKEBpbXBsQ29u
dGVudCwgIn07XG5cbiIpOworICBwdXNoKEBpbXBsQ29udGVudCwgImNvbnN0IHN0cnVjdCBIYXNo
VGFibGUgJG5hbWUgPSBcbiIpOworICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiAgICAyLCAkc2l6
ZSwgJG5hbWVFbnRyaWVzLCAkc2F2ZWRTaXplXG59O1xuXG4iKTsKK30KKworIyBJbnRlcm5hbCBo
ZWxwZXIKK3N1YiBHZW5lcmF0ZUhhc2hWYWx1ZQoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisK
KyAgQGNoYXJzID0gc3BsaXQoLyAqLywgJF9bMF0pOworCisgICMgVGhpcyBoYXNoIGlzIGRlc2ln
bmVkIHRvIHdvcmsgb24gMTYtYml0IGNodW5rcyBhdCBhIHRpbWUuIEJ1dCBzaW5jZSB0aGUgbm9y
bWFsIGNhc2UKKyAgIyAoYWJvdmUpIGlzIHRvIGhhc2ggVVRGLTE2IGNoYXJhY3RlcnMsIHdlIGp1
c3QgdHJlYXQgdGhlIDgtYml0IGNoYXJzIGFzIGlmIHRoZXkKKyAgIyB3ZXJlIDE2LWJpdCBjaHVu
a3MsIHdoaWNoIHNob3VsZCBnaXZlIG1hdGNoaW5nIHJlc3VsdHMKKworICBteSAkRVhQMl8zMiA9
IDQyOTQ5NjcyOTY7CisKKyAgbXkgJGhhc2ggPSAweDllMzc3OWI5OworICBteSAkbCAgICA9IHNj
YWxhciBAY2hhcnM7ICNJIHdpc2ggdGhpcyB3YXMgaW4gUnVieSAtLS0gTWFrcworICBteSAkcmVt
ICA9ICRsICYgMTsKKyAgJGwgPSAkbCA+PiAxOworCisgIG15ICRzID0gMDsKKworICAjIE1haW4g
bG9vcAorICBmb3IgKDsgJGwgPiAwOyAkbC0tKSB7CisgICAgJGhhc2ggICArPSBvcmQoJGNoYXJz
WyRzXSk7CisgICAgbXkgJHRtcCA9IChvcmQoJGNoYXJzWyRzKzFdKSA8PCAxMSkgXiAkaGFzaDsK
KyAgICAkaGFzaCAgID0gKCgkaGFzaCA8PCAxNiklICRFWFAyXzMyKSBeICR0bXA7CisgICAgJHMg
Kz0gMjsKKyAgICAkaGFzaCArPSAkaGFzaCA+PiAxMTsKKyAgfQorCisgICMgSGFuZGxlIGVuZCBj
YXNlCisgIGlmICgkcmVtICE9MCkgeworICAgICRoYXNoICs9IG9yZCgkY2hhcnNbJHNdKTsKKyAg
ICAkaGFzaCBePSAoKCRoYXNoIDw8IDExKSUgJEVYUDJfMzIpOworICAgICRoYXNoICs9ICRoYXNo
ID4+IDE3OworICB9CisKKyAgIyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDEyNyBiaXRz
CisgICRoYXNoIF49ICgkaGFzaCA8PCAzKTsKKyAgJGhhc2ggKz0gKCRoYXNoID4+IDUpOworICAk
aGFzaCA9ICgkaGFzaCUgJEVYUDJfMzIpOworICAkaGFzaCBePSAoKCRoYXNoIDw8IDIpJSAkRVhQ
Ml8zMik7CisgICRoYXNoICs9ICgkaGFzaCA+PiAxNSk7CisgICRoYXNoID0gJGhhc2glICRFWFAy
XzMyOworICAkaGFzaCBePSAoKCRoYXNoIDw8IDEwKSUgJEVYUDJfMzIpOworICAKKyAgIyB0aGlz
IGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVz
ZWQgdG8KKyAgIyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUg
dGhhdCBpcyBsaWtlbHkgdG8gYmUKKyAgIyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4g
dGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQKKyAgJGhhc2ggPSAweDgwMDAwMDAwICBpZiAoJGhhc2gg
PT0gMCk7CisKKyAgcmV0dXJuICRoYXNoOworfQorCisjIEludGVybmFsIGhlbHBlcgorc3ViIFdy
aXRlRGF0YQoreworICBpZiAoZGVmaW5lZCgkSU1QTCkpIHsKKyAgICAjIFdyaXRlIGNvbnRlbnQg
dG8gZmlsZS4KKyAgICBwcmludCAkSU1QTCBAaW1wbENvbnRlbnRIZWFkZXI7CisgIAorICAgIGZv
cmVhY2ggbXkgJGltcGxJbmNsdWRlIChzb3J0IGtleXMoJWltcGxJbmNsdWRlcykpIHsKKyAgICAg
IHByaW50ICRJTVBMICIjaW5jbHVkZSBcIiRpbXBsSW5jbHVkZVwiXG4iOworICAgIH0KKworICAg
IHByaW50ICRJTVBMIEBpbXBsQ29udGVudDsKKyAgICBjbG9zZSgkSU1QTCk7CisgICAgdW5kZWYo
JElNUEwpOworCisgICAgQGltcGxIZWFkZXJDb250ZW50ID0gIiI7CisgICAgQGltcGxDb250ZW50
ID0gIiI7ICAgIAorICAgICVpbXBsSW5jbHVkZXMgPSAoKTsKKyAgfQorCisgIGlmIChkZWZpbmVk
KCRIRUFERVIpKSB7CisgICAgIyBXcml0ZSBjb250ZW50IHRvIGZpbGUuCisgICAgcHJpbnQgJEhF
QURFUiBAaGVhZGVyQ29udGVudDsKKyAgICBjbG9zZSgkSEVBREVSKTsKKyAgICB1bmRlZigkSEVB
REVSKTsKKworICAgIEBoZWFkZXJDb250ZW50ID0gIiI7CisgIH0KK30KKworMTsKSW5kZXg6IGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkyIEBACisjCisjIEtE
T00gSURMIHBhcnNlcgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CisjCitwYWNrYWdlIENvZGVHZW5lcmF0b3I7CisKK215ICR1c2VE
b2N1bWVudCA9ICIiOworbXkgJHVzZUdlbmVyYXRvciA9ICIiOworbXkgJHVzZU91dHB1dERpciA9
ICIiOworbXkgJHVzZURpcmVjdG9yaWVzID0gIiI7CitteSAkdXNlTGF5ZXJPblRvcCA9IDA7CisK
K215ICRjb2RlR2VuZXJhdG9yID0gMDsKKworIyBVc2VkIHRvIG1hcCBiZXR3ZWVuIG1vZHVsZXMg
JiBuYW1lc3BhY2VzCitteSAlbW9kdWxlTmFtZXNwYWNlSGFzaDsKKworIyBVc2VkIHRvIG1hcCBi
ZXR3ZWVuIG1vZHVsZXMgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9uIG5hbWVzcGFjZXMKK215ICVt
b2R1bGVJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZUhhc2g7CisKKyMgSGVscGVycyBmb3IgJ1NjYW5E
aXJlY3RvcnknCitteSAkZW5kQ29uZGl0aW9uID0gMDsKK215ICRmb3VuZEZpbGVuYW1lID0gIiI7
CitteSBAZm91bmRGaWxlbmFtZXMgPSAoKTsKKworIyBEZWZhdWx0IGNvbnN0cnVjdG9yCitzdWIg
bmV3Cit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKKwor
ICAkdXNlRGlyZWN0b3JpZXMgPSBzaGlmdDsKKyAgJHVzZUdlbmVyYXRvciA9IHNoaWZ0OworICAk
dXNlT3V0cHV0RGlyID0gc2hpZnQ7CisgICR1c2VMYXllck9uVG9wID0gc2hpZnQ7CisKKyAgYmxl
c3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7CisgIHJldHVybiAkcmVmZXJlbmNlOworfQorCitzdWIg
UHJvY2Vzc0RvY3VtZW50Cit7CisgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgJHVzZURvY3VtZW50
ID0gc2hpZnQ7CisKKyAgbXkgJGlmYWNlTmFtZSA9ICR1c2VHZW5lcmF0b3I7CisgICRpZmFjZU5h
bWUgPX4gcy9cYihcdykvXFUkMS9nOyAjIE1ha2UgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCB1
cHBlcmNhc2UKKyAgJGlmYWNlTmFtZSA9ICJDb2RlR2VuZXJhdG9yJGlmYWNlTmFtZSI7CisKKyAg
IyBEeW5hbWljYWxseSBsb2FkIGV4dGVybmFsIGNvZGUgZ2VuZXJhdGlvbiBwZXJsIG1vZHVsZS4u
LgorICByZXF1aXJlICRpZmFjZU5hbWUgLiAiLnBtIjsKKyAgJGNvZGVHZW5lcmF0b3IgPSAkaWZh
Y2VOYW1lLT5uZXcoJG9iamVjdCwgJHVzZU91dHB1dERpciwgJHVzZUxheWVyT25Ub3ApOworCisj
ICBwcmludCAiIHwgKioqIFN0YXJ0aW5nIHRvIGdlbmVyYXRlIGNvZGUgdXNpbmcgXCIkaWZhY2VO
YW1lXCIuLi5cbiB8XG4iOworCisgICMgU3RhcnQgdGhlIGFjdHVhbCBjb2RlIGdlbmVyYXRpb24h
CisgICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZU1vZHVsZSgkdXNlRG9jdW1lbnQpOworCisgIG15
ICRhcnJheVJlZiA9ICR1c2VEb2N1bWVudC0+Y2xhc3NlczsKKyAgZm9yZWFjaChAJGFycmF5UmVm
KSB7CisgICAgbXkgJGNsYXNzID0gJF87CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPlNob3Vs
ZEdlbmVyYXRlRmlsZXMoJHVzZURvY3VtZW50LCAkY2xhc3MtPm5hbWUpKSB7CisgICAgICBwcmlu
dCAiIHwtIFByb2Nlc3NpbmcgaW50ZXJmYWNlIFwiIiAuICRjbGFzcy0+bmFtZSAuICJcIi4uLlxu
IjsKKworICAgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlSW50ZXJmYWNlKCRjbGFzcyk7Cisg
ICAgfQorICB9CisKKyAgJGNvZGVHZW5lcmF0b3ItPmZpbmlzaCgpOworCisjICBwcmludCAiIHwg
KioqIEZpbmlzaGVkIGdlbmVyYXRpb24hXG4iOworfQorCisjIEhlbHBlciBmb3IgYWxsIENvZGVH
ZW5lcmF0b3IqKioucG0gbW9kdWxlcworc3ViIEZpbmRUb3BCYXNlQ2xhc3MKK3sKKyAgIyBJZiB5
b3UgYXJlIHByb2Nlc3NpbmcgdGhlICdBdHRyJyBpbnRlcmZhY2UsIGl0IGhhcyB0aGUgc2luZ2xl
CisgICMgcGFyZW50IGludGVyZmFjZSAnTm9kZScsIHdoaWNoIGlzIHRoZSB0b3Btb3N0IGJhc2Ug
Y2xhc3MuIFJldHVybiBpdC4KKyAgIworICAjIEl0IGdldHMgdHJpY2tpZXIgZm9yIGllLiB0aGUg
J01vdXNlRXZlbnQnIGludGVyZmFjZSwgd2hvc2UgcGFyZW50IGlzCisgICMgdGhlICdVSUV2ZW50
JyBpbnRlcmZhY2UsIHdob3NlIHBhcmVudCBpcyB0aGUgJ0V2ZW50JyBpbnRlcmZhY2UuIFJldHVy
biBpdC4KKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsK
KyAgJGludGVyZmFjZSA9fiBzL1thLXpBLVowLTldKjo6Ly87ICMgU3RyaXAgbW9kdWxlLgorCisg
IG15ICR0b3BCYXNlQ2xhc3MgPSAiIjsKKyAgCisgICMgTG9vcCB1bnRpbCB3ZSBmb3VuZCB0aGUg
dG9wIG1vc3QgYmFzZSBjbGFzcyBmb3IgJ2ludGVyZmFjZScKKyAgd2hpbGUoJGludGVyZmFjZSBu
ZSAiIikgeworICAgICMgU3RlcCAjMTogRmluZCB0aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRo
ICdpbnRlcmZhY2UnCisgICAgJGVuZENvbmRpdGlvbiA9IDA7ICRmb3VuZEZpbGVuYW1lID0gIiI7
CisKKyAgICBmb3JlYWNoKEB7JHVzZURpcmVjdG9yaWVzfSkgeworICAgICAgaWYoJGZvdW5kRmls
ZW5hbWUgZXEgIiIpIHsKKyAgICAgICAgJG9iamVjdC0+U2NhbkRpcmVjdG9yeSgiJGludGVyZmFj
ZS5pZGwiLCAkXywgJF8sIDApOworICAgICAgfQorICAgIH0KKworICAgIGlmKCRmb3VuZEZpbGVu
YW1lIG5lICIiKSB7CisgICAgICBwcmludCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwi
JGZvdW5kRmlsZW5hbWVcIiBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZVwiXG4iOworCisgICAg
ICAjIFN0ZXAgIzI6IFBhcnNlIHRoZSBmb3VuZCBJREwgZmlsZSAoaW4gcXVpZXQgbW9kZSkuCisg
ICAgICBteSAkcGFyc2VyID0gSURMUGFyc2VyLT5uZXcoMSk7CisgICAgICBteSAkZG9jdW1lbnQg
PSAkcGFyc2VyLT5QYXJzZSgkZm91bmRGaWxlbmFtZSk7CisKKyAgICAgICMgU3RlcCAjMzogQ2hl
Y2sgd2hldGVyIHRoZSBwYXJzZWQgSURMIGZpbGUgaGFzIHBhcmVudHMKKyAgICAgIGZvcmVhY2go
QHskZG9jdW1lbnQtPmNsYXNzZXN9KSB7CisgICAgICAgIG15ICRjbGFzcyA9ICRfOworCisgICAg
ICAgIG15ICR1c2VJbnRlcmZhY2UgPSAkaW50ZXJmYWNlOworCisgICAgICAgIGlmKCRjbGFzcy0+
bmFtZSBlcSAkdXNlSW50ZXJmYWNlKSB7CisgICAgICAgICAgbXkgQHBhcmVudHMgPSBAeyRjbGFz
cy0+cGFyZW50c307CisgICAgICAgICAgbXkgJHBhcmVudHNNYXggPSBAeyRjbGFzcy0+cGFyZW50
c307CisKKyAgICAgICAgICAkaW50ZXJmYWNlID0gIiI7CisKKyAgICAgICAgICAjIEV4Y2VwdGlv
bjogRm9yIHRoZSBET00gJ05vZGUnIGlzIG91ciB0b3Btb3N0IGJhc2VjbGFzcywgbm90IEV2ZW50
VGFyZ2V0LgorICAgICAgICAgIGlmKCgkcGFyZW50c01heCA+IDApIGFuZCAoJHBhcmVudHNbMF0g
bmUgImV2ZW50czo6RXZlbnRUYXJnZXQiKSkgeworICAgICAgICAgICAgJGludGVyZmFjZSA9ICRw
YXJlbnRzWzBdOworICAgICAgICAgICAgJGludGVyZmFjZSA9fiBzL1thLXpBLVowLTldKjo6Ly87
ICMgU3RyaXAgbW9kdWxlOworICAgICAgICAgIH0gZWxzaWYoISRjbGFzcy0+bm9EUHRyRmxhZykg
eyAjIEluY2x1ZGUgJ21vZHVsZScgLi4uCisgICAgICAgICAgICAkdG9wQmFzZUNsYXNzID0gJGRv
Y3VtZW50LT5tb2R1bGUgLiAiOjoiIC4gJGNsYXNzLT5uYW1lOworICAgICAgICAgIH0KKyAgICAg
ICAgfSAgCisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGRpZSgiQ291bGQgTk9UIGZpbmQg
c3BlY2lmaWVkIHBhcmVudCBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlXCIhXG4iKTsKKyAgICB9Cisg
IH0KKworICByZXR1cm4gJHRvcEJhc2VDbGFzczsKK30KKworIyBIZWxwZXIgZm9yIGFsbCBJRExD
b2RlR2VuZXJhdG9yKioqLnBtIG1vZHVsZXMKK3N1YiBDbGFzc0hhc1dyaXRlYWJsZUF0dHJpYnV0
ZXMKK3sKKyAgIyBEZXRlcm1pbmUgd2hldGVyIGEgZ2l2ZW4gaW50ZXJmYWNlIGhhcyBhbnkgd3Jp
dGVhYmxlIGF0dHJpYnV0ZXMuLi4KKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgIG15ICRpbnRl
cmZhY2UgPSBzaGlmdDsKKyAgJGludGVyZmFjZSA9fiBzL1thLXpBLVowLTldKjo6Ly87ICMgU3Ry
aXAgbW9kdWxlLgorCisgIG15ICRoYXNXcml0ZWFibGVBdHRyaWJ1dGVzID0gMDsKKyAgCisgICMg
U3RlcCAjMTogRmluZCB0aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRoICdpbnRlcmZhY2UnCisg
ICRlbmRDb25kaXRpb24gPSAwOyAkZm91bmRGaWxlbmFtZSA9ICIiOworCisgIGZvcmVhY2goQHsk
dXNlRGlyZWN0b3JpZXN9KSB7CisgICAgaWYoJGZvdW5kRmlsZW5hbWUgZXEgIiIpIHsKKyAgICAg
ICRvYmplY3QtPlNjYW5EaXJlY3RvcnkoIiRpbnRlcmZhY2UuaWRsIiwgJF8sICRfLCAwKTsKKyAg
ICB9CisgIH0KKworICAjIFN0ZXAgIzI6IFBhcnNlIHRoZSBmb3VuZCBJREwgZmlsZSAoaW4gcXVp
ZXQgbW9kZSkuCisgIG15ICRwYXJzZXIgPSBJRExQYXJzZXItPm5ldygxKTsKKyAgbXkgJGRvY3Vt
ZW50ID0gJHBhcnNlci0+UGFyc2UoJGZvdW5kRmlsZW5hbWUpOworCisgICMgU3RlcCAjMzogQ2hl
Y2sgd2hldGVyIHRoZSBwYXJzZWQgSURMIGZpbGUgaGFzIHBhcmVudHMKKyAgZm9yZWFjaChAeyRk
b2N1bWVudC0+Y2xhc3Nlc30pIHsKKyAgICBteSAkY2xhc3MgPSAkXzsKKworICAgIGlmKCRjbGFz
cy0+bmFtZSBlcSAkaW50ZXJmYWNlKSB7CisgICAgICBmb3JlYWNoKEB7JGNsYXNzLT5hdHRyaWJ1
dGVzfSkgeworICAgICAgICBpZigkXy0+dHlwZSAhfiAvXnJlYWRvbmx5XCBhdHRyaWJ1dGUkLykg
eworICAgICAgICAgICRoYXNXcml0ZWFibGVBdHRyaWJ1dGVzID0gMTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAkaGFzV3JpdGVhYmxlQXR0cmlidXRlczsKK30K
KworIyBIZWxwZXIgZm9yIGFsbCBJRExDb2RlR2VuZXJhdG9yKioqLnBtIG1vZHVsZXMKK3N1YiBB
bGxDbGFzc2VzV2hpY2hJbmhlcml0RnJvbQoreworICAjIERldGVybWluZSB3aGljaCBpbnRlcmZh
Y2VzIGluaGVyaXQgZnJvbSB0aGUgcGFzc2VkIG9uZS4uLgorICBteSAkb2JqZWN0ID0gc2hpZnQ7
CisKKyAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAkaW50ZXJmYWNlID1+IHMvKFthLXpBLVow
LTldKjo6KSovLzsgIyBTdHJpcCBuYW1lc3BhY2UocykuCisKKyAgIyBTdGVwICMxOiBMb29wIHRo
cm91Z2ggYWxsIGluY2x1ZGVkIGRpcmVjdG9yaWVzIHRvIHNjYW4gZm9yIGFsbCBJREwgZmlsZXMu
Li4KKyAgbXkgQGFsbElETEZpbGVzID0gKCk7CisgIGZvcmVhY2goQHskdXNlRGlyZWN0b3JpZXN9
KSB7CisgICAgJGVuZENvbmRpdGlvbiA9IDA7CisgICAgQGZvdW5kRmlsZW5hbWVzID0gKCk7CisK
KyAgICAkb2JqZWN0LT5TY2FuRGlyZWN0b3J5KCJhbGxpZGxzIiwgJF8sICRfLCAxKTsKKyAgICBm
b3JlYWNoKEBmb3VuZEZpbGVuYW1lcykgeworICAgICAgcHVzaChAYWxsSURMRmlsZXMsICRfKTsK
KyAgICB9CisgIH0KKworICAjIFN0ZXAgIzI6IExvb3AgdGhyb3VnaCBhbGwgZm91bmQgSURMIGZp
bGVzLi4uCisgIG15ICVjbGFzc0RhdGFDYWNoZTsKKyAgZm9yZWFjaChAYWxsSURMRmlsZXMpIHsK
KyAgICAjIFN0ZXAgIzM6IFBhcnNlIHRoZSBmb3VuZCBJREwgZmlsZSAoaW4gcXVpZXQgbW9kZSku
CisgICAgbXkgJHBhcnNlciA9IElETFBhcnNlci0+bmV3KDEpOworICAgIG15ICRkb2N1bWVudCA9
ICRwYXJzZXItPlBhcnNlKCRfKTsKKworICAgICMgU3RlcCAjNDogQ2FjaGUgdGhlIHBhcnNlZCBJ
REwgZGF0YXN0cnVjdHVyZXMuCisgICAgbXkgJGNhY2hlSGFuZGxlID0gJF87ICRjYWNoZUhhbmRs
ZSA9fiBzLy4qXC8oLiopXC5pZGwvLzsKKyAgICAkY2xhc3NEYXRhQ2FjaGV7JDF9ID0gJGRvY3Vt
ZW50OworICB9CisKKyAgbXkgJWNsYXNzRGF0YUNhY2hlQ29weSA9ICVjbGFzc0RhdGFDYWNoZTsg
IyBQcm90ZWN0IQorCisgICMgU3RlcCAjNTogTG9vcCB0aHJvdWdoIGFsbCBjYWNoZWQgSURMIGRv
Y3VtZW50cy4uLgorICBteSBAY2xhc3NMaXN0ID0gKCk7CisgIHdoaWxlKG15KCRuYW1lLCAkZG9j
dW1lbnQpID0gZWFjaCAlY2xhc3NEYXRhQ2FjaGUpIHsKKyAgICAkZW5kQ29uZGl0aW9uID0gMDsK
KworICAgICMgU3RlcCAjNjogQ2hlY2sgd2hldGVyIHRoZSBwYXJzZWQgSURMIGZpbGUgaGFzIHBh
cmVudHMuLi4KKyAgICAkb2JqZWN0LT5SZWN1cnNpdmVJbmhlcml0YW5jZUhlbHBlcigkZG9jdW1l
bnQsICRpbnRlcmZhY2UsIFxAY2xhc3NMaXN0LCBcJWNsYXNzRGF0YUNhY2hlQ29weSk7CisgIH0K
KworICAjIFN0ZXAgIzc6IFJldHVybiBsaXN0IG9mIGFsbCBjbGFzc2VzIHdoaWNoIGluaGVyaXQg
ZnJvbSBtZSEKKyAgcmV0dXJuIFxAY2xhc3NMaXN0OworfQorCisjIEhlbHBlciBmb3IgYWxsIElE
TENvZGVHZW5lcmF0b3IqKioucG0gbW9kdWxlcworc3ViIEFsbENsYXNzZXMKK3sKKyAgIyBEZXRl
cm1pbmVzIGFsbCBpbnRlcmZhY2VzIHdpdGhpbiBhIHByb2plY3QuLi4KKyAgbXkgJG9iamVjdCA9
IHNoaWZ0OworCisgICMgU3RlcCAjMTogTG9vcCB0aHJvdWdoIGFsbCBpbmNsdWRlZCBkaXJlY3Rv
cmllcyB0byBzY2FuIGZvciBhbGwgSURMIGZpbGVzLi4uCisgIG15IEBhbGxJRExGaWxlcyA9ICgp
OworICBmb3JlYWNoKEB7JHVzZURpcmVjdG9yaWVzfSkgeworICAgICRlbmRDb25kaXRpb24gPSAw
OworICAgIEBmb3VuZEZpbGVuYW1lcyA9ICgpOworCisgICAgJG9iamVjdC0+U2NhbkRpcmVjdG9y
eSgiYWxsaWRscyIsICRfLCAkXywgMSk7CisgICAgZm9yZWFjaChAZm91bmRGaWxlbmFtZXMpIHsK
KyAgICAgIHB1c2goQGFsbElETEZpbGVzLCAkXyk7CisgICAgfQorICB9CisKKyAgIyBTdGVwICMy
OiBMb29wIHRocm91Z2ggYWxsIGZvdW5kIElETCBmaWxlcy4uLgorICBteSBAY2xhc3NMaXN0ID0g
KCk7CisgIGZvcmVhY2goQGFsbElETEZpbGVzKSB7CisgICAgIyBTdGVwICMzOiBQYXJzZSB0aGUg
Zm91bmQgSURMIGZpbGUgKGluIHF1aWV0IG1vZGUpLgorICAgIG15ICRwYXJzZXIgPSBJRExQYXJz
ZXItPm5ldygxKTsKKyAgICBteSAkZG9jdW1lbnQgPSAkcGFyc2VyLT5QYXJzZSgkXyk7CisKKyAg
ICAjIFN0ZXAgIzQ6IENoZWNrIGlmIGNsYXNzIGlzIGEgYmFzZWNsYXNzLi4uCisgICAgZm9yZWFj
aChAeyRkb2N1bWVudC0+Y2xhc3Nlc30pIHsKKyAgICAgIG15ICRjbGFzcyA9ICRfOworCisgICAg
ICBteSAkaWRlbnRpZmllciA9ICRjbGFzcy0+bmFtZTsKKyAgICAgIG15ICRuYW1lc3BhY2UgPSAk
bW9kdWxlTmFtZXNwYWNlSGFzaHskZG9jdW1lbnQtPm1vZHVsZX07CisgICAgICAkaWRlbnRpZmll
ciA9ICRuYW1lc3BhY2UgLiAiOjoiIC4gJGlkZW50aWZpZXIgaWYoJG5hbWVzcGFjZSBuZSAiIik7
CisKKyAgICAgIG15IEBhcnJheSA9IGdyZXAgeyAvXiRpZGVudGlmaWVyJC8gfSBAJGNsYXNzTGlz
dDsKKworICAgICAgbXkgJGFycmF5U2l6ZSA9IEBhcnJheTsKKyAgICAgIGlmKCRhcnJheVNpemUg
ZXEgMCkgeworICAgICAgICBwdXNoKEBjbGFzc0xpc3QsICRpZGVudGlmaWVyKTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKworICAjIFN0ZXAgIzc6IFJldHVybiBsaXN0IG9mIGFsbCBiYXNlIGNsYXNz
ZXMhCisgIHJldHVybiBcQGNsYXNzTGlzdDsKK30KKworIyBJbnRlcm5hbCBoZWxwZXIgZm9yICdB
bGxDbGFzc2VzV2hpY2hJbmhlcml0RnJvbScKK3N1YiBSZWN1cnNpdmVJbmhlcml0YW5jZUhlbHBl
cgoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisKKyAgbXkgJGRvY3VtZW50ID0gc2hpZnQ7Cisg
IG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgbXkgJGNsYXNzTGlzdCA9IHNoaWZ0OworICBteSAk
Y2xhc3NEYXRhQ2FjaGUgPSBzaGlmdDsKKworICBpZigkZW5kQ29uZGl0aW9uIGVxIDEpIHsKKyAg
ICByZXR1cm4gMTsKKyAgfQorCisgIGZvcmVhY2goQHskZG9jdW1lbnQtPmNsYXNzZXN9KSB7Cisg
ICAgbXkgJGNsYXNzID0gJF87CisKKyAgICBmb3JlYWNoKEB7JGNsYXNzLT5wYXJlbnRzfSkgewor
ICAgICAgbXkgJGNhY2hlSGFuZGxlID0gJF87CisgICAgICAkY2FjaGVIYW5kbGUgPX4gcy9bYS16
QS1aMC05XSo6Oi8vOyAjIFN0cmlwIG1vZHVsZS4KKworICAgICAgaWYoJGNhY2hlSGFuZGxlIGVx
ICRpbnRlcmZhY2UpIHsKKyAgICAgICAgbXkgJGlkZW50aWZpZXIgPSAkZG9jdW1lbnQtPm1vZHVs
ZSAuICI6OiIgLiAkY2xhc3MtPm5hbWU7CisgICAgICAgIG15IEBhcnJheSA9IGdyZXAgeyAvXiRp
ZGVudGlmaWVyJC8gfSBAJGNsYXNzTGlzdDsgbXkgJGFycmF5U2l6ZSA9IEBhcnJheTsKKyAgICAg
ICAgcHVzaChAJGNsYXNzTGlzdCwgJGlkZW50aWZpZXIpIGlmKCRhcnJheVNpemUgZXEgMCk7CisK
KyAgICAgICAgJGVuZENvbmRpdGlvbiA9IDE7CisgICAgICAgIHJldHVybiAkZW5kQ29uZGl0aW9u
OworICAgICAgfSBlbHNlIHsgCisgICAgICAgIG15ICVjYWNoZSA9ICV7JGNsYXNzRGF0YUNhY2hl
fTsKKworICAgICAgICBteSAkY2hlY2tEb2N1bWVudCA9ICRjYWNoZXskY2FjaGVIYW5kbGV9Owor
ICAgICAgICAkZW5kQ29uZGl0aW9uID0gJG9iamVjdC0+UmVjdXJzaXZlSW5oZXJpdGFuY2VIZWxw
ZXIoJGNoZWNrRG9jdW1lbnQsICRpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJGNsYXNzTGlzdCwgJGNsYXNzRGF0YUNhY2hlKTsKKyAgICAgICAgaWYoJGVuZENv
bmRpdGlvbiBlcSAxKSB7CisgICAgICAgICAgbXkgJGlkZW50aWZpZXIgPSAkZG9jdW1lbnQtPm1v
ZHVsZSAuICI6OiIgLiAkY2xhc3MtPm5hbWU7CisgICAgICAgICAgbXkgQGFycmF5ID0gZ3JlcCB7
IC9eJGlkZW50aWZpZXIkLyB9IEAkY2xhc3NMaXN0OyBteSAkYXJyYXlTaXplID0gQGFycmF5Owor
ICAgICAgICAgIHB1c2goQCRjbGFzc0xpc3QsICRpZGVudGlmaWVyKSBpZigkYXJyYXlTaXplIGVx
IDApOworCisgICAgICAgICAgcmV0dXJuICRlbmRDb25kaXRpb247CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9CisgIH0KKworICByZXR1cm4gJGVuZENvbmRpdGlvbjsKK30KKworIyBIZWxwZXIg
Zm9yIGFsbCBDb2RlR2VuZXJhdG9yKioqLnBtIG1vZHVsZXMKK3N1YiBJc1ByaW1pdGl2ZVR5cGUK
K3sKKyAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgaWYo
KCR0eXBlID1+IC9eaW50JC8pIG9yICgkdHlwZSA9fiAvXnNob3J0JC8pIG9yICgkdHlwZSA9fiAv
XmxvbmckLykgb3IKKyAgICAgKCR0eXBlID1+IC9edW5zaWduZWQgaW50JC8pIG9yICgkdHlwZSA9
fiAvXnVuc2lnbmVkIHNob3J0JC8pIG9yICgkdHlwZSA9fiAvXnVuc2lnbmVkIGxvbmckLykgb3IK
KyAgICAgKCR0eXBlID1+IC9eZmxvYXQkLykgb3IgKCR0eXBlID1+IC9eZG91YmxlJC8pIG9yICgk
dHlwZSA9fiAvXmJvb2xlYW4kLykgb3IgKCR0eXBlID1+IC9edm9pZCQvKSkgeworICAgIHJldHVy
biAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgSW50ZXJuYWwgSGVscGVyCitzdWIgU2Nh
bkRpcmVjdG9yeQoreworICBteSAkb2JqZWN0ID0gc2hpZnQ7CisKKyAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OworICBteSAkZGlyZWN0b3J5ID0gc2hpZnQ7CisgIG15ICR1c2VEaXJlY3RvcnkgPSBz
aGlmdDsKKyAgbXkgJHJlcG9ydEFsbEZpbGVzID0gc2hpZnQ7CisKKyAgaWYoKCRlbmRDb25kaXRp
b24gZXEgMSkgYW5kICgkcmVwb3J0QWxsRmlsZXMgZXEgMCkpIHsKKyAgICByZXR1cm47CisgIH0K
KworICBjaGRpcigkZGlyZWN0b3J5KSBvciBkaWUgIltFUlJPUl0gQ2FuJ3QgZW50ZXIgZGlyZWN0
b3J5ICRkaXJlY3Rvcnk6IFwiJCFcIlxuIjsKKyAgb3BlbmRpcihESVIsICIuIikgb3IgZGllICJb
RVJST1JdIENhbid0IG9wZW4gZGlyZWN0b3J5ICRkaXJlY3Rvcnk6IFwiJCFcIlxuIjsKKworICBt
eSBAbmFtZXMgPSByZWFkZGlyKERJUikgb3IgZGllICJbRVJST1JdIENhbnQndCByZWFkIGRpcmVj
dG9yeSAkZGlyZWN0b3J5OiBcIiQhXCJcbiI7CisgIGNsb3NlZGlyKERJUik7CisKKyAgZm9yZWFj
aChAbmFtZXMpIHsKKyAgICBteSAkbmFtZSA9ICRfOworCisgICAgIyBTa2lwIGlmIHdlIGFscmVh
ZHkgZm91bmQgdGhlIHJpZ2h0IGZpbGUgb3IKKyAgICAjIGlmIHdlIGVuY291bnRlciAnZXhvdGlj
JyBzdHVmZiAoaWUuICcuJywgJy4uJywgJy5zdm4nKQorICAgIGlmKCgkZW5kQ29uZGl0aW9uIGVx
IDEpIG9yICgkbmFtZSA9fiAvXlwuLykpIHsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgIyBS
ZWN1cmlzdmVseSBlbnRlciBkaXJlY3RvcnkuLi4KKyAgICBpZigtZCAkbmFtZSkgeworICAgICAg
JG9iamVjdC0+U2NhbkRpcmVjdG9yeSgkaW50ZXJmYWNlLCAkbmFtZSwgJHVzZURpcmVjdG9yeSwg
JHJlcG9ydEFsbEZpbGVzKTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgIyBDaGVjayB3aGV0
ZXIgd2UgZm91bmQgdGhlIGRlc2lyZWQgZmlsZS4uLgorICAgIG15ICRjb25kaXRpb24gPSAoJG5h
bWUgZXEgJGludGVyZmFjZSk7CisgICAgaWYoKCRpbnRlcmZhY2UgZXEgImFsbGlkbHMiKSBhbmQK
KyAgICAgICAoJG5hbWUgPX4gL1wuaWRsJC8pKSB7CisgICAgICAkY29uZGl0aW9uID0gMTsKKyAg
ICB9CisKKyAgICBpZigkY29uZGl0aW9uKSB7CisgICAgICAkZm91bmRGaWxlbmFtZSA9ICIkdXNl
RGlyZWN0b3J5LyRkaXJlY3RvcnkvJG5hbWUiOworCisgICAgICBpZigkcmVwb3J0QWxsRmlsZXMg
ZXEgMCkgeworICAgICAgICAkZW5kQ29uZGl0aW9uID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHB1c2goQGZvdW5kRmlsZW5hbWVzLCAkZm91bmRGaWxlbmFtZSk7CisgICAgICB9CisgICAg
fQorCisgICAgY2hkaXIoJHVzZURpcmVjdG9yeSkgb3IgZGllICJbRVJST1JdIENhbid0IGNoYW5n
ZSBkaXJlY3RvcnkgdG8gJHVzZURpcmVjdG9yeTogXCIkIVwiXG4iOworICB9Cit9CisKKzE7Cklu
ZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMv
SlNFdmVudHMuY3BwCShyZXZpc2lvbiAwKQorKysgYmluZGluZ3MvanMvSlNFdmVudHMuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKy8vIFRoZXNlIGFyZSBnZW5lcmF0ZWQgZmlsZXMK
KworI2luY2x1ZGUgIkpTV2hlZWxFdmVudC5jcHAiCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxMjMzNikKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDcgQEAKIAlvYmplY3RzID0gewogCiAvKiBC
ZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkxQTFCRDExRDA5ODZCRDdCMDBFOUU3NDIg
LyogSlNFdmVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUExQkQxMUIwOTg2QkQ3QjAwRTlFNzQyIC8qIEpTRXZlbnRzLmNwcCAqLzsgfTsKIAkJ
MUEzRDg1NTcwOTc2NDdCNTAwMkM4NUQxIC8qIE9iamVjdENvbnRlbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTNEODU1NjA5NzY0N0I0MDAyQzg1
RDEgLyogT2JqZWN0Q29udGVudHMuaCAqLzsgfTsKIAkJMUE2OUQzODEwODU2Mjc0MTAwMDk4ODBE
IC8qIGRvbXBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE2OUQzN0YwODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5oICovOyB9OwogCQkx
QTY5RDM4MjA4NTYyNzQxMDAwOTg4MEQgLyogZG9tcGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNjlEMzgwMDg1NjI3NDEwMDA5ODgwRCAv
KiBkb21wYXJzZXIuY3BwICovOyB9OwpAQCAtMTA5Miw2ICsxMDkzLDcgQEAKIC8qIEVuZCBQQlhC
dWlsZFN0eWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCisJCTFBMUJEMTFCMDk4NkJEN0IwMEU5RTc0MiAvKiBKU0V2ZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0V2ZW50cy5jcHA7IHBhdGggPSBiaW5kaW5n
cy9qcy9KU0V2ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBM0Q4NTU2
MDk3NjQ3QjQwMDJDODVEMSAvKiBPYmplY3RDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT2JqZWN0Q29udGVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUE2OUQzN0YwODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRvbXBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMUE2
OUQzODAwODU2Mjc0MTAwMDk4ODBEIC8qIGRvbXBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRvbXBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMzA0
Miw2ICszMDQ0LDcgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAwMTlGM0Q4IC8qIEphdmFTY3JpcHQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFBMUJEMTFC
MDk4NkJEN0IwMEU5RTc0MiAvKiBKU0V2ZW50cy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEph
dmFTY3JpcHQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDQyMiw2ICs0NDI1LDcg
QEAKIAkJCQlBODhBRDUyNTA5NTI0QTM0MDAxREQxOTYgLyogWExpbmtOYW1lcyAqLywKIAkJCQlB
ODhBRDUyOTA5NTI0QTRBMDAxREQxOTYgLyoga3N2Z2Nzc3Byb3BlcnRpZXMuYy9oICovLAogCQkJ
CUE4OEFENTJCMDk1MjRBNTIwMDFERDE5NiAvKiBrc3ZnY3NzdmFsdWVzLmMvaCAqLywKKwkJCQkx
QTYyQjlDNDA5ODU5MUVGMDAwRThEN0IgLyogR2VuZXJhdGUgSmF2YXNjcmlwdCBCaW5kaW5ncyAq
LywKIAkJCQk5MzdBMzY1MTA5N0UyNTdCMDBFNEVFMkYgLyogVXNlciBBZ2VudCBTdHlsZSBTaGVl
dCAqLywKIAkJCQk5M0YxOThBNjA4MjQ1RTU5MDAxRTlBQkMgLyogSGVhZGVycyAqLywKIAkJCQk5
M0YxOTlGRDA4MjQ1RTU5MDAxRTlBQkMgLyogUmVzb3VyY2VzICovLApAQCAtNDU1Nyw2ICs0NTYx
LDIwIEBACiAvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTFBNjJCOUM0MDk4NTkx
RUYwMDBFOEQ3QiAvKiBHZW5lcmF0ZSBKYXZhc2NyaXB0IEJpbmRpbmdzICovID0geworCQkJaXNh
ID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkpOworCQkJ
bmFtZSA9ICJHZW5lcmF0ZSBKYXZhc2NyaXB0IEJpbmRpbmdzIjsKKwkJCW91dHB1dFBhdGhzID0g
KAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJ
c2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gIi91c3IvYmluL2VudiBwZXJs
IC1JXCIkU1JDUk9PVC9iaW5kaW5ncy9zY3JpcHRzXCIgXCIkU1JDUk9PVC9iaW5kaW5ncy9zY3Jp
cHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsXCIgLS1nZW5lcmF0b3IgSlMgLS1pZGxkaXIgXCIkU1JD
Uk9PVC9raHRtbC94bWxcIiAtLW91dHB1dGRpciBcIiRERVJJVkVEX0ZJTEVfRElSXCJcbiI7CisJ
CX07CiAJCTFBNjlEMzg3MDg1NjI4NjUwMDA5ODgwRCAvKiBkb21wYXJzZXIubHV0LmggKi8gPSB7
CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwpAQCAtNTQ4OCw2ICs1NTA2LDcgQEAKIAkJCQlFMUYwNDI0NjA5ODM5Mzg5
MDA2Njk0RUEgLyogeG1saHR0cHJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjVG
NDkwOTg0NDhDNzAwNTI5ODFCIC8qIEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThERjVGQTQwOTg0NjBBQTAwNTI5ODFCIC8qIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTFCRDExRDA5ODZCRDdCMDBFOUU3NDIgLyog
SlNFdmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMzNikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQxIEBACisyMDA2LTAxLTI0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBtYWMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIC0gaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc1
CisgICAgICAgIFdlYkNvcmUgbmVlZHMgdG8gdXNlIEtET00tbGlrZSBET00gYmluZGluZyBhdXRv
Z2VuZXJhdGlvbgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGZpcnN0IGN1dCBhdCBhbiBh
dXRvZ2VuZXJhdGlvbiBmcmFtZXdvcmsgYmFzZWQgb24gCisgICAgICAgIHdoYXQgS0RPTSB1c2Vz
LCBidXQgd2l0aCBzb21lIGNoYW5nZXMgdG8gYmUgYWJsZSB0byBtb3ZlCisgICAgICAgIGdyYWR1
YWxseSB0byB1c2luZyBhdXRvZ2VuZXJhdGVkIGZpbGVzLiBDdXJyZW50bHkgb25seSBKYXZhc2Ny
aXB0CisgICAgICAgIGlzIHN1cHBvcnRlZCwgYnV0IE9iakMgc3VwcG9ydCBjb3VsZCBiZSBhZGRl
ZCBieSB3cml0aW5nIGEgbmV3IGNvZGUKKyAgICAgICAgZ2VuZXJhdG9yIHBhY2thZ2UuCisgICAg
ICAgIAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgQ2FsbCBnZW5lcmF0ZS1iaW5kaW5ncy5wbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgTmV3IGZpbGUgd2hpY2ggI2luY2x1ZGVzIGFsbCBn
ZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIGV2ZW50IG1vZHVsZQorICAgICAgICAoSnVzdCBKU1doZWVs
RXZlbnQuY3BwIGZvciBub3cpCisgICAgICAgIAorICAgICAgICAqIGtodG1sL3htbC9XaGVlbEV2
ZW50LmlkbDogQWRkZWQuCisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHM6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbTogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbTogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbDogQWRkZWQuCisgICAgICAgIAorICAg
ICAgICAqIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHA6CisgICAgICAgIFJlbW92ZSBET01XaGVl
bEV2ZW50IGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKEtKUzo6Z2V0RE9NRXZlbnQpOgorICAg
ICAgICBVc2UgSlNXaGVlbEV2ZW50IGhlcmUuCisgICAgICAgIAorICAgICAgICAqIGtodG1sL2Vj
bWEva2pzX2V2ZW50cy5oOgorICAgICAgICBSZW1vdmUgRE9NV2hlZWxFdmVudCBjbGFzcy4KKwog
MjAwNi0wMS0yNCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAg
IC0gZml4IGJ1aWxkCg==
</data>
<flag name="review"
          id="1386"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>