<?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>41404</bug_id>
          
          <creation_ts>2010-06-30 04:51:03 -0700</creation_ts>
          <short_desc>DB clean up: Make all DatabaseTasks internal Database classes</short_desc>
          <delta_ts>2010-07-02 15:51:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>41494</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244729</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-30 04:51:03 -0700</bug_when>
    <thetext>All DatabaseTasks are used only by the async DBs, so we should &quot;scope&quot; them somehow to the Database class. If we make them internal Database classes, then we can also make some methods that are currently public (like performOpenAndVerify() and close()) private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244981</commentid>
    <comment_count>1</comment_count>
      <attachid>60160</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-30 16:01:49 -0700</bug_when>
    <thetext>Created attachment 60160
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245049</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-30 18:35:21 -0700</bug_when>
    <thetext>Gotta love patches that delete more code than they add ;) Really glad to see this cleanup. Like we talked about offline, i&apos;m not sure having the db thread call the virtual closeImmediately() method is an improvement over the simpler more direct close() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245065</commentid>
    <comment_count>3</comment_count>
      <attachid>60187</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-30 20:04:32 -0700</bug_when>
    <thetext>Created attachment 60187
patch

(In reply to comment #2)
&gt; Like we talked about offline, i&apos;m not sure having the db thread call the virtual closeImmediately() method is an improvement over the simpler more direct close() method.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245501</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-01 12:54:37 -0700</bug_when>
    <thetext>This LGreatTM but what&apos;s going on with the trybots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245621</commentid>
    <comment_count>5</comment_count>
      <attachid>60187</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-01 15:57:36 -0700</bug_when>
    <thetext>Comment on attachment 60187
patch

rs=me, deferring to michael&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245640</commentid>
    <comment_count>6</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-01 16:34:08 -0700</bug_when>
    <thetext>Landed: r62321.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245652</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 16:45:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62321 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245675</commentid>
    <comment_count>8</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-01 17:24:49 -0700</bug_when>
    <thetext>Reopening, patch broke the Mac build, so I had to revert it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245794</commentid>
    <comment_count>9</comment_count>
      <attachid>60344</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 00:40:49 -0700</bug_when>
    <thetext>Created attachment 60344
patch

Same patch, with minor syntax changes. The Windows, Mac, Qt and Chromium/Win ports have built successfully with this patch applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245858</commentid>
    <comment_count>10</comment_count>
      <attachid>60187</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-02 03:17:30 -0700</bug_when>
    <thetext>Comment on attachment 60187
patch

Cleared Darin Fisher&apos;s review+ from obsolete attachment 60187 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246092</commentid>
    <comment_count>11</comment_count>
      <attachid>60344</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-02 14:32:48 -0700</bug_when>
    <thetext>Comment on attachment 60344
patch

R=me, but you don&apos;t need any of the Database:: prefixes inside the class definitions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246109</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 14:42:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 60344 [details])
&gt; R=me, but you don&apos;t need any of the Database:: prefixes inside the class definitions.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246133</commentid>
    <comment_count>13</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 15:51:14 -0700</bug_when>
    <thetext>re-landed: r62411.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60160</attachid>
            <date>2010-06-30 16:01:49 -0700</date>
            <delta_ts>2010-06-30 20:04:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26580</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDYtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEQiBjbGVhbiB1cC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQxNDA0CisKKyAgICAgICAgMS4gTWFkZSBhbGwgRGF0YWJhc2VUYXNrcyBpbnRlcm5h
bCBjbGFzc2VzIG9mIERhdGFiYXNlIGFuZCBtYWRlCisgICAgICAgICAgIHRoZSBEYXRhYmFzZSBt
ZXRob2RzIGNhbGxlZCBieSB0aG9zZSB0YXNrcyBwcml2YXRlLgorICAgICAgICAyLiBSZW1vdmVk
IHRoZSBEYXRhYmFzZTo6c3RvcHtlZH0oKSBtZXRob2RzLgorICAgICAgICAzLiBSZW1vdmVkIHRo
ZSBjb2RlIHRoYXQga2VwdCB0cmFjayBvZiBvcGVuIGRhdGFiYXNlcyBmcm9tCisgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKG5vIGxvbmdlciBuZWVkZWQpCisgICAgICAgIDQuIE1h
ZGUgbWlub3IgY2hhbmdlcyB0byBEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVseSgpIHRvIG1ha2Ug
aXQKKyAgICAgICAgICAgcG9zc2libGUgZm9yIERhdGFiYXNlVGhyZWFkIHRvIGNhbGwgdGhhdCBt
ZXRob2QgaW5zdGVhZCBvZgorICAgICAgICAgICBjbG9zZSgpLgorICAgICAgICA1LiBNaW5vciBm
aXggdG8gRGF0YWJhc2VUcmFja2VyOiBhZGRPcGVuRGF0YWJhc2UoKSBzaG91bGQgY2FsbAorICAg
ICAgICAgICBPcmlnaW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKCkgaWYgdGhlIG9yaWdpbiBx
dW90YSBtYW5hZ2VyCisgICAgICAgICAgIGlzIG5vdCB0cmFja2luZyB0aGlzIG9yaWdpbi4KKyAg
ICAgICAgNi4gUmVtb3ZlZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpLiBXZSBhbHJl
YWR5IHVwZGF0ZSB0aGUKKyAgICAgICAgICAgREIgc2l6ZSBhZnRlciBlYWNoIHRyYW5zYWN0aW9u
LCBhbmQgd2UgZW5mb3JjZSBhIG1heCBzaXplIGZvcgorICAgICAgICAgICB0aGUgREIgYXQgdGhl
IGJlZ2lubmluZyBvZiBlYWNoIHRyYW5zYWN0aW9uLgorCisgICAgICAgICogZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6c3RvcERhdGFiYXNlcyk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omhhc09wZW5E
YXRhYmFzZXMpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZTo6RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRB
bmRDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkpOgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkZWJ1Z1Rhc2tOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJh
c2VDbG9zZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VU
YXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFz
ZUNsb3NlVGFzazo6ZGVidWdUYXNrTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3Jt
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s6OmRlYnVnVGFza05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNl
VGFibGVOYW1lc1Rhc2s6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRvUGVyZm9ybVRhc2spOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRlYnVnVGFz
a05hbWUpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpjcmVhdGUpOgorICAg
ICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
VHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5E
YXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSk6CisKIDIwMTAt
MDYtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmNwcAkocmV2aXNpb24gNjIyMTApCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDM4ICsxMDksOSBAQCBEYXRhYmFz
ZVRocmVhZCogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VU
aHJlYWQuZ2V0KCk7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRh
dGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFk
KCkpOwotICAgIGlmICghbV9vcGVuRGF0YWJhc2VTZXQpCi0gICAgICAgIG1fb3BlbkRhdGFiYXNl
U2V0LnNldChuZXcgRGF0YWJhc2VTZXQoKSk7Ci0KLSAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNl
U2V0LT5jb250YWlucyhkYXRhYmFzZSkpOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5hZGQoZGF0
YWJhc2UpOwotfQotCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRh
YmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgp
KTsKLSAgICBBU1NFUlQobV9vcGVuRGF0YWJhc2VTZXQgJiYgbV9vcGVuRGF0YWJhc2VTZXQtPmNv
bnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgaWYgKCFtX29wZW5EYXRhYmFzZVNldCkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5yZW1vdmUoZGF0YWJhc2UpOwotfQotCiB2
b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKiBjbGVhbnVwU3luYykKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkp
OwotICAgIGlmIChtX29wZW5EYXRhYmFzZVNldCkgewotICAgICAgICBEYXRhYmFzZVNldDo6aXRl
cmF0b3IgaSA9IG1fb3BlbkRhdGFiYXNlU2V0LT5iZWdpbigpOwotICAgICAgICBEYXRhYmFzZVNl
dDo6aXRlcmF0b3IgZW5kID0gbV9vcGVuRGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICBmb3Ig
KDsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICAgICAgKCppKS0+c3RvcCgpOwotICAgICAgICAg
ICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpCi0gICAgICAgICAgICAgICAgbV9kYXRhYmFzZVRocmVh
ZC0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoKmkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAog
ICAgIGlmIChtX2RhdGFiYXNlVGhyZWFkKQogICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1
ZXN0VGVybWluYXRpb24oY2xlYW51cFN5bmMpOwogICAgIGVsc2UgaWYgKGNsZWFudXBTeW5jKQpJ
bmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjIyMTApCisr
KyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDggKzcwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBEYXRhYmFzZVRocmVh
ZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkg
eyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9CiAgICAgICAgIGJvb2wgaGFzT3BlbkRhdGFi
YXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQotICAgICAgICB2b2lk
IGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJlbW92ZU9wZW5EYXRh
YmFzZShEYXRhYmFzZSopOwogICAgICAgICAvLyBXaGVuIHRoZSBkYXRhYmFzZSBjbGVhbnVwIGlz
IGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2lnbmFsbGVkLgogICAgICAgICB2b2lkIHN0b3BE
YXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAjZW5kaWYKQEAgLTE2MCw4ICsx
NTgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAg
ICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fZGF0YWJhc2VUaHJlYWQ7CiAgICAgICAgIGJvb2wg
bV9oYXNPcGVuRGF0YWJhc2VzOyAvLyBUaGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwg
ZXZlbiBhZnRlciB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIGNsb3NlZC4KLSAgICAgICAgdHlwZWRl
ZiBIYXNoU2V0PERhdGFiYXNlKiA+IERhdGFiYXNlU2V0OwotICAgICAgICBPd25QdHI8RGF0YWJh
c2VTZXQ+IG1fb3BlbkRhdGFiYXNlU2V0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRklMRV9SRUFE
RVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjIyMTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw2IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0
YWIKIAogICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNh
bGxiYWNrLCBlKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBvcGVuIGFu
ZCB2ZXJpZnkgdmVyc2lvbiAoZXhwZWN0ZWQgJXMpIG9mIGRhdGFiYXNlICVzIiwgZXhwZWN0ZWRW
ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZS0+ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgIGNvbnRleHQtPnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFz
ZS5nZXQoKSk7CiAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5E
YXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTEz
MywxNCArMTMyLDExIEBAIERhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXgK
ICAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0
aW9uUXVldWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi0gICAgLCBtX3N0
b3BwZWQoZmFsc2UpCiB7CiAgICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9j
b250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRocmVhZHNhZmVDb3B5KCk7CiAKICAgICBTY3Jp
cHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0KLSAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKIH0KIAogY2xhc3MgRGVyZWZDb250
ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTIwMiwx
MDcgKzE5OCw0OSBAQCB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRh
YmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKLQogICAgIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7Ci0gICAgT3duUHRyPERhdGFiYXNlQ2xv
c2VUYXNrPiB0YXNrID0gRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzLCBEb05vdFJlbW92
ZURhdGFiYXNlRnJvbUNvbnRleHQsICZzeW5jaHJvbml6ZXIpOworICAgIE93blB0cjxEYXRhYmFz
ZUNsb3NlVGFzaz4gdGFzayA9IERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcywgJnN5bmNo
cm9uaXplcik7CiAKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFk
KCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CiAgICAgc3luY2hyb25p
emVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgLy8gRGF0YWJhc2VDbG9zZVRhc2sg
dGVsbHMgRGF0YWJhc2U6OmNsb3NlIG5vdCB0byBkbyB0aGVzZSB0d28gcmVtb3ZhbHMgc28gdGhh
dCB3ZSBjYW4gZG8gdGhlbSBoZXJlIHN5bmNocm9ub3VzbHkuCi0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7Ci0gICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCi1jbGFzcyBDb250ZXh0
UmVtb3ZlT3BlbkRhdGFiYXNlVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDb250ZXh0UmVtb3ZlT3BlbkRh
dGFiYXNlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzayhkYXRhYmFz
ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBjb250ZXh0LT5yZW1vdmVPcGVuRGF0
YWJhc2UobV9kYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLnJlbW92ZU9wZW5EYXRhYmFzZShtX2RhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotcHJp
dmF0ZToKLSAgICBDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzayhQYXNzUmVmUHRyPERhdGFi
YXNlPiBkYXRhYmFzZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci19OwotCi12b2lkIERhdGFi
YXNlOjpjbG9zZShDbG9zZVBvbGljeSBwb2xpY3kpCit2b2lkIERhdGFiYXNlOjpjbG9zZSgpCiB7
Ci0gICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhpczsKLQogICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwogICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgp
LT5nZXRUaHJlYWRJRCgpKTsKIAogICAgIGNsb3NlRGF0YWJhc2UoKTsKIAogICAgIC8vIE11c3Qg
cmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9z
ZWQoKS4KKyAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQo
dGhpcyk7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51
bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKLSAgICBpZiAocG9saWN5ID09IFJlbW92ZURh
dGFiYXNlRnJvbUNvbnRleHQpCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CisgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogfQog
CiB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KCkKIHsKICAgICBEYXRhYmFzZVRocmVh
ZCogZGF0YWJhc2VUaHJlYWQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCk7Ci0gICAgaWYgKGRhdGFiYXNlVGhyZWFkICYmICFkYXRhYmFzZVRocmVhZC0+dGVybWlu
YXRpb25SZXF1ZXN0ZWQoKSkgewotICAgICAgICBzdG9wKCk7Ci0gICAgICAgIGRhdGFiYXNlVGhy
ZWFkLT5zY2hlZHVsZVRhc2soRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzLCBEYXRhYmFz
ZTo6UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwgMCkpOworICAgIGlmIChkYXRhYmFzZVRocmVh
ZCAmJiBvcGVuZWQoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CisgICAgICAgICAgICBtX2lzVHJhbnNh
Y3Rpb25RdWV1ZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudFRocmVhZCgp
ID09IGRhdGFiYXNlVGhyZWFkLT5nZXRUaHJlYWRJRCgpKQorICAgICAgICAgICAgY2xvc2UoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlSW1tZWRp
YXRlVGFzayhEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsIDApKTsKICAgICB9CiB9CiAK
LXZvaWQgRGF0YWJhc2U6OnN0b3AoKQotewotICAgIC8vIEZJWE1FOiBUaGUgbmV0IGVmZmVjdCBv
ZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdG8gcmVtb3ZlIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBhbmQgc3RhdGVtZW50cywgYnV0IGFsbG93IHRoZSBjdXJyZW50IHN0YXRlbWVudAotICAgIC8v
IHRvIHJ1biB0byBjb21wbGV0aW9uLiAgSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIHRoZSBzcWxp
dGUzX3Byb2dyZXNzX2hhbmRsZXIgb3Igc3FsaXRlM19pbnRlcnJ1cHQgaW50ZXJmYWNlcyB0byBj
YW5jZWwgdGhlIGN1cnJlbnQKLSAgICAvLyBzdGF0ZW1lbnQgaW4gcmVzcG9uc2UgdG8gY2xvc2Uo
KSwgYXMgd2VsbC4KLQotICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMg
YW4gYW5hbG9nIHRvIGNhbmNlbGxpbmcgYSBsb2FkZXIsIGFuZCBpcyB1c2VkIHdoZW4gYSBkb2N1
bWVudCBpcyBzaHV0IGRvd24gYXMgdGhlIHJlc3VsdCBvZgotICAgIC8vIGEgcGFnZSBsb2FkIG9y
IGNsb3NpbmcgdGhlIHBhZ2UKLSAgICBtX3N0b3BwZWQgPSB0cnVlOwotCi0gICAgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0gICAg
ICAgIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7
Ci19Ci0KIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0
YWJhc2UodGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKQot
ewotICAgIC8vIEZJWE1FOiBDb2RlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyB3aWxsIG5lZWQg
dG8gYmUgcnVuIHRvIGVuZm9yY2UgdGhlIHBlci1vcmlnaW4gc2l6ZSBsaW1pdCB0aGUgc3BlYyBt
YW5kYXRlcy4KLSAgICAvLyBBZGRpdGlvbmFsbHksIHdlIG1pZ2h0IG5lZWQgYSB3YXkgdG8gcGF1
c2UgdGhlIGRhdGFiYXNlIHRocmVhZCB3aGlsZSB0aGUgVUEgcHJvbXB0cyB0aGUgdXNlciBmb3Ig
cGVybWlzc2lvbiB0bwotICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIGxpbWl0Ci0KLSAgICAvKgot
ICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkluY3JlYXNlZFNpemUoKSkK
LSAgICAgICAgRGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZUZpbGVTaXplQ2hlY2tPbk1haW5UaHJl
YWQodGhpcyk7Ci0gICAgKi8KLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIGJvb2wgRGF0
YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1P
cGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlKSkgewpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgJKHJldmlzaW9uIDYyMjEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDQwICs3MSwzNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVsZXRlZDsgfQogCi0gICAgZW51bSBDbG9zZVBvbGljeSB7IERvTm90UmVtb3ZlRGF0
YWJhc2VGcm9tQ29udGV4dCwgUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCB9OwotICAgIHZvaWQg
Y2xvc2UoQ2xvc2VQb2xpY3kpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCk7
CiAKLSAgICB2b2lkIHN0b3AoKTsKLSAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BwZWQ7IH0KLQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25z
dDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAotICAgIC8v
IENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdvcmsgb24g
dGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCBwZXJmb3JtUG9saWN5Q2hlY2tzKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBpblByb2dyZXNzVHJhbnNh
Y3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJh
bnNhY3Rpb24qLCBib29sIGltbWVkaWF0ZWx5ID0gZmFsc2UpOwogCi0gICAgVmVjdG9yPFN0cmlu
Zz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKLQogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0
cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKIAogICAgIHZvaWQgaW5jcmVtZW50YWxW
YWN1dW1JZk5lZWRlZCgpOwogCiBwcml2YXRlOgorICAgIGNsYXNzIERhdGFiYXNlT3BlblRhc2s7
CisgICAgY2xhc3MgRGF0YWJhc2VDbG9zZVRhc2s7CisgICAgY2xhc3MgRGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2s7CisgICAgY2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazsKKwogICAgIERhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICBib29sIG9wZW5BbmRW
ZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY2xvc2UoKTsKIAorICAg
IHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgdm9pZCBzY2hlZHVs
ZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1l
cygpOworCiAgICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7CiAK
ICAgICBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwpA
QCAtMTE1LDcgKzExMiw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBt
X2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47CiAKICAgICBib29sIG1fZGVsZXRlZDsKLSAg
ICBib29sIG1fc3RvcHBlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRhc2suY3BwCShyZXZpc2lvbiA2MjIxMCkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2IEBAIHZvaWQg
RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCiAKICAgICBtX2RhdGFiYXNlLT5yZXNldEF1dGhv
cml6ZXIoKTsKICAgICBkb1BlcmZvcm1UYXNrKCk7Ci0gICAgbV9kYXRhYmFzZS0+cGVyZm9ybVBv
bGljeUNoZWNrcygpOwogCiAgICAgaWYgKG1fc3luY2hyb25pemVyKQogICAgICAgICBtX3N5bmNo
cm9uaXplci0+dGFza0NvbXBsZXRlZCgpOwpAQCAtODcsNyArODYsNyBAQCB2b2lkIERhdGFiYXNl
VGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERhdGFiYXNlT3BlblRhc2sgKioqCiAvLyBPcGVu
cyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0aGUg
ZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhE
YXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29s
JiBzdWNjZXNzKQorRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2so
RGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFz
ZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgYm9v
bCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVyKQog
ICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkK
ICAgICAsIG1fY29kZShjb2RlKQpAQCAtOTYsMTMgKzk1LDEzIEBAIERhdGFiYXNlT3BlblRhc2s6
OkRhdGFiYXNlT3BlblRhc2soRGF0YWIKICAgICBBU1NFUlQoc3luY2hyb25pemVyKTsgLy8gQSB0
YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3VwcG9zZWQgdG8gYmUgc3luY2hyb25vdXMu
CiB9CiAKLXZvaWQgRGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzaygpCit2b2lkIERhdGFi
YXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsKICAgICBtX3N1Y2Nlc3Mg
PSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBtX2NvZGUpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hhciogRGF0YWJhc2VP
cGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0
YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJEYXRh
YmFzZU9wZW5UYXNrIjsKIH0KQEAgLTExMSwxOSArMTEwLDE4IEBAIGNvbnN0IGNoYXIqIERhdGFi
YXNlT3BlblRhc2s6OmRlYnVnVGFza04KIC8vICoqKiBEYXRhYmFzZUNsb3NlVGFzayAqKioKIC8v
IENsb3NlcyB0aGUgZGF0YWJhc2UuCiAKLURhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsb3Nl
VGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlOjpDbG9zZVBvbGljeSBjbG9zZVBvbGlj
eSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCitEYXRhYmFzZTo6RGF0
YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiAgICAgOiBEYXRhYmFzZVRhc2so
ZGF0YWJhc2UsIHN5bmNocm9uaXplcikKLSAgICAsIG1fY2xvc2VQb2xpY3koY2xvc2VQb2xpY3kp
CiB7CiB9CiAKLXZvaWQgRGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQordm9pZCBE
YXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQogewotICAgIGRhdGFi
YXNlKCktPmNsb3NlKG1fY2xvc2VQb2xpY3kpOworICAgIGRhdGFiYXNlKCktPmNsb3NlKCk7CiB9
CiAKICNpZm5kZWYgTkRFQlVHCi1jb25zdCBjaGFyKiBEYXRhYmFzZUNsb3NlVGFzazo6ZGVidWdU
YXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6
OmRlYnVnVGFza05hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiRGF0YWJhc2VDbG9zZVRhc2si
OwogfQpAQCAtMTMyLDI0ICsxMzAsMjAgQEAgY29uc3QgY2hhciogRGF0YWJhc2VDbG9zZVRhc2s6
OmRlYnVnVGFzawogLy8gKioqIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICoqKgogLy8gU3RhcnRz
IGEgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIHJlcG9ydCBpdHMgcmVzdWx0cyB2aWEgYSBjYWxsYmFj
ay4KIAotRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQorRGF0YWJhc2U6OkRhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKICAgICA6IERhdGFiYXNlVGFzayh0cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKSwgMCkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CiB9CiAK
LURhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjp+RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soKQotewot
fQotCi12b2lkIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1UYXNrKCkKK3ZvaWQg
RGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsKICAg
ICBpZiAobV90cmFuc2FjdGlvbi0+cGVyZm9ybU5leHRTdGVwKCkpCiAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCktPmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogfQog
CiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hhciogRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRl
YnVnVGFza05hbWUoKSBjb25zdAorY29uc3QgY2hhciogRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gIkRhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrIjsKIH0KQEAgLTE1OCwyMCArMTUyLDIwIEBAIGNvbnN0IGNoYXIqIERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkZWIKIC8vICoqKiBEYXRhYmFzZVRhYmxlTmFtZXNUYXNr
ICoqKgogLy8gUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgdGFibGVzIGluIHRoZSBkYXRhYmFzZSAt
IGZvciBXZWJJbnNwZWN0b3Igc3VwcG9ydC4KIAotRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0
YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCitEYXRhYmFzZTo6
RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSog
ZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8
U3RyaW5nPiYgbmFtZXMpCiAgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXpl
cikKICAgICAsIG1fdGFibGVOYW1lcyhuYW1lcykKIHsKICAgICBBU1NFUlQoc3luY2hyb25pemVy
KTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3VwcG9zZWQgdG8gYmUgc3lu
Y2hyb25vdXMuCiB9CiAKLXZvaWQgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6ZG9QZXJmb3JtVGFz
aygpCit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkb1BlcmZvcm1UYXNr
KCkKIHsKICAgICBtX3RhYmxlTmFtZXMgPSBkYXRhYmFzZSgpLT5wZXJmb3JtR2V0VGFibGVOYW1l
cygpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hhciogRGF0YWJhc2VUYWJsZU5hbWVz
VGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJh
c2VUYWJsZU5hbWVzVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJE
YXRhYmFzZVRhYmxlTmFtZXNUYXNrIjsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHJl
dmlzaW9uIDYyMjEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBEYXRhYmFzZVRh
c2sgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZVRhc2soKTsKIApAQCAtODMsMTUgKzgyLDE1IEBA
IHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLWNsYXNzIERhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMg
RGF0YWJhc2VUYXNrIHsKK2NsYXNzIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VP
cGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUm
IGNvZGUsIGJvb2wmIHN1Y2Nlc3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2U6OkRh
dGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRp
b25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBE
YXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgc3luY2hyb25pemVy
LCBjb2RlLCBzdWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZTo6RGF0YWJhc2VP
cGVuVGFzayhkYiwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIHN5bmNocm9uaXplciwgY29kZSwg
c3VjY2Vzcyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFiYXNlT3BlblRhc2soRGF0YWJh
c2UqLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vzcyk7CisgICAgRGF0YWJhc2U6OkRhdGFi
YXNlT3BlblRhc2soRGF0YWJhc2UqLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vzcyk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcKQEAgLTEw
MywzNyArMTAyLDM0IEBAIHByaXZhdGU6CiAgICAgYm9vbCYgbV9zdWNjZXNzOwogfTsKIAotY2xh
c3MgRGF0YWJhc2VDbG9zZVRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK2NsYXNzIERhdGFi
YXNlOjpEYXRhYmFzZUNsb3NlVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2Uq
IGRiLCBEYXRhYmFzZTo6Q2xvc2VQb2xpY3kgY2xvc2VQb2xpY3ksIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogc3luY2hyb25pemVyKQotICAgIHsgCi0gICAgICAgIHJldHVybiBuZXcgRGF0YWJh
c2VDbG9zZVRhc2soZGIsIGNsb3NlUG9saWN5LCBzeW5jaHJvbml6ZXIpOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBk
YiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzayhkYiwgc3luY2hyb25pemVy
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VDbG9zZVRhc2soRGF0YWJhc2UqLCBE
YXRhYmFzZTo6Q2xvc2VQb2xpY3ksIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOworICAgIERh
dGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciopOwogCiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRF
QlVHCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7CiAjZW5k
aWYKLQotICAgIERhdGFiYXNlOjpDbG9zZVBvbGljeSBtX2Nsb3NlUG9saWN5OwogfTsKIAotY2xh
c3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK2NsYXNz
IERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sg
ewogcHVibGljOgogICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hyb25vdXMs
IHNvIG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KLSAgICBzdGF0aWMgUGFzc093blB0cjxE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlOjpEYXRhYmFzZVRy
YW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayh0
cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrKHRyYW5zYWN0aW9uKTsKICAgICB9CiAKICAgICBTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKLSAgICB2
aXJ0dWFsIH5EYXRhYmFzZVRyYW5zYWN0aW9uVGFzaygpOwogcHJpdmF0ZToKLSAgICBEYXRhYmFz
ZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPik7CisgICAgRGF0YWJh
c2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+KTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAt
MTQzLDE1ICsxMzksMTUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247CiB9OwogCi1jbGFzcyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7CitjbGFzcyBEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayA6
IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERh
dGFiYXNlVGFibGVOYW1lc1Rhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IGNyZWF0ZShE
YXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0
b3I8U3RyaW5nPiYgbmFtZXMpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlVGFi
bGVOYW1lc1Rhc2soZGIsIHN5bmNocm9uaXplciwgbmFtZXMpOworICAgICAgICByZXR1cm4gbmV3
IERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKGRiLCBzeW5jaHJvbml6ZXIsIG5hbWVz
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFz
ZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIFZlY3RvcjxTdHJpbmc+JiBuYW1lcyk7Cisg
ICAgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRh
c2tTeW5jaHJvbml6ZXIqLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpOwogCiAgICAgdmlydHVhbCB2
b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDYyMjEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDE0ICsxMTMsMTQgQEAgdm9pZCog
RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlblNldENvcHkuc3dh
cChtX29wZW5EYXRhYmFzZVNldCk7CiAgICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQg
PSBvcGVuU2V0Q29weS5lbmQoKTsKICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3Ig
aXQgPSBvcGVuU2V0Q29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICgq
aXQpLT5jbG9zZShEYXRhYmFzZTo6UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCk7CisgICAgICAg
ICAgICAoKml0KS0+Y2xvc2VJbW1lZGlhdGVseSgpOwogICAgIH0KIAogICAgIC8vIERldGFjaCB0
aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0
byBhbnlvbmUgZWxzZQogICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKIAogICAgIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwotICAgIAor
CiAgICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4gZGVs
ZXRpb24KICAgICBtX3NlbGZSZWYgPSAwOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAkocmV2aXNpb24gNjIyMTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDggKzUwOCwxMCBAQCB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFiCiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQWRk
ZWQgb3BlbiBEYXRhYmFzZSAlcyAoJXApXG4iLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigp
LmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZSk7CiAKICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAg
ICAgaWYgKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4oZGF0YWJhc2UtPnNlY3Vy
aXR5T3JpZ2luKCkpKQorICAgICAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09y
aWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKICAgICAgICAgICAgIG9yaWdpblF1
b3RhTWFuYWdlcigpLnRyYWNrT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAg
ICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLCBkYXRhYmFzZS0+Zmls
ZU5hbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJh
c2UobV9kYXRhYmFzZUd1YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAko
cmV2aXNpb24gNjIyMTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFNRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNh
Y3Rpb24oKQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYg
c3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7Ci0gICAg
aWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2VkIHx8IG1fZGF0YWJhc2UtPnN0b3BwZWQoKSkgeworICAg
IGlmICghbV9leGVjdXRlU3FsQWxsb3dlZCB8fCAhbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKICAg
ICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTQ5LDcgKzE0OSw3IEBAIGNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0aW9uOjpkZWJ1Z1N0ZXBOYW0K
IAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSgpCiB7
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5zdG9wcGVkKCkpCisgICAgaWYgKG1fZGF0YWJhc2UtPm9w
ZW5lZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2FzIHN0
b3BwZWQsIGRvbid0IGRvIGFueXRoaW5nIGFuZCBjYW5jZWwgcXVldWVkIHdvcmsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYyMjEwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDYtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNaW5vciBjaGFuZ2UgdG8gYSBEQiB0ZXN0IHRvIG1ha2UgaXQgcnVuIGNvcnJlY3RseSB3
aXRoIHJ1bi13ZWJraXQtdGVzdHMgLS1pdGVyYXRpb25zIE4uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQwNAorCisgICAgICAgICogc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLmh0bWw6CisKIDIwMTAtMDYtMzAgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJu
c3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24t
Y2FsbGJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0
YWJhc2UtY3JlYXRpb24tY2FsbGJhY2suaHRtbAkocmV2aXNpb24gNjIyMTApCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2suaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQCBmdW5jdGlvbiBydW5UZXN0KCkKIAogICAgIC8vIE9w
ZW4gYSBuZXcgZGF0YWJhc2Ugd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrLCBhbmQgbWFrZSBzdXJl
IHRoZSBjcmVhdGlvbiBjYWxsYmFjayBpcyBxdWV1ZWQKICAgICB2YXIgY3JlYXRpb25DYWxsYmFj
a0NhbGxlZDEgPSBmYWxzZTsKLSAgICB2YXIgZGIxID0gb3BlbkRhdGFiYXNlKCJPcGVuRGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrMSIsICIxLjAiLCAiIiwgMSwKKyAgICB2YXIgZGIxTmFtZSA9ICJP
cGVuRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrMSIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwor
ICAgIHZhciBkYjEgPSBvcGVuRGF0YWJhc2UoZGIxTmFtZSwgIjEuMCIsICIiLCAxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZGIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGlvbkNhbGxiYWNrQ2FsbGVkMSA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGRiLnZlcnNpb24gIT0gIiIpIHsKQEAgLTUyLDcgKzUzLDcg
QEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAgLy8gYSBudWxsIGhhbmRsZSBhbmQgdGhyb3cgYSBJ
TlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24uCiAgICAgdmFyIGRiMUZhaWwgPSBudWxsOwogICAg
IHRyeSB7Ci0gICAgICAgIGRiMUZhaWwgPSBvcGVuRGF0YWJhc2UoIk9wZW5EYXRhYmFzZUNyZWF0
aW9uQ2FsbGJhY2sxIiwgIjEuMCIsICIiLCAxKTsKKyAgICAgICAgZGIxRmFpbCA9IG9wZW5EYXRh
YmFzZShkYjFOYW1lLCAiMS4wIiwgIiIsIDEpOwogICAgICAgICBsb2coIlRoaXMgc3RhdGVtZW50
IHNob3VsZCBub3QgaGF2ZSBiZWVuIGV4ZWN1dGVkOyBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNl
cHRpb24gc2hvdWxkJ3ZlIGJlZW4gdGhyb3duLiIpOwogICAgICAgICBmaW5pc2hUZXN0KCk7CiAg
ICAgfSBjYXRjaChlcnIpIHsK
</data>
<flag name="commit-queue"
          id="47479"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60187</attachid>
            <date>2010-06-30 20:04:32 -0700</date>
            <delta_ts>2010-07-02 03:17:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26609</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDYtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEQiBjbGVhbiB1cC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQxNDA0CisKKyAgICAgICAgMS4gTWFkZSBhbGwgRGF0YWJhc2VUYXNrcyBpbnRlcm5h
bCBjbGFzc2VzIG9mIERhdGFiYXNlIGFuZCBtYWRlCisgICAgICAgICAgIHRoZSBEYXRhYmFzZSBt
ZXRob2RzIGNhbGxlZCBieSB0aG9zZSB0YXNrcyBwcml2YXRlLgorICAgICAgICAyLiBSZW1vdmVk
IHRoZSBEYXRhYmFzZTo6c3RvcHtlZH0oKSBtZXRob2RzLgorICAgICAgICAzLiBSZW1vdmVkIHRo
ZSBjb2RlIHRoYXQga2VwdCB0cmFjayBvZiBvcGVuIGRhdGFiYXNlcyBmcm9tCisgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKG5vIGxvbmdlciBuZWVkZWQpLgorICAgICAgICA0LiBN
YWRlIG1pbm9yIGNoYW5nZXMgdG8gRGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkoKSB0byBtYWtl
IGl0CisgICAgICAgICAgIHBvc3NpYmxlIGZvciBEYXRhYmFzZVRocmVhZCB0byBjYWxsIHRoYXQg
bWV0aG9kIGluc3RlYWQgb2YKKyAgICAgICAgICAgY2xvc2UoKS4KKyAgICAgICAgNS4gTWlub3Ig
Zml4IHRvIERhdGFiYXNlVHJhY2tlcjogYWRkT3BlbkRhdGFiYXNlKCkgc2hvdWxkIGNhbGwKKyAg
ICAgICAgICAgT3JpZ2luUXVvdGFNYW5hZ2VyOjphZGREYXRhYmFzZSgpIGlmIHRoZSBvcmlnaW4g
cXVvdGEgbWFuYWdlcgorICAgICAgICAgICBpcyBub3QgdHJhY2tpbmcgdGhpcyBvcmlnaW4uCisg
ICAgICAgIDYuIFJlbW92ZWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKS4gV2UgYWxy
ZWFkeSB1cGRhdGUgdGhlCisgICAgICAgICAgIERCIHNpemUgYWZ0ZXIgZWFjaCB0cmFuc2FjdGlv
biwgYW5kIHdlIGVuZm9yY2UgYSBtYXggc2l6ZSBmb3IKKyAgICAgICAgICAgdGhlIERCIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgZWFjaCB0cmFuc2FjdGlvbi4KKworICAgICAgICAqIGRvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpoYXNPcGVu
RGF0YWJhc2VzKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjptYXJrQXNEZWxldGVk
QW5kQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFi
YXNlQ2xvc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZUNsb3Nl
VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJh
c2VDbG9zZVRhc2s6OmRlYnVnVGFza05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6
OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrOjpkZWJ1Z1Rhc2tOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkZWJ1Z1Rh
c2tOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVu
RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UpOgorCiAyMDEw
LTA2LTMwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBidWlsZGZpeCBhZnRlciByNjIxOTYgYW5kIHI2MjIxNC4KSW5kZXg6IFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
MzggKzEwOSw5IEBAIERhdGFiYXNlVGhyZWFkKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjoKICAg
ICByZXR1cm4gbV9kYXRhYmFzZVRocmVhZC5nZXQoKTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjphZGRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIEFT
U0VSVChpc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX29wZW5EYXRhYmFzZVNldCkKLSAg
ICAgICAgbV9vcGVuRGF0YWJhc2VTZXQuc2V0KG5ldyBEYXRhYmFzZVNldCgpKTsKLQotICAgIEFT
U0VSVCghbV9vcGVuRGF0YWJhc2VTZXQtPmNvbnRhaW5zKGRhdGFiYXNlKSk7Ci0gICAgbV9vcGVu
RGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7Ci19Ci0KLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NF
UlQoaXNDb250ZXh0VGhyZWFkKCkpOwotICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZVNldCAmJiBt
X29wZW5EYXRhYmFzZVNldC0+Y29udGFpbnMoZGF0YWJhc2UpKTsKLSAgICBpZiAoIW1fb3BlbkRh
dGFiYXNlU2V0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9vcGVuRGF0YWJhc2VTZXQtPnJlbW92
ZShkYXRhYmFzZSk7Ci19Ci0KIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcERhdGFi
YXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKQogewogICAgIEFTU0VS
VChpc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgaWYgKG1fb3BlbkRhdGFiYXNlU2V0KSB7Ci0gICAg
ICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBpID0gbV9vcGVuRGF0YWJhc2VTZXQtPmJlZ2luKCk7
Ci0gICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBtX29wZW5EYXRhYmFzZVNldC0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICAoKmkp
LT5zdG9wKCk7Ci0gICAgICAgICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkKLSAgICAgICAgICAg
ICAgICBtX2RhdGFiYXNlVGhyZWFkLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcygqaSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCiAgICAgaWYgKG1fZGF0YWJhc2VUaHJlYWQpCiAgICAgICAgIG1f
ZGF0YWJhc2VUaHJlYWQtPnJlcXVlc3RUZXJtaW5hdGlvbihjbGVhbnVwU3luYyk7CiAgICAgZWxz
ZSBpZiAoY2xlYW51cFN5bmMpCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCgpOwogICAgICAgICB2b2lkIHNl
dEhhc09wZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KICAgICAg
ICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNPcGVuRGF0YWJh
c2VzOyB9Ci0gICAgICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7Ci0gICAgICAg
IHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7CiAgICAgICAgIC8vIFdoZW4gdGhl
IGRhdGFiYXNlIGNsZWFudXAgaXMgZG9uZSwgY2xlYW51cFN5bmMgd2lsbCBiZSBzaWduYWxsZWQu
CiAgICAgICAgIHZvaWQgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsK
ICNlbmRpZgpAQCAtMTYwLDggKzE1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFC
TEUoREFUQUJBU0UpCiAgICAgICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9kYXRhYmFzZVRo
cmVhZDsKICAgICAgICAgYm9vbCBtX2hhc09wZW5EYXRhYmFzZXM7IC8vIFRoaXMgbmV2ZXIgY2hh
bmdlcyBiYWNrIHRvIGZhbHNlLCBldmVuIGFmdGVyIHRoZSBkYXRhYmFzZSB0aHJlYWQgaXMgY2xv
c2VkLgotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8RGF0YWJhc2UqID4gRGF0YWJhc2VTZXQ7Ci0g
ICAgICAgIE93blB0cjxEYXRhYmFzZVNldD4gbV9vcGVuRGF0YWJhc2VTZXQ7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShGSUxFX1JFQURFUikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDYgQEAgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogCiAgICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlm
eVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGUpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0
YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY29udGV4dC0+cmVtb3Zl
T3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtMTMzLDE0ICsxMzIsMTEgQEAgRGF0YWJhc2U6OkRhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleAogICAgICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2Up
CiAgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVsZXRl
ZChmYWxzZSkKLSAgICAsIG1fc3RvcHBlZChmYWxzZSkKIHsKICAgICBtX2RhdGFiYXNlVGhyZWFk
U2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2Fm
ZUNvcHkoKTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsK
ICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsK
LQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkT3BlbkRhdGFiYXNlKHRoaXMpOwog
fQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2sgewpAQCAtMjAyLDg2ICsxOTgsMzggQEAgdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVs
ZXRlZEFuZENsb3NlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3Mo
dGhpcyk7Ci0KICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOwotICAg
IE93blB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gdGFzayA9IERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVh
dGUodGhpcywgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCAmc3luY2hyb25pemVyKTsK
KyAgICBPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRhYmFzZUNsb3NlVGFzazo6
Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIpOwogCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNl
KCkpOwogICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKLQotICAgIC8v
IERhdGFiYXNlQ2xvc2VUYXNrIHRlbGxzIERhdGFiYXNlOjpjbG9zZSBub3QgdG8gZG8gdGhlc2Ug
dHdvIHJlbW92YWxzIHNvIHRoYXQgd2UgY2FuIGRvIHRoZW0gaGVyZSBzeW5jaHJvbm91c2x5Lgot
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwot
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsK
IH0KIAotY2xhc3MgQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2sgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNl
PiBkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgQ29udGV4dFJlbW92ZU9wZW5E
YXRhYmFzZVRhc2soZGF0YWJhc2UpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgY29u
dGV4dC0+cmVtb3ZlT3BlbkRhdGFiYXNlKG1fZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICBEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UobV9kYXRhYmFzZS5nZXQo
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRh
c2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCi0gICAgICAgIDogbV9kYXRhYmFzZShk
YXRhYmFzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNl
OwotfTsKLQotdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xvc2VQb2xpY3kgcG9saWN5KQordm9pZCBE
YXRhYmFzZTo6Y2xvc2UoKQogewotICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7
Ci0KICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgp
KTsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKyAgICAgICAg
bV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFsc2U7CisgICAgICAgIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzID0gZmFsc2U7CisgICAgfQorCiAgICAgY2xvc2VEYXRhYmFzZSgpOwogCiAg
ICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmRE
YXRhYmFzZUNsb3NlZCgpLgorICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7CiAg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRh
YmFzZUNsb3NlZCh0aGlzKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwotICAgIGlmIChwb2xpY3kg
PT0gUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKHRo
aXMpKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2Uo
dGhpcyk7CiB9CiAKIHZvaWQgRGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkoKQogewogICAgIERh
dGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoZGF0YWJhc2VUaHJlYWQgJiYgIWRhdGFiYXNlVGhy
ZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpKSB7Ci0gICAgICAgIHN0b3AoKTsKLSAgICAgICAg
ZGF0YWJhc2VUaHJlYWQtPnNjaGVkdWxlVGFzayhEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRo
aXMsIERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCAwKSk7Ci0gICAgfQotfQot
Ci12b2lkIERhdGFiYXNlOjpzdG9wKCkKLXsKLSAgICAvLyBGSVhNRTogVGhlIG5ldCBlZmZlY3Qg
b2YgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHRvIHJlbW92ZSBhbGwgcGVuZGluZyB0cmFuc2FjdGlv
bnMgYW5kIHN0YXRlbWVudHMsIGJ1dCBhbGxvdyB0aGUgY3VycmVudCBzdGF0ZW1lbnQKLSAgICAv
LyB0byBydW4gdG8gY29tcGxldGlvbi4gIEluIHRoZSBmdXR1cmUgd2UgY2FuIHVzZSB0aGUgc3Fs
aXRlM19wcm9ncmVzc19oYW5kbGVyIG9yIHNxbGl0ZTNfaW50ZXJydXB0IGludGVyZmFjZXMgdG8g
Y2FuY2VsIHRoZSBjdXJyZW50Ci0gICAgLy8gc3RhdGVtZW50IGluIHJlc3BvbnNlIHRvIGNsb3Nl
KCksIGFzIHdlbGwuCi0KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBiZSB1c2VkIGFz
IGFuIGFuYWxvZyB0byBjYW5jZWxsaW5nIGEgbG9hZGVyLCBhbmQgaXMgdXNlZCB3aGVuIGEgZG9j
dW1lbnQgaXMgc2h1dCBkb3duIGFzIHRoZSByZXN1bHQgb2YKLSAgICAvLyBhIHBhZ2UgbG9hZCBv
ciBjbG9zaW5nIHRoZSBwYWdlCi0gICAgbV9zdG9wcGVkID0gdHJ1ZTsKLQotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwotICAg
ICAgICBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMp
OworICAgIGlmIChkYXRhYmFzZVRocmVhZCAmJiAhZGF0YWJhc2VUaHJlYWQtPnRlcm1pbmF0aW9u
UmVxdWVzdGVkKCkgJiYgb3BlbmVkKCkpCisgICAgICAgIGRhdGFiYXNlVGhyZWFkLT5zY2hlZHVs
ZUltbWVkaWF0ZVRhc2soRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzLCAwKSk7CiB9CiAK
IHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApAQCAtMjg5
LDIwICsyMzcsNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplCiAg
ICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFz
ZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpCi17Ci0g
ICAgLy8gRklYTUU6IENvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHdpbGwgbmVlZCB0byBi
ZSBydW4gdG8gZW5mb3JjZSB0aGUgcGVyLW9yaWdpbiBzaXplIGxpbWl0IHRoZSBzcGVjIG1hbmRh
dGVzLgotICAgIC8vIEFkZGl0aW9uYWxseSwgd2UgbWlnaHQgbmVlZCBhIHdheSB0byBwYXVzZSB0
aGUgZGF0YWJhc2UgdGhyZWFkIHdoaWxlIHRoZSBVQSBwcm9tcHRzIHRoZSB1c2VyIGZvciBwZXJt
aXNzaW9uIHRvCi0gICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgbGltaXQKLQotICAgIC8qCi0gICAg
aWYgKG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uSW5jcmVhc2VkU2l6ZSgpKQotICAg
ICAgICBEYXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlRmlsZVNpemVDaGVja09uTWFpblRocmVhZCh0
aGlzKTsKLSAgICAqLwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBEYXRhYmFz
ZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhj
ZXB0aW9uQ29kZSYgZSkKIHsKICAgICBpZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5B
bmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUpKSB7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAkocmV2aXNpb24gNjIyMjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNDAgKzcxLDM3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWxldGVkOyB9CiAKLSAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFz
ZUZyb21Db250ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07Ci0gICAgdm9pZCBjbG9z
ZShDbG9zZVBvbGljeSk7CisgICAgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZUltbWVkaWF0ZWx5KCk7CiAKLSAgICB2b2lkIHN0b3AoKTsKLSAgICBib29sIHN0b3BwZWQoKSBj
b25zdCB7IHJldHVybiBtX3N0b3BwZWQ7IH0KLQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRh
YmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBj
b25zdDsKIAotICAgIC8vIENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBh
cmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCBwZXJmb3JtUG9s
aWN5Q2hlY2tzKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBp
blByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNh
Y3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2Fj
dGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qLCBib29sIGltbWVkaWF0ZWx5ID0gZmFsc2UpOwogCi0g
ICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKLQogICAgIFNRTFRyYW5z
YWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKIAogICAgIHZv
aWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwogCiBwcml2YXRlOgorICAgIGNsYXNzIERh
dGFiYXNlT3BlblRhc2s7CisgICAgY2xhc3MgRGF0YWJhc2VDbG9zZVRhc2s7CisgICAgY2xhc3Mg
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7CisgICAgY2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFz
azsKKwogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAg
ICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdm9p
ZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJh
bnNhY3Rpb24oKTsKIAorICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7
CisKICAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKIAogICAg
IERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CkBAIC0x
MTUsNyArMTEyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0
YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKIAogICAgIGJvb2wgbV9kZWxldGVkOwotICAgIGJv
b2wgbV9zdG9wcGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlVGFzay5jcHAJKHJldmlzaW9uIDYyMjIzKQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgdm9pZCBEYXRh
YmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKIAogICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXpl
cigpOwogICAgIGRvUGVyZm9ybVRhc2soKTsKLSAgICBtX2RhdGFiYXNlLT5wZXJmb3JtUG9saWN5
Q2hlY2tzKCk7CiAKICAgICBpZiAobV9zeW5jaHJvbml6ZXIpCiAgICAgICAgIG1fc3luY2hyb25p
emVyLT50YXNrQ29tcGxldGVkKCk7CkBAIC04Nyw3ICs4Niw3IEBAIHZvaWQgRGF0YWJhc2VUYXNr
OjpwZXJmb3JtVGFzaygpCiAvLyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioKIC8vIE9wZW5zIHRo
ZSBkYXRhYmFzZSBmaWxlIGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBl
Y3RlZCB2ZXJzaW9uLgogCi1EYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFi
YXNlKiBkYXRhYmFzZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIGJvb2wmIHN1
Y2Nlc3MpCitEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRh
YmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBz
dWNjZXNzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6ZXIpCiAgICAg
LCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQogICAg
ICwgbV9jb2RlKGNvZGUpCkBAIC05NiwxMyArOTUsMTMgQEAgRGF0YWJhc2VPcGVuVGFzazo6RGF0
YWJhc2VPcGVuVGFzayhEYXRhYgogICAgIEFTU0VSVChzeW5jaHJvbml6ZXIpOyAvLyBBIHRhc2sg
d2l0aCBvdXRwdXQgcGFyYW1ldGVycyBpcyBzdXBwb3NlZCB0byBiZSBzeW5jaHJvbm91cy4KIH0K
IAotdm9pZCBEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKK3ZvaWQgRGF0YWJhc2U6
OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9ybVRhc2soKQogewogICAgIG1fc3VjY2VzcyA9IGRh
dGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IG1fY29kZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1jb25zdCBjaGFyKiBEYXRhYmFzZU9wZW5U
YXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKK2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFz
ZU9wZW5UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gIkRhdGFiYXNl
T3BlblRhc2siOwogfQpAQCAtMTExLDE5ICsxMTAsMTggQEAgY29uc3QgY2hhciogRGF0YWJhc2VP
cGVuVGFzazo6ZGVidWdUYXNrTgogLy8gKioqIERhdGFiYXNlQ2xvc2VUYXNrICoqKgogLy8gQ2xv
c2VzIHRoZSBkYXRhYmFzZS4KIAotRGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNr
KERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2U6OkNsb3NlUG9saWN5IGNsb3NlUG9saWN5LCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKK0RhdGFiYXNlOjpEYXRhYmFz
ZUNsb3NlVGFzazo6RGF0YWJhc2VDbG9zZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFz
ZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKICAgICA6IERhdGFiYXNlVGFzayhkYXRh
YmFzZSwgc3luY2hyb25pemVyKQotICAgICwgbV9jbG9zZVBvbGljeShjbG9zZVBvbGljeSkKIHsK
IH0KIAotdm9pZCBEYXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzaygpCit2b2lkIERhdGFi
YXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzaygpCiB7Ci0gICAgZGF0YWJhc2Uo
KS0+Y2xvc2UobV9jbG9zZVBvbGljeSk7CisgICAgZGF0YWJhc2UoKS0+Y2xvc2UoKTsKIH0KIAog
I2lmbmRlZiBOREVCVUcKLWNvbnN0IGNoYXIqIERhdGFiYXNlQ2xvc2VUYXNrOjpkZWJ1Z1Rhc2tO
YW1lKCkgY29uc3QKK2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZUNsb3NlVGFzazo6ZGVi
dWdUYXNrTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJEYXRhYmFzZUNsb3NlVGFzayI7CiB9
CkBAIC0xMzIsMjQgKzEzMCwyMCBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZUNsb3NlVGFzazo6ZGVi
dWdUYXNrCiAvLyAqKiogRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgKioqCiAvLyBTdGFydHMgYSB0
cmFuc2FjdGlvbiB0aGF0IHdpbGwgcmVwb3J0IGl0cyByZXN1bHRzIHZpYSBhIGNhbGxiYWNrLgog
Ci1EYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCitEYXRhYmFzZTo6RGF0YWJhc2VUcmFu
c2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uKQogICAgIDogRGF0YWJhc2VUYXNrKHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLCAwKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKIHsKIH0KIAotRGF0
YWJhc2VUcmFuc2FjdGlvblRhc2s6On5EYXRhYmFzZVRyYW5zYWN0aW9uVGFzaygpCi17Ci19Ci0K
LXZvaWQgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9ybVRhc2soKQordm9pZCBEYXRh
YmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9ybVRhc2soKQogewogICAgIGlm
IChtX3RyYW5zYWN0aW9uLT5wZXJmb3JtTmV4dFN0ZXAoKSkKICAgICAgICAgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS0+aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCi1jb25zdCBjaGFyKiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZGVidWdU
YXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiRGF0YWJhc2VUcmFu
c2FjdGlvblRhc2siOwogfQpAQCAtMTU4LDIwICsxNTIsMjAgQEAgY29uc3QgY2hhciogRGF0YWJh
c2VUcmFuc2FjdGlvblRhc2s6OmRlYgogLy8gKioqIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgKioq
CiAvLyBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIC0gZm9y
IFdlYkluc3BlY3RvciBzdXBwb3J0LgogCi1EYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKK0RhdGFiYXNlOjpEYXRh
YmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNlKiBkYXRh
YmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJp
bmc+JiBuYW1lcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVyKQog
ICAgICwgbV90YWJsZU5hbWVzKG5hbWVzKQogewogICAgIEFTU0VSVChzeW5jaHJvbml6ZXIpOyAv
LyBBIHRhc2sgd2l0aCBvdXRwdXQgcGFyYW1ldGVycyBpcyBzdXBwb3NlZCB0byBiZSBzeW5jaHJv
bm91cy4KIH0KIAotdm9pZCBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkb1BlcmZvcm1UYXNrKCkK
K3ZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmRvUGVyZm9ybVRhc2soKQog
ewogICAgIG1fdGFibGVOYW1lcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1jb25zdCBjaGFyKiBEYXRhYmFzZVRhYmxlTmFtZXNUYXNr
OjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKK2NvbnN0IGNoYXIqIERhdGFiYXNlOjpEYXRhYmFzZVRh
YmxlTmFtZXNUYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gIkRhdGFi
YXNlVGFibGVOYW1lc1Rhc2siOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFz
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAkocmV2aXNp
b24gNjIyMjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDYgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIERhdGFiYXNlVGFzayA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlOwogcHVibGlj
OgogICAgIHZpcnR1YWwgfkRhdGFiYXNlVGFzaygpOwogCkBAIC04MywxNSArODIsMTUgQEAgcHJp
dmF0ZToKICNlbmRpZgogfTsKIAotY2xhc3MgRGF0YWJhc2VPcGVuVGFzayA6IHB1YmxpYyBEYXRh
YmFzZVRhc2sgeworY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0
YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5U
YXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29k
ZSwgYm9vbCYgc3VjY2VzcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZTo6RGF0YWJh
c2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNv
ZGUmIGNvZGUsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERhdGFi
YXNlT3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNv
ZGUsIHN1Y2Nlc3MpOworICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlOjpEYXRhYmFzZU9wZW5U
YXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgc3luY2hyb25pemVyLCBjb2RlLCBzdWNj
ZXNzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSos
IGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplcios
IEV4Y2VwdGlvbkNvZGUmLCBib29sJiBzdWNjZXNzKTsKKyAgICBEYXRhYmFzZTo6RGF0YWJhc2VP
cGVuVGFzayhEYXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBib29sJiBzdWNjZXNzKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTAzLDM3
ICsxMDIsMzQgQEAgcHJpdmF0ZToKICAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwogCi1jbGFzcyBE
YXRhYmFzZUNsb3NlVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworY2xhc3MgRGF0YWJhc2U6
OkRhdGFiYXNlQ2xvc2VUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIs
IERhdGFiYXNlOjpDbG9zZVBvbGljeSBjbG9zZVBvbGljeSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIpCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZUNs
b3NlVGFzayhkYiwgY2xvc2VQb2xpY3ksIHN5bmNocm9uaXplcik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8RGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrKGRiLCBzeW5jaHJvbml6ZXIpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSosIERhdGFi
YXNlOjpDbG9zZVBvbGljeSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CisgICAgRGF0YWJh
c2U6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKICNlbmRpZgot
Ci0gICAgRGF0YWJhc2U6OkNsb3NlUG9saWN5IG1fY2xvc2VQb2xpY3k7CiB9OwogCi1jbGFzcyBE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworY2xhc3MgRGF0
YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBw
dWJsaWM6CiAgICAgLy8gVHJhbnNhY3Rpb24gdGFzayBpcyBuZXZlciBzeW5jaHJvbm91cywgc28g
bm8gJ3N5bmNocm9uaXplcicgcGFyYW1ldGVyLgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24p
CiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKHRyYW5z
YWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2sodHJhbnNhY3Rpb24pOwogICAgIH0KIAogICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAotICAgIHZpcnR1
YWwgfkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKCk7CiBwcml2YXRlOgotICAgIERhdGFiYXNlVHJh
bnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+KTsKKyAgICBEYXRhYmFzZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4pOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCkBAIC0xNDMs
MTUgKzEzOSwxNSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gbV90cmFu
c2FjdGlvbjsKIH07CiAKLWNsYXNzIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMgRGF0
YWJhc2VUYXNrIHsKK2NsYXNzIERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVi
bGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJh
c2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICBzdGF0aWMg
UGFzc093blB0cjxEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRlKERhdGFi
YXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxT
dHJpbmc+JiBuYW1lcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VUYWJsZU5h
bWVzVGFzayhkYiwgc3luY2hyb25pemVyLCBuYW1lcyk7CisgICAgICAgIHJldHVybiBuZXcgRGF0
YWJhc2U6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2soZGIsIHN5bmNocm9uaXplciwgbmFtZXMpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNlKiwg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgVmVjdG9yPFN0cmluZz4mIG5hbWVzKTsKKyAgICBE
YXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciosIFZlY3RvcjxTdHJpbmc+JiBuYW1lcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VGhyZWFkLmNwcAkocmV2aXNpb24gNjIyMjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
aHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTQgKzExMywxNCBAQCB2b2lkKiBEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1f
b3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9w
ZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9
IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgKCppdCkt
PmNsb3NlKERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0KTsKKyAgICAgICAgICAg
ICgqaXQpLT5jbG9zZSgpOwogICAgIH0KIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0
cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQog
ICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKIAogICAgIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwotICAgIAorCiAgICAgLy8gQ2xlYXIg
dGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4gZGVsZXRpb24KICAgICBtX3Nl
bGZSZWYgPSAwOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNp
b24gNjIyMjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA4LDggKzUwOCwxMCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3Bl
bkRhdGFiYXNlKEFiCiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQWRkZWQgb3BlbiBEYXRhYmFz
ZSAlcyAoJXApXG4iLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZSk7CiAKICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFN
YW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgaWYgKCFvcmlnaW5R
dW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpKQor
ICAgICAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihkYXRhYmFzZS0+
c2VjdXJpdHlPcmlnaW4oKSkpIHsKICAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnRy
YWNrT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAgICAgICAgIG9yaWdp
blF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBk
YXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLCBkYXRhYmFzZS0+ZmlsZU5hbWUoKSk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1
YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNjIyMjMp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIFNRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNhY3Rpb24oKQogCiB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7Ci0gICAgaWYgKCFtX2V4ZWN1dGVT
cWxBbGxvd2VkIHx8IG1fZGF0YWJhc2UtPnN0b3BwZWQoKSkgeworICAgIGlmICghbV9leGVjdXRl
U3FsQWxsb3dlZCB8fCAhbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKICAgICAgICAgZSA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IGNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0aW9uOjpkZWJ1Z1N0ZXBOYW0KIAogdm9pZCBTUUxUcmFu
c2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSgpCiB7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLT5zdG9wcGVkKCkpCisgICAgaWYgKG1fZGF0YWJhc2UtPm9wZW5lZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2FzIHN0b3BwZWQsIGRvbid0IGRv
IGFueXRoaW5nIGFuZCBjYW5jZWwgcXVldWVkIHdvcmsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMjIz
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTAtMDYtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5vciBjaGFu
Z2UgdG8gYSBEQiB0ZXN0IHRvIG1ha2UgaXQgcnVuIGNvcnJlY3RseSB3aXRoIHJ1bi13ZWJraXQt
dGVzdHMgLS1pdGVyYXRpb25zIE4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MTQwNAorCisgICAgICAgICogc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLmh0bWw6CisKIDIwMTAtMDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAg
PG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNw
ZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay5odG1s
CShyZXZpc2lvbiA2MjIyMykKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1j
cmVhdGlvbi1jYWxsYmFjay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBAIGZ1
bmN0aW9uIHJ1blRlc3QoKQogCiAgICAgLy8gT3BlbiBhIG5ldyBkYXRhYmFzZSB3aXRoIGEgY3Jl
YXRpb24gY2FsbGJhY2ssIGFuZCBtYWtlIHN1cmUgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGlzIHF1
ZXVlZAogICAgIHZhciBjcmVhdGlvbkNhbGxiYWNrQ2FsbGVkMSA9IGZhbHNlOwotICAgIHZhciBk
YjEgPSBvcGVuRGF0YWJhc2UoIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2sxIiwgIjEuMCIs
ICIiLCAxLAorICAgIHZhciBkYjFOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2sx
IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgdmFyIGRiMSA9IG9wZW5EYXRhYmFzZShk
YjFOYW1lLCAiMS4wIiwgIiIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bihkYikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2tD
YWxsZWQxID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGIudmVy
c2lvbiAhPSAiIikgewpAQCAtNTIsNyArNTMsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKICAgICAv
LyBhIG51bGwgaGFuZGxlIGFuZCB0aHJvdyBhIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4K
ICAgICB2YXIgZGIxRmFpbCA9IG51bGw7CiAgICAgdHJ5IHsKLSAgICAgICAgZGIxRmFpbCA9IG9w
ZW5EYXRhYmFzZSgiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiLCAiMS4wIiwgIiIsIDEp
OworICAgICAgICBkYjFGYWlsID0gb3BlbkRhdGFiYXNlKGRiMU5hbWUsICIxLjAiLCAiIiwgMSk7
CiAgICAgICAgIGxvZygiVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXhlY3V0
ZWQ7IGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBzaG91bGQndmUgYmVlbiB0aHJvd24u
Iik7CiAgICAgICAgIGZpbmlzaFRlc3QoKTsKICAgICB9IGNhdGNoKGVycikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60344</attachid>
            <date>2010-07-02 00:40:49 -0700</date>
            <delta_ts>2010-07-02 14:32:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25858</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjM2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDYtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEQiBjbGVhbiB1cC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQxNDA0CisKKyAgICAgICAgMS4gTWFkZSBhbGwgRGF0YWJhc2VUYXNrcyBpbnRlcm5h
bCBjbGFzc2VzIG9mIERhdGFiYXNlIGFuZCBtYWRlCisgICAgICAgICAgIHRoZSBEYXRhYmFzZSBt
ZXRob2RzIGNhbGxlZCBieSB0aG9zZSB0YXNrcyBwcml2YXRlLgorICAgICAgICAyLiBSZW1vdmVk
IHRoZSBEYXRhYmFzZTo6c3RvcHtlZH0oKSBtZXRob2RzLgorICAgICAgICAzLiBSZW1vdmVkIHRo
ZSBjb2RlIHRoYXQga2VwdCB0cmFjayBvZiBvcGVuIGRhdGFiYXNlcyBmcm9tCisgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKG5vIGxvbmdlciBuZWVkZWQpLgorICAgICAgICA0LiBN
YWRlIG1pbm9yIGNoYW5nZXMgdG8gRGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHkoKSB0byBtYWtl
IGl0CisgICAgICAgICAgIHBvc3NpYmxlIGZvciBEYXRhYmFzZVRocmVhZCB0byBjYWxsIHRoYXQg
bWV0aG9kIGluc3RlYWQgb2YKKyAgICAgICAgICAgY2xvc2UoKS4KKyAgICAgICAgNS4gTWlub3Ig
Zml4IHRvIERhdGFiYXNlVHJhY2tlcjogYWRkT3BlbkRhdGFiYXNlKCkgc2hvdWxkIGNhbGwKKyAg
ICAgICAgICAgT3JpZ2luUXVvdGFNYW5hZ2VyOjphZGREYXRhYmFzZSgpIGlmIHRoZSBvcmlnaW4g
cXVvdGEgbWFuYWdlcgorICAgICAgICAgICBpcyBub3QgdHJhY2tpbmcgdGhpcyBvcmlnaW4uCisg
ICAgICAgIDYuIFJlbW92ZWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKS4gV2UgYWxy
ZWFkeSB1cGRhdGUgdGhlCisgICAgICAgICAgIERCIHNpemUgYWZ0ZXIgZWFjaCB0cmFuc2FjdGlv
biwgYW5kIHdlIGVuZm9yY2UgYSBtYXggc2l6ZSBmb3IKKyAgICAgICAgICAgdGhlIERCIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgZWFjaCB0cmFuc2FjdGlvbi4KKworICAgICAgICAqIGRvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpoYXNPcGVu
RGF0YWJhc2VzKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjptYXJrQXNEZWxldGVk
QW5kQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFi
YXNlQ2xvc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZUNsb3Nl
VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJh
c2VDbG9zZVRhc2s6OmRlYnVnVGFza05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6
OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrOjpkZWJ1Z1Rhc2tOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpkZWJ1Z1Rh
c2tOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVu
RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UpOgorCiAyMDEw
LTA3LTAxICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQg
Zml4CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24g
NjIzNjgpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDM4ICsxMDksOSBAQCBEYXRhYmFzZVRocmVhZCogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VUaHJlYWQuZ2V0KCk7CiB9CiAKLXZv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRh
YmFzZSkKLXsKLSAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICghbV9vcGVu
RGF0YWJhc2VTZXQpCi0gICAgICAgIG1fb3BlbkRhdGFiYXNlU2V0LnNldChuZXcgRGF0YWJhc2VT
ZXQoKSk7Ci0KLSAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LT5jb250YWlucyhkYXRhYmFz
ZSkpOwotICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5hZGQoZGF0YWJhc2UpOwotfQotCi12b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJh
c2UpCi17Ci0gICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9vcGVu
RGF0YWJhc2VTZXQgJiYgbV9vcGVuRGF0YWJhc2VTZXQtPmNvbnRhaW5zKGRhdGFiYXNlKSk7Ci0g
ICAgaWYgKCFtX29wZW5EYXRhYmFzZVNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3BlbkRh
dGFiYXNlU2V0LT5yZW1vdmUoZGF0YWJhc2UpOwotfQotCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OnN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3lu
YykKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmIChtX29wZW5EYXRh
YmFzZVNldCkgewotICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgaSA9IG1fb3BlbkRhdGFi
YXNlU2V0LT5iZWdpbigpOwotICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZW5kID0gbV9v
cGVuRGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkgewot
ICAgICAgICAgICAgKCppKS0+c3RvcCgpOwotICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2VUaHJl
YWQpCi0gICAgICAgICAgICAgICAgbV9kYXRhYmFzZVRocmVhZC0+dW5zY2hlZHVsZURhdGFiYXNl
VGFza3MoKmkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGlmIChtX2RhdGFiYXNlVGhy
ZWFkKQogICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1ZXN0VGVybWluYXRpb24oY2xlYW51
cFN5bmMpOwogICAgIGVsc2UgaWYgKGNsZWFudXBTeW5jKQpJbmRleDogV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjIzNjgpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsK
ICAgICAgICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMg
PSB0cnVlOyB9CiAgICAgICAgIGJvb2wgaGFzT3BlbkRhdGFiYXNlcygpIGNvbnN0IHsgcmV0dXJu
IG1faGFzT3BlbkRhdGFiYXNlczsgfQotICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRh
YmFzZSopOwotICAgICAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwogICAg
ICAgICAvLyBXaGVuIHRoZSBkYXRhYmFzZSBjbGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdp
bGwgYmUgc2lnbmFsbGVkLgogICAgICAgICB2b2lkIHN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKik7CiAjZW5kaWYKQEAgLTE2MCw4ICsxNTgsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBSZWZQdHI8RGF0YWJhc2VUaHJl
YWQ+IG1fZGF0YWJhc2VUaHJlYWQ7CiAgICAgICAgIGJvb2wgbV9oYXNPcGVuRGF0YWJhc2VzOyAv
LyBUaGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0byBmYWxzZSwgZXZlbiBhZnRlciB0aGUgZGF0YWJh
c2UgdGhyZWFkIGlzIGNsb3NlZC4KLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlKiA+
IERhdGFiYXNlU2V0OwotICAgICAgICBPd25QdHI8RGF0YWJhc2VTZXQ+IG1fb3BlbkRhdGFiYXNl
U2V0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dS
SVRFUikKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjIzNjgpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw2IEBAIFBh
c3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWIKIAogICAgIGlmICghZGF0YWJh
c2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxiYWNrLCBlKSkgewogICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBvcGVuIGFuZCB2ZXJpZnkgdmVyc2lvbiAoZXhw
ZWN0ZWQgJXMpIG9mIGRhdGFiYXNlICVzIiwgZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZS0+ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IGNvbnRleHQtPnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQo
KSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTEzMywxNCArMTMyLDExIEBAIERhdGFi
YXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICAsIG1fdHJhbnNhY3Rpb25J
blByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUp
CiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi0gICAgLCBtX3N0b3BwZWQoZmFsc2UpCiB7CiAgICAg
bV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlP
cmlnaW4tPnRocmVhZHNhZmVDb3B5KCk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFs
aXplVGhyZWFkaW5nKCk7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0
YWJhc2VUaHJlYWQoKSk7Ci0KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE9wZW5E
YXRhYmFzZSh0aGlzKTsKIH0KIAogY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTIwMiw4NiArMTk4LDM4IEBAIHZvaWQgRGF0
YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1
bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwotCiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5
bmNocm9uaXplcjsKLSAgICBPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRhYmFz
ZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsIERvTm90UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwg
JnN5bmNocm9uaXplcik7CisgICAgT3duUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiB0YXNrID0gRGF0
YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyKTsKIAogICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVU
YXNrKHRhc2sucmVsZWFzZSgpKTsKICAgICBzeW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0
aW9uKCk7Ci0KLSAgICAvLyBEYXRhYmFzZUNsb3NlVGFzayB0ZWxscyBEYXRhYmFzZTo6Y2xvc2Ug
bm90IHRvIGRvIHRoZXNlIHR3byByZW1vdmFscyBzbyB0aGF0IHdlIGNhbiBkbyB0aGVtIGhlcmUg
c3luY2hyb25vdXNseS4KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlbW92ZU9wZW5E
YXRhYmFzZSh0aGlzKTsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVu
RGF0YWJhc2UodGhpcyk7CiB9CiAKLWNsYXNzIENvbnRleHRSZW1vdmVPcGVuRGF0YWJhc2VUYXNr
IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENvbnRleHRSZW1vdmVPcGVuRGF0YWJhc2VUYXNrPiBjcmVhdGUoUGFz
c1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IENv
bnRleHRSZW1vdmVPcGVuRGF0YWJhc2VUYXNrKGRhdGFiYXNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAg
ICB7Ci0gICAgICAgIGNvbnRleHQtPnJlbW92ZU9wZW5EYXRhYmFzZShtX2RhdGFiYXNlLmdldCgp
KTsKLSAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNl
KG1fZGF0YWJhc2UuZ2V0KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0NsZWFudXBU
YXNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIENvbnRleHRSZW1v
dmVPcGVuRGF0YWJhc2VUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQotICAgICAg
ICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxEYXRh
YmFzZT4gbV9kYXRhYmFzZTsKLX07Ci0KLXZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5
IHBvbGljeSkKK3ZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKIHsKLSAgICBSZWZQdHI8RGF0YWJhc2U+
IHByb3RlY3QgPSB0aGlzOwotCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwogCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NN
dXRleCk7CisgICAgICAgIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCA9IGZhbHNlOworICAg
ICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIH0KKwogICAgIGNsb3Nl
RGF0YWJhc2UoKTsKIAogICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VU
aHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KKyAgICBSZWZQdHI8RGF0YWJhc2U+IHBy
b3RlY3QgPSB0aGlzOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJl
YWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsK
LSAgICBpZiAocG9saWN5ID09IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpCi0gICAgICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFz
ZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVt
b3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0
ZWx5KCkKIHsKICAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGRhdGFiYXNlVGhyZWFk
ICYmICFkYXRhYmFzZVRocmVhZC0+dGVybWluYXRpb25SZXF1ZXN0ZWQoKSkgewotICAgICAgICBz
dG9wKCk7Ci0gICAgICAgIGRhdGFiYXNlVGhyZWFkLT5zY2hlZHVsZVRhc2soRGF0YWJhc2VDbG9z
ZVRhc2s6OmNyZWF0ZSh0aGlzLCBEYXRhYmFzZTo6UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwg
MCkpOwotICAgIH0KLX0KLQotdm9pZCBEYXRhYmFzZTo6c3RvcCgpCi17Ci0gICAgLy8gRklYTUU6
IFRoZSBuZXQgZWZmZWN0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyB0byByZW1vdmUgYWxsIHBl
bmRpbmcgdHJhbnNhY3Rpb25zIGFuZCBzdGF0ZW1lbnRzLCBidXQgYWxsb3cgdGhlIGN1cnJlbnQg
c3RhdGVtZW50Ci0gICAgLy8gdG8gcnVuIHRvIGNvbXBsZXRpb24uICBJbiB0aGUgZnV0dXJlIHdl
IGNhbiB1c2UgdGhlIHNxbGl0ZTNfcHJvZ3Jlc3NfaGFuZGxlciBvciBzcWxpdGUzX2ludGVycnVw
dCBpbnRlcmZhY2VzIHRvIGNhbmNlbCB0aGUgY3VycmVudAotICAgIC8vIHN0YXRlbWVudCBpbiBy
ZXNwb25zZSB0byBjbG9zZSgpLCBhcyB3ZWxsLgotCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgbWVh
bnQgdG8gYmUgdXNlZCBhcyBhbiBhbmFsb2cgdG8gY2FuY2VsbGluZyBhIGxvYWRlciwgYW5kIGlz
IHVzZWQgd2hlbiBhIGRvY3VtZW50IGlzIHNodXQgZG93biBhcyB0aGUgcmVzdWx0IG9mCi0gICAg
Ly8gYSBwYWdlIGxvYWQgb3IgY2xvc2luZyB0aGUgcGFnZQotICAgIG1fc3RvcHBlZCA9IHRydWU7
Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzc011dGV4KTsKLSAgICAgICAgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFsc2U7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0
YWJhc2VUYXNrcyh0aGlzKTsKKyAgICBpZiAoZGF0YWJhc2VUaHJlYWQgJiYgIWRhdGFiYXNlVGhy
ZWFkLT50ZXJtaW5hdGlvblJlcXVlc3RlZCgpICYmIG9wZW5lZCgpKQorICAgICAgICBkYXRhYmFz
ZVRocmVhZC0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUo
dGhpcywgMCkpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXpl
KCkgY29uc3QKQEAgLTI4OSwyMCArMjM3LDYgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
OjptYXhpbXVtU2l6ZQogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRN
YXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xp
Y3lDaGVja3MoKQotewotICAgIC8vIEZJWE1FOiBDb2RlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2lu
ZyB3aWxsIG5lZWQgdG8gYmUgcnVuIHRvIGVuZm9yY2UgdGhlIHBlci1vcmlnaW4gc2l6ZSBsaW1p
dCB0aGUgc3BlYyBtYW5kYXRlcy4KLSAgICAvLyBBZGRpdGlvbmFsbHksIHdlIG1pZ2h0IG5lZWQg
YSB3YXkgdG8gcGF1c2UgdGhlIGRhdGFiYXNlIHRocmVhZCB3aGlsZSB0aGUgVUEgcHJvbXB0cyB0
aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0bwotICAgIC8vIGluY3JlYXNlIHRoZSBzaXplIGxpbWl0
Ci0KLSAgICAvKgotICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkluY3Jl
YXNlZFNpemUoKSkKLSAgICAgICAgRGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZUZpbGVTaXplQ2hl
Y2tPbk1haW5UaHJlYWQodGhpcyk7Ci0gICAgKi8KLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KIGJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKEFic3RyYWN0RGF0YWJh
c2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlKSkgewpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYyMzY4KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDQwICs3MSwzNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCi0gICAgZW51bSBDbG9zZVBvbGljeSB7IERv
Tm90UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwgUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCB9
OwotICAgIHZvaWQgY2xvc2UoQ2xvc2VQb2xpY3kpOworICAgIHZvaWQgY2xvc2UoKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpOwogCi0gICAgdm9pZCBzdG9wKCk7Ci0gICAg
Ym9vbCBzdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9Ci0KICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbG9uZyBsb25n
IG1heGltdW1TaXplKCkgY29uc3Q7CiAKLSAgICAvLyBDYWxsZWQgZnJvbSBEYXRhYmFzZVRocmVh
ZCwgbXVzdCBiZSBwcmVwYXJlZCB0byB3b3JrIG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZAotICAg
IHZvaWQgcGVyZm9ybVBvbGljeUNoZWNrcygpOwotCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm1P
cGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgdm9p
ZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICB2b2lk
IHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBpbW1lZGlhdGVs
eSA9IGZhbHNlKTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7
Ci0KICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsK
ICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKIAogcHJpdmF0
ZToKKyAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOworICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VU
YXNrOworICAgIGNsYXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOworICAgIGNsYXNzIERhdGFi
YXNlVGFibGVOYW1lc1Rhc2s7CisKICAgICBEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpOwogCiAgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBib29sIHBlcmZv
cm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAorICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAg
dm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3Jt
R2V0VGFibGVOYW1lcygpOworCiAgICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFj
ayh2b2lkKik7CiAKICAgICBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2Fj
dGlvblF1ZXVlOwpAQCAtMTE1LDcgKzExMiw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47CiAKICAgICBib29sIG1f
ZGVsZXRlZDsKLSAgICBib29sIG1fc3RvcHBlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCShyZXZpc2lvbiA2MjM2OCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3
OCw2IEBAIHZvaWQgRGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCiAKICAgICBtX2RhdGFiYXNl
LT5yZXNldEF1dGhvcml6ZXIoKTsKICAgICBkb1BlcmZvcm1UYXNrKCk7Ci0gICAgbV9kYXRhYmFz
ZS0+cGVyZm9ybVBvbGljeUNoZWNrcygpOwogCiAgICAgaWYgKG1fc3luY2hyb25pemVyKQogICAg
ICAgICBtX3N5bmNocm9uaXplci0+dGFza0NvbXBsZXRlZCgpOwpAQCAtODcsNyArODYsNyBAQCB2
b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERhdGFiYXNlT3BlblRhc2sg
KioqCiAvLyBPcGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZlcnNpb24g
bWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJh
c2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2Rl
JiBjb2RlLCBib29sJiBzdWNjZXNzKQorRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFi
YXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29k
ZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3lu
Y2hyb25pemVyKQogICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSkKICAgICAsIG1fY29kZShjb2RlKQpAQCAtOTYsMTMgKzk1LDEzIEBAIERhdGFi
YXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWIKICAgICBBU1NFUlQoc3luY2hyb25p
emVyKTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3VwcG9zZWQgdG8gYmUg
c3luY2hyb25vdXMuCiB9CiAKLXZvaWQgRGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzaygp
Cit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsKICAg
ICBtX3N1Y2Nlc3MgPSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBtX2NvZGUpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hh
ciogRGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBE
YXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuICJEYXRhYmFzZU9wZW5UYXNrIjsKIH0KQEAgLTExMSwxOSArMTEwLDE4IEBAIGNvbnN0
IGNoYXIqIERhdGFiYXNlT3BlblRhc2s6OmRlYnVnVGFza04KIC8vICoqKiBEYXRhYmFzZUNsb3Nl
VGFzayAqKioKIC8vIENsb3NlcyB0aGUgZGF0YWJhc2UuCiAKLURhdGFiYXNlQ2xvc2VUYXNrOjpE
YXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlOjpDbG9zZVBvbGlj
eSBjbG9zZVBvbGljeSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCitE
YXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBk
YXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiAgICAgOiBE
YXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKLSAgICAsIG1fY2xvc2VQb2xpY3ko
Y2xvc2VQb2xpY3kpCiB7CiB9CiAKLXZvaWQgRGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRh
c2soKQordm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmRvUGVyZm9ybVRhc2soKQog
ewotICAgIGRhdGFiYXNlKCktPmNsb3NlKG1fY2xvc2VQb2xpY3kpOworICAgIGRhdGFiYXNlKCkt
PmNsb3NlKCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1jb25zdCBjaGFyKiBEYXRhYmFzZUNsb3Nl
VGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRhYmFzZTo6RGF0YWJh
c2VDbG9zZVRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiRGF0YWJh
c2VDbG9zZVRhc2siOwogfQpAQCAtMTMyLDI0ICsxMzAsMjAgQEAgY29uc3QgY2hhciogRGF0YWJh
c2VDbG9zZVRhc2s6OmRlYnVnVGFzawogLy8gKioqIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICoq
KgogLy8gU3RhcnRzIGEgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIHJlcG9ydCBpdHMgcmVzdWx0cyB2
aWEgYSBjYWxsYmFjay4KIAotRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKQorRGF0YWJh
c2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayhQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKICAgICA6IERhdGFiYXNlVGFzayh0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSwgMCkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pCiB7CiB9CiAKLURhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjp+RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2soKQotewotfQotCi12b2lkIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1U
YXNrKCkKK3ZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1U
YXNrKCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbi0+cGVyZm9ybU5leHRTdGVwKCkpCiAgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBs
ZXRlZCgpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hhciogRGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2s6OmRlYnVnVGFza05hbWUoKSBjb25zdAorY29uc3QgY2hhciogRGF0YWJhc2U6OkRh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gIkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIjsKIH0KQEAgLTE1OCwyMCArMTUyLDIwIEBAIGNv
bnN0IGNoYXIqIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkZWIKIC8vICoqKiBEYXRhYmFzZVRh
YmxlTmFtZXNUYXNrICoqKgogLy8gUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgdGFibGVzIGluIHRo
ZSBkYXRhYmFzZSAtIGZvciBXZWJJbnNwZWN0b3Igc3VwcG9ydC4KIAotRGF0YWJhc2VUYWJsZU5h
bWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMp
CitEYXRhYmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFz
ayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25p
emVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCiAgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2Us
IHN5bmNocm9uaXplcikKICAgICAsIG1fdGFibGVOYW1lcyhuYW1lcykKIHsKICAgICBBU1NFUlQo
c3luY2hyb25pemVyKTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3VwcG9z
ZWQgdG8gYmUgc3luY2hyb25vdXMuCiB9CiAKLXZvaWQgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6
ZG9QZXJmb3JtVGFzaygpCit2b2lkIERhdGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpk
b1BlcmZvcm1UYXNrKCkKIHsKICAgICBtX3RhYmxlTmFtZXMgPSBkYXRhYmFzZSgpLT5wZXJmb3Jt
R2V0VGFibGVOYW1lcygpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotY29uc3QgY2hhciogRGF0YWJh
c2VUYWJsZU5hbWVzVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBEYXRh
YmFzZTo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICJEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIjsKIH0KSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUYXNrLmgJKHJldmlzaW9uIDYyMzY4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFz
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIHByaXZhdGU6CiB9OwogCiBjbGFz
cyBEYXRhYmFzZVRhc2sgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIGZyaWVuZCBjbGFzcyBE
YXRhYmFzZTsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZVRhc2soKTsKIApAQCAtODMs
MTEgKzgyLDExIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLWNsYXNzIERhdGFiYXNlT3BlblRh
c2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK2NsYXNzIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5U
YXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4
Y2VwdGlvbkNvZGUmIGNvZGUsIGJvb2wmIHN1Y2Nlc3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIGJvb2wgc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25p
emVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwg
c3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFz
ZTo6RGF0YWJhc2VPcGVuVGFzayhkYiwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIHN5bmNocm9u
aXplciwgY29kZSwgc3VjY2Vzcyk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTAzLDM1ICsxMDIs
MzIgQEAgcHJpdmF0ZToKICAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwogCi1jbGFzcyBEYXRhYmFz
ZUNsb3NlVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgeworY2xhc3MgRGF0YWJhc2U6OkRhdGFi
YXNlQ2xvc2VUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFi
YXNlOjpDbG9zZVBvbGljeSBjbG9zZVBvbGljeSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBz
eW5jaHJvbml6ZXIpCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZUNsb3NlVGFz
ayhkYiwgY2xvc2VQb2xpY3ksIHN5bmNocm9uaXplcik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
RGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFz
ZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplcikKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgRGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrKGRiLCBzeW5jaHJvbml6ZXIpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSosIERhdGFiYXNlOjpD
bG9zZVBvbGljeSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CisgICAgRGF0YWJhc2VDbG9z
ZVRhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0OwogI2VuZGlmCi0KLSAgICBEYXRhYmFzZTo6
Q2xvc2VQb2xpY3kgbV9jbG9zZVBvbGljeTsKIH07CiAKLWNsYXNzIERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CitjbGFzcyBEYXRhYmFzZTo6RGF0YWJhc2VU
cmFuc2FjdGlvblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKICAgICAvLyBU
cmFuc2FjdGlvbiB0YXNrIGlzIG5ldmVyIHN5bmNocm9ub3VzLCBzbyBubyAnc3luY2hyb25pemVy
JyBwYXJhbWV0ZXIuCi0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKKyAgICBz
dGF0aWMgUGFzc093blB0cjxEYXRhYmFzZTo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IGNyZWF0
ZShQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sodHJhbnNhY3Rpb24pOworICAgICAg
ICByZXR1cm4gbmV3IERhdGFiYXNlOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayh0cmFuc2FjdGlv
bik7CiAgICAgfQogCiAgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCi0gICAgdmlydHVhbCB+RGF0YWJhc2VUcmFu
c2FjdGlvblRhc2soKTsKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4pOwogCkBAIC0xNDMsMTEgKzEzOSwxMSBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKIH07CiAKLWNsYXNz
IERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKK2NsYXNzIERh
dGFiYXNlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3Jl
YXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIs
IFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZTo6
RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VUYWJsZU5hbWVzVGFzayhkYiwgc3luY2hyb25p
emVyLCBuYW1lcyk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2U6OkRhdGFiYXNlVGFibGVO
YW1lc1Rhc2soZGIsIHN5bmNocm9uaXplciwgbmFtZXMpOwogICAgIH0KIAogcHJpdmF0ZToKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkocmV2aXNpb24gNjIzNjgpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTQg
KzExMywxNCBAQCB2b2lkKiBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAg
ICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAgRGF0YWJhc2VT
ZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBmb3IgKERhdGFi
YXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgKCppdCktPmNsb3NlKERhdGFiYXNlOjpSZW1vdmVEYXRhYmFzZUZyb21D
b250ZXh0KTsKKyAgICAgICAgICAgICgqaXQpLT5jbG9zZSgpOwogICAgIH0KIAogICAgIC8vIERl
dGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29u
Y2VybiB0byBhbnlvbmUgZWxzZQogICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKIAogICAg
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwot
ICAgIAorCiAgICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcg
aW4gZGVsZXRpb24KICAgICBtX3NlbGZSZWYgPSAwOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUcmFja2VyLmNwcAkocmV2aXNpb24gNjIzNjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDggKzUwOCwxMCBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFiCiAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiQWRkZWQgb3BlbiBEYXRhYmFzZSAlcyAoJXApXG4iLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRp
ZmllcigpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZSk7CiAKICAgICAgICAgTG9ja2VyPE9yaWdp
blF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsK
LSAgICAgICAgaWYgKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4oZGF0YWJhc2Ut
PnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRy
YWNrc09yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKICAgICAgICAgICAgIG9y
aWdpblF1b3RhTWFuYWdlcigpLnRyYWNrT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigp
KTsKKyAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKGRhdGFiYXNl
LT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLCBkYXRhYmFz
ZS0+ZmlsZU5hbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBNdXRleExvY2tlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmNwcAkocmV2aXNpb24gNjIzNjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFNRTFRyYW5zYWN0aW9uOjp+U1FM
VHJhbnNhY3Rpb24oKQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0
cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBh
c3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7
Ci0gICAgaWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2VkIHx8IG1fZGF0YWJhc2UtPnN0b3BwZWQoKSkg
eworICAgIGlmICghbV9leGVjdXRlU3FsQWxsb3dlZCB8fCAhbV9kYXRhYmFzZS0+b3BlbmVkKCkp
IHsKICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0aW9uOjpkZWJ1Z1N0
ZXBOYW0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFz
ZSgpCiB7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5zdG9wcGVkKCkpCisgICAgaWYgKG1fZGF0YWJh
c2UtPm9wZW5lZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ug
d2FzIHN0b3BwZWQsIGRvbid0IGRvIGFueXRoaW5nIGFuZCBjYW5jZWwgcXVldWVkIHdvcmsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYyMzY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxk
dW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNaW5vciBjaGFuZ2UgdG8gYSBEQiB0ZXN0IHRvIG1ha2UgaXQgcnVuIGNvcnJl
Y3RseSB3aXRoIHJ1bi13ZWJraXQtdGVzdHMgLS1pdGVyYXRpb25zIE4uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQwNAorCisgICAgICAgICogc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLmh0bWw6CisKIDIwMTAtMDctMDEg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLmh0bWwJKHJldmlzaW9u
IDYyMzY4KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNh
bGxiYWNrLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAgZnVuY3Rpb24gcnVu
VGVzdCgpCiAKICAgICAvLyBPcGVuIGEgbmV3IGRhdGFiYXNlIHdpdGggYSBjcmVhdGlvbiBjYWxs
YmFjaywgYW5kIG1ha2Ugc3VyZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgaXMgcXVldWVkCiAgICAg
dmFyIGNyZWF0aW9uQ2FsbGJhY2tDYWxsZWQxID0gZmFsc2U7Ci0gICAgdmFyIGRiMSA9IG9wZW5E
YXRhYmFzZSgiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiLCAiMS4wIiwgIiIsIDEsCisg
ICAgdmFyIGRiMU5hbWUgPSAiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiICsgKG5ldyBE
YXRlKCkpLmdldFRpbWUoKTsKKyAgICB2YXIgZGIxID0gb3BlbkRhdGFiYXNlKGRiMU5hbWUsICIx
LjAiLCAiIiwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25DYWxsYmFja0NhbGxlZDEgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi52ZXJzaW9uICE9ICIi
KSB7CkBAIC01Miw3ICs1Myw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgIC8vIGEgbnVsbCBo
YW5kbGUgYW5kIHRocm93IGEgSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uLgogICAgIHZhciBk
YjFGYWlsID0gbnVsbDsKICAgICB0cnkgewotICAgICAgICBkYjFGYWlsID0gb3BlbkRhdGFiYXNl
KCJPcGVuRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrMSIsICIxLjAiLCAiIiwgMSk7CisgICAgICAg
IGRiMUZhaWwgPSBvcGVuRGF0YWJhc2UoZGIxTmFtZSwgIjEuMCIsICIiLCAxKTsKICAgICAgICAg
bG9nKCJUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGhhdmUgYmVlbiBleGVjdXRlZDsgYW4gSU5W
QUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsKICAgICAg
ICAgZmluaXNoVGVzdCgpOwogICAgIH0gY2F0Y2goZXJyKSB7Cg==
</data>
<flag name="review"
          id="47781"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="47782"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>