<?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>236903</bug_id>
          
          <creation_ts>2022-02-19 20:59:22 -0800</creation_ts>
          <short_desc>[WebGPU] Tracer bullet part 9: Basic implementation of bindings</short_desc>
          <delta_ts>2022-02-21 13:28:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</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>236879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843956</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 20:59:22 -0800</bug_when>
    <thetext>This is a basic implementation of the BindGroup, BindGroupLayout, and PipelineLayout methods. Eventually we&apos;ll want to suballocate multiple BindGroups so they coexist within the same Buffer, but this is an initial simple implementation that doesn&apos;t do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843957</commentid>
    <comment_count>1</comment_count>
      <attachid>452670</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 21:00:48 -0800</bug_when>
    <thetext>Created attachment 452670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843958</commentid>
    <comment_count>2</comment_count>
      <attachid>452671</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 21:04:11 -0800</bug_when>
    <thetext>Created attachment 452671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843963</commentid>
    <comment_count>3</comment_count>
      <attachid>452675</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 21:09:23 -0800</bug_when>
    <thetext>Created attachment 452675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844239</commentid>
    <comment_count>4</comment_count>
      <attachid>452675</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2022-02-21 09:33:34 -0800</bug_when>
    <thetext>Comment on attachment 452675
Patch

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

&gt; Source/WebGPU/WebGPU/BindGroup.h:48
&gt; +    id &lt;MTLBuffer&gt; vertexArgumentBuffer() const { return m_vertexArgumentBuffer; }
&gt; +    id &lt;MTLBuffer&gt; fragmentArgumentBuffer() const { return m_fragmentArgumentBuffer; }
&gt; +    id &lt;MTLBuffer&gt; computeArgumentBuffer() const { return m_computeArgumentBuffer; }

id&lt;MTLBuffer&gt; no space. Here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844346</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-21 13:28:01 -0800</bug_when>
    <thetext>Committed r290264 (?): &lt;https://commits.webkit.org/r290264&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844347</commentid>
    <comment_count>6</comment_count>
      <attachid>452675</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-21 13:28:05 -0800</bug_when>
    <thetext>Comment on attachment 452675
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/BindGroup.h:48
&gt;&gt; +    id &lt;MTLBuffer&gt; computeArgumentBuffer() const { return m_computeArgumentBuffer; }
&gt; 
&gt; id&lt;MTLBuffer&gt; no space. Here and elsewhere.

I sent an email to webkit-dev about this. Let&apos;s see what people say, and then I&apos;ll add a rule to the style guide about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844348</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-21 13:28:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/89253636&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452670</attachid>
            <date>2022-02-19 21:00:48 -0800</date>
            <delta_ts>2022-02-19 21:04:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22849</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggN2U1NTJjZjY4ZDE4Li5iN2E1ODY3NjA3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTcgQEAKKzIwMjItMDItMTkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KKworICAgICAgICBbV2ViR1BVXSBUcmFjZXIgYnVsbGV0IHBhcnQgOTogQmFzaWMgaW1w
bGVtZW50YXRpb24gb2YgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjkwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmlu
ZEdyb3VwLCBCaW5kR3JvdXBMYXlvdXQsIGFuZCBQaXBlbGluZUxheW91dCBtZXRob2RzLgorICAg
ICAgICBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgdG8gc3ViYWxsb2NhdGUgbXVsdGlwbGUgQmluZEdy
b3VwcyBzbyB0aGV5IGNvZXhpc3Qgd2l0aGluIHRoZSBzYW1lIEJ1ZmZlciwKKyAgICAgICAgYnV0
IHRoaXMgaXMgYW4gaW5pdGlhbCBzaW1wbGUgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IGRv
IHRoYXQuCisKKyAgICAgICAgKiBXZWJHUFUvQmluZEdyb3VwLmg6CisgICAgICAgIChXZWJHUFU6
OkJpbmRHcm91cDo6dmVydGV4QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BV
OjpCaW5kR3JvdXA6OmZyYWdtZW50QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2Vi
R1BVOjpCaW5kR3JvdXA6OmNvbXB1dGVBcmd1bWVudEJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
V2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6YnVmZmVySXNQcmVzZW50KToK
KyAgICAgICAgKFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudCk6CisgICAgICAgIChXZWJHUFU6OnRl
eHR1cmVWaWV3SXNQcmVzZW50KToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXApOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXA6OkJpbmRHcm91cCk6CisgICAgICAg
IChXZWJHUFU6OkJpbmRHcm91cDo6c2V0TGFiZWwpOgorICAgICAgICAqIFdlYkdQVS9CaW5kR3Jv
dXBMYXlvdXQuaDoKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5b3V0Ojp2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXBMYXlvdXQ6OmZy
YWdtZW50QXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3Vw
TGF5b3V0Ojpjb21wdXRlQXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUv
QmluZEdyb3VwTGF5b3V0Lm1tOgorICAgICAgICAoV2ViR1BVOjppc1ByZXNlbnQpOgorICAgICAg
ICAoV2ViR1BVOjpjcmVhdGVBcmd1bWVudERlc2NyaXB0b3IpOgorICAgICAgICAoV2ViR1BVOjpE
ZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91
cExheW91dDo6QmluZEdyb3VwTGF5b3V0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5
b3V0OjpzZXRMYWJlbCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91cExheW91dDo6ZW5jb2Rl
ZExlbmd0aCBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5oOgorICAgICAgICAoV2Vi
R1BVOjpCdWZmZXI6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5tbToK
KyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjpCdWZmZXIpOgorICAgICAgICAqIFdlYkdQVS9QaXBl
bGluZUxheW91dC5oOgorICAgICAgICAoV2ViR1BVOjpQaXBlbGluZUxheW91dDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkdQVTo6UGlwZWxpbmVMYXlvdXQ6Om51bWJlck9mQmluZEdyb3VwTGF5b3V0
cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVsaW5lTGF5b3V0OjpiaW5kR3JvdXBMYXlv
dXQgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAgICAgICAg
KFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6
OlBpcGVsaW5lTGF5b3V0OjpQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVs
aW5lTGF5b3V0OjpzZXRMYWJlbCk6CisgICAgICAgICogV2ViR1BVL1NhbXBsZXIuaDoKKyAgICAg
ICAgKFdlYkdQVTo6U2FtcGxlcjo6c2FtcGxlclN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBXZWJH
UFUvU2FtcGxlci5tbToKKyAgICAgICAgKFdlYkdQVTo6U2FtcGxlcjo6U2FtcGxlcik6CisgICAg
ICAgICogV2ViR1BVL1RleHR1cmVWaWV3Lmg6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmVWaWV3
Ojp0ZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZVZpZXcubW06CisgICAg
ICAgIChXZWJHUFU6OlRleHR1cmVWaWV3OjpUZXh0dXJlVmlldyk6CisKIDIwMjItMDItMTkgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BV
XSBUcmFjZXIgYnVsbGV0IHBhcnQgODogQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlIGNy
ZWF0aW9uIHJvdXRpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5oCmluZGV4IDcwZDIyNDUxYjNh
Ny4uNzdjYTBiZmE3Yjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3JvdXAuaApAQCAtNDMsNiArNDMs
MTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICBp
ZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGV4QXJndW1lbnRCdWZmZXI7IH0KKyAgICBpZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50QnVmZmVyOyB9CisgICAg
aWQgPE1UTEJ1ZmZlcj4gY29tcHV0ZUFyZ3VtZW50QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wdXRlQXJndW1lbnRCdWZmZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXAoaWQgPE1U
TEJ1ZmZlcj4gdmVydGV4QXJndW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGZyYWdtZW50QXJn
dW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCBmM2Q3ZTI2ODQ4MmUuLmIxNzMxZWFiZGE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQpAQCAtMjYsMTQgKzI2LDkwIEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkJpbmRHcm91cC5oIgogCisjaW1wb3J0ICJCaW5kR3JvdXBM
YXlvdXQuaCIKKyNpbXBvcnQgIkJ1ZmZlci5oIgogI2ltcG9ydCAiRGV2aWNlLmgiCisjaW1wb3J0
ICJTYW1wbGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViR1BV
IHsKIAorc3RhdGljIGJvb2wgYnVmZmVySXNQcmVzZW50KGNvbnN0IFdHUFVCaW5kR3JvdXBFbnRy
eSYgZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LmJ1ZmZlcjsKK30KKworc3RhdGljIGJvb2wg
c2FtcGxlcklzUHJlc2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAg
IHJldHVybiBlbnRyeS5zYW1wbGVyOworfQorCitzdGF0aWMgYm9vbCB0ZXh0dXJlVmlld0lzUHJl
c2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAgIHJldHVybiBlbnRy
eS50ZXh0dXJlVmlldzsKK30KKwogUmVmUHRyPEJpbmRHcm91cD4gRGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXAoY29uc3QgV0dQVUJpbmRHcm91cERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlc2NyaXB0b3IpOwotICAgIHJldHVybiBCaW5kR3JvdXA6OmNyZWF0ZShu
aWwsIG5pbCwgbmlsKTsKKyAgICBpZiAoZGVzY3JpcHRvci0+bmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgQmluZEdyb3VwTGF5b3V0JiBiaW5kR3JvdXBM
YXlvdXQgPSBkZXNjcmlwdG9yLT5sYXlvdXQtPmJpbmRHcm91cExheW91dDsKKworICAgIC8vIEZJ
WE1FOiBEb24ndCBhbGxvY2F0ZSAzIG5ldyBidWZmZXJzIGZvciBldmVyeSBiaW5kIGdyb3VwLgor
ICAgIC8vIEluIGZhY3QsIGRvbid0IGV2ZW4gYWxsb2NhdGUgYSBzaW5nbGUgbmV3IGJ1ZmZlciBm
b3IgZXZlcnkgYmluZCBncm91cC4KKyAgICBpZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1
ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91dC5lbmNv
ZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsKKyAgICBp
ZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50QnVmZmVyID0gW21fZGV2aWNlIG5ld0J1ZmZl
cldpdGhMZW5ndGg6YmluZEdyb3VwTGF5b3V0LmVuY29kZWRMZW5ndGgoKSBvcHRpb25zOk1UTFJl
c291cmNlU3RvcmFnZU1vZGVTaGFyZWRdOworICAgIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1
bWVudEJ1ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91
dC5lbmNvZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsK
KyAgICBpZiAoIXZlcnRleEFyZ3VtZW50QnVmZmVyIHx8ICFmcmFnbWVudEFyZ3VtZW50QnVmZmVy
IHx8ICFjb21wdXRlQXJndW1lbnRCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpkZXNjcmlwdG9yLT5s
YWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgdmVydGV4QXJndW1lbnRC
dWZmZXIubGFiZWwgPSBsYWJlbDsKKyAgICBmcmFnbWVudEFyZ3VtZW50QnVmZmVyLmxhYmVsID0g
bGFiZWw7CisgICAgY29tcHV0ZUFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWw7CisKKyAgICBp
ZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBM
YXlvdXQudmVydGV4QXJndW1lbnRFbmNvZGVyKCk7CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBMYXlvdXQuZnJhZ21lbnRBcmd1
bWVudEVuY29kZXIoKTsKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiBjb21wdXRlQXJndW1l
bnRFbmNvZGVyID0gYmluZEdyb3VwTGF5b3V0LmNvbXB1dGVBcmd1bWVudEVuY29kZXIoKTsKKyAg
ICBbdmVydGV4QXJndW1lbnRFbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOnZlcnRleEFyZ3VtZW50
QnVmZmVyIG9mZnNldDowXTsKKyAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0QXJndW1l
bnRCdWZmZXI6ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlciBvZmZzZXQ6MF07CisgICAgW2NvbXB1dGVB
cmd1bWVudEVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6Y29tcHV0ZUFyZ3VtZW50QnVmZmVyIG9m
ZnNldDowXTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5lbnRy
eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgV0dQVUJpbmRHcm91cEVudHJ5JiBlbnRyeSA9
IGRlc2NyaXB0b3ItPmVudHJpZXNbaV07CisKKyAgICAgICAgaWYgKGVudHJ5Lm5leHRJbkNoYWlu
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYm9vbCBidWZmZXJJc1By
ZXNlbnQgPSBXZWJHUFU6OmJ1ZmZlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAgIGJvb2wgc2Ft
cGxlcklzUHJlc2VudCA9IFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAg
IGJvb2wgdGV4dHVyZVZpZXdJc1ByZXNlbnQgPSBXZWJHUFU6OnRleHR1cmVWaWV3SXNQcmVzZW50
KGVudHJ5KTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oYnVmZmVySXNQcmVzZW50KSAr
IHN0YXRpY19jYXN0PGludD4oc2FtcGxlcklzUHJlc2VudCkgKyBzdGF0aWNfY2FzdDxpbnQ+KHRl
eHR1cmVWaWV3SXNQcmVzZW50KSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKGJ1ZmZlcklzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTEJ1ZmZl
cj4gYnVmZmVyID0gZW50cnkuYnVmZmVyLT5idWZmZXItPmJ1ZmZlcigpOworICAgICAgICAgICAg
W3ZlcnRleEFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZz
ZXQgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50
RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZzZXQgYXRJbmRleDplbnRy
eS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtjb21wdXRlQXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZl
cjpidWZmZXIgb2Zmc2V0OmVudHJ5Lm9mZnNldCBhdEluZGV4OmVudHJ5LmJpbmRpbmddOworICAg
ICAgICB9IGVsc2UgaWYgKHNhbXBsZXJJc1ByZXNlbnQpIHsKKyAgICAgICAgICAgIGlkIDxNVExT
YW1wbGVyU3RhdGU+IHNhbXBsZXIgPSBlbnRyeS5zYW1wbGVyLT5zYW1wbGVyLT5zYW1wbGVyU3Rh
dGUoKTsKKyAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFy
Z3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRp
bmddOworICAgICAgICAgICAgW2NvbXB1dGVBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0
dXJlVmlld0lzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTFRleHR1cmU+IHRleHR1cmUg
PSBlbnRyeS50ZXh0dXJlVmlldy0+dGV4dHVyZVZpZXctPnRleHR1cmUoKTsKKyAgICAgICAgICAg
IFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnku
YmluZGluZ107CisgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVy
ZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CisgICAgICAgICAgICBbY29tcHV0ZUFy
Z3VtZW50RW5jb2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
QmluZEdyb3VwOjpjcmVhdGUodmVydGV4QXJndW1lbnRCdWZmZXIsIGZyYWdtZW50QXJndW1lbnRC
dWZmZXIsIGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiB9CiAKIEJpbmRHcm91cDo6QmluZEdyb3Vw
KGlkIDxNVExCdWZmZXI+IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFn
bWVudEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBjb21wdXRlQXJndW1lbnRCdWZmZXIp
CkBAIC00MSwxNiArMTE3LDE2IEBAIEJpbmRHcm91cDo6QmluZEdyb3VwKGlkIDxNVExCdWZmZXI+
IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFnbWVuCiAgICAgLCBtX2Zy
YWdtZW50QXJndW1lbnRCdWZmZXIoZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcikKICAgICAsIG1fY29t
cHV0ZUFyZ3VtZW50QnVmZmVyKGNvbXB1dGVBcmd1bWVudEJ1ZmZlcikKIHsKLSAgICBVTlVTRURf
VkFSSUFCTEUobV92ZXJ0ZXhBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1f
ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fY29tcHV0ZUFy
Z3VtZW50QnVmZmVyKTsKIH0KIAogQmluZEdyb3VwOjp+QmluZEdyb3VwKCkgPSBkZWZhdWx0Owog
CiB2b2lkIEJpbmRHcm91cDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGxhYmVsKTsKKyAgICBhdXRvIGxhYmVsU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDU3RyaW5nOmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBt
X3ZlcnRleEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9mcmFnbWVu
dEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9jb21wdXRlQXJndW1l
bnRCdWZmZXIubGFiZWwgPSBsYWJlbFN0cmluZzsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXBMYXlvdXQuaAppbmRleCAwZjA5NWQ4NjRmNGUuLjQxNTNmZGY2YWJiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKQEAgLTQzLDYgKzQzLDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgTlNVSW50ZWdlciBl
bmNvZGVkTGVuZ3RoKCkgY29uc3Q7CisKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0
ZXhBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rl
cjsgfQorICAgIGlkIDxNVExBcmd1bWVudEVuY29kZXI+IGZyYWdtZW50QXJndW1lbnRFbmNvZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50RW5jb2RlcjsgfQorICAgIGlkIDxN
VExBcmd1bWVudEVuY29kZXI+IGNvbXB1dGVBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbXB1dGVBcmd1bWVudEVuY29kZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXBM
YXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLCBpZCA8
TVRMQXJndW1lbnRFbmNvZGVyPiBmcmFnbWVudEFyZ3VtZW50RW5jb2RlciwgaWQgPE1UTEFyZ3Vt
ZW50RW5jb2Rlcj4gY29tcHV0ZUFyZ3VtZW50RW5jb2Rlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0JpbmRHcm91cExheW91dC5tbQppbmRleCBlZGM1ODk3Y2ZmYWUuLjA1NTk1NmQwY2VjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbQpAQCAtMzAsMTAgKzMwLDE4NyBA
QAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAorc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdH
UFVCdWZmZXJCaW5kaW5nTGF5b3V0JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci50eXBl
ICE9IFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQ7Cit9CisKK3N0YXRpYyBNVExBcmd1
bWVudERlc2NyaXB0b3IgKmNyZWF0ZUFyZ3VtZW50RGVzY3JpcHRvcihjb25zdCBXR1BVQnVmZmVy
QmluZGluZ0xheW91dCYgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIubmV4dEluQ2hhaW4pCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBbTVRMQXJndW1lbnRE
ZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1UTERhdGFUeXBlUG9p
bnRlcjsKKyAgICAvLyBGSVhNRTogSGFuZGxlIGhhc0R5bmFtaWNPZmZzZXQuCisgICAgLy8gRklY
TUU6IEhhbmRsZSBtaW5CaW5kaW5nU2l6ZS4KKyAgICBzd2l0Y2ggKGJ1ZmZlci50eXBlKSB7Cisg
ICAgY2FzZSBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybToKKyAgICBjYXNlIFdHUFVCdWZm
ZXJCaW5kaW5nVHlwZV9SZWFkT25seVN0b3JhZ2U6CisgICAgICAgIGRlc2NyaXB0b3IuYWNjZXNz
ID0gTVRMQXJndW1lbnRBY2Nlc3NSZWFkT25seTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
R1BVQnVmZmVyQmluZGluZ1R5cGVfU3RvcmFnZToKKyAgICAgICAgZGVzY3JpcHRvci5hY2Nlc3Mg
PSBNVExBcmd1bWVudEFjY2Vzc1JlYWRXcml0ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9
CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQm
IHNhbXBsZXIpCit7CisgICAgcmV0dXJuIHNhbXBsZXIudHlwZSAhPSBXR1BVU2FtcGxlckJpbmRp
bmdUeXBlX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3Jl
YXRlQXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTYW1wbGVyQmluZGluZ0xheW91dCYgc2Ft
cGxlcikKK3sKKyAgICBpZiAoc2FtcGxlci5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBb
TVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1U
TERhdGFUeXBlU2FtcGxlcjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0
dXJuIGRlc2NyaXB0b3I7Cit9CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVVGV4
dHVyZUJpbmRpbmdMYXlvdXQmIHRleHR1cmUpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
VHlwZSAhPSBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVW5kZWZpbmVkCisgICAgICAgICYmIHRleHR1
cmUudmlld0RpbWVuc2lvbiAhPSBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fVW5kZWZpbmVkOwor
fQorCitzdGF0aWMgTVRMQXJndW1lbnREZXNjcmlwdG9yICpjcmVhdGVBcmd1bWVudERlc2NyaXB0
b3IoY29uc3QgV0dQVVRleHR1cmVCaW5kaW5nTGF5b3V0JiB0ZXh0dXJlKQoreworICAgIGlmICh0
ZXh0dXJlLm5leHRJbkNoYWluKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVU5VU0VEX1BB
UkFNKHRleHR1cmUpOworICAgIGF1dG8gZGVzY3JpcHRvciA9IFtNVExBcmd1bWVudERlc2NyaXB0
b3IgbmV3XTsKKyAgICBkZXNjcmlwdG9yLmRhdGFUeXBlID0gTVRMRGF0YVR5cGVUZXh0dXJlOwor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30K
Kworc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdM
YXlvdXQmIHN0b3JhZ2VUZXh0dXJlKQoreworICAgIHJldHVybiBzdG9yYWdlVGV4dHVyZS5hY2Nl
c3MgIT0gV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzX1VuZGVmaW5lZAorICAgICAgICAmJiBzdG9y
YWdlVGV4dHVyZS5mb3JtYXQgIT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkCisgICAgICAg
ICYmIHN0b3JhZ2VUZXh0dXJlLnZpZXdEaW1lbnNpb24gIT0gV0dQVVRleHR1cmVWaWV3RGltZW5z
aW9uX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3JlYXRl
QXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQm
IHN0b3JhZ2VUZXh0dXJlKQoreworICAgIGlmIChzdG9yYWdlVGV4dHVyZS5uZXh0SW5DaGFpbikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlVGV4dHVyZSk7
CisgICAgYXV0byBkZXNjcmlwdG9yID0gW01UTEFyZ3VtZW50RGVzY3JpcHRvciBuZXddOworICAg
IGRlc2NyaXB0b3IuZGF0YVR5cGUgPSBNVExEYXRhVHlwZVRleHR1cmU7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiBkZXNjcmlwdG9yOworfQorCiBSZWZQdHI8Qmlu
ZEdyb3VwTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dChjb25zdCBXR1BVQmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciogZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURfUEFSQU0o
ZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIEJpbmRHcm91cExheW91dDo6Y3JlYXRlKG5pbCwgbmls
LCBuaWwpOworaWYgKGRlc2NyaXB0b3ItPm5leHRJbkNoYWluKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIE5TTXV0YWJsZUFycmF5PE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqPiAqdmVy
dGV4QXJndW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmRlc2NyaXB0
b3ItPmVudHJ5Q291bnRdOworICAgIE5TTXV0YWJsZUFycmF5PE1UTEFyZ3VtZW50RGVzY3JpcHRv
ciAqPiAqZnJhZ21lbnRBcmd1bWVudHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6ZGVzY3JpcHRvci0+ZW50cnlDb3VudF07CisgICAgTlNNdXRhYmxlQXJyYXk8TVRMQXJndW1l
bnREZXNjcmlwdG9yICo+ICpjb21wdXRlQXJndW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OmRlc2NyaXB0b3ItPmVudHJ5Q291bnRdOworICAgIGlmICghdmVydGV4QXJn
dW1lbnRzIHx8ICFmcmFnbWVudEFyZ3VtZW50cyB8fCAhY29tcHV0ZUFyZ3VtZW50cykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvci0+ZW50cnlDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IFdHUFVCaW5kR3JvdXBMYXlv
dXRFbnRyeSYgZW50cnkgPSBkZXNjcmlwdG9yLT5lbnRyaWVzW2ldOworICAgICAgICBpZiAoZW50
cnkubmV4dEluQ2hhaW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkaWN0ZGVmLWdwdWJpbmRncm91cGxh
eW91dGVudHJ5CisgICAgICAgIC8vICJPbmx5IG9uZSBbb2YgYnVmZmVyLCBzYW1wbGVyLCB0ZXh0
dXJlLCBzdG9yYWdlVGV4dHVyZSwgb3IgZXh0ZXJuYWxUZXh0dXJlXSBtYXkgYmUgZGVmaW5lZCBm
b3IgYW55IGdpdmVuIEdQVUJpbmRHcm91cExheW91dEVudHJ5LiIKKworICAgICAgICBBU1NFUlQo
aSA9PSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQpOworICAgICAgICBBU1NFUlQodmVydGV4QXJndW1l
bnRzLmNvdW50ID09IGZyYWdtZW50QXJndW1lbnRzLmNvdW50KTsKKyAgICAgICAgQVNTRVJUKGZy
YWdtZW50QXJndW1lbnRzLmNvdW50ID09IGNvbXB1dGVBcmd1bWVudHMuY291bnQpOworCisgICAg
ICAgIGNvbnN0IFdHUFVCdWZmZXJCaW5kaW5nTGF5b3V0JiBidWZmZXIgPSBlbnRyeS5idWZmZXI7
CisgICAgICAgIGNvbnN0IFdHUFVTYW1wbGVyQmluZGluZ0xheW91dCYgc2FtcGxlciA9IGVudHJ5
LnNhbXBsZXI7CisgICAgICAgIGNvbnN0IFdHUFVUZXh0dXJlQmluZGluZ0xheW91dCYgdGV4dHVy
ZSA9IGVudHJ5LnRleHR1cmU7CisgICAgICAgIGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRp
bmdMYXlvdXQmIHN0b3JhZ2VUZXh0dXJlID0gZW50cnkuc3RvcmFnZVRleHR1cmU7CisKKyAgICAg
ICAgTVRMQXJndW1lbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmlsOworCisgICAgICAgIGlm
IChpc1ByZXNlbnQoYnVmZmVyKSkgeworICAgICAgICAgICAgaWYgKGkgIT0gdmVydGV4QXJndW1l
bnRzLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAg
ICBkZXNjcmlwdG9yID0gY3JlYXRlQXJndW1lbnREZXNjcmlwdG9yKGJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcmVzZW50KHNhbXBsZXIpKSB7CisgICAgICAgICAg
ICBpZiAoaSAhPSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBjcmVhdGVBcmd1bWVudERlc2Ny
aXB0b3Ioc2FtcGxlcik7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcmVzZW50
KHRleHR1cmUpKSB7CisgICAgICAgICAgICBpZiAoaSAhPSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IgPSBjcmVhdGVBcmd1bWVudERlc2NyaXB0b3IodGV4dHVyZSk7CisgICAgICAgICAgICBpZiAo
IWRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNQcmVzZW50KHN0b3JhZ2VUZXh0dXJlKSkgeworICAgICAgICAgICAg
aWYgKGkgIT0gdmVydGV4QXJndW1lbnRzLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgICAgICBkZXNjcmlwdG9yID0gY3JlYXRlQXJndW1lbnREZXNjcmlw
dG9yKHN0b3JhZ2VUZXh0dXJlKTsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBzaGFkZXIgY29tcGlsZXIuCisgICAg
ICAgIGRlc2NyaXB0b3IuaW5kZXggPSBpOworCisgICAgICAgIE1UTEFyZ3VtZW50RGVzY3JpcHRv
ciAqdmVydGV4RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CisgICAgICAgIE1UTEFyZ3VtZW50RGVz
Y3JpcHRvciAqZnJhZ21lbnREZXNjcmlwdG9yID0gW2Rlc2NyaXB0b3IgY29weV07CisgICAgICAg
IE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY29tcHV0ZURlc2NyaXB0b3IgPSBbZGVzY3JpcHRvciBj
b3B5XTsKKyAgICAgICAgaWYgKCFmcmFnbWVudERlc2NyaXB0b3IgfHwgIWNvbXB1dGVEZXNjcmlw
dG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCEoZW50cnku
dmlzaWJpbGl0eSAmIFdHUFVTaGFkZXJTdGFnZV9WZXJ0ZXgpKQorICAgICAgICAgICAgdmVydGV4
RGVzY3JpcHRvci5hY2Nlc3MgPSBNVExBcmd1bWVudEFjY2Vzc1JlYWRPbmx5OworICAgICAgICBp
ZiAoIShlbnRyeS52aXNpYmlsaXR5ICYgV0dQVVNoYWRlclN0YWdlX0ZyYWdtZW50KSkKKyAgICAg
ICAgICAgIGZyYWdtZW50RGVzY3JpcHRvci5hY2Nlc3MgPSBNVExBcmd1bWVudEFjY2Vzc1JlYWRP
bmx5OworICAgICAgICBpZiAoIShlbnRyeS52aXNpYmlsaXR5ICYgV0dQVVNoYWRlclN0YWdlX0Nv
bXB1dGUpKQorICAgICAgICAgICAgY29tcHV0ZURlc2NyaXB0b3IuYWNjZXNzID0gTVRMQXJndW1l
bnRBY2Nlc3NSZWFkT25seTsKKworICAgICAgICBbdmVydGV4QXJndW1lbnRzIGFkZE9iamVjdDp2
ZXJ0ZXhEZXNjcmlwdG9yXTsKKyAgICAgICAgW2ZyYWdtZW50QXJndW1lbnRzIGFkZE9iamVjdDpm
cmFnbWVudERlc2NyaXB0b3JdOworICAgICAgICBbY29tcHV0ZUFyZ3VtZW50cyBhZGRPYmplY3Q6
Y29tcHV0ZURlc2NyaXB0b3JdOworICAgIH0KKworICAgIGlkIDxNVExBcmd1bWVudEVuY29kZXI+
IHZlcnRleEFyZ3VtZW50RW5jb2RlciA9IFttX2RldmljZSBuZXdBcmd1bWVudEVuY29kZXJXaXRo
QXJndW1lbnRzOnZlcnRleEFyZ3VtZW50c107CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4g
ZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgPSBbbV9kZXZpY2UgbmV3QXJndW1lbnRFbmNvZGVyV2l0
aEFyZ3VtZW50czpmcmFnbWVudEFyZ3VtZW50c107CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gY29tcHV0ZUFyZ3VtZW50RW5jb2RlciA9IFttX2RldmljZSBuZXdBcmd1bWVudEVuY29kZXJX
aXRoQXJndW1lbnRzOmNvbXB1dGVBcmd1bWVudHNdOworICAgIGlmICghdmVydGV4QXJndW1lbnRF
bmNvZGVyIHx8ICFmcmFnbWVudEFyZ3VtZW50RW5jb2RlciB8fCAhY29tcHV0ZUFyZ3VtZW50RW5j
b2RlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGxhYmVsID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhDU3RyaW5nOmRlc2NyaXB0b3ItPmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXTsKKyAgICB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbDsK
KyAgICBmcmFnbWVudEFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsOworICAgIGNvbXB1dGVB
cmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbDsKKworICAgIHJldHVybiBCaW5kR3JvdXBMYXlv
dXQ6OmNyZWF0ZSh2ZXJ0ZXhBcmd1bWVudEVuY29kZXIsIGZyYWdtZW50QXJndW1lbnRFbmNvZGVy
LCBjb21wdXRlQXJndW1lbnRFbmNvZGVyKTsKIH0KIAogQmluZEdyb3VwTGF5b3V0OjpCaW5kR3Jv
dXBMYXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLCBp
ZCA8TVRMQXJndW1lbnRFbmNvZGVyPiBmcmFnbWVudEFyZ3VtZW50RW5jb2RlciwgaWQgPE1UTEFy
Z3VtZW50RW5jb2Rlcj4gY29tcHV0ZUFyZ3VtZW50RW5jb2RlcikKQEAgLTQxLDE2ICsyMTgsMjQg
QEAgQmluZEdyb3VwTGF5b3V0OjpCaW5kR3JvdXBMYXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLAogICAgICwgbV9mcmFnbWVudEFyZ3VtZW50RW5jb2Rl
cihmcmFnbWVudEFyZ3VtZW50RW5jb2RlcikKICAgICAsIG1fY29tcHV0ZUFyZ3VtZW50RW5jb2Rl
cihjb21wdXRlQXJndW1lbnRFbmNvZGVyKQogewotICAgIFVOVVNFRF9WQVJJQUJMRShtX3ZlcnRl
eEFyZ3VtZW50RW5jb2Rlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fZnJhZ21lbnRBcmd1bWVu
dEVuY29kZXIpOwotICAgIFVOVVNFRF9WQVJJQUJMRShtX2NvbXB1dGVBcmd1bWVudEVuY29kZXIp
OwogfQogCiBCaW5kR3JvdXBMYXlvdXQ6On5CaW5kR3JvdXBMYXlvdXQoKSA9IGRlZmF1bHQ7CiAK
IHZvaWQgQmluZEdyb3VwTGF5b3V0OjpzZXRMYWJlbChjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAg
ICBVTlVTRURfUEFSQU0obGFiZWwpOworICAgIGF1dG8gbGFiZWxTdHJpbmcgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aENTdHJpbmc6bGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwor
ICAgIG1fdmVydGV4QXJndW1lbnRFbmNvZGVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9m
cmFnbWVudEFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsU3RyaW5nOworICAgIG1fY29tcHV0
ZUFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsU3RyaW5nOworfQorCitOU1VJbnRlZ2VyIEJp
bmRHcm91cExheW91dDo6ZW5jb2RlZExlbmd0aCgpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQg
PSBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoOworICAgIEFTU0VSVChyZXN1
bHQgPT0gbV9mcmFnbWVudEFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoKTsKKyAgICBBU1NF
UlQocmVzdWx0ID09IG1fY29tcHV0ZUFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5oCmluZGV4IDcxMmZmY2Ey
OGI3NC4uYzhkYTRkNzg4YjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIuaApAQCAtNDksNiArNDksOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1bm1hcCgpOwogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hh
ciopOwogCisgICAgaWQgPE1UTEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXI7IH0KKwogcHJpdmF0ZToKICAgICBCdWZmZXIoaWQgPE1UTEJ1ZmZlcj4pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KaW5kZXggMjE3ZWZiZDc4ZjRhLi4wNTkzMGMyMmYyMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KQEAgLTM5LDcgKzM5LDYgQEAgUmVmUHRyPEJ1ZmZlcj4gRGV2aWNlOjpjcmVh
dGVCdWZmZXIoY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCiBCdWZmZXI6
OkJ1ZmZlcihpZCA8TVRMQnVmZmVyPiBidWZmZXIpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiB7
Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fYnVmZmVyKTsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkg
PSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlv
dXQuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0LmgKaW5kZXggNDE4NTUx
NzhlOTBjLi5kNjNhNDRmZGE0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1Bp
cGVsaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQu
aApAQCAtMjgsMjMgKzI4LDMxIEBACiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogI2ltcG9y
dCA8d3RmL1JlZi5oPgogI2ltcG9ydCA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7CiAKK2NsYXNzIEJpbmRHcm91cExheW91dDsK
KwogY2xhc3MgUGlwZWxpbmVMYXlvdXQgOiBwdWJsaWMgUmVmQ291bnRlZDxQaXBlbGluZUxheW91
dD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxQaXBlbGluZUxheW91
dD4gY3JlYXRlKFZlY3RvcjxSZWY8QmluZEdyb3VwTGF5b3V0Pj4mJiBiaW5kR3JvdXBMYXlvdXRz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGlwZWxpbmVMYXlvdXQoKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBpcGVsaW5lTGF5b3V0KFdURk1vdmUoYmlu
ZEdyb3VwTGF5b3V0cykpKTsKICAgICB9CiAKICAgICB+UGlwZWxpbmVMYXlvdXQoKTsKIAogICAg
IHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgc2l6ZV90IG51bWJlck9mQmluZEdy
b3VwTGF5b3V0cygpIGNvbnN0IHsgcmV0dXJuIG1fYmluZEdyb3VwTGF5b3V0cy5zaXplKCk7IH0K
KyAgICBjb25zdCBCaW5kR3JvdXBMYXlvdXQmIGJpbmRHcm91cExheW91dChzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gbV9iaW5kR3JvdXBMYXlvdXRzW2ldOyB9CisKIHByaXZhdGU6Ci0gICAgUGlw
ZWxpbmVMYXlvdXQoKTsKKyAgICBQaXBlbGluZUxheW91dChWZWN0b3I8UmVmPEJpbmRHcm91cExh
eW91dD4+JiYpOworCisgICAgY29uc3QgVmVjdG9yPFJlZjxCaW5kR3JvdXBMYXlvdXQ+PiBtX2Jp
bmRHcm91cExheW91dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5kZXggMjViNjliNTNhZjFlLi43MDQ2YjNkOWNiNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tCisrKyBi
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tCkBAIC0yNiwyMyArMjYsMzUg
QEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUGlwZWxpbmVMYXlvdXQuaCIKIAorI2lt
cG9ydCAiQmluZEdyb3VwTGF5b3V0LmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIKIAogbmFtZXNwYWNl
IFdlYkdQVSB7CiAKIFJlZlB0cjxQaXBlbGluZUxheW91dD4gRGV2aWNlOjpjcmVhdGVQaXBlbGlu
ZUxheW91dChjb25zdCBXR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKQog
ewotICAgIFVOVVNFRF9QQVJBTShkZXNjcmlwdG9yKTsKLSAgICByZXR1cm4gUGlwZWxpbmVMYXlv
dXQ6OmNyZWF0ZSgpOworICAgIGlmIChkZXNjcmlwdG9yLT5uZXh0SW5DaGFpbikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPEJpbmRHcm91cExheW91dD4+IGJpbmRH
cm91cExheW91dHM7CisgICAgYmluZEdyb3VwTGF5b3V0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRlc2NyaXB0b3ItPmJpbmRHcm91cExheW91dENvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgZGVzY3JpcHRvci0+YmluZEdyb3VwTGF5b3V0Q291bnQ7ICsraSkgeworICAgICAg
ICBjb25zdCBhdXRvKiBiaW5kR3JvdXBMYXlvdXQgPSBkZXNjcmlwdG9yLT5iaW5kR3JvdXBMYXlv
dXRzW2ldOworICAgICAgICBiaW5kR3JvdXBMYXlvdXRzLnVuY2hlY2tlZEFwcGVuZChiaW5kR3Jv
dXBMYXlvdXQtPmJpbmRHcm91cExheW91dCk7CisgICAgfQorICAgIHJldHVybiBQaXBlbGluZUxh
eW91dDo6Y3JlYXRlKFdURk1vdmUoYmluZEdyb3VwTGF5b3V0cykpOwogfQogCi1QaXBlbGluZUxh
eW91dDo6UGlwZWxpbmVMYXlvdXQoKSA9IGRlZmF1bHQ7CitQaXBlbGluZUxheW91dDo6UGlwZWxp
bmVMYXlvdXQoVmVjdG9yPFJlZjxCaW5kR3JvdXBMYXlvdXQ+PiYmIGJpbmRHcm91cExheW91dHMp
CisgICAgOiBtX2JpbmRHcm91cExheW91dHMoV1RGTW92ZShiaW5kR3JvdXBMYXlvdXRzKSkKK3sK
K30KIAogUGlwZWxpbmVMYXlvdXQ6On5QaXBlbGluZUxheW91dCgpID0gZGVmYXVsdDsKIAotdm9p
ZCBQaXBlbGluZUxheW91dDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCit2b2lkIFBpcGVs
aW5lTGF5b3V0OjpzZXRMYWJlbChjb25zdCBjaGFyKikKIHsKLSAgICBVTlVTRURfUEFSQU0obGFi
ZWwpOworICAgIC8vIFRoZXJlIGlzIG5vIE1ldGFsIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBw
aXBlbGluZSBsYXlvdXQuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NhbXBsZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIuaAppbmRleCBlOWNmMTM2
MmUwYTEuLjlkYjhkZGY3N2VkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2Ft
cGxlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIuaApAQCAtNDMsNiArNDMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IGNoYXIqKTsKIAorICAgIGlk
IDxNVExTYW1wbGVyU3RhdGU+IHNhbXBsZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxl
clN0YXRlOyB9CisKIHByaXZhdGU6CiAgICAgU2FtcGxlcihpZCA8TVRMU2FtcGxlclN0YXRlPik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0gYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCmluZGV4IGQxYTMyM2IyYjFlNy4uY2EyMDdmODc4MDZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0KQEAgLTM5LDcgKzM5LDYgQEAgUmVmUHRyPFNhbXBs
ZXI+IERldmljZTo6Y3JlYXRlU2FtcGxlcihjb25zdCBXR1BVU2FtcGxlckRlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpCiBTYW1wbGVyOjpTYW1wbGVyKGlkIDxNVExTYW1wbGVyU3RhdGU+IHNhbXBsZXJT
dGF0ZSkKICAgICA6IG1fc2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSkKIHsKLSAgICBVTlVTRURf
VkFSSUFCTEUobV9zYW1wbGVyU3RhdGUpOwogfQogCiBTYW1wbGVyOjp+U2FtcGxlcigpID0gZGVm
YXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3LmggYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5oCmluZGV4IDNiYjBlMGUzZDU2Mi4uNGI4
ODFmMTY1ODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3LmgKQEAgLTQzLDYgKzQzLDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICBpZCA8
TVRMVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQorCiBwcml2
YXRlOgogICAgIFRleHR1cmVWaWV3KGlkIDxNVExUZXh0dXJlPik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZVZpZXcubW0KaW5kZXggZTM1NDc2YWQwZWU1Li5kNjY2YmY5ZTdkZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tCkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFjZSBXZWJH
UFUgewogVGV4dHVyZVZpZXc6OlRleHR1cmVWaWV3KGlkIDxNVExUZXh0dXJlPiB0ZXh0dXJlKQog
ICAgIDogbV90ZXh0dXJlKHRleHR1cmUpCiB7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fdGV4dHVy
ZSk7CiB9CiAKIFRleHR1cmVWaWV3Ojp+VGV4dHVyZVZpZXcoKSA9IGRlZmF1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>452671</attachid>
            <date>2022-02-19 21:04:11 -0800</date>
            <delta_ts>2022-02-19 21:09:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22849</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggN2U1NTJjZjY4ZDE4Li5iN2E1ODY3NjA3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTcgQEAKKzIwMjItMDItMTkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KKworICAgICAgICBbV2ViR1BVXSBUcmFjZXIgYnVsbGV0IHBhcnQgOTogQmFzaWMgaW1w
bGVtZW50YXRpb24gb2YgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjkwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmlu
ZEdyb3VwLCBCaW5kR3JvdXBMYXlvdXQsIGFuZCBQaXBlbGluZUxheW91dCBtZXRob2RzLgorICAg
ICAgICBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgdG8gc3ViYWxsb2NhdGUgbXVsdGlwbGUgQmluZEdy
b3VwcyBzbyB0aGV5IGNvZXhpc3Qgd2l0aGluIHRoZSBzYW1lIEJ1ZmZlciwKKyAgICAgICAgYnV0
IHRoaXMgaXMgYW4gaW5pdGlhbCBzaW1wbGUgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IGRv
IHRoYXQuCisKKyAgICAgICAgKiBXZWJHUFUvQmluZEdyb3VwLmg6CisgICAgICAgIChXZWJHUFU6
OkJpbmRHcm91cDo6dmVydGV4QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BV
OjpCaW5kR3JvdXA6OmZyYWdtZW50QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2Vi
R1BVOjpCaW5kR3JvdXA6OmNvbXB1dGVBcmd1bWVudEJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
V2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6YnVmZmVySXNQcmVzZW50KToK
KyAgICAgICAgKFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudCk6CisgICAgICAgIChXZWJHUFU6OnRl
eHR1cmVWaWV3SXNQcmVzZW50KToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXApOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXA6OkJpbmRHcm91cCk6CisgICAgICAg
IChXZWJHUFU6OkJpbmRHcm91cDo6c2V0TGFiZWwpOgorICAgICAgICAqIFdlYkdQVS9CaW5kR3Jv
dXBMYXlvdXQuaDoKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5b3V0Ojp2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXBMYXlvdXQ6OmZy
YWdtZW50QXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3Vw
TGF5b3V0Ojpjb21wdXRlQXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUv
QmluZEdyb3VwTGF5b3V0Lm1tOgorICAgICAgICAoV2ViR1BVOjppc1ByZXNlbnQpOgorICAgICAg
ICAoV2ViR1BVOjpjcmVhdGVBcmd1bWVudERlc2NyaXB0b3IpOgorICAgICAgICAoV2ViR1BVOjpE
ZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91
cExheW91dDo6QmluZEdyb3VwTGF5b3V0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5
b3V0OjpzZXRMYWJlbCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91cExheW91dDo6ZW5jb2Rl
ZExlbmd0aCBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5oOgorICAgICAgICAoV2Vi
R1BVOjpCdWZmZXI6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5tbToK
KyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjpCdWZmZXIpOgorICAgICAgICAqIFdlYkdQVS9QaXBl
bGluZUxheW91dC5oOgorICAgICAgICAoV2ViR1BVOjpQaXBlbGluZUxheW91dDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkdQVTo6UGlwZWxpbmVMYXlvdXQ6Om51bWJlck9mQmluZEdyb3VwTGF5b3V0
cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVsaW5lTGF5b3V0OjpiaW5kR3JvdXBMYXlv
dXQgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAgICAgICAg
KFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6
OlBpcGVsaW5lTGF5b3V0OjpQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVs
aW5lTGF5b3V0OjpzZXRMYWJlbCk6CisgICAgICAgICogV2ViR1BVL1NhbXBsZXIuaDoKKyAgICAg
ICAgKFdlYkdQVTo6U2FtcGxlcjo6c2FtcGxlclN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBXZWJH
UFUvU2FtcGxlci5tbToKKyAgICAgICAgKFdlYkdQVTo6U2FtcGxlcjo6U2FtcGxlcik6CisgICAg
ICAgICogV2ViR1BVL1RleHR1cmVWaWV3Lmg6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmVWaWV3
Ojp0ZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZVZpZXcubW06CisgICAg
ICAgIChXZWJHUFU6OlRleHR1cmVWaWV3OjpUZXh0dXJlVmlldyk6CisKIDIwMjItMDItMTkgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BV
XSBUcmFjZXIgYnVsbGV0IHBhcnQgODogQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlIGNy
ZWF0aW9uIHJvdXRpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5oCmluZGV4IDcwZDIyNDUxYjNh
Ny4uNzdjYTBiZmE3Yjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3JvdXAuaApAQCAtNDMsNiArNDMs
MTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICBp
ZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGV4QXJndW1lbnRCdWZmZXI7IH0KKyAgICBpZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50QnVmZmVyOyB9CisgICAg
aWQgPE1UTEJ1ZmZlcj4gY29tcHV0ZUFyZ3VtZW50QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wdXRlQXJndW1lbnRCdWZmZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXAoaWQgPE1U
TEJ1ZmZlcj4gdmVydGV4QXJndW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGZyYWdtZW50QXJn
dW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCBmM2Q3ZTI2ODQ4MmUuLmIxNzMxZWFiZGE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQpAQCAtMjYsMTQgKzI2LDkwIEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkJpbmRHcm91cC5oIgogCisjaW1wb3J0ICJCaW5kR3JvdXBM
YXlvdXQuaCIKKyNpbXBvcnQgIkJ1ZmZlci5oIgogI2ltcG9ydCAiRGV2aWNlLmgiCisjaW1wb3J0
ICJTYW1wbGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViR1BV
IHsKIAorc3RhdGljIGJvb2wgYnVmZmVySXNQcmVzZW50KGNvbnN0IFdHUFVCaW5kR3JvdXBFbnRy
eSYgZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LmJ1ZmZlcjsKK30KKworc3RhdGljIGJvb2wg
c2FtcGxlcklzUHJlc2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAg
IHJldHVybiBlbnRyeS5zYW1wbGVyOworfQorCitzdGF0aWMgYm9vbCB0ZXh0dXJlVmlld0lzUHJl
c2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAgIHJldHVybiBlbnRy
eS50ZXh0dXJlVmlldzsKK30KKwogUmVmUHRyPEJpbmRHcm91cD4gRGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXAoY29uc3QgV0dQVUJpbmRHcm91cERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlc2NyaXB0b3IpOwotICAgIHJldHVybiBCaW5kR3JvdXA6OmNyZWF0ZShu
aWwsIG5pbCwgbmlsKTsKKyAgICBpZiAoZGVzY3JpcHRvci0+bmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgQmluZEdyb3VwTGF5b3V0JiBiaW5kR3JvdXBM
YXlvdXQgPSBkZXNjcmlwdG9yLT5sYXlvdXQtPmJpbmRHcm91cExheW91dDsKKworICAgIC8vIEZJ
WE1FOiBEb24ndCBhbGxvY2F0ZSAzIG5ldyBidWZmZXJzIGZvciBldmVyeSBiaW5kIGdyb3VwLgor
ICAgIC8vIEluIGZhY3QsIGRvbid0IGV2ZW4gYWxsb2NhdGUgYSBzaW5nbGUgbmV3IGJ1ZmZlciBm
b3IgZXZlcnkgYmluZCBncm91cC4KKyAgICBpZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1
ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91dC5lbmNv
ZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsKKyAgICBp
ZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50QnVmZmVyID0gW21fZGV2aWNlIG5ld0J1ZmZl
cldpdGhMZW5ndGg6YmluZEdyb3VwTGF5b3V0LmVuY29kZWRMZW5ndGgoKSBvcHRpb25zOk1UTFJl
c291cmNlU3RvcmFnZU1vZGVTaGFyZWRdOworICAgIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1
bWVudEJ1ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91
dC5lbmNvZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsK
KyAgICBpZiAoIXZlcnRleEFyZ3VtZW50QnVmZmVyIHx8ICFmcmFnbWVudEFyZ3VtZW50QnVmZmVy
IHx8ICFjb21wdXRlQXJndW1lbnRCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpkZXNjcmlwdG9yLT5s
YWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgdmVydGV4QXJndW1lbnRC
dWZmZXIubGFiZWwgPSBsYWJlbDsKKyAgICBmcmFnbWVudEFyZ3VtZW50QnVmZmVyLmxhYmVsID0g
bGFiZWw7CisgICAgY29tcHV0ZUFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWw7CisKKyAgICBp
ZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBM
YXlvdXQudmVydGV4QXJndW1lbnRFbmNvZGVyKCk7CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBMYXlvdXQuZnJhZ21lbnRBcmd1
bWVudEVuY29kZXIoKTsKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiBjb21wdXRlQXJndW1l
bnRFbmNvZGVyID0gYmluZEdyb3VwTGF5b3V0LmNvbXB1dGVBcmd1bWVudEVuY29kZXIoKTsKKyAg
ICBbdmVydGV4QXJndW1lbnRFbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOnZlcnRleEFyZ3VtZW50
QnVmZmVyIG9mZnNldDowXTsKKyAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0QXJndW1l
bnRCdWZmZXI6ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlciBvZmZzZXQ6MF07CisgICAgW2NvbXB1dGVB
cmd1bWVudEVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6Y29tcHV0ZUFyZ3VtZW50QnVmZmVyIG9m
ZnNldDowXTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5lbnRy
eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgV0dQVUJpbmRHcm91cEVudHJ5JiBlbnRyeSA9
IGRlc2NyaXB0b3ItPmVudHJpZXNbaV07CisKKyAgICAgICAgaWYgKGVudHJ5Lm5leHRJbkNoYWlu
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYm9vbCBidWZmZXJJc1By
ZXNlbnQgPSBXZWJHUFU6OmJ1ZmZlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAgIGJvb2wgc2Ft
cGxlcklzUHJlc2VudCA9IFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAg
IGJvb2wgdGV4dHVyZVZpZXdJc1ByZXNlbnQgPSBXZWJHUFU6OnRleHR1cmVWaWV3SXNQcmVzZW50
KGVudHJ5KTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oYnVmZmVySXNQcmVzZW50KSAr
IHN0YXRpY19jYXN0PGludD4oc2FtcGxlcklzUHJlc2VudCkgKyBzdGF0aWNfY2FzdDxpbnQ+KHRl
eHR1cmVWaWV3SXNQcmVzZW50KSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKGJ1ZmZlcklzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTEJ1ZmZl
cj4gYnVmZmVyID0gZW50cnkuYnVmZmVyLT5idWZmZXItPmJ1ZmZlcigpOworICAgICAgICAgICAg
W3ZlcnRleEFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZz
ZXQgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50
RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZzZXQgYXRJbmRleDplbnRy
eS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtjb21wdXRlQXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZl
cjpidWZmZXIgb2Zmc2V0OmVudHJ5Lm9mZnNldCBhdEluZGV4OmVudHJ5LmJpbmRpbmddOworICAg
ICAgICB9IGVsc2UgaWYgKHNhbXBsZXJJc1ByZXNlbnQpIHsKKyAgICAgICAgICAgIGlkIDxNVExT
YW1wbGVyU3RhdGU+IHNhbXBsZXIgPSBlbnRyeS5zYW1wbGVyLT5zYW1wbGVyLT5zYW1wbGVyU3Rh
dGUoKTsKKyAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFy
Z3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRp
bmddOworICAgICAgICAgICAgW2NvbXB1dGVBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0
dXJlVmlld0lzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTFRleHR1cmU+IHRleHR1cmUg
PSBlbnRyeS50ZXh0dXJlVmlldy0+dGV4dHVyZVZpZXctPnRleHR1cmUoKTsKKyAgICAgICAgICAg
IFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnku
YmluZGluZ107CisgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVy
ZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CisgICAgICAgICAgICBbY29tcHV0ZUFy
Z3VtZW50RW5jb2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
QmluZEdyb3VwOjpjcmVhdGUodmVydGV4QXJndW1lbnRCdWZmZXIsIGZyYWdtZW50QXJndW1lbnRC
dWZmZXIsIGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiB9CiAKIEJpbmRHcm91cDo6QmluZEdyb3Vw
KGlkIDxNVExCdWZmZXI+IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFn
bWVudEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBjb21wdXRlQXJndW1lbnRCdWZmZXIp
CkBAIC00MSwxNiArMTE3LDE2IEBAIEJpbmRHcm91cDo6QmluZEdyb3VwKGlkIDxNVExCdWZmZXI+
IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFnbWVuCiAgICAgLCBtX2Zy
YWdtZW50QXJndW1lbnRCdWZmZXIoZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcikKICAgICAsIG1fY29t
cHV0ZUFyZ3VtZW50QnVmZmVyKGNvbXB1dGVBcmd1bWVudEJ1ZmZlcikKIHsKLSAgICBVTlVTRURf
VkFSSUFCTEUobV92ZXJ0ZXhBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1f
ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fY29tcHV0ZUFy
Z3VtZW50QnVmZmVyKTsKIH0KIAogQmluZEdyb3VwOjp+QmluZEdyb3VwKCkgPSBkZWZhdWx0Owog
CiB2b2lkIEJpbmRHcm91cDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGxhYmVsKTsKKyAgICBhdXRvIGxhYmVsU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDU3RyaW5nOmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBt
X3ZlcnRleEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9mcmFnbWVu
dEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9jb21wdXRlQXJndW1l
bnRCdWZmZXIubGFiZWwgPSBsYWJlbFN0cmluZzsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXBMYXlvdXQuaAppbmRleCAwZjA5NWQ4NjRmNGUuLjQxNTNmZGY2YWJiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKQEAgLTQzLDYgKzQzLDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgTlNVSW50ZWdlciBl
bmNvZGVkTGVuZ3RoKCkgY29uc3Q7CisKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0
ZXhBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rl
cjsgfQorICAgIGlkIDxNVExBcmd1bWVudEVuY29kZXI+IGZyYWdtZW50QXJndW1lbnRFbmNvZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50RW5jb2RlcjsgfQorICAgIGlkIDxN
VExBcmd1bWVudEVuY29kZXI+IGNvbXB1dGVBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbXB1dGVBcmd1bWVudEVuY29kZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXBM
YXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLCBpZCA8
TVRMQXJndW1lbnRFbmNvZGVyPiBmcmFnbWVudEFyZ3VtZW50RW5jb2RlciwgaWQgPE1UTEFyZ3Vt
ZW50RW5jb2Rlcj4gY29tcHV0ZUFyZ3VtZW50RW5jb2Rlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0JpbmRHcm91cExheW91dC5tbQppbmRleCBlZGM1ODk3Y2ZmYWUuLjA1NTk1NmQwY2VjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbQpAQCAtMzAsMTAgKzMwLDE4NyBA
QAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAorc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdH
UFVCdWZmZXJCaW5kaW5nTGF5b3V0JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci50eXBl
ICE9IFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQ7Cit9CisKK3N0YXRpYyBNVExBcmd1
bWVudERlc2NyaXB0b3IgKmNyZWF0ZUFyZ3VtZW50RGVzY3JpcHRvcihjb25zdCBXR1BVQnVmZmVy
QmluZGluZ0xheW91dCYgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIubmV4dEluQ2hhaW4pCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBbTVRMQXJndW1lbnRE
ZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1UTERhdGFUeXBlUG9p
bnRlcjsKKyAgICAvLyBGSVhNRTogSGFuZGxlIGhhc0R5bmFtaWNPZmZzZXQuCisgICAgLy8gRklY
TUU6IEhhbmRsZSBtaW5CaW5kaW5nU2l6ZS4KKyAgICBzd2l0Y2ggKGJ1ZmZlci50eXBlKSB7Cisg
ICAgY2FzZSBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybToKKyAgICBjYXNlIFdHUFVCdWZm
ZXJCaW5kaW5nVHlwZV9SZWFkT25seVN0b3JhZ2U6CisgICAgICAgIGRlc2NyaXB0b3IuYWNjZXNz
ID0gTVRMQXJndW1lbnRBY2Nlc3NSZWFkT25seTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
R1BVQnVmZmVyQmluZGluZ1R5cGVfU3RvcmFnZToKKyAgICAgICAgZGVzY3JpcHRvci5hY2Nlc3Mg
PSBNVExBcmd1bWVudEFjY2Vzc1JlYWRXcml0ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9
CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQm
IHNhbXBsZXIpCit7CisgICAgcmV0dXJuIHNhbXBsZXIudHlwZSAhPSBXR1BVU2FtcGxlckJpbmRp
bmdUeXBlX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3Jl
YXRlQXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTYW1wbGVyQmluZGluZ0xheW91dCYgc2Ft
cGxlcikKK3sKKyAgICBpZiAoc2FtcGxlci5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBb
TVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1U
TERhdGFUeXBlU2FtcGxlcjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0
dXJuIGRlc2NyaXB0b3I7Cit9CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVVGV4
dHVyZUJpbmRpbmdMYXlvdXQmIHRleHR1cmUpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
VHlwZSAhPSBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVW5kZWZpbmVkCisgICAgICAgICYmIHRleHR1
cmUudmlld0RpbWVuc2lvbiAhPSBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fVW5kZWZpbmVkOwor
fQorCitzdGF0aWMgTVRMQXJndW1lbnREZXNjcmlwdG9yICpjcmVhdGVBcmd1bWVudERlc2NyaXB0
b3IoY29uc3QgV0dQVVRleHR1cmVCaW5kaW5nTGF5b3V0JiB0ZXh0dXJlKQoreworICAgIGlmICh0
ZXh0dXJlLm5leHRJbkNoYWluKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVU5VU0VEX1BB
UkFNKHRleHR1cmUpOworICAgIGF1dG8gZGVzY3JpcHRvciA9IFtNVExBcmd1bWVudERlc2NyaXB0
b3IgbmV3XTsKKyAgICBkZXNjcmlwdG9yLmRhdGFUeXBlID0gTVRMRGF0YVR5cGVUZXh0dXJlOwor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30K
Kworc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdM
YXlvdXQmIHN0b3JhZ2VUZXh0dXJlKQoreworICAgIHJldHVybiBzdG9yYWdlVGV4dHVyZS5hY2Nl
c3MgIT0gV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzX1VuZGVmaW5lZAorICAgICAgICAmJiBzdG9y
YWdlVGV4dHVyZS5mb3JtYXQgIT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkCisgICAgICAg
ICYmIHN0b3JhZ2VUZXh0dXJlLnZpZXdEaW1lbnNpb24gIT0gV0dQVVRleHR1cmVWaWV3RGltZW5z
aW9uX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3JlYXRl
QXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQm
IHN0b3JhZ2VUZXh0dXJlKQoreworICAgIGlmIChzdG9yYWdlVGV4dHVyZS5uZXh0SW5DaGFpbikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlVGV4dHVyZSk7
CisgICAgYXV0byBkZXNjcmlwdG9yID0gW01UTEFyZ3VtZW50RGVzY3JpcHRvciBuZXddOworICAg
IGRlc2NyaXB0b3IuZGF0YVR5cGUgPSBNVExEYXRhVHlwZVRleHR1cmU7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiBkZXNjcmlwdG9yOworfQorCiBSZWZQdHI8Qmlu
ZEdyb3VwTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dChjb25zdCBXR1BVQmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciogZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURfUEFSQU0o
ZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIEJpbmRHcm91cExheW91dDo6Y3JlYXRlKG5pbCwgbmls
LCBuaWwpOworaWYgKGRlc2NyaXB0b3ItPm5leHRJbkNoYWluKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIE5TTXV0YWJsZUFycmF5PE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqPiAqdmVy
dGV4QXJndW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmRlc2NyaXB0
b3ItPmVudHJ5Q291bnRdOworICAgIE5TTXV0YWJsZUFycmF5PE1UTEFyZ3VtZW50RGVzY3JpcHRv
ciAqPiAqZnJhZ21lbnRBcmd1bWVudHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6ZGVzY3JpcHRvci0+ZW50cnlDb3VudF07CisgICAgTlNNdXRhYmxlQXJyYXk8TVRMQXJndW1l
bnREZXNjcmlwdG9yICo+ICpjb21wdXRlQXJndW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OmRlc2NyaXB0b3ItPmVudHJ5Q291bnRdOworICAgIGlmICghdmVydGV4QXJn
dW1lbnRzIHx8ICFmcmFnbWVudEFyZ3VtZW50cyB8fCAhY29tcHV0ZUFyZ3VtZW50cykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvci0+ZW50cnlDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IFdHUFVCaW5kR3JvdXBMYXlv
dXRFbnRyeSYgZW50cnkgPSBkZXNjcmlwdG9yLT5lbnRyaWVzW2ldOworICAgICAgICBpZiAoZW50
cnkubmV4dEluQ2hhaW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkaWN0ZGVmLWdwdWJpbmRncm91cGxh
eW91dGVudHJ5CisgICAgICAgIC8vICJPbmx5IG9uZSBbb2YgYnVmZmVyLCBzYW1wbGVyLCB0ZXh0
dXJlLCBzdG9yYWdlVGV4dHVyZSwgb3IgZXh0ZXJuYWxUZXh0dXJlXSBtYXkgYmUgZGVmaW5lZCBm
b3IgYW55IGdpdmVuIEdQVUJpbmRHcm91cExheW91dEVudHJ5LiIKKworICAgICAgICBBU1NFUlQo
aSA9PSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQpOworICAgICAgICBBU1NFUlQodmVydGV4QXJndW1l
bnRzLmNvdW50ID09IGZyYWdtZW50QXJndW1lbnRzLmNvdW50KTsKKyAgICAgICAgQVNTRVJUKGZy
YWdtZW50QXJndW1lbnRzLmNvdW50ID09IGNvbXB1dGVBcmd1bWVudHMuY291bnQpOworCisgICAg
ICAgIGNvbnN0IFdHUFVCdWZmZXJCaW5kaW5nTGF5b3V0JiBidWZmZXIgPSBlbnRyeS5idWZmZXI7
CisgICAgICAgIGNvbnN0IFdHUFVTYW1wbGVyQmluZGluZ0xheW91dCYgc2FtcGxlciA9IGVudHJ5
LnNhbXBsZXI7CisgICAgICAgIGNvbnN0IFdHUFVUZXh0dXJlQmluZGluZ0xheW91dCYgdGV4dHVy
ZSA9IGVudHJ5LnRleHR1cmU7CisgICAgICAgIGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRp
bmdMYXlvdXQmIHN0b3JhZ2VUZXh0dXJlID0gZW50cnkuc3RvcmFnZVRleHR1cmU7CisKKyAgICAg
ICAgTVRMQXJndW1lbnREZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmlsOworCisgICAgICAgIGlm
IChpc1ByZXNlbnQoYnVmZmVyKSkgeworICAgICAgICAgICAgaWYgKGkgIT0gdmVydGV4QXJndW1l
bnRzLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAg
ICBkZXNjcmlwdG9yID0gY3JlYXRlQXJndW1lbnREZXNjcmlwdG9yKGJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcmVzZW50KHNhbXBsZXIpKSB7CisgICAgICAgICAg
ICBpZiAoaSAhPSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBjcmVhdGVBcmd1bWVudERlc2Ny
aXB0b3Ioc2FtcGxlcik7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcmVzZW50
KHRleHR1cmUpKSB7CisgICAgICAgICAgICBpZiAoaSAhPSB2ZXJ0ZXhBcmd1bWVudHMuY291bnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IgPSBjcmVhdGVBcmd1bWVudERlc2NyaXB0b3IodGV4dHVyZSk7CisgICAgICAgICAgICBpZiAo
IWRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNQcmVzZW50KHN0b3JhZ2VUZXh0dXJlKSkgeworICAgICAgICAgICAg
aWYgKGkgIT0gdmVydGV4QXJndW1lbnRzLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgICAgICBkZXNjcmlwdG9yID0gY3JlYXRlQXJndW1lbnREZXNjcmlw
dG9yKHN0b3JhZ2VUZXh0dXJlKTsKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBzaGFkZXIgY29tcGlsZXIuCisgICAg
ICAgIGRlc2NyaXB0b3IuaW5kZXggPSBpOworCisgICAgICAgIE1UTEFyZ3VtZW50RGVzY3JpcHRv
ciAqdmVydGV4RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CisgICAgICAgIE1UTEFyZ3VtZW50RGVz
Y3JpcHRvciAqZnJhZ21lbnREZXNjcmlwdG9yID0gW2Rlc2NyaXB0b3IgY29weV07CisgICAgICAg
IE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY29tcHV0ZURlc2NyaXB0b3IgPSBbZGVzY3JpcHRvciBj
b3B5XTsKKyAgICAgICAgaWYgKCFmcmFnbWVudERlc2NyaXB0b3IgfHwgIWNvbXB1dGVEZXNjcmlw
dG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCEoZW50cnku
dmlzaWJpbGl0eSAmIFdHUFVTaGFkZXJTdGFnZV9WZXJ0ZXgpKQorICAgICAgICAgICAgdmVydGV4
RGVzY3JpcHRvci5hY2Nlc3MgPSBNVExBcmd1bWVudEFjY2Vzc1JlYWRPbmx5OworICAgICAgICBp
ZiAoIShlbnRyeS52aXNpYmlsaXR5ICYgV0dQVVNoYWRlclN0YWdlX0ZyYWdtZW50KSkKKyAgICAg
ICAgICAgIGZyYWdtZW50RGVzY3JpcHRvci5hY2Nlc3MgPSBNVExBcmd1bWVudEFjY2Vzc1JlYWRP
bmx5OworICAgICAgICBpZiAoIShlbnRyeS52aXNpYmlsaXR5ICYgV0dQVVNoYWRlclN0YWdlX0Nv
bXB1dGUpKQorICAgICAgICAgICAgY29tcHV0ZURlc2NyaXB0b3IuYWNjZXNzID0gTVRMQXJndW1l
bnRBY2Nlc3NSZWFkT25seTsKKworICAgICAgICBbdmVydGV4QXJndW1lbnRzIGFkZE9iamVjdDp2
ZXJ0ZXhEZXNjcmlwdG9yXTsKKyAgICAgICAgW2ZyYWdtZW50QXJndW1lbnRzIGFkZE9iamVjdDpm
cmFnbWVudERlc2NyaXB0b3JdOworICAgICAgICBbY29tcHV0ZUFyZ3VtZW50cyBhZGRPYmplY3Q6
Y29tcHV0ZURlc2NyaXB0b3JdOworICAgIH0KKworICAgIGlkIDxNVExBcmd1bWVudEVuY29kZXI+
IHZlcnRleEFyZ3VtZW50RW5jb2RlciA9IFttX2RldmljZSBuZXdBcmd1bWVudEVuY29kZXJXaXRo
QXJndW1lbnRzOnZlcnRleEFyZ3VtZW50c107CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4g
ZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgPSBbbV9kZXZpY2UgbmV3QXJndW1lbnRFbmNvZGVyV2l0
aEFyZ3VtZW50czpmcmFnbWVudEFyZ3VtZW50c107CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gY29tcHV0ZUFyZ3VtZW50RW5jb2RlciA9IFttX2RldmljZSBuZXdBcmd1bWVudEVuY29kZXJX
aXRoQXJndW1lbnRzOmNvbXB1dGVBcmd1bWVudHNdOworICAgIGlmICghdmVydGV4QXJndW1lbnRF
bmNvZGVyIHx8ICFmcmFnbWVudEFyZ3VtZW50RW5jb2RlciB8fCAhY29tcHV0ZUFyZ3VtZW50RW5j
b2RlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGxhYmVsID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhDU3RyaW5nOmRlc2NyaXB0b3ItPmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXTsKKyAgICB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbDsK
KyAgICBmcmFnbWVudEFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsOworICAgIGNvbXB1dGVB
cmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbDsKKworICAgIHJldHVybiBCaW5kR3JvdXBMYXlv
dXQ6OmNyZWF0ZSh2ZXJ0ZXhBcmd1bWVudEVuY29kZXIsIGZyYWdtZW50QXJndW1lbnRFbmNvZGVy
LCBjb21wdXRlQXJndW1lbnRFbmNvZGVyKTsKIH0KIAogQmluZEdyb3VwTGF5b3V0OjpCaW5kR3Jv
dXBMYXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLCBp
ZCA8TVRMQXJndW1lbnRFbmNvZGVyPiBmcmFnbWVudEFyZ3VtZW50RW5jb2RlciwgaWQgPE1UTEFy
Z3VtZW50RW5jb2Rlcj4gY29tcHV0ZUFyZ3VtZW50RW5jb2RlcikKQEAgLTQxLDE2ICsyMTgsMjQg
QEAgQmluZEdyb3VwTGF5b3V0OjpCaW5kR3JvdXBMYXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLAogICAgICwgbV9mcmFnbWVudEFyZ3VtZW50RW5jb2Rl
cihmcmFnbWVudEFyZ3VtZW50RW5jb2RlcikKICAgICAsIG1fY29tcHV0ZUFyZ3VtZW50RW5jb2Rl
cihjb21wdXRlQXJndW1lbnRFbmNvZGVyKQogewotICAgIFVOVVNFRF9WQVJJQUJMRShtX3ZlcnRl
eEFyZ3VtZW50RW5jb2Rlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fZnJhZ21lbnRBcmd1bWVu
dEVuY29kZXIpOwotICAgIFVOVVNFRF9WQVJJQUJMRShtX2NvbXB1dGVBcmd1bWVudEVuY29kZXIp
OwogfQogCiBCaW5kR3JvdXBMYXlvdXQ6On5CaW5kR3JvdXBMYXlvdXQoKSA9IGRlZmF1bHQ7CiAK
IHZvaWQgQmluZEdyb3VwTGF5b3V0OjpzZXRMYWJlbChjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAg
ICBVTlVTRURfUEFSQU0obGFiZWwpOworICAgIGF1dG8gbGFiZWxTdHJpbmcgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aENTdHJpbmc6bGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwor
ICAgIG1fdmVydGV4QXJndW1lbnRFbmNvZGVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9m
cmFnbWVudEFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsU3RyaW5nOworICAgIG1fY29tcHV0
ZUFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsU3RyaW5nOworfQorCitOU1VJbnRlZ2VyIEJp
bmRHcm91cExheW91dDo6ZW5jb2RlZExlbmd0aCgpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQg
PSBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoOworICAgIEFTU0VSVChyZXN1
bHQgPT0gbV9mcmFnbWVudEFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoKTsKKyAgICBBU1NF
UlQocmVzdWx0ID09IG1fY29tcHV0ZUFyZ3VtZW50RW5jb2Rlci5lbmNvZGVkTGVuZ3RoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5oCmluZGV4IDcxMmZmY2Ey
OGI3NC4uYzhkYTRkNzg4YjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIuaApAQCAtNDksNiArNDksOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1bm1hcCgpOwogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hh
ciopOwogCisgICAgaWQgPE1UTEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXI7IH0KKwogcHJpdmF0ZToKICAgICBCdWZmZXIoaWQgPE1UTEJ1ZmZlcj4pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KaW5kZXggMjE3ZWZiZDc4ZjRhLi4wNTkzMGMyMmYyMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KQEAgLTM5LDcgKzM5LDYgQEAgUmVmUHRyPEJ1ZmZlcj4gRGV2aWNlOjpjcmVh
dGVCdWZmZXIoY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCiBCdWZmZXI6
OkJ1ZmZlcihpZCA8TVRMQnVmZmVyPiBidWZmZXIpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiB7
Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fYnVmZmVyKTsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkg
PSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlv
dXQuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0LmgKaW5kZXggNDE4NTUx
NzhlOTBjLi5kNjNhNDRmZGE0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1Bp
cGVsaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQu
aApAQCAtMjgsMjMgKzI4LDMxIEBACiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogI2ltcG9y
dCA8d3RmL1JlZi5oPgogI2ltcG9ydCA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7CiAKK2NsYXNzIEJpbmRHcm91cExheW91dDsK
KwogY2xhc3MgUGlwZWxpbmVMYXlvdXQgOiBwdWJsaWMgUmVmQ291bnRlZDxQaXBlbGluZUxheW91
dD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxQaXBlbGluZUxheW91
dD4gY3JlYXRlKFZlY3RvcjxSZWY8QmluZEdyb3VwTGF5b3V0Pj4mJiBiaW5kR3JvdXBMYXlvdXRz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGlwZWxpbmVMYXlvdXQoKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBpcGVsaW5lTGF5b3V0KFdURk1vdmUoYmlu
ZEdyb3VwTGF5b3V0cykpKTsKICAgICB9CiAKICAgICB+UGlwZWxpbmVMYXlvdXQoKTsKIAogICAg
IHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgc2l6ZV90IG51bWJlck9mQmluZEdy
b3VwTGF5b3V0cygpIGNvbnN0IHsgcmV0dXJuIG1fYmluZEdyb3VwTGF5b3V0cy5zaXplKCk7IH0K
KyAgICBjb25zdCBCaW5kR3JvdXBMYXlvdXQmIGJpbmRHcm91cExheW91dChzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gbV9iaW5kR3JvdXBMYXlvdXRzW2ldOyB9CisKIHByaXZhdGU6Ci0gICAgUGlw
ZWxpbmVMYXlvdXQoKTsKKyAgICBQaXBlbGluZUxheW91dChWZWN0b3I8UmVmPEJpbmRHcm91cExh
eW91dD4+JiYpOworCisgICAgY29uc3QgVmVjdG9yPFJlZjxCaW5kR3JvdXBMYXlvdXQ+PiBtX2Jp
bmRHcm91cExheW91dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5kZXggMjViNjliNTNhZjFlLi43MDQ2YjNkOWNiNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tCisrKyBi
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tCkBAIC0yNiwyMyArMjYsMzUg
QEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUGlwZWxpbmVMYXlvdXQuaCIKIAorI2lt
cG9ydCAiQmluZEdyb3VwTGF5b3V0LmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIKIAogbmFtZXNwYWNl
IFdlYkdQVSB7CiAKIFJlZlB0cjxQaXBlbGluZUxheW91dD4gRGV2aWNlOjpjcmVhdGVQaXBlbGlu
ZUxheW91dChjb25zdCBXR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKQog
ewotICAgIFVOVVNFRF9QQVJBTShkZXNjcmlwdG9yKTsKLSAgICByZXR1cm4gUGlwZWxpbmVMYXlv
dXQ6OmNyZWF0ZSgpOworICAgIGlmIChkZXNjcmlwdG9yLT5uZXh0SW5DaGFpbikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPEJpbmRHcm91cExheW91dD4+IGJpbmRH
cm91cExheW91dHM7CisgICAgYmluZEdyb3VwTGF5b3V0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRlc2NyaXB0b3ItPmJpbmRHcm91cExheW91dENvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgZGVzY3JpcHRvci0+YmluZEdyb3VwTGF5b3V0Q291bnQ7ICsraSkgeworICAgICAg
ICBjb25zdCBhdXRvKiBiaW5kR3JvdXBMYXlvdXQgPSBkZXNjcmlwdG9yLT5iaW5kR3JvdXBMYXlv
dXRzW2ldOworICAgICAgICBiaW5kR3JvdXBMYXlvdXRzLnVuY2hlY2tlZEFwcGVuZChiaW5kR3Jv
dXBMYXlvdXQtPmJpbmRHcm91cExheW91dCk7CisgICAgfQorICAgIHJldHVybiBQaXBlbGluZUxh
eW91dDo6Y3JlYXRlKFdURk1vdmUoYmluZEdyb3VwTGF5b3V0cykpOwogfQogCi1QaXBlbGluZUxh
eW91dDo6UGlwZWxpbmVMYXlvdXQoKSA9IGRlZmF1bHQ7CitQaXBlbGluZUxheW91dDo6UGlwZWxp
bmVMYXlvdXQoVmVjdG9yPFJlZjxCaW5kR3JvdXBMYXlvdXQ+PiYmIGJpbmRHcm91cExheW91dHMp
CisgICAgOiBtX2JpbmRHcm91cExheW91dHMoV1RGTW92ZShiaW5kR3JvdXBMYXlvdXRzKSkKK3sK
K30KIAogUGlwZWxpbmVMYXlvdXQ6On5QaXBlbGluZUxheW91dCgpID0gZGVmYXVsdDsKIAotdm9p
ZCBQaXBlbGluZUxheW91dDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCit2b2lkIFBpcGVs
aW5lTGF5b3V0OjpzZXRMYWJlbChjb25zdCBjaGFyKikKIHsKLSAgICBVTlVTRURfUEFSQU0obGFi
ZWwpOworICAgIC8vIFRoZXJlIGlzIG5vIE1ldGFsIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBw
aXBlbGluZSBsYXlvdXQuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NhbXBsZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIuaAppbmRleCBlOWNmMTM2
MmUwYTEuLjlkYjhkZGY3N2VkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2Ft
cGxlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIuaApAQCAtNDMsNiArNDMs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IGNoYXIqKTsKIAorICAgIGlk
IDxNVExTYW1wbGVyU3RhdGU+IHNhbXBsZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxl
clN0YXRlOyB9CisKIHByaXZhdGU6CiAgICAgU2FtcGxlcihpZCA8TVRMU2FtcGxlclN0YXRlPik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0gYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCmluZGV4IGQxYTMyM2IyYjFlNy4uY2EyMDdmODc4MDZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0KQEAgLTM5LDcgKzM5LDYgQEAgUmVmUHRyPFNhbXBs
ZXI+IERldmljZTo6Y3JlYXRlU2FtcGxlcihjb25zdCBXR1BVU2FtcGxlckRlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpCiBTYW1wbGVyOjpTYW1wbGVyKGlkIDxNVExTYW1wbGVyU3RhdGU+IHNhbXBsZXJT
dGF0ZSkKICAgICA6IG1fc2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSkKIHsKLSAgICBVTlVTRURf
VkFSSUFCTEUobV9zYW1wbGVyU3RhdGUpOwogfQogCiBTYW1wbGVyOjp+U2FtcGxlcigpID0gZGVm
YXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3LmggYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5oCmluZGV4IDNiYjBlMGUzZDU2Mi4uNGI4
ODFmMTY1ODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3LmgKQEAgLTQzLDYgKzQzLDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICBpZCA8
TVRMVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQorCiBwcml2
YXRlOgogICAgIFRleHR1cmVWaWV3KGlkIDxNVExUZXh0dXJlPik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZVZpZXcubW0KaW5kZXggZTM1NDc2YWQwZWU1Li5kNjY2YmY5ZTdkZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmVWaWV3Lm1tCkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFjZSBXZWJH
UFUgewogVGV4dHVyZVZpZXc6OlRleHR1cmVWaWV3KGlkIDxNVExUZXh0dXJlPiB0ZXh0dXJlKQog
ICAgIDogbV90ZXh0dXJlKHRleHR1cmUpCiB7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fdGV4dHVy
ZSk7CiB9CiAKIFRleHR1cmVWaWV3Ojp+VGV4dHVyZVZpZXcoKSA9IGRlZmF1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452675</attachid>
            <date>2022-02-19 21:09:23 -0800</date>
            <delta_ts>2022-02-21 09:33:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22853</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggN2U1NTJjZjY4ZDE4Li5iN2E1ODY3NjA3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTcgQEAKKzIwMjItMDItMTkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KKworICAgICAgICBbV2ViR1BVXSBUcmFjZXIgYnVsbGV0IHBhcnQgOTogQmFzaWMgaW1w
bGVtZW50YXRpb24gb2YgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjkwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmlu
ZEdyb3VwLCBCaW5kR3JvdXBMYXlvdXQsIGFuZCBQaXBlbGluZUxheW91dCBtZXRob2RzLgorICAg
ICAgICBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgdG8gc3ViYWxsb2NhdGUgbXVsdGlwbGUgQmluZEdy
b3VwcyBzbyB0aGV5IGNvZXhpc3Qgd2l0aGluIHRoZSBzYW1lIEJ1ZmZlciwKKyAgICAgICAgYnV0
IHRoaXMgaXMgYW4gaW5pdGlhbCBzaW1wbGUgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IGRv
IHRoYXQuCisKKyAgICAgICAgKiBXZWJHUFUvQmluZEdyb3VwLmg6CisgICAgICAgIChXZWJHUFU6
OkJpbmRHcm91cDo6dmVydGV4QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BV
OjpCaW5kR3JvdXA6OmZyYWdtZW50QXJndW1lbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2Vi
R1BVOjpCaW5kR3JvdXA6OmNvbXB1dGVBcmd1bWVudEJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
V2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6YnVmZmVySXNQcmVzZW50KToK
KyAgICAgICAgKFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudCk6CisgICAgICAgIChXZWJHUFU6OnRl
eHR1cmVWaWV3SXNQcmVzZW50KToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXApOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXA6OkJpbmRHcm91cCk6CisgICAgICAg
IChXZWJHUFU6OkJpbmRHcm91cDo6c2V0TGFiZWwpOgorICAgICAgICAqIFdlYkdQVS9CaW5kR3Jv
dXBMYXlvdXQuaDoKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5b3V0Ojp2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpCaW5kR3JvdXBMYXlvdXQ6OmZy
YWdtZW50QXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3Vw
TGF5b3V0Ojpjb21wdXRlQXJndW1lbnRFbmNvZGVyIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUv
QmluZEdyb3VwTGF5b3V0Lm1tOgorICAgICAgICAoV2ViR1BVOjppc1ByZXNlbnQpOgorICAgICAg
ICAoV2ViR1BVOjpjcmVhdGVBcmd1bWVudERlc2NyaXB0b3IpOgorICAgICAgICAoV2ViR1BVOjpE
ZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91
cExheW91dDo6QmluZEdyb3VwTGF5b3V0KToKKyAgICAgICAgKFdlYkdQVTo6QmluZEdyb3VwTGF5
b3V0OjpzZXRMYWJlbCk6CisgICAgICAgIChXZWJHUFU6OkJpbmRHcm91cExheW91dDo6ZW5jb2Rl
ZExlbmd0aCBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5oOgorICAgICAgICAoV2Vi
R1BVOjpCdWZmZXI6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgICogV2ViR1BVL0J1ZmZlci5tbToK
KyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjpCdWZmZXIpOgorICAgICAgICAqIFdlYkdQVS9QaXBl
bGluZUxheW91dC5oOgorICAgICAgICAoV2ViR1BVOjpQaXBlbGluZUxheW91dDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkdQVTo6UGlwZWxpbmVMYXlvdXQ6Om51bWJlck9mQmluZEdyb3VwTGF5b3V0
cyBjb25zdCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVsaW5lTGF5b3V0OjpiaW5kR3JvdXBMYXlv
dXQgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAgICAgICAg
KFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6
OlBpcGVsaW5lTGF5b3V0OjpQaXBlbGluZUxheW91dCk6CisgICAgICAgIChXZWJHUFU6OlBpcGVs
aW5lTGF5b3V0OjpzZXRMYWJlbCk6CisgICAgICAgICogV2ViR1BVL1NhbXBsZXIuaDoKKyAgICAg
ICAgKFdlYkdQVTo6U2FtcGxlcjo6c2FtcGxlclN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBXZWJH
UFUvU2FtcGxlci5tbToKKyAgICAgICAgKFdlYkdQVTo6U2FtcGxlcjo6U2FtcGxlcik6CisgICAg
ICAgICogV2ViR1BVL1RleHR1cmVWaWV3Lmg6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmVWaWV3
Ojp0ZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZVZpZXcubW06CisgICAg
ICAgIChXZWJHUFU6OlRleHR1cmVWaWV3OjpUZXh0dXJlVmlldyk6CisKIDIwMjItMDItMTkgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BV
XSBUcmFjZXIgYnVsbGV0IHBhcnQgODogQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlIGNy
ZWF0aW9uIHJvdXRpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5oCmluZGV4IDcwZDIyNDUxYjNh
Ny4uNzdjYTBiZmE3Yjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3Jv
dXAuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3JvdXAuaApAQCAtNDMsNiArNDMs
MTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAgICBp
ZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGV4QXJndW1lbnRCdWZmZXI7IH0KKyAgICBpZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50QnVmZmVyOyB9CisgICAg
aWQgPE1UTEJ1ZmZlcj4gY29tcHV0ZUFyZ3VtZW50QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wdXRlQXJndW1lbnRCdWZmZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXAoaWQgPE1U
TEJ1ZmZlcj4gdmVydGV4QXJndW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGZyYWdtZW50QXJn
dW1lbnRCdWZmZXIsIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCBmM2Q3ZTI2ODQ4MmUuLmIxNzMxZWFiZGE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQpAQCAtMjYsMTQgKzI2LDkwIEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkJpbmRHcm91cC5oIgogCisjaW1wb3J0ICJCaW5kR3JvdXBM
YXlvdXQuaCIKKyNpbXBvcnQgIkJ1ZmZlci5oIgogI2ltcG9ydCAiRGV2aWNlLmgiCisjaW1wb3J0
ICJTYW1wbGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViR1BV
IHsKIAorc3RhdGljIGJvb2wgYnVmZmVySXNQcmVzZW50KGNvbnN0IFdHUFVCaW5kR3JvdXBFbnRy
eSYgZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LmJ1ZmZlcjsKK30KKworc3RhdGljIGJvb2wg
c2FtcGxlcklzUHJlc2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAg
IHJldHVybiBlbnRyeS5zYW1wbGVyOworfQorCitzdGF0aWMgYm9vbCB0ZXh0dXJlVmlld0lzUHJl
c2VudChjb25zdCBXR1BVQmluZEdyb3VwRW50cnkmIGVudHJ5KQoreworICAgIHJldHVybiBlbnRy
eS50ZXh0dXJlVmlldzsKK30KKwogUmVmUHRyPEJpbmRHcm91cD4gRGV2aWNlOjpjcmVhdGVCaW5k
R3JvdXAoY29uc3QgV0dQVUJpbmRHcm91cERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlc2NyaXB0b3IpOwotICAgIHJldHVybiBCaW5kR3JvdXA6OmNyZWF0ZShu
aWwsIG5pbCwgbmlsKTsKKyAgICBpZiAoZGVzY3JpcHRvci0+bmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgQmluZEdyb3VwTGF5b3V0JiBiaW5kR3JvdXBM
YXlvdXQgPSBkZXNjcmlwdG9yLT5sYXlvdXQtPmJpbmRHcm91cExheW91dDsKKworICAgIC8vIEZJ
WE1FOiBEb24ndCBhbGxvY2F0ZSAzIG5ldyBidWZmZXJzIGZvciBldmVyeSBiaW5kIGdyb3VwLgor
ICAgIC8vIEluIGZhY3QsIGRvbid0IGV2ZW4gYWxsb2NhdGUgYSBzaW5nbGUgbmV3IGJ1ZmZlciBm
b3IgZXZlcnkgYmluZCBncm91cC4KKyAgICBpZCA8TVRMQnVmZmVyPiB2ZXJ0ZXhBcmd1bWVudEJ1
ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91dC5lbmNv
ZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsKKyAgICBp
ZCA8TVRMQnVmZmVyPiBmcmFnbWVudEFyZ3VtZW50QnVmZmVyID0gW21fZGV2aWNlIG5ld0J1ZmZl
cldpdGhMZW5ndGg6YmluZEdyb3VwTGF5b3V0LmVuY29kZWRMZW5ndGgoKSBvcHRpb25zOk1UTFJl
c291cmNlU3RvcmFnZU1vZGVTaGFyZWRdOworICAgIGlkIDxNVExCdWZmZXI+IGNvbXB1dGVBcmd1
bWVudEJ1ZmZlciA9IFttX2RldmljZSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmJpbmRHcm91cExheW91
dC5lbmNvZGVkTGVuZ3RoKCkgb3B0aW9uczpNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkXTsK
KyAgICBpZiAoIXZlcnRleEFyZ3VtZW50QnVmZmVyIHx8ICFmcmFnbWVudEFyZ3VtZW50QnVmZmVy
IHx8ICFjb21wdXRlQXJndW1lbnRCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpkZXNjcmlwdG9yLT5s
YWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgdmVydGV4QXJndW1lbnRC
dWZmZXIubGFiZWwgPSBsYWJlbDsKKyAgICBmcmFnbWVudEFyZ3VtZW50QnVmZmVyLmxhYmVsID0g
bGFiZWw7CisgICAgY29tcHV0ZUFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWw7CisKKyAgICBp
ZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBM
YXlvdXQudmVydGV4QXJndW1lbnRFbmNvZGVyKCk7CisgICAgaWQgPE1UTEFyZ3VtZW50RW5jb2Rl
cj4gZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgPSBiaW5kR3JvdXBMYXlvdXQuZnJhZ21lbnRBcmd1
bWVudEVuY29kZXIoKTsKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiBjb21wdXRlQXJndW1l
bnRFbmNvZGVyID0gYmluZEdyb3VwTGF5b3V0LmNvbXB1dGVBcmd1bWVudEVuY29kZXIoKTsKKyAg
ICBbdmVydGV4QXJndW1lbnRFbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOnZlcnRleEFyZ3VtZW50
QnVmZmVyIG9mZnNldDowXTsKKyAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0QXJndW1l
bnRCdWZmZXI6ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlciBvZmZzZXQ6MF07CisgICAgW2NvbXB1dGVB
cmd1bWVudEVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6Y29tcHV0ZUFyZ3VtZW50QnVmZmVyIG9m
ZnNldDowXTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5lbnRy
eUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgV0dQVUJpbmRHcm91cEVudHJ5JiBlbnRyeSA9
IGRlc2NyaXB0b3ItPmVudHJpZXNbaV07CisKKyAgICAgICAgaWYgKGVudHJ5Lm5leHRJbkNoYWlu
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYm9vbCBidWZmZXJJc1By
ZXNlbnQgPSBXZWJHUFU6OmJ1ZmZlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAgIGJvb2wgc2Ft
cGxlcklzUHJlc2VudCA9IFdlYkdQVTo6c2FtcGxlcklzUHJlc2VudChlbnRyeSk7CisgICAgICAg
IGJvb2wgdGV4dHVyZVZpZXdJc1ByZXNlbnQgPSBXZWJHUFU6OnRleHR1cmVWaWV3SXNQcmVzZW50
KGVudHJ5KTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oYnVmZmVySXNQcmVzZW50KSAr
IHN0YXRpY19jYXN0PGludD4oc2FtcGxlcklzUHJlc2VudCkgKyBzdGF0aWNfY2FzdDxpbnQ+KHRl
eHR1cmVWaWV3SXNQcmVzZW50KSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKGJ1ZmZlcklzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTEJ1ZmZl
cj4gYnVmZmVyID0gZW50cnkuYnVmZmVyLT5idWZmZXItPmJ1ZmZlcigpOworICAgICAgICAgICAg
W3ZlcnRleEFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZz
ZXQgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50
RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDplbnRyeS5vZmZzZXQgYXRJbmRleDplbnRy
eS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtjb21wdXRlQXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZl
cjpidWZmZXIgb2Zmc2V0OmVudHJ5Lm9mZnNldCBhdEluZGV4OmVudHJ5LmJpbmRpbmddOworICAg
ICAgICB9IGVsc2UgaWYgKHNhbXBsZXJJc1ByZXNlbnQpIHsKKyAgICAgICAgICAgIGlkIDxNVExT
YW1wbGVyU3RhdGU+IHNhbXBsZXIgPSBlbnRyeS5zYW1wbGVyLT5zYW1wbGVyLT5zYW1wbGVyU3Rh
dGUoKTsKKyAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgICAgIFtmcmFnbWVudEFy
Z3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRp
bmddOworICAgICAgICAgICAgW2NvbXB1dGVBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRl
OnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0
dXJlVmlld0lzUHJlc2VudCkgeworICAgICAgICAgICAgaWQgPE1UTFRleHR1cmU+IHRleHR1cmUg
PSBlbnRyeS50ZXh0dXJlVmlldy0+dGV4dHVyZVZpZXctPnRleHR1cmUoKTsKKyAgICAgICAgICAg
IFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnku
YmluZGluZ107CisgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVy
ZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CisgICAgICAgICAgICBbY29tcHV0ZUFy
Z3VtZW50RW5jb2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
QmluZEdyb3VwOjpjcmVhdGUodmVydGV4QXJndW1lbnRCdWZmZXIsIGZyYWdtZW50QXJndW1lbnRC
dWZmZXIsIGNvbXB1dGVBcmd1bWVudEJ1ZmZlcik7CiB9CiAKIEJpbmRHcm91cDo6QmluZEdyb3Vw
KGlkIDxNVExCdWZmZXI+IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFn
bWVudEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBjb21wdXRlQXJndW1lbnRCdWZmZXIp
CkBAIC00MSwxNiArMTE3LDE2IEBAIEJpbmRHcm91cDo6QmluZEdyb3VwKGlkIDxNVExCdWZmZXI+
IHZlcnRleEFyZ3VtZW50QnVmZmVyLCBpZCA8TVRMQnVmZmVyPiBmcmFnbWVuCiAgICAgLCBtX2Zy
YWdtZW50QXJndW1lbnRCdWZmZXIoZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcikKICAgICAsIG1fY29t
cHV0ZUFyZ3VtZW50QnVmZmVyKGNvbXB1dGVBcmd1bWVudEJ1ZmZlcikKIHsKLSAgICBVTlVTRURf
VkFSSUFCTEUobV92ZXJ0ZXhBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1f
ZnJhZ21lbnRBcmd1bWVudEJ1ZmZlcik7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKG1fY29tcHV0ZUFy
Z3VtZW50QnVmZmVyKTsKIH0KIAogQmluZEdyb3VwOjp+QmluZEdyb3VwKCkgPSBkZWZhdWx0Owog
CiB2b2lkIEJpbmRHcm91cDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGxhYmVsKTsKKyAgICBhdXRvIGxhYmVsU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDU3RyaW5nOmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBt
X3ZlcnRleEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9mcmFnbWVu
dEFyZ3VtZW50QnVmZmVyLmxhYmVsID0gbGFiZWxTdHJpbmc7CisgICAgbV9jb21wdXRlQXJndW1l
bnRCdWZmZXIubGFiZWwgPSBsYWJlbFN0cmluZzsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXBMYXlvdXQuaAppbmRleCAwZjA5NWQ4NjRmNGUuLjQxNTNmZGY2YWJiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0LmgKQEAgLTQzLDYgKzQzLDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgTlNVSW50ZWdlciBl
bmNvZGVkTGVuZ3RoKCkgY29uc3Q7CisKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0
ZXhBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rl
cjsgfQorICAgIGlkIDxNVExBcmd1bWVudEVuY29kZXI+IGZyYWdtZW50QXJndW1lbnRFbmNvZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudEFyZ3VtZW50RW5jb2RlcjsgfQorICAgIGlkIDxN
VExBcmd1bWVudEVuY29kZXI+IGNvbXB1dGVBcmd1bWVudEVuY29kZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbXB1dGVBcmd1bWVudEVuY29kZXI7IH0KKwogcHJpdmF0ZToKICAgICBCaW5kR3JvdXBM
YXlvdXQoaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4QXJndW1lbnRFbmNvZGVyLCBpZCA8
TVRMQXJndW1lbnRFbmNvZGVyPiBmcmFnbWVudEFyZ3VtZW50RW5jb2RlciwgaWQgPE1UTEFyZ3Vt
ZW50RW5jb2Rlcj4gY29tcHV0ZUFyZ3VtZW50RW5jb2Rlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0JpbmRHcm91cExheW91dC5tbQppbmRleCBlZGM1ODk3Y2ZmYWUuLjIxOTNmMjMxZTk3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwTGF5b3V0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cExheW91dC5tbQpAQCAtMzAsMTAgKzMwLDE4NyBA
QAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAorc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdH
UFVCdWZmZXJCaW5kaW5nTGF5b3V0JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci50eXBl
ICE9IFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQ7Cit9CisKK3N0YXRpYyBNVExBcmd1
bWVudERlc2NyaXB0b3IgKmNyZWF0ZUFyZ3VtZW50RGVzY3JpcHRvcihjb25zdCBXR1BVQnVmZmVy
QmluZGluZ0xheW91dCYgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIubmV4dEluQ2hhaW4pCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBbTVRMQXJndW1lbnRE
ZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1UTERhdGFUeXBlUG9p
bnRlcjsKKyAgICAvLyBGSVhNRTogSGFuZGxlIGhhc0R5bmFtaWNPZmZzZXQuCisgICAgLy8gRklY
TUU6IEhhbmRsZSBtaW5CaW5kaW5nU2l6ZS4KKyAgICBzd2l0Y2ggKGJ1ZmZlci50eXBlKSB7Cisg
ICAgY2FzZSBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybToKKyAgICBjYXNlIFdHUFVCdWZm
ZXJCaW5kaW5nVHlwZV9SZWFkT25seVN0b3JhZ2U6CisgICAgICAgIGRlc2NyaXB0b3IuYWNjZXNz
ID0gTVRMQXJndW1lbnRBY2Nlc3NSZWFkT25seTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
R1BVQnVmZmVyQmluZGluZ1R5cGVfU3RvcmFnZToKKyAgICAgICAgZGVzY3JpcHRvci5hY2Nlc3Mg
PSBNVExBcmd1bWVudEFjY2Vzc1JlYWRXcml0ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9
CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQm
IHNhbXBsZXIpCit7CisgICAgcmV0dXJuIHNhbXBsZXIudHlwZSAhPSBXR1BVU2FtcGxlckJpbmRp
bmdUeXBlX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3Jl
YXRlQXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTYW1wbGVyQmluZGluZ0xheW91dCYgc2Ft
cGxlcikKK3sKKyAgICBpZiAoc2FtcGxlci5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVyKTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBb
TVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld107CisgICAgZGVzY3JpcHRvci5kYXRhVHlwZSA9IE1U
TERhdGFUeXBlU2FtcGxlcjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0
dXJuIGRlc2NyaXB0b3I7Cit9CisKK3N0YXRpYyBib29sIGlzUHJlc2VudChjb25zdCBXR1BVVGV4
dHVyZUJpbmRpbmdMYXlvdXQmIHRleHR1cmUpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
VHlwZSAhPSBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVW5kZWZpbmVkCisgICAgICAgICYmIHRleHR1
cmUudmlld0RpbWVuc2lvbiAhPSBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fVW5kZWZpbmVkOwor
fQorCitzdGF0aWMgTVRMQXJndW1lbnREZXNjcmlwdG9yICpjcmVhdGVBcmd1bWVudERlc2NyaXB0
b3IoY29uc3QgV0dQVVRleHR1cmVCaW5kaW5nTGF5b3V0JiB0ZXh0dXJlKQoreworICAgIGlmICh0
ZXh0dXJlLm5leHRJbkNoYWluKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVU5VU0VEX1BB
UkFNKHRleHR1cmUpOworICAgIGF1dG8gZGVzY3JpcHRvciA9IFtNVExBcmd1bWVudERlc2NyaXB0
b3IgbmV3XTsKKyAgICBkZXNjcmlwdG9yLmRhdGFUeXBlID0gTVRMRGF0YVR5cGVUZXh0dXJlOwor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30K
Kworc3RhdGljIGJvb2wgaXNQcmVzZW50KGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdM
YXlvdXQmIHN0b3JhZ2VUZXh0dXJlKQoreworICAgIHJldHVybiBzdG9yYWdlVGV4dHVyZS5hY2Nl
c3MgIT0gV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzX1VuZGVmaW5lZAorICAgICAgICAmJiBzdG9y
YWdlVGV4dHVyZS5mb3JtYXQgIT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkCisgICAgICAg
ICYmIHN0b3JhZ2VUZXh0dXJlLnZpZXdEaW1lbnNpb24gIT0gV0dQVVRleHR1cmVWaWV3RGltZW5z
aW9uX1VuZGVmaW5lZDsKK30KKworc3RhdGljIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqY3JlYXRl
QXJndW1lbnREZXNjcmlwdG9yKGNvbnN0IFdHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQm
IHN0b3JhZ2VUZXh0dXJlKQoreworICAgIGlmIChzdG9yYWdlVGV4dHVyZS5uZXh0SW5DaGFpbikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlVGV4dHVyZSk7
CisgICAgYXV0byBkZXNjcmlwdG9yID0gW01UTEFyZ3VtZW50RGVzY3JpcHRvciBuZXddOworICAg
IGRlc2NyaXB0b3IuZGF0YVR5cGUgPSBNVExEYXRhVHlwZVRleHR1cmU7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiBkZXNjcmlwdG9yOworfQorCiBSZWZQdHI8Qmlu
ZEdyb3VwTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZUJpbmRHcm91cExheW91dChjb25zdCBXR1BVQmlu
ZEdyb3VwTGF5b3V0RGVzY3JpcHRvciogZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURfUEFSQU0o
ZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIEJpbmRHcm91cExheW91dDo6Y3JlYXRlKG5pbCwgbmls
LCBuaWwpOworICAgIGlmIChkZXNjcmlwdG9yLT5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBOU011dGFibGVBcnJheTxNVExBcmd1bWVudERlc2NyaXB0b3IgKj4g
KnZlcnRleEFyZ3VtZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpkZXNj
cmlwdG9yLT5lbnRyeUNvdW50XTsKKyAgICBOU011dGFibGVBcnJheTxNVExBcmd1bWVudERlc2Ny
aXB0b3IgKj4gKmZyYWdtZW50QXJndW1lbnRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OmRlc2NyaXB0b3ItPmVudHJ5Q291bnRdOworICAgIE5TTXV0YWJsZUFycmF5PE1UTEFy
Z3VtZW50RGVzY3JpcHRvciAqPiAqY29tcHV0ZUFyZ3VtZW50cyA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTpkZXNjcmlwdG9yLT5lbnRyeUNvdW50XTsKKyAgICBpZiAoIXZlcnRl
eEFyZ3VtZW50cyB8fCAhZnJhZ21lbnRBcmd1bWVudHMgfHwgIWNvbXB1dGVBcmd1bWVudHMpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRl
c2NyaXB0b3ItPmVudHJ5Q291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBXR1BVQmluZEdyb3Vw
TGF5b3V0RW50cnkmIGVudHJ5ID0gZGVzY3JpcHRvci0+ZW50cmllc1tpXTsKKyAgICAgICAgaWYg
KGVudHJ5Lm5leHRJbkNoYWluKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZGljdGRlZi1ncHViaW5kZ3Jv
dXBsYXlvdXRlbnRyeQorICAgICAgICAvLyAiT25seSBvbmUgW29mIGJ1ZmZlciwgc2FtcGxlciwg
dGV4dHVyZSwgc3RvcmFnZVRleHR1cmUsIG9yIGV4dGVybmFsVGV4dHVyZV0gbWF5IGJlIGRlZmlu
ZWQgZm9yIGFueSBnaXZlbiBHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeS4iCisKKyAgICAgICAgQVNT
RVJUKGkgPT0gdmVydGV4QXJndW1lbnRzLmNvdW50KTsKKyAgICAgICAgQVNTRVJUKHZlcnRleEFy
Z3VtZW50cy5jb3VudCA9PSBmcmFnbWVudEFyZ3VtZW50cy5jb3VudCk7CisgICAgICAgIEFTU0VS
VChmcmFnbWVudEFyZ3VtZW50cy5jb3VudCA9PSBjb21wdXRlQXJndW1lbnRzLmNvdW50KTsKKwor
ICAgICAgICBjb25zdCBXR1BVQnVmZmVyQmluZGluZ0xheW91dCYgYnVmZmVyID0gZW50cnkuYnVm
ZmVyOworICAgICAgICBjb25zdCBXR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQmIHNhbXBsZXIgPSBl
bnRyeS5zYW1wbGVyOworICAgICAgICBjb25zdCBXR1BVVGV4dHVyZUJpbmRpbmdMYXlvdXQmIHRl
eHR1cmUgPSBlbnRyeS50ZXh0dXJlOworICAgICAgICBjb25zdCBXR1BVU3RvcmFnZVRleHR1cmVC
aW5kaW5nTGF5b3V0JiBzdG9yYWdlVGV4dHVyZSA9IGVudHJ5LnN0b3JhZ2VUZXh0dXJlOworCisg
ICAgICAgIE1UTEFyZ3VtZW50RGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG5pbDsKKworICAgICAg
ICBpZiAoaXNQcmVzZW50KGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGlmIChpICE9IHZlcnRleEFy
Z3VtZW50cy5jb3VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICAgICAgZGVzY3JpcHRvciA9IGNyZWF0ZUFyZ3VtZW50RGVzY3JpcHRvcihidWZmZXIpOworICAg
ICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzUHJlc2VudChzYW1wbGVyKSkgeworICAgICAg
ICAgICAgaWYgKGkgIT0gdmVydGV4QXJndW1lbnRzLmNvdW50KQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICBkZXNjcmlwdG9yID0gY3JlYXRlQXJndW1lbnRE
ZXNjcmlwdG9yKHNhbXBsZXIpOworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzUHJl
c2VudCh0ZXh0dXJlKSkgeworICAgICAgICAgICAgaWYgKGkgIT0gdmVydGV4QXJndW1lbnRzLmNv
dW50KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBkZXNj
cmlwdG9yID0gY3JlYXRlQXJndW1lbnREZXNjcmlwdG9yKHRleHR1cmUpOworICAgICAgICAgICAg
aWYgKCFkZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzUHJlc2VudChzdG9yYWdlVGV4dHVyZSkpIHsKKyAgICAgICAg
ICAgIGlmIChpICE9IHZlcnRleEFyZ3VtZW50cy5jb3VudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgZGVzY3JpcHRvciA9IGNyZWF0ZUFyZ3VtZW50RGVz
Y3JpcHRvcihzdG9yYWdlVGV4dHVyZSk7CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICAvLyBG
SVhNRTogVGhpcyBuZWVkcyBjb29yZGluYXRpb24gd2l0aCB0aGUgc2hhZGVyIGNvbXBpbGVyLgor
ICAgICAgICBkZXNjcmlwdG9yLmluZGV4ID0gaTsKKworICAgICAgICBNVExBcmd1bWVudERlc2Ny
aXB0b3IgKnZlcnRleERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOworICAgICAgICBNVExBcmd1bWVu
dERlc2NyaXB0b3IgKmZyYWdtZW50RGVzY3JpcHRvciA9IFtkZXNjcmlwdG9yIGNvcHldOworICAg
ICAgICBNVExBcmd1bWVudERlc2NyaXB0b3IgKmNvbXB1dGVEZXNjcmlwdG9yID0gW2Rlc2NyaXB0
b3IgY29weV07CisgICAgICAgIGlmICghZnJhZ21lbnREZXNjcmlwdG9yIHx8ICFjb21wdXRlRGVz
Y3JpcHRvcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICghKGVu
dHJ5LnZpc2liaWxpdHkgJiBXR1BVU2hhZGVyU3RhZ2VfVmVydGV4KSkKKyAgICAgICAgICAgIHZl
cnRleERlc2NyaXB0b3IuYWNjZXNzID0gTVRMQXJndW1lbnRBY2Nlc3NSZWFkT25seTsKKyAgICAg
ICAgaWYgKCEoZW50cnkudmlzaWJpbGl0eSAmIFdHUFVTaGFkZXJTdGFnZV9GcmFnbWVudCkpCisg
ICAgICAgICAgICBmcmFnbWVudERlc2NyaXB0b3IuYWNjZXNzID0gTVRMQXJndW1lbnRBY2Nlc3NS
ZWFkT25seTsKKyAgICAgICAgaWYgKCEoZW50cnkudmlzaWJpbGl0eSAmIFdHUFVTaGFkZXJTdGFn
ZV9Db21wdXRlKSkKKyAgICAgICAgICAgIGNvbXB1dGVEZXNjcmlwdG9yLmFjY2VzcyA9IE1UTEFy
Z3VtZW50QWNjZXNzUmVhZE9ubHk7CisKKyAgICAgICAgW3ZlcnRleEFyZ3VtZW50cyBhZGRPYmpl
Y3Q6dmVydGV4RGVzY3JpcHRvcl07CisgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50cyBhZGRPYmpl
Y3Q6ZnJhZ21lbnREZXNjcmlwdG9yXTsKKyAgICAgICAgW2NvbXB1dGVBcmd1bWVudHMgYWRkT2Jq
ZWN0OmNvbXB1dGVEZXNjcmlwdG9yXTsKKyAgICB9CisKKyAgICBpZCA8TVRMQXJndW1lbnRFbmNv
ZGVyPiB2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgPSBbbV9kZXZpY2UgbmV3QXJndW1lbnRFbmNvZGVy
V2l0aEFyZ3VtZW50czp2ZXJ0ZXhBcmd1bWVudHNdOworICAgIGlkIDxNVExBcmd1bWVudEVuY29k
ZXI+IGZyYWdtZW50QXJndW1lbnRFbmNvZGVyID0gW21fZGV2aWNlIG5ld0FyZ3VtZW50RW5jb2Rl
cldpdGhBcmd1bWVudHM6ZnJhZ21lbnRBcmd1bWVudHNdOworICAgIGlkIDxNVExBcmd1bWVudEVu
Y29kZXI+IGNvbXB1dGVBcmd1bWVudEVuY29kZXIgPSBbbV9kZXZpY2UgbmV3QXJndW1lbnRFbmNv
ZGVyV2l0aEFyZ3VtZW50czpjb21wdXRlQXJndW1lbnRzXTsKKyAgICBpZiAoIXZlcnRleEFyZ3Vt
ZW50RW5jb2RlciB8fCAhZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgfHwgIWNvbXB1dGVBcmd1bWVu
dEVuY29kZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBsYWJlbCA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpkZXNjcmlwdG9yLT5sYWJlbCBlbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107CisgICAgdmVydGV4QXJndW1lbnRFbmNvZGVyLmxhYmVsID0gbGFi
ZWw7CisgICAgZnJhZ21lbnRBcmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbDsKKyAgICBjb21w
dXRlQXJndW1lbnRFbmNvZGVyLmxhYmVsID0gbGFiZWw7CisKKyAgICByZXR1cm4gQmluZEdyb3Vw
TGF5b3V0OjpjcmVhdGUodmVydGV4QXJndW1lbnRFbmNvZGVyLCBmcmFnbWVudEFyZ3VtZW50RW5j
b2RlciwgY29tcHV0ZUFyZ3VtZW50RW5jb2Rlcik7CiB9CiAKIEJpbmRHcm91cExheW91dDo6Qmlu
ZEdyb3VwTGF5b3V0KGlkIDxNVExBcmd1bWVudEVuY29kZXI+IHZlcnRleEFyZ3VtZW50RW5jb2Rl
ciwgaWQgPE1UTEFyZ3VtZW50RW5jb2Rlcj4gZnJhZ21lbnRBcmd1bWVudEVuY29kZXIsIGlkIDxN
VExBcmd1bWVudEVuY29kZXI+IGNvbXB1dGVBcmd1bWVudEVuY29kZXIpCkBAIC00MSwxNiArMjE4
LDI0IEBAIEJpbmRHcm91cExheW91dDo6QmluZEdyb3VwTGF5b3V0KGlkIDxNVExBcmd1bWVudEVu
Y29kZXI+IHZlcnRleEFyZ3VtZW50RW5jb2RlciwKICAgICAsIG1fZnJhZ21lbnRBcmd1bWVudEVu
Y29kZXIoZnJhZ21lbnRBcmd1bWVudEVuY29kZXIpCiAgICAgLCBtX2NvbXB1dGVBcmd1bWVudEVu
Y29kZXIoY29tcHV0ZUFyZ3VtZW50RW5jb2RlcikKIHsKLSAgICBVTlVTRURfVkFSSUFCTEUobV92
ZXJ0ZXhBcmd1bWVudEVuY29kZXIpOwotICAgIFVOVVNFRF9WQVJJQUJMRShtX2ZyYWdtZW50QXJn
dW1lbnRFbmNvZGVyKTsKLSAgICBVTlVTRURfVkFSSUFCTEUobV9jb21wdXRlQXJndW1lbnRFbmNv
ZGVyKTsKIH0KIAogQmluZEdyb3VwTGF5b3V0Ojp+QmluZEdyb3VwTGF5b3V0KCkgPSBkZWZhdWx0
OwogCiB2b2lkIEJpbmRHcm91cExheW91dDo6c2V0TGFiZWwoY29uc3QgY2hhciogbGFiZWwpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGxhYmVsKTsKKyAgICBhdXRvIGxhYmVsU3RyaW5nID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhDU3RyaW5nOmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKKyAgICBtX3ZlcnRleEFyZ3VtZW50RW5jb2Rlci5sYWJlbCA9IGxhYmVsU3RyaW5nOworICAg
IG1fZnJhZ21lbnRBcmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbFN0cmluZzsKKyAgICBtX2Nv
bXB1dGVBcmd1bWVudEVuY29kZXIubGFiZWwgPSBsYWJlbFN0cmluZzsKK30KKworTlNVSW50ZWdl
ciBCaW5kR3JvdXBMYXlvdXQ6OmVuY29kZWRMZW5ndGgoKSBjb25zdAoreworICAgIGF1dG8gcmVz
dWx0ID0gbV92ZXJ0ZXhBcmd1bWVudEVuY29kZXIuZW5jb2RlZExlbmd0aDsKKyAgICBBU1NFUlQo
cmVzdWx0ID09IG1fZnJhZ21lbnRBcmd1bWVudEVuY29kZXIuZW5jb2RlZExlbmd0aCk7CisgICAg
QVNTRVJUKHJlc3VsdCA9PSBtX2NvbXB1dGVBcmd1bWVudEVuY29kZXIuZW5jb2RlZExlbmd0aCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQnVmZmVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIuaAppbmRleCA3MTJm
ZmNhMjhiNzQuLmM4ZGE0ZDc4OGI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLmgKQEAgLTQ5LDYgKzQ5
LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5tYXAoKTsKICAgICB2b2lkIHNldExhYmVsKGNvbnN0
IGNoYXIqKTsKIAorICAgIGlkIDxNVExCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyOyB9CisKIHByaXZhdGU6CiAgICAgQnVmZmVyKGlkIDxNVExCdWZmZXI+KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1tIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQnVmZmVyLm1tCmluZGV4IDIxN2VmYmQ3OGY0YS4uMDU5MzBjMjJmMjMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQnVmZmVyLm1tCkBAIC0zOSw3ICszOSw2IEBAIFJlZlB0cjxCdWZmZXI+IERldmljZTo6
Y3JlYXRlQnVmZmVyKGNvbnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKQogQnVm
ZmVyOjpCdWZmZXIoaWQgPE1UTEJ1ZmZlcj4gYnVmZmVyKQogICAgIDogbV9idWZmZXIoYnVmZmVy
KQogewotICAgIFVOVVNFRF9WQVJJQUJMRShtX2J1ZmZlcik7CiB9CiAKIEJ1ZmZlcjo6fkJ1ZmZl
cigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5l
TGF5b3V0LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5oCmluZGV4IDQx
ODU1MTc4ZTkwYy4uZDYzYTQ0ZmRhNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9QaXBlbGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5
b3V0LmgKQEAgLTI4LDIzICsyOCwzMSBAQAogI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bXBvcnQgPHd0Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJHUFUgewogCitjbGFzcyBCaW5kR3JvdXBMYXlv
dXQ7CisKIGNsYXNzIFBpcGVsaW5lTGF5b3V0IDogcHVibGljIFJlZkNvdW50ZWQ8UGlwZWxpbmVM
YXlvdXQ+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFBpcGVsaW5lTGF5b3V0PiBjcmVhdGUoKQorICAgIHN0YXRpYyBSZWY8UGlwZWxpbmVM
YXlvdXQ+IGNyZWF0ZShWZWN0b3I8UmVmPEJpbmRHcm91cExheW91dD4+JiYgYmluZEdyb3VwTGF5
b3V0cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBpcGVsaW5lTGF5b3V0
KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQaXBlbGluZUxheW91dChXVEZNb3Zl
KGJpbmRHcm91cExheW91dHMpKSk7CiAgICAgfQogCiAgICAgflBpcGVsaW5lTGF5b3V0KCk7CiAK
ICAgICB2b2lkIHNldExhYmVsKGNvbnN0IGNoYXIqKTsKIAorICAgIHNpemVfdCBudW1iZXJPZkJp
bmRHcm91cExheW91dHMoKSBjb25zdCB7IHJldHVybiBtX2JpbmRHcm91cExheW91dHMuc2l6ZSgp
OyB9CisgICAgY29uc3QgQmluZEdyb3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlvdXQoc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIG1fYmluZEdyb3VwTGF5b3V0c1tpXTsgfQorCiBwcml2YXRlOgotICAg
IFBpcGVsaW5lTGF5b3V0KCk7CisgICAgUGlwZWxpbmVMYXlvdXQoVmVjdG9yPFJlZjxCaW5kR3Jv
dXBMYXlvdXQ+PiYmKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWY8QmluZEdyb3VwTGF5b3V0Pj4g
bV9iaW5kR3JvdXBMYXlvdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tCmluZGV4IDI1YjY5YjUzYWYxZS4uNzA0NmIzZDlj
YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbQor
KysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbQpAQCAtMjYsMjMgKzI2
LDM1IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBpcGVsaW5lTGF5b3V0LmgiCiAK
KyNpbXBvcnQgIkJpbmRHcm91cExheW91dC5oIgogI2ltcG9ydCAiRGV2aWNlLmgiCiAKIG5hbWVz
cGFjZSBXZWJHUFUgewogCiBSZWZQdHI8UGlwZWxpbmVMYXlvdXQ+IERldmljZTo6Y3JlYXRlUGlw
ZWxpbmVMYXlvdXQoY29uc3QgV0dQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciogZGVzY3JpcHRv
cikKIHsKLSAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIFBpcGVsaW5l
TGF5b3V0OjpjcmVhdGUoKTsKKyAgICBpZiAoZGVzY3JpcHRvci0+bmV4dEluQ2hhaW4pCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9yPFJlZjxCaW5kR3JvdXBMYXlvdXQ+PiBi
aW5kR3JvdXBMYXlvdXRzOworICAgIGJpbmRHcm91cExheW91dHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShkZXNjcmlwdG9yLT5iaW5kR3JvdXBMYXlvdXRDb3VudCk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmJpbmRHcm91cExheW91dENvdW50OyArK2kpIHsKKyAg
ICAgICAgY29uc3QgYXV0byogYmluZEdyb3VwTGF5b3V0ID0gZGVzY3JpcHRvci0+YmluZEdyb3Vw
TGF5b3V0c1tpXTsKKyAgICAgICAgYmluZEdyb3VwTGF5b3V0cy51bmNoZWNrZWRBcHBlbmQoYmlu
ZEdyb3VwTGF5b3V0LT5iaW5kR3JvdXBMYXlvdXQpOworICAgIH0KKyAgICByZXR1cm4gUGlwZWxp
bmVMYXlvdXQ6OmNyZWF0ZShXVEZNb3ZlKGJpbmRHcm91cExheW91dHMpKTsKIH0KIAotUGlwZWxp
bmVMYXlvdXQ6OlBpcGVsaW5lTGF5b3V0KCkgPSBkZWZhdWx0OworUGlwZWxpbmVMYXlvdXQ6OlBp
cGVsaW5lTGF5b3V0KFZlY3RvcjxSZWY8QmluZEdyb3VwTGF5b3V0Pj4mJiBiaW5kR3JvdXBMYXlv
dXRzKQorICAgIDogbV9iaW5kR3JvdXBMYXlvdXRzKFdURk1vdmUoYmluZEdyb3VwTGF5b3V0cykp
Cit7Cit9CiAKIFBpcGVsaW5lTGF5b3V0Ojp+UGlwZWxpbmVMYXlvdXQoKSA9IGRlZmF1bHQ7CiAK
LXZvaWQgUGlwZWxpbmVMYXlvdXQ6OnNldExhYmVsKGNvbnN0IGNoYXIqIGxhYmVsKQordm9pZCBQ
aXBlbGluZUxheW91dDo6c2V0TGFiZWwoY29uc3QgY2hhciopCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGxhYmVsKTsKKyAgICAvLyBUaGVyZSBpcyBubyBNZXRhbCBvYmplY3QgdGhhdCByZXByZXNlbnRz
IGEgcGlwZWxpbmUgbGF5b3V0LgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9TYW1wbGVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLmgKaW5kZXggZTlj
ZjEzNjJlMGExLi45ZGI4ZGRmNzdlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NhbXBsZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLmgKQEAgLTQzLDYg
KzQzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBjaGFyKik7CiAKKyAg
ICBpZCA8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3Nh
bXBsZXJTdGF0ZTsgfQorCiBwcml2YXRlOgogICAgIFNhbXBsZXIoaWQgPE1UTFNhbXBsZXJTdGF0
ZT4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tIGIvU291
cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5tbQppbmRleCBkMWEzMjNiMmIxZTcuLmNhMjA3Zjg3
ODA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5tbQorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCkBAIC0zOSw3ICszOSw2IEBAIFJlZlB0cjxT
YW1wbGVyPiBEZXZpY2U6OmNyZWF0ZVNhbXBsZXIoY29uc3QgV0dQVVNhbXBsZXJEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKQogU2FtcGxlcjo6U2FtcGxlcihpZCA8TVRMU2FtcGxlclN0YXRlPiBzYW1w
bGVyU3RhdGUpCiAgICAgOiBtX3NhbXBsZXJTdGF0ZShzYW1wbGVyU3RhdGUpCiB7Ci0gICAgVU5V
U0VEX1ZBUklBQkxFKG1fc2FtcGxlclN0YXRlKTsKIH0KIAogU2FtcGxlcjo6flNhbXBsZXIoKSA9
IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5o
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZVZpZXcuaAppbmRleCAzYmIwZTBlM2Q1NjIu
LjRiODgxZjE2NTg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZVZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5oCkBAIC00Myw2ICs0
Myw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAg
aWQgPE1UTFRleHR1cmU+IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KKwog
cHJpdmF0ZToKICAgICBUZXh0dXJlVmlldyhpZCA8TVRMVGV4dHVyZT4pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5tbSBiL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1RleHR1cmVWaWV3Lm1tCmluZGV4IGUzNTQ3NmFkMGVlNS4uZDY2NmJmOWU3ZGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9UZXh0dXJlVmlldy5tbQpAQCAtMzIsNyArMzIsNiBAQCBuYW1lc3BhY2Ug
V2ViR1BVIHsKIFRleHR1cmVWaWV3OjpUZXh0dXJlVmlldyhpZCA8TVRMVGV4dHVyZT4gdGV4dHVy
ZSkKICAgICA6IG1fdGV4dHVyZSh0ZXh0dXJlKQogewotICAgIFVOVVNFRF9WQVJJQUJMRShtX3Rl
eHR1cmUpOwogfQogCiBUZXh0dXJlVmlldzo6flRleHR1cmVWaWV3KCkgPSBkZWZhdWx0Owo=
</data>
<flag name="review"
          id="479791"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>