<?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>36777</bug_id>
          
          <creation_ts>2010-03-29 13:23:55 -0700</creation_ts>
          <short_desc>[V8] Generate creation of hidden window references for DOMWindow attributes</short_desc>
          <delta_ts>2010-04-02 13:23:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>205635</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-29 13:23:55 -0700</bug_when>
    <thetext>(This bug began life as http://code.google.com/p/chromium/issues/detail?id=38990)

In the V8 bindings, we have a series of custom toV8() implementations for objects that need to ensure that their JS wrappers outlive garbage collection, so a reference is create to them on the JS wrapper of the relevant DOMWindow. There are two problems with this:
1. Custom toV8() implementation are teh suck.
2. It requires more than a passing knowledge of the v8 bindings to know that a custom toV8() implementation is necessary for a new object with this requirement (again, see chromium bug).

I believe that the case where a hidden reference is necessary is an (1) attribute of (2) DOMWindow that (3) is non-node, (4) non-EventListener, (5) non-DOMWindow, (6) non-Constructor, (7) and RefCounted (the last requirement filters out attributes that are int/double/etc).

My patch will do the following:
1. Change how we create the hidden references on the DOMWindow wrapper so that we don&apos;t need to manually specify an internal field for each variable that needs a hidden reference.
2. Move the logic of creating the hidden reference from the toV8() implementation to the generated attribute getter.
3. Delete a bunch of custom toV8() implementations.
4. Add more precision in the COMPILE_ASSERTs in V8DOMWrapper.cpp, since there is code that depends on the number of internal fields on a DOMWindow JS wrapper, and that number will no longer be nearly as unique as it once was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205643</commentid>
    <comment_count>1</comment_count>
      <attachid>51959</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-29 13:34:04 -0700</bug_when>
    <thetext>Created attachment 51959
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205651</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-03-29 13:43:07 -0700</bug_when>
    <thetext>This looks like it will fix the bug i was seeing around the applicationCache wrapper going &apos;poof&apos;... and for all other DOMWindow object attributes.

I&apos;m mildly concerned there are other instances of this problem with object attributes hanging off of things besides DOMWindow. For example,
XmlHttpRequest and its upload attribute, on which event handlers are hung.

So I&apos;m wondering if a more general solution that works for DOMWindow and XmlHttpRequest alike is possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206692</commentid>
    <comment_count>3</comment_count>
      <attachid>52207</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-31 13:28:55 -0700</bug_when>
    <thetext>Created attachment 52207
add a more general solution for keeping js wrappers alive through gc

The solution now deals with wrappers for non-Node DOM objects of a wide variety of types, not just ones that hang off of the DOMWindow.

I&apos;m getting builds ready to run performance tests, don&apos;t know for sure whether this will have an impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206760</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-03-31 15:26:36 -0700</bug_when>
    <thetext>Excellent!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207173</commentid>
    <comment_count>5</comment_count>
      <attachid>52207</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-01 08:43:09 -0700</bug_when>
    <thetext>Comment on attachment 52207
add a more general solution for keeping js wrappers alive through gc

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207470</commentid>
    <comment_count>6</comment_count>
      <attachid>52349</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-04-01 16:20:01 -0700</bug_when>
    <thetext>Created attachment 52349
Add a couple more exceptions

Don&apos;t set a hidden reference is the current interface is a Node subtype (for performance).

Skip attributes named self (fixes some WorkerContext handling issues)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207883</commentid>
    <comment_count>7</comment_count>
      <attachid>52349</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-02 09:32:58 -0700</bug_when>
    <thetext>Comment on attachment 52349
Add a couple more exceptions

even more r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208038</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-04-02 13:23:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57004 and http://trac.webkit.org/changeset/57008</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51959</attachid>
            <date>2010-03-29 13:34:04 -0700</date>
            <delta_ts>2010-03-31 13:28:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>hidden_references.txt</filename>
            <type>text/plain</type>
            <size>25272</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjczNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMjkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYWxpemUgKGFuZCBnZW5lcmF0ZSEpIHRoZSBjcmVhdGlvbiBvZiBoaWRkZW4gcmVm
ZXJlbmNlcyAKKyAgICAgICAgYmV0d2VlbiBKUyB3cmFwcGVycyBhbmQgdGhlIHJlbGV2YW50IERP
TVdpbmRvdyB3cmFwcGVyLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2Nzc3CisKKyAgICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3Mu
bWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBjYWxscyB0byBzZXRIaWRkZW5XaW5kb3dSZWZl
cmVuY2UoKSBmb3IKKyAgICAgICAgdGhlIGFwcHJvcHJpYXRlIERPTVdpbmRvdyBhdHRyaWJ1dGUg
Z2V0dGVycy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UpOiBDaGFu
Z2UgZnJvbSBoYXZpbmcgYSAKKyAgICAgICAgICAgIHNlcGFyYXRlIGluZGV4IGZvciBlYWNoIGhp
ZGRlbiByZWZlcmVuY2VzIHRvIGEgc2luZ2xlIGFycmF5LgorICAgICAgICAoV2ViQ29yZTo6Z2xv
YmFsT2JqZWN0UHJvdG90eXBlSXNET01XaW5kb3cpOiBCZSBtb3JlIHRob3JvdWdoIGluIHRoZSBD
T01QSUxFX0FTU0VSVHMuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNw
cDogUmVtb3ZlZCBjdXN0b20gdG9WOCgpIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZCBjdXN0b20gdG9WOCgp
IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRv
ckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2Ny
ZWVuQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
ZnJhbWUpOiBBZGQgZnJhbWUoKSBhY2Nlc3Nvci4KKwogMjAxMC0wMy0yOSAgS2VubmV0aCBSdXNz
ZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDU2NzIzKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTY3Nyw3ICs2NzcsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0No
aWxkVGhyZWFkRE9NRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0NoaWxkVGhy
ZWFkRE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3Vz
dG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJy
YXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFy
cmF5Q3VzdG9tLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJy
YXlDdXN0b20uY3BwJywKQEAgLTcyMyw3ICs3MjIsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NRm9ybURhdGFDdXN0b20uY3BwJywK
LSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwJywK
QEAgLTc2NCw3ICs3NjIsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5h
bWVkTm9kZU1hcEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uaCcsCi0gICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwJywKQEAgLTc3OSw3ICs3NzYsNiBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwJywKLSAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwJywK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2
aXNpb24gNTY3MjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsOSArMzU0LDcgQEAKICAgICB9IGVsc2lmICgkbmFt
ZSBlcSAiTWVzc2FnZUNoYW5uZWwiKSB7CiAgICAgICAgIHB1c2goQGN1c3RvbUludGVybmFsRmll
bGRzLCAoInBvcnQxSW5kZXgiLCAicG9ydDJJbmRleCIpKTsKICAgICB9IGVsc2lmICgkbmFtZSBl
cSAiRE9NV2luZG93IikgewotICAgICAgICBwdXNoKEBjdXN0b21JbnRlcm5hbEZpZWxkcywgKCJj
b25zb2xlSW5kZXgiLCAiaGlzdG9yeUluZGV4IiwgImxvY2F0aW9uYmFySW5kZXgiLCAibWVudWJh
ckluZGV4IiwgIm5hdmlnYXRvckluZGV4IiwgCi0gICAgICAgICAgICAicGVyc29uYWxiYXJJbmRl
eCIsICJzY3JlZW5JbmRleCIsICJzY3JvbGxiYXJzSW5kZXgiLCAic2VsZWN0aW9uSW5kZXgiLCAi
c3RhdHVzYmFySW5kZXgiLCAidG9vbGJhckluZGV4IiwgImxvY2F0aW9uSW5kZXgiLAotICAgICAg
ICAgICAgImRvbVNlbGVjdGlvbkluZGV4IiwgImVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgiKSk7
CisgICAgICAgIHB1c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAoImVudGVyZWRJc29sYXRlZFdv
cmxkSW5kZXgiLCAiaGlkZGVuUmVmZXJlbmNlQXJyYXlJbmRleCIpKTsKICAgICB9CiAgICAgcmV0
dXJuIEBjdXN0b21JbnRlcm5hbEZpZWxkczsKIH0KQEAgLTc2Nyw2ICs3NjUsMzIgQEAKICAgICAg
ICAgICAgICMgQ2FuIGlubGluZSB0aGUgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSByZXR1cm4gc3Rh
dGVtZW50IHRvIGF2b2lkIG92ZXJoZWFkIG9mIHVzaW5nIGEgUmVmPD4gdGVtcG9yYXJ5CiAgICAg
ICAgICAgICAkcmVzdWx0ID0gJGdldHRlclN0cmluZzsKICAgICAgICAgfQorIAorICAgICAgICAj
IFNwZWNpYWwgY2FzZSBmb3Igbm9uLW5vZGUsIG5vbi1FdmVudExpc3RlbmVyLCBub24tQ29uc3Ry
dWN0b3IgYXR0cmlidXRlcyBvbiBET01XaW5kb3cuCisgICAgICAgICMgQW55IEpTIHdyYXBwZXJz
IGNyZWF0ZWQgZm9yIG9uZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGl0cyBsaWZl
dGltZSB0aWVkIHRvIHRoYXQgb2YgdGhlIERPTVdpZG5kb3cKKyAgICAgICAgIyB3cmFwcGVyLCBz
byB3ZSBjcmVhdGUgYSBoaWRkZW4gcmVmZXJlbmNlIHRvIGVuc3VyZSB0aGVzZSB3cmFwcGVycyBz
dXJ2aXZlIGFueSBnYXJiYWdlIGNvbGxlY3Rpb25zIHByaW9yIHRvCisgICAgICAgICMgdGhhdCBv
ZiB0aGUgRE9NV2luZG93LgorICAgICAgICBpZiAoJGRhdGFOb2RlLT5uYW1lIGVxICJET01XaW5k
b3ciICYmIElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkgJiYgJHJldHVyblR5cGUgbmUgIkRPTVdp
bmRvdyIgCisgICAgICAgICAgICAmJiAkcmV0dXJuVHlwZSBuZSAiRG9jdW1lbnQiICYmICRyZXR1
cm5UeXBlIG5lICJFbGVtZW50IiAmJiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgbmUgIkV2
ZW50TGlzdGVuZXIiKSB7CisgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHJldHVyblR5
cGUpOworICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGFuZGxlIFJlZlB0cnMgYW5kIFBhc3NS
ZWZQdHJzIGNvcnJlY3RseS4KKyAgICAgICAgICAgIGlmICgkcmV0dXJuVHlwZSBlcSAiTWVkaWEi
KSB7CisgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXN1bHQgLiAiLmdldCgpIjsKKyAgICAg
ICAgICAgIH0gZWxzaWYgKCR1c2VFeGNlcHRpb25zKSB7CisgICAgICAgICAgICAgICAgJHJlc3Vs
dCA9fiBzL3JlbGVhc2UvZ2V0LzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgQ2hlY2sg
Zm9yIGEgd3JhcHBlciBpbiB0aGUgd3JhcHBlciBjYWNoZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSBr
bm93IHRoYXQgYSBoaWRkZW4gcmVmZXJlbmNlIGhhcyBhbHJlYWR5CisgICAgICAgICAgICAjIGJl
ZW4gY3JlYXRlZC4gSWYgd2UgZG9uJ3QgZmluZCBhIHdyYXBwZXIsIHdlIGNyZWF0ZSBib3RoIGEg
d3JhcHBlciBhbmQgYSBoaWRkZW4gcmVmZXJlbmNlLgorICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAkcmV0dXJuVHlwZSogcmVzdWx0ID0gJHtyZXN1bHR9O1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHJlc3VsdCk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgp
KSB7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHdy
YXBwZXIgPSB0b1Y4KHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGlt
cC0+ZnJhbWUoKSwgd3JhcHBlcik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHJldHVybiB3cmFwcGVyO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAifVxuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkYXR0clR5cGUpICYmICEk
c2tpcENvbnRleHQpIHsKQEAgLTIwNDgsMjEgKzIwNzIsMTUgQEAKICAgICAkaW50ZXJmYWNlTmFt
ZSA9IHNoaWZ0OwogCiAgICAgIyBXZSBnZW5lcmF0ZSBhIGN1c3RvbSBjb252ZXJ0ZXIgKGJ1dCBK
U0MgZG9lc24ndCkgZm9yIHRoZSBmb2xsb3dpbmc6Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFj
ZU5hbWUgZXEgIkJhckluZm8iOwogICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJD
U1NTdHlsZVNoZWV0IjsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ2FudmFz
UGl4ZWxBcnJheSI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVNlbGVj
dGlvbiI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7CiAg
ICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiOwotICAgIHJldHVybiAx
IGlmICRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVy
ZmFjZU5hbWUgZXEgIkhUTUxEb2N1bWVudCI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5h
bWUgZXEgIkhUTUxFbGVtZW50IjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAi
SGlzdG9yeSI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1h
cCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5hdmlnYXRvciI7CiAgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNWR0RvY3VtZW50IjsKICAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudCI7Ci0gICAgcmV0dXJuIDEgaWYgJGlu
dGVyZmFjZU5hbWUgZXEgIlNjcmVlbiI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUg
ZXEgIldvcmtlckNvbnRleHQiOwogICAgICMgV2UgZG9uJ3QgZ2VuZXJhdGUgYSBjdXN0b20gY29u
dmVydGVyIChidXQgSlNDIGRvZXMpIGZvciB0aGUgZm9sbG93aW5nOgogICAgIHJldHVybiAwIGlm
ICRpbnRlcmZhY2VOYW1lIGVxICJBYnN0cmFjdFdvcmtlciI7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1NjcyMykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBACiB9
CiAjZW5kaWYKIAotdm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShG
cmFtZSogZnJhbWUsIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGpzT2JqZWN0KQordm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5j
ZShGcmFtZSogZnJhbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc09iamVjdCkKIHsKICAgICAv
LyBHZXQgRE9NV2luZG93CiAgICAgaWYgKCFmcmFtZSkKQEAgLTE4NCwxNCArMTg0LDE4IEBACiAg
ICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQo
aW50ZXJuYWxJbmRleCA8IFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQpOwotCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKICAgICAv
LyBMb29rIGZvciByZWFsIERPTSB3cmFwcGVyLgogICAgIGdsb2JhbCA9IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0VGVtcGxhdGUoKSwgZ2xvYmFsKTsKICAg
ICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5KCkpOwotICAgIEFTU0VSVChnbG9iYWwtPkdldEludGVy
bmFsRmllbGQoaW50ZXJuYWxJbmRleCktPklzVW5kZWZpbmVkKCkpOwotICAgIGdsb2JhbC0+U2V0
SW50ZXJuYWxGaWVsZChpbnRlcm5hbEluZGV4LCBqc09iamVjdCk7CisKKyAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBoaWRkZW5SZWZlcmVuY2VPYmplY3QgPSBnbG9iYWwtPkdldEludGVybmFsRmll
bGQoVjhET01XaW5kb3c6OmhpZGRlblJlZmVyZW5jZUFycmF5SW5kZXgpOworICAgIGlmIChoaWRk
ZW5SZWZlcmVuY2VPYmplY3QtPklzTnVsbCgpIHx8IGhpZGRlblJlZmVyZW5jZU9iamVjdC0+SXNV
bmRlZmluZWQoKSkgeworICAgICAgICBoaWRkZW5SZWZlcmVuY2VPYmplY3QgPSB2ODo6QXJyYXk6
Ok5ldygpOworICAgICAgICBnbG9iYWwtPlNldEludGVybmFsRmllbGQoVjhET01XaW5kb3c6Omhp
ZGRlblJlZmVyZW5jZUFycmF5SW5kZXgsIGhpZGRlblJlZmVyZW5jZU9iamVjdCk7CisgICAgfQor
ICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGhpZGRlblJlZmVyZW5jZUFycmF5ID0gdjg6OkxvY2Fs
PHY4OjpBcnJheT46OkNhc3QoaGlkZGVuUmVmZXJlbmNlT2JqZWN0KTsKKyAgICBoaWRkZW5SZWZl
cmVuY2VBcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaGlkZGVuUmVmZXJlbmNlQXJyYXktPkxl
bmd0aCgpKSwganNPYmplY3QpOwogfQogCiBXcmFwcGVyVHlwZUluZm8qIFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCkBAIC0yMTksMTQg
KzIyMywxOSBAQAogCiBzdGF0aWMgYm9vbCBnbG9iYWxPYmplY3RQcm90b3R5cGVJc0RPTVdpbmRv
dyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdFByb3RvdHlwZSkKIHsKLSNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCiAgICAgLy8gV2UgY2FuIGlkZW50aWZ5IHdoYXQgdHlwZSBvZiBjb250
ZXh0IHRoZSBnbG9iYWwgb2JqZWN0IGlzIHdyYXBwaW5nIGJ5IGxvb2tpbmcgYXQgdGhlCiAgICAg
Ly8gaW50ZXJuYWwgZmllbGQgY291bnQgb2YgaXRzIHByb3RvdHlwZS4gVGhpcyBhc3N1bWVzIFdv
cmtlckNvbnRleHRzIGFuZCBET01XaW5kb3dzIGhhdmUgZGlmZmVyZW50IG51bWJlcnMKLSAgICAv
LyBvZiBpbnRlcm5hbCBmaWVsZHMsIHNvIGEgQ09NUElMRV9BU1NFUlQgaXMgaW5jbHVkZWQgdG8g
d2FybiBpZiB0aGlzIGV2ZXIgY2hhbmdlcy4gRE9NV2luZG93IGhhcwotICAgIC8vIHRyYWRpdGlv
bmFsbHkgaGFkIGZhciBtb3JlIGludGVybmFsIGZpZWxkcyB0aGFuIGFueSBvdGhlciBjbGFzcy4K
LSAgICBDT01QSUxFX0FTU0VSVChWOERPTVdpbmRvdzo6aW50ZXJuYWxGaWVsZENvdW50ICE9IFY4
V29ya2VyQ29udGV4dDo6aW50ZXJuYWxGaWVsZENvdW50ICYmIFY4RE9NV2luZG93OjppbnRlcm5h
bEZpZWxkQ291bnQgIT0gVjhTaGFyZWRXb3JrZXJDb250ZXh0OjppbnRlcm5hbEZpZWxkQ291bnQs
CisgICAgLy8gb2YgaW50ZXJuYWwgZmllbGRzLCBzbyBhIENPTVBJTEVfQVNTRVJUIGlzIGluY2x1
ZGVkIHRvIHdhcm4gaWYgdGhpcyBldmVyIGNoYW5nZXMuCisjaWYgRU5BQkxFKFdPUktFUlMpCisg
ICAgQ09NUElMRV9BU1NFUlQoVjhET01XaW5kb3c6OmludGVybmFsRmllbGRDb3VudCAhPSBWOFdv
cmtlckNvbnRleHQ6OmludGVybmFsRmllbGRDb3VudCwKICAgICAgICAgRE9NV2luZG93QW5kV29y
a2VyQ29udGV4dEhhdmVVbmVxdWFsRmllbGRDb3VudHMpOworICAgIENPTVBJTEVfQVNTRVJUKFY4
RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQgIT0gVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
OjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIERPTVdpbmRvd0FuZERlZGljYXRlZFdvcmtl
ckNvbnRleHRIYXZlVW5lcXVhbEZpZWxkQ291bnRzKTsKICNlbmRpZgorI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSUykKKyAgICBDT01QSUxFX0FTU0VSVChWOERPTVdpbmRvdzo6aW50ZXJuYWxGaWVs
ZENvdW50ICE9IFY4U2hhcmVkV29ya2VyQ29udGV4dDo6aW50ZXJuYWxGaWVsZENvdW50LAorICAg
ICAgICBET01XaW5kb3dBbmRTaGFyZWRXb3JrZXJDb250ZXh0SGF2ZVVuZXF1YWxGaWVsZENvdW50
cyk7CisjZW5kaWYKICAgICByZXR1cm4gb2JqZWN0UHJvdG90eXBlLT5JbnRlcm5hbEZpZWxkQ291
bnQoKSA9PSBWOERPTVdpbmRvdzo6aW50ZXJuYWxGaWVsZENvdW50OwogfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHJldmlzaW9uIDU2NzIzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBA
CiAgICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4sIFdyYXBwZXJUeXBlSW5mbyopOwogCiAgICAgICAgIC8vIFNldCBoaWRkZW4gcmVmZXJlbmNl
cyBpbiBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFtZS4KLSAgICAgICAgc3RhdGljIHZvaWQg
c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwgY29uc3QgaW50IGludGVybmFsSW5kZXgs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5X
aW5kb3dSZWZlcmVuY2UoRnJhbWUqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCiAgICAgICAg
IHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5
KiBwcm94eSwgV3JhcHBlclR5cGVJbmZvKiwgdm9pZCogaW1wbCk7CiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9u
IDU2NzIzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKLQotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKLSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KE5h
dmlnYXRvciogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1h
cCgpLmdldChpbXBsKTsKLSAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3Jh
cHBlciA9IFY4TmF2aWdhdG9yOjp3cmFwKGltcGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVu
Y2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Om5hdmlnYXRvckluZGV4LCB3cmFwcGVyKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDU2NzIzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhET01TZWxlY3Rpb24uaCIKLQotI2lu
Y2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRE9NU2VsZWN0aW9u
KiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0
KGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICB3cmFwcGVyID0g
VjhET01TZWxlY3Rpb246OndyYXAoaW1wbCk7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpkb21TZWxlY3Rp
b25JbmRleCwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExv
Y2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTY3MjMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0
LDE4ICszNjQsNSBAQAogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJh
bWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KExvY2F0aW9uKiBpbXBsKQotewotICAgIGlmICghaW1w
bCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkgewotICAgICAgICB3cmFwcGVyID0gVjhMb2NhdGlvbjo6d3JhcChpbXBsKTsK
LSAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojps
b2NhdGlvbkluZGV4LCB3cmFwcGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0K
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTY3MjMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NywxNyArOTcsNCBAQAogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNz
RnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwog
fQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIaXN0b3J5KiBpbXBsKQotewotICAgIGlm
ICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICB3cmFwcGVyID0gVjhIaXN0b3J5Ojp3cmFwKGlt
cGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5k
b3c6Omhpc3RvcnlJbmRleCwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJldHVybiB3cmFwcGVyOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwCShyZXZpc2lvbiA1NjcyMykKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4U2NyZWVuLmgiCi0K
LSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmVlbiog
aW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChp
bXBsKTsKLSAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IFY4
U2NyZWVuOjp3cmFwKGltcGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJh
bWUoKSwgVjhET01XaW5kb3c6OnNjcmVlbkluZGV4LCB3cmFwcGVyKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcAkocmV2aXNpb24gNTY3
MjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVjhCYXJJbmZvLmgiCi0KLSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlY4
RE9NV3JhcHBlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KEJhckluZm8qIGltcGwpCi17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Ci0gICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHdyYXBwZXIgPSBWOEJhckluZm86OndyYXAoaW1wbCk7Ci0gICAgICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1l
KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGltcGwtPnR5cGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKLSAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OmxvY2F0aW9uYmFySW5k
ZXgsIHdyYXBwZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBC
YXJJbmZvOjpNZW51YmFyOgotICAgICAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVu
V2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6bWVudWJhckluZGV4LCB3cmFwcGVy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6UGVy
c29uYWxiYXI6Ci0gICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dS
ZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjpwZXJzb25hbGJhckluZGV4LCB3cmFwcGVyKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6U2Nyb2xs
YmFyczoKLSAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVy
ZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnNjcm9sbGJhcnNJbmRleCwgd3JhcHBlcik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJhckluZm86OlN0YXR1c2JhcjoK
LSAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShm
cmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2JhckluZGV4LCB3cmFwcGVyKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6VG9vbGJhcjoKLSAgICAgICAg
ICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhE
T01XaW5kb3c6OnRvb2xiYXJJbmRleCwgd3JhcHBlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC52OGJpbmRp
bmdzLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCShyZXZp
c2lvbiA1NjcyMykKKysrIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw2IEBACiAJYmluZGluZ3MvdjgvbnBydW50aW1lLmNwcCBcCiAJXAog
CWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0
b20vVjhCYXJJbmZvQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1
c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCBc
CkBAIC0xMDQsNyArMTAzLDYgQEAKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21W
b2lkQ2FsbGJhY2suY3BwIFwKICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NRm9ybURhdGFDdXN0
b20uY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwIFwK
IAliaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92
OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUNhbGxiYWNrLmNwcCBcCkBAIC0xNDUsNyArMTQzLDYgQEAKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhOb2RlRmlsdGVyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUxpc3RDdXN0b20uY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3Bw
IFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBc
CiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIFwKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA1NjcyMykKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0
aW9uQ2FjaGU+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01B
cHBsaWNhdGlvbkNhY2hlKGZyYW1lKSk7IH0KICAgICB+RE9NQXBwbGljYXRpb25DYWNoZSgpIHsg
QVNTRVJUKCFtX2ZyYW1lKTsgfQogCisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZTsgfQogICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CiAKICAgICB1bnNpZ25lZCBz
aG9ydCBzdGF0dXMoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52207</attachid>
            <date>2010-03-31 13:28:55 -0700</date>
            <delta_ts>2010-04-01 16:20:01 -0700</delta_ts>
            <desc>add a more general solution for keeping js wrappers alive through gc</desc>
            <filename>hidden_references2.txt</filename>
            <type>text/plain</type>
            <size>32105</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDMtMzEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYWxpemUgKGFuZCBnZW5lcmF0ZSEpIHRoZSBjcmVhdGlvbiBvZiBoaWRkZW4gcmVm
ZXJlbmNlcworICAgICAgICBiZXR3ZWVuIEpTIHdyYXBwZXJzLgorICAgICAgICAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2Nzc3CisKKyAgICAgICAg
KiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBjYWxscyB0
byBzZXRIaWRkZW5SZWZlcmVuY2UoKSBpbgorICAgICAgICBhdHRyaWJ1dGUgZ2V0dGVycy4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjpzZXRIaWRkZW5SZWZlcmVuY2UpOiBTcGxpdCBjb21tb24gbG9naWMgb3V0
IG9mIGhpZGRlbiBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKTogTm93IGNvbnRhaW5zIGxvZ2lj
IHNwZWNpZmljIHRvIHB1dHRpbmcgYSBoaWRkZW4gcmVmZXJlbmNlCisgICAgICAgIG9uIGEgZ2xv
YmFsIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbE9iamVjdFByb3RvdHlwZUlzRE9N
V2luZG93KTogQmUgbW9yZSB0aG9yb3VnaCBpbiB0aGUgQ09NUElMRV9BU1NFUlRzLgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KTog
Q2xlYW51cDogUmVtb3ZlIGEgZHVwbGljYXRlIGlmIHN0YXRlbWVudC4KKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlw
ZUluZm8uaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhNZXNzYWdlQ2hhbm5lbDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3Rv
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3Vz
dG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNo
ZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpmcmFtZSk6IEFkZCBmcmFtZSgpIGFjY2Vzc29yLgorCiAyMDEwLTAz
LTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjg5NwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1Njg1OSkKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0OSwxNCArMzQ5LDggQEAKICAgICAgICAgaWYgKCRuYW1lIGVxICJIVE1MRG9jdW1l
bnQiKSB7CiAgICAgICAgICAgICBwdXNoKEBjdXN0b21JbnRlcm5hbEZpZWxkcywgKCJtYXJrZXJJ
bmRleCIsICJzaGFkb3dJbmRleCIpKTsKICAgICAgICAgfQotICAgIH0gZWxzaWYgKElzU3ViVHlw
ZSgkZGF0YU5vZGUsICJTdHlsZVNoZWV0IikgfHwgJG5hbWUgZXEgIk5hbWVkTm9kZU1hcCIpIHsK
LSAgICAgICAgcHVzaChAY3VzdG9tSW50ZXJuYWxGaWVsZHMsICJvd25lck5vZGVJbmRleCIpOwot
ICAgIH0gZWxzaWYgKCRuYW1lIGVxICJNZXNzYWdlQ2hhbm5lbCIpIHsKLSAgICAgICAgcHVzaChA
Y3VzdG9tSW50ZXJuYWxGaWVsZHMsICgicG9ydDFJbmRleCIsICJwb3J0MkluZGV4IikpOwogICAg
IH0gZWxzaWYgKCRuYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQGN1c3RvbUlu
dGVybmFsRmllbGRzLCAoImNvbnNvbGVJbmRleCIsICJoaXN0b3J5SW5kZXgiLCAibG9jYXRpb25i
YXJJbmRleCIsICJtZW51YmFySW5kZXgiLCAibmF2aWdhdG9ySW5kZXgiLCAKLSAgICAgICAgICAg
ICJwZXJzb25hbGJhckluZGV4IiwgInNjcmVlbkluZGV4IiwgInNjcm9sbGJhcnNJbmRleCIsICJz
ZWxlY3Rpb25JbmRleCIsICJzdGF0dXNiYXJJbmRleCIsICJ0b29sYmFySW5kZXgiLCAibG9jYXRp
b25JbmRleCIsCi0gICAgICAgICAgICAiZG9tU2VsZWN0aW9uSW5kZXgiLCAiZW50ZXJlZElzb2xh
dGVkV29ybGRJbmRleCIpKTsKKyAgICAgICAgcHVzaChAY3VzdG9tSW50ZXJuYWxGaWVsZHMsICJl
bnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4Iik7CiAgICAgfQogICAgIHJldHVybiBAY3VzdG9tSW50
ZXJuYWxGaWVsZHM7CiB9CkBAIC03NjcsNiArNzYxLDM0IEBACiAgICAgICAgICAgICAjIENhbiBp
bmxpbmUgdGhlIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgcmV0dXJuIHN0YXRlbWVudCB0byBhdm9p
ZCBvdmVyaGVhZCBvZiB1c2luZyBhIFJlZjw+IHRlbXBvcmFyeQogICAgICAgICAgICAgJHJlc3Vs
dCA9ICRnZXR0ZXJTdHJpbmc7CiAgICAgICAgIH0KKyAKKyAgICAgICAgIyBTcGVjaWFsIGNhc2Ug
Zm9yIHJlYWRvbmx5IG9yIFJlcGxhY2VhYmxlIGF0dHJpYnV0ZXMgKHdpdGggYSBmZXcgZXhjZXB0
aW9ucykuIFRoaXMgYXR0ZW1wdHMgdG8gZW5zdXJlIHRoYXQgSlMgd3JhcHBlcnMgZG9uJ3QgZ2V0
CisgICAgICAgICMgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkgd2hlbiB0aGVpciBsaWZl
dGltZSBpcyBzdHJvbmdseSB0aWVkIHRvIHRoZWlyIG93bmVyLiBXZSBhY2NvbXBsaXNoIHRoaXMg
YnkgaW5zZXJ0aW5nIGEgcmVmZXJlbmNlIHRvCisgICAgICAgICMgdGhlIG5ld2x5IGNyZWF0ZWQg
d3JhcHBlciBpbnRvIGFuIGludGVybmFsIGZpZWxkIG9mIHRoZSBob2xkZXIgb2JqZWN0LgorICAg
ICAgICAjIE5vdGUgdGhhdCB0aGVyZSdzIGEgc3BlY2lhbCBjYXNlIGFkZGl0aW9uYWxseSBmb3Ig
ZG9jdW1lbnQubG9jYXRpb24sIGJlY2F1c2UgaXQncyBub3QgbWFya2VkIHJlYWRvbmx5IG9yIFJl
cGxhY2VhYmxlLCBidXQgd2UncmUgCisgICAgICAgICMgZXhwZWN0ZWQgdG8ga2VlcCBpdHMgd3Jh
cHBlciBhbGl2ZS4KKyAgICAgICAgaWYgKChJc1dyYXBwZXJUeXBlKCRyZXR1cm5UeXBlKSAmJiAo
JGF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LyB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KQorICAgICAgICAgICAgJiYgJHJl
dHVyblR5cGUgbmUgIkV2ZW50VGFyZ2V0IiAmJiAkcmV0dXJuVHlwZSBuZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlIiAmJiAkcmV0dXJuVHlwZSBuZSAiRE9NV2luZG93IiAKKyAgICAgICAgICAgICYm
ICRyZXR1cm5UeXBlICF+IC9TVkcvICYmICRyZXR1cm5UeXBlICF+IC9IVE1MLyAmJiAhSXNET01O
b2RlVHlwZSgkcmV0dXJuVHlwZSkpCisgICAgICAgICAgICB8fCAkcmV0dXJuVHlwZSBlcSAiTG9j
YXRpb24iKSB7CisgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHJldHVyblR5cGUpOwor
ICAgICAgICAgICAgbXkgJGRvbU1hcEZ1bmN0aW9uID0gR2V0RG9tTWFwRnVuY3Rpb24oMCwgJHJl
dHVyblR5cGUpOworICAgICAgICAgICAgIyBDaGVjayBmb3IgYSB3cmFwcGVyIGluIHRoZSB3cmFw
cGVyIGNhY2hlLiBJZiB0aGVyZSBpcyBvbmUsIHdlIGtub3cgdGhhdCBhIGhpZGRlbiByZWZlcmVu
Y2UgaGFzIGFscmVhZHkKKyAgICAgICAgICAgICMgYmVlbiBjcmVhdGVkLiBJZiB3ZSBkb24ndCBm
aW5kIGEgd3JhcHBlciwgd2UgY3JlYXRlIGJvdGggYSB3cmFwcGVyIGFuZCBhIGhpZGRlbiByZWZl
cmVuY2UuCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjwk
cmV0dXJuVHlwZT4gcmVzdWx0ID0gJHtnZXR0ZXJTdHJpbmd9O1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVy
ID0gcmVzdWx0LmdldCgpID8gJHtkb21NYXBGdW5jdGlvbn0uZ2V0KHJlc3VsdC5nZXQoKSkgOiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0Lmdl
dCgpKTtcbiIpOworICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+bmFtZSBlcSAiRE9NV2luZG93
IikgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcC0+ZnJhbWUoKSwgd3JhcHBl
cik7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5SZWZlcmVuY2Uo
aW5mby5Ib2xkZXIoKSwgd3JhcHBlcik7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB3cmFwcGVyO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRl
cigkYXR0clR5cGUpICYmICEkc2tpcENvbnRleHQpIHsKQEAgLTIwNDgsMjEgKzIwNzAsMTUgQEAK
ICAgICAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwogCiAgICAgIyBXZSBnZW5lcmF0ZSBhIGN1c3Rv
bSBjb252ZXJ0ZXIgKGJ1dCBKU0MgZG9lc24ndCkgZm9yIHRoZSBmb2xsb3dpbmc6Ci0gICAgcmV0
dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkJhckluZm8iOwogICAgIHJldHVybiAxIGlmICRp
bnRlcmZhY2VOYW1lIGVxICJDU1NTdHlsZVNoZWV0IjsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJm
YWNlTmFtZSBlcSAiQ2FudmFzUGl4ZWxBcnJheSI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFj
ZU5hbWUgZXEgIkRPTVNlbGVjdGlvbiI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUg
ZXEgIkRPTVdpbmRvdyI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1l
bnQiOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiI7CiAgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxEb2N1bWVudCI7CiAgICAgcmV0dXJu
IDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxFbGVtZW50IjsKLSAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiSGlzdG9yeSI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5h
bWUgZXEgIk5hbWVkTm9kZU1hcCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEg
Ik5hdmlnYXRvciI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNWR0RvY3Vt
ZW50IjsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudCI7Ci0g
ICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNjcmVlbiI7CiAgICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiOwogICAgICMgV2UgZG9uJ3QgZ2Vu
ZXJhdGUgYSBjdXN0b20gY29udmVydGVyIChidXQgSlNDIGRvZXMpIGZvciB0aGUgZm9sbG93aW5n
OgogICAgIHJldHVybiAwIGlmICRpbnRlcmZhY2VOYW1lIGVxICJBYnN0cmFjdFdvcmtlciI7CkBA
IC0yMDc5LDcgKzIwOTUsNyBAQAogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICR0
eXBlID0gc2hpZnQ7CiAgICAgcmV0dXJuICJnZXRET01TVkdFbGVtZW50SW5zdGFuY2VNYXAoKSIg
aWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSI7Ci0gICAgcmV0dXJuICJnZXRET01Ob2Rl
TWFwKCkiIGlmIElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKTsKKyAgICByZXR1cm4gImdldERPTU5v
ZGVNYXAoKSIgaWYgKCRkYXRhTm9kZSAmJiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpOwogICAg
ICMgT25seSB1c2UgZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKSBmb3Igbm9uLW5vZGUg
c3ZnIG9iamVjdHMKICAgICByZXR1cm4gImdldERPTVNWR09iamVjdFdpdGhDb250ZXh0TWFwKCki
IGlmICR0eXBlID1+IC9TVkcvOwogICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiRE9NSW1wbGVt
ZW50YXRpb24iOwpAQCAtMjU1Nyw2ICsyNTczLDggQEAKIG15ICVub25fd3JhcHBlcl90eXBlcyA9
ICgKICAgICAnZmxvYXQnID0+IDEsCiAgICAgJ2RvdWJsZScgPT4gMSwKKyAgICAnaW50JyA9PiAx
LAorICAgICd1bnNpZ25lZCBpbnQnID0+IDEsCiAgICAgJ3Nob3J0JyA9PiAxLAogICAgICd1bnNp
Z25lZCBzaG9ydCcgPT4gMSwKICAgICAnbG9uZycgPT4gMSwKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDU2ODU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsOCArMTc1LDE5IEBACiB9
CiAjZW5kaWYKIAotdm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShG
cmFtZSogZnJhbWUsIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGpzT2JqZWN0KQordm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoaWxkKQog
eworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGhpZGRlblJlZmVyZW5jZU9iamVjdCA9IHBhcmVu
dC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTUhpZGRlblJlZmVyZW5jZUFycmF5SW5kZXgpOworICAg
IGlmIChoaWRkZW5SZWZlcmVuY2VPYmplY3QtPklzTnVsbCgpIHx8IGhpZGRlblJlZmVyZW5jZU9i
amVjdC0+SXNVbmRlZmluZWQoKSkgeworICAgICAgICBoaWRkZW5SZWZlcmVuY2VPYmplY3QgPSB2
ODo6QXJyYXk6Ok5ldygpOworICAgICAgICBwYXJlbnQtPlNldEludGVybmFsRmllbGQodjhET01I
aWRkZW5SZWZlcmVuY2VBcnJheUluZGV4LCBoaWRkZW5SZWZlcmVuY2VPYmplY3QpOworICAgIH0K
KyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBoaWRkZW5SZWZlcmVuY2VBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KGhpZGRlblJlZmVyZW5jZU9iamVjdCk7CisgICAgaGlkZGVuUmVm
ZXJlbmNlQXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGhpZGRlblJlZmVyZW5jZUFycmF5LT5M
ZW5ndGgoKSksIGNoaWxkKTsKK30KKwordm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShGcmFtZSogZnJhbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc09iamVjdCkK
K3sKICAgICAvLyBHZXQgRE9NV2luZG93CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
OyAvLyBPYmplY3QgbWlnaHQgYmUgZGV0YWNoZWQgZnJvbSB3aW5kb3cKQEAgLTE4NCwxNCArMTk1
LDEyIEBACiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQoaW50ZXJuYWxJbmRleCA8IFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQp
OwotCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwo
KTsKICAgICAvLyBMb29rIGZvciByZWFsIERPTSB3cmFwcGVyLgogICAgIGdsb2JhbCA9IFY4RE9N
V3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0VGVtcGxhdGUoKSwgZ2xv
YmFsKTsKICAgICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5KCkpOwotICAgIEFTU0VSVChnbG9iYWwt
PkdldEludGVybmFsRmllbGQoaW50ZXJuYWxJbmRleCktPklzVW5kZWZpbmVkKCkpOwotICAgIGds
b2JhbC0+U2V0SW50ZXJuYWxGaWVsZChpbnRlcm5hbEluZGV4LCBqc09iamVjdCk7CisKKyAgICBz
ZXRIaWRkZW5SZWZlcmVuY2UoZ2xvYmFsLCBqc09iamVjdCk7CiB9CiAKIFdyYXBwZXJUeXBlSW5m
byogVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCkKQEAgLTIxOSwxNCArMjI4LDE5IEBACiAKIHN0YXRpYyBib29sIGdsb2JhbE9iamVjdFBy
b3RvdHlwZUlzRE9NV2luZG93KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0UHJvdG90eXBl
KQogewotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICAvLyBXZSBjYW4gaWRlbnRpZnkg
d2hhdCB0eXBlIG9mIGNvbnRleHQgdGhlIGdsb2JhbCBvYmplY3QgaXMgd3JhcHBpbmcgYnkgbG9v
a2luZyBhdCB0aGUKICAgICAvLyBpbnRlcm5hbCBmaWVsZCBjb3VudCBvZiBpdHMgcHJvdG90eXBl
LiBUaGlzIGFzc3VtZXMgV29ya2VyQ29udGV4dHMgYW5kIERPTVdpbmRvd3MgaGF2ZSBkaWZmZXJl
bnQgbnVtYmVycwotICAgIC8vIG9mIGludGVybmFsIGZpZWxkcywgc28gYSBDT01QSUxFX0FTU0VS
VCBpcyBpbmNsdWRlZCB0byB3YXJuIGlmIHRoaXMgZXZlciBjaGFuZ2VzLiBET01XaW5kb3cgaGFz
Ci0gICAgLy8gdHJhZGl0aW9uYWxseSBoYWQgZmFyIG1vcmUgaW50ZXJuYWwgZmllbGRzIHRoYW4g
YW55IG90aGVyIGNsYXNzLgotICAgIENPTVBJTEVfQVNTRVJUKFY4RE9NV2luZG93OjppbnRlcm5h
bEZpZWxkQ291bnQgIT0gVjhXb3JrZXJDb250ZXh0OjppbnRlcm5hbEZpZWxkQ291bnQgJiYgVjhE
T01XaW5kb3c6OmludGVybmFsRmllbGRDb3VudCAhPSBWOFNoYXJlZFdvcmtlckNvbnRleHQ6Omlu
dGVybmFsRmllbGRDb3VudCwKKyAgICAvLyBvZiBpbnRlcm5hbCBmaWVsZHMsIHNvIGEgQ09NUElM
RV9BU1NFUlQgaXMgaW5jbHVkZWQgdG8gd2FybiBpZiB0aGlzIGV2ZXIgY2hhbmdlcy4KKyNpZiBF
TkFCTEUoV09SS0VSUykKKyAgICBDT01QSUxFX0FTU0VSVChWOERPTVdpbmRvdzo6aW50ZXJuYWxG
aWVsZENvdW50ICE9IFY4V29ya2VyQ29udGV4dDo6aW50ZXJuYWxGaWVsZENvdW50LAogICAgICAg
ICBET01XaW5kb3dBbmRXb3JrZXJDb250ZXh0SGF2ZVVuZXF1YWxGaWVsZENvdW50cyk7CisgICAg
Q09NUElMRV9BU1NFUlQoVjhET01XaW5kb3c6OmludGVybmFsRmllbGRDb3VudCAhPSBWOERlZGlj
YXRlZFdvcmtlckNvbnRleHQ6OmludGVybmFsRmllbGRDb3VudCwKKyAgICAgICAgRE9NV2luZG93
QW5kRGVkaWNhdGVkV29ya2VyQ29udGV4dEhhdmVVbmVxdWFsRmllbGRDb3VudHMpOwogI2VuZGlm
CisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgIENPTVBJTEVfQVNTRVJUKFY4RE9NV2lu
ZG93OjppbnRlcm5hbEZpZWxkQ291bnQgIT0gVjhTaGFyZWRXb3JrZXJDb250ZXh0OjppbnRlcm5h
bEZpZWxkQ291bnQsCisgICAgICAgIERPTVdpbmRvd0FuZFNoYXJlZFdvcmtlckNvbnRleHRIYXZl
VW5lcXVhbEZpZWxkQ291bnRzKTsKKyNlbmRpZgogICAgIHJldHVybiBvYmplY3RQcm90b3R5cGUt
PkludGVybmFsRmllbGRDb3VudCgpID09IFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQ7
CiB9CiAKQEAgLTM4MCw5ICszOTQsNiBAQAogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9
CiAKLSAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhociA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVz
dCgpKQotICAgICAgICByZXR1cm4gdG9WOCh4aHIpOwotCiAgICAgLy8gTWVzc2FnZVBvcnQgaXMg
Y3JlYXRlZCB3aXRoaW4gaXRzIEpTIGNvdW50ZXJwYXJ0CiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBw
b3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQb3J0KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KHBvcnQpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsx
MjMsMTAgQEAKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEgd3JhcHBl
ciBvZiB0eXBlIHxjbGFzc1R5cGV8LgogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyYXBwZXJPZlR5
cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBXcmFwcGVyVHlwZUluZm8qKTsKIAorICAgICAgICBz
dGF0aWMgdm9pZCBzZXRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwYXJl
bnQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGlsZCk7CisKICAgICAgICAgLy8gU2V0IGhpZGRl
biByZWZlcmVuY2VzIGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBhIGZyYW1lLgotICAgICAgICBz
dGF0aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBpbnQgaW50
ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgICAgIHN0YXRpYyB2b2lk
IHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7
CiAKICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2Jq
ZWN0KFY4UHJveHkqIHByb3h5LCBXcmFwcGVyVHlwZUluZm8qLCB2b2lkKiBpbXBsKTsKIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCShyZXZpc2lvbiA1Njg1OSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDcgKzM5LDggQEAKICAgICAKICAgICBzdGF0aWMgY29uc3QgaW50IHY4RE9NV3JhcHBlclR5
cGVJbmRleCA9IDA7CiAgICAgc3RhdGljIGNvbnN0IGludCB2OERPTVdyYXBwZXJPYmplY3RJbmRl
eCA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IGludCB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ID0gMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHY4RE9NSGlkZGVuUmVmZXJlbmNlQXJy
YXlJbmRleCA9IDI7CisgICAgc3RhdGljIGNvbnN0IGludCB2OERlZmF1bHRXcmFwcGVySW50ZXJu
YWxGaWVsZENvdW50ID0gMzsKICAgICAKICAgICB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKCk7CiAgICAgdHlwZWRlZiB2
b2lkICgqRGVyZWZPYmplY3RGdW5jdGlvbikodm9pZCopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDgg
QEAKICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyBmcm9tIHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFw
cGVyIHRvIHRoZSB0d28KICAgICAvLyBNZXNzYWdlUG9ydCB3cmFwcGVycyB0byBtYWtlIHN1cmUg
dGhhdCB0aGUgTWVzc2FnZVBvcnQgd3JhcHBlcnMKICAgICAvLyBzdGF5IGFsaXZlIGFzIGxvbmcg
YXMgdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgaXMgYXJvdW5kLgotICAgIG1lc3NhZ2VDaGFu
bmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5uZWw6OnBvcnQxSW5kZXgsIHRvVjgo
b2JqLT5wb3J0MSgpKSk7Ci0gICAgbWVzc2FnZUNoYW5uZWwtPlNldEludGVybmFsRmllbGQoVjhN
ZXNzYWdlQ2hhbm5lbDo6cG9ydDJJbmRleCwgdG9WOChvYmotPnBvcnQyKCkpKTsKKyAgICBWOERP
TVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZShtZXNzYWdlQ2hhbm5lbCwgdG9WOChvYmotPnBv
cnQxKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZShtZXNzYWdlQ2hh
bm5lbCwgdG9WOChvYmotPnBvcnQyKCkpKTsKIAogICAgIC8vIFNldHVwIHRoZSBzdGFuZGFyZCB3
cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKG1lc3NhZ2VDaGFubmVsLCAmaW5mbywgb2JqLmdldCgpKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9u
IDU2ODU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKLQotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKLSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KE5h
dmlnYXRvciogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1h
cCgpLmdldChpbXBsKTsKLSAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3Jh
cHBlciA9IFY4TmF2aWdhdG9yOjp3cmFwKGltcGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVu
Y2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Om5hdmlnYXRvckluZGV4LCB3cmFwcGVyKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDU2ODU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhET01TZWxlY3Rpb24uaCIKLQotI2lu
Y2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRE9NU2VsZWN0aW9u
KiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0
KGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICB3cmFwcGVyID0g
VjhET01TZWxlY3Rpb246OndyYXAoaW1wbCk7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpkb21TZWxlY3Rp
b25JbmRleCwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5h
bWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAi
VjhFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpA
QCAtODAsMTAgKzgxLDggQEAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBW
OE5hbWVkTm9kZU1hcDo6d3JhcChpbXBsKTsKICAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNl
IGZyb20gbmFtZWQgbm9kZSBtYXAgdG8gaXRzIG93bmVyIG5vZGUuCiAgICAgRWxlbWVudCogZWxl
bWVudCA9IGltcGwtPmVsZW1lbnQoKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpICYmIGVs
ZW1lbnQpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG93bmVyID0gdG9WOChlbGVt
ZW50KTsKLSAgICAgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOE5hbWVkTm9kZU1hcDo6
b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKLSAgICB9CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSAmJiBlbGVtZW50KQorICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZSh3
cmFwcGVyLCB0b1Y4KGVsZW1lbnQpKTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlU2hlZXRDdXN0
b20uY3BwCShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKIAorI2lu
Y2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00Myw3ICs0NCw3IEBACiAgICAgLy8gQWRkIGEgaGlkZGVuIHJlZmVyZW5j
ZSBmcm9tIHN0eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBvd25lciBub2RlLgogICAgIE5vZGUqIG93
bmVyTm9kZSA9IGltcGwtPm93bmVyTm9kZSgpOwogICAgIGlmIChvd25lck5vZGUgJiYgIXdyYXBw
ZXIuSXNFbXB0eSgpKQotICAgICAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4Q1NTU3R5
bGVTaGVldDo6b3duZXJOb2RlSW5kZXgsIHRvVjgob3duZXJOb2RlKSk7CisgICAgICAgIFY4RE9N
V3JhcHBlcjo6c2V0SGlkZGVuUmVmZXJlbmNlKHdyYXBwZXIsIHRvVjgob3duZXJOb2RlKSk7CiAg
ICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1Njg1OSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjQsMTggKzM2NCw1IEBACiAgICAgcmV0dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nl
c3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKTsKIH0K
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTG9jYXRpb24qIGltcGwpCi17Ci0gICAgaWYg
KCFpbXBsKQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Ci0gICAgaWYgKHdy
YXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHdyYXBwZXIgPSBWOExvY2F0aW9uOjp3cmFwKGlt
cGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5k
b3c6OmxvY2F0aW9uSW5kZXgsIHdyYXBwZXIpOwotICAgIH0KLSAgICByZXR1cm4gd3JhcHBlcjsK
LX0KLQogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiA1Njg1OSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJWOFN0eWxlU2hlZXQuaCIKIAorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1
ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogCkBAIC00NSwxMCAr
NDYsOCBAQAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4U3R5bGVTaGVl
dDo6d3JhcChpbXBsKTsKICAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gc3R5bGVz
aGVldCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCiAgICAgTm9kZSogb3duZXJOb2RlID0gaW1w
bC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKG93bmVyTm9kZSAmJiAhd3JhcHBlci5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QodG9WOChvd25lck5vZGUpKTsKLSAgICAgICAgd3JhcHBlci0+U2V0SW50
ZXJuYWxGaWVsZChWOFN0eWxlU2hlZXQ6Om93bmVyTm9kZUluZGV4LCBvd25lcik7Ci0gICAgfQor
ICAgIGlmIChvd25lck5vZGUgJiYgIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICBWOERPTVdy
YXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZSh3cmFwcGVyLCB0b1Y4KG93bmVyTm9kZSkpOwogICAg
IHJldHVybiB3cmFwcGVyOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDU2ODU5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
MTcgKzk3LDQgQEAKICAgICByZXR1cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1l
KFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGhpc3RvcnktPmZyYW1lKCksIGZhbHNlKTsKIH0KIAot
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSGlzdG9yeSogaW1wbCkKLXsKLSAgICBpZiAoIWlt
cGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKLSAgICBpZiAod3JhcHBl
ci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IFY4SGlzdG9yeTo6d3JhcChpbXBsKTsK
LSAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpo
aXN0b3J5SW5kZXgsIHdyYXBwZXIpOwotICAgIH0KLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTY3JlZW5DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U2NyZWVuQ3VzdG9tLmNwcAkocmV2aXNpb24gNTY4NTkpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOFNjcmVlbi5oIgotCi0jaW5j
bHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTY3JlZW4qIGltcGwp
Ci17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7
Ci0gICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHdyYXBwZXIgPSBWOFNjcmVl
bjo6d3JhcChpbXBsKTsKLSAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAg
ICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCks
IFY4RE9NV2luZG93OjpzY3JlZW5JbmRleCwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJldHVybiB3
cmFwcGVyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5jcHAJKHJldmlzaW9uIDU2ODU5KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4
QmFySW5mby5oIgotCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChCYXJJbmZvKiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2Jq
ZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAg
ICB3cmFwcGVyID0gVjhCYXJJbmZvOjp3cmFwKGltcGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpOwot
ICAgICAgICAgICAgc3dpdGNoIChpbXBsLT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQmFy
SW5mbzo6TG9jYXRpb25iYXI6Ci0gICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRk
ZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93Ojpsb2NhdGlvbmJhckluZGV4LCB3
cmFwcGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQmFySW5m
bzo6TWVudWJhcjoKLSAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6Om1lbnViYXJJbmRleCwgd3JhcHBlcik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJhckluZm86OlBlcnNvbmFs
YmFyOgotICAgICAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJl
bmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6cGVyc29uYWxiYXJJbmRleCwgd3JhcHBlcik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJhckluZm86OlNjcm9sbGJhcnM6
Ci0gICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uo
ZnJhbWUsIFY4RE9NV2luZG93OjpzY3JvbGxiYXJzSW5kZXgsIHdyYXBwZXIpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpTdGF0dXNiYXI6Ci0gICAg
ICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUs
IFY4RE9NV2luZG93OjpzdGF0dXNiYXJJbmRleCwgd3JhcHBlcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJhckluZm86OlRvb2xiYXI6Ci0gICAgICAgICAgICAg
ICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2lu
ZG93Ojp0b29sYmFySW5kZXgsIHdyYXBwZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTY4NTkpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNjc2LDcgKzY3Niw2IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvQ2hpbGRUaHJlYWRET01EYXRhLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvQ2hpbGRUaHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHAnLApAQCAtNzIyLDcgKzcyMSw2IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9j
YXRpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01G
b3JtRGF0YUN1c3RvbS5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERP
TVNlbGVjdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERvY3VtZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RWxlbWVudEN1c3RvbS5jcHAnLApAQCAtNzYyLDcgKzc2MCw2IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVzQ29sbGVjdGlvbi5oJywKLSAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUZpbHRlckN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAnLApAQCAtNzc3
LDcgKzc3NCw2IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3Ro
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNl
Z0N1c3RvbS5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNoYXJlZFdvcmtl
ckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hl
ZXRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNo
ZWV0TGlzdEN1c3RvbS5jcHAnLApJbmRleDogV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsJKHJldmlzaW9uIDU2
ODU5KQorKysgV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDcgKzg1LDYgQEAKIAliaW5kaW5ncy92OC9ucHJ1bnRpbWUuY3BwIFwKIAlcCiAJYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAgXAotCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJh
ckluZm9DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNw
cCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAg
XAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwIFwKQEAgLTEw
NCw3ICsxMDMsNiBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxs
YmFjay5jcHAgXAogICBiaW5kaW5ncy92OC9jdXN0b20vVjhET01Gb3JtRGF0YUN1c3RvbS5jcHAg
XAotCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlQ2FsbGJhY2suY3BwIFwKQEAgLTE0NSw3ICsxNDMsNiBAQAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhO
b2RlSXRlcmF0b3JDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1
c3RvbS5jcHAgXAotCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAgXAogCWJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIFwKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDU2ODU5KQorKysgV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw2ICs1MCw3IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNo
ZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERPTUFwcGxpY2F0
aW9uQ2FjaGUoZnJhbWUpKTsgfQogICAgIH5ET01BcHBsaWNhdGlvbkNhY2hlKCkgeyBBU1NFUlQo
IW1fZnJhbWUpOyB9CiAKKyAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
OyB9CiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHN0
YXR1cygpIGNvbnN0Owo=
</data>
<flag name="review"
          id="35622"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52349</attachid>
            <date>2010-04-01 16:20:01 -0700</date>
            <delta_ts>2010-04-02 09:32:58 -0700</delta_ts>
            <desc>Add a couple more exceptions</desc>
            <filename>hidden_references3.txt</filename>
            <type>text/plain</type>
            <size>31743</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDQtMDEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYWxpemUgKGFuZCBnZW5lcmF0ZSEpIHRoZSBjcmVhdGlvbiBvZiBoaWRkZW4gcmVm
ZXJlbmNlcworICAgICAgICBiZXR3ZWVuIEpTIHdyYXBwZXJzLgorICAgICAgICAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2Nzc3CisKKyAgICAgICAg
KiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBjYWxscyB0
byBzZXRIaWRkZW5SZWZlcmVuY2UoKSBpbgorICAgICAgICBhdHRyaWJ1dGUgZ2V0dGVycy4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjpzZXRIaWRkZW5SZWZlcmVuY2UpOiBTcGxpdCBjb21tb24gbG9naWMgb3V0
IG9mIGhpZGRlbiBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKTogTm93IGNvbnRhaW5zIGxvZ2lj
IHNwZWNpZmljIHRvIHB1dHRpbmcgYSBoaWRkZW4gcmVmZXJlbmNlCisgICAgICAgIG9uIGEgZ2xv
YmFsIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbE9iamVjdFByb3RvdHlwZUlzRE9N
V2luZG93KTogQmUgbW9yZSB0aG9yb3VnaCBpbiB0aGUgQ09NUElMRV9BU1NFUlRzLgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KTog
Q2xlYW51cDogUmVtb3ZlIGEgZHVwbGljYXRlIGlmIHN0YXRlbWVudC4KKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9XcmFwcGVyVHlw
ZUluZm8uaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhNZXNzYWdlQ2hhbm5lbDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3Rv
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3Vz
dG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNo
ZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpmcmFtZSk6IEFkZCBmcmFtZSgpIGFjY2Vzc29yLgorCiAyMDEwLTAz
LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU2OTQ2KQorKysgV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw3ICs2NzYsNiBAQAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L0NoaWxkVGhyZWFkRE9NRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L0NoaWxkVGhyZWFkRE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhBdHRyQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QmFySW5mb0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwJywKQEAgLTcyMiw3ICs3MjEsNiBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9u
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NRm9ybURh
dGFDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxl
Y3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1l
bnRDdXN0b20uY3BwJywKQEAgLTc2Miw3ICs3NjAsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uaCcsCi0gICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwJywKQEAgLTc3Nyw3ICs3
NzQsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0
b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExp
c3RDdXN0b20uY3BwJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkocmV2aXNpb24gNTY5NDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksMTQgKzM0OSw4IEBACiAg
ICAgICAgIGlmICgkbmFtZSBlcSAiSFRNTERvY3VtZW50IikgewogICAgICAgICAgICAgcHVzaChA
Y3VzdG9tSW50ZXJuYWxGaWVsZHMsICgibWFya2VySW5kZXgiLCAic2hhZG93SW5kZXgiKSk7CiAg
ICAgICAgIH0KLSAgICB9IGVsc2lmIChJc1N1YlR5cGUoJGRhdGFOb2RlLCAiU3R5bGVTaGVldCIp
IHx8ICRuYW1lIGVxICJOYW1lZE5vZGVNYXAiKSB7Ci0gICAgICAgIHB1c2goQGN1c3RvbUludGVy
bmFsRmllbGRzLCAib3duZXJOb2RlSW5kZXgiKTsKLSAgICB9IGVsc2lmICgkbmFtZSBlcSAiTWVz
c2FnZUNoYW5uZWwiKSB7Ci0gICAgICAgIHB1c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAoInBv
cnQxSW5kZXgiLCAicG9ydDJJbmRleCIpKTsKICAgICB9IGVsc2lmICgkbmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICBwdXNoKEBjdXN0b21JbnRlcm5hbEZpZWxkcywgKCJjb25zb2xlSW5k
ZXgiLCAiaGlzdG9yeUluZGV4IiwgImxvY2F0aW9uYmFySW5kZXgiLCAibWVudWJhckluZGV4Iiwg
Im5hdmlnYXRvckluZGV4IiwgCi0gICAgICAgICAgICAicGVyc29uYWxiYXJJbmRleCIsICJzY3Jl
ZW5JbmRleCIsICJzY3JvbGxiYXJzSW5kZXgiLCAic2VsZWN0aW9uSW5kZXgiLCAic3RhdHVzYmFy
SW5kZXgiLCAidG9vbGJhckluZGV4IiwgImxvY2F0aW9uSW5kZXgiLAotICAgICAgICAgICAgImRv
bVNlbGVjdGlvbkluZGV4IiwgImVudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgiKSk7CisgICAgICAg
IHB1c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAiZW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCIp
OwogICAgIH0KICAgICByZXR1cm4gQGN1c3RvbUludGVybmFsRmllbGRzOwogfQpAQCAtNzY3LDYg
Kzc2MSwzMSBAQAogICAgICAgICAgICAgIyBDYW4gaW5saW5lIHRoZSBmdW5jdGlvbiBjYWxsIGlu
dG8gdGhlIHJldHVybiBzdGF0ZW1lbnQgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgdXNpbmcgYSBSZWY8
PiB0ZW1wb3JhcnkKICAgICAgICAgICAgICRyZXN1bHQgPSAkZ2V0dGVyU3RyaW5nOwogICAgICAg
ICB9CisgCisgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciByZWFkb25seSBvciBSZXBsYWNlYWJs
ZSBhdHRyaWJ1dGVzICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLiBUaGlzIGF0dGVtcHRzIHRvIGVu
c3VyZSB0aGF0IEpTIHdyYXBwZXJzIGRvbid0IGdldAorICAgICAgICAjIGdhcmJhZ2UtY29sbGVj
dGVkIHByZW1hdHVyZWx5IHdoZW4gdGhlaXIgbGlmZXRpbWUgaXMgc3Ryb25nbHkgdGllZCB0byB0
aGVpciBvd25lci4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IGluc2VydGluZyBhIHJlZmVyZW5jZSB0
bworICAgICAgICAjIHRoZSBuZXdseSBjcmVhdGVkIHdyYXBwZXIgaW50byBhbiBpbnRlcm5hbCBm
aWVsZCBvZiB0aGUgaG9sZGVyIG9iamVjdC4KKyAgICAgICAgaWYgKCFJc05vZGVTdWJUeXBlKCRk
YXRhTm9kZSkgJiYgJGF0dHJOYW1lIG5lICJzZWxmIiAmJiAoSXNXcmFwcGVyVHlwZSgkcmV0dXJu
VHlwZSkgJiYgKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8gfHwgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkKKyAgICAgICAg
ICAgICYmICRyZXR1cm5UeXBlIG5lICJFdmVudFRhcmdldCIgJiYgJHJldHVyblR5cGUgbmUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSIgJiYgJHJldHVyblR5cGUgbmUgIkRPTVdpbmRvdyIgCisgICAg
ICAgICAgICAmJiAkcmV0dXJuVHlwZSAhfiAvU1ZHLyAmJiAkcmV0dXJuVHlwZSAhfiAvSFRNTC8g
JiYgIUlzRE9NTm9kZVR5cGUoJHJldHVyblR5cGUpKSkgeworICAgICAgICAgICAgQWRkSW5jbHVk
ZXNGb3JUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIG15ICRkb21NYXBGdW5jdGlvbiA9
IEdldERvbU1hcEZ1bmN0aW9uKDAsICRyZXR1cm5UeXBlKTsKKyAgICAgICAgICAgICMgQ2hlY2sg
Zm9yIGEgd3JhcHBlciBpbiB0aGUgd3JhcHBlciBjYWNoZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSBr
bm93IHRoYXQgYSBoaWRkZW4gcmVmZXJlbmNlIGhhcyBhbHJlYWR5CisgICAgICAgICAgICAjIGJl
ZW4gY3JlYXRlZC4gSWYgd2UgZG9uJ3QgZmluZCBhIHdyYXBwZXIsIHdlIGNyZWF0ZSBib3RoIGEg
d3JhcHBlciBhbmQgYSBoaWRkZW4gcmVmZXJlbmNlLgorICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBSZWZQdHI8JHJldHVyblR5cGU+IHJlc3VsdCA9ICR7Z2V0dGVyU3Ry
aW5nfTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5nZXQoKSA/ICR7ZG9tTWFwRnVuY3Rp
b259LmdldChyZXN1bHQuZ2V0KCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKHdyYXBwZXIuSXNFbXB0
eSgpKSB7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAg
IHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSk7XG4iKTsKKyAgICAgICAgICAgIGlmICgkZGF0
YU5vZGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVy
ZW5jZShpbXAtPmZyYW1lKCksIHdyYXBwZXIpO1xuIik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4RE9NV3Jh
cHBlcjo6c2V0SGlkZGVuUmVmZXJlbmNlKGluZm8uSG9sZGVyKCksIHdyYXBwZXIpO1xuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1c
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gd3Jh
cHBlcjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIn1cblxuIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoSXNTVkdU
eXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGF0dHJUeXBlKSAmJiAhJHNraXBDb250ZXh0KSB7
CkBAIC0yMDc4LDIxICsyMDk3LDE2IEBACiAgICAgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKIAog
ICAgICMgV2UgZ2VuZXJhdGUgYSBjdXN0b20gY29udmVydGVyIChidXQgSlNDIGRvZXNuJ3QpIGZv
ciB0aGUgZm9sbG93aW5nOgotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJCYXJJ
bmZvIjsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ1NTU3R5bGVTaGVldCI7
CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkNhbnZhc1BpeGVsQXJyYXkiOwot
ICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJET01TZWxlY3Rpb24iOwogICAgIHJl
dHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciOwogICAgIHJldHVybiAxIGlm
ICRpbnRlcmZhY2VOYW1lIGVxICJFbGVtZW50IjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNl
TmFtZSBlcSAiTG9jYXRpb24iOwogICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJI
VE1MRG9jdW1lbnQiOwogICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRWxl
bWVudCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkhpc3RvcnkiOworICAg
IHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiI7CiAgICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCI7Ci0gICAgcmV0dXJuIDEgaWYgJGlu
dGVyZmFjZU5hbWUgZXEgIk5hdmlnYXRvciI7CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5h
bWUgZXEgIlNWR0RvY3VtZW50IjsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAi
U1ZHRWxlbWVudCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNjcmVlbiI7
CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckNvbnRleHQiOwogICAg
ICMgV2UgZG9uJ3QgZ2VuZXJhdGUgYSBjdXN0b20gY29udmVydGVyIChidXQgSlNDIGRvZXMpIGZv
ciB0aGUgZm9sbG93aW5nOgogICAgIHJldHVybiAwIGlmICRpbnRlcmZhY2VOYW1lIGVxICJBYnN0
cmFjdFdvcmtlciI7CkBAIC0yMTA5LDcgKzIxMjMsNyBAQAogICAgIG15ICRkYXRhTm9kZSA9IHNo
aWZ0OwogICAgIG15ICR0eXBlID0gc2hpZnQ7CiAgICAgcmV0dXJuICJnZXRET01TVkdFbGVtZW50
SW5zdGFuY2VNYXAoKSIgaWYgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSI7Ci0gICAgcmV0
dXJuICJnZXRET01Ob2RlTWFwKCkiIGlmIElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKTsKKyAgICBy
ZXR1cm4gImdldERPTU5vZGVNYXAoKSIgaWYgKCRkYXRhTm9kZSAmJiBJc05vZGVTdWJUeXBlKCRk
YXRhTm9kZSkpOwogICAgICMgT25seSB1c2UgZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAo
KSBmb3Igbm9uLW5vZGUgc3ZnIG9iamVjdHMKICAgICByZXR1cm4gImdldERPTVNWR09iamVjdFdp
dGhDb250ZXh0TWFwKCkiIGlmICR0eXBlID1+IC9TVkcvOwogICAgIHJldHVybiAiIiBpZiAkdHlw
ZSBlcSAiRE9NSW1wbGVtZW50YXRpb24iOwpAQCAtMjU4Nyw2ICsyNjAxLDggQEAKIG15ICVub25f
d3JhcHBlcl90eXBlcyA9ICgKICAgICAnZmxvYXQnID0+IDEsCiAgICAgJ2RvdWJsZScgPT4gMSwK
KyAgICAnaW50JyA9PiAxLAorICAgICd1bnNpZ25lZCBpbnQnID0+IDEsCiAgICAgJ3Nob3J0JyA9
PiAxLAogICAgICd1bnNpZ25lZCBzaG9ydCcgPT4gMSwKICAgICAnbG9uZycgPT4gMSwKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDU2OTQ2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
OCArMTc1LDE5IEBACiB9CiAjZW5kaWYKIAotdm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShGcmFtZSogZnJhbWUsIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGpzT2JqZWN0KQordm9pZCBWOERPTVdyYXBwZXI6OnNldEhpZGRl
blJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNoaWxkKQogeworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGhpZGRlblJlZmVyZW5j
ZU9iamVjdCA9IHBhcmVudC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTUhpZGRlblJlZmVyZW5jZUFy
cmF5SW5kZXgpOworICAgIGlmIChoaWRkZW5SZWZlcmVuY2VPYmplY3QtPklzTnVsbCgpIHx8IGhp
ZGRlblJlZmVyZW5jZU9iamVjdC0+SXNVbmRlZmluZWQoKSkgeworICAgICAgICBoaWRkZW5SZWZl
cmVuY2VPYmplY3QgPSB2ODo6QXJyYXk6Ok5ldygpOworICAgICAgICBwYXJlbnQtPlNldEludGVy
bmFsRmllbGQodjhET01IaWRkZW5SZWZlcmVuY2VBcnJheUluZGV4LCBoaWRkZW5SZWZlcmVuY2VP
YmplY3QpOworICAgIH0KKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBoaWRkZW5SZWZlcmVuY2VB
cnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGhpZGRlblJlZmVyZW5jZU9iamVjdCk7
CisgICAgaGlkZGVuUmVmZXJlbmNlQXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGhpZGRlblJl
ZmVyZW5jZUFycmF5LT5MZW5ndGgoKSksIGNoaWxkKTsKK30KKwordm9pZCBWOERPTVdyYXBwZXI6
OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSogZnJhbWUsIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc09iamVjdCkKK3sKICAgICAvLyBHZXQgRE9NV2luZG93CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOyAvLyBPYmplY3QgbWlnaHQgYmUgZGV0YWNoZWQgZnJvbSB3aW5kb3cK
QEAgLTE4NCwxNCArMTk1LDEyIEBACiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQoaW50ZXJuYWxJbmRleCA8IFY4RE9NV2luZG93OjppbnRl
cm5hbEZpZWxkQ291bnQpOwotCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBj
b250ZXh0LT5HbG9iYWwoKTsKICAgICAvLyBMb29rIGZvciByZWFsIERPTSB3cmFwcGVyLgogICAg
IGdsb2JhbCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0
VGVtcGxhdGUoKSwgZ2xvYmFsKTsKICAgICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5KCkpOwotICAg
IEFTU0VSVChnbG9iYWwtPkdldEludGVybmFsRmllbGQoaW50ZXJuYWxJbmRleCktPklzVW5kZWZp
bmVkKCkpOwotICAgIGdsb2JhbC0+U2V0SW50ZXJuYWxGaWVsZChpbnRlcm5hbEluZGV4LCBqc09i
amVjdCk7CisKKyAgICBzZXRIaWRkZW5SZWZlcmVuY2UoZ2xvYmFsLCBqc09iamVjdCk7CiB9CiAK
IFdyYXBwZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTIxOSwxNCArMjI4LDE5IEBACiAKIHN0YXRpYyBib29s
IGdsb2JhbE9iamVjdFByb3RvdHlwZUlzRE9NV2luZG93KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0UHJvdG90eXBlKQogewotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICAvLyBX
ZSBjYW4gaWRlbnRpZnkgd2hhdCB0eXBlIG9mIGNvbnRleHQgdGhlIGdsb2JhbCBvYmplY3QgaXMg
d3JhcHBpbmcgYnkgbG9va2luZyBhdCB0aGUKICAgICAvLyBpbnRlcm5hbCBmaWVsZCBjb3VudCBv
ZiBpdHMgcHJvdG90eXBlLiBUaGlzIGFzc3VtZXMgV29ya2VyQ29udGV4dHMgYW5kIERPTVdpbmRv
d3MgaGF2ZSBkaWZmZXJlbnQgbnVtYmVycwotICAgIC8vIG9mIGludGVybmFsIGZpZWxkcywgc28g
YSBDT01QSUxFX0FTU0VSVCBpcyBpbmNsdWRlZCB0byB3YXJuIGlmIHRoaXMgZXZlciBjaGFuZ2Vz
LiBET01XaW5kb3cgaGFzCi0gICAgLy8gdHJhZGl0aW9uYWxseSBoYWQgZmFyIG1vcmUgaW50ZXJu
YWwgZmllbGRzIHRoYW4gYW55IG90aGVyIGNsYXNzLgotICAgIENPTVBJTEVfQVNTRVJUKFY4RE9N
V2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQgIT0gVjhXb3JrZXJDb250ZXh0OjppbnRlcm5hbEZp
ZWxkQ291bnQgJiYgVjhET01XaW5kb3c6OmludGVybmFsRmllbGRDb3VudCAhPSBWOFNoYXJlZFdv
cmtlckNvbnRleHQ6OmludGVybmFsRmllbGRDb3VudCwKKyAgICAvLyBvZiBpbnRlcm5hbCBmaWVs
ZHMsIHNvIGEgQ09NUElMRV9BU1NFUlQgaXMgaW5jbHVkZWQgdG8gd2FybiBpZiB0aGlzIGV2ZXIg
Y2hhbmdlcy4KKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBDT01QSUxFX0FTU0VSVChWOERPTVdp
bmRvdzo6aW50ZXJuYWxGaWVsZENvdW50ICE9IFY4V29ya2VyQ29udGV4dDo6aW50ZXJuYWxGaWVs
ZENvdW50LAogICAgICAgICBET01XaW5kb3dBbmRXb3JrZXJDb250ZXh0SGF2ZVVuZXF1YWxGaWVs
ZENvdW50cyk7CisgICAgQ09NUElMRV9BU1NFUlQoVjhET01XaW5kb3c6OmludGVybmFsRmllbGRD
b3VudCAhPSBWOERlZGljYXRlZFdvcmtlckNvbnRleHQ6OmludGVybmFsRmllbGRDb3VudCwKKyAg
ICAgICAgRE9NV2luZG93QW5kRGVkaWNhdGVkV29ya2VyQ29udGV4dEhhdmVVbmVxdWFsRmllbGRD
b3VudHMpOwogI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgIENPTVBJTEVf
QVNTRVJUKFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQgIT0gVjhTaGFyZWRXb3JrZXJD
b250ZXh0OjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIERPTVdpbmRvd0FuZFNoYXJlZFdv
cmtlckNvbnRleHRIYXZlVW5lcXVhbEZpZWxkQ291bnRzKTsKKyNlbmRpZgogICAgIHJldHVybiBv
YmplY3RQcm90b3R5cGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4RE9NV2luZG93OjppbnRl
cm5hbEZpZWxkQ291bnQ7CiB9CiAKQEAgLTM4MCw5ICszOTQsNiBAQAogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKICAgICB9CiAKLSAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhociA9IHRhcmdldC0+
dG9YTUxIdHRwUmVxdWVzdCgpKQotICAgICAgICByZXR1cm4gdG9WOCh4aHIpOwotCiAgICAgLy8g
TWVzc2FnZVBvcnQgaXMgY3JlYXRlZCB3aXRoaW4gaXRzIEpTIGNvdW50ZXJwYXJ0CiAgICAgaWYg
KE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQb3J0KCkpIHsKICAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCku
Z2V0KHBvcnQpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCShyZXZpc2lvbiA1
Njk0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMyw4ICsxMjMsMTAgQEAKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZh
bHVlIGlzIGEgd3JhcHBlciBvZiB0eXBlIHxjbGFzc1R5cGV8LgogICAgICAgICBzdGF0aWMgYm9v
bCBpc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBXcmFwcGVyVHlwZUluZm8q
KTsKIAorICAgICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBwYXJlbnQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGlsZCk7CisKICAgICAg
ICAgLy8gU2V0IGhpZGRlbiByZWZlcmVuY2VzIGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBhIGZy
YW1lLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUq
LCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7CiAKICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBp
bnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBXcmFwcGVyVHlwZUluZm8qLCB2b2lk
KiBpbXBsKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCShyZXZp
c2lvbiA1Njk0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAKICAgICAKICAgICBzdGF0aWMgY29uc3QgaW50
IHY4RE9NV3JhcHBlclR5cGVJbmRleCA9IDA7CiAgICAgc3RhdGljIGNvbnN0IGludCB2OERPTVdy
YXBwZXJPYmplY3RJbmRleCA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IGludCB2OERlZmF1bHRXcmFw
cGVySW50ZXJuYWxGaWVsZENvdW50ID0gMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHY4RE9NSGlk
ZGVuUmVmZXJlbmNlQXJyYXlJbmRleCA9IDI7CisgICAgc3RhdGljIGNvbnN0IGludCB2OERlZmF1
bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ID0gMzsKICAgICAKICAgICB0eXBlZGVmIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKCk7
CiAgICAgdHlwZWRlZiB2b2lkICgqRGVyZWZPYmplY3RGdW5jdGlvbikodm9pZCopOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFu
bmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1Njk0NikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDggKzY3LDggQEAKICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyBmcm9tIHRoZSBNZXNz
YWdlQ2hhbm5lbCB3cmFwcGVyIHRvIHRoZSB0d28KICAgICAvLyBNZXNzYWdlUG9ydCB3cmFwcGVy
cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgTWVzc2FnZVBvcnQgd3JhcHBlcnMKICAgICAvLyBzdGF5
IGFsaXZlIGFzIGxvbmcgYXMgdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgaXMgYXJvdW5kLgot
ICAgIG1lc3NhZ2VDaGFubmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5uZWw6OnBv
cnQxSW5kZXgsIHRvVjgob2JqLT5wb3J0MSgpKSk7Ci0gICAgbWVzc2FnZUNoYW5uZWwtPlNldElu
dGVybmFsRmllbGQoVjhNZXNzYWdlQ2hhbm5lbDo6cG9ydDJJbmRleCwgdG9WOChvYmotPnBvcnQy
KCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5jZShtZXNzYWdlQ2hhbm5l
bCwgdG9WOChvYmotPnBvcnQxKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVy
ZW5jZShtZXNzYWdlQ2hhbm5lbCwgdG9WOChvYmotPnBvcnQyKCkpKTsKIAogICAgIC8vIFNldHVw
IHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCiAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKG1lc3NhZ2VDaGFubmVsLCAmaW5mbywgb2JqLmdldCgpKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU2OTQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhO
YXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKLQotI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KE5hdmlnYXRvciogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKLSAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgd3JhcHBlciA9IFY4TmF2aWdhdG9yOjp3cmFwKGltcGwpOwotICAgICAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRk
ZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Om5hdmlnYXRvcklu
ZGV4LCB3cmFwcGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2Vs
ZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU2OTQ2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhET01TZWxl
Y3Rpb24uaCIKLQotI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhET01XcmFw
cGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoRE9NU2VsZWN0aW9uKiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9N
T2JqZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAg
ICAgICB3cmFwcGVyID0gVjhET01TZWxlY3Rpb246OndyYXAoaW1wbCk7Ci0gICAgICAgIFY4RE9N
V3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2lu
ZG93Ojpkb21TZWxlY3Rpb25JbmRleCwgd3JhcHBlcik7Ci0gICAgfQotICAgIHJldHVybiB3cmFw
cGVyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA1
Njk0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiTmFtZWRO
b2RlTWFwLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiVjhFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgpAQCAtODAsMTAgKzgxLDggQEAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBWOE5hbWVkTm9kZU1hcDo6d3JhcChpbXBsKTsKICAgICAvLyBBZGQgYSBo
aWRkZW4gcmVmZXJlbmNlIGZyb20gbmFtZWQgbm9kZSBtYXAgdG8gaXRzIG93bmVyIG5vZGUuCiAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGltcGwtPmVsZW1lbnQoKTsKLSAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpICYmIGVsZW1lbnQpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG93
bmVyID0gdG9WOChlbGVtZW50KTsKLSAgICAgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChW
OE5hbWVkTm9kZU1hcDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKLSAgICB9CisgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSAmJiBlbGVtZW50KQorICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhp
ZGRlblJlZmVyZW5jZSh3cmFwcGVyLCB0b1Y4KGVsZW1lbnQpKTsKICAgICByZXR1cm4gd3JhcHBl
cjsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENT
U1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiA1Njk0NikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOENTU1N0eWxl
U2hlZXQuaCIKIAorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4Tm9kZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw3ICs0NCw3IEBACiAgICAgLy8gQWRkIGEg
aGlkZGVuIHJlZmVyZW5jZSBmcm9tIHN0eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBvd25lciBub2Rl
LgogICAgIE5vZGUqIG93bmVyTm9kZSA9IGltcGwtPm93bmVyTm9kZSgpOwogICAgIGlmIChvd25l
ck5vZGUgJiYgIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICB3cmFwcGVyLT5TZXRJbnRlcm5h
bEZpZWxkKFY4Q1NTU3R5bGVTaGVldDo6b3duZXJOb2RlSW5kZXgsIHRvVjgob3duZXJOb2RlKSk7
CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuUmVmZXJlbmNlKHdyYXBwZXIsIHRvVjgo
b3duZXJOb2RlKSk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1Njk0
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICBpZiAod3JhcHBlci5Jc0VtcHR5
KCkpIHsKICAgICAgICAgd3JhcHBlciA9IFY4TG9jYXRpb246OndyYXAoaW1wbCk7CiAgICAgICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhp
ZGRlbldpbmRvd1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6bG9jYXRpb25J
bmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCB3cmFwcGVyKTsKICAgICB9CiAgICAgcmV0dXJuIHdy
YXBwZXI7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5
bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDU2OTQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4U3R5bGVTaGVldC5oIgog
CisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0Lmgi
CiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAKQEAgLTQ1LDEwICs0Niw4IEBACiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTdHlsZVNoZWV0Ojp3cmFwKGltcGwpOwogICAgIC8v
IEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBzdHlsZXNoZWV0IG9iamVjdCB0byBpdHMgb3du
ZXIgbm9kZS4KICAgICBOb2RlKiBvd25lck5vZGUgPSBpbXBsLT5vd25lck5vZGUoKTsKLSAgICBp
ZiAob3duZXJOb2RlICYmICF3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG93bmVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh0b1Y4KG93
bmVyTm9kZSkpOwotICAgICAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4U3R5bGVTaGVl
dDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKLSAgICB9CisgICAgaWYgKG93bmVyTm9kZSAmJiAh
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuUmVmZXJl
bmNlKHdyYXBwZXIsIHRvVjgob3duZXJOb2RlKSk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNw
cAkocmV2aXNpb24gNTY5NDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3Rv
cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxNyArOTcsNCBAQAogICAgIHJldHVy
biBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHko
KSwgaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChIaXN0b3J5KiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2Jq
ZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAg
ICB3cmFwcGVyID0gVjhIaXN0b3J5Ojp3cmFwKGltcGwpOwotICAgICAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZl
cmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Omhpc3RvcnlJbmRleCwgd3JhcHBlcik7
Ci0gICAgfQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3Bw
CShyZXZpc2lvbiA1Njk0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVu
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlY4U2NyZWVuLmgiCi0KLSNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgot
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmVlbiogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0g
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKLSAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IFY4U2NyZWVuOjp3cmFwKGltcGwpOwotICAgICAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRI
aWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OnNjcmVlbklu
ZGV4LCB3cmFwcGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5m
b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhC
YXJJbmZvQ3VzdG9tLmNwcAkocmV2aXNpb24gNTY5NDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhCYXJJbmZvLmgiCi0KLSNpbmNsdWRl
ICJWOERPTVdpbmRvdy5oIgotI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJhckluZm8qIGltcGwpCi17
Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Ci0g
ICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHdyYXBwZXIgPSBWOEJhckluZm86
OndyYXAoaW1wbCk7Ci0gICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlt
cGwtPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKLSAg
ICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFt
ZSwgVjhET01XaW5kb3c6OmxvY2F0aW9uYmFySW5kZXgsIHdyYXBwZXIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgotICAgICAgICAg
ICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERP
TVdpbmRvdzo6bWVudWJhckluZGV4LCB3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6UGVyc29uYWxiYXI6Ci0gICAgICAgICAgICAgICAg
VjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93
OjpwZXJzb25hbGJhckluZGV4LCB3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQmFySW5mbzo6U2Nyb2xsYmFyczoKLSAgICAgICAgICAgICAgICBWOERP
TVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnNj
cm9sbGJhcnNJbmRleCwgd3JhcHBlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEJhckluZm86OlN0YXR1c2JhcjoKLSAgICAgICAgICAgICAgICBWOERPTVdyYXBw
ZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2Jh
ckluZGV4LCB3cmFwcGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQmFySW5mbzo6VG9vbGJhcjoKLSAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhp
ZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnRvb2xiYXJJbmRleCwgd3Jh
cHBlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCShyZXZpc2lvbiA1Njk0NikKKysrIFdlYkNvcmUvQW5k
cm9pZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2IEBACiAJYmlu
ZGluZ3MvdjgvbnBydW50aW1lLmNwcCBcCiAJXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJD
dXN0b20uY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcCBcCiAJ
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0
b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCBcCkBAIC0xMDQsNyArMTAzLDYgQEAKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIFwK
IAliaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIFwKICAgYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NRm9ybURhdGFDdXN0b20uY3BwIFwKLQliaW5kaW5ncy92OC9jdXN0
b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUNhbGxiYWNrLmNw
cCBcCkBAIC0xNDUsNyArMTQzLDYgQEAKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlRmlsdGVy
Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwIFwKLQliaW5kaW5n
cy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRp
b25DYWNoZS5oCShyZXZpc2lvbiA1Njk0NikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RP
TUFwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+IGNyZWF0ZShGcmFtZSogZnJh
bWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01BcHBsaWNhdGlvbkNhY2hlKGZyYW1lKSk7IH0K
ICAgICB+RE9NQXBwbGljYXRpb25DYWNoZSgpIHsgQVNTRVJUKCFtX2ZyYW1lKTsgfQogCisgICAg
RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogICAgIHZvaWQgZGlzY29u
bmVjdEZyYW1lKCk7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXMoKSBjb25zdDsK
</data>
<flag name="review"
          id="35806"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>