<?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>161426</bug_id>
          
          <creation_ts>2016-08-30 22:33:18 -0700</creation_ts>
          <short_desc>Avoid using strong reference in JSDOMPromise’s DeferredWrapper</short_desc>
          <delta_ts>2016-08-31 12:41:16 -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>Bindings</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161425</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224872</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-30 22:33:18 -0700</bug_when>
    <thetext>Avoid using JSC::Strong in DeferredWrapper.
This is needed to add “whenDefined” to CustomElementRegistry
which needs to keep the promise until the global object goes away in some cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224873</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-08-30 22:34:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/28091123&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224879</commentid>
    <comment_count>2</comment_count>
      <attachid>287488</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-30 23:10:20 -0700</bug_when>
    <thetext>Created attachment 287488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224890</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-08-30 23:29:28 -0700</bug_when>
    <thetext>Can you rebase to ToT please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224891</commentid>
    <comment_count>4</comment_count>
      <attachid>287494</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-30 23:30:18 -0700</bug_when>
    <thetext>Created attachment 287494
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224895</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-30 23:33:00 -0700</bug_when>
    <thetext>Attachment 287494 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMGlobalObject.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224899</commentid>
    <comment_count>6</comment_count>
      <attachid>287496</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-31 00:03:33 -0700</bug_when>
    <thetext>Created attachment 287496
CMake build fix attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224900</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-31 00:05:12 -0700</bug_when>
    <thetext>Attachment 287496 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMGlobalObject.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224973</commentid>
    <comment_count>8</comment_count>
      <attachid>287496</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-31 09:40:09 -0700</bug_when>
    <thetext>Comment on attachment 287496
CMake build fix attempt

View in context: https://bugs.webkit.org/attachment.cgi?id=287496&amp;action=review

r=me

&gt; Source/WebCore/Modules/applepay/ApplePaySession.cpp:736
&gt; +void ApplePaySession::canMakePaymentsWithActiveCard(ScriptExecutionContext&amp; scriptExecutionContext, const String&amp; merchantIdentifier, Ref&lt;DeferredWrapper&gt;&amp;&amp; pasesdPromise, ExceptionCode&amp; ec)

passedPromise?

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:176
&gt; +        deferredWrapper-&gt;visitDeferred(visitor);

We call functions like this &quot;visitAggregate&quot;. I&apos;m not sure I love that name, but let&apos;s use it to be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225009</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-31 11:38:47 -0700</bug_when>
    <thetext>Committed r205257: &lt;http://trac.webkit.org/changeset/205257&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225036</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-31 12:41:16 -0700</bug_when>
    <thetext>Rebaselined binding tests in https://trac.webkit.org/changeset/205262.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287488</attachid>
            <date>2016-08-30 23:10:20 -0700</date>
            <delta_ts>2016-08-30 23:30:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161426-20160830230809.patch</filename>
            <type>text/plain</type>
            <size>59724</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAxNi0wOC0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBdm9pZCB1c2luZyBzdHJvbmcg
cmVmZXJlbmNlIGluIEpTRE9NUHJvbWlzZeKAmXMgRGVmZXJyZWRXcmFwcGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MjYKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI4MDkxMTIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgSlNDOjpTdHJvbmcgaW4gRGVmZXJyZWRXcmFwcGVyIGJ5
IEpTQzo6V2VhaywgYW5kIG1ha2UgdGhlIGdsb2JhbCBvYmplY3Qgb3duIEpTUHJvbWlzZURlZmVy
cmVkLgorCisgICAgICAgIERlZmVycmVkV3JhcHBlciBhZGRzIGl0c2VsZiB0byBKU0RPTUdsb2Jh
bE9iamVjdCdzIG5ld2x5IGFkZGVkIEhhc2hTZXQgd2hlbiBpdCdzIGNyZWF0ZWQgYW5kIGNsZWFy
cyBpdHNlbGYKKyAgICAgICAgZnJvbSB0aGUgSGFzaFNldCBpbnNpZGUgaXRzIGRlc3RydWN0b3Ig
YXMgd2VsbCBhcyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAg
ICAgICBUaGlzIGlzIHNvIHRoYXQgSlNET01HbG9iYWxPYmplY3QncyB2aXNpdENoaWxkcmVuIGNh
biB2aXNpdCBldmVyeSBsaXZlIERlZmVycmVkV3JhcHBlci4KKworICAgICAgICBCZWNhdXNlIHRo
aXMgb3BlcmF0aW9uIGlzIHJhdGhlciBleHBlbnNlLCB0aGlzIHBhdGNoIHR1cm5zIERlZmVycmVk
V3JhcHBlciBpbnRvIGEgUmVmQ291bnRlZCBvYmplY3QgdG8gYXZvaWQKKyAgICAgICAgSGFzaE1h
cCBjaHVybnMuIE1vc3Qgb2YgY29kZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggaXMgZHVlIHRvIHRo
aXMgdHlwZSBjaGFuZ2UsIGFuZCB0aGUgZmFjdCBsYW1iZGEgY2Fubm90CisgICAgICAgIGNhcHR1
cmUgUmVmPERlZmVycmVkV3JhcHBlcj4gc2luY2UgaXRzIGNvcHkgY29uc3RydWN0b3IgZG9lc24n
dCBleGlzdC4KKworICAgICAgICBXZSBhbHNvIGNyZWF0ZSBhIHdyaXRlIGJhcnJpZXIgZnJvbSB0
aGUgZ2xvYmFsIG9iamVjdCB0byBKU1Byb21pc2VEZWZlcnJlZCBzbyB0aGF0IHRoZXkgd29uJ3Qg
YmUgY29sbGVjdGVkCisgICAgICAgIGR1cmluZyBhbiBlZGVuIGNvbGxlY3Rpb24gd2hlbiBpdCBo
YXBwZW5zIGJlZm9yZSBKU0RPTUdsb2JhbE9iamVjdCdzIHZpc2l0Q2hpbGRyZW4gaXMgaW52b2tl
ZC4KKworICAgICAgICBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGVudGlyZSBET00g
d3JhcHBlciB3b3JsZCBvZiB0aGUgcHJvbWlzZSB0byBnbyBhd2F5IGJlZm9yZSB0aGUgcHJvbWlz
ZSBpcworICAgICAgICByZXNvbHZlZCBvciByZWplY3RlZCBieSBhIHJlZi1jb3VudGVkIEMrKyBv
YmplY3QuIEluIHRoaXMgY2FzZSwgbV9kZWZlcnJlZCBhbmQgbV9nbG9iYWxPYmplY3QgYmVjb21l
IGRlYWQuCisgICAgICAgIFZhcmlvdXMgbWVtYmVyIHJlc29sdmUqIGFuZCByZWplY3QgZnVuY3Rp
b25zIG9mIERlZmVycmVkV3JhcHBlciBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gY2hlY2sgdGhpcyBj
b25kaXRpb24uCisKKyAgICAgICAgQmVjYXVzZSBKU0RPTUdsb2JhbE9iamVjdCBjYW4gYmUgZmlu
YWxpemVkIGJlZm9yZSBEZWZlcnJlZFdyYXBwZXIgaXMgZmluYWxpemVkLiBEZWZlcnJlZFdyYXBw
ZXIncyBkZXN0cnVjdG9yLAorICAgICAgICB3aGljaCBjYWxscyBEZWZlcnJlZFdyYXBwZXI6OmNs
ZWFyLCBzaG91bGQgb25seSByZW1vdmUgaXRzZWxmIGZyb20gbV9nbG9iYWxPYmplY3Qgd2hlbiBt
X2dsb2JhbE9iamVjdCBpcyBhbGl2ZS4KKworICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1h
a2VzIERlZmVycmVkV3JhcHBlciBpbmhlcml0IGZyb20gQWN0aXZlRE9NQ2FsbGJhY2sgc28gdGhh
dCBpdCB3b24ndCB0cnkgdG8gZXhlY3V0ZSBzY3JpcHRzCisgICAgICAgIHdoZW4gdGhlIGFjdGl2
ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkOyBlLmcuIGFmdGVyIGEgcGFnZSBuYXZp
Z2F0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8g
YXV0aG9yL3VzZXIgdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIE1vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxl
UGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQpOgorICAgICAgICAqIE1v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRj
aC9ET01XaW5kb3dGZXRjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dGZXRjaDo6
ZmV0Y2gpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6YmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6Ompzb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmV0Y2hCb2R5Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmNvbnN1bWVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6bG9h
ZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmxvYWRpbmdTdWNjZWVk
ZWQpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
Y2xlYW5Db25zdW1lUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHkpOiBVc2Ug
UmVmUHRyPERlZmVycmVkV3JhcHBlcj4gaW5zdGVhZCBvZiBPcHRpb25hbDxEZWZlcnJlZFdyYXBw
ZXI+IG5vdyB0aGF0IERlZmVycmVkV3JhcHBlcgorICAgICAgICBpcyByZWYgY291bnRlZC4gUGVy
aGFwcyB3ZSBjb3VsZCB1c2UgT3B0aW9uYWw8UmVmPERlZmVycmVkV3JhcHBlcj4+IGhlcmUgYnV0
IHRoYXQgc2VlbWVkIHJhdGhlciB2ZXJib3NlLgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5Q29uc3VtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Q29uc3VtZXI6
OnJlc29sdmVXaXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlDb25zdW1lcjo6
cmVzb2x2ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5oOgor
ICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5T3duZXI6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keU93bmVyOjpibG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keU93bmVyOjpm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6anNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6dGV4dCk6CisgICAgICAgICogTW9kdWxlcy9m
ZXRjaC9GZXRjaEJvZHlPd25lci5oOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNw
b25zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaFJlc3BvbnNlOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoUmVzcG9uc2U6OmZpbmlzaENvbnN1bWluZ1N0cmVhbSk6Cisg
ICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmg6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckdsb2JhbFNjb3BlRmV0Y2g6OmZldGNoKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL1dv
cmtlckdsb2JhbFNjb3BlRmV0Y2guaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2Jq
ZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbik6IEFkZGVkIHZpc2l0cyB0byBlYWNoIEpTUHJvbWlzZURlZmVycmVkIG93bmVkIGJ5
IHRoaXMgZ2xvYmFsIG9iamVjdC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmRlZmVycmVkV3Jh
cHBlcnMpOiBBZGRlZC4gVGhpcyBtYXAgaXMgb25seSB1c2VkIGJ5IEpTRE9NR2xvYmFsT2JqZWN0
J3MgdmlzaXRDaGlsZHJlbi4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpEZWZlcnJlZFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp+RGVmZXJyZWRXcmFwcGVyKTogQ2Fs
bHMgY2xlYXIuIFdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6
ZWQsCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgdGhlcmUg
aXMgbm8gbmVlZCB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuIFdoZW4g
bV9kZWZlcnJlZAorICAgICAgICBoYXMgYmVlbiBjbGVhcmVkLCBlaXRoZXIgY2xlYXIoKSBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCAoMSkgb3IgdGhlIGNhbGxiYWNrIGlzIGRlYWQgKDIpLiBTaW5j
ZSAoMikgaGFwcGVucyBvbmx5CisgICAgICAgIHdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaXRzZWxm
IGlzIGRlYWQgKGFzIGl0cyB2aXNpdENoaWxkcmVuIHdvdWxkIGhhdmUgdmlzaXRlZCBtX2RlZmVy
cmVkIG90aGVyd2lzZSksIGFnYWluLCB0aGVyZQorICAgICAgICBpcyBubyBuZWVkIHRvIHJlbW92
ZSBpdHNlbGYgZnJvbSBnbG9iYWwgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRX
cmFwcGVyOjpjbGVhcik6IEFkZGVkLiBDbGVhcnMgbV9kZWZlcnJlZCBhbmQgcmVtb3ZlcyBpdHNl
bGYgZnJvbSBKU0RPTUdsb2JhbE9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3Jh
cHBlcjo6Y29udGV4dERlc3Ryb3llZCk6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaGFzIGJlZW4g
ZGVzdHJveWVkLiBXZSBtdXN0IGNhbGwgY2xlYXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkV3JhcHBlcjo6Y2FsbEZ1bmN0aW9uKTogQ2hlY2sgY2FuSW52b2tlQ2FsbGJhY2sgaW4gQWN0
aXZlRE9NQ2FsbGJhY2suCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRydWUuIFNlZSBiZWxvdy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZnVsZmlsbFByb21pc2VXaXRoSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpm
dWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjppc1N1c3BlbmRlZCk6
IEFkZGVkLiBSZXR1cm5zIHRydWUgaWZmIHRoZSBET00gd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBh
d2F5IG9yIGFjdGl2ZSBET00KKyAgICAgICAgb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpnbG9iYWxPYmplY3QpOiBNYWRlIHRo
aXMgaW5saW5lLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp2aXNpdERlZmVy
cmVkKTogQWRkZWQuIENhbGxlZCBieSBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbi4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2U6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NUHJvbWlzZTo6cmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBl
cjo6cmVzb2x2ZVdpdGhWYWx1ZSk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRy
dWUuCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoTmV3bHlD
cmVhdGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dFdpdGhWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRm9udEZhY2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNGb250RmFjZTo6bG9hZGVkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRm9udEZh
Y2VTZXQ6OnJlYWR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1
YnRsZUNyeXB0bzo6dmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5
cHRvOjpkaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBv
cnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlUmV0dXJuUGFyYW1ldGVycyk6CisKIDIwMTYtMDgtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggV2luZG93cyBidWlsZCBhZnRl
ciByMjA1MTYxCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5
U2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBh
eS9BcHBsZVBheVNlc3Npb24uY3BwCShyZXZpc2lvbiAyMDUxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczMyw3ICs3MzMsNyBAQCBib29sIEFwcGxlUGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzKFNj
CiAgICAgcmV0dXJuIHBheW1lbnRDb29yZGluYXRvci5jYW5NYWtlUGF5bWVudHMoKTsKIH0KIAot
dm9pZCBBcHBsZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bWVyY2hhbnRJZGVudGlmaWVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgQXBwbGVQYXlTZXNzaW9uOjpjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZl
Q2FyZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25z
dCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwYXNl
c2RQcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBET01XaW5kb3cm
IHdpbmRvdyA9ICpkb2N1bWVudC5kb21XaW5kb3coKTsKQEAgLTc0NSwxMiArNzQ1LDEzIEBAIHZv
aWQgQXBwbGVQYXlTZXNzaW9uOjpjYW5NYWtlUGF5bWVudHNXaXQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHByb21pc2UoV1RGTW92ZShwYXNl
c2RQcm9taXNlKSk7CiAgICAgaWYgKCFzaG91bGREaXNjbG9zZUFwcGxlUGF5Q2FwYWJpbGl0eShk
b2N1bWVudCkpIHsKICAgICAgICAgYXV0byYgcGF5bWVudENvb3JkaW5hdG9yID0gZG9jdW1lbnQu
ZnJhbWUoKS0+bWFpbkZyYW1lKCkucGF5bWVudENvb3JkaW5hdG9yKCk7CiAgICAgICAgIGJvb2wg
Y2FuTWFrZVBheW1lbnRzID0gcGF5bWVudENvb3JkaW5hdG9yLmNhbk1ha2VQYXltZW50cygpOwog
CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvbWlzZSwgY2FuTWFrZVBheW1l
bnRzXSgpIG11dGFibGUgewotICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGNhbk1ha2VQYXlt
ZW50cyk7CisgICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGNhbk1ha2VQYXltZW50cyk7CiAg
ICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU4LDcgKzc1OSw3IEBAIHZv
aWQgQXBwbGVQYXlTZXNzaW9uOjpjYW5NYWtlUGF5bWVudHNXaXQKICAgICBhdXRvJiBwYXltZW50
Q29vcmRpbmF0b3IgPSBkb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5wYXltZW50Q29vcmRp
bmF0b3IoKTsKIAogICAgIHBheW1lbnRDb29yZGluYXRvci5jYW5NYWtlUGF5bWVudHNXaXRoQWN0
aXZlQ2FyZChtZXJjaGFudElkZW50aWZpZXIsIGRvY3VtZW50LmRvbWFpbigpLCBbcHJvbWlzZV0o
Ym9vbCBjYW5NYWtlUGF5bWVudHMpIG11dGFibGUgewotICAgICAgICBwcm9taXNlLnJlc29sdmUo
Y2FuTWFrZVBheW1lbnRzKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShjYW5NYWtlUGF5bWVu
dHMpOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5
L0FwcGxlUGF5U2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmgJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNWZXJz
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB2ZXJzaW9uLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgc3RhdGljIGJvb2wgY2FuTWFrZVBheW1lbnRzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgc3RhdGljIHZvaWQgY2FuTWFrZVBheW1lbnRz
V2l0aEFjdGl2ZUNhcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbWVy
Y2hhbnRJZGVudGlmaWVyLCBEZWZlcnJlZFdyYXBwZXImJiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHN0YXRpYyB2b2lkIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgUmVmPERlZmVycmVk
V3JhcHBlcj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBiZWdpbihFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmNwcAkocmV2aXNpb24gMjA1
MTc1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9ET01XaW5kb3dGZXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIERPTVdpbmRvd0ZldGNoOjpmZXRjaChET01XaW5kb3cmIHdpbmRvdywgRmV0Y2hSZXF1
ZXN0JiByZXF1ZXN0LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBET01XaW5kb3dG
ZXRjaDo6ZmV0Y2goRE9NV2luZG93JiB3aW5kb3csIEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRE9N
UHJvbWlzZTxGZXRjaFJlc3BvbnNlPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKCF3aW5kb3cuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9ET01XaW5kb3dGZXRjaC5oCShyZXZpc2lvbiAyMDUxNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShGRVRDSF9BUEkpCiAKKyNp
bmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArMzksMTEgQEAgY2xhc3MgRE9NV2luZG93OwogY2xh
c3MgRGVmZXJyZWRXcmFwcGVyOwogY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIEZldGNoUmVxdWVz
dDsKK2NsYXNzIEZldGNoUmVzcG9uc2U7CiAKIGNsYXNzIERPTVdpbmRvd0ZldGNoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBmZXRjaChET01XaW5kb3cmLCBGZXRjaFJlcXVlc3QmLCBEZWZl
cnJlZFdyYXBwZXImJik7CisgICAgc3RhdGljIHZvaWQgZmV0Y2goRE9NV2luZG93JiwgRmV0Y2hS
ZXF1ZXN0JiwgRE9NUHJvbWlzZTxGZXRjaFJlc3BvbnNlPiYmKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eS5jcHAJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE0ICsxMjQsMTQgQEAgdm9pZCBG
ZXRjaEJvZHk6OnVwZGF0ZUNvbnRlbnRUeXBlKEZldGNoSAogICAgICAgICBoZWFkZXJzLmZhc3RT
ZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlLCBtX2NvbnRlbnRUeXBlKTsKIH0KIAotdm9p
ZCBGZXRjaEJvZHk6OmFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiBvd25lciwgRGVmZXJyZWRX
cmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5OjphcnJheUJ1ZmZlcihGZXRjaEJvZHlP
d25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBBU1NF
UlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogICAgIG1fY29uc3VtZXIuc2V0VHlwZShGZXRjaEJv
ZHlDb25zdW1lcjo6VHlwZTo6QXJyYXlCdWZmZXIpOwogICAgIGNvbnN1bWUob3duZXIsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keTo6YmxvYihGZXRjaEJvZHlPd25lciYg
b3duZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keTo6YmxvYihG
ZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsK
ICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogICAgIG1fY29uc3VtZXIuc2V0VHlw
ZShGZXRjaEJvZHlDb25zdW1lcjo6VHlwZTo6QmxvYik7CkBAIC0xMzksMzEgKzEzOSwzMSBAQCB2
b2lkIEZldGNoQm9keTo6YmxvYihGZXRjaEJvZHlPd25lciYgb3duCiAgICAgY29uc3VtZShvd25l
ciwgV1RGTW92ZShwcm9taXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5Ojpqc29uKEZldGNoQm9k
eU93bmVyJiBvd25lciwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5
Ojpqc29uKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9t
aXNlKQogewogICAgIEFTU0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7CiAKICAgICBpZiAobV90
eXBlID09IFR5cGU6OlRleHQpIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoSlNPTihwcm9t
aXNlLCBtX3RleHQpOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKFdURk1vdmUocHJv
bWlzZSksIG1fdGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb25zdW1lci5z
ZXRUeXBlKEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpKU09OKTsKICAgICBjb25zdW1lKG93bmVy
LCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6OnRleHQoRmV0Y2hCb2R5
T3duZXImIG93bmVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6
OnRleHQoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21p
c2UpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSAhPSBUeXBlOjpOb25lKTsKIAogICAgIGlmIChtX3R5
cGUgPT0gVHlwZTo6VGV4dCkgewotICAgICAgICBwcm9taXNlLnJlc29sdmUobV90ZXh0KTsKKyAg
ICAgICAgcHJvbWlzZS0+cmVzb2x2ZShtX3RleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fY29uc3VtZXIuc2V0VHlwZShGZXRjaEJvZHlDb25zdW1lcjo6VHlwZTo6VGV4dCk7CiAg
ICAgY29uc3VtZShvd25lciwgV1RGTW92ZShwcm9taXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5
Ojpjb25zdW1lKEZldGNoQm9keU93bmVyJiBvd25lciwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlz
ZSkKK3ZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERl
ZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGhhbmRs
ZWQgYnkgRmV0Y2hCb2R5T3duZXIKICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwpA
QCAtMTcyLDEzICsxNzIsMTMgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWUoRmV0Y2hCb2R5T3du
ZXImIAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFR5cGU6OkFycmF5QnVmZmVy
OgotICAgICAgICBjb25zdW1lQXJyYXlCdWZmZXIocHJvbWlzZSk7CisgICAgICAgIGNvbnN1bWVB
cnJheUJ1ZmZlcihXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
VHlwZTo6QXJyYXlCdWZmZXJWaWV3OgotICAgICAgICBjb25zdW1lQXJyYXlCdWZmZXJWaWV3KHBy
b21pc2UpOworICAgICAgICBjb25zdW1lQXJyYXlCdWZmZXJWaWV3KFdURk1vdmUocHJvbWlzZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAgICBjb25zdW1l
VGV4dChwcm9taXNlKTsKKyAgICAgICAgY29uc3VtZVRleHQoV1RGTW92ZShwcm9taXNlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OkJsb2I6CiAgICAgICAgIGNvbnN1bWVCbG9i
KG93bmVyLCBXVEZNb3ZlKHByb21pc2UpKTsKQEAgLTE4NywxMSArMTg3LDExIEBAIHZvaWQgRmV0
Y2hCb2R5Ojpjb25zdW1lKEZldGNoQm9keU93bmVyJiAKICAgICAgICAgbV9jb25zdW1lUHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6Okxv
YWRlZDoKLSAgICAgICAgbV9jb25zdW1lci5yZXNvbHZlKHByb21pc2UpOworICAgICAgICBtX2Nv
bnN1bWVyLnJlc29sdmUoV1RGTW92ZShwcm9taXNlKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFR5cGU6OkZvcm1EYXRhOgogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBjb25zdW1pbmcg
Rm9ybURhdGEuCi0gICAgICAgIHByb21pc2UucmVqZWN0KDApOworICAgICAgICBwcm9taXNlLT5y
ZWplY3QoMCk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI0NiwyOCArMjQ2LDI4IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lQXNTdHJlYW0oRmV0Y2hCb2QKIH0KICNlbmRpZgogCi12b2lkIEZldGNoQm9keTo6Y29uc3Vt
ZUFycmF5QnVmZmVyKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5Ojpj
b25zdW1lQXJyYXlCdWZmZXIoUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAg
IEFTU0VSVChtX2RhdGEpOwotICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKHByb21pc2Us
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEtPmRhdGEoKSksIG1fZGF0YS0+Ynl0
ZUxlbmd0aCgpKTsKKyAgICBtX2NvbnN1bWVyLnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21p
c2UpLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEt
PmJ5dGVMZW5ndGgoKSk7CiAgICAgbV9kYXRhID0gbnVsbHB0cjsKIH0KIAotdm9pZCBGZXRjaEJv
ZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlKQordm9p
ZCBGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoUmVmPERlZmVycmVkV3JhcHBlcj4m
JiBwcm9taXNlKQogewogICAgIEFTU0VSVChtX2RhdGFWaWV3KTsKLSAgICBtX2NvbnN1bWVyLnJl
c29sdmVXaXRoRGF0YShwcm9taXNlLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obV9kYXRh
Vmlldy0+YmFzZUFkZHJlc3MoKSksIG1fZGF0YVZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgbV9j
b25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KG1fZGF0YVZpZXctPmJhc2VBZGRyZXNzKCkpLCBtX2RhdGFWaWV3LT5ieXRl
TGVuZ3RoKCkpOwogICAgIG1fZGF0YVZpZXcgPSBudWxscHRyOwogfQogCi12b2lkIEZldGNoQm9k
eTo6Y29uc3VtZVRleHQoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6
OmNvbnN1bWVUZXh0KFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBWZWN0
b3I8dWludDhfdD4gZGF0YSA9IGV4dHJhY3RGcm9tVGV4dCgpOwotICAgIG1fY29uc3VtZXIucmVz
b2x2ZVdpdGhEYXRhKHByb21pc2UsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgbV9j
b25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKICAgICBtX3RleHQgPSB7IH07CiB9CiAKLXZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lQmxvYihGZXRjaEJvZHlPd25lciYgb3duZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2Up
Cit2b2lkIEZldGNoQm9keTo6Y29uc3VtZUJsb2IoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8
RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgQVNTRVJUKG1fYmxvYik7CiAKQEAg
LTI5MCwxNyArMjkwLDE1IEBAIHZvaWQgRmV0Y2hCb2R5Ojpsb2FkaW5nRmFpbGVkKCkKIHsKICAg
ICBpZiAobV9jb25zdW1lUHJvbWlzZSkgewogICAgICAgICBtX2NvbnN1bWVQcm9taXNlLT5yZWpl
Y3QoMCk7Ci0gICAgICAgIG1fY29uc3VtZVByb21pc2UgPSBOdWxsb3B0OworICAgICAgICBtX2Nv
bnN1bWVQcm9taXNlID0gbnVsbHB0cjsKICAgICB9CiB9CiAKIHZvaWQgRmV0Y2hCb2R5Ojpsb2Fk
aW5nU3VjY2VlZGVkKCkKIHsKICAgICBtX3R5cGUgPSBtX2NvbnN1bWVyLmhhc0RhdGEoKSA/IFR5
cGU6OkxvYWRlZCA6IFR5cGU6Ok5vbmU7Ci0gICAgaWYgKG1fY29uc3VtZVByb21pc2UpIHsKLSAg
ICAgICAgbV9jb25zdW1lci5yZXNvbHZlKCptX2NvbnN1bWVQcm9taXNlKTsKLSAgICAgICAgbV9j
b25zdW1lUHJvbWlzZSA9IE51bGxvcHQ7Ci0gICAgfQorICAgIGlmIChtX2NvbnN1bWVQcm9taXNl
KQorICAgICAgICBtX2NvbnN1bWVyLnJlc29sdmUobV9jb25zdW1lUHJvbWlzZS5yZWxlYXNlTm9u
TnVsbCgpKTsKIH0KIAogUmVmUHRyPEZvcm1EYXRhPiBGZXRjaEJvZHk6OmJvZHlGb3JJbnRlcm5h
bFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAkocmV2aXNpb24gMjA1MTc1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTEgKzUyLDExIEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNs
YXNzIEZldGNoQm9keSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBhcnJheUJ1ZmZlcihGZXRjaEJvZHlP
d25lciYsIERlZmVycmVkV3JhcHBlciYmKTsKLSAgICB2b2lkIGJsb2IoRmV0Y2hCb2R5T3duZXIm
LCBEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9pZCBqc29uKEZldGNoQm9keU93bmVyJiwgRGVm
ZXJyZWRXcmFwcGVyJiYpOwotICAgIHZvaWQgdGV4dChGZXRjaEJvZHlPd25lciYsIERlZmVycmVk
V3JhcHBlciYmKTsKLSAgICB2b2lkIGZvcm1EYXRhKEZldGNoQm9keU93bmVyJiwgRGVmZXJyZWRX
cmFwcGVyJiYgcHJvbWlzZSkgeyBwcm9taXNlLnJlamVjdCgwKTsgfQorICAgIHZvaWQgYXJyYXlC
dWZmZXIoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lk
IGJsb2IoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lk
IGpzb24oRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lk
IHRleHQoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lk
IGZvcm1EYXRhKEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNl
KSB7IHByb21pc2UuZ2V0KCkucmVqZWN0KDApOyB9CiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
CiAgICAgdm9pZCBjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNl
U291cmNlJik7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIAogICAgIEZldGNoQm9keUNvbnN1
bWVyJiBjb25zdW1lcigpIHsgcmV0dXJuIG1fY29uc3VtZXI7IH0KIAotICAgIHZvaWQgY2xlYW5D
b25zdW1lUHJvbWlzZSgpIHsgbV9jb25zdW1lUHJvbWlzZSA9IE51bGxvcHQ7IH0KKyAgICB2b2lk
IGNsZWFuQ29uc3VtZVByb21pc2UoKSB7IG1fY29uc3VtZVByb21pc2UgPSBudWxscHRyOyB9CiAK
IHByaXZhdGU6CiAgICAgRmV0Y2hCb2R5KFJlZjxCbG9iPiYmKTsKQEAgLTkzLDEzICs5MywxMyBA
QCBwcml2YXRlOgogICAgIEZldGNoQm9keShTdHJpbmcmJik7CiAgICAgRmV0Y2hCb2R5KFR5cGUg
dHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CiAKLSAgICB2b2lkIGNvbnN1bWUoRmV0Y2hCb2R5T3du
ZXImLCBEZWZlcnJlZFdyYXBwZXImJik7CisgICAgdm9pZCBjb25zdW1lKEZldGNoQm9keU93bmVy
JiwgUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAKICAgICBWZWN0b3I8dWludDhfdD4gZXh0cmFj
dEZyb21UZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBjb25zdW1lQXJyYXlCdWZmZXIoRGVmZXJyZWRX
cmFwcGVyJik7Ci0gICAgdm9pZCBjb25zdW1lQXJyYXlCdWZmZXJWaWV3KERlZmVycmVkV3JhcHBl
ciYpOwotICAgIHZvaWQgY29uc3VtZVRleHQoRGVmZXJyZWRXcmFwcGVyJik7Ci0gICAgdm9pZCBj
b25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYsIERlZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lk
IGNvbnN1bWVBcnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIGNv
bnN1bWVBcnJheUJ1ZmZlclZpZXcoUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CisgICAgdm9pZCBj
b25zdW1lVGV4dChSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIGNvbnN1bWVCbG9i
KEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAKICAgICBUeXBlIG1f
dHlwZSB7IFR5cGU6Ok5vbmUgfTsKICAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsKQEAgLTExMiw3
ICsxMTIsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3RleHQ7CiAKICAgICBGZXRjaEJvZHlD
b25zdW1lciBtX2NvbnN1bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKLSAg
ICBPcHRpb25hbDxEZWZlcnJlZFdyYXBwZXI+IG1fY29uc3VtZVByb21pc2U7CisgICAgUmVmUHRy
PERlZmVycmVkV3JhcHBlcj4gbV9jb25zdW1lUHJvbWlzZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29u
c3VtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5Q29uc3VtZXIuY3BwCShyZXZpc2lvbiAyMDUxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MjAgKzQzLDIwIEBAIHN0YXRpYyBpbmxpbmUgUmVmPEJsb2I+IGJsb2JGcm9tRGF0YShjb24KICAg
ICByZXR1cm4gQmxvYjo6Y3JlYXRlKFdURk1vdmUodmFsdWUpLCBjb250ZW50VHlwZSk7CiB9CiAK
LXZvaWQgRmV0Y2hCb2R5Q29uc3VtZXI6OnJlc29sdmVXaXRoRGF0YShEZWZlcnJlZFdyYXBwZXIm
IHByb21pc2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3Zv
aWQgRmV0Y2hCb2R5Q29uc3VtZXI6OnJlc29sdmVXaXRoRGF0YShSZWY8RGVmZXJyZWRXcmFwcGVy
PiYmIHByb21pc2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6QXJyYXlCdWZmZXI6Ci0g
ICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHByb21pc2UsIGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1vdmUocHJvbWlz
ZSksIGRhdGEsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OkJsb2I6
Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZVdpdGhOZXdseUNyZWF0ZWQoYmxvYkZyb21EYXRhKGRh
dGEsIGxlbmd0aCwgbV9jb250ZW50VHlwZSkpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlV2l0
aE5ld2x5Q3JlYXRlZChibG9iRnJvbURhdGEoZGF0YSwgbGVuZ3RoLCBtX2NvbnRlbnRUeXBlKSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OkpTT046Ci0gICAgICAgIGZ1bGZpbGxQ
cm9taXNlV2l0aEpTT04ocHJvbWlzZSwgU3RyaW5nKGRhdGEsIGxlbmd0aCkpOworICAgICAgICBm
dWxmaWxsUHJvbWlzZVdpdGhKU09OKFdURk1vdmUocHJvbWlzZSksIFN0cmluZyhkYXRhLCBsZW5n
dGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6VGV4dDoKLSAgICAgICAgcHJv
bWlzZS5yZXNvbHZlKFN0cmluZyhkYXRhLCBsZW5ndGgpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVz
b2x2ZShTdHJpbmcoZGF0YSwgbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5
cGU6Ok5vbmU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNjQsMjEgKzY0LDIx
IEBAIHZvaWQgRmV0Y2hCb2R5Q29uc3VtZXI6OnJlc29sdmVXaXRoRGF0YSgKICAgICB9CiB9CiAK
LXZvaWQgRmV0Y2hCb2R5Q29uc3VtZXI6OnJlc29sdmUoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNl
KQordm9pZCBGZXRjaEJvZHlDb25zdW1lcjo6cmVzb2x2ZShSZWY8RGVmZXJyZWRXcmFwcGVyPiYm
IHByb21pc2UpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSAhPSBUeXBlOjpOb25lKTsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6QXJyYXlCdWZmZXI6Ci0gICAgICAgIGZ1bGZp
bGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHByb21pc2UsIHRha2VBc0FycmF5QnVmZmVyKCkuZ2V0
KCkpOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihXVEZNb3ZlKHByb21p
c2UpLCB0YWtlQXNBcnJheUJ1ZmZlcigpLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgVHlwZTo6QmxvYjoKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlV2l0aE5ld2x5Q3JlYXRlZCh0
YWtlQXNCbG9iKCkpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlV2l0aE5ld2x5Q3JlYXRlZCh0
YWtlQXNCbG9iKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpKU09OOgotICAg
ICAgICBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKHByb21pc2UsIHRha2VBc1RleHQoKSk7CisgICAg
ICAgIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oV1RGTW92ZShwcm9taXNlKSwgdGFrZUFzVGV4dCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6VGV4dDoKLSAgICAgICAgcHJvbWlz
ZS5yZXNvbHZlKHRha2VBc1RleHQoKSk7CisgICAgICAgIHByb21pc2UtPnJlc29sdmUodGFrZUFz
VGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6Tm9uZToKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keUNvbnN1bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5oCShyZXZpc2lvbiAyMDUxNzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhbigpIHsgbV9idWZmZXIg
PSBudWxscHRyOyB9CiAKLSAgICB2b2lkIHJlc29sdmUoRGVmZXJyZWRXcmFwcGVyJik7Ci0gICAg
dm9pZCByZXNvbHZlV2l0aERhdGEoRGVmZXJyZWRXcmFwcGVyJiwgY29uc3QgdW5zaWduZWQgY2hh
ciosIHVuc2lnbmVkKTsKKyAgICB2b2lkIHJlc29sdmUoUmVmPERlZmVycmVkV3JhcHBlcj4mJik7
CisgICAgdm9pZCByZXNvbHZlV2l0aERhdGEoUmVmPERlZmVycmVkV3JhcHBlcj4mJiwgY29uc3Qg
dW5zaWduZWQgY2hhciosIHVuc2lnbmVkKTsKIAogICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0IHsg
cmV0dXJuICEhbV9idWZmZXI7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlPd25lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3MCArNzAsNzAgQEAgYm9vbCBGZXRjaEJvZHlPd25lcjo6aXNEaXN0dXJiZWQoKSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGZXRjaEJvZHlPd25lcjo6YXJyYXlCdWZm
ZXIoRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5T3duZXI6OmFycmF5
QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAobV9ib2R5
LmlzRW1wdHkoKSkgewotICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihwcm9t
aXNlLCBudWxscHRyLCAwKTsKKyAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
V1RGTW92ZShwcm9taXNlKSwgbnVsbHB0ciwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGlzRGlzdHVyYmVkKCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9y
KTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFR5cGVFcnJvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgbV9pc0Rpc3R1cmJlZCA9IHRydWU7CiAgICAgbV9ib2R5LmFycmF5QnVmZmVy
KCp0aGlzLCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHlPd25lcjo6Ymxv
YihEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6YmxvYihS
ZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKEJsb2I6OmNyZWF0ZSgpKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVzb2x2ZShCbG9iOjpjcmVhdGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGlzRGlzdHVyYmVkKCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoVHlwZUVy
cm9yKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFR5cGVFcnJvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgbV9pc0Rpc3R1cmJlZCA9IHRydWU7CiAgICAgbV9ib2R5LmJsb2IoKnRo
aXMsIFdURk1vdmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keU93bmVyOjpmb3JtRGF0
YShEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6Zm9ybURh
dGEoUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIGlmIChtX2JvZHkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KDApOworICAgICAgICBwcm9taXNlLT5y
ZWplY3QoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzRGlzdHVyYmVkKCkp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yKTsKKyAgICAgICAgcHJvbWlzZS0+
cmVqZWN0KFR5cGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9pc0Rpc3R1
cmJlZCA9IHRydWU7CiAgICAgbV9ib2R5LmZvcm1EYXRhKCp0aGlzLCBXVEZNb3ZlKHByb21pc2Up
KTsKIH0KIAotdm9pZCBGZXRjaEJvZHlPd25lcjo6anNvbihEZWZlcnJlZFdyYXBwZXImJiBwcm9t
aXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6anNvbihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHBy
b21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcHJvbWlzZS5y
ZWplY3QoU1lOVEFYX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChTWU5UQVhfRVJSKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNEaXN0dXJiZWQoKSkgewotICAgICAg
ICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoVHlw
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2lzRGlzdHVyYmVkID0gdHJ1
ZTsKICAgICBtX2JvZHkuanNvbigqdGhpcywgV1RGTW92ZShwcm9taXNlKSk7CiB9CiAKLXZvaWQg
RmV0Y2hCb2R5T3duZXI6OnRleHQoRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0
Y2hCb2R5T3duZXI6OnRleHQoUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAg
IGlmIChtX2JvZHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZShTdHJpbmco
KSk7CisgICAgICAgIHByb21pc2UtPnJlc29sdmUoU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChpc0Rpc3R1cmJlZCgpKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0
KFR5cGVFcnJvcik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChUeXBlRXJyb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIG1faXNEaXN0dXJiZWQgPSB0cnVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuaAkocmV2aXNpb24gMjA1
MTc1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTEgQEAgcHVibGljOgogICAgIC8vIEV4cG9zZWQg
Qm9keSBBUEkKICAgICBib29sIGlzRGlzdHVyYmVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFycmF5
QnVmZmVyKERlZmVycmVkV3JhcHBlciYmKTsKLSAgICB2b2lkIGJsb2IoRGVmZXJyZWRXcmFwcGVy
JiYpOwotICAgIHZvaWQgZm9ybURhdGEoRGVmZXJyZWRXcmFwcGVyJiYpOwotICAgIHZvaWQganNv
bihEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9pZCB0ZXh0KERlZmVycmVkV3JhcHBlciYmKTsK
KyAgICB2b2lkIGFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQg
YmxvYihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIGZvcm1EYXRhKFJlZjxEZWZl
cnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQganNvbihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsK
KyAgICB2b2lkIHRleHQoUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAKICAgICB2b2lkIGxvYWRC
bG9iKEJsb2ImLCBGZXRjaEJvZHlDb25zdW1lciopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAJKHJldmlzaW9uIDIwNTE3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEZldGNoUmVzcG9uc2U6OkJvZHlMb2FkZXI6
OnN0b3AoKQogICAgICAgICBtX2xvYWRlci0+c3RvcCgpOwogfQogCi12b2lkIEZldGNoUmVzcG9u
c2U6OmNvbnN1bWUodW5zaWduZWQgdHlwZSwgRGVmZXJyZWRXcmFwcGVyJiYgd3JhcHBlcikKK3Zv
aWQgRmV0Y2hSZXNwb25zZTo6Y29uc3VtZSh1bnNpZ25lZCB0eXBlLCBSZWY8RGVmZXJyZWRXcmFw
cGVyPiYmIHdyYXBwZXIpCiB7CiAgICAgQVNTRVJUKHR5cGUgPD0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpUZXh0KSk7CiAKQEAgLTI0MSw5ICsyNDEsOSBA
QCB2b2lkIEZldGNoUmVzcG9uc2U6OmNvbnN1bWVDaHVuayhSZWY8SlNDCiAgICAgbV9jb25zdW1l
ci5hcHBlbmQoY2h1bmstPmRhdGEoKSwgY2h1bmstPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLXZvaWQg
RmV0Y2hSZXNwb25zZTo6ZmluaXNoQ29uc3VtaW5nU3RyZWFtKERlZmVycmVkV3JhcHBlciYmIHBy
b21pc2UpCit2b2lkIEZldGNoUmVzcG9uc2U6OmZpbmlzaENvbnN1bWluZ1N0cmVhbShSZWY8RGVm
ZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlKHByb21p
c2UpOworICAgIG1fY29uc3VtZXIucmVzb2x2ZShXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAogdm9p
ZCBGZXRjaFJlc3BvbnNlOjpjb25zdW1lQm9keUFzU3RyZWFtKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCShyZXZpc2lvbiAyMDUxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBGZXRjaFByb21pc2Ug
PSBET01Qcm9taXNlPEZldGNoUmVzcG9uc2U+OwogICAgIHN0YXRpYyB2b2lkIGZldGNoKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBGZXRjaFJlcXVlc3QmLCBGZXRjaFByb21pc2UmJik7CiAKLSAg
ICB2b2lkIGNvbnN1bWUodW5zaWduZWQsIERlZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lkIGNv
bnN1bWUodW5zaWduZWQsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOwogI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKICAgICB2b2lkIHN0YXJ0Q29uc3VtaW5nU3RyZWFtKHVuc2lnbmVkKTsKICAgICB2
b2lkIGNvbnN1bWVDaHVuayhSZWY8SlNDOjpVaW50OEFycmF5PiYmKTsKLSAgICB2b2lkIGZpbmlz
aENvbnN1bWluZ1N0cmVhbShEZWZlcnJlZFdyYXBwZXImJik7CisgICAgdm9pZCBmaW5pc2hDb25z
dW1pbmdTdHJlYW0oUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAjZW5kaWYKIAogICAgIHZvaWQg
c2V0U3RhdHVzKGludCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL1dvcmtlckdsb2JhbFNjb3Bl
RmV0Y2guY3BwCShyZXZpc2lvbiAyMDUxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZUZl
dGNoOjpmZXRjaChXb3JrZXJHbG9iYWxTY29wZSYgc2NvcGUsIEZldGNoUmVxdWVzdCYgcmVxdWVz
dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGVGZXRj
aDo6ZmV0Y2goV29ya2VyR2xvYmFsU2NvcGUmIHNjb3BlLCBGZXRjaFJlcXVlc3QmIHJlcXVlc3Qs
IFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAoIXNjb3BlLnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmgJKHJl
dmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvV29ya2VyR2xv
YmFsU2NvcGVGZXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEZl
dGNoUmVxdWVzdDsKIAogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGVGZXRjaCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgZmV0Y2goV29ya2VyR2xvYmFsU2NvcGUmLCBGZXRjaFJlcXVlc3QmLCBE
ZWZlcnJlZFdyYXBwZXImJik7CisgICAgc3RhdGljIHZvaWQgZmV0Y2goV29ya2VyR2xvYmFsU2Nv
cGUmLCBGZXRjaFJlcXVlc3QmLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaAkocmV2aXNp
b24gMjA1MTc1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJNZWRpYURldmljZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDUxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQ5MzcsNyArNDkzNyw3IEBACiAJCUI1QjdBMTcwMTdDMTBBQTgwMEU0QUEw
QSAvKiBFbGVtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNUI3QTE2RjE3QzEwODA2MDBFNEFBMEEgLyogRWxlbWVudERhdGEuY3BwICov
OyB9OwogCQlCNUI3QTE3MTE3QzEwQUMwMDBFNEFBMEEgLyogRWxlbWVudERhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QjdBMTZFMTdDMTA0ODAw
MEU0QUEwQSAvKiBFbGVtZW50RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUI1RDMxREZBMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovOyB9
OwotCQlCNUQzMURGQjExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYx
MEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oICovOyB9OworCQlCNUQzMURGQjExQ0Y2
MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3Rp
dmVET01DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUI2NTY2MjcwMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjU2NjI2RTEy
MEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICovOyB9OwogCQlCNjU4RkZBMTE1
MjJFRjNBMDBERDU1OTUgLyogSlNSYWRpb05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NThGRjlGMTUyMkVGM0EwMERENTU5NSAvKiBK
U1JhZGlvTm9kZUxpc3QuY3BwICovOyB9OwogCQlCNjU4RkZBMjE1MjJFRjNBMDBERDU1OTUgLyog
SlNSYWRpb05vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNjU4RkZBMDE1MjJFRjNBMDBERDU1OTUgLyogSlNSYWRpb05vZGVMaXN0LmggKi87
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDUxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVkaWFTdHJlYW0uaCIKQEAg
LTYxLDYgKzYyLDEwIEBAIEpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChWTSYK
IHsKIH0KIAorSlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUdsb2JhbE9iamVjdCgpCit7Cit9CisK
IHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0Ojp+
SlNET01HbG9iYWxPYmplY3QoKTsKQEAgLTE2Nyw2ICsxNzIsOSBAQCB2b2lkIEpTRE9NR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgZm9yIChhdXRvJiBjb25zdHJ1Y3RvciA6IHRo
aXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLnZhbHVlcygpKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmY29uc3RydWN0b3IpOwogCisgICAgZm9yIChhdXRvJiBkZWZlcnJlZFdyYXBwZXIgOiB0aGlz
T2JqZWN0LT5kZWZlcnJlZFdyYXBwZXJzKCkpCisgICAgICAgIGRlZmVycmVkV3JhcHBlci0+dmlz
aXREZWZlcnJlZCh2aXNpdG9yKTsKKwogICAgIHRoaXNPYmplY3QtPm1fYnVpbHRpbkludGVybmFs
RnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3Mg
RGVmZXJyZWRXcmFwcGVyOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEV2ZW50Owog
ICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKQEAgLTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiwgSlND
OjpXcml0ZUJhcnJpZXI8SlNDOjpTdHJ1Y3R1cmU+PiBKU0RPTVN0cnVjdHVyZU1hcDsKICAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OldyaXRlQmFycmllcjxK
U0M6OkpTT2JqZWN0Pj4gSlNET01Db25zdHJ1Y3Rvck1hcDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8
RGVmZXJyZWRXcmFwcGVyKj4gRGVmZXJyZWRXcmFwcGVyU2V0OwogCiAgICAgY2xhc3MgV0VCQ09S
RV9FWFBPUlQgSlNET01HbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdCB7
CiAgICAgICAgIHR5cGVkZWYgSlNDOjpKU0dsb2JhbE9iamVjdCBCYXNlOwpAQCAtNTYsNiArNTgs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1
Y3R1cmVzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzOyB9CiAgICAgICAgIEpTRE9NQ29uc3RydWN0
b3JNYXAmIGNvbnN0cnVjdG9ycygpIHsgcmV0dXJuIG1fY29uc3RydWN0b3JzOyB9CiAKKyAgICAg
ICAgRGVmZXJyZWRXcmFwcGVyU2V0JiBkZWZlcnJlZFdyYXBwZXJzKCkgeyByZXR1cm4gbV9kZWZl
cnJlZFdyYXBwZXJzOyB9CisKICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIC8vIE1ha2UgYmluZGluZyBjb2Rl
IGdlbmVyYXRpb24gZWFzaWVyLgpAQCAtNzUsNiArNzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBwdWJs
aWM6CisgICAgICAgIH5KU0RPTUdsb2JhbE9iamVjdCgpOworCiAgICAgICAgIHN0YXRpYyBjb25z
dCBKU0M6OkNsYXNzSW5mbyogaW5mbygpIHsgcmV0dXJuICZzX2luZm87IH0KIAogICAgICAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKQEAgLTg1LDYgKzkxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOwog
ICAgICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwIG1fY29uc3RydWN0b3JzOworICAgICAgICBEZWZl
cnJlZFdyYXBwZXJTZXQgbV9kZWZlcnJlZFdyYXBwZXJzOwogCiAgICAgICAgIEV2ZW50KiBtX2N1
cnJlbnRFdmVudDsKICAgICAgICAgUmVmPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkocmV2aXNpb24g
MjA1MTc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTYgKzM1LDMxIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGVmZXJyZWRXcmFwcGVyOjpEZWZlcnJlZFdyYXBwZXIo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKQotICAgIDogbV9nbG9iYWxPYmplY3QoZXhlYy0+
dm0oKSwgZ2xvYmFsT2JqZWN0KQotICAgICwgbV9kZWZlcnJlZChleGVjLT52bSgpLCBwcm9taXNl
RGVmZXJyZWQpCitEZWZlcnJlZFdyYXBwZXI6OkRlZmVycmVkV3JhcHBlcihFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkKQorICAgIDogQWN0aXZlRE9NQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2RlZmVycmVkKHByb21pc2VEZWZlcnJlZCkKKyAg
ICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKKyAgICBnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcC53cml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCBwcm9taXNlRGVmZXJyZWQpOworICAg
IG1fZ2xvYmFsT2JqZWN0LT5kZWZlcnJlZFdyYXBwZXJzKCkuYWRkKHRoaXMpOwogfQogCi1KU0RP
TUdsb2JhbE9iamVjdCYgRGVmZXJyZWRXcmFwcGVyOjpnbG9iYWxPYmplY3QoKSBjb25zdAorRGVm
ZXJyZWRXcmFwcGVyOjp+RGVmZXJyZWRXcmFwcGVyKCkKIHsKLSAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiAqbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgY2xlYXIoKTsK
K30KKwordm9pZCBEZWZlcnJlZFdyYXBwZXI6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoIW1fZGVm
ZXJyZWQgfHwgbV9nbG9iYWxPYmplY3QpOworICAgIGlmIChtX2RlZmVycmVkICYmIG1fZ2xvYmFs
T2JqZWN0KQorICAgICAgICBtX2dsb2JhbE9iamVjdC0+ZGVmZXJyZWRXcmFwcGVycygpLnJlbW92
ZSh0aGlzKTsKKyAgICBtX2RlZmVycmVkLmNsZWFyKCk7Cit9CisKK3ZvaWQgRGVmZXJyZWRXcmFw
cGVyOjpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBjbGVhcigpOwogfQogCiBKU0M6OkpTVmFs
dWUgRGVmZXJyZWRXcmFwcGVyOjpwcm9taXNlKCkgY29uc3QKQEAgLTU1LDYgKzcwLDkgQEAgSlND
OjpKU1ZhbHVlIERlZmVycmVkV3JhcHBlcjo6cHJvbWlzZSgpIAogCiB2b2lkIERlZmVycmVkV3Jh
cHBlcjo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNW
YWx1ZSByZXNvbHV0aW9uKQogeworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlw
ZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CkBAIC02NCwxMiArODIsMTQgQEAgdm9pZCBEZWZlcnJlZFdy
YXBwZXI6OmNhbGxGdW5jdGlvbihFeGVjUwogCiAgICAgY2FsbCgmZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKIAotICAgIG1fZ2xv
YmFsT2JqZWN0LmNsZWFyKCk7Ci0gICAgbV9kZWZlcnJlZC5jbGVhcigpOworICAgIGNsZWFyKCk7
CiB9CiAKIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0aW9uQ29kZSBlYywgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogeworICAgIGlmIChpc1N1c3BlbmRlZCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2Jq
ZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwpAQCAtODUsNyArMTA1LDcgQEAgdm9pZCByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlv
bklmQW55KEpTQwogICAgIEpTVmFsdWUgZXJyb3IgPSBzdGF0ZS5leGNlcHRpb24oKS0+dmFsdWUo
KTsKICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOwogCi0gICAgRGVmZXJyZWRXcmFwcGVyKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgJnByb21pc2VEZWZlcnJlZCkucmVqZWN0KGVycm9yKTsKKyAg
ICBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QsICZwcm9taXNl
RGVmZXJyZWQpLT5yZWplY3QoZXJyb3IpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBwYXJzZUFzSlNPTihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgZGF0YSkK
QEAgLTk0LDI3ICsxMTQsMjcgQEAgc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgcGFyc2VBc0pT
T04oSgogICAgIHJldHVybiBKU0M6OkpTT05QYXJzZShzdGF0ZSwgZGF0YSk7CiB9CiAKLXZvaWQg
ZnVsZmlsbFByb21pc2VXaXRoSlNPTihEZWZlcnJlZFdyYXBwZXImIHByb21pc2UsIGNvbnN0IFN0
cmluZyYgZGF0YSkKK3ZvaWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihSZWY8RGVmZXJyZWRXcmFw
cGVyPiYmIHByb21pc2UsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICBKU0M6OkpTVmFsdWUg
dmFsdWUgPSBwYXJzZUFzSlNPTihwcm9taXNlLmdsb2JhbE9iamVjdCgpLmdsb2JhbEV4ZWMoKSwg
ZGF0YSk7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcGFyc2VBc0pTT04ocHJvbWlzZS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgZGF0YSk7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcHJvbWlzZS5yZWplY3QoU1lOVEFYX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChT
WU5UQVhfRVJSKTsKICAgICBlbHNlCi0gICAgICAgIHByb21pc2UucmVzb2x2ZSh2YWx1ZSk7Cisg
ICAgICAgIHByb21pc2UtPnJlc29sdmUodmFsdWUpOwogfQogCi12b2lkIGZ1bGZpbGxQcm9taXNl
V2l0aEFycmF5QnVmZmVyKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSwgQXJyYXlCdWZmZXIqIGFy
cmF5QnVmZmVyKQordm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihSZWY8RGVmZXJy
ZWRXcmFwcGVyPiYmIHByb21pc2UsIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcikKIHsKICAgICBp
ZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0PEpTVmFsdWU+KGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IocHJvbWlzZS5nbG9iYWxPYmplY3QoKS5nbG9iYWxFeGVjKCkpKTsK
KyAgICAgICAgcHJvbWlzZS0+cmVqZWN0PEpTVmFsdWU+KGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
cHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIHByb21pc2UucmVzb2x2ZShhcnJheUJ1ZmZlcik7CisgICAgcHJvbWlzZS0+
cmVzb2x2ZShhcnJheUJ1ZmZlcik7CiB9CiAKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlC
dWZmZXIoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQordm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRX
cmFwcGVyPiYmIHByb21pc2UsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpCiB7Ci0g
ICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIocHJvbWlzZSwgQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKTsKKyAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJh
eUJ1ZmZlcihXVEZNb3ZlKHByb21pc2UpLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEsIGxl
bmd0aCkuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVByb21pc2UuaAkocmV2aXNpb24gMjA1MTc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
Zm5kZWYgSlNET01Qcm9taXNlX2gKICNkZWZpbmUgSlNET01Qcm9taXNlX2gKIAorI2luY2x1ZGUg
IkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5oPgpAQCAtOTUsOSArOTYsMTQgQEAgc3RydWN0IFByb21pc2VSZXN1bHRJbnNwZWN0b3I8
RE9NQ2xhc3MsIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBwYXNzQnlDb25zdFJlZiA9IGZh
bHNlOwogfTsKIAotY2xhc3MgRGVmZXJyZWRXcmFwcGVyIHsKK2NsYXNzIERlZmVycmVkV3JhcHBl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPERlZmVycmVkV3JhcHBlcj4sIHB1YmxpYyBBY3RpdmVET01D
YWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgRGVmZXJyZWRXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKik7CisgICAgc3RhdGlj
IFJlZjxEZWZlcnJlZFdyYXBwZXI+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIGRlZmVy
cmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVmZXJyZWRXcmFwcGVy
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRlZmVycmVkKSk7CisgICAgfQorCisgICAgfkRlZmVycmVk
V3JhcHBlcigpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgUmVzb2x2ZVJlc3VsdFR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPFByb21pc2VSZXN1bHRJbnNwZWN0b3I8UmVzb2x2ZVJlc3VsdFR5
cGU+OjpwYXNzQnlWYWx1ZSwgdm9pZD46OnR5cGUKICAgICByZXNvbHZlKFJlc29sdmVSZXN1bHRU
eXBlIHJlc3VsdCkgeyByZXNvbHZlV2l0aFZhbHVlKHJlc3VsdCk7IH0KQEAgLTEyMSwxMCArMTI3
LDE5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVqZWN0KEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0
cmluZyYgPSB7IH0pOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCgpIGNv
bnN0OwogICAgIEpTQzo6SlNWYWx1ZSBwcm9taXNlKCkgY29uc3Q7CiAKKyAgICBib29sIGlzU3Vz
cGVuZGVkKCkgeyByZXR1cm4gIW1fZGVmZXJyZWQgfHwgIWNhbkludm9rZUNhbGxiYWNrKCk7IH0g
Ly8gVGhlIHdyYXBwZXIgd29ybGQgaGFzIGdvbmUgYXdheSBvciBhY3RpdmUgRE9NIG9iamVjdHMg
aGF2ZSBiZWVuIHN1c3BlbmRlZC4KKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KKworICAgIHZvaWQgdmlzaXREZWZl
cnJlZChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRXZWFrKCZtX2RlZmVycmVkKTsgfQorCiBwcml2YXRlOgorICAgIERlZmVycmVkV3JhcHBlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1Byb21pc2VEZWZlcnJl
ZCopOworCisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpIG92
ZXJyaWRlOworCiAgICAgdm9pZCBjYWxsRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUgZnVuY3Rpb24sIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKTsKICAgICB2b2lkIHJlc29s
dmUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgcmVzb2x1dGlvbikgeyBjYWxs
RnVuY3Rpb24oc3RhdGUsIG1fZGVmZXJyZWQtPnJlc29sdmUoKSwgcmVzb2x1dGlvbik7IH0KICAg
ICB2b2lkIHJlamVjdChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSByZXNvbHV0
aW9uKSB7IGNhbGxGdW5jdGlvbihzdGF0ZSwgbV9kZWZlcnJlZC0+cmVqZWN0KCksIHJlc29sdXRp
b24pOyB9CkBAIC0xMzIsMTMgKzE0NywxMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNz
IFJlamVjdFJlc3VsdFR5cGU+IHZvaWQgcmVqZWN0V2l0aFZhbHVlKFJlamVjdFJlc3VsdFR5cGUm
Jik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgUmVzb2x2ZVJlc3VsdFR5cGU+IHZvaWQgcmVzb2x2ZVdp
dGhWYWx1ZShSZXNvbHZlUmVzdWx0VHlwZSYmKTsKIAotICAgIEpTQzo6U3Ryb25nPEpTRE9NR2xv
YmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBKU0M6OlN0cm9uZzxKU0M6OkpTUHJvbWlz
ZURlZmVycmVkPiBtX2RlZmVycmVkOworICAgIEpTQzo6V2VhazxKU0M6OkpTUHJvbWlzZURlZmVy
cmVkPiBtX2RlZmVycmVkOworICAgIEpTQzo6V2VhazxKU0RPTUdsb2JhbE9iamVjdD4gbV9nbG9i
YWxPYmplY3Q7CiB9OwogCi12b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oRGVmZXJyZWRXcmFw
cGVyJiwgY29uc3QgU3RyaW5nJik7Ci12b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVy
KERlZmVycmVkV3JhcHBlciYsIEFycmF5QnVmZmVyKik7Ci12b2lkIGZ1bGZpbGxQcm9taXNlV2l0
aEFycmF5QnVmZmVyKERlZmVycmVkV3JhcHBlciYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwordm9p
ZCBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYsIGNvbnN0IFN0
cmluZyYpOwordm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRX
cmFwcGVyPiYmLCBBcnJheUJ1ZmZlciopOwordm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1
ZmZlcihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKIHZvaWQg
cmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCYpOwogCiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGNhbGxQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNQcm9taXNl
RGVmZXJyZWQqKSkKQEAgLTE1NiwyNiArMTcxLDMxIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgY2Fs
bFByb21pc2VGdW5jdGlvbigKIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZT4KIGNsYXNzIERPTVBy
b21pc2UgewogcHVibGljOgotICAgIERPTVByb21pc2UoRGVmZXJyZWRXcmFwcGVyJiYgd3JhcHBl
cikgOiBtX3dyYXBwZXIoV1RGTW92ZSh3cmFwcGVyKSkgeyB9CisgICAgRE9NUHJvbWlzZShSZWY8
RGVmZXJyZWRXcmFwcGVyPiYmIHdyYXBwZXIpCisgICAgICAgIDogbV93cmFwcGVyKFdURk1vdmUo
d3JhcHBlcikpCisgICAgeworICAgIH0KKwogICAgIERPTVByb21pc2UoRE9NUHJvbWlzZSYmIHBy
b21pc2UpIDogbV93cmFwcGVyKFdURk1vdmUocHJvbWlzZS5tX3dyYXBwZXIpKSB7IH0KIAogICAg
IERPTVByb21pc2UoY29uc3QgRE9NUHJvbWlzZSYpID0gZGVmYXVsdDsKICAgICBET01Qcm9taXNl
JiBvcGVyYXRvcj0oRE9NUHJvbWlzZSBjb25zdCYpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgcmVz
b2x2ZSh0eXBlbmFtZSBQcm9taXNlUmVzdWx0SW5zcGVjdG9yPFZhbHVlPjo6VHlwZSB2YWx1ZSkg
eyBtX3dyYXBwZXIucmVzb2x2ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHJlc29sdmUodHlwZW5hbWUg
UHJvbWlzZVJlc3VsdEluc3BlY3RvcjxWYWx1ZT46OlR5cGUgdmFsdWUpIHsgbV93cmFwcGVyLT5y
ZXNvbHZlKHZhbHVlKTsgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gRXJyb3JUeXBlPiB2
b2lkIHJlamVjdChFcnJvclR5cGUmJi4uLiBlcnJvcikgeyBtX3dyYXBwZXIucmVqZWN0KHN0ZDo6
Zm9yd2FyZDxFcnJvclR5cGU+KGVycm9yKS4uLik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBFcnJvclR5cGU+IHZvaWQgcmVqZWN0KEVycm9yVHlwZSYmLi4uIGVycm9yKSB7IG1fd3JhcHBl
ci0+cmVqZWN0KHN0ZDo6Zm9yd2FyZDxFcnJvclR5cGU+KGVycm9yKS4uLik7IH0KIAogICAgIERl
ZmVycmVkV3JhcHBlciYgZGVmZXJyZWRXcmFwcGVyKCkgeyByZXR1cm4gbV93cmFwcGVyOyB9CiAK
IHByaXZhdGU6Ci0gICAgRGVmZXJyZWRXcmFwcGVyIG1fd3JhcHBlcjsKKyAgICBSZWY8RGVmZXJy
ZWRXcmFwcGVyPiBtX3dyYXBwZXI7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBSZXNvbHZlUmVzdWx0
VHlwZT4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZVdpdGhWYWx1ZShSZXNv
bHZlUmVzdWx0VHlwZSYmIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQobV9kZWZlcnJlZCk7CisgICAg
aWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CkBAIC0xODUsNiAr
MjA1LDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlV2l0aAogdGVtcGxh
dGU8Y2xhc3MgUmVzb2x2ZVJlc3VsdFR5cGU+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKFJlZjxSZXNvbHZlUmVzdWx0VHlwZT4mJiByZXN1bHQp
CiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
bV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0xOTUsNiArMjE3
LDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlV2l0aAogdGVtcGxhdGU8
Y2xhc3MgUmVqZWN0UmVzdWx0VHlwZT4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0V2l0aFZhbHVlKFJlamVjdFJlc3VsdFR5cGUmJiByZXN1bHQpCiB7CisgICAgaWYgKGlzU3Vz
cGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAg
QVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yMDUsNiArMjI5LDggQEAgaW5saW5lIHZvaWQg
RGVmZXJyZWRXcmFwcGVyOjpyZWplY3RXaXRoVgogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVm
ZXJyZWRXcmFwcGVyOjpyZXNvbHZlKGJvb2wgcmVzdWx0KQogeworICAgIGlmIChpc1N1c3BlbmRl
ZCgpKQorICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFTU0VS
VChtX2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjE1LDYgKzI0MSw4IEBAIGlubGluZSB2b2lkIERlZmVy
cmVkV3JhcHBlcjo6cmVzb2x2ZShib28KIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVk
V3JhcHBlcjo6cmVzb2x2ZShKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgaWYgKGlzU3VzcGVu
ZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNT
RVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yMjUsNiArMjUzLDggQEAgaW5saW5lIHZvaWQgRGVm
ZXJyZWRXcmFwcGVyOjpyZXNvbHZlKEpTQwogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJy
ZWRXcmFwcGVyOjpyZWplY3QoSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIGlmIChpc1N1c3Bl
bmRlZCgpKQorICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFT
U0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjM1LDYgKzI2NSw4IEBAIGlubGluZSB2b2lkIERl
ZmVycmVkV3JhcHBlcjo6cmVqZWN0KEpTQzoKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVy
cmVkV3JhcHBlcjo6cmVzb2x2ZShzdGQ6Om51bGxwdHJfdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5k
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NF
UlQobV9nbG9iYWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTI0NSw2ICsyNzcsOCBAQCBpbmxpbmUgdm9pZCBEZWZl
cnJlZFdyYXBwZXI6OnJlc29sdmUoc3RkCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJl
ZFdyYXBwZXI6OnJlamVjdChzdGQ6Om51bGxwdHJfdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQo
bV9nbG9iYWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTI1NSw2ICsyODksOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJl
ZFdyYXBwZXI6OnJlamVjdChzdGQ6CiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdy
YXBwZXI6OnJlc29sdmUoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CisgICAgaWYgKGlzU3VzcGVu
ZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNT
RVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNjUsNiArMzAxLDggQEAgaW5saW5lIHZvaWQgRGVm
ZXJyZWRXcmFwcGVyOjpyZXNvbHZlKGNvbgogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJy
ZWRXcmFwcGVyOjpyZWplY3QoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CisgICAgaWYgKGlzU3Vz
cGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAg
QVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZvbnRGYWNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZvbnRGYWNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MTc1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNGb250RmFjZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDggKzM5LDggQEAgSlNDOjpKU1ZhbHVlIEpTRm9udEZhY2U6OmxvYWRlZChKU0M6OkV4
ZQogewogICAgIGlmICghbV9sb2FkZWQpIHsKICAgICAgICAgaWYgKCF3cmFwcGVkKCkucHJvbWlz
ZSgpKSB7Ci0gICAgICAgICAgICBEZWZlcnJlZFdyYXBwZXIgcHJvbWlzZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSkpOwotICAgICAgICAgICAgbV9sb2FkZWQuc2V0KHN0YXRlLnZtKCksIHRoaXMsIHBy
b21pc2UucHJvbWlzZSgpKTsKKyAgICAgICAgICAgIFJlZjxEZWZlcnJlZFdyYXBwZXI+IHByb21p
c2UgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBKU0M6
OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICAgICAgbV9sb2FkZWQuc2V0KHN0YXRlLnZtKCksIHRoaXMsIHByb21pc2UtPnByb21pc2Uo
KSk7CiAgICAgICAgICAgICB3cmFwcGVkKCkucmVnaXN0ZXJMb2FkZWQoV1RGTW92ZShwcm9taXNl
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9sb2FkZWQuc2V0KHN0YXRlLnZtKCks
IHRoaXMsIHdyYXBwZWQoKS5wcm9taXNlKCkudmFsdWUoKS5kZWZlcnJlZFdyYXBwZXIoKS5wcm9t
aXNlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGb250RmFjZVNldEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGb250
RmFjZVNldEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRm9udEZhY2VTZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTQzo6SlNWYWx1ZSBKU0ZvbnRGYWNlU2V0
OjpyZWFkeShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlYWR5
KSB7Ci0gICAgICAgIERlZmVycmVkV3JhcHBlciBwcm9taXNlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgp
KSk7Ci0gICAgICAgIG1fcmVhZHkuc2V0KHN0YXRlLnZtKCksIHRoaXMsIHByb21pc2UucHJvbWlz
ZSgpKTsKKyAgICAgICAgUmVmPERlZmVycmVkV3JhcHBlcj4gcHJvbWlzZSA9IERlZmVycmVkV3Jh
cHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIEpTQzo6SlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIG1fcmVhZHkuc2V0
KHN0YXRlLnZtKCksIHRoaXMsIHByb21pc2UtPnByb21pc2UoKSk7CiAgICAgICAgIHdyYXBwZWQo
KS5yZWdpc3RlclJlYWR5KFdURk1vdmUocHJvbWlzZSkpOwogICAgIH0KICAgICByZXR1cm4gbV9y
ZWFkeS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZp
Y2VzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lZGlhRGV2aWNlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzg4LDcgKzM4OCw3IEBAIEpTVmFsdWUgSlNNZWRpYURldmljZXM6OmdldFVzZXJNZWRpYShF
eGUKICAgICBhdXRvIGF1ZGlvQ29uc3RyYWludHMgPSBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Y3Jl
YXRlKFdURk1vdmUobWFuZGF0b3J5QXVkaW9Db25zdHJhaW50cyksIFdURk1vdmUoYWR2YW5jZWRB
dWRpb0NvbnN0cmFpbnRzKSwgYXJlQXVkaW9Db25zdHJhaW50c1ZhbGlkKTsKICAgICBhdXRvIHZp
ZGVvQ29uc3RyYWludHMgPSBNZWRpYUNvbnN0cmFpbnRzSW1wbDo6Y3JlYXRlKFdURk1vdmUobWFu
ZGF0b3J5VmlkZW9Db25zdHJhaW50cyksIFdURk1vdmUoYWR2YW5jZWRWaWRlb0NvbnN0cmFpbnRz
KSwgYXJlVmlkZW9Db25zdHJhaW50c1ZhbGlkKTsKICAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQgPSBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgd3JhcHBlZCgpLmdldFVzZXJNZWRpYShXVEZNb3ZlKGF1
ZGlvQ29uc3RyYWludHMpLCBXVEZNb3ZlKHZpZGVvQ29uc3RyYWludHMpLCBEZWZlcnJlZFdyYXBw
ZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSwgZWMpOworICAgIHdy
YXBwZWQoKS5nZXRVc2VyTWVkaWEoV1RGTW92ZShhdWRpb0NvbnN0cmFpbnRzKSwgV1RGTW92ZSh2
aWRlb0NvbnN0cmFpbnRzKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIGVjKTsKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtU291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MTc1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpz
dGFydChFeAogICAgIG1fY29udHJvbGxlci5zZXQoc3RhdGUudm0oKSwganNTb3VyY2UsIHN0YXRl
LmFyZ3VtZW50KDApKTsKIAogICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICB3cmFwcGVkKCkuc3RhcnQoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxl
cihjb250cm9sbGVyKSwgRGVmZXJyZWRXcmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHBy
b21pc2VEZWZlcnJlZCkpOworICAgIHdyYXBwZWQoKS5zdGFydChSZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyKGNvbnRyb2xsZXIpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gcHJvbWlzZURl
ZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5
cHRvQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEyICsxNjUsMTIgQEAgSlNWYWx1
ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeAogCiAgICAgCiAgICAgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRX
cmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3
cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAg
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIsIHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFw
cGVyLnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAg
IH07CiAgICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHdyYXBwZXItPnJlamVjdChu
dWxscHRyKTsKICAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0yMTcsMTIg
KzIxNywxMiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4CiAgICAg
fQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFw
cGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAg
ICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVh
dGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1
Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkg
bXV0YWJsZSB7Ci0gICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIs
IHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdp
dGhBcnJheUJ1ZmZlcih3cmFwcGVyLnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCkpOwogICAgIH07CiAgICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBl
cl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAg
IHdyYXBwZXItPnJlamVjdChudWxscHRyKTsKICAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CkBAIC0yNjksMTIgKzI2OSwxMiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRv
OjpzaWduKEV4ZWNTCiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7
Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJv
bWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVm
ZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVy
cmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8
dWludDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFy
cmF5QnVmZmVyKHdyYXBwZXIsIHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgICAg
ICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLnJlbGVhc2VOb25OdWxsKCks
IHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAgIH07CiAgICAgYXV0byBmYWlsdXJl
Q2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3Qo
bnVsbHB0cik7CisgICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRyKTsKICAgICB9OwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0zMjcsMTIgKzMyNywxMiBAQCBKU1ZhbHVlIEpT
V2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRXcmFw
cGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFw
cGVyXShib29sIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1
bHQpOworICAgICAgICB3cmFwcGVyLT5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKICAgICBhdXRv
IGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVy
LnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAg
IH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTM2OSwxMiArMzY5LDEyIEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRpZ2VzdChFeGUKICAgICB9CiAKICAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZl
cnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNr
ID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAg
ICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlciwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVy
KHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7
CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUg
ewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVq
ZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTQy
MCwxNyArNDIwLDE3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2UK
ICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJl
ZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQp
OworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1
dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKENyeXB0b0tleSoga2V5LCBDcnlwdG9LZXlQ
YWlyKiBrZXlQYWlyKSBtdXRhYmxlIHsKICAgICAgICAgQVNTRVJUKGtleSB8fCBrZXlQYWlyKTsK
ICAgICAgICAgQVNTRVJUKCFrZXkgfHwgIWtleVBhaXIpOwogICAgICAgICBpZiAoa2V5KQotICAg
ICAgICAgICAgd3JhcHBlci5yZXNvbHZlKGtleSk7CisgICAgICAgICAgICB3cmFwcGVyLT5yZXNv
bHZlKGtleSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShrZXlQ
YWlyKTsKKyAgICAgICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5UGFpcik7CiAgICAgfTsKICAg
ICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3
cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIp
OwogICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU1MSwxMiArNTUxLDEy
IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICB9CiAKICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3Jh
cHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0
cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0Nh
bGxiYWNrID0gW3dyYXBwZXJdKENyeXB0b0tleSYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAg
d3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CisgICAgICAgIHdyYXBwZXItPnJlc29sdmUocmVzdWx0
KTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5y
ZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAogICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwg
a2V5Rm9ybWF0LCBkYXRhLCBXVEZNb3ZlKGFsZ29yaXRobSksIFdURk1vdmUocGFyYW1ldGVycyks
IGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92
ZShmYWlsdXJlQ2FsbGJhY2spKTsKQEAgLTYxNCwxMiArNjE0LDEyIEBAIEpTVmFsdWUgSlNXZWJL
aXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZzdGF0ZSk7CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZl
cnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJy
ZWQpOworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBw
ZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAg
IGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
cmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
d3JhcHBlciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQ
cm9taXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRh
dGEoKSwgcmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9
IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsK
KyAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBXZWJDb3Jl
OjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwpAQCAtNjY3LDI1ICs2NjcsMjUgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgIH0KIAogICAgIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVy
cmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAKICAgICBhdXRvIGV4cG9ydFN1Y2Nlc3ND
YWxsYmFjayA9IFtrZXlGb3JtYXQsIGFsZ29yaXRobSwgcGFyYW1ldGVycywgd3JhcHBpbmdLZXks
IHdyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZXhwb3J0ZWRLZXlEYXRhKSBtdXRhYmxl
IHsKICAgICAgICAgYXV0byBlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZW5jcnlwdGVkRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBm
dWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLCBlbmNyeXB0ZWREYXRhLmRhdGEo
KSwgZW5jcnlwdGVkRGF0YS5zaXplKCkpOworICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRo
QXJyYXlCdWZmZXIod3JhcHBlci5yZWxlYXNlTm9uTnVsbCgpLCBlbmNyeXB0ZWREYXRhLmRhdGEo
KSwgZW5jcnlwdGVkRGF0YS5zaXplKCkpOwogICAgICAgICB9OwogICAgICAgICBhdXRvIGVuY3J5
cHRGYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHdy
YXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxw
dHIpOwogICAgICAgICB9OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAg
YWxnb3JpdGhtLT5lbmNyeXB0Rm9yV3JhcEtleSgqcGFyYW1ldGVycywgKndyYXBwaW5nS2V5LCBz
dGQ6Om1ha2VfcGFpcihleHBvcnRlZEtleURhdGEuZGF0YSgpLCBleHBvcnRlZEtleURhdGEuc2l6
ZSgpKSwgV1RGTW92ZShlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlbmNyeXB0RmFp
bHVyZUNhbGxiYWNrKSwgZWMpOwogICAgICAgICBpZiAoZWMpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZXBvcnQgZmFpbHVyZSBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBj
YWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVy
cm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAg
d3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVs
bHB0cik7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBleHBvcnRGYWlsdXJlQ2FsbGJh
Y2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0
cik7CisgICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRyKTsKICAgICB9OwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03NjcsMjcgKzc2NywyNyBAQCBKU1ZhbHVlIEpTV2ViS2l0
U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9i
YWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3
cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
cHJvbWlzZURlZmVycmVkKTsKICAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUdsb2Jh
bE9iamVjdChzdGF0ZS52bSgpLCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICBhdXRvIGRlY3J5cHRT
dWNjZXNzQ2FsbGJhY2sgPSBbZG9tR2xvYmFsT2JqZWN0LCBrZXlGb3JtYXQsIHVud3JhcHBlZEtl
eUFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywgZXh0cmFjdGFibGUs
IGtleVVzYWdlcywgd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFi
bGUgewogICAgICAgICBhdXRvIGltcG9ydFN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShDcnlw
dG9LZXkmIGtleSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3cmFwcGVyLnJlc29sdmUoa2V5KTsK
KyAgICAgICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5KTsKICAgICAgICAgfTsKICAgICAgICAg
YXV0byBpbXBvcnRGYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVq
ZWN0KG51bGxwdHIpOwogICAgICAgICB9OwogICAgICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRv
bUdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXko
c3RhdGUsIGtleUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNp
emUoKSksIHVud3JhcHBlZEtleUFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1l
dGVycywgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShpbXBvcnRTdWNjZXNzQ2FsbGJh
Y2spLCBXVEZNb3ZlKGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOwogICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9u
IGRldGFpbHMgdG8gY29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2Ug
dGhlcmUgaXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBw
cm9taXNlIHJlamVjdCBmdW5jdGlvbnMuCiAgICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3
cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBk
ZWNyeXB0RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdy
YXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgfTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDIwNTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDk0LDkgKzQwOTQsOSBAQCBzdWIgR2VuZXJhdGVS
ZXR1cm5QYXJhbWV0ZXJzCiAKICAgICBpZiAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikp
IHsKICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKLSAgICAgICAgICAgIHB1c2go
QGFyZ3VtZW50cywgIkRlZmVycmVkV3JhcHBlcihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHByb21pc2VEZWZlcnJlZCkiKTsK
KyAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIkRlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0
YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwgcHJvbWlzZURlZmVycmVkKSIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHVzaChAYXJndW1lbnRzLCAiRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSIpOworICAgICAgICAgICAgcHVzaChAYXJndW1l
bnRzLCAiRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBwcm9taXNlRGVmZXJyZWQpIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHVzaChA
YXJndW1lbnRzLCAiZWMiKSBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJhaXNlc0V4Y2VwdGlvbiJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UifTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287494</attachid>
            <date>2016-08-30 23:30:18 -0700</date>
            <delta_ts>2016-08-31 00:03:16 -0700</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>bug-161426-20160830232807.patch</filename>
            <type>text/plain</type>
            <size>59775</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAxNi0wOC0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBdm9pZCB1c2luZyBzdHJvbmcg
cmVmZXJlbmNlIGluIEpTRE9NUHJvbWlzZeKAmXMgRGVmZXJyZWRXcmFwcGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MjYKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI4MDkxMTIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgSlNDOjpTdHJvbmcgaW4gRGVmZXJyZWRXcmFwcGVyIGJ5
IEpTQzo6V2VhaywgYW5kIG1ha2UgdGhlIGdsb2JhbCBvYmplY3Qgb3duIEpTUHJvbWlzZURlZmVy
cmVkLgorCisgICAgICAgIERlZmVycmVkV3JhcHBlciBhZGRzIGl0c2VsZiB0byBKU0RPTUdsb2Jh
bE9iamVjdCdzIG5ld2x5IGFkZGVkIEhhc2hTZXQgd2hlbiBpdCdzIGNyZWF0ZWQgYW5kIGNsZWFy
cyBpdHNlbGYKKyAgICAgICAgZnJvbSB0aGUgSGFzaFNldCBpbnNpZGUgaXRzIGRlc3RydWN0b3Ig
YXMgd2VsbCBhcyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAg
ICAgICBUaGlzIGlzIHNvIHRoYXQgSlNET01HbG9iYWxPYmplY3QncyB2aXNpdENoaWxkcmVuIGNh
biB2aXNpdCBldmVyeSBsaXZlIERlZmVycmVkV3JhcHBlci4KKworICAgICAgICBCZWNhdXNlIHRo
aXMgb3BlcmF0aW9uIGlzIHJhdGhlciBleHBlbnNlLCB0aGlzIHBhdGNoIHR1cm5zIERlZmVycmVk
V3JhcHBlciBpbnRvIGEgUmVmQ291bnRlZCBvYmplY3QgdG8gYXZvaWQKKyAgICAgICAgSGFzaE1h
cCBjaHVybnMuIE1vc3Qgb2YgY29kZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggaXMgZHVlIHRvIHRo
aXMgdHlwZSBjaGFuZ2UsIGFuZCB0aGUgZmFjdCBsYW1iZGEgY2Fubm90CisgICAgICAgIGNhcHR1
cmUgUmVmPERlZmVycmVkV3JhcHBlcj4gc2luY2UgaXRzIGNvcHkgY29uc3RydWN0b3IgZG9lc24n
dCBleGlzdC4KKworICAgICAgICBXZSBhbHNvIGNyZWF0ZSBhIHdyaXRlIGJhcnJpZXIgZnJvbSB0
aGUgZ2xvYmFsIG9iamVjdCB0byBKU1Byb21pc2VEZWZlcnJlZCBzbyB0aGF0IHRoZXkgd29uJ3Qg
YmUgY29sbGVjdGVkCisgICAgICAgIGR1cmluZyBhbiBlZGVuIGNvbGxlY3Rpb24gd2hlbiBpdCBo
YXBwZW5zIGJlZm9yZSBKU0RPTUdsb2JhbE9iamVjdCdzIHZpc2l0Q2hpbGRyZW4gaXMgaW52b2tl
ZC4KKworICAgICAgICBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGVudGlyZSBET00g
d3JhcHBlciB3b3JsZCBvZiB0aGUgcHJvbWlzZSB0byBnbyBhd2F5IGJlZm9yZSB0aGUgcHJvbWlz
ZSBpcworICAgICAgICByZXNvbHZlZCBvciByZWplY3RlZCBieSBhIHJlZi1jb3VudGVkIEMrKyBv
YmplY3QuIEluIHRoaXMgY2FzZSwgbV9kZWZlcnJlZCBhbmQgbV9nbG9iYWxPYmplY3QgYmVjb21l
IGRlYWQuCisgICAgICAgIFZhcmlvdXMgbWVtYmVyIHJlc29sdmUqIGFuZCByZWplY3QgZnVuY3Rp
b25zIG9mIERlZmVycmVkV3JhcHBlciBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gY2hlY2sgdGhpcyBj
b25kaXRpb24uCisKKyAgICAgICAgQmVjYXVzZSBKU0RPTUdsb2JhbE9iamVjdCBjYW4gYmUgZmlu
YWxpemVkIGJlZm9yZSBEZWZlcnJlZFdyYXBwZXIgaXMgZmluYWxpemVkLiBEZWZlcnJlZFdyYXBw
ZXIncyBkZXN0cnVjdG9yLAorICAgICAgICB3aGljaCBjYWxscyBEZWZlcnJlZFdyYXBwZXI6OmNs
ZWFyLCBzaG91bGQgb25seSByZW1vdmUgaXRzZWxmIGZyb20gbV9nbG9iYWxPYmplY3Qgd2hlbiBt
X2dsb2JhbE9iamVjdCBpcyBhbGl2ZS4KKworICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1h
a2VzIERlZmVycmVkV3JhcHBlciBpbmhlcml0IGZyb20gQWN0aXZlRE9NQ2FsbGJhY2sgc28gdGhh
dCBpdCB3b24ndCB0cnkgdG8gZXhlY3V0ZSBzY3JpcHRzCisgICAgICAgIHdoZW4gdGhlIGFjdGl2
ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkOyBlLmcuIGFmdGVyIGEgcGFnZSBuYXZp
Z2F0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8g
YXV0aG9yL3VzZXIgdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIE1vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxl
UGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQpOgorICAgICAgICAqIE1v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRj
aC9ET01XaW5kb3dGZXRjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dGZXRjaDo6
ZmV0Y2gpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6YmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6Ompzb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmV0Y2hCb2R5Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmNvbnN1bWVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6bG9h
ZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmxvYWRpbmdTdWNjZWVk
ZWQpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
Y2xlYW5Db25zdW1lUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHkpOiBVc2Ug
UmVmUHRyPERlZmVycmVkV3JhcHBlcj4gaW5zdGVhZCBvZiBPcHRpb25hbDxEZWZlcnJlZFdyYXBw
ZXI+IG5vdyB0aGF0IERlZmVycmVkV3JhcHBlcgorICAgICAgICBpcyByZWYgY291bnRlZC4gUGVy
aGFwcyB3ZSBjb3VsZCB1c2UgT3B0aW9uYWw8UmVmPERlZmVycmVkV3JhcHBlcj4+IGhlcmUgYnV0
IHRoYXQgc2VlbWVkIHJhdGhlciB2ZXJib3NlLgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5Q29uc3VtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Q29uc3VtZXI6
OnJlc29sdmVXaXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlDb25zdW1lcjo6
cmVzb2x2ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5oOgor
ICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5T3duZXI6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keU93bmVyOjpibG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keU93bmVyOjpm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6anNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6dGV4dCk6CisgICAgICAgICogTW9kdWxlcy9m
ZXRjaC9GZXRjaEJvZHlPd25lci5oOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNw
b25zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaFJlc3BvbnNlOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoUmVzcG9uc2U6OmZpbmlzaENvbnN1bWluZ1N0cmVhbSk6Cisg
ICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmg6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckdsb2JhbFNjb3BlRmV0Y2g6OmZldGNoKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL1dv
cmtlckdsb2JhbFNjb3BlRmV0Y2guaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2Jq
ZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbik6IEFkZGVkIHZpc2l0cyB0byBlYWNoIEpTUHJvbWlzZURlZmVycmVkIG93bmVkIGJ5
IHRoaXMgZ2xvYmFsIG9iamVjdC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmRlZmVycmVkV3Jh
cHBlcnMpOiBBZGRlZC4gVGhpcyBtYXAgaXMgb25seSB1c2VkIGJ5IEpTRE9NR2xvYmFsT2JqZWN0
J3MgdmlzaXRDaGlsZHJlbi4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpEZWZlcnJlZFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp+RGVmZXJyZWRXcmFwcGVyKTogQ2Fs
bHMgY2xlYXIuIFdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6
ZWQsCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgdGhlcmUg
aXMgbm8gbmVlZCB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuIFdoZW4g
bV9kZWZlcnJlZAorICAgICAgICBoYXMgYmVlbiBjbGVhcmVkLCBlaXRoZXIgY2xlYXIoKSBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCAoMSkgb3IgdGhlIGNhbGxiYWNrIGlzIGRlYWQgKDIpLiBTaW5j
ZSAoMikgaGFwcGVucyBvbmx5CisgICAgICAgIHdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaXRzZWxm
IGlzIGRlYWQgKGFzIGl0cyB2aXNpdENoaWxkcmVuIHdvdWxkIGhhdmUgdmlzaXRlZCBtX2RlZmVy
cmVkIG90aGVyd2lzZSksIGFnYWluLCB0aGVyZQorICAgICAgICBpcyBubyBuZWVkIHRvIHJlbW92
ZSBpdHNlbGYgZnJvbSBnbG9iYWwgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRX
cmFwcGVyOjpjbGVhcik6IEFkZGVkLiBDbGVhcnMgbV9kZWZlcnJlZCBhbmQgcmVtb3ZlcyBpdHNl
bGYgZnJvbSBKU0RPTUdsb2JhbE9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3Jh
cHBlcjo6Y29udGV4dERlc3Ryb3llZCk6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaGFzIGJlZW4g
ZGVzdHJveWVkLiBXZSBtdXN0IGNhbGwgY2xlYXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkV3JhcHBlcjo6Y2FsbEZ1bmN0aW9uKTogQ2hlY2sgY2FuSW52b2tlQ2FsbGJhY2sgaW4gQWN0
aXZlRE9NQ2FsbGJhY2suCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRydWUuIFNlZSBiZWxvdy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZnVsZmlsbFByb21pc2VXaXRoSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpm
dWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjppc1N1c3BlbmRlZCk6
IEFkZGVkLiBSZXR1cm5zIHRydWUgaWZmIHRoZSBET00gd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBh
d2F5IG9yIGFjdGl2ZSBET00KKyAgICAgICAgb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpnbG9iYWxPYmplY3QpOiBNYWRlIHRo
aXMgaW5saW5lLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp2aXNpdERlZmVy
cmVkKTogQWRkZWQuIENhbGxlZCBieSBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbi4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2U6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NUHJvbWlzZTo6cmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBl
cjo6cmVzb2x2ZVdpdGhWYWx1ZSk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRy
dWUuCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoTmV3bHlD
cmVhdGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dFdpdGhWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRm9udEZhY2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNGb250RmFjZTo6bG9hZGVkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRm9udEZh
Y2VTZXQ6OnJlYWR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1
YnRsZUNyeXB0bzo6dmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5
cHRvOjpkaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBv
cnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlUmV0dXJuUGFyYW1ldGVycyk6CisKIDIwMTYtMDgtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkICJnZXQiIHRvIEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMzLDcg
KzczMyw3IEBAIGJvb2wgQXBwbGVQYXlTZXNzaW9uOjpjYW5NYWtlUGF5bWVudHMoU2MKICAgICBy
ZXR1cm4gcGF5bWVudENvb3JkaW5hdG9yLmNhbk1ha2VQYXltZW50cygpOwogfQogCi12b2lkIEFw
cGxlUGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXJjaGFu
dElkZW50aWZpZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBBcHBsZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHBhc2VzZFByb21p
c2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIERPTVdpbmRvdyYgd2luZG93
ID0gKmRvY3VtZW50LmRvbVdpbmRvdygpOwpAQCAtNzQ1LDEyICs3NDUsMTMgQEAgdm9pZCBBcHBs
ZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdAogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gcHJvbWlzZShXVEZNb3ZlKHBhc2VzZFByb21p
c2UpKTsKICAgICBpZiAoIXNob3VsZERpc2Nsb3NlQXBwbGVQYXlDYXBhYmlsaXR5KGRvY3VtZW50
KSkgewogICAgICAgICBhdXRvJiBwYXltZW50Q29vcmRpbmF0b3IgPSBkb2N1bWVudC5mcmFtZSgp
LT5tYWluRnJhbWUoKS5wYXltZW50Q29vcmRpbmF0b3IoKTsKICAgICAgICAgYm9vbCBjYW5NYWtl
UGF5bWVudHMgPSBwYXltZW50Q29vcmRpbmF0b3IuY2FuTWFrZVBheW1lbnRzKCk7CiAKICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm9taXNlLCBjYW5NYWtlUGF5bWVudHNdKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FuTWFrZVBheW1lbnRzKTsK
KyAgICAgICAgICAgIHByb21pc2UtPnJlc29sdmUoY2FuTWFrZVBheW1lbnRzKTsKICAgICAgICAg
fSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03NTgsNyArNzU5LDcgQEAgdm9pZCBBcHBs
ZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdAogICAgIGF1dG8mIHBheW1lbnRDb29yZGlu
YXRvciA9IGRvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLnBheW1lbnRDb29yZGluYXRvcigp
OwogCiAgICAgcGF5bWVudENvb3JkaW5hdG9yLmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJk
KG1lcmNoYW50SWRlbnRpZmllciwgZG9jdW1lbnQuZG9tYWluKCksIFtwcm9taXNlXShib29sIGNh
bk1ha2VQYXltZW50cykgbXV0YWJsZSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZShjYW5NYWtl
UGF5bWVudHMpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGNhbk1ha2VQYXltZW50cyk7CiAg
ICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQ
YXlTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBh
eS9BcHBsZVBheVNlc3Npb24uaAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1ZlcnNpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIHVuc2lnbmVkIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICBzdGF0aWMgYm9vbCBjYW5NYWtlUGF5bWVudHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBjYW5NYWtlUGF5bWVudHNXaXRoQWN0
aXZlQ2FyZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBtZXJjaGFudElk
ZW50aWZpZXIsIERlZmVycmVkV3JhcHBlciYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IHZvaWQgY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBSZWY8RGVmZXJyZWRXcmFwcGVy
PiYmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGJlZ2luKEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guY3BwCShyZXZpc2lvbiAyMDUyMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
RE9NV2luZG93RmV0Y2g6OmZldGNoKERPTVdpbmRvdyYgd2luZG93LCBGZXRjaFJlcXVlc3QmIHJl
cXVlc3QsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIERPTVdpbmRvd0ZldGNoOjpm
ZXRjaChET01XaW5kb3cmIHdpbmRvdywgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBET01Qcm9taXNl
PEZldGNoUmVzcG9uc2U+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAoIXdpbmRvdy5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgRU5BQkxFKEZFVENIX0FQSSkKIAorI2luY2x1ZGUg
IkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM4LDEwICszOSwxMSBAQCBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBEZWZl
cnJlZFdyYXBwZXI7CiBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRmV0Y2hSZXF1ZXN0OworY2xh
c3MgRmV0Y2hSZXNwb25zZTsKIAogY2xhc3MgRE9NV2luZG93RmV0Y2ggewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGZldGNoKERPTVdpbmRvdyYsIEZldGNoUmVxdWVzdCYsIERlZmVycmVkV3Jh
cHBlciYmKTsKKyAgICBzdGF0aWMgdm9pZCBmZXRjaChET01XaW5kb3cmLCBGZXRjaFJlcXVlc3Qm
LCBET01Qcm9taXNlPEZldGNoUmVzcG9uc2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAko
cmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTQgKzEyNCwxNCBAQCB2b2lkIEZldGNoQm9k
eTo6dXBkYXRlQ29udGVudFR5cGUoRmV0Y2hICiAgICAgICAgIGhlYWRlcnMuZmFzdFNldChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudFR5cGUsIG1fY29udGVudFR5cGUpOwogfQogCi12b2lkIEZldGNo
Qm9keTo6YXJyYXlCdWZmZXIoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBEZWZlcnJlZFdyYXBwZXIm
JiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6OmFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiBv
d25lciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIEFTU0VSVChtX3R5
cGUgIT0gVHlwZTo6Tm9uZSk7CiAgICAgbV9jb25zdW1lci5zZXRUeXBlKEZldGNoQm9keUNvbnN1
bWVyOjpUeXBlOjpBcnJheUJ1ZmZlcik7CiAgICAgY29uc3VtZShvd25lciwgV1RGTW92ZShwcm9t
aXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5OjpibG9iKEZldGNoQm9keU93bmVyJiBvd25lciwg
RGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5OjpibG9iKEZldGNoQm9k
eU93bmVyJiBvd25lciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIEFT
U0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7CiAgICAgbV9jb25zdW1lci5zZXRUeXBlKEZldGNo
Qm9keUNvbnN1bWVyOjpUeXBlOjpCbG9iKTsKQEAgLTEzOSwzMSArMTM5LDMxIEBAIHZvaWQgRmV0
Y2hCb2R5OjpibG9iKEZldGNoQm9keU93bmVyJiBvd24KICAgICBjb25zdW1lKG93bmVyLCBXVEZN
b3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6Ompzb24oRmV0Y2hCb2R5T3duZXIm
IG93bmVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6Ompzb24o
RmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7
CiAgICAgQVNTRVJUKG1fdHlwZSAhPSBUeXBlOjpOb25lKTsKIAogICAgIGlmIChtX3R5cGUgPT0g
VHlwZTo6VGV4dCkgewotICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKHByb21pc2UsIG1f
dGV4dCk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oV1RGTW92ZShwcm9taXNlKSwg
bV90ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnN1bWVyLnNldFR5cGUo
RmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6OkpTT04pOwogICAgIGNvbnN1bWUob3duZXIsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keTo6dGV4dChGZXRjaEJvZHlPd25lciYg
b3duZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keTo6dGV4dChG
ZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsK
ICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBU
eXBlOjpUZXh0KSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZShtX3RleHQpOworICAgICAgICBw
cm9taXNlLT5yZXNvbHZlKG1fdGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9j
b25zdW1lci5zZXRUeXBlKEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpUZXh0KTsKICAgICBjb25z
dW1lKG93bmVyLCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6OmNvbnN1
bWUoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9p
ZCBGZXRjaEJvZHk6OmNvbnN1bWUoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRX
cmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBG
ZXRjaEJvZHlPd25lcgogICAgIEFTU0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7CkBAIC0xNzIs
MTMgKzE3MiwxMyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZShGZXRjaEJvZHlPd25lciYgCiAK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6QXJyYXlCdWZmZXI6Ci0gICAg
ICAgIGNvbnN1bWVBcnJheUJ1ZmZlcihwcm9taXNlKTsKKyAgICAgICAgY29uc3VtZUFycmF5QnVm
ZmVyKFdURk1vdmUocHJvbWlzZSkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpB
cnJheUJ1ZmZlclZpZXc6Ci0gICAgICAgIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcocHJvbWlzZSk7
CisgICAgICAgIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoV1RGTW92ZShwcm9taXNlKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OlRleHQ6Ci0gICAgICAgIGNvbnN1bWVUZXh0KHBy
b21pc2UpOworICAgICAgICBjb25zdW1lVGV4dChXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgVHlwZTo6QmxvYjoKICAgICAgICAgY29uc3VtZUJsb2Iob3duZXIs
IFdURk1vdmUocHJvbWlzZSkpOwpAQCAtMTg3LDExICsxODcsMTEgQEAgdm9pZCBGZXRjaEJvZHk6
OmNvbnN1bWUoRmV0Y2hCb2R5T3duZXImIAogICAgICAgICBtX2NvbnN1bWVQcm9taXNlID0gV1RG
TW92ZShwcm9taXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6TG9hZGVkOgot
ICAgICAgICBtX2NvbnN1bWVyLnJlc29sdmUocHJvbWlzZSk7CisgICAgICAgIG1fY29uc3VtZXIu
cmVzb2x2ZShXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlw
ZTo6Rm9ybURhdGE6CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNvbnN1bWluZyBGb3JtRGF0
YS4KLSAgICAgICAgcHJvbWlzZS5yZWplY3QoMCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdCgw
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjQ2LDI4ICsyNDYsMjggQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0
cmVhbShGZXRjaEJvZAogfQogI2VuZGlmCiAKLXZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlC
dWZmZXIoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVB
cnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YSk7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEocHJvbWlzZSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRhLT5ieXRlTGVuZ3Ro
KCkpOworICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEtPmRhdGEoKSksIG1fZGF0YS0+Ynl0ZUxl
bmd0aCgpKTsKICAgICBtX2RhdGEgPSBudWxscHRyOwogfQogCi12b2lkIEZldGNoQm9keTo6Y29u
c3VtZUFycmF5QnVmZmVyVmlldyhEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNo
Qm9keTo6Y29uc3VtZUFycmF5QnVmZmVyVmlldyhSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21p
c2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0YVZpZXcpOwotICAgIG1fY29uc3VtZXIucmVzb2x2ZVdp
dGhEYXRhKHByb21pc2UsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGFWaWV3LT5i
YXNlQWRkcmVzcygpKSwgbV9kYXRhVmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBtX2NvbnN1bWVy
LnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4obV9kYXRhVmlldy0+YmFzZUFkZHJlc3MoKSksIG1fZGF0YVZpZXctPmJ5dGVMZW5ndGgo
KSk7CiAgICAgbV9kYXRhVmlldyA9IG51bGxwdHI7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lVGV4dChEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNoQm9keTo6Y29uc3Vt
ZVRleHQoUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhID0gZXh0cmFjdEZyb21UZXh0KCk7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlV2l0
aERhdGEocHJvbWlzZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2NvbnN1bWVy
LnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOwogICAgIG1fdGV4dCA9IHsgfTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVCbG9i
KEZldGNoQm9keU93bmVyJiBvd25lciwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQg
RmV0Y2hCb2R5Ojpjb25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJl
ZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBBU1NFUlQobV9ibG9iKTsKIApAQCAtMjkwLDE3
ICsyOTAsMTUgQEAgdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdGYWlsZWQoKQogewogICAgIGlmICht
X2NvbnN1bWVQcm9taXNlKSB7CiAgICAgICAgIG1fY29uc3VtZVByb21pc2UtPnJlamVjdCgwKTsK
LSAgICAgICAgbV9jb25zdW1lUHJvbWlzZSA9IE51bGxvcHQ7CisgICAgICAgIG1fY29uc3VtZVBy
b21pc2UgPSBudWxscHRyOwogICAgIH0KIH0KIAogdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdTdWNj
ZWVkZWQoKQogewogICAgIG1fdHlwZSA9IG1fY29uc3VtZXIuaGFzRGF0YSgpID8gVHlwZTo6TG9h
ZGVkIDogVHlwZTo6Tm9uZTsKLSAgICBpZiAobV9jb25zdW1lUHJvbWlzZSkgewotICAgICAgICBt
X2NvbnN1bWVyLnJlc29sdmUoKm1fY29uc3VtZVByb21pc2UpOwotICAgICAgICBtX2NvbnN1bWVQ
cm9taXNlID0gTnVsbG9wdDsKLSAgICB9CisgICAgaWYgKG1fY29uc3VtZVByb21pc2UpCisgICAg
ICAgIG1fY29uc3VtZXIucmVzb2x2ZShtX2NvbnN1bWVQcm9taXNlLnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCiBSZWZQdHI8Rm9ybURhdGE+IEZldGNoQm9keTo6Ym9keUZvckludGVybmFsUmVxdWVz
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxMSArNTIsMTEgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRmV0
Y2hCb2R5IHsKIHB1YmxpYzoKLSAgICB2b2lkIGFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiwg
RGVmZXJyZWRXcmFwcGVyJiYpOwotICAgIHZvaWQgYmxvYihGZXRjaEJvZHlPd25lciYsIERlZmVy
cmVkV3JhcHBlciYmKTsKLSAgICB2b2lkIGpzb24oRmV0Y2hCb2R5T3duZXImLCBEZWZlcnJlZFdy
YXBwZXImJik7Ci0gICAgdm9pZCB0ZXh0KEZldGNoQm9keU93bmVyJiwgRGVmZXJyZWRXcmFwcGVy
JiYpOwotICAgIHZvaWQgZm9ybURhdGEoRmV0Y2hCb2R5T3duZXImLCBEZWZlcnJlZFdyYXBwZXIm
JiBwcm9taXNlKSB7IHByb21pc2UucmVqZWN0KDApOyB9CisgICAgdm9pZCBhcnJheUJ1ZmZlcihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgYmxvYihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQganNvbihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgdGV4dChG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgZm9ybURh
dGEoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpIHsgcHJv
bWlzZS5nZXQoKS5yZWplY3QoMCk7IH0KIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICAgICB2
b2lkIGNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYsIEZldGNoUmVzcG9uc2VTb3VyY2Um
KTsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgRmV0Y2hCb2R5Q29uc3VtZXImIGNv
bnN1bWVyKCkgeyByZXR1cm4gbV9jb25zdW1lcjsgfQogCi0gICAgdm9pZCBjbGVhbkNvbnN1bWVQ
cm9taXNlKCkgeyBtX2NvbnN1bWVQcm9taXNlID0gTnVsbG9wdDsgfQorICAgIHZvaWQgY2xlYW5D
b25zdW1lUHJvbWlzZSgpIHsgbV9jb25zdW1lUHJvbWlzZSA9IG51bGxwdHI7IH0KIAogcHJpdmF0
ZToKICAgICBGZXRjaEJvZHkoUmVmPEJsb2I+JiYpOwpAQCAtOTMsMTMgKzkzLDEzIEBAIHByaXZh
dGU6CiAgICAgRmV0Y2hCb2R5KFN0cmluZyYmKTsKICAgICBGZXRjaEJvZHkoVHlwZSB0eXBlKSA6
IG1fdHlwZSh0eXBlKSB7IH0KIAotICAgIHZvaWQgY29uc3VtZShGZXRjaEJvZHlPd25lciYsIERl
ZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lkIGNvbnN1bWUoRmV0Y2hCb2R5T3duZXImLCBSZWY8
RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBleHRyYWN0RnJvbVRl
eHQoKSBjb25zdDsKLSAgICB2b2lkIGNvbnN1bWVBcnJheUJ1ZmZlcihEZWZlcnJlZFdyYXBwZXIm
KTsKLSAgICB2b2lkIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoRGVmZXJyZWRXcmFwcGVyJik7Ci0g
ICAgdm9pZCBjb25zdW1lVGV4dChEZWZlcnJlZFdyYXBwZXImKTsKLSAgICB2b2lkIGNvbnN1bWVC
bG9iKEZldGNoQm9keU93bmVyJiwgRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgY29uc3Vt
ZUFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgY29uc3VtZUFy
cmF5QnVmZmVyVmlldyhSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIGNvbnN1bWVU
ZXh0KFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgY29uc3VtZUJsb2IoRmV0Y2hC
b2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIFR5cGUgbV90eXBlIHsg
VHlwZTo6Tm9uZSB9OwogICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlOwpAQCAtMTEyLDcgKzExMiw3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIAogICAgIEZldGNoQm9keUNvbnN1bWVy
IG1fY29uc3VtZXIgeyBGZXRjaEJvZHlDb25zdW1lcjo6VHlwZTo6Tm9uZSB9OwotICAgIE9wdGlv
bmFsPERlZmVycmVkV3JhcHBlcj4gbV9jb25zdW1lUHJvbWlzZTsKKyAgICBSZWZQdHI8RGVmZXJy
ZWRXcmFwcGVyPiBtX2NvbnN1bWVQcm9taXNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlD
b25zdW1lci5jcHAJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwyMCArNTks
MjAgQEAgc3RhdGljIFN0cmluZyB0ZXh0RnJvbVVURjgoY29uc3QgdW5zaWduZQogICAgIHJldHVy
biBkZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBGZXRjaEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhE
YXRhKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBGZXRjaEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhEYXRh
KFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBU
eXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
cHJvbWlzZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlC
dWZmZXIoV1RGTW92ZShwcm9taXNlKSwgZGF0YSwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgVHlwZTo6QmxvYjoKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlV2l0aE5ld2x5Q3Jl
YXRlZChibG9iRnJvbURhdGEoZGF0YSwgbGVuZ3RoLCBtX2NvbnRlbnRUeXBlKSk7CisgICAgICAg
IHByb21pc2UtPnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKGJsb2JGcm9tRGF0YShkYXRhLCBsZW5n
dGgsIG1fY29udGVudFR5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6SlNP
TjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoSlNPTihwcm9taXNlLCB0ZXh0RnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oV1RGTW92ZShw
cm9taXNlKSwgdGV4dEZyb21VVEY4KGRhdGEsIGxlbmd0aCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAgICBwcm9taXNlLnJlc29sdmUodGV4dEZyb21VVEY4
KGRhdGEsIGxlbmd0aCkpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKHRleHRGcm9tVVRGOChk
YXRhLCBsZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6Tm9uZToKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04MCwyMSArODAsMjEgQEAgdm9pZCBGZXRj
aEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhEYXRhKAogICAgIH0KIH0KIAotdm9pZCBGZXRjaEJv
ZHlDb25zdW1lcjo6cmVzb2x2ZShEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNo
Qm9keUNvbnN1bWVyOjpyZXNvbHZlKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsK
ICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBUeXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRo
QXJyYXlCdWZmZXIocHJvbWlzZSwgdGFrZUFzQXJyYXlCdWZmZXIoKS5nZXQoKSk7CisgICAgICAg
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1vdmUocHJvbWlzZSksIHRha2VBc0Fy
cmF5QnVmZmVyKCkuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpCbG9i
OgotICAgICAgICBwcm9taXNlLnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKHRha2VBc0Jsb2IoKSk7
CisgICAgICAgIHByb21pc2UtPnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKHRha2VBc0Jsb2IoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OkpTT046Ci0gICAgICAgIGZ1bGZpbGxQ
cm9taXNlV2l0aEpTT04ocHJvbWlzZSwgdGFrZUFzVGV4dCgpKTsKKyAgICAgICAgZnVsZmlsbFBy
b21pc2VXaXRoSlNPTihXVEZNb3ZlKHByb21pc2UpLCB0YWtlQXNUZXh0KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAgICBwcm9taXNlLnJlc29sdmUodGFr
ZUFzVGV4dCgpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZSh0YWtlQXNUZXh0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpOb25lOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29u
c3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
Qm9keUNvbnN1bWVyLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFuKCkgeyBtX2J1ZmZlciA9IG51bGxwdHI7IH0K
IAotICAgIHZvaWQgcmVzb2x2ZShEZWZlcnJlZFdyYXBwZXImKTsKLSAgICB2b2lkIHJlc29sdmVX
aXRoRGF0YShEZWZlcnJlZFdyYXBwZXImLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQp
OworICAgIHZvaWQgcmVzb2x2ZShSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIHJl
c29sdmVXaXRoRGF0YShSZWY8RGVmZXJyZWRXcmFwcGVyPiYmLCBjb25zdCB1bnNpZ25lZCBjaGFy
KiwgdW5zaWduZWQpOwogCiAgICAgYm9vbCBoYXNEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2J1
ZmZlcjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
Qm9keU93bmVyLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcwICs3MCw3
MCBAQCBib29sIEZldGNoQm9keU93bmVyOjppc0Rpc3R1cmJlZCgpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEZldGNoQm9keU93bmVyOjphcnJheUJ1ZmZlcihEZWZlcnJlZFdy
YXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6YXJyYXlCdWZmZXIoUmVmPERl
ZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIGlmIChtX2JvZHkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHByb21pc2UsIG51bGxwdHIs
IDApOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihXVEZNb3ZlKHByb21p
c2UpLCBudWxscHRyLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNEaXN0
dXJiZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAgICBw
cm9taXNlLT5yZWplY3QoVHlwZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBt
X2lzRGlzdHVyYmVkID0gdHJ1ZTsKICAgICBtX2JvZHkuYXJyYXlCdWZmZXIoKnRoaXMsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keU93bmVyOjpibG9iKERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keU93bmVyOjpibG9iKFJlZjxEZWZlcnJlZFdy
YXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAobV9ib2R5LmlzRW1wdHkoKSkgewotICAgICAg
ICBwcm9taXNlLnJlc29sdmUoQmxvYjo6Y3JlYXRlKCkpOworICAgICAgICBwcm9taXNlLT5yZXNv
bHZlKEJsb2I6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNE
aXN0dXJiZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoVHlwZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBtX2lzRGlzdHVyYmVkID0gdHJ1ZTsKICAgICBtX2JvZHkuYmxvYigqdGhpcywgV1RGTW92ZShw
cm9taXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5T3duZXI6OmZvcm1EYXRhKERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keU93bmVyOjpmb3JtRGF0YShSZWY8RGVmZXJy
ZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcHJvbWlzZS5yZWplY3QoMCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdCgwKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNEaXN0dXJiZWQoKSkgewotICAgICAgICBw
cm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoVHlwZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2lzRGlzdHVyYmVkID0gdHJ1ZTsK
ICAgICBtX2JvZHkuZm9ybURhdGEoKnRoaXMsIFdURk1vdmUocHJvbWlzZSkpOwogfQogCi12b2lk
IEZldGNoQm9keU93bmVyOjpqc29uKERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIEZl
dGNoQm9keU93bmVyOjpqc29uKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAg
ICBpZiAobV9ib2R5LmlzRW1wdHkoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChTWU5UQVhf
RVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChpc0Rpc3R1cmJlZCgpKSB7Ci0gICAgICAgIHByb21pc2UucmVq
ZWN0KFR5cGVFcnJvcik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChUeXBlRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIG1faXNEaXN0dXJiZWQgPSB0cnVlOwogICAgIG1fYm9k
eS5qc29uKCp0aGlzLCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHlPd25l
cjo6dGV4dChEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6
dGV4dChSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKFN0cmluZygpKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVzb2x2ZShTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKGlzRGlzdHVyYmVkKCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yKTsK
KyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFR5cGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV9pc0Rpc3R1cmJlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5oCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDExICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRXhwb3NlZCBCb2R5IEFQSQogICAg
IGJvb2wgaXNEaXN0dXJiZWQoKSBjb25zdDsKIAotICAgIHZvaWQgYXJyYXlCdWZmZXIoRGVmZXJy
ZWRXcmFwcGVyJiYpOwotICAgIHZvaWQgYmxvYihEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9p
ZCBmb3JtRGF0YShEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9pZCBqc29uKERlZmVycmVkV3Jh
cHBlciYmKTsKLSAgICB2b2lkIHRleHQoRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgYXJy
YXlCdWZmZXIoUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CisgICAgdm9pZCBibG9iKFJlZjxEZWZl
cnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgZm9ybURhdGEoUmVmPERlZmVycmVkV3JhcHBlcj4m
Jik7CisgICAgdm9pZCBqc29uKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgdGV4
dChSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIHZvaWQgbG9hZEJsb2IoQmxvYiYsIEZl
dGNoQm9keUNvbnN1bWVyKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDcgKzIwNiw3IEBAIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6c3RvcCgpCiAgICAg
ICAgIG1fbG9hZGVyLT5zdG9wKCk7CiB9CiAKLXZvaWQgRmV0Y2hSZXNwb25zZTo6Y29uc3VtZSh1
bnNpZ25lZCB0eXBlLCBEZWZlcnJlZFdyYXBwZXImJiB3cmFwcGVyKQordm9pZCBGZXRjaFJlc3Bv
bnNlOjpjb25zdW1lKHVuc2lnbmVkIHR5cGUsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgd3JhcHBl
cikKIHsKICAgICBBU1NFUlQodHlwZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmV0Y2hCb2R5
Q29uc3VtZXI6OlR5cGU6OlRleHQpKTsKIApAQCAtMjQxLDkgKzI0MSw5IEBAIHZvaWQgRmV0Y2hS
ZXNwb25zZTo6Y29uc3VtZUNodW5rKFJlZjxKU0MKICAgICBtX2NvbnN1bWVyLmFwcGVuZChjaHVu
ay0+ZGF0YSgpLCBjaHVuay0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotdm9pZCBGZXRjaFJlc3BvbnNl
OjpmaW5pc2hDb25zdW1pbmdTdHJlYW0oRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQg
RmV0Y2hSZXNwb25zZTo6ZmluaXNoQ29uc3VtaW5nU3RyZWFtKFJlZjxEZWZlcnJlZFdyYXBwZXI+
JiYgcHJvbWlzZSkKIHsKLSAgICBtX2NvbnN1bWVyLnJlc29sdmUocHJvbWlzZSk7CisgICAgbV9j
b25zdW1lci5yZXNvbHZlKFdURk1vdmUocHJvbWlzZSkpOwogfQogCiB2b2lkIEZldGNoUmVzcG9u
c2U6OmNvbnN1bWVCb2R5QXNTdHJlYW0oKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwx
MSArNjAsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEZldGNoUHJvbWlzZSA9IERPTVByb21pc2U8
RmV0Y2hSZXNwb25zZT47CiAgICAgc3RhdGljIHZvaWQgZmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEZldGNoUmVxdWVzdCYsIEZldGNoUHJvbWlzZSYmKTsKIAotICAgIHZvaWQgY29uc3Vt
ZSh1bnNpZ25lZCwgRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgY29uc3VtZSh1bnNpZ25l
ZCwgUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogICAg
IHZvaWQgc3RhcnRDb25zdW1pbmdTdHJlYW0odW5zaWduZWQpOwogICAgIHZvaWQgY29uc3VtZUNo
dW5rKFJlZjxKU0M6OlVpbnQ4QXJyYXk+JiYpOwotICAgIHZvaWQgZmluaXNoQ29uc3VtaW5nU3Ry
ZWFtKERlZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lkIGZpbmlzaENvbnN1bWluZ1N0cmVhbShS
ZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRTdGF0dXMoaW50
LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvV29ya2VyR2xvYmFsU2NvcGVGZXRjaC5jcHAJKHJl
dmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvV29ya2VyR2xv
YmFsU2NvcGVGZXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFdvcmtlckdsb2JhbFNjb3BlRmV0Y2g6OmZldGNoKFdv
cmtlckdsb2JhbFNjb3BlJiBzY29wZSwgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBEZWZlcnJlZFdy
YXBwZXImJiBwcm9taXNlKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZUZldGNoOjpmZXRjaChXb3Jr
ZXJHbG9iYWxTY29wZSYgc2NvcGUsIEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgUmVmPERlZmVycmVk
V3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIGlmICghc2NvcGUuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guaAkocmV2aXNpb24gMjA1MjIy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRmV0Y2hSZXF1ZXN0Owog
CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZUZldGNoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBmZXRjaChXb3JrZXJHbG9iYWxTY29wZSYsIEZldGNoUmVxdWVzdCYsIERlZmVycmVkV3JhcHBl
ciYmKTsKKyAgICBzdGF0aWMgdm9pZCBmZXRjaChXb3JrZXJHbG9iYWxTY29wZSYsIEZldGNoUmVx
dWVzdCYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oCShyZXZpc2lvbiAyMDUyMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIk1lZGlh
RGV2aWNlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDk0MSw3ICs0OTQxLDcgQEAKIAkJQjVCN0ExNzAxN0MxMEFBODAwRTRBQTBBIC8qIEVsZW1lbnRE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
QjdBMTZGMTdDMTA4MDYwMEU0QUEwQSAvKiBFbGVtZW50RGF0YS5jcHAgKi87IH07CiAJCUI1QjdB
MTcxMTdDMTBBQzAwMEU0QUEwQSAvKiBFbGVtZW50RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVCN0ExNkUxN0MxMDQ4MDAwRTRBQTBBIC8qIEVs
ZW1lbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY4MTFD
RjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAgKi87IH07Ci0JCUI1RDMxREZC
MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8q
IEFjdGl2ZURPTUNhbGxiYWNrLmggKi87IH07CisJCUI1RDMxREZCMTFDRjYxMEIwMDlGMjJCNCAv
KiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjY1
NjYyNzAxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1
QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggKi87IH07CiAJCUI2NThGRkExMTUyMkVGM0EwMERENTU5
NSAvKiBKU1JhZGlvTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY1OEZGOUYxNTIyRUYzQTAwREQ1NTk1IC8qIEpTUmFkaW9Ob2RlTGlz
dC5jcHAgKi87IH07CiAJCUI2NThGRkEyMTUyMkVGM0EwMERENTU5NSAvKiBKU1JhZGlvTm9kZUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NThG
RkEwMTUyMkVGM0EwMERENTU5NSAvKiBKU1JhZGlvTm9kZUxpc3QuaCAqLzsgfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNNZWRpYVN0cmVhbS5oIgpAQCAtNjEsNiArNjIsMTAg
QEAgSlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KFZNJgogewogfQogCitKU0RP
TUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2JqZWN0KCkKK3sKK30KKwogdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihjZWxsKS0+SlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUdsb2JhbE9i
amVjdCgpOwpAQCAtMTY3LDYgKzE3Miw5IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlMKICAgICBmb3IgKGF1dG8mIGNvbnN0cnVjdG9yIDogdGhpc09iamVjdC0+Y29u
c3RydWN0b3JzKCkudmFsdWVzKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZjb25zdHJ1Y3Rv
cik7CiAKKyAgICBmb3IgKGF1dG8mIGRlZmVycmVkV3JhcHBlciA6IHRoaXNPYmplY3QtPmRlZmVy
cmVkV3JhcHBlcnMoKSkKKyAgICAgICAgZGVmZXJyZWRXcmFwcGVyLT52aXNpdERlZmVycmVkKHZp
c2l0b3IpOworCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlz
aXQodmlzaXRvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBEZWZlcnJlZFdyYXBw
ZXI7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRE9N
V3JhcHBlcldvcmxkOwpAQCAtNDEsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OldyaXRlQmFycmll
cjxKU0M6OlN0cnVjdHVyZT4+IEpTRE9NU3RydWN0dXJlTWFwOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBKU0M6OkNsYXNzSW5mbyosIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+
PiBKU0RPTUNvbnN0cnVjdG9yTWFwOworICAgIHR5cGVkZWYgSGFzaFNldDxEZWZlcnJlZFdyYXBw
ZXIqPiBEZWZlcnJlZFdyYXBwZXJTZXQ7CiAKICAgICBjbGFzcyBXRUJDT1JFX0VYUE9SVCBKU0RP
TUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0M6OkpTR2xvYmFsT2JqZWN0IHsKICAgICAgICAgdHlw
ZWRlZiBKU0M6OkpTR2xvYmFsT2JqZWN0IEJhc2U7CkBAIC01Niw2ICs1OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMoKSB7IHJl
dHVybiBtX3N0cnVjdHVyZXM7IH0KICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29uc3Ry
dWN0b3JzKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcnM7IH0KIAorICAgICAgICBEZWZlcnJlZFdy
YXBwZXJTZXQmIGRlZmVycmVkV3JhcHBlcnMoKSB7IHJldHVybiBtX2RlZmVycmVkV3JhcHBlcnM7
IH0KKwogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBl
YXNpZXIuCkBAIC03NSw2ICs3OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHB1YmxpYzoKKyAgICAgICAg
fkpTRE9NR2xvYmFsT2JqZWN0KCk7CisKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiBpbmZvKCkgeyByZXR1cm4gJnNfaW5mbzsgfQogCiAgICAgICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQpAQCAtODUsNiArOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCBtX3N0cnVjdHVyZXM7CiAgICAgICAgIEpTRE9N
Q29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3RvcnM7CisgICAgICAgIERlZmVycmVkV3JhcHBlclNl
dCBtX2RlZmVycmVkV3JhcHBlcnM7CiAKICAgICAgICAgRXZlbnQqIG1fY3VycmVudEV2ZW50Owog
ICAgICAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxNiArMzUsMzEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1EZWZlcnJlZFdyYXBwZXI6OkRlZmVycmVkV3JhcHBlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChleGVjLT52bSgpLCBnbG9iYWxP
YmplY3QpCi0gICAgLCBtX2RlZmVycmVkKGV4ZWMtPnZtKCksIHByb21pc2VEZWZlcnJlZCkKK0Rl
ZmVycmVkV3JhcHBlcjo6RGVmZXJyZWRXcmFwcGVyKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCisg
ICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAsIG1fZGVmZXJyZWQocHJvbWlzZURlZmVycmVkKQorICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLndyaXRl
QmFycmllcihnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7CisgICAgbV9nbG9iYWxPYmpl
Y3QtPmRlZmVycmVkV3JhcHBlcnMoKS5hZGQodGhpcyk7CiB9CiAKLUpTRE9NR2xvYmFsT2JqZWN0
JiBEZWZlcnJlZFdyYXBwZXI6Omdsb2JhbE9iamVjdCgpIGNvbnN0CitEZWZlcnJlZFdyYXBwZXI6
On5EZWZlcnJlZFdyYXBwZXIoKQogewotICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7Ci0gICAg
cmV0dXJuICptX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICBjbGVhcigpOworfQorCit2b2lkIERl
ZmVycmVkV3JhcHBlcjo6Y2xlYXIoKQoreworICAgIEFTU0VSVCghbV9kZWZlcnJlZCB8fCBtX2ds
b2JhbE9iamVjdCk7CisgICAgaWYgKG1fZGVmZXJyZWQgJiYgbV9nbG9iYWxPYmplY3QpCisgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0LT5kZWZlcnJlZFdyYXBwZXJzKCkucmVtb3ZlKHRoaXMpOworICAg
IG1fZGVmZXJyZWQuY2xlYXIoKTsKK30KKwordm9pZCBEZWZlcnJlZFdyYXBwZXI6OmNvbnRleHRE
ZXN0cm95ZWQoKQoreworICAgIGNsZWFyKCk7CiB9CiAKIEpTQzo6SlNWYWx1ZSBEZWZlcnJlZFdy
YXBwZXI6OnByb21pc2UoKSBjb25zdApAQCAtNTUsNiArNzAsOSBAQCBKU0M6OkpTVmFsdWUgRGVm
ZXJyZWRXcmFwcGVyOjpwcm9taXNlKCkgCiAKIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpjYWxsRnVu
Y3Rpb24oRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uLCBKU1ZhbHVlIHJlc29sdXRp
b24pCiB7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQorICAgICAgICByZXR1cm47CisK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBl
OjpOb25lKTsKQEAgLTY0LDEyICs4MiwxNCBAQCB2b2lkIERlZmVycmVkV3JhcHBlcjo6Y2FsbEZ1
bmN0aW9uKEV4ZWNTCiAKICAgICBjYWxsKCZleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwogCi0gICAgbV9nbG9iYWxPYmplY3QuY2xl
YXIoKTsKLSAgICBtX2RlZmVycmVkLmNsZWFyKCk7CisgICAgY2xlYXIoKTsKIH0KIAogdm9pZCBE
ZWZlcnJlZFdyYXBwZXI6OnJlamVjdChFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QpOwogICAgIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC04
NSw3ICsxMDUsNyBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAg
ICAgSlNWYWx1ZSBlcnJvciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgIHN0YXRl
LmNsZWFyRXhjZXB0aW9uKCk7CiAKLSAgICBEZWZlcnJlZFdyYXBwZXIoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCAmcHJvbWlzZURlZmVycmVkKS5yZWplY3QoZXJyb3IpOworICAgIERlZmVycmVkV3Jh
cHBlcjo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgJnByb21pc2VEZWZlcnJlZCktPnJl
amVjdChlcnJvcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIHBhcnNlQXNKU09O
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQpAQCAtOTQsMjcgKzEx
NCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBwYXJzZUFzSlNPTihKCiAgICAgcmV0
dXJuIEpTQzo6SlNPTlBhcnNlKHN0YXRlLCBkYXRhKTsKIH0KIAotdm9pZCBmdWxmaWxsUHJvbWlz
ZVdpdGhKU09OKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSwgY29uc3QgU3RyaW5nJiBkYXRhKQor
dm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlz
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHBhcnNl
QXNKU09OKHByb21pc2UuZ2xvYmFsT2JqZWN0KCkuZ2xvYmFsRXhlYygpLCBkYXRhKTsKKyAgICBK
U0M6OkpTVmFsdWUgdmFsdWUgPSBwYXJzZUFzSlNPTihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBkYXRhKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICBwcm9taXNlLnJl
amVjdChTWU5UQVhfRVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFNZTlRBWF9FUlIpOwog
ICAgIGVsc2UKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHZhbHVlKTsKKyAgICAgICAgcHJvbWlz
ZS0+cmVzb2x2ZSh2YWx1ZSk7CiB9CiAKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZm
ZXIoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlLCBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpCit2
b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYg
cHJvbWlzZSwgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQogewogICAgIGlmICghYXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3Q8SlNWYWx1ZT4oY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihwcm9taXNlLmdsb2JhbE9iamVjdCgpLmdsb2JhbEV4ZWMoKSkpOworICAgICAgICBwcm9t
aXNlLT5yZWplY3Q8SlNWYWx1ZT4oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihwcm9taXNlLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
cHJvbWlzZS5yZXNvbHZlKGFycmF5QnVmZmVyKTsKKyAgICBwcm9taXNlLT5yZXNvbHZlKGFycmF5
QnVmZmVyKTsKIH0KIAotdm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihEZWZlcnJl
ZFdyYXBwZXImIHByb21pc2UsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit2b2lk
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJv
bWlzZSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBmdWxmaWxsUHJv
bWlzZVdpdGhBcnJheUJ1ZmZlcihwcm9taXNlLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEs
IGxlbmd0aCkuZ2V0KCkpOworICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1v
dmUocHJvbWlzZSksIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
CShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBKU0RPTVBy
b21pc2VfaAogI2RlZmluZSBKU0RPTVByb21pc2VfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFwL1N0cm9u
Z0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg+CkBAIC05
NSw5ICs5NiwxNCBAQCBzdHJ1Y3QgUHJvbWlzZVJlc3VsdEluc3BlY3RvcjxET01DbGFzcywgCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHBhc3NCeUNvbnN0UmVmID0gZmFsc2U7CiB9OwogCi1j
bGFzcyBEZWZlcnJlZFdyYXBwZXIgeworY2xhc3MgRGVmZXJyZWRXcmFwcGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8RGVmZXJyZWRXcmFwcGVyPiwgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKIHB1
YmxpYzoKLSAgICBEZWZlcnJlZFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqKTsKKyAgICBzdGF0aWMgUmVmPERlZmVycmVk
V3JhcHBlcj4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGVmZXJyZWQpKTsKKyAgICB9CisKKyAgICB+RGVmZXJyZWRXcmFwcGVyKCk7CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBSZXNvbHZlUmVzdWx0VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8UHJvbWlzZVJlc3VsdEluc3BlY3RvcjxSZXNvbHZlUmVzdWx0VHlwZT46OnBhc3NCeVZh
bHVlLCB2b2lkPjo6dHlwZQogICAgIHJlc29sdmUoUmVzb2x2ZVJlc3VsdFR5cGUgcmVzdWx0KSB7
IHJlc29sdmVXaXRoVmFsdWUocmVzdWx0KTsgfQpAQCAtMTIxLDEwICsxMjcsMTkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCByZWplY3QoRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJiA9IHsgfSk7
CiAKLSAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KCkgY29uc3Q7CiAgICAgSlND
OjpKU1ZhbHVlIHByb21pc2UoKSBjb25zdDsKIAorICAgIGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJl
dHVybiAhbV9kZWZlcnJlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBl
ciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3Vz
cGVuZGVkLgorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBt
X2dsb2JhbE9iamVjdC5nZXQoKTsgfQorCisgICAgdm9pZCB2aXNpdERlZmVycmVkKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFdlYWsoJm1fZGVm
ZXJyZWQpOyB9CisKIHByaXZhdGU6CisgICAgRGVmZXJyZWRXcmFwcGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKik7CisKKyAgICB2
b2lkIGNsZWFyKCk7CisgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgb3ZlcnJpZGU7CisKICAg
ICB2b2lkIGNhbGxGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
biwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pOwogICAgIHZvaWQgcmVzb2x2ZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKSB7IGNhbGxGdW5jdGlvbihzdGF0
ZSwgbV9kZWZlcnJlZC0+cmVzb2x2ZSgpLCByZXNvbHV0aW9uKTsgfQogICAgIHZvaWQgcmVqZWN0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pIHsgY2FsbEZ1
bmN0aW9uKHN0YXRlLCBtX2RlZmVycmVkLT5yZWplY3QoKSwgcmVzb2x1dGlvbik7IH0KQEAgLTEz
MiwxMyArMTQ3LDEzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3MgUmVqZWN0UmVzdWx0
VHlwZT4gdm9pZCByZWplY3RXaXRoVmFsdWUoUmVqZWN0UmVzdWx0VHlwZSYmKTsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBSZXNvbHZlUmVzdWx0VHlwZT4gdm9pZCByZXNvbHZlV2l0aFZhbHVlKFJlc29s
dmVSZXN1bHRUeXBlJiYpOwogCi0gICAgSlNDOjpTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IG1f
Z2xvYmFsT2JqZWN0OwotICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ+IG1f
ZGVmZXJyZWQ7CisgICAgSlNDOjpXZWFrPEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ+IG1fZGVmZXJy
ZWQ7CisgICAgSlNDOjpXZWFrPEpTRE9NR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKIH07
CiAKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihEZWZlcnJlZFdyYXBwZXImLCBjb25zdCBT
dHJpbmcmKTsKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoRGVmZXJyZWRXcmFw
cGVyJiwgQXJyYXlCdWZmZXIqKTsKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
RGVmZXJyZWRXcmFwcGVyJiwgY29uc3Qgdm9pZCosIHNpemVfdCk7Cit2b2lkIGZ1bGZpbGxQcm9t
aXNlV2l0aEpTT04oUmVmPERlZmVycmVkV3JhcHBlcj4mJiwgY29uc3QgU3RyaW5nJik7Cit2b2lk
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYsIEFy
cmF5QnVmZmVyKik7Cit2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZl
cnJlZFdyYXBwZXI+JiYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogdm9pZCByZWplY3RQcm9taXNl
V2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OkpTUHJvbWlzZURlZmVycmVkJik7CiAKIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21p
c2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJv
bWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCopKQpA
QCAtMTU2LDI2ICsxNzEsMzEgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0
aW9uKAogdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgogY2xhc3MgRE9NUHJvbWlzZSB7CiBwdWJs
aWM6Ci0gICAgRE9NUHJvbWlzZShEZWZlcnJlZFdyYXBwZXImJiB3cmFwcGVyKSA6IG1fd3JhcHBl
cihXVEZNb3ZlKHdyYXBwZXIpKSB7IH0KKyAgICBET01Qcm9taXNlKFJlZjxEZWZlcnJlZFdyYXBw
ZXI+JiYgd3JhcHBlcikKKyAgICAgICAgOiBtX3dyYXBwZXIoV1RGTW92ZSh3cmFwcGVyKSkKKyAg
ICB7CisgICAgfQorCiAgICAgRE9NUHJvbWlzZShET01Qcm9taXNlJiYgcHJvbWlzZSkgOiBtX3dy
YXBwZXIoV1RGTW92ZShwcm9taXNlLm1fd3JhcHBlcikpIHsgfQogCiAgICAgRE9NUHJvbWlzZShj
b25zdCBET01Qcm9taXNlJikgPSBkZWZhdWx0OwogICAgIERPTVByb21pc2UmIG9wZXJhdG9yPShE
T01Qcm9taXNlIGNvbnN0JikgPSBkZWZhdWx0OwogCi0gICAgdm9pZCByZXNvbHZlKHR5cGVuYW1l
IFByb21pc2VSZXN1bHRJbnNwZWN0b3I8VmFsdWU+OjpUeXBlIHZhbHVlKSB7IG1fd3JhcHBlci5y
ZXNvbHZlKHZhbHVlKTsgfQorICAgIHZvaWQgcmVzb2x2ZSh0eXBlbmFtZSBQcm9taXNlUmVzdWx0
SW5zcGVjdG9yPFZhbHVlPjo6VHlwZSB2YWx1ZSkgeyBtX3dyYXBwZXItPnJlc29sdmUodmFsdWUp
OyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBFcnJvclR5cGU+IHZvaWQgcmVqZWN0KEVy
cm9yVHlwZSYmLi4uIGVycm9yKSB7IG1fd3JhcHBlci5yZWplY3Qoc3RkOjpmb3J3YXJkPEVycm9y
VHlwZT4oZXJyb3IpLi4uKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEVycm9yVHlwZT4g
dm9pZCByZWplY3QoRXJyb3JUeXBlJiYuLi4gZXJyb3IpIHsgbV93cmFwcGVyLT5yZWplY3Qoc3Rk
Ojpmb3J3YXJkPEVycm9yVHlwZT4oZXJyb3IpLi4uKTsgfQogCiAgICAgRGVmZXJyZWRXcmFwcGVy
JiBkZWZlcnJlZFdyYXBwZXIoKSB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToKLSAg
ICBEZWZlcnJlZFdyYXBwZXIgbV93cmFwcGVyOworICAgIFJlZjxEZWZlcnJlZFdyYXBwZXI+IG1f
d3JhcHBlcjsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIFJlc29sdmVSZXN1bHRUeXBlPgogaW5saW5l
IHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlV2l0aFZhbHVlKFJlc29sdmVSZXN1bHRUeXBl
JiYgcmVzdWx0KQogewotICAgIEFTU0VSVChtX2RlZmVycmVkKTsKKyAgICBpZiAoaXNTdXNwZW5k
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKQEAgLTE4NSw2ICsyMDUsOCBAQCBpbmxp
bmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoCiB0ZW1wbGF0ZTxjbGFzcyBSZXNv
bHZlUmVzdWx0VHlwZT4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZVdpdGhO
ZXdseUNyZWF0ZWQoUmVmPFJlc29sdmVSZXN1bHRUeXBlPiYmIHJlc3VsdCkKIHsKKyAgICBpZiAo
aXNTdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsK
ICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTE5NSw2ICsyMTcsOCBAQCBpbmxpbmUg
dm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoCiB0ZW1wbGF0ZTxjbGFzcyBSZWplY3RS
ZXN1bHRUeXBlPgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3RXaXRoVmFsdWUo
UmVqZWN0UmVzdWx0VHlwZSYmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9i
YWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKQEAgLTIwNSw2ICsyMjksOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBw
ZXI6OnJlamVjdFdpdGhWCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoYm9vbCByZXN1bHQpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAg
IHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2Jq
ZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CkBAIC0yMTUsNiArMjQxLDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKGJvbwogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNv
bHZlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKQEAgLTIyNSw2ICsyNTMsOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoSlNDCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
amVjdChKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFs
T2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CkBAIC0yMzUsNiArMjY1LDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVy
OjpyZWplY3QoSlNDOgogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKHN0ZDo6bnVsbHB0cl90KQogeworICAgIGlmIChpc1N1c3BlbmRlZCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFTU0VSVChtX2dsb2JhbE9i
amVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwpAQCAtMjQ1LDYgKzI3Nyw4IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6
cmVzb2x2ZShzdGQKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0KHN0ZDo6bnVsbHB0cl90KQogeworICAgIGlmIChpc1N1c3BlbmRlZCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVj
dCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwpAQCAtMjU1LDYgKzI4OSw4IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0KHN0ZDoKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2
ZShjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKQEAgLTI2NSw2ICszMDEsOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoY29uCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
amVjdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9i
YWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRm9udEZhY2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRm9u
dEZhY2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZvbnRGYWNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQCBKU0M6OkpTVmFsdWUgSlNGb250RmFjZTo6bG9hZGVkKEpTQzo6RXhlCiB7CiAgICAgaWYg
KCFtX2xvYWRlZCkgewogICAgICAgICBpZiAoIXdyYXBwZWQoKS5wcm9taXNlKCkpIHsKLSAgICAg
ICAgICAgIERlZmVycmVkV3JhcHBlciBwcm9taXNlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIEpT
Qzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKSk7Ci0g
ICAgICAgICAgICBtX2xvYWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS5wcm9taXNl
KCkpOworICAgICAgICAgICAgUmVmPERlZmVycmVkV3JhcHBlcj4gcHJvbWlzZSA9IERlZmVycmVk
V3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIEpTQzo6SlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICBtX2xv
YWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS0+cHJvbWlzZSgpKTsKICAgICAgICAg
ICAgIHdyYXBwZWQoKS5yZWdpc3RlckxvYWRlZChXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2xvYWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgd3JhcHBl
ZCgpLnByb21pc2UoKS52YWx1ZSgpLmRlZmVycmVkV3JhcHBlcigpLnByb21pc2UoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNG
b250RmFjZVNldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogSlNDOjpKU1ZhbHVlIEpTRm9udEZhY2VTZXQ6OnJlYWR5KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVhZHkpIHsKLSAgICAgICAg
RGVmZXJyZWRXcmFwcGVyIHByb21pc2UoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgSlNDOjpKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAg
bV9yZWFkeS5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS5wcm9taXNlKCkpOworICAgICAg
ICBSZWY8RGVmZXJyZWRXcmFwcGVyPiBwcm9taXNlID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbV9yZWFkeS5zZXQoc3RhdGUudm0oKSwg
dGhpcywgcHJvbWlzZS0+cHJvbWlzZSgpKTsKICAgICAgICAgd3JhcHBlZCgpLnJlZ2lzdGVyUmVh
ZHkoV1RGTW92ZShwcm9taXNlKSk7CiAgICAgfQogICAgIHJldHVybiBtX3JlYWR5LmdldCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2Vz
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyArMzkx
LDcgQEAgSlNWYWx1ZSBKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKEV4ZQogICAgIGF1dG8g
YXVkaW9Db25zdHJhaW50cyA9IE1lZGlhQ29uc3RyYWludHNJbXBsOjpjcmVhdGUoV1RGTW92ZSht
YW5kYXRvcnlBdWRpb0NvbnN0cmFpbnRzKSwgV1RGTW92ZShhZHZhbmNlZEF1ZGlvQ29uc3RyYWlu
dHMpLCBhcmVBdWRpb0NvbnN0cmFpbnRzVmFsaWQpOwogICAgIGF1dG8gdmlkZW9Db25zdHJhaW50
cyA9IE1lZGlhQ29uc3RyYWludHNJbXBsOjpjcmVhdGUoV1RGTW92ZShtYW5kYXRvcnlWaWRlb0Nv
bnN0cmFpbnRzKSwgV1RGTW92ZShhZHZhbmNlZFZpZGVvQ29uc3RyYWludHMpLCBhcmVWaWRlb0Nv
bnN0cmFpbnRzVmFsaWQpOwogICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICB3cmFwcGVkKCkuZ2V0VXNlck1lZGlhKFdURk1vdmUoYXVkaW9Db25zdHJhaW50
cyksIFdURk1vdmUodmlkZW9Db25zdHJhaW50cyksIERlZmVycmVkV3JhcHBlcigmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpLCBlYyk7CisgICAgd3JhcHBlZCgpLmdldFVz
ZXJNZWRpYShXVEZNb3ZlKGF1ZGlvQ29uc3RyYWludHMpLCBXVEZNb3ZlKHZpZGVvQ29uc3RyYWlu
dHMpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAg
IHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2VD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KEV4CiAgICAg
bV9jb250cm9sbGVyLnNldChzdGF0ZS52bSgpLCBqc1NvdXJjZSwgc3RhdGUuYXJndW1lbnQoMCkp
OwogCiAgICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNDOjpK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIHdy
YXBwZWQoKS5zdGFydChSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKGNvbnRyb2xsZXIp
LCBEZWZlcnJlZFdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KSk7CisgICAgd3JhcHBlZCgpLnN0YXJ0KFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIo
Y29udHJvbGxlciksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21p
c2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3Vi
dGxlQ3J5cHRvOjplbmNyeXB0KEV4CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBw
ZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21p
c2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7
CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5v
bk51bGwoKSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRv
IGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVy
LnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAg
IH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTIyOSwxMiArMjI5LDEyIEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICB9CiAKICAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZl
cnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNr
ID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAg
ICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlciwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVy
KHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7
CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUg
ewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVq
ZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTI4
NCwxMiArMjg0LDEyIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MK
ICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJl
ZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQp
OworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1
dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVz
dWx0KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3Jh
cHBlciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9t
aXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3
cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAg
ICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OnZlcmlmeShFeGUKICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIg
PSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNl
RGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGJvb2wgcmVz
dWx0KSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CisgICAgICAg
IHdyYXBwZXItPnJlc29sdmUocmVzdWx0KTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVyZUNhbGxi
YWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxw
dHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMzkwLDEyICszOTAsMTIgQEAgSlNWYWx1ZSBKU1dlYktp
dFN1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZQogICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4g
d3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0o
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBmdWxmaWxs
UHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLCByZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6
ZSgpKTsKKyAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlci5yZWxl
YXNlTm9uTnVsbCgpLCByZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKICAgICB9OwogICAg
IGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdy
YXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgfTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNDQ0LDE3ICs0NDQsMTcg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZQogICAgIH0KIAogICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFw
cGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRy
PERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRvS2V5KiBrZXksIENyeXB0b0tleVBhaXIqIGtleVBhaXIp
IG11dGFibGUgewogICAgICAgICBBU1NFUlQoa2V5IHx8IGtleVBhaXIpOwogICAgICAgICBBU1NF
UlQoIWtleSB8fCAha2V5UGFpcik7CiAgICAgICAgIGlmIChrZXkpCi0gICAgICAgICAgICB3cmFw
cGVyLnJlc29sdmUoa2V5KTsKKyAgICAgICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgd3JhcHBlci5yZXNvbHZlKGtleVBhaXIpOworICAgICAg
ICAgICAgd3JhcHBlci0+cmVzb2x2ZShrZXlQYWlyKTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVy
ZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVqZWN0
KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTgxLDEyICs1ODEsMTIgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KAogICAgIH0KIAogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3Jh
cHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3Jh
cHBlcl0oQ3J5cHRvS2V5JiByZXN1bHQpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlc29s
dmUocmVzdWx0KTsKKyAgICAgICAgd3JhcHBlci0+cmVzb2x2ZShyZXN1bHQpOwogICAgIH07CiAg
ICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAg
d3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRy
KTsKICAgICB9OwogCiAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsIGRh
dGEsIFdURk1vdmUoYWxnb3JpdGhtKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgZXh0cmFjdGFibGUs
IGtleVVzYWdlcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxs
YmFjaykpOwpAQCAtNjUwLDEyICs2NTAsMTIgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0
bzo6ZXhwb3J0S2V5KAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdy
YXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwor
ICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8g
c3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0
KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBl
ciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNl
V2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEoKSwg
cmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFw
cGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAg
ICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBv
cnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBX
VEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwpAQCAtNzA2LDI1ICs3MDYsMjUgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgIH0KIAogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3Jh
cHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAKICAgICBhdXRvIGV4cG9ydFN1Y2Nlc3NDYWxsYmFj
ayA9IFtrZXlGb3JtYXQsIGFsZ29yaXRobSwgcGFyYW1ldGVycywgd3JhcHBpbmdLZXksIHdyYXBw
ZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZXhwb3J0ZWRLZXlEYXRhKSBtdXRhYmxlIHsKICAg
ICAgICAgYXV0byBlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZW5jcnlwdGVkRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmdWxmaWxs
UHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLCBlbmNyeXB0ZWREYXRhLmRhdGEoKSwgZW5j
cnlwdGVkRGF0YS5zaXplKCkpOworICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlC
dWZmZXIod3JhcHBlci5yZWxlYXNlTm9uTnVsbCgpLCBlbmNyeXB0ZWREYXRhLmRhdGEoKSwgZW5j
cnlwdGVkRGF0YS5zaXplKCkpOwogICAgICAgICB9OwogICAgICAgICBhdXRvIGVuY3J5cHRGYWls
dXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHdyYXBwZXIu
cmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwog
ICAgICAgICB9OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgYWxnb3Jp
dGhtLT5lbmNyeXB0Rm9yV3JhcEtleSgqcGFyYW1ldGVycywgKndyYXBwaW5nS2V5LCBzdGQ6Om1h
a2VfcGFpcihleHBvcnRlZEtleURhdGEuZGF0YSgpLCBleHBvcnRlZEtleURhdGEuc2l6ZSgpKSwg
V1RGTW92ZShlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlbmNyeXB0RmFpbHVyZUNh
bGxiYWNrKSwgZWMpOwogICAgICAgICBpZiAoZWMpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZXBvcnQgZmFpbHVyZSBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5n
IHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0
byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAgd3JhcHBl
ci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBleHBvcnRGYWlsdXJlQ2FsbGJhY2sgPSBb
d3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7Cisg
ICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRyKTsKICAgICB9OwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CkBAIC04MDksMjcgKzgwOSwyNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjp1bndyYXBLZXkoCiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVy
ID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKICAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUdsb2JhbE9iamVj
dChzdGF0ZS52bSgpLCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICBhdXRvIGRlY3J5cHRTdWNjZXNz
Q2FsbGJhY2sgPSBbZG9tR2xvYmFsT2JqZWN0LCBrZXlGb3JtYXQsIHVud3JhcHBlZEtleUFsZ29y
aXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVz
YWdlcywgd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewog
ICAgICAgICBhdXRvIGltcG9ydFN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShDcnlwdG9LZXkm
IGtleSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3cmFwcGVyLnJlc29sdmUoa2V5KTsKKyAgICAg
ICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5KTsKICAgICAgICAgfTsKICAgICAgICAgYXV0byBp
bXBvcnRGYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51
bGxwdHIpOwogICAgICAgICB9OwogICAgICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRvbUdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUs
IGtleUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSks
IHVud3JhcHBlZEtleUFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywg
ZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShpbXBvcnRTdWNjZXNzQ2FsbGJhY2spLCBX
VEZNb3ZlKGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOwogICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRldGFp
bHMgdG8gY29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhlcmUg
aXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9taXNl
IHJlamVjdCBmdW5jdGlvbnMuCiAgICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3cmFwcGVy
LT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBkZWNyeXB0
RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIu
cmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAg
fTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwNTIy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC00MTE0LDkgKzQxMTQsOSBAQCBzdWIgR2VuZXJhdGVSZXR1cm5Q
YXJhbWV0ZXJzCiAKICAgICBpZiAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikpIHsKICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKLSAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgIkRlZmVycmVkV3JhcHBlcihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHByb21pc2VEZWZlcnJlZCkiKTsKKyAgICAg
ICAgICAgIHB1c2goQGFyZ3VtZW50cywgIkRlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwg
cHJvbWlzZURlZmVycmVkKSIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChA
YXJndW1lbnRzLCAiRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKSIpOworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAi
RGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHVzaChAYXJndW1l
bnRzLCAiZWMiKSBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlJhaXNlc0V4Y2VwdGlvbiJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UifTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287496</attachid>
            <date>2016-08-31 00:03:33 -0700</date>
            <delta_ts>2016-08-31 09:40:09 -0700</delta_ts>
            <desc>CMake build fix attempt</desc>
            <filename>bug-161426-20160831000118.patch</filename>
            <type>text/plain</type>
            <size>60282</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAxNi0wOC0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBdm9pZCB1c2luZyBzdHJvbmcg
cmVmZXJlbmNlIGluIEpTRE9NUHJvbWlzZeKAmXMgRGVmZXJyZWRXcmFwcGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MjYKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI4MDkxMTIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgSlNDOjpTdHJvbmcgaW4gRGVmZXJyZWRXcmFwcGVyIGJ5
IEpTQzo6V2VhaywgYW5kIG1ha2UgdGhlIGdsb2JhbCBvYmplY3Qgb3duIEpTUHJvbWlzZURlZmVy
cmVkLgorCisgICAgICAgIERlZmVycmVkV3JhcHBlciBhZGRzIGl0c2VsZiB0byBKU0RPTUdsb2Jh
bE9iamVjdCdzIG5ld2x5IGFkZGVkIEhhc2hTZXQgd2hlbiBpdCdzIGNyZWF0ZWQgYW5kIGNsZWFy
cyBpdHNlbGYKKyAgICAgICAgZnJvbSB0aGUgSGFzaFNldCBpbnNpZGUgaXRzIGRlc3RydWN0b3Ig
YXMgd2VsbCBhcyB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICAg
ICAgICBUaGlzIGlzIHNvIHRoYXQgSlNET01HbG9iYWxPYmplY3QncyB2aXNpdENoaWxkcmVuIGNh
biB2aXNpdCBldmVyeSBsaXZlIERlZmVycmVkV3JhcHBlci4KKworICAgICAgICBCZWNhdXNlIHRo
aXMgb3BlcmF0aW9uIGlzIHJhdGhlciBleHBlbnNlLCB0aGlzIHBhdGNoIHR1cm5zIERlZmVycmVk
V3JhcHBlciBpbnRvIGEgUmVmQ291bnRlZCBvYmplY3QgdG8gYXZvaWQKKyAgICAgICAgSGFzaE1h
cCBjaHVybnMuIE1vc3Qgb2YgY29kZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggaXMgZHVlIHRvIHRo
aXMgdHlwZSBjaGFuZ2UsIGFuZCB0aGUgZmFjdCBsYW1iZGEgY2Fubm90CisgICAgICAgIGNhcHR1
cmUgUmVmPERlZmVycmVkV3JhcHBlcj4gc2luY2UgaXRzIGNvcHkgY29uc3RydWN0b3IgZG9lc24n
dCBleGlzdC4KKworICAgICAgICBXZSBhbHNvIGNyZWF0ZSBhIHdyaXRlIGJhcnJpZXIgZnJvbSB0
aGUgZ2xvYmFsIG9iamVjdCB0byBKU1Byb21pc2VEZWZlcnJlZCBzbyB0aGF0IHRoZXkgd29uJ3Qg
YmUgY29sbGVjdGVkCisgICAgICAgIGR1cmluZyBhbiBlZGVuIGNvbGxlY3Rpb24gd2hlbiBpdCBo
YXBwZW5zIGJlZm9yZSBKU0RPTUdsb2JhbE9iamVjdCdzIHZpc2l0Q2hpbGRyZW4gaXMgaW52b2tl
ZC4KKworICAgICAgICBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGVudGlyZSBET00g
d3JhcHBlciB3b3JsZCBvZiB0aGUgcHJvbWlzZSB0byBnbyBhd2F5IGJlZm9yZSB0aGUgcHJvbWlz
ZSBpcworICAgICAgICByZXNvbHZlZCBvciByZWplY3RlZCBieSBhIHJlZi1jb3VudGVkIEMrKyBv
YmplY3QuIEluIHRoaXMgY2FzZSwgbV9kZWZlcnJlZCBhbmQgbV9nbG9iYWxPYmplY3QgYmVjb21l
IGRlYWQuCisgICAgICAgIFZhcmlvdXMgbWVtYmVyIHJlc29sdmUqIGFuZCByZWplY3QgZnVuY3Rp
b25zIG9mIERlZmVycmVkV3JhcHBlciBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gY2hlY2sgdGhpcyBj
b25kaXRpb24uCisKKyAgICAgICAgQmVjYXVzZSBKU0RPTUdsb2JhbE9iamVjdCBjYW4gYmUgZmlu
YWxpemVkIGJlZm9yZSBEZWZlcnJlZFdyYXBwZXIgaXMgZmluYWxpemVkLiBEZWZlcnJlZFdyYXBw
ZXIncyBkZXN0cnVjdG9yLAorICAgICAgICB3aGljaCBjYWxscyBEZWZlcnJlZFdyYXBwZXI6OmNs
ZWFyLCBzaG91bGQgb25seSByZW1vdmUgaXRzZWxmIGZyb20gbV9nbG9iYWxPYmplY3Qgd2hlbiBt
X2dsb2JhbE9iamVjdCBpcyBhbGl2ZS4KKworICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1h
a2VzIERlZmVycmVkV3JhcHBlciBpbmhlcml0IGZyb20gQWN0aXZlRE9NQ2FsbGJhY2sgc28gdGhh
dCBpdCB3b24ndCB0cnkgdG8gZXhlY3V0ZSBzY3JpcHRzCisgICAgICAgIHdoZW4gdGhlIGFjdGl2
ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkOyBlLmcuIGFmdGVyIGEgcGFnZSBuYXZp
Z2F0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8g
YXV0aG9yL3VzZXIgdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIE1vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxl
UGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQpOgorICAgICAgICAqIE1v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRj
aC9ET01XaW5kb3dGZXRjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dGZXRjaDo6
ZmV0Y2gpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6YmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6Ompzb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmV0Y2hCb2R5Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmNvbnN1bWVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6bG9h
ZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmxvYWRpbmdTdWNjZWVk
ZWQpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
Y2xlYW5Db25zdW1lUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHkpOiBVc2Ug
UmVmUHRyPERlZmVycmVkV3JhcHBlcj4gaW5zdGVhZCBvZiBPcHRpb25hbDxEZWZlcnJlZFdyYXBw
ZXI+IG5vdyB0aGF0IERlZmVycmVkV3JhcHBlcgorICAgICAgICBpcyByZWYgY291bnRlZC4gUGVy
aGFwcyB3ZSBjb3VsZCB1c2UgT3B0aW9uYWw8UmVmPERlZmVycmVkV3JhcHBlcj4+IGhlcmUgYnV0
IHRoYXQgc2VlbWVkIHJhdGhlciB2ZXJib3NlLgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5Q29uc3VtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Q29uc3VtZXI6
OnJlc29sdmVXaXRoRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlDb25zdW1lcjo6
cmVzb2x2ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5oOgor
ICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5T3duZXI6OmFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keU93bmVyOjpibG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keU93bmVyOjpm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6anNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6dGV4dCk6CisgICAgICAgICogTW9kdWxlcy9m
ZXRjaC9GZXRjaEJvZHlPd25lci5oOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNw
b25zZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaFJlc3BvbnNlOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoUmVzcG9uc2U6OmZpbmlzaENvbnN1bWluZ1N0cmVhbSk6Cisg
ICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmg6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckdsb2JhbFNjb3BlRmV0Y2g6OmZldGNoKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL1dv
cmtlckdsb2JhbFNjb3BlRmV0Y2guaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2Jq
ZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbik6IEFkZGVkIHZpc2l0cyB0byBlYWNoIEpTUHJvbWlzZURlZmVycmVkIG93bmVkIGJ5
IHRoaXMgZ2xvYmFsIG9iamVjdC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmRlZmVycmVkV3Jh
cHBlcnMpOiBBZGRlZC4gVGhpcyBtYXAgaXMgb25seSB1c2VkIGJ5IEpTRE9NR2xvYmFsT2JqZWN0
J3MgdmlzaXRDaGlsZHJlbi4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpEZWZlcnJlZFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp+RGVmZXJyZWRXcmFwcGVyKTogQ2Fs
bHMgY2xlYXIuIFdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6
ZWQsCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgdGhlcmUg
aXMgbm8gbmVlZCB0byByZW1vdmUgaXRzZWxmIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuIFdoZW4g
bV9kZWZlcnJlZAorICAgICAgICBoYXMgYmVlbiBjbGVhcmVkLCBlaXRoZXIgY2xlYXIoKSBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCAoMSkgb3IgdGhlIGNhbGxiYWNrIGlzIGRlYWQgKDIpLiBTaW5j
ZSAoMikgaGFwcGVucyBvbmx5CisgICAgICAgIHdoZW4gdGhlIGdsb2JhbCBvYmplY3QgaXRzZWxm
IGlzIGRlYWQgKGFzIGl0cyB2aXNpdENoaWxkcmVuIHdvdWxkIGhhdmUgdmlzaXRlZCBtX2RlZmVy
cmVkIG90aGVyd2lzZSksIGFnYWluLCB0aGVyZQorICAgICAgICBpcyBubyBuZWVkIHRvIHJlbW92
ZSBpdHNlbGYgZnJvbSBnbG9iYWwgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRX
cmFwcGVyOjpjbGVhcik6IEFkZGVkLiBDbGVhcnMgbV9kZWZlcnJlZCBhbmQgcmVtb3ZlcyBpdHNl
bGYgZnJvbSBKU0RPTUdsb2JhbE9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3Jh
cHBlcjo6Y29udGV4dERlc3Ryb3llZCk6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaGFzIGJlZW4g
ZGVzdHJveWVkLiBXZSBtdXN0IGNhbGwgY2xlYXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkV3JhcHBlcjo6Y2FsbEZ1bmN0aW9uKTogQ2hlY2sgY2FuSW52b2tlQ2FsbGJhY2sgaW4gQWN0
aXZlRE9NQ2FsbGJhY2suCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRydWUuIFNlZSBiZWxvdy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZnVsZmlsbFByb21pc2VXaXRoSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpm
dWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjppc1N1c3BlbmRlZCk6
IEFkZGVkLiBSZXR1cm5zIHRydWUgaWZmIHRoZSBET00gd3JhcHBlciB3b3JsZCBoYXMgZ29uZSBh
d2F5IG9yIGFjdGl2ZSBET00KKyAgICAgICAgb2JqZWN0cyBoYXZlIGJlZW4gc3VzcGVuZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpnbG9iYWxPYmplY3QpOiBNYWRlIHRo
aXMgaW5saW5lLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjp2aXNpdERlZmVy
cmVkKTogQWRkZWQuIENhbGxlZCBieSBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbi4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2U6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NUHJvbWlzZTo6cmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBl
cjo6cmVzb2x2ZVdpdGhWYWx1ZSk6IEV4aXQgZWFybHkgd2hlbiBpc1N1c3BlbmRlZCgpIGlzIHRy
dWUuCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoTmV3bHlD
cmVhdGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dFdpdGhWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRm9udEZhY2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNGb250RmFjZTo6bG9hZGVkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRm9udEZh
Y2VTZXQ6OnJlYWR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1
YnRsZUNyeXB0bzo6dmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5
cHRvOjpkaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBv
cnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlUmV0dXJuUGFyYW1ldGVycyk6CisKIDIwMTYtMDgtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkICJnZXQiIHRvIEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMzLDcg
KzczMyw3IEBAIGJvb2wgQXBwbGVQYXlTZXNzaW9uOjpjYW5NYWtlUGF5bWVudHMoU2MKICAgICBy
ZXR1cm4gcGF5bWVudENvb3JkaW5hdG9yLmNhbk1ha2VQYXltZW50cygpOwogfQogCi12b2lkIEFw
cGxlUGF5U2Vzc2lvbjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXJjaGFu
dElkZW50aWZpZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBBcHBsZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHBhc2VzZFByb21p
c2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIERPTVdpbmRvdyYgd2luZG93
ID0gKmRvY3VtZW50LmRvbVdpbmRvdygpOwpAQCAtNzQ1LDEyICs3NDUsMTMgQEAgdm9pZCBBcHBs
ZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdAogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gcHJvbWlzZShXVEZNb3ZlKHBhc2VzZFByb21p
c2UpKTsKICAgICBpZiAoIXNob3VsZERpc2Nsb3NlQXBwbGVQYXlDYXBhYmlsaXR5KGRvY3VtZW50
KSkgewogICAgICAgICBhdXRvJiBwYXltZW50Q29vcmRpbmF0b3IgPSBkb2N1bWVudC5mcmFtZSgp
LT5tYWluRnJhbWUoKS5wYXltZW50Q29vcmRpbmF0b3IoKTsKICAgICAgICAgYm9vbCBjYW5NYWtl
UGF5bWVudHMgPSBwYXltZW50Q29vcmRpbmF0b3IuY2FuTWFrZVBheW1lbnRzKCk7CiAKICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm9taXNlLCBjYW5NYWtlUGF5bWVudHNdKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FuTWFrZVBheW1lbnRzKTsK
KyAgICAgICAgICAgIHByb21pc2UtPnJlc29sdmUoY2FuTWFrZVBheW1lbnRzKTsKICAgICAgICAg
fSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03NTgsNyArNzU5LDcgQEAgdm9pZCBBcHBs
ZVBheVNlc3Npb246OmNhbk1ha2VQYXltZW50c1dpdAogICAgIGF1dG8mIHBheW1lbnRDb29yZGlu
YXRvciA9IGRvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLnBheW1lbnRDb29yZGluYXRvcigp
OwogCiAgICAgcGF5bWVudENvb3JkaW5hdG9yLmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJk
KG1lcmNoYW50SWRlbnRpZmllciwgZG9jdW1lbnQuZG9tYWluKCksIFtwcm9taXNlXShib29sIGNh
bk1ha2VQYXltZW50cykgbXV0YWJsZSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZShjYW5NYWtl
UGF5bWVudHMpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGNhbk1ha2VQYXltZW50cyk7CiAg
ICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQ
YXlTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBh
eS9BcHBsZVBheVNlc3Npb24uaAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1ZlcnNpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIHVuc2lnbmVkIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICBzdGF0aWMgYm9vbCBjYW5NYWtlUGF5bWVudHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgdm9pZCBjYW5NYWtlUGF5bWVudHNXaXRoQWN0
aXZlQ2FyZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBtZXJjaGFudElk
ZW50aWZpZXIsIERlZmVycmVkV3JhcHBlciYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IHZvaWQgY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBSZWY8RGVmZXJyZWRXcmFwcGVy
PiYmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGJlZ2luKEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guY3BwCShyZXZpc2lvbiAyMDUyMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
RE9NV2luZG93RmV0Y2g6OmZldGNoKERPTVdpbmRvdyYgd2luZG93LCBGZXRjaFJlcXVlc3QmIHJl
cXVlc3QsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIERPTVdpbmRvd0ZldGNoOjpm
ZXRjaChET01XaW5kb3cmIHdpbmRvdywgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBET01Qcm9taXNl
PEZldGNoUmVzcG9uc2U+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAoIXdpbmRvdy5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0RPTVdpbmRvd0ZldGNoLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRE9NV2luZG93RmV0Y2guaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgRU5BQkxFKEZFVENIX0FQSSkKIAorI2luY2x1ZGUg
IkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM4LDEwICszOSwxMSBAQCBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBEZWZl
cnJlZFdyYXBwZXI7CiBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRmV0Y2hSZXF1ZXN0OworY2xh
c3MgRmV0Y2hSZXNwb25zZTsKIAogY2xhc3MgRE9NV2luZG93RmV0Y2ggewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGZldGNoKERPTVdpbmRvdyYsIEZldGNoUmVxdWVzdCYsIERlZmVycmVkV3Jh
cHBlciYmKTsKKyAgICBzdGF0aWMgdm9pZCBmZXRjaChET01XaW5kb3cmLCBGZXRjaFJlcXVlc3Qm
LCBET01Qcm9taXNlPEZldGNoUmVzcG9uc2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAko
cmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTQgKzEyNCwxNCBAQCB2b2lkIEZldGNoQm9k
eTo6dXBkYXRlQ29udGVudFR5cGUoRmV0Y2hICiAgICAgICAgIGhlYWRlcnMuZmFzdFNldChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudFR5cGUsIG1fY29udGVudFR5cGUpOwogfQogCi12b2lkIEZldGNo
Qm9keTo6YXJyYXlCdWZmZXIoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBEZWZlcnJlZFdyYXBwZXIm
JiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6OmFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiBv
d25lciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIEFTU0VSVChtX3R5
cGUgIT0gVHlwZTo6Tm9uZSk7CiAgICAgbV9jb25zdW1lci5zZXRUeXBlKEZldGNoQm9keUNvbnN1
bWVyOjpUeXBlOjpBcnJheUJ1ZmZlcik7CiAgICAgY29uc3VtZShvd25lciwgV1RGTW92ZShwcm9t
aXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5OjpibG9iKEZldGNoQm9keU93bmVyJiBvd25lciwg
RGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQgRmV0Y2hCb2R5OjpibG9iKEZldGNoQm9k
eU93bmVyJiBvd25lciwgUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIEFT
U0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7CiAgICAgbV9jb25zdW1lci5zZXRUeXBlKEZldGNo
Qm9keUNvbnN1bWVyOjpUeXBlOjpCbG9iKTsKQEAgLTEzOSwzMSArMTM5LDMxIEBAIHZvaWQgRmV0
Y2hCb2R5OjpibG9iKEZldGNoQm9keU93bmVyJiBvd24KICAgICBjb25zdW1lKG93bmVyLCBXVEZN
b3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6Ompzb24oRmV0Y2hCb2R5T3duZXIm
IG93bmVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6Ompzb24o
RmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7
CiAgICAgQVNTRVJUKG1fdHlwZSAhPSBUeXBlOjpOb25lKTsKIAogICAgIGlmIChtX3R5cGUgPT0g
VHlwZTo6VGV4dCkgewotICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKHByb21pc2UsIG1f
dGV4dCk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oV1RGTW92ZShwcm9taXNlKSwg
bV90ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnN1bWVyLnNldFR5cGUo
RmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6OkpTT04pOwogICAgIGNvbnN1bWUob3duZXIsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keTo6dGV4dChGZXRjaEJvZHlPd25lciYg
b3duZXIsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keTo6dGV4dChG
ZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsK
ICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBU
eXBlOjpUZXh0KSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZShtX3RleHQpOworICAgICAgICBw
cm9taXNlLT5yZXNvbHZlKG1fdGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9j
b25zdW1lci5zZXRUeXBlKEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpUZXh0KTsKICAgICBjb25z
dW1lKG93bmVyLCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6OmNvbnN1
bWUoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9p
ZCBGZXRjaEJvZHk6OmNvbnN1bWUoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBSZWY8RGVmZXJyZWRX
cmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBG
ZXRjaEJvZHlPd25lcgogICAgIEFTU0VSVChtX3R5cGUgIT0gVHlwZTo6Tm9uZSk7CkBAIC0xNzIs
MTMgKzE3MiwxMyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZShGZXRjaEJvZHlPd25lciYgCiAK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6QXJyYXlCdWZmZXI6Ci0gICAg
ICAgIGNvbnN1bWVBcnJheUJ1ZmZlcihwcm9taXNlKTsKKyAgICAgICAgY29uc3VtZUFycmF5QnVm
ZmVyKFdURk1vdmUocHJvbWlzZSkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpB
cnJheUJ1ZmZlclZpZXc6Ci0gICAgICAgIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcocHJvbWlzZSk7
CisgICAgICAgIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoV1RGTW92ZShwcm9taXNlKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OlRleHQ6Ci0gICAgICAgIGNvbnN1bWVUZXh0KHBy
b21pc2UpOworICAgICAgICBjb25zdW1lVGV4dChXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgVHlwZTo6QmxvYjoKICAgICAgICAgY29uc3VtZUJsb2Iob3duZXIs
IFdURk1vdmUocHJvbWlzZSkpOwpAQCAtMTg3LDExICsxODcsMTEgQEAgdm9pZCBGZXRjaEJvZHk6
OmNvbnN1bWUoRmV0Y2hCb2R5T3duZXImIAogICAgICAgICBtX2NvbnN1bWVQcm9taXNlID0gV1RG
TW92ZShwcm9taXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6TG9hZGVkOgot
ICAgICAgICBtX2NvbnN1bWVyLnJlc29sdmUocHJvbWlzZSk7CisgICAgICAgIG1fY29uc3VtZXIu
cmVzb2x2ZShXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlw
ZTo6Rm9ybURhdGE6CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNvbnN1bWluZyBGb3JtRGF0
YS4KLSAgICAgICAgcHJvbWlzZS5yZWplY3QoMCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdCgw
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjQ2LDI4ICsyNDYsMjggQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0
cmVhbShGZXRjaEJvZAogfQogI2VuZGlmCiAKLXZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlC
dWZmZXIoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVB
cnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YSk7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEocHJvbWlzZSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRhLT5ieXRlTGVuZ3Ro
KCkpOworICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEtPmRhdGEoKSksIG1fZGF0YS0+Ynl0ZUxl
bmd0aCgpKTsKICAgICBtX2RhdGEgPSBudWxscHRyOwogfQogCi12b2lkIEZldGNoQm9keTo6Y29u
c3VtZUFycmF5QnVmZmVyVmlldyhEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNo
Qm9keTo6Y29uc3VtZUFycmF5QnVmZmVyVmlldyhSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21p
c2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0YVZpZXcpOwotICAgIG1fY29uc3VtZXIucmVzb2x2ZVdp
dGhEYXRhKHByb21pc2UsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGFWaWV3LT5i
YXNlQWRkcmVzcygpKSwgbV9kYXRhVmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBtX2NvbnN1bWVy
LnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4obV9kYXRhVmlldy0+YmFzZUFkZHJlc3MoKSksIG1fZGF0YVZpZXctPmJ5dGVMZW5ndGgo
KSk7CiAgICAgbV9kYXRhVmlldyA9IG51bGxwdHI7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lVGV4dChEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNoQm9keTo6Y29uc3Vt
ZVRleHQoUmVmPERlZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhID0gZXh0cmFjdEZyb21UZXh0KCk7Ci0gICAgbV9jb25zdW1lci5yZXNvbHZlV2l0
aERhdGEocHJvbWlzZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2NvbnN1bWVy
LnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpOwogICAgIG1fdGV4dCA9IHsgfTsKIH0KIAotdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVCbG9i
KEZldGNoQm9keU93bmVyJiBvd25lciwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQg
RmV0Y2hCb2R5Ojpjb25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJl
ZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBBU1NFUlQobV9ibG9iKTsKIApAQCAtMjkwLDE3
ICsyOTAsMTUgQEAgdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdGYWlsZWQoKQogewogICAgIGlmICht
X2NvbnN1bWVQcm9taXNlKSB7CiAgICAgICAgIG1fY29uc3VtZVByb21pc2UtPnJlamVjdCgwKTsK
LSAgICAgICAgbV9jb25zdW1lUHJvbWlzZSA9IE51bGxvcHQ7CisgICAgICAgIG1fY29uc3VtZVBy
b21pc2UgPSBudWxscHRyOwogICAgIH0KIH0KIAogdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdTdWNj
ZWVkZWQoKQogewogICAgIG1fdHlwZSA9IG1fY29uc3VtZXIuaGFzRGF0YSgpID8gVHlwZTo6TG9h
ZGVkIDogVHlwZTo6Tm9uZTsKLSAgICBpZiAobV9jb25zdW1lUHJvbWlzZSkgewotICAgICAgICBt
X2NvbnN1bWVyLnJlc29sdmUoKm1fY29uc3VtZVByb21pc2UpOwotICAgICAgICBtX2NvbnN1bWVQ
cm9taXNlID0gTnVsbG9wdDsKLSAgICB9CisgICAgaWYgKG1fY29uc3VtZVByb21pc2UpCisgICAg
ICAgIG1fY29uc3VtZXIucmVzb2x2ZShtX2NvbnN1bWVQcm9taXNlLnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCiBSZWZQdHI8Rm9ybURhdGE+IEZldGNoQm9keTo6Ym9keUZvckludGVybmFsUmVxdWVz
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxMSArNTIsMTEgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRmV0
Y2hCb2R5IHsKIHB1YmxpYzoKLSAgICB2b2lkIGFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiwg
RGVmZXJyZWRXcmFwcGVyJiYpOwotICAgIHZvaWQgYmxvYihGZXRjaEJvZHlPd25lciYsIERlZmVy
cmVkV3JhcHBlciYmKTsKLSAgICB2b2lkIGpzb24oRmV0Y2hCb2R5T3duZXImLCBEZWZlcnJlZFdy
YXBwZXImJik7Ci0gICAgdm9pZCB0ZXh0KEZldGNoQm9keU93bmVyJiwgRGVmZXJyZWRXcmFwcGVy
JiYpOwotICAgIHZvaWQgZm9ybURhdGEoRmV0Y2hCb2R5T3duZXImLCBEZWZlcnJlZFdyYXBwZXIm
JiBwcm9taXNlKSB7IHByb21pc2UucmVqZWN0KDApOyB9CisgICAgdm9pZCBhcnJheUJ1ZmZlcihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgYmxvYihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQganNvbihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgdGV4dChG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgZm9ybURh
dGEoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpIHsgcHJv
bWlzZS5nZXQoKS5yZWplY3QoMCk7IH0KIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICAgICB2
b2lkIGNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYsIEZldGNoUmVzcG9uc2VTb3VyY2Um
KTsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgRmV0Y2hCb2R5Q29uc3VtZXImIGNv
bnN1bWVyKCkgeyByZXR1cm4gbV9jb25zdW1lcjsgfQogCi0gICAgdm9pZCBjbGVhbkNvbnN1bWVQ
cm9taXNlKCkgeyBtX2NvbnN1bWVQcm9taXNlID0gTnVsbG9wdDsgfQorICAgIHZvaWQgY2xlYW5D
b25zdW1lUHJvbWlzZSgpIHsgbV9jb25zdW1lUHJvbWlzZSA9IG51bGxwdHI7IH0KIAogcHJpdmF0
ZToKICAgICBGZXRjaEJvZHkoUmVmPEJsb2I+JiYpOwpAQCAtOTMsMTMgKzkzLDEzIEBAIHByaXZh
dGU6CiAgICAgRmV0Y2hCb2R5KFN0cmluZyYmKTsKICAgICBGZXRjaEJvZHkoVHlwZSB0eXBlKSA6
IG1fdHlwZSh0eXBlKSB7IH0KIAotICAgIHZvaWQgY29uc3VtZShGZXRjaEJvZHlPd25lciYsIERl
ZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lkIGNvbnN1bWUoRmV0Y2hCb2R5T3duZXImLCBSZWY8
RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBleHRyYWN0RnJvbVRl
eHQoKSBjb25zdDsKLSAgICB2b2lkIGNvbnN1bWVBcnJheUJ1ZmZlcihEZWZlcnJlZFdyYXBwZXIm
KTsKLSAgICB2b2lkIGNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoRGVmZXJyZWRXcmFwcGVyJik7Ci0g
ICAgdm9pZCBjb25zdW1lVGV4dChEZWZlcnJlZFdyYXBwZXImKTsKLSAgICB2b2lkIGNvbnN1bWVC
bG9iKEZldGNoQm9keU93bmVyJiwgRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgY29uc3Vt
ZUFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgY29uc3VtZUFy
cmF5QnVmZmVyVmlldyhSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIGNvbnN1bWVU
ZXh0KFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgY29uc3VtZUJsb2IoRmV0Y2hC
b2R5T3duZXImLCBSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIFR5cGUgbV90eXBlIHsg
VHlwZTo6Tm9uZSB9OwogICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlOwpAQCAtMTEyLDcgKzExMiw3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIAogICAgIEZldGNoQm9keUNvbnN1bWVy
IG1fY29uc3VtZXIgeyBGZXRjaEJvZHlDb25zdW1lcjo6VHlwZTo6Tm9uZSB9OwotICAgIE9wdGlv
bmFsPERlZmVycmVkV3JhcHBlcj4gbV9jb25zdW1lUHJvbWlzZTsKKyAgICBSZWZQdHI8RGVmZXJy
ZWRXcmFwcGVyPiBtX2NvbnN1bWVQcm9taXNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25zdW1lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlD
b25zdW1lci5jcHAJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwyMCArNTks
MjAgQEAgc3RhdGljIFN0cmluZyB0ZXh0RnJvbVVURjgoY29uc3QgdW5zaWduZQogICAgIHJldHVy
biBkZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBGZXRjaEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhE
YXRhKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBGZXRjaEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhEYXRh
KFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBU
eXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
cHJvbWlzZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlC
dWZmZXIoV1RGTW92ZShwcm9taXNlKSwgZGF0YSwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgVHlwZTo6QmxvYjoKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlV2l0aE5ld2x5Q3Jl
YXRlZChibG9iRnJvbURhdGEoZGF0YSwgbGVuZ3RoLCBtX2NvbnRlbnRUeXBlKSk7CisgICAgICAg
IHByb21pc2UtPnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKGJsb2JGcm9tRGF0YShkYXRhLCBsZW5n
dGgsIG1fY29udGVudFR5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6SlNP
TjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoSlNPTihwcm9taXNlLCB0ZXh0RnJvbVVURjgo
ZGF0YSwgbGVuZ3RoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oV1RGTW92ZShw
cm9taXNlKSwgdGV4dEZyb21VVEY4KGRhdGEsIGxlbmd0aCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAgICBwcm9taXNlLnJlc29sdmUodGV4dEZyb21VVEY4
KGRhdGEsIGxlbmd0aCkpOworICAgICAgICBwcm9taXNlLT5yZXNvbHZlKHRleHRGcm9tVVRGOChk
YXRhLCBsZW5ndGgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVHlwZTo6Tm9uZToKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04MCwyMSArODAsMjEgQEAgdm9pZCBGZXRj
aEJvZHlDb25zdW1lcjo6cmVzb2x2ZVdpdGhEYXRhKAogICAgIH0KIH0KIAotdm9pZCBGZXRjaEJv
ZHlDb25zdW1lcjo6cmVzb2x2ZShEZWZlcnJlZFdyYXBwZXImIHByb21pc2UpCit2b2lkIEZldGNo
Qm9keUNvbnN1bWVyOjpyZXNvbHZlKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsK
ICAgICBBU1NFUlQobV90eXBlICE9IFR5cGU6Ok5vbmUpOwogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBUeXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRo
QXJyYXlCdWZmZXIocHJvbWlzZSwgdGFrZUFzQXJyYXlCdWZmZXIoKS5nZXQoKSk7CisgICAgICAg
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1vdmUocHJvbWlzZSksIHRha2VBc0Fy
cmF5QnVmZmVyKCkuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpCbG9i
OgotICAgICAgICBwcm9taXNlLnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKHRha2VBc0Jsb2IoKSk7
CisgICAgICAgIHByb21pc2UtPnJlc29sdmVXaXRoTmV3bHlDcmVhdGVkKHRha2VBc0Jsb2IoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFR5cGU6OkpTT046Ci0gICAgICAgIGZ1bGZpbGxQ
cm9taXNlV2l0aEpTT04ocHJvbWlzZSwgdGFrZUFzVGV4dCgpKTsKKyAgICAgICAgZnVsZmlsbFBy
b21pc2VXaXRoSlNPTihXVEZNb3ZlKHByb21pc2UpLCB0YWtlQXNUZXh0KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBUeXBlOjpUZXh0OgotICAgICAgICBwcm9taXNlLnJlc29sdmUodGFr
ZUFzVGV4dCgpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZSh0YWtlQXNUZXh0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBUeXBlOjpOb25lOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29u
c3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
Qm9keUNvbnN1bWVyLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFuKCkgeyBtX2J1ZmZlciA9IG51bGxwdHI7IH0K
IAotICAgIHZvaWQgcmVzb2x2ZShEZWZlcnJlZFdyYXBwZXImKTsKLSAgICB2b2lkIHJlc29sdmVX
aXRoRGF0YShEZWZlcnJlZFdyYXBwZXImLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQp
OworICAgIHZvaWQgcmVzb2x2ZShSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKKyAgICB2b2lkIHJl
c29sdmVXaXRoRGF0YShSZWY8RGVmZXJyZWRXcmFwcGVyPiYmLCBjb25zdCB1bnNpZ25lZCBjaGFy
KiwgdW5zaWduZWQpOwogCiAgICAgYm9vbCBoYXNEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2J1
ZmZlcjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
Qm9keU93bmVyLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcwICs3MCw3
MCBAQCBib29sIEZldGNoQm9keU93bmVyOjppc0Rpc3R1cmJlZCgpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEZldGNoQm9keU93bmVyOjphcnJheUJ1ZmZlcihEZWZlcnJlZFdy
YXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6YXJyYXlCdWZmZXIoUmVmPERl
ZmVycmVkV3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIGlmIChtX2JvZHkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHByb21pc2UsIG51bGxwdHIs
IDApOworICAgICAgICBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihXVEZNb3ZlKHByb21p
c2UpLCBudWxscHRyLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNEaXN0
dXJiZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAgICBw
cm9taXNlLT5yZWplY3QoVHlwZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBt
X2lzRGlzdHVyYmVkID0gdHJ1ZTsKICAgICBtX2JvZHkuYXJyYXlCdWZmZXIoKnRoaXMsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCi12b2lkIEZldGNoQm9keU93bmVyOjpibG9iKERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keU93bmVyOjpibG9iKFJlZjxEZWZlcnJlZFdy
YXBwZXI+JiYgcHJvbWlzZSkKIHsKICAgICBpZiAobV9ib2R5LmlzRW1wdHkoKSkgewotICAgICAg
ICBwcm9taXNlLnJlc29sdmUoQmxvYjo6Y3JlYXRlKCkpOworICAgICAgICBwcm9taXNlLT5yZXNv
bHZlKEJsb2I6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNE
aXN0dXJiZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoVHlwZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBtX2lzRGlzdHVyYmVkID0gdHJ1ZTsKICAgICBtX2JvZHkuYmxvYigqdGhpcywgV1RGTW92ZShw
cm9taXNlKSk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5T3duZXI6OmZvcm1EYXRhKERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UpCit2b2lkIEZldGNoQm9keU93bmVyOjpmb3JtRGF0YShSZWY8RGVmZXJy
ZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcHJvbWlzZS5yZWplY3QoMCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdCgwKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNEaXN0dXJiZWQoKSkgewotICAgICAgICBw
cm9taXNlLnJlamVjdChUeXBlRXJyb3IpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoVHlwZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2lzRGlzdHVyYmVkID0gdHJ1ZTsK
ICAgICBtX2JvZHkuZm9ybURhdGEoKnRoaXMsIFdURk1vdmUocHJvbWlzZSkpOwogfQogCi12b2lk
IEZldGNoQm9keU93bmVyOjpqc29uKERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCit2b2lkIEZl
dGNoQm9keU93bmVyOjpqc29uKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlzZSkKIHsKICAg
ICBpZiAobV9ib2R5LmlzRW1wdHkoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChTWU5UQVhf
RVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChpc0Rpc3R1cmJlZCgpKSB7Ci0gICAgICAgIHByb21pc2UucmVq
ZWN0KFR5cGVFcnJvcik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChUeXBlRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIG1faXNEaXN0dXJiZWQgPSB0cnVlOwogICAgIG1fYm9k
eS5qc29uKCp0aGlzLCBXVEZNb3ZlKHByb21pc2UpKTsKIH0KIAotdm9pZCBGZXRjaEJvZHlPd25l
cjo6dGV4dChEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlKQordm9pZCBGZXRjaEJvZHlPd25lcjo6
dGV4dChSZWY8RGVmZXJyZWRXcmFwcGVyPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKG1fYm9keS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKFN0cmluZygpKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVzb2x2ZShTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKGlzRGlzdHVyYmVkKCkpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yKTsK
KyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFR5cGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV9pc0Rpc3R1cmJlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5oCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDExICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRXhwb3NlZCBCb2R5IEFQSQogICAg
IGJvb2wgaXNEaXN0dXJiZWQoKSBjb25zdDsKIAotICAgIHZvaWQgYXJyYXlCdWZmZXIoRGVmZXJy
ZWRXcmFwcGVyJiYpOwotICAgIHZvaWQgYmxvYihEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9p
ZCBmb3JtRGF0YShEZWZlcnJlZFdyYXBwZXImJik7Ci0gICAgdm9pZCBqc29uKERlZmVycmVkV3Jh
cHBlciYmKTsKLSAgICB2b2lkIHRleHQoRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgYXJy
YXlCdWZmZXIoUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CisgICAgdm9pZCBibG9iKFJlZjxEZWZl
cnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgZm9ybURhdGEoUmVmPERlZmVycmVkV3JhcHBlcj4m
Jik7CisgICAgdm9pZCBqc29uKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOworICAgIHZvaWQgdGV4
dChSZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKIAogICAgIHZvaWQgbG9hZEJsb2IoQmxvYiYsIEZl
dGNoQm9keUNvbnN1bWVyKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDcgKzIwNiw3IEBAIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6c3RvcCgpCiAgICAg
ICAgIG1fbG9hZGVyLT5zdG9wKCk7CiB9CiAKLXZvaWQgRmV0Y2hSZXNwb25zZTo6Y29uc3VtZSh1
bnNpZ25lZCB0eXBlLCBEZWZlcnJlZFdyYXBwZXImJiB3cmFwcGVyKQordm9pZCBGZXRjaFJlc3Bv
bnNlOjpjb25zdW1lKHVuc2lnbmVkIHR5cGUsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgd3JhcHBl
cikKIHsKICAgICBBU1NFUlQodHlwZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmV0Y2hCb2R5
Q29uc3VtZXI6OlR5cGU6OlRleHQpKTsKIApAQCAtMjQxLDkgKzI0MSw5IEBAIHZvaWQgRmV0Y2hS
ZXNwb25zZTo6Y29uc3VtZUNodW5rKFJlZjxKU0MKICAgICBtX2NvbnN1bWVyLmFwcGVuZChjaHVu
ay0+ZGF0YSgpLCBjaHVuay0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotdm9pZCBGZXRjaFJlc3BvbnNl
OjpmaW5pc2hDb25zdW1pbmdTdHJlYW0oRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSkKK3ZvaWQg
RmV0Y2hSZXNwb25zZTo6ZmluaXNoQ29uc3VtaW5nU3RyZWFtKFJlZjxEZWZlcnJlZFdyYXBwZXI+
JiYgcHJvbWlzZSkKIHsKLSAgICBtX2NvbnN1bWVyLnJlc29sdmUocHJvbWlzZSk7CisgICAgbV9j
b25zdW1lci5yZXNvbHZlKFdURk1vdmUocHJvbWlzZSkpOwogfQogCiB2b2lkIEZldGNoUmVzcG9u
c2U6OmNvbnN1bWVCb2R5QXNTdHJlYW0oKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmgJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwx
MSArNjAsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEZldGNoUHJvbWlzZSA9IERPTVByb21pc2U8
RmV0Y2hSZXNwb25zZT47CiAgICAgc3RhdGljIHZvaWQgZmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEZldGNoUmVxdWVzdCYsIEZldGNoUHJvbWlzZSYmKTsKIAotICAgIHZvaWQgY29uc3Vt
ZSh1bnNpZ25lZCwgRGVmZXJyZWRXcmFwcGVyJiYpOworICAgIHZvaWQgY29uc3VtZSh1bnNpZ25l
ZCwgUmVmPERlZmVycmVkV3JhcHBlcj4mJik7CiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogICAg
IHZvaWQgc3RhcnRDb25zdW1pbmdTdHJlYW0odW5zaWduZWQpOwogICAgIHZvaWQgY29uc3VtZUNo
dW5rKFJlZjxKU0M6OlVpbnQ4QXJyYXk+JiYpOwotICAgIHZvaWQgZmluaXNoQ29uc3VtaW5nU3Ry
ZWFtKERlZmVycmVkV3JhcHBlciYmKTsKKyAgICB2b2lkIGZpbmlzaENvbnN1bWluZ1N0cmVhbShS
ZWY8RGVmZXJyZWRXcmFwcGVyPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRTdGF0dXMoaW50
LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvV29ya2VyR2xvYmFsU2NvcGVGZXRjaC5jcHAJKHJl
dmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvV29ya2VyR2xv
YmFsU2NvcGVGZXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFdvcmtlckdsb2JhbFNjb3BlRmV0Y2g6OmZldGNoKFdv
cmtlckdsb2JhbFNjb3BlJiBzY29wZSwgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBEZWZlcnJlZFdy
YXBwZXImJiBwcm9taXNlKQordm9pZCBXb3JrZXJHbG9iYWxTY29wZUZldGNoOjpmZXRjaChXb3Jr
ZXJHbG9iYWxTY29wZSYgc2NvcGUsIEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgUmVmPERlZmVycmVk
V3JhcHBlcj4mJiBwcm9taXNlKQogewogICAgIGlmICghc2NvcGUuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL1dvcmtlckdsb2JhbFNjb3BlRmV0Y2guaAkocmV2aXNpb24gMjA1MjIy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9Xb3JrZXJHbG9iYWxTY29wZUZldGNo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRmV0Y2hSZXF1ZXN0Owog
CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZUZldGNoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBmZXRjaChXb3JrZXJHbG9iYWxTY29wZSYsIEZldGNoUmVxdWVzdCYsIERlZmVycmVkV3JhcHBl
ciYmKTsKKyAgICBzdGF0aWMgdm9pZCBmZXRjaChXb3JrZXJHbG9iYWxTY29wZSYsIEZldGNoUmVx
dWVzdCYsIFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oCShyZXZpc2lvbiAyMDUyMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIk1lZGlh
RGV2aWNlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDk0MSw3ICs0OTQxLDcgQEAKIAkJQjVCN0ExNzAxN0MxMEFBODAwRTRBQTBBIC8qIEVsZW1lbnRE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
QjdBMTZGMTdDMTA4MDYwMEU0QUEwQSAvKiBFbGVtZW50RGF0YS5jcHAgKi87IH07CiAJCUI1QjdB
MTcxMTdDMTBBQzAwMEU0QUEwQSAvKiBFbGVtZW50RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVCN0ExNkUxN0MxMDQ4MDAwRTRBQTBBIC8qIEVs
ZW1lbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY4MTFD
RjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAgKi87IH07Ci0JCUI1RDMxREZC
MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8q
IEFjdGl2ZURPTUNhbGxiYWNrLmggKi87IH07CisJCUI1RDMxREZCMTFDRjYxMEIwMDlGMjJCNCAv
KiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjY1
NjYyNzAxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1
QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggKi87IH07CiAJCUI2NThGRkExMTUyMkVGM0EwMERENTU5
NSAvKiBKU1JhZGlvTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY1OEZGOUYxNTIyRUYzQTAwREQ1NTk1IC8qIEpTUmFkaW9Ob2RlTGlz
dC5jcHAgKi87IH07CiAJCUI2NThGRkEyMTUyMkVGM0EwMERENTU5NSAvKiBKU1JhZGlvTm9kZUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NThG
RkEwMTUyMkVGM0EwMERENTU5NSAvKiBKU1JhZGlvTm9kZUxpc3QuaCAqLzsgfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDIwNTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNNZWRpYVN0cmVhbS5oIgpAQCAtNjEsNiArNjIsMTAg
QEAgSlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KFZNJgogewogfQogCitKU0RP
TUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2JqZWN0KCkKK3sKK30KKwogdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihjZWxsKS0+SlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUdsb2JhbE9i
amVjdCgpOwpAQCAtMTY3LDYgKzE3Miw5IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlMKICAgICBmb3IgKGF1dG8mIGNvbnN0cnVjdG9yIDogdGhpc09iamVjdC0+Y29u
c3RydWN0b3JzKCkudmFsdWVzKCkpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZjb25zdHJ1Y3Rv
cik7CiAKKyAgICBmb3IgKGF1dG8mIGRlZmVycmVkV3JhcHBlciA6IHRoaXNPYmplY3QtPmRlZmVy
cmVkV3JhcHBlcnMoKSkKKyAgICAgICAgZGVmZXJyZWRXcmFwcGVyLT52aXNpdERlZmVycmVkKHZp
c2l0b3IpOworCiAgICAgdGhpc09iamVjdC0+bV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMudmlz
aXQodmlzaXRvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBEZWZlcnJlZFdyYXBw
ZXI7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRE9N
V3JhcHBlcldvcmxkOwpAQCAtNDEsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OldyaXRlQmFycmll
cjxKU0M6OlN0cnVjdHVyZT4+IEpTRE9NU3RydWN0dXJlTWFwOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBKU0M6OkNsYXNzSW5mbyosIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNPYmplY3Q+
PiBKU0RPTUNvbnN0cnVjdG9yTWFwOworICAgIHR5cGVkZWYgSGFzaFNldDxEZWZlcnJlZFdyYXBw
ZXIqPiBEZWZlcnJlZFdyYXBwZXJTZXQ7CiAKICAgICBjbGFzcyBXRUJDT1JFX0VYUE9SVCBKU0RP
TUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0M6OkpTR2xvYmFsT2JqZWN0IHsKICAgICAgICAgdHlw
ZWRlZiBKU0M6OkpTR2xvYmFsT2JqZWN0IEJhc2U7CkBAIC01Niw2ICs1OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMoKSB7IHJl
dHVybiBtX3N0cnVjdHVyZXM7IH0KICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29uc3Ry
dWN0b3JzKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcnM7IH0KIAorICAgICAgICBEZWZlcnJlZFdy
YXBwZXJTZXQmIGRlZmVycmVkV3JhcHBlcnMoKSB7IHJldHVybiBtX2RlZmVycmVkV3JhcHBlcnM7
IH0KKwogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CiAKICAgICAgICAgLy8gTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBl
YXNpZXIuCkBAIC03NSw2ICs3OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHB1YmxpYzoKKyAgICAgICAg
fkpTRE9NR2xvYmFsT2JqZWN0KCk7CisKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiBpbmZvKCkgeyByZXR1cm4gJnNfaW5mbzsgfQogCiAgICAgICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQpAQCAtODUsNiArOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCBtX3N0cnVjdHVyZXM7CiAgICAgICAgIEpTRE9N
Q29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3RvcnM7CisgICAgICAgIERlZmVycmVkV3JhcHBlclNl
dCBtX2RlZmVycmVkV3JhcHBlcnM7CiAKICAgICAgICAgRXZlbnQqIG1fY3VycmVudEV2ZW50Owog
ICAgICAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxNiArMzUsMzEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1EZWZlcnJlZFdyYXBwZXI6OkRlZmVycmVkV3JhcHBlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQpCi0gICAgOiBtX2dsb2JhbE9iamVjdChleGVjLT52bSgpLCBnbG9iYWxP
YmplY3QpCi0gICAgLCBtX2RlZmVycmVkKGV4ZWMtPnZtKCksIHByb21pc2VEZWZlcnJlZCkKK0Rl
ZmVycmVkV3JhcHBlcjo6RGVmZXJyZWRXcmFwcGVyKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCisg
ICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAsIG1fZGVmZXJyZWQocHJvbWlzZURlZmVycmVkKQorICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLndyaXRl
QmFycmllcihnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7CisgICAgbV9nbG9iYWxPYmpl
Y3QtPmRlZmVycmVkV3JhcHBlcnMoKS5hZGQodGhpcyk7CiB9CiAKLUpTRE9NR2xvYmFsT2JqZWN0
JiBEZWZlcnJlZFdyYXBwZXI6Omdsb2JhbE9iamVjdCgpIGNvbnN0CitEZWZlcnJlZFdyYXBwZXI6
On5EZWZlcnJlZFdyYXBwZXIoKQogewotICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7Ci0gICAg
cmV0dXJuICptX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICBjbGVhcigpOworfQorCit2b2lkIERl
ZmVycmVkV3JhcHBlcjo6Y2xlYXIoKQoreworICAgIEFTU0VSVCghbV9kZWZlcnJlZCB8fCBtX2ds
b2JhbE9iamVjdCk7CisgICAgaWYgKG1fZGVmZXJyZWQgJiYgbV9nbG9iYWxPYmplY3QpCisgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0LT5kZWZlcnJlZFdyYXBwZXJzKCkucmVtb3ZlKHRoaXMpOworICAg
IG1fZGVmZXJyZWQuY2xlYXIoKTsKK30KKwordm9pZCBEZWZlcnJlZFdyYXBwZXI6OmNvbnRleHRE
ZXN0cm95ZWQoKQoreworICAgIGNsZWFyKCk7CiB9CiAKIEpTQzo6SlNWYWx1ZSBEZWZlcnJlZFdy
YXBwZXI6OnByb21pc2UoKSBjb25zdApAQCAtNTUsNiArNzAsOSBAQCBKU0M6OkpTVmFsdWUgRGVm
ZXJyZWRXcmFwcGVyOjpwcm9taXNlKCkgCiAKIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpjYWxsRnVu
Y3Rpb24oRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uLCBKU1ZhbHVlIHJlc29sdXRp
b24pCiB7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQorICAgICAgICByZXR1cm47CisK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBl
OjpOb25lKTsKQEAgLTY0LDEyICs4MiwxNCBAQCB2b2lkIERlZmVycmVkV3JhcHBlcjo6Y2FsbEZ1
bmN0aW9uKEV4ZWNTCiAKICAgICBjYWxsKCZleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwogCi0gICAgbV9nbG9iYWxPYmplY3QuY2xl
YXIoKTsKLSAgICBtX2RlZmVycmVkLmNsZWFyKCk7CisgICAgY2xlYXIoKTsKIH0KIAogdm9pZCBE
ZWZlcnJlZFdyYXBwZXI6OnJlamVjdChFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QpOwogICAgIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC04
NSw3ICsxMDUsNyBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAg
ICAgSlNWYWx1ZSBlcnJvciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgIHN0YXRl
LmNsZWFyRXhjZXB0aW9uKCk7CiAKLSAgICBEZWZlcnJlZFdyYXBwZXIoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCAmcHJvbWlzZURlZmVycmVkKS5yZWplY3QoZXJyb3IpOworICAgIERlZmVycmVkV3Jh
cHBlcjo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgJnByb21pc2VEZWZlcnJlZCktPnJl
amVjdChlcnJvcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIHBhcnNlQXNKU09O
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQpAQCAtOTQsMjcgKzEx
NCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBwYXJzZUFzSlNPTihKCiAgICAgcmV0
dXJuIEpTQzo6SlNPTlBhcnNlKHN0YXRlLCBkYXRhKTsKIH0KIAotdm9pZCBmdWxmaWxsUHJvbWlz
ZVdpdGhKU09OKERlZmVycmVkV3JhcHBlciYgcHJvbWlzZSwgY29uc3QgU3RyaW5nJiBkYXRhKQor
dm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhKU09OKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJvbWlz
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHBhcnNl
QXNKU09OKHByb21pc2UuZ2xvYmFsT2JqZWN0KCkuZ2xvYmFsRXhlYygpLCBkYXRhKTsKKyAgICBK
U0M6OkpTVmFsdWUgdmFsdWUgPSBwYXJzZUFzSlNPTihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpLCBkYXRhKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICBwcm9taXNlLnJl
amVjdChTWU5UQVhfRVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFNZTlRBWF9FUlIpOwog
ICAgIGVsc2UKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHZhbHVlKTsKKyAgICAgICAgcHJvbWlz
ZS0+cmVzb2x2ZSh2YWx1ZSk7CiB9CiAKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZm
ZXIoRGVmZXJyZWRXcmFwcGVyJiBwcm9taXNlLCBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpCit2
b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYg
cHJvbWlzZSwgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKQogewogICAgIGlmICghYXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3Q8SlNWYWx1ZT4oY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihwcm9taXNlLmdsb2JhbE9iamVjdCgpLmdsb2JhbEV4ZWMoKSkpOworICAgICAgICBwcm9t
aXNlLT5yZWplY3Q8SlNWYWx1ZT4oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihwcm9taXNlLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
cHJvbWlzZS5yZXNvbHZlKGFycmF5QnVmZmVyKTsKKyAgICBwcm9taXNlLT5yZXNvbHZlKGFycmF5
QnVmZmVyKTsKIH0KIAotdm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihEZWZlcnJl
ZFdyYXBwZXImIHByb21pc2UsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit2b2lk
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYgcHJv
bWlzZSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBmdWxmaWxsUHJv
bWlzZVdpdGhBcnJheUJ1ZmZlcihwcm9taXNlLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEs
IGxlbmd0aCkuZ2V0KCkpOworICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1v
dmUocHJvbWlzZSksIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSwgbGVuZ3RoKS5nZXQoKSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
CShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBKU0RPTVBy
b21pc2VfaAogI2RlZmluZSBKU0RPTVByb21pc2VfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFwL1N0cm9u
Z0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmg+CkBAIC05
NSw5ICs5NiwxNCBAQCBzdHJ1Y3QgUHJvbWlzZVJlc3VsdEluc3BlY3RvcjxET01DbGFzcywgCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHBhc3NCeUNvbnN0UmVmID0gZmFsc2U7CiB9OwogCi1j
bGFzcyBEZWZlcnJlZFdyYXBwZXIgeworY2xhc3MgRGVmZXJyZWRXcmFwcGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8RGVmZXJyZWRXcmFwcGVyPiwgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKIHB1
YmxpYzoKLSAgICBEZWZlcnJlZFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqKTsKKyAgICBzdGF0aWMgUmVmPERlZmVycmVk
V3JhcHBlcj4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGVmZXJyZWQpKTsKKyAgICB9CisKKyAgICB+RGVmZXJyZWRXcmFwcGVyKCk7CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBSZXNvbHZlUmVzdWx0VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8UHJvbWlzZVJlc3VsdEluc3BlY3RvcjxSZXNvbHZlUmVzdWx0VHlwZT46OnBhc3NCeVZh
bHVlLCB2b2lkPjo6dHlwZQogICAgIHJlc29sdmUoUmVzb2x2ZVJlc3VsdFR5cGUgcmVzdWx0KSB7
IHJlc29sdmVXaXRoVmFsdWUocmVzdWx0KTsgfQpAQCAtMTIxLDEwICsxMjcsMTkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCByZWplY3QoRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJiA9IHsgfSk7
CiAKLSAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KCkgY29uc3Q7CiAgICAgSlND
OjpKU1ZhbHVlIHByb21pc2UoKSBjb25zdDsKIAorICAgIGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJl
dHVybiAhbV9kZWZlcnJlZCB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKTsgfSAvLyBUaGUgd3JhcHBl
ciB3b3JsZCBoYXMgZ29uZSBhd2F5IG9yIGFjdGl2ZSBET00gb2JqZWN0cyBoYXZlIGJlZW4gc3Vz
cGVuZGVkLgorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBt
X2dsb2JhbE9iamVjdC5nZXQoKTsgfQorCisgICAgdm9pZCB2aXNpdERlZmVycmVkKEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFdlYWsoJm1fZGVm
ZXJyZWQpOyB9CisKIHByaXZhdGU6CisgICAgRGVmZXJyZWRXcmFwcGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKik7CisKKyAgICB2
b2lkIGNsZWFyKCk7CisgICAgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgb3ZlcnJpZGU7CisKICAg
ICB2b2lkIGNhbGxGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
biwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pOwogICAgIHZvaWQgcmVzb2x2ZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKSB7IGNhbGxGdW5jdGlvbihzdGF0
ZSwgbV9kZWZlcnJlZC0+cmVzb2x2ZSgpLCByZXNvbHV0aW9uKTsgfQogICAgIHZvaWQgcmVqZWN0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pIHsgY2FsbEZ1
bmN0aW9uKHN0YXRlLCBtX2RlZmVycmVkLT5yZWplY3QoKSwgcmVzb2x1dGlvbik7IH0KQEAgLTEz
MiwxMyArMTQ3LDEzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3MgUmVqZWN0UmVzdWx0
VHlwZT4gdm9pZCByZWplY3RXaXRoVmFsdWUoUmVqZWN0UmVzdWx0VHlwZSYmKTsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBSZXNvbHZlUmVzdWx0VHlwZT4gdm9pZCByZXNvbHZlV2l0aFZhbHVlKFJlc29s
dmVSZXN1bHRUeXBlJiYpOwogCi0gICAgSlNDOjpTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IG1f
Z2xvYmFsT2JqZWN0OwotICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ+IG1f
ZGVmZXJyZWQ7CisgICAgSlNDOjpXZWFrPEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ+IG1fZGVmZXJy
ZWQ7CisgICAgSlNDOjpXZWFrPEpTRE9NR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKIH07
CiAKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihEZWZlcnJlZFdyYXBwZXImLCBjb25zdCBT
dHJpbmcmKTsKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoRGVmZXJyZWRXcmFw
cGVyJiwgQXJyYXlCdWZmZXIqKTsKLXZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
RGVmZXJyZWRXcmFwcGVyJiwgY29uc3Qgdm9pZCosIHNpemVfdCk7Cit2b2lkIGZ1bGZpbGxQcm9t
aXNlV2l0aEpTT04oUmVmPERlZmVycmVkV3JhcHBlcj4mJiwgY29uc3QgU3RyaW5nJik7Cit2b2lk
IGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFdyYXBwZXI+JiYsIEFy
cmF5QnVmZmVyKik7Cit2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZl
cnJlZFdyYXBwZXI+JiYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogdm9pZCByZWplY3RQcm9taXNl
V2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OkpTUHJvbWlzZURlZmVycmVkJik7CiAKIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21p
c2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJv
bWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCopKQpA
QCAtMTU2LDI2ICsxNzEsMzEgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0
aW9uKAogdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgogY2xhc3MgRE9NUHJvbWlzZSB7CiBwdWJs
aWM6Ci0gICAgRE9NUHJvbWlzZShEZWZlcnJlZFdyYXBwZXImJiB3cmFwcGVyKSA6IG1fd3JhcHBl
cihXVEZNb3ZlKHdyYXBwZXIpKSB7IH0KKyAgICBET01Qcm9taXNlKFJlZjxEZWZlcnJlZFdyYXBw
ZXI+JiYgd3JhcHBlcikKKyAgICAgICAgOiBtX3dyYXBwZXIoV1RGTW92ZSh3cmFwcGVyKSkKKyAg
ICB7CisgICAgfQorCiAgICAgRE9NUHJvbWlzZShET01Qcm9taXNlJiYgcHJvbWlzZSkgOiBtX3dy
YXBwZXIoV1RGTW92ZShwcm9taXNlLm1fd3JhcHBlcikpIHsgfQogCiAgICAgRE9NUHJvbWlzZShj
b25zdCBET01Qcm9taXNlJikgPSBkZWZhdWx0OwogICAgIERPTVByb21pc2UmIG9wZXJhdG9yPShE
T01Qcm9taXNlIGNvbnN0JikgPSBkZWZhdWx0OwogCi0gICAgdm9pZCByZXNvbHZlKHR5cGVuYW1l
IFByb21pc2VSZXN1bHRJbnNwZWN0b3I8VmFsdWU+OjpUeXBlIHZhbHVlKSB7IG1fd3JhcHBlci5y
ZXNvbHZlKHZhbHVlKTsgfQorICAgIHZvaWQgcmVzb2x2ZSh0eXBlbmFtZSBQcm9taXNlUmVzdWx0
SW5zcGVjdG9yPFZhbHVlPjo6VHlwZSB2YWx1ZSkgeyBtX3dyYXBwZXItPnJlc29sdmUodmFsdWUp
OyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBFcnJvclR5cGU+IHZvaWQgcmVqZWN0KEVy
cm9yVHlwZSYmLi4uIGVycm9yKSB7IG1fd3JhcHBlci5yZWplY3Qoc3RkOjpmb3J3YXJkPEVycm9y
VHlwZT4oZXJyb3IpLi4uKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEVycm9yVHlwZT4g
dm9pZCByZWplY3QoRXJyb3JUeXBlJiYuLi4gZXJyb3IpIHsgbV93cmFwcGVyLT5yZWplY3Qoc3Rk
Ojpmb3J3YXJkPEVycm9yVHlwZT4oZXJyb3IpLi4uKTsgfQogCiAgICAgRGVmZXJyZWRXcmFwcGVy
JiBkZWZlcnJlZFdyYXBwZXIoKSB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogcHJpdmF0ZToKLSAg
ICBEZWZlcnJlZFdyYXBwZXIgbV93cmFwcGVyOworICAgIFJlZjxEZWZlcnJlZFdyYXBwZXI+IG1f
d3JhcHBlcjsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIFJlc29sdmVSZXN1bHRUeXBlPgogaW5saW5l
IHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlV2l0aFZhbHVlKFJlc29sdmVSZXN1bHRUeXBl
JiYgcmVzdWx0KQogewotICAgIEFTU0VSVChtX2RlZmVycmVkKTsKKyAgICBpZiAoaXNTdXNwZW5k
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKQEAgLTE4NSw2ICsyMDUsOCBAQCBpbmxp
bmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoCiB0ZW1wbGF0ZTxjbGFzcyBSZXNv
bHZlUmVzdWx0VHlwZT4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZVdpdGhO
ZXdseUNyZWF0ZWQoUmVmPFJlc29sdmVSZXN1bHRUeXBlPiYmIHJlc3VsdCkKIHsKKyAgICBpZiAo
aXNTdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsK
ICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTE5NSw2ICsyMTcsOCBAQCBpbmxpbmUg
dm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmVXaXRoCiB0ZW1wbGF0ZTxjbGFzcyBSZWplY3RS
ZXN1bHRUeXBlPgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3RXaXRoVmFsdWUo
UmVqZWN0UmVzdWx0VHlwZSYmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9i
YWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKQEAgLTIwNSw2ICsyMjksOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBw
ZXI6OnJlamVjdFdpdGhWCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoYm9vbCByZXN1bHQpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAgICAg
IHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2Jq
ZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CkBAIC0yMTUsNiArMjQxLDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKGJvbwogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNv
bHZlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKQEAgLTIyNSw2ICsyNTMsOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoSlNDCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
amVjdChKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgaWYgKGlzU3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKICAgICBBU1NFUlQobV9kZWZlcnJlZCk7CiAgICAgQVNTRVJUKG1fZ2xvYmFs
T2JqZWN0KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CkBAIC0yMzUsNiArMjY1LDggQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVy
OjpyZWplY3QoSlNDOgogdGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlKHN0ZDo6bnVsbHB0cl90KQogeworICAgIGlmIChpc1N1c3BlbmRlZCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFTU0VSVChtX2dsb2JhbE9i
amVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwpAQCAtMjQ1LDYgKzI3Nyw4IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6
cmVzb2x2ZShzdGQKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0KHN0ZDo6bnVsbHB0cl90KQogeworICAgIGlmIChpc1N1c3BlbmRlZCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKG1fZGVmZXJyZWQpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVj
dCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwpAQCAtMjU1LDYgKzI4OSw4IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0KHN0ZDoKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2
ZShjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKQEAgLTI2NSw2ICszMDEsOCBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6
OnJlc29sdmUoY29uCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
amVjdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2RlZmVycmVkKTsKICAgICBBU1NFUlQobV9nbG9i
YWxPYmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRm9udEZhY2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRm9u
dEZhY2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ZvbnRGYWNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQCBKU0M6OkpTVmFsdWUgSlNGb250RmFjZTo6bG9hZGVkKEpTQzo6RXhlCiB7CiAgICAgaWYg
KCFtX2xvYWRlZCkgewogICAgICAgICBpZiAoIXdyYXBwZWQoKS5wcm9taXNlKCkpIHsKLSAgICAg
ICAgICAgIERlZmVycmVkV3JhcHBlciBwcm9taXNlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIEpT
Qzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKSk7Ci0g
ICAgICAgICAgICBtX2xvYWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS5wcm9taXNl
KCkpOworICAgICAgICAgICAgUmVmPERlZmVycmVkV3JhcHBlcj4gcHJvbWlzZSA9IERlZmVycmVk
V3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIEpTQzo6SlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICBtX2xv
YWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS0+cHJvbWlzZSgpKTsKICAgICAgICAg
ICAgIHdyYXBwZWQoKS5yZWdpc3RlckxvYWRlZChXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2xvYWRlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgd3JhcHBl
ZCgpLnByb21pc2UoKS52YWx1ZSgpLmRlZmVycmVkV3JhcHBlcigpLnByb21pc2UoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZvbnRGYWNlU2V0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNG
b250RmFjZVNldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogSlNDOjpKU1ZhbHVlIEpTRm9udEZhY2VTZXQ6OnJlYWR5KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVhZHkpIHsKLSAgICAgICAg
RGVmZXJyZWRXcmFwcGVyIHByb21pc2UoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgSlNDOjpKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAg
bV9yZWFkeS5zZXQoc3RhdGUudm0oKSwgdGhpcywgcHJvbWlzZS5wcm9taXNlKCkpOworICAgICAg
ICBSZWY8RGVmZXJyZWRXcmFwcGVyPiBwcm9taXNlID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbV9yZWFkeS5zZXQoc3RhdGUudm0oKSwg
dGhpcywgcHJvbWlzZS0+cHJvbWlzZSgpKTsKICAgICAgICAgd3JhcHBlZCgpLnJlZ2lzdGVyUmVh
ZHkoV1RGTW92ZShwcm9taXNlKSk7CiAgICAgfQogICAgIHJldHVybiBtX3JlYWR5LmdldCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2Vz
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyArMzkx
LDcgQEAgSlNWYWx1ZSBKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKEV4ZQogICAgIGF1dG8g
YXVkaW9Db25zdHJhaW50cyA9IE1lZGlhQ29uc3RyYWludHNJbXBsOjpjcmVhdGUoV1RGTW92ZSht
YW5kYXRvcnlBdWRpb0NvbnN0cmFpbnRzKSwgV1RGTW92ZShhZHZhbmNlZEF1ZGlvQ29uc3RyYWlu
dHMpLCBhcmVBdWRpb0NvbnN0cmFpbnRzVmFsaWQpOwogICAgIGF1dG8gdmlkZW9Db25zdHJhaW50
cyA9IE1lZGlhQ29uc3RyYWludHNJbXBsOjpjcmVhdGUoV1RGTW92ZShtYW5kYXRvcnlWaWRlb0Nv
bnN0cmFpbnRzKSwgV1RGTW92ZShhZHZhbmNlZFZpZGVvQ29uc3RyYWludHMpLCBhcmVWaWRlb0Nv
bnN0cmFpbnRzVmFsaWQpOwogICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICB3cmFwcGVkKCkuZ2V0VXNlck1lZGlhKFdURk1vdmUoYXVkaW9Db25zdHJhaW50
cyksIFdURk1vdmUodmlkZW9Db25zdHJhaW50cyksIERlZmVycmVkV3JhcHBlcigmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpLCBlYyk7CisgICAgd3JhcHBlZCgpLmdldFVz
ZXJNZWRpYShXVEZNb3ZlKGF1ZGlvQ29uc3RyYWludHMpLCBXVEZNb3ZlKHZpZGVvQ29uc3RyYWlu
dHMpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAg
IHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2VD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KEV4CiAgICAg
bV9jb250cm9sbGVyLnNldChzdGF0ZS52bSgpLCBqc1NvdXJjZSwgc3RhdGUuYXJndW1lbnQoMCkp
OwogCiAgICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNDOjpK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIHdy
YXBwZWQoKS5zdGFydChSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKGNvbnRyb2xsZXIp
LCBEZWZlcnJlZFdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KSk7CisgICAgd3JhcHBlZCgpLnN0YXJ0KFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIo
Y29udHJvbGxlciksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21p
c2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MjIyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3Vi
dGxlQ3J5cHRvOjplbmNyeXB0KEV4CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBw
ZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21p
c2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7
CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5v
bk51bGwoKSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRv
IGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVy
LnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAg
IH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTIyOSwxMiArMjI5LDEyIEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICB9CiAKICAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZl
cnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNr
ID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAg
ICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlciwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVy
KHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7
CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUg
ewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAgICAgd3JhcHBlci0+cmVq
ZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTI4
NCwxMiArMjg0LDEyIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MK
ICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJl
ZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQp
OworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1
dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVz
dWx0KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3Jh
cHBlciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9t
aXNlV2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3
cmFwcGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAg
ICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OnZlcmlmeShFeGUKICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOworICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIg
PSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNl
RGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGJvb2wgcmVz
dWx0KSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CisgICAgICAg
IHdyYXBwZXItPnJlc29sdmUocmVzdWx0KTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVyZUNhbGxi
YWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxw
dHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMzkwLDEyICszOTAsMTIgQEAgSlNWYWx1ZSBKU1dlYktp
dFN1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZQogICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4g
d3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0o
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBmdWxmaWxs
UHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLCByZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6
ZSgpKTsKKyAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBlci5yZWxl
YXNlTm9uTnVsbCgpLCByZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKICAgICB9OwogICAg
IGF1dG8gZmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdy
YXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgfTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNDQ0LDE3ICs0NDQsMTcg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZQogICAgIH0KIAogICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFw
cGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRy
PERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRvS2V5KiBrZXksIENyeXB0b0tleVBhaXIqIGtleVBhaXIp
IG11dGFibGUgewogICAgICAgICBBU1NFUlQoa2V5IHx8IGtleVBhaXIpOwogICAgICAgICBBU1NF
UlQoIWtleSB8fCAha2V5UGFpcik7CiAgICAgICAgIGlmIChrZXkpCi0gICAgICAgICAgICB3cmFw
cGVyLnJlc29sdmUoa2V5KTsKKyAgICAgICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgd3JhcHBlci5yZXNvbHZlKGtleVBhaXIpOworICAgICAg
ICAgICAgd3JhcHBlci0+cmVzb2x2ZShrZXlQYWlyKTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVy
ZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVqZWN0
KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTgxLDEyICs1ODEsMTIgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KAogICAgIH0KIAogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3Jh
cHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3Jh
cHBlcl0oQ3J5cHRvS2V5JiByZXN1bHQpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlc29s
dmUocmVzdWx0KTsKKyAgICAgICAgd3JhcHBlci0+cmVzb2x2ZShyZXN1bHQpOwogICAgIH07CiAg
ICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAg
d3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRy
KTsKICAgICB9OwogCiAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsIGRh
dGEsIFdURk1vdmUoYWxnb3JpdGhtKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgZXh0cmFjdGFibGUs
IGtleVVzYWdlcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxs
YmFjaykpOwpAQCAtNjUwLDEyICs2NTAsMTIgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0
bzo6ZXhwb3J0S2V5KAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdy
YXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwor
ICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8g
c3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0
KSBtdXRhYmxlIHsKLSAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIod3JhcHBl
ciwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGZ1bGZpbGxQcm9taXNl
V2l0aEFycmF5QnVmZmVyKHdyYXBwZXIucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0LmRhdGEoKSwg
cmVzdWx0LnNpemUoKSk7CiAgICAgfTsKICAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFt3cmFw
cGVyXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICAg
ICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBv
cnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBX
VEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwpAQCAtNzA2LDI1ICs3MDYsMjUgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgIH0KIAogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgUmVmUHRyPERlZmVycmVkV3Jh
cHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAKICAgICBhdXRvIGV4cG9ydFN1Y2Nlc3NDYWxsYmFj
ayA9IFtrZXlGb3JtYXQsIGFsZ29yaXRobSwgcGFyYW1ldGVycywgd3JhcHBpbmdLZXksIHdyYXBw
ZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZXhwb3J0ZWRLZXlEYXRhKSBtdXRhYmxlIHsKICAg
ICAgICAgYXV0byBlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZW5jcnlwdGVkRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmdWxmaWxs
UHJvbWlzZVdpdGhBcnJheUJ1ZmZlcih3cmFwcGVyLCBlbmNyeXB0ZWREYXRhLmRhdGEoKSwgZW5j
cnlwdGVkRGF0YS5zaXplKCkpOworICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlC
dWZmZXIod3JhcHBlci5yZWxlYXNlTm9uTnVsbCgpLCBlbmNyeXB0ZWREYXRhLmRhdGEoKSwgZW5j
cnlwdGVkRGF0YS5zaXplKCkpOwogICAgICAgICB9OwogICAgICAgICBhdXRvIGVuY3J5cHRGYWls
dXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHdyYXBwZXIu
cmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwog
ICAgICAgICB9OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgYWxnb3Jp
dGhtLT5lbmNyeXB0Rm9yV3JhcEtleSgqcGFyYW1ldGVycywgKndyYXBwaW5nS2V5LCBzdGQ6Om1h
a2VfcGFpcihleHBvcnRlZEtleURhdGEuZGF0YSgpLCBleHBvcnRlZEtleURhdGEuc2l6ZSgpKSwg
V1RGTW92ZShlbmNyeXB0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlbmNyeXB0RmFpbHVyZUNh
bGxiYWNrKSwgZWMpOwogICAgICAgICBpZiAoZWMpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZXBvcnQgZmFpbHVyZSBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5n
IHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0
byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAgd3JhcHBl
ci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBleHBvcnRGYWlsdXJlQ2FsbGJhY2sgPSBb
d3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7Cisg
ICAgICAgIHdyYXBwZXItPnJlamVjdChudWxscHRyKTsKICAgICB9OwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CkBAIC04MDksMjcgKzgwOSwyNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjp1bndyYXBLZXkoCiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVy
ID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKICAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUdsb2JhbE9iamVj
dChzdGF0ZS52bSgpLCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICBhdXRvIGRlY3J5cHRTdWNjZXNz
Q2FsbGJhY2sgPSBbZG9tR2xvYmFsT2JqZWN0LCBrZXlGb3JtYXQsIHVud3JhcHBlZEtleUFsZ29y
aXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVz
YWdlcywgd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewog
ICAgICAgICBhdXRvIGltcG9ydFN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShDcnlwdG9LZXkm
IGtleSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3cmFwcGVyLnJlc29sdmUoa2V5KTsKKyAgICAg
ICAgICAgIHdyYXBwZXItPnJlc29sdmUoa2V5KTsKICAgICAgICAgfTsKICAgICAgICAgYXV0byBp
bXBvcnRGYWlsdXJlQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51
bGxwdHIpOwogICAgICAgICB9OwogICAgICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRvbUdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUs
IGtleUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSks
IHVud3JhcHBlZEtleUFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywg
ZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShpbXBvcnRTdWNjZXNzQ2FsbGJhY2spLCBX
VEZNb3ZlKGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOwogICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRldGFp
bHMgdG8gY29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhlcmUg
aXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9taXNl
IHJlamVjdCBmdW5jdGlvbnMuCiAgICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICB3cmFwcGVy
LT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byBkZWNyeXB0
RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIu
cmVqZWN0KG51bGxwdHIpOworICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAg
fTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwNTIy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC00MTE0LDkgKzQxMTQsOSBAQCBzdWIgR2VuZXJhdGVSZXR1cm5Q
YXJhbWV0ZXJzCiAKICAgICBpZiAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikpIHsKICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKLSAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgIkRlZmVycmVkV3JhcHBlcihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHByb21pc2VEZWZlcnJlZCkiKTsKKyAgICAg
ICAgICAgIHB1c2goQGFyZ3VtZW50cywgIkRlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwg
cHJvbWlzZURlZmVycmVkKSIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChA
YXJndW1lbnRzLCAiRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKSIpOworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAi
RGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHVzaChAYXJndW1l
bnRzLCAiZWMiKSBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlJhaXNlc0V4Y2VwdGlvbiJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UifTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMDUyMjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvdmlicmF0aW9uIgogICAgICIk
e1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYmRhdGFiYXNlIgogICAgICIke1dFQkNPUkVfRElSfS9h
Y2Nlc3NpYmlsaXR5IgorICAgICIke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nZW5lcmljIgogICAg
ICIke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGlu
Z3MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIK
</data>
<flag name="review"
          id="310938"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>