<?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>4195</bug_id>
          
          <creation_ts>2005-07-29 04:55:39 -0700</creation_ts>
          <short_desc>REGRESSION: KOI8-U encoding no longer supported</short_desc>
          <delta_ts>2006-07-14 23:52:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.oper.ru</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5232</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>adele</cc>
    
    <cc>alice.barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>kocienda</cc>
    
    <cc>nickshanks</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>15393</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-07-29 04:55:39 -0700</bug_when>
    <thetext>Steps to reproduce:
1. Go to http://www.oper.ru.
2. Manually set the encoding to KOI8-U

Results: empty page, empty &quot;view source&quot;, errors in debug log:

=================
ERROR: the ICU Converter won&apos;t convert from text encoding 0xA08, error 4
(/Users/ap/WebKit/WebCore/kwq/KWQTextCodec.mm:379 UErrorCode 
KWQTextDecoder::createICUConverter())
=================

Marking P1, since this is a regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15394</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-07-29 05:00:16 -0700</bug_when>
    <thetext>Apparently caused by changes from 2005-07-12: &quot;Switched over from TEC to ICU for unicode text 
conversion.&quot;

It would be interesting to know why it was decided to use ICU directly, not CFString (which is open source, 
cross-platform, and well optimized for performance).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16727</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-08-15 11:17:47 -0700</bug_when>
    <thetext>  Apparently, the reason is that ICU 3.2 (version shipped with 10.4) didn&apos;t support KOI8-U. This encoding 
has been added in ICU 3.4, so it won&apos;t be an issue in 10.5.

  Still, not using CFString looks strange to me... Apple strongly discourages external developers from 
directly using ICU - eat your own dog food! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21079</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-10-01 11:46:12 -0700</bug_when>
    <thetext>ICU usage has been discussed elsewhere, e.g. in bug 4821.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21716</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-10 08:45:48 -0700</bug_when>
    <thetext>We&apos;re going to need to fix this one way or another. Someone should check with Deborah Goldsmith on 
why ICU is not handling this encoding. It could be as simple as fixing the string we pass in to ICU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21721</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-10-10 09:56:00 -0700</bug_when>
    <thetext>Here is the ICU bug: &lt;http://dev.icu-project.org/cgi-bin/icu-bugs/closed?
id=1143;expression=koi;user=guest;searchclosed=1&gt;. Support for KOI8-U just isn&apos;t present in the ICU 
version shipped with Tiger. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21722</commentid>
    <comment_count>6</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2005-10-10 10:00:32 -0700</bug_when>
    <thetext>we&apos;ll have to restore the old TEC codepath until ICU has support for all the codesets we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23743</commentid>
    <comment_count>7</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2005-11-04 13:59:43 -0800</bug_when>
    <thetext>related to &lt;rdar://problem/3546838&gt;

some more detail about behavior with different builds: 
behavior observed in 416.12
1) load  http://www.oper.ru/ - page shows up but encoded wrong
2) change encoding to from default to KOI8-U - page shows up correctly in ukrainian (it doesn&apos;t turn 
blank)

behavior observed in TOT:
1) load http://www.oper.ru/ - page shows up correctly in ukrainian
2) change encoding from default to KOI8-U - page turns blank

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23745</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-11-04 14:14:15 -0800</bug_when>
    <thetext>(In reply to comment #7)
ToT renders this site correctly because of a fix in bug 3590.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23842</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Udey">dan</who>
    <bug_when>2005-11-09 06:32:53 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; ToT renders this site correctly because of a fix in bug 3590.

This bug is confirmed fixed in the latest ToT, marking as such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23877</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-11-09 09:50:07 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; ToT renders this site correctly because of a fix in bug 3590.
&gt; This bug is confirmed fixed in the latest ToT, marking as such.

Which has nothing to do with _this_ bug...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23881</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 10:55:15 -0800</bug_when>
    <thetext>Exactly. The site is fixed, but the bug is not, and it&apos;s still a P1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25874</commentid>
    <comment_count>12</comment_count>
      <attachid>5054</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-12 14:15:09 -0800</bug_when>
    <thetext>Created attachment 5054
what is missing from ICU

Lists all aliases that are not known to Tiger version of ICU. As it turns out,
there are quite a few (both aliases and encodings).

I haven&apos;t analyzed which encodings have actually regressed (even if ICU knows
an encoding by some aliases, it doesn&apos;t mean that WebCore gives it one of
these). Of course, all encodings that are not supported by ICU no longer work,
and many of these aren&apos;t even in the current ICU
&lt;http://www-950.ibm.com/software/globalization/icu/demo/converters&gt;.

Some possible bugs in WebCore&apos;s tables are also highlighted (one of these filed
as bug 4362; I am not sure which is actually correct in other cases).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25970</commentid>
    <comment_count>13</comment_count>
      <attachid>5081</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-14 13:36:45 -0800</bug_when>
    <thetext>Created attachment 5081
what is missing from ICU

Added mac-cyrillic; corrected x-mac-ukrainian comments. For info on
MacUkrainian, see 
&lt;http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/UKRAINE.TXT&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28164</commentid>
    <comment_count>14</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2006-01-10 10:05:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/4404312&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29341</commentid>
    <comment_count>15</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-01-22 04:33:45 -0800</bug_when>
    <thetext>Adding Regression keyword.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49683</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-13 12:07:51 -0700</bug_when>
    <thetext>Taking this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49771</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-14 06:06:03 -0700</bug_when>
    <thetext>FYI, what I&apos;d really like to see is an implementation that uses ICU for a lot more, eliminating our own decoding table except for the few exceptions where ICU doesn&apos;t do the right thing in either looking up an encoding by name or in handling character sets.

So while it doesn&apos;t have to be part of this bug fix, I&apos;d like to see mac-encodings.txt and its friends done away with entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49775</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-14 06:23:12 -0700</bug_when>
    <thetext>Yes, the fact that encoding names have to round-trip via CFStringEncoding, even when handled by ICU, seems unfortunate to me, too. In this patch, I&apos;m taking a conservative route though, probably not even getting rid of DeprecatedStrings (to avoid the need to change all clients).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49834</commentid>
    <comment_count>19</comment_count>
      <attachid>9453</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-14 13:03:08 -0700</bug_when>
    <thetext>Created attachment 9453
proposed fix

At the moment, StreamingTextDecoderMac is a complete implementation, and I have verified that all existing tests pass even with StreamingTextDecoderICU disabled. I haven&apos;t attempted to factor out any common code, as the TEC/CFString code path will be simplified in the future; also, Unity may have a largely different implementation with its Qt back-end.

WebCoreTextDecoder was dead code (used for WebTextView before it was moved to WebCore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49880</commentid>
    <comment_count>20</comment_count>
      <attachid>9453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-14 18:45:29 -0700</bug_when>
    <thetext>Comment on attachment 9453
proposed fix

Looks great! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49902</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-14 23:52:15 -0700</bug_when>
    <thetext>Committed revision 15449.

Added one more test (http/tests/misc/BOM-override-script.html) with additional examples of BOM handling.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5054</attachid>
            <date>2005-12-12 14:15:09 -0800</date>
            <delta_ts>2005-12-14 13:36:45 -0800</delta_ts>
            <desc>what is missing from ICU</desc>
            <filename>ICUMissingAliases.txt</filename>
            <type>text/plain</type>
            <size>4961</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">a0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiAoc3VwcG9ydGVkIGFzICJtYWNpbnRvc2giKToKeG1h
Y3JvbWFuCgprQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NMYXRpbjEgKHN1cHBvcnRlZCBhcyAid2lu
ZG93cy0xMjUyIik6CndpbmxhdGluMQp4YW5zaQppc284ODU5MTE5ODcKCmtDRlN0cmluZ0VuY29k
aW5nTmV4dFN0ZXBMYXRpbjoKeC1uZXh0c3RlcAoKa0NGU3RyaW5nRW5jb2RpbmdBU0NJSSAoc3Vw
cG9ydGVkIGFzICJ1cy1hc2NpaSIpOgphbnNpeDM0MTk2OAphbnNpeDM0MTk4Ngppc282NDZpcnYx
OTkxCmlzb2lyNnVzCgprQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgKHN1cG9ydGVkIGFzICJVVEYt
OCIsICJVVEYtMTZCRSIgYW5kICJVVEYtMTZMRSIpOgp1bmljb2RlZmZmZQp1bmljb2RlZmVmZgp1
bmljb2RlMTF1dGY4CnVuaWNvZGUyMHV0ZjgKeHVuaWNvZGUyMHV0ZjgKCmtDRlN0cmluZ0VuY29k
aW5nTWFjSmFwYW5lc2U6CngtbWFjLWphcGFuZXNlCgprQ0ZTdHJpbmdFbmNvZGluZ0RPU0phcGFu
ZXNlOgoqKioqKiogYWxsIHRoZXNlIGFsaWFzZXMgYXJlIGtub3duIHRvIElDVSwgYnV0IGFyZSBt
YXBwZWQgZGlmZmVyZW50bHkgKioqKioqCmNwOTMyCmNzd2luZG93czMxagp3aW5kb3dzMzFqCnht
c2NwOTMyCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0NoaW5lc2VUcmFkOgp4LW1hYy1jaGluZXNldHJh
ZAp4bWFjdHJhZGNoaW5lc2UKCmtDRlN0cmluZ0VuY29kaW5nTWFjS29yZWFuOgp4LW1hYy1rb3Jl
YW4KCmtDRlN0cmluZ0VuY29kaW5nTWFjQXJhYmljOgp4LW1hYy1hcmFiaWMKCmtDRlN0cmluZ0Vu
Y29kaW5nTWFjSGVicmV3Ogp4LW1hYy1oZWJyZXcKCmtDRlN0cmluZ0VuY29kaW5nTWFjQ3lyaWxs
aWMgKHN1cHBvcnRlZCBhcyAieC1tYWMtY3lyaWxsaWMiKToKeG1hY3VrcmFpbmlhbiAgICAgICAg
ICAgICAgICAqKioqKiogSU5DT1JSRUNULCBzaG91bGQgYmUga0NGU3RyaW5nRW5jb2RpbmdNYWNV
a3JhaW5pYW4gKioqKioKCmtDRlN0cmluZ0VuY29kaW5nTWFjRGV2YW5hZ2FyaToKeC1tYWMtZGV2
YW5hZ2FyaQoKa0NGU3RyaW5nRW5jb2RpbmdNYWNHdXJtdWtoaToKeC1tYWMtZ3VybXVraGkKCmtD
RlN0cmluZ0VuY29kaW5nTWFjR3VqYXJhdGk6CngtbWFjLWd1amFyYXRpCgprQ0ZTdHJpbmdFbmNv
ZGluZ01hY1RoYWk6CngtbWFjLXRoYWkKCmtDRlN0cmluZ0VuY29kaW5nTWFjQ2hpbmVzZVNpbXA6
CngtbWFjLWNoaW5lc2VzaW1wCnhtYWNzaW1wY2hpbmVzZQoKa0NGU3RyaW5nRW5jb2RpbmdNYWNU
aWJldGFuOgp4LW1hYy10aWJldGFuCgprQ0ZTdHJpbmdFbmNvZGluZ01hY1N5bWJvbDoKeC1tYWMt
c3ltYm9sCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0RpbmdiYXRzOgp4LW1hYy1kaW5nYmF0cwoKa0NG
U3RyaW5nRW5jb2RpbmdNYWNDcm9hdGlhbjoKeC1tYWMtY3JvYXRpYW4KCmtDRlN0cmluZ0VuY29k
aW5nTWFjSWNlbGFuZGljOgp4LW1hYy1pY2VsYW5kaWMKCmtDRlN0cmluZ0VuY29kaW5nTWFjUm9t
YW5pYW46CngtbWFjLXJvbWFuaWFuCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0ZhcnNpOgp4LW1hYy1m
YXJzaQoKa0NGU3RyaW5nRW5jb2RpbmdNYWNWVDEwMDoKeC1tYWMtdnQxMDAKCmtDRlN0cmluZ0Vu
Y29kaW5nSVNPTGF0aW4yIChzdXBwb3J0ZWQgYXMgIklTTy04ODU5LTIiKToKaXNvODg1OTIxOTg3
CgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMyAoc3VwcG9ydGVkIGFzICJJU08tODg1OS0zIik6
Cmlzbzg4NTkzMTk4OAoKa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjQgKHN1cHBvcnRlZCBhcyAi
SVNPLTg4NTktNCIpOgppc284ODU5NDE5ODgKCmtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW5DeXJp
bGxpYyAoc3VwcG9ydGVkIGFzICJJU08tODg1OS01Iik6Cmlzbzg4NTk1MTk4OAoKa0NGU3RyaW5n
RW5jb2RpbmdJU09MYXRpbkFyYWJpYyAoc3VwcG9ydGVkIGFzICJJU08tODg1OS02Iik6Cmlzbzg4
NTk2MTk4NwoKa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjcgKHN1cHBvcnRlZCBhcyAiSVNPLTg4
NTktNyIpOgppc284ODU5NzE5ODcKCmtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW5IZWJyZXcgKHN1
cHBvcnRlZCBhcyAiSVNPLTg4NTktOC1JIik6CmNzaXNvODg1OThpCmxvZ2ljYWwKCmtDRlN0cmlu
Z0VuY29kaW5nSVNPTGF0aW5IZWJyZXcrdmlzdWFsIChzdXBwb3J0ZWQgYXMgIklTTy04ODU5LTgi
KToKaXNvODg1OTgxOTg4CnZpc3VhbAoKa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjUgKHN1cHBv
cnRlZCBhcyAiSVNPLTg4NTktOSIpOgppc284ODU5OTE5ODkgICAgICAgICAgICAgICAKCmtDRlN0
cmluZ0VuY29kaW5nSVNPTGF0aW42OgpJU08tODg1OS0xMApjc2lzb2xhdGluNgppc284ODU5MTAx
OTkyCmlzb2lyMTU3Cmw2CmxhdGluNgoKa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpblRoYWk6CklT
Ty04ODU5LTExCgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluODoKSVNPLTg4NTktMTQKaXNvODg1
OTE0MTk5OAppc29jZWx0aWMKaXNvaXIxOTkKbDgKbGF0aW44CgprQ0ZTdHJpbmdFbmNvZGluZ0lT
T0xhdGluMTA6CklTTy04ODU5LTE2Cmlzbzg4NTkxNjIwMDEKaXNvaXIyMjYKbDEwCmxhdGluMTAK
CmtDRlN0cmluZ0VuY29kaW5nRE9TR3JlZWsgKHN1cHBvcnRlZCBhcyAid2luZG93cy03MzciKToK
Y3A3MzcKaWJtNzM3CgprQ0ZTdHJpbmdFbmNvZGluZ0RPU0JhbHRpY1JpbSAgKioqKioqIEFwcGVh
cnMgdG8gYmUgYnJva2VuIGluIFdlYkNvcmUsIG1peGluZyBjcDUwMCBhbmQgY3A3NzUgKioqKioq
CmNwNzc1IC0gdW5rbm93biB0byBUaWdlciBJQ1UsIGFsaWFzZXMgd2luZG93cy03NzUgaW4gbW9k
ZXJuIG9uZQpjc3BjNzc1YmFsdGljIC0gdW5rbm93biB0byBUaWdlciBJQ1UsIGFsaWFzZXMgd2lu
ZG93cy03NzUgaW4gbW9kZXJuIG9uZQppYm03NzUgLSB1bmtub3duIHRvIFRpZ2VyIElDVSwgYWxp
YXNlcyB3aW5kb3dzLTc3NSBpbiBtb2Rlcm4gb25lCmNwNTAwIC0ga25vd24gdG8gVGlnZXIgSUNV
CmNzaWJtNTAwIC0ga25vd24gdG8gVGlnZXIgSUNVCmViY2RpY2NwYmUgLSBrbm93biB0byBUaWdl
ciBJQ1UKZWJjZGljY3BjaCAtIGtub3duIHRvIFRpZ2VyIElDVQppYm01MDAgLSBrbm93biB0byBU
aWdlciBJQ1UKCmtDRlN0cmluZ0VuY29kaW5nRE9TQXJhYmljIChzdXBwb3J0ZWQgYXMgImNwODY0
Iik6CmRvczcyMAoKa0NGU3RyaW5nRW5jb2RpbmdET1NUaGFpIChzdXBwb3J0ZWQgYXMgImNwODc0
Iik6CmRvczg3NAoKa0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzTGF0aW4yIChzdXBwb3J0ZWQgYXMg
IndpbmRvd3MtMTI1MCIpOgp3aW5sYXRpbjIKeGNwMTI1MAoKa0NGU3RyaW5nRW5jb2RpbmdXaW5k
b3dzQ3lyaWxsaWMgKHN1cHBvcnRlZCBhcyAid2luZG93cy0xMjUxIik6CndpbmN5cmlsbGljCnhj
cDEyNTEKCmtDRlN0cmluZ0VuY29kaW5nV2luZG93c0dyZWVrIChzdXBwb3J0ZWQgYXMgIndpbmRv
d3MtMTI1MyIpOgp3aW5ncmVlawoKa0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzTGF0aW41IChzdXBw
b3J0ZWQgYXMgIndpbmRvd3MtMTI1NCIpOgp3aW50dXJraXNoCgprQ0ZTdHJpbmdFbmNvZGluZ1dp
bmRvd3NIZWJyZXcgKHN1cHBvcnRlZCBhcyAid2luZG93cy0xMjU1Iik6CndpbmhlYnJldwoKa0NG
U3RyaW5nRW5jb2RpbmdXaW5kb3dzQXJhYmljIChzdXBwb3J0ZWQgYXMgIndpbmRvd3MtMTI1NiIp
Ogp3aW5hcmFiaWMKCmtDRlN0cmluZ0VuY29kaW5nV2luZG93c0JhbHRpY1JpbSAoc3VwcG9ydGVk
IGFzICJ3aW5kb3dzLTEyNTciKToKd2luYmFsdGljCgprQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NL
b3JlYW5Kb2hhYjoKam9oYWIKCmtDRlN0cmluZ0VuY29kaW5nV2luZG93c1ZpZXRuYW1lc2UgKHN1
cHBvcnRlZCBhcyAid2luZG93cy0xMjU4Iik6CndpbnZpZXRuYW1lc2UKCmtDRlN0cmluZ0VuY29k
aW5nSklTX1gwMjA4XzgzOgpKSVNfWDAyMDgtMTk4Mwpjc2lzbzg3amlzeDAyMDgKaXNvaXI4Nwpq
aXNjNjIyNjE5ODMKeDAyMDgKCmtDRlN0cmluZ0VuY29kaW5nSklTX1gwMjA4XzkwOgpKSVNfWDAy
MDgtMTk5MAoKa0NGU3RyaW5nRW5jb2RpbmdKSVNfWDAyMTJfOTA6CkpJU19YMDIxMi0xOTkwCmNz
aXNvMTU5amlzeDAyMTIxOTkwCmlzb2lyMTU5CngwMjEyCgprQ0ZTdHJpbmdFbmNvZGluZ0pJU19D
NjIyNl83ODoKSklTX0M2MjI2LTE5NzgKY3Npc280Mmppc2M2MjI2MTk3OAppc29pcjQyCgprQ0ZT
dHJpbmdFbmNvZGluZ1NoaWZ0SklTX1gwMjEzXzAwICoqKioqKiBTdXBwb3J0IGluIFdlYkNvcmUg
YnJva2VuIGJlY2F1c2Ugb2YgSmFwYW5lc2UgZW5jb2Rpbmcgc25pZmZpbmcuIFRoaXMgbWF5IGFw
cGx5IHRvIG90aGVyIEphcGFuZXNlIGVuY29kaW5ncyAqKioqKioKU2hpZnRfSklTX1gwMjEzLTIw
MDAgKHdoZXJlIGRpZCBXZWJDb3JlIGdldCB0aGlzIGVuY29kaW5nIGZyb20/Pz8pCgprQ0ZTdHJp
bmdFbmNvZGluZ0lTT18yMDIyX0pQXzMgKioqKioqIFN1cHBvcnRlZCBhcyAiSklTNyIsIHdoaWNo
IGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIGluIFdlYkNvcmUgKioqKioqCklTTy0yMDIyLUpQLTMK
CmtDRlN0cmluZ0VuY29kaW5nRVVDX0pQIChzdXBwb3J0ZWQgYXMgIkVVQy1KUCIpOgp4ZXVjCgpr
Q0ZTdHJpbmdFbmNvZGluZ0VVQ19DTl9ET1NWYXJpYW50IChzdXBwb3J0ZWQgYXMgIkVVQy1DTiIp
OgpjbmdiCmNzZ2IyMzEyODAKeGV1Y2NuCnhnYmsgICAgICAgICAgICAgICAgKioqKioqIElDVSBz
dXBwb3J0cyAiR0JLIiwgYWxpYXNpbmcgaXQgdG8gIndpbmRvd3MtOTM2IiAqKioqKioKCmtDRlN0
cmluZ0VuY29kaW5nS09JOF9SIChzdXBwb3J0ZWQgYXMgIktPSTgtUiIpOgprb2kKCmtDRlN0cmlu
Z0VuY29kaW5nQmlnNV9ET1NWYXJpYW50IChzdXBwb3J0ZWQgYXMgIkJpZzUiKToKY25iaWc1Cnh4
YmlnNQoKa0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbkxhdGluMToKeC1tYWMtcm9tYW4tbGF0aW4x
CgprQ0ZTdHJpbmdFbmNvZGluZ0tPSThfVToKS09JOC1VIChzdXBwb3J0ZWQgaW4gbW9kZXJuIElD
VSk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5081</attachid>
            <date>2005-12-14 13:36:45 -0800</date>
            <delta_ts>2005-12-14 13:36:45 -0800</delta_ts>
            <desc>what is missing from ICU</desc>
            <filename>ICUMissingAliases.txt</filename>
            <type>text/plain</type>
            <size>4998</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">a0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiAoc3VwcG9ydGVkIGFzICJtYWNpbnRvc2giKToKeG1h
Y3JvbWFuCgprQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NMYXRpbjEgKHN1cHBvcnRlZCBhcyAid2lu
ZG93cy0xMjUyIik6CndpbmxhdGluMQp4YW5zaQppc284ODU5MTE5ODcKCmtDRlN0cmluZ0VuY29k
aW5nTmV4dFN0ZXBMYXRpbjoKeC1uZXh0c3RlcAoKa0NGU3RyaW5nRW5jb2RpbmdBU0NJSSAoc3Vw
cG9ydGVkIGFzICJ1cy1hc2NpaSIpOgphbnNpeDM0MTk2OAphbnNpeDM0MTk4Ngppc282NDZpcnYx
OTkxCmlzb2lyNnVzCgprQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgKHN1cG9ydGVkIGFzICJVVEYt
OCIsICJVVEYtMTZCRSIgYW5kICJVVEYtMTZMRSIpOgp1bmljb2RlZmZmZQp1bmljb2RlZmVmZgp1
bmljb2RlMTF1dGY4CnVuaWNvZGUyMHV0ZjgKeHVuaWNvZGUyMHV0ZjgKCmtDRlN0cmluZ0VuY29k
aW5nTWFjSmFwYW5lc2U6CngtbWFjLWphcGFuZXNlCgprQ0ZTdHJpbmdFbmNvZGluZ0RPU0phcGFu
ZXNlOgoqKioqKiogYWxsIHRoZXNlIGFsaWFzZXMgYXJlIGtub3duIHRvIElDVSwgYnV0IGFyZSBt
YXBwZWQgZGlmZmVyZW50bHkgKioqKioqCmNwOTMyCmNzd2luZG93czMxagp3aW5kb3dzMzFqCnht
c2NwOTMyCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0NoaW5lc2VUcmFkOgp4LW1hYy1jaGluZXNldHJh
ZAp4bWFjdHJhZGNoaW5lc2UKCmtDRlN0cmluZ0VuY29kaW5nTWFjS29yZWFuOgp4LW1hYy1rb3Jl
YW4KCmtDRlN0cmluZ0VuY29kaW5nTWFjQXJhYmljOgp4LW1hYy1hcmFiaWMKCmtDRlN0cmluZ0Vu
Y29kaW5nTWFjSGVicmV3Ogp4LW1hYy1oZWJyZXcKCmtDRlN0cmluZ0VuY29kaW5nTWFjQ3lyaWxs
aWMgKHN1cHBvcnRlZCBhcyAieC1tYWMtY3lyaWxsaWMiKToKeG1hY3VrcmFpbmlhbiAgKE1hY1Vr
cmFpbmlhbiBpcyB0aGUgc2FtZSBhcyBNYWNDeXJpbGxpYzsgdGhlIGRpZmZlcmVuY2VzIGJldHdl
ZW4gb2xkIHZlcnNpb25zIGFyZSBmb3Jnb3R0ZW4gbm93IDopICkKbWFjLWN5cmlsbGljCgprQ0ZT
dHJpbmdFbmNvZGluZ01hY0RldmFuYWdhcmk6CngtbWFjLWRldmFuYWdhcmkKCmtDRlN0cmluZ0Vu
Y29kaW5nTWFjR3VybXVraGk6CngtbWFjLWd1cm11a2hpCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0d1
amFyYXRpOgp4LW1hYy1ndWphcmF0aQoKa0NGU3RyaW5nRW5jb2RpbmdNYWNUaGFpOgp4LW1hYy10
aGFpCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0NoaW5lc2VTaW1wOgp4LW1hYy1jaGluZXNlc2ltcAp4
bWFjc2ltcGNoaW5lc2UKCmtDRlN0cmluZ0VuY29kaW5nTWFjVGliZXRhbjoKeC1tYWMtdGliZXRh
bgoKa0NGU3RyaW5nRW5jb2RpbmdNYWNTeW1ib2w6CngtbWFjLXN5bWJvbAoKa0NGU3RyaW5nRW5j
b2RpbmdNYWNEaW5nYmF0czoKeC1tYWMtZGluZ2JhdHMKCmtDRlN0cmluZ0VuY29kaW5nTWFjQ3Jv
YXRpYW46CngtbWFjLWNyb2F0aWFuCgprQ0ZTdHJpbmdFbmNvZGluZ01hY0ljZWxhbmRpYzoKeC1t
YWMtaWNlbGFuZGljCgprQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuaWFuOgp4LW1hYy1yb21hbmlh
bgoKa0NGU3RyaW5nRW5jb2RpbmdNYWNGYXJzaToKeC1tYWMtZmFyc2kKCmtDRlN0cmluZ0VuY29k
aW5nTWFjVlQxMDA6CngtbWFjLXZ0MTAwCgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMiAoc3Vw
cG9ydGVkIGFzICJJU08tODg1OS0yIik6Cmlzbzg4NTkyMTk4NwoKa0NGU3RyaW5nRW5jb2RpbmdJ
U09MYXRpbjMgKHN1cHBvcnRlZCBhcyAiSVNPLTg4NTktMyIpOgppc284ODU5MzE5ODgKCmtDRlN0
cmluZ0VuY29kaW5nSVNPTGF0aW40IChzdXBwb3J0ZWQgYXMgIklTTy04ODU5LTQiKToKaXNvODg1
OTQxOTg4CgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluQ3lyaWxsaWMgKHN1cHBvcnRlZCBhcyAi
SVNPLTg4NTktNSIpOgppc284ODU5NTE5ODgKCmtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW5BcmFi
aWMgKHN1cHBvcnRlZCBhcyAiSVNPLTg4NTktNiIpOgppc284ODU5NjE5ODcKCmtDRlN0cmluZ0Vu
Y29kaW5nSVNPTGF0aW43IChzdXBwb3J0ZWQgYXMgIklTTy04ODU5LTciKToKaXNvODg1OTcxOTg3
CgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluSGVicmV3IChzdXBwb3J0ZWQgYXMgIklTTy04ODU5
LTgtSSIpOgpjc2lzbzg4NTk4aQpsb2dpY2FsCgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluSGVi
cmV3K3Zpc3VhbCAoc3VwcG9ydGVkIGFzICJJU08tODg1OS04Iik6Cmlzbzg4NTk4MTk4OAp2aXN1
YWwKCmtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW41IChzdXBwb3J0ZWQgYXMgIklTTy04ODU5LTki
KToKaXNvODg1OTkxOTg5ICAgICAgICAgICAgICAgCgprQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGlu
NjoKSVNPLTg4NTktMTAKY3Npc29sYXRpbjYKaXNvODg1OTEwMTk5Mgppc29pcjE1NwpsNgpsYXRp
bjYKCmtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW5UaGFpOgpJU08tODg1OS0xMQoKa0NGU3RyaW5n
RW5jb2RpbmdJU09MYXRpbjg6CklTTy04ODU5LTE0Cmlzbzg4NTkxNDE5OTgKaXNvY2VsdGljCmlz
b2lyMTk5Cmw4CmxhdGluOAoKa0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEwOgpJU08tODg1OS0x
Ngppc284ODU5MTYyMDAxCmlzb2lyMjI2CmwxMApsYXRpbjEwCgprQ0ZTdHJpbmdFbmNvZGluZ0RP
U0dyZWVrIChzdXBwb3J0ZWQgYXMgIndpbmRvd3MtNzM3Iik6CmNwNzM3CmlibTczNwoKa0NGU3Ry
aW5nRW5jb2RpbmdET1NCYWx0aWNSaW0gICoqKioqKiBBcHBlYXJzIHRvIGJlIGJyb2tlbiBpbiBX
ZWJDb3JlLCBtaXhpbmcgY3A1MDAgYW5kIGNwNzc1ICoqKioqKgpjcDc3NSAtIHVua25vd24gdG8g
VGlnZXIgSUNVLCBhbGlhc2VzIHdpbmRvd3MtNzc1IGluIG1vZGVybiBvbmUKY3NwYzc3NWJhbHRp
YyAtIHVua25vd24gdG8gVGlnZXIgSUNVLCBhbGlhc2VzIHdpbmRvd3MtNzc1IGluIG1vZGVybiBv
bmUKaWJtNzc1IC0gdW5rbm93biB0byBUaWdlciBJQ1UsIGFsaWFzZXMgd2luZG93cy03NzUgaW4g
bW9kZXJuIG9uZQpjcDUwMCAtIGtub3duIHRvIFRpZ2VyIElDVQpjc2libTUwMCAtIGtub3duIHRv
IFRpZ2VyIElDVQplYmNkaWNjcGJlIC0ga25vd24gdG8gVGlnZXIgSUNVCmViY2RpY2NwY2ggLSBr
bm93biB0byBUaWdlciBJQ1UKaWJtNTAwIC0ga25vd24gdG8gVGlnZXIgSUNVCgprQ0ZTdHJpbmdF
bmNvZGluZ0RPU0FyYWJpYyAoc3VwcG9ydGVkIGFzICJjcDg2NCIpOgpkb3M3MjAKCmtDRlN0cmlu
Z0VuY29kaW5nRE9TVGhhaSAoc3VwcG9ydGVkIGFzICJjcDg3NCIpOgpkb3M4NzQKCmtDRlN0cmlu
Z0VuY29kaW5nV2luZG93c0xhdGluMiAoc3VwcG9ydGVkIGFzICJ3aW5kb3dzLTEyNTAiKToKd2lu
bGF0aW4yCnhjcDEyNTAKCmtDRlN0cmluZ0VuY29kaW5nV2luZG93c0N5cmlsbGljIChzdXBwb3J0
ZWQgYXMgIndpbmRvd3MtMTI1MSIpOgp3aW5jeXJpbGxpYwp4Y3AxMjUxCgprQ0ZTdHJpbmdFbmNv
ZGluZ1dpbmRvd3NHcmVlayAoc3VwcG9ydGVkIGFzICJ3aW5kb3dzLTEyNTMiKToKd2luZ3JlZWsK
CmtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluNSAoc3VwcG9ydGVkIGFzICJ3aW5kb3dzLTEy
NTQiKToKd2ludHVya2lzaAoKa0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzSGVicmV3IChzdXBwb3J0
ZWQgYXMgIndpbmRvd3MtMTI1NSIpOgp3aW5oZWJyZXcKCmtDRlN0cmluZ0VuY29kaW5nV2luZG93
c0FyYWJpYyAoc3VwcG9ydGVkIGFzICJ3aW5kb3dzLTEyNTYiKToKd2luYXJhYmljCgprQ0ZTdHJp
bmdFbmNvZGluZ1dpbmRvd3NCYWx0aWNSaW0gKHN1cHBvcnRlZCBhcyAid2luZG93cy0xMjU3Iik6
CndpbmJhbHRpYwoKa0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzS29yZWFuSm9oYWI6CmpvaGFiCgpr
Q0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NWaWV0bmFtZXNlIChzdXBwb3J0ZWQgYXMgIndpbmRvd3Mt
MTI1OCIpOgp3aW52aWV0bmFtZXNlCgprQ0ZTdHJpbmdFbmNvZGluZ0pJU19YMDIwOF84MzoKSklT
X1gwMjA4LTE5ODMKY3Npc284N2ppc3gwMjA4Cmlzb2lyODcKamlzYzYyMjYxOTgzCngwMjA4Cgpr
Q0ZTdHJpbmdFbmNvZGluZ0pJU19YMDIwOF85MDoKSklTX1gwMjA4LTE5OTAKCmtDRlN0cmluZ0Vu
Y29kaW5nSklTX1gwMjEyXzkwOgpKSVNfWDAyMTItMTk5MApjc2lzbzE1OWppc3gwMjEyMTk5MApp
c29pcjE1OQp4MDIxMgoKa0NGU3RyaW5nRW5jb2RpbmdKSVNfQzYyMjZfNzg6CkpJU19DNjIyNi0x
OTc4CmNzaXNvNDJqaXNjNjIyNjE5NzgKaXNvaXI0MgoKa0NGU3RyaW5nRW5jb2RpbmdTaGlmdEpJ
U19YMDIxM18wMCAqKioqKiogU3VwcG9ydCBpbiBXZWJDb3JlIGJyb2tlbiBiZWNhdXNlIG9mIEph
cGFuZXNlIGVuY29kaW5nIHNuaWZmaW5nLiBUaGlzIG1heSBhcHBseSB0byBvdGhlciBKYXBhbmVz
ZSBlbmNvZGluZ3MgKioqKioqClNoaWZ0X0pJU19YMDIxMy0yMDAwICh3aGVyZSBkaWQgV2ViQ29y
ZSBnZXQgdGhpcyBlbmNvZGluZyBmcm9tPz8/KQoKa0NGU3RyaW5nRW5jb2RpbmdJU09fMjAyMl9K
UF8zICoqKioqKiBTdXBwb3J0ZWQgYXMgIkpJUzciLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgbWVh
bmluZyBpbiBXZWJDb3JlICoqKioqKgpJU08tMjAyMi1KUC0zCgprQ0ZTdHJpbmdFbmNvZGluZ0VV
Q19KUCAoc3VwcG9ydGVkIGFzICJFVUMtSlAiKToKeGV1YwoKa0NGU3RyaW5nRW5jb2RpbmdFVUNf
Q05fRE9TVmFyaWFudCAoc3VwcG9ydGVkIGFzICJFVUMtQ04iKToKY25nYgpjc2diMjMxMjgwCnhl
dWNjbgp4Z2JrICAgICAgICAgICAgICAgICoqKioqKiBJQ1Ugc3VwcG9ydHMgIkdCSyIsIGFsaWFz
aW5nIGl0IHRvICJ3aW5kb3dzLTkzNiIgKioqKioqCgprQ0ZTdHJpbmdFbmNvZGluZ0tPSThfUiAo
c3VwcG9ydGVkIGFzICJLT0k4LVIiKToKa29pCgprQ0ZTdHJpbmdFbmNvZGluZ0JpZzVfRE9TVmFy
aWFudCAoc3VwcG9ydGVkIGFzICJCaWc1Iik6CmNuYmlnNQp4eGJpZzUKCmtDRlN0cmluZ0VuY29k
aW5nTWFjUm9tYW5MYXRpbjE6CngtbWFjLXJvbWFuLWxhdGluMQoKa0NGU3RyaW5nRW5jb2RpbmdL
T0k4X1U6CktPSTgtVSAoc3VwcG9ydGVkIGluIG1vZGVybiBJQ1Up
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9453</attachid>
            <date>2006-07-14 13:03:08 -0700</date>
            <delta_ts>2006-07-14 18:45:29 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>4195r1_patch.txt</filename>
            <type>text/plain</type>
            <size>84250</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY2hhcnNldC1rb2k4LXUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY2hhcnNldC1rb2k4
LXUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGlu
Zy9jaGFyc2V0LWtvaTgtdS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBA
QAorVGVzdCBmb3IgYnVnIDQxOTUgLSBSRUdSRVNTSU9OOiBLT0k4LVUgZW5jb2Rpbmcgbm8gbG9u
Z2VyIHN1cHBvcnRlZC4KKworVGhlIHRlc3QgcGFzc2VzIGlmIHRoZXNlIHR3byBsZXR0ZXJzIGxv
b2sgaW52ZXJ0ZWQgYWxvbmcgdGhlIHZlcnRpY2FsIGF4aXM6ICLQrdCEIgorCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY2hhcnNldC1rb2k4LXUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2NoYXJzZXQta29pOC11Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2NoYXJzZXQta29pOC11Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVx
dWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1LT0k4LVUiPgor
PHRpdGxlPktPSTgtVTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorCWxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKzwvc2NyaXB0PgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9w
ZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD00MTk1Ij4gYnVnIDQxOTU8L2E+IC0gCitSRUdS
RVNTSU9OOiBLT0k4LVUgZW5jb2Rpbmcgbm8gbG9uZ2VyIHN1cHBvcnRlZC48L3A+Cis8cD5UaGUg
dGVzdCBwYXNzZXMgaWYgdGhlc2UgdHdvIGxldHRlcnMgbG9vayBpbnZlcnRlZCBhbG9uZyB0aGUg
dmVydGljYWwgYXhpczogIvy0IjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZW5jb2RpbmcvY2hhcnNldC14LW5leHRzdGVwLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2NoYXJzZXQteC1uZXh0c3RlcC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2NoYXJz
ZXQteC1uZXh0c3RlcC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAor
VGVzdCBmb3IgYnVnIDQxOTUgLSBSRUdSRVNTSU9OOiBLT0k4LVUgZW5jb2Rpbmcgbm8gbG9uZ2Vy
IHN1cHBvcnRlZC4KKworVGVzdGluZyBmb3IgYW4gZW5jb2RpbmcgdGhhdCdzIGxlc3MgbGlrZWx5
IHRvIGJlIGluIHlvdXIgdmVyc2lvbiBvZiBJQ1UgdGhhbiBLT0k4LVUuIFRoZXNlIHR3byBjaGFy
YWN0ZXJzIHNob3VsZCBsb29rIHRoZSBzYW1lOiAiw4bDhiIuCisKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9lbmNvZGluZy9jaGFyc2V0LXgtbmV4dHN0ZXAuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2NoYXJzZXQteC1uZXh0c3RlcC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jaGFyc2V0LXgtbmV4dHN0ZXAuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0
dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXgtbmV4
dHN0ZXAiPgorPHRpdGxlPngtbmV4dHN0ZXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKwlsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6
Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE5NSI+IGJ1ZyA0MTk1
PC9hPiAtIAorUkVHUkVTU0lPTjogS09JOC1VIGVuY29kaW5nIG5vIGxvbmdlciBzdXBwb3J0ZWQu
PC9wPgorPHA+VGVzdGluZyBmb3IgYW4gZW5jb2RpbmcgdGhhdCdzIGxlc3MgbGlrZWx5IHRvIGJl
IGluIHlvdXIgdmVyc2lvbiBvZiBJQ1UgdGhhbiBLT0k4LVUuIFRoZXNlIHR3byBjaGFyYWN0ZXJz
IHNob3VsZCBsb29rIHRoZSBzYW1lOiAi4SZBRWxpZzsiLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9CT00tb3ZlcnJpZGUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9CT00tb3ZlcnJp
ZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9t
aXNjL0JPTS1vdmVycmlkZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAK
K1NV0KHQoUVTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL0JPTS1vdmVycmlk
ZS5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvQk9NLW92ZXJy
aWRlLnBsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL0JPTS1v
dmVycmlkZS5wbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorIyEvdXNyL2Jpbi9wZXJs
CisjIFRlc3QgdGhhdCBCT00gY2FuIG92ZXJyaWRlIHdoYXRldmVyIGNoYXJzZXQgd2FzIHNldCBp
biBDb250ZW50LVR5cGUKKyMgKHRoaXMgaXMgbm90IHRoZSBiZWhhdmlvciBvZiBGaXJlZm94LCBu
b3IgZXhwZWN0ZWQgYnkgYW55IHN0YW5kYXJkKS4KKworcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4
dC9odG1sO2NoYXJzZXQ9eC1tYWMtaGVicmV3XHJcbiI7CitwcmludCAiXHJcbiI7CisKK3ByaW50
ICJceGVmXHhiYlx4YmYiOworcHJpbnQgIlNV0KHQoUVTUyI7CitwcmludCAiPHNjcmlwdD5pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7PC9zY3JpcHQ+IjsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbWlzYy9CT00tb3ZlcnJpZGUucGwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5leHAJKHJldmlzaW9uIDE1NDE2KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw2IEBACiAub2JqY19jbGFzc19uYW1lX1dlYkNv
cmVTY3JpcHREZWJ1Z2dlcgogLm9iamNfY2xhc3NfbmFtZV9XZWJDb3JlU2V0dGluZ3MKIC5vYmpj
X2NsYXNzX25hbWVfV2ViQ29yZVN0cmluZ1RydW5jYXRvcgotLm9iamNfY2xhc3NfbmFtZV9XZWJD
b3JlVGV4dERlY29kZXIKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVZpZXdGYWN0b3J5CiAub2Jq
Y19jbGFzc19uYW1lX1dlYkRhc2hib2FyZFJlZ2lvbgogX1dlYkNvcmVEcmF3VGV4dEF0UG9pbnQK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNTQxNikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDYgQEAKIAkJNjU2NTgyMTMwOUQxNTExMTAwMEU2
MUQ3IC8qIGtzdmdjc3N2YWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NjU4MjBGMDlEMTUxMTEwMDBFNjFENyAvKiBrc3ZnY3NzdmFsdWVzLmgg
Ki87IH07CiAJCTY1NzQzQjUyMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQzQjUwMDk3
MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLzsgfTsKIAkJNjU3NDNCNTMwOTcw
NzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJT
VkdUZXh0LmggKi87IH07Ci0JCTY1NzZGOUQ2MDlCMjQ4NEEwMDAwNDFGNyAvKiBUZXh0RW5jb2Rp
bmdNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjU3NkY5RDUwOUIyNDg0QTAwMDA0MUY3IC8qIFRleHRFbmNvZGluZ01hYy5jcHAgKi87IH07CiAJ
CTY1N0JENzREMDlBRkRDNTQwMDVBMjA1NiAvKiBTdHJlYW1pbmdUZXh0RGVjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTdCRDc0OTA5QUZE
QzU0MDA1QTIwNTYgLyogU3RyZWFtaW5nVGV4dERlY29kZXIuY3BwICovOyB9OwogCQk2NTdCRDc0
RTA5QUZEQzU0MDA1QTIwNTYgLyogU3RyZWFtaW5nVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1N0JENzRBMDlBRkRDNTQwMDVBMjA1
NiAvKiBTdHJlYW1pbmdUZXh0RGVjb2Rlci5oICovOyB9OwogCQk2NTdCRDc0RjA5QUZEQzU0MDA1
QTIwNTYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1N0JENzRCMDlBRkRDNTQwMDVBMjA1NiAvKiBUZXh0RW5jb2Rpbmcu
Y3BwICovOyB9OwpAQCAtMTU3OSw4ICsxNTc4LDEwIEBACiAJCURENzYzQkIyMDk5MkMyQzkwMDc0
MEI4RSAvKiBsaWJ4bWwyLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gREQ3NjNCQjEwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIg
Ki87IH07CiAJCUREN0NERjI1MEEyM0NGOTgwMDA2OTkyOCAvKiBDU1NVbmtub3duUnVsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQ0UwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi87IH07CiAJCUUxMDUyQzMyMEE0RDcw
MDEwMDcyRDk5QiAvKiBET01FdmVudHNOb25zdGFuZGFyZC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDUyQzMxMEE0RDcwMDEwMDcyRDk5QiAvKiBE
T01FdmVudHNOb25zdGFuZGFyZC5tbSAqLzsgfTsKLQkJRTFFRTc3MzcwOEYxMDg2QzAwMTY2ODcw
IC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFFRTc3MzUwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUUxRUU3NzM4MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNzczNjA4RjEwODZD
MDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tICovOyB9OworCQlFMTQ4NDJERTBBNjc0
OTM0MDA3RTREMzkgLyogU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDg0MkREMEE2NzQ5MzQwMDdFNEQzOSAv
KiBTdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5oICovOyB9OworCQlFMTQ4NDJGRjBBNjc0QTMxMDA3
RTREMzkgLyogU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0ODQyRkUwQTY3NEEzMTAwN0U0RDM5IC8qIFN0
cmVhbWluZ1RleHREZWNvZGVySUNVLmNwcCAqLzsgfTsKKwkJRTE0ODQzMkYwQTY3NEZDMjAwN0U0
RDM5IC8qIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQ4NDMyRTBBNjc0RkMyMDA3RTREMzkgLyogU3RyZWFt
aW5nVGV4dERlY29kZXJNYWMuaCAqLzsgfTsKKwkJRTE0ODQzRDYwQTY3NTRBNjAwN0U0RDM5IC8q
IFN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDg0MzkxMEE2NzUyQkYwMDdFNEQzOSAvKiBTdHJlYW1pbmdU
ZXh0RGVjb2Rlck1hYy5jcHAgKi87IH07CiAJCUUxRjA0MjQ2MDk4MzkzODkwMDY2OTRFQSAvKiB4
bWxodHRwcmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUYwNDI0NDA5ODM5Mzg5MDA2Njk0RUEgLyogeG1saHR0cHJlcXVlc3QuY3BwICov
OyB9OwogCQlFMUYwNDI0NzA5ODM5Mzg5MDA2Njk0RUEgLyogeG1saHR0cHJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRjA0MjQ1MDk4Mzkz
ODkwMDY2OTRFQSAvKiB4bWxodHRwcmVxdWVzdC5oICovOyB9OwogCQlFRDA0OEFCQzA4MzNGMTMy
MDA2RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQwNDhBQkIwODMzRjEzMjAwNkUxRTY3IC8q
IHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi87IH07CkBAIC0xODk2LDggKzE4OTcsNyBAQAog
CQk2NTY1ODIxMDA5RDE1MTExMDAwRTYxRDcgLyoga3N2Z2Nzc3ZhbHVlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0ga3N2Z2Nzc3ZhbHVlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjU3NDNCNTAwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTc0M0I1MTA5NzA3NkY4MDAxRTdDRUYgLyogUmVu
ZGVyU1ZHVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZH
VGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTc2RjlENTA5QjI0ODRBMDAw
MDQxRjcgLyogVGV4dEVuY29kaW5nTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0RW5jb2RpbmdNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk2NTdCRDc0OTA5QUZEQzU0MDA1QTIwNTYgLyogU3RyZWFtaW5nVGV4dERlY29kZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmVhbWluZ1RleHREZWNv
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU3QkQ3NDkwOUFGREM1NDAw
NUEyMDU2IC8qIFN0cmVhbWluZ1RleHREZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gU3RyZWFtaW5nVGV4dERlY29kZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTdCRDc0QTA5QUZEQzU0MDA1QTIwNTYg
LyogU3RyZWFtaW5nVGV4dERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cmVhbWluZ1RleHREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1N0JENzRCMDlBRkRDNTQwMDVBMjA1NiAvKiBUZXh0RW5jb2RpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNvZGluZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1N0JENzRDMDlBRkRDNTQwMDVBMjA1NiAvKiBUZXh0RW5jb2Rp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM0NSw4ICszMzQ1LDEwIEBACiAJCURCMjND
MkNBMEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50Q29tbWFuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZW50T3V0ZGVudENvbW1hbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQ3NjNCQjEwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIu
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnhtbDIuZHlsaWI7IHBhdGggPSAvdXNy
L2xpYi9saWJ4bWwyLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlFMTA1
MkMzMTBBNEQ3MDAxMDA3MkQ5OUIgLyogRE9NRXZlbnRzTm9uc3RhbmRhcmQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRXZlbnRzTm9uc3RhbmRhcmQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxRUU3NzM1MDhGMTA4NkMwMDE2Njg3MCAv
KiBXZWJDb3JlVGV4dERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVGV4dERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUUxRUU3NzM2MDhGMTA4NkMw
MDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVUZXh0RGVjb2Rlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJ
CUUxNDg0MkREMEE2NzQ5MzQwMDdFNEQzOSAvKiBTdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTQ4NDJGRTBBNjc0QTMxMDA3RTREMzkg
LyogU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMTQ4NDMyRTBBNjc0RkMyMDA3RTREMzkgLyogU3RyZWFtaW5nVGV4dERl
Y29kZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFt
ZSA9IFN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmg7IHBhdGggPSBtYWMvU3RyZWFtaW5nVGV4dERl
Y29kZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE0ODQzOTEwQTY3NTJC
RjAwN0U0RDM5IC8qIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBTdHJlYW1pbmdUZXh0RGVjb2Rl
ck1hYy5jcHA7IHBhdGggPSBtYWMvU3RyZWFtaW5nVGV4dERlY29kZXJNYWMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMUYwNDI0NDA5ODM5Mzg5MDA2Njk0RUEgLyogeG1saHR0
cHJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0geG1saHR0
cHJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUYwNDI0NTA5ODM5
Mzg5MDA2Njk0RUEgLyogeG1saHR0cHJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0geG1saHR0cHJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RUQwNDhBQkIwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZm
OyBwYXRoID0gdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM4NzQsNyArMzg3Niw2IEBACiAJCQkJNjU4MkExNTUwOTk5OUQ2RDAwQkVFQjZE
IC8qIFN5c3RlbVRpbWVNYWMuY3BwICovLAogCQkJCTkzNTIwNzFCMDlCRDNCQkIwMEYyMDM4RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSAqLywKIAkJCQlGNTg3ODUzODAyREUzNzU5MDFFQTQxMjIgLyog
VGV4dEJveE1hYy5tbSAqLywKLQkJCQk2NTc2RjlENTA5QjI0ODRBMDAwMDQxRjcgLyogVGV4dEVu
Y29kaW5nTWFjLmNwcCAqLywKIAkJCQlGNTg3ODUxMjAyREUzNzU5MDFFQTQxMjIgLyogVGV4dEZp
ZWxkTWFjLm1tICovLAogCQkJCTY1NDVGNjc1MDlCODMwMTgwMDEzMDA2RiAvKiBUcmFuc2Zlckpv
Yk1hYy5tbSAqLywKIAkJCQlGNTUxN0RDMjAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3Rv
cnkuaCAqLywKQEAgLTM5NzksOCArMzk4MCw2IEBACiAJCQkJRjU2NUFFODYwMkVDQTU4MzAxODYz
NUNBIC8qIFdlYkNvcmVTZXR0aW5ncy5tbSAqLywKIAkJCQk2NTkwMUE0MjA5RkM2MDM5MDA1QkQ3
NTIgLyogV2ViQ29yZVN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCTY1OTAxQTQzMDlGQzYwMzkw
MDVCRDc1MiAvKiBXZWJDb3JlU3RyaW5nVHJ1bmNhdG9yLm1tICovLAotCQkJCUUxRUU3NzM1MDhG
MTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIuaCAqLywKLQkJCQlFMUVFNzczNjA4
RjEwODZDMDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tICovLAogCQkJCUY1ODc4NTU0
MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkuaCAqLywKIAkJCQlGNTg3ODU1
NTAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZVZpZXdGYWN0b3J5Lm0gKi8sCiAJCQkJNTE1MEMy
QTEwNzAyNjI5MDAwQUY2NDJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oICovLApAQCAtNTE2OSw2
ICs1MTY4LDEwIEBACiAJCQkJOTM1MjA3MTcwOUJEM0JBNTAwRjIwMzhEIC8qIFN0YXRpY0NvbnN0
cnVjdG9ycy5oICovLAogCQkJCTY1N0JENzQ5MDlBRkRDNTQwMDVBMjA1NiAvKiBTdHJlYW1pbmdU
ZXh0RGVjb2Rlci5jcHAgKi8sCiAJCQkJNjU3QkQ3NEEwOUFGREM1NDAwNUEyMDU2IC8qIFN0cmVh
bWluZ1RleHREZWNvZGVyLmggKi8sCisJCQkJRTE0ODQyRkUwQTY3NEEzMTAwN0U0RDM5IC8qIFN0
cmVhbWluZ1RleHREZWNvZGVySUNVLmNwcCAqLywKKwkJCQlFMTQ4NDJERDBBNjc0OTM0MDA3RTRE
MzkgLyogU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuaCAqLywKKwkJCQlFMTQ4NDM5MTBBNjc1MkJG
MDA3RTREMzkgLyogU3RyZWFtaW5nVGV4dERlY29kZXJNYWMuY3BwICovLAorCQkJCUUxNDg0MzJF
MEE2NzRGQzIwMDdFNEQzOSAvKiBTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYy5oICovLAogCQkJCTkz
Q0Q0RkRBMDk5NUY5RUEwMDdFQ0M5NyAvKiBTdHJpbmcuY3BwICovLAogCQkJCTkzMTI2RjYwMDlE
N0E3MzYwMDhEOTYyNiAvKiBTdHJpbmdIYXNoLmggKi8sCiAJCQkJOTNDRDRGREMwOTk1RjlFQTAw
N0VDQzk3IC8qIFN0cmluZ0ltcGwuY3BwICovLApAQCAtNTY0OCw3ICs1NjUxLDYgQEAKIAkJCQk3
RTZGRUVEODA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5Mzk4ODVDNDA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjVDOTdBRjMwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTFFRTc3MzcwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0
RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzODcwOTUyNDg2RDAwMUREMTk2IC8q
IEtSZW5kZXJpbmdEZXZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMzg5MDk1MjQ4NkQw
MDFERDE5NiAvKiBLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
OEFEMzhBMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjM3Nyw2ICs2Mzc5LDggQEAKIAkJCQlBQkRERkU3QzBBNUM2RTcwMDBBM0Ux
MUQgLyogUmVuZGVyUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkRERkU3RDBBNUM2
RTcwMDBBM0UxMUQgLyogUmVuZGVyUG9wdXBNZW51TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTIxN0UwMzBBNUVDRDQ3MDBEQjhEMDAgLyogWFNMSW1wb3J0UnVsZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTE0ODQyREUwQTY3NDkzNDAwN0U0RDM5IC8qIFN0cmVhbWluZ1RleHREZWNvZGVySUNV
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTQ4NDMyRjBBNjc0RkMyMDA3RTREMzkgLyogU3RyZWFt
aW5nVGV4dERlY29kZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjU2MSw3ICs2NTY1LDYgQEAK
IAkJCQlBOEZEOEI4NjA4N0NCNDRDMDBEQzM3MDcgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdFNkZFRUQ5MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0
RGVidWdnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4ODVDMzA4QjdFM0QxMDBFNzA3QzQg
LyogRXZlbnROYW1lcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUVFNzczODA4RjEwODZDMDAx
NjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQz
ODYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTg4QUQzODgwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdGaWxsUGFpbnRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDM4QjA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTEzLDcgKzY5
MTYsNiBAQAogCQkJCTkzNTM2N0U5MDlBRjc3RUYwMEQzNUNENiAvKiBHcmFwaGljc0NvbnRleHRN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk2NTdCRDc0RDA5QUZEQzU0MDA1QTIwNTYgLyogU3Ry
ZWFtaW5nVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3QkQ3NEYwOUFGREM1
NDAwNUEyMDU2IC8qIFRleHRFbmNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2NTc2RjlE
NjA5QjI0ODRBMDAwMDQxRjcgLyogVGV4dEVuY29kaW5nTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTY1RjUzODZCMDlCMkMwNUUwMEYzREM0QSAvKiBDaGFyc2V0TmFtZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgyMzk4QTgwOUIzQUNGNTAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MjM5RTAwMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dn
aW5nLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzI0Myw2ICs3MjQ1LDggQEAKIAkJCQlBQkRERkU3
RTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyUG9wdXBNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODUyMTdFMDIwQTVFQ0Q0NzAwREI4RDAwIC8qIFhTTEltcG9ydFJ1bGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNDRjM1QUEwQTYxNjlGNzAwNTQzRTUyIC8qIEFmZmluZVRyYW5zZm9y
bUNHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxNDg0MkZGMEE2NzRBMzEwMDdFNEQzOSAvKiBT
dHJlYW1pbmdUZXh0RGVjb2RlcklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTQ4NDNENjBB
Njc1NEE2MDA3RTREMzkgLyogU3RyZWFtaW5nVGV4dERlY29kZXJNYWMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVRleHREZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVUZXh0RGVjb2Rlci5oCShyZXZpc2lv
biAxNTQxNikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlVGV4dERlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU3RyZWFtaW5nVGV4dERlY29kZXI7Ci19Ci10eXBlZGVm
IFdlYkNvcmU6OlN0cmVhbWluZ1RleHREZWNvZGVyIFBsYXRmb3JtRGVjb2RlcjsKLSNlbHNlCi0g
ICAgQGNsYXNzIFBsYXRmb3JtRGVjb2RlcjsKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdlYkNvcmVU
ZXh0RGVjb2RlciA6IE5TT2JqZWN0Ci17Ci1AcHJpdmF0ZQotICAgIFBsYXRmb3JtRGVjb2RlciAq
X2RlY29kZXI7Ci19Ci0KLS0gKFdlYkNvcmVUZXh0RGVjb2RlciAqKWluaXRXaXRoRW5jb2RpbmdO
YW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZTsKLSsgKFdlYkNvcmVUZXh0RGVjb2RlciAqKWRl
Y29kZXJXaXRoRW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZTsKLQotLSAoTlNT
dHJpbmcgKilkZWNvZGVEYXRhOihOU0RhdGEgKilkYXRhOwotLSAoTlNTdHJpbmcgKilmbHVzaDsK
LQotQGVuZApJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVUZXh0RGVjb2Rlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVRleHREZWNvZGVyLm1tCShy
ZXZpc2lvbiAxNTQxNikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlVGV4dERlY29kZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJDb3JlVGV4dERlY29kZXIuaCIKLQotI2lt
cG9ydCAiVGV4dEVuY29kaW5nLmgiCi0jaW1wb3J0ICJTdHJlYW1pbmdUZXh0RGVjb2Rlci5oIgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVUZXh0
RGVjb2RlcgotCi0tIChXZWJDb3JlVGV4dERlY29kZXIgKilpbml0V2l0aEVuY29kaW5nTmFtZToo
TlNTdHJpbmcgKillbmNvZGluZ05hbWUKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IAotICAgIFdlYkNvcmU6OlRleHRFbmNvZGluZyBlbmNvZGluZyA9IFdlYkNvcmU6OlRleHRFbmNv
ZGluZyhbZW5jb2RpbmdOYW1lIGNTdHJpbmdVc2luZ0VuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNv
ZGluZ10pOwotICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKQotICAgICAgICBlbmNvZGluZyA9
IFdlYkNvcmU6OlRleHRFbmNvZGluZyhMYXRpbjFFbmNvZGluZyk7Ci0gICAgCi0gICAgX2RlY29k
ZXIgPSBuZXcgU3RyZWFtaW5nVGV4dERlY29kZXIoZW5jb2RpbmcpOwotICAgIAotICAgIHJldHVy
biBzZWxmOwotfQotCi0rIChXZWJDb3JlVGV4dERlY29kZXIgKilkZWNvZGVyV2l0aEVuY29kaW5n
TmFtZTooTlNTdHJpbmcgKillbmNvZGluZ05hbWUKLXsKLSAgICByZXR1cm4gW1tbV2ViQ29yZVRl
eHREZWNvZGVyIGFsbG9jXSBpbml0V2l0aEVuY29kaW5nTmFtZTplbmNvZGluZ05hbWVdIGF1dG9y
ZWxlYXNlXTsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgZGVsZXRlIF9kZWNvZGVyOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIGRlbGV0
ZSBfZGVjb2RlcjsKLSAgICBbc3VwZXIgZmluYWxpemVdOwotfQotCi0tIChOU1N0cmluZyAqKWRl
Y29kZURhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICByZXR1cm4gX2RlY29kZXItPnRvVW5pY29k
ZSgoY29uc3QgY2hhciAqKVtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSwgZmFsc2UpLmdldE5T
U3RyaW5nKCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopZmx1c2gKLXsKLSAgICByZXR1cm4gX2RlY29k
ZXItPnRvVW5pY29kZSgiIiwgMCwgdHJ1ZSkuZ2V0TlNTdHJpbmcoKTsKLX0KLQotQGVuZApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDE1NDE2KQorKysgV2ViQ29yZS9sb2FkZXIvRGVjb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCBicmVha0JyZWFrOgogCiBE
ZWNvZGVyOjpEZWNvZGVyKCkgCiAgIDogbV9lbmNvZGluZyhMYXRpbjFFbmNvZGluZykKLSAgLCBt
X2RlY29kZXIobmV3IFN0cmVhbWluZ1RleHREZWNvZGVyKG1fZW5jb2RpbmcpKQorICAsIG1fZGVj
b2RlcihTdHJlYW1pbmdUZXh0RGVjb2Rlcjo6Y3JlYXRlKG1fZW5jb2RpbmcpKQogICAsIGVuYygw
KQogICAsIG1fdHlwZShEZWZhdWx0RW5jb2RpbmcpCiAgICwgYm9keShmYWxzZSkKQEAgLTI3Nyw3
ICsyNzcsNyBAQCB2b2lkIERlY29kZXI6OnNldEVuY29kaW5nTmFtZShjb25zdCBjaGFyCiAgICAg
ICAgIGVuYyA9IGVuY29kaW5nLm5hbWUoKTsKICAgICAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5n
OwogICAgICAgICBtX3R5cGUgPSB0eXBlOwotICAgICAgICBtX2RlY29kZXIuc2V0KG5ldyBTdHJl
YW1pbmdUZXh0RGVjb2RlcihtX2VuY29kaW5nKSk7CisgICAgICAgIG1fZGVjb2Rlci5zZXQoU3Ry
ZWFtaW5nVGV4dERlY29kZXI6OmNyZWF0ZShtX2VuY29kaW5nKSk7CiAgICAgfQogfQogCkBAIC0z
ODcsNyArMzg3LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBEZWNvZGVyOjpkZWNvZGUoY29uc3QgYwog
ICAgICAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoYXV0b0RldGVjdGVkRW5j
b2RpbmcpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX2VuY29kaW5nLmlzVmFsaWQoKSk7CiAg
ICAgICAgICAgICAgICAgZW5jID0gbV9lbmNvZGluZy5uYW1lKCk7Ci0gICAgICAgICAgICAgICAg
bV9kZWNvZGVyLnNldChuZXcgU3RyZWFtaW5nVGV4dERlY29kZXIobV9lbmNvZGluZykpOworICAg
ICAgICAgICAgICAgIG1fZGVjb2Rlci5zZXQoU3RyZWFtaW5nVGV4dERlY29kZXI6OmNyZWF0ZSht
X2VuY29kaW5nKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYmVnaW5uaW5n
ID0gZmFsc2U7CkBAIC01NTUsNyArNTU1LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBEZWNvZGVyOjpk
ZWNvZGUoY29uc3QgYwogICAgICAgICAgICAgZW5jID0gImlzbzg4NTktMSI7CiAgICAgICAgICAg
ICBtX2VuY29kaW5nID0gVGV4dEVuY29kaW5nKExhdGluMUVuY29kaW5nKTsKICAgICAgICAgfQot
ICAgICAgICBtX2RlY29kZXIuc2V0KG5ldyBTdHJlYW1pbmdUZXh0RGVjb2RlcihtX2VuY29kaW5n
KSk7CisgICAgICAgIG1fZGVjb2Rlci5zZXQoU3RyZWFtaW5nVGV4dERlY29kZXI6OmNyZWF0ZSht
X2VuY29kaW5nKSk7CiAgICAgfQogICAgIERlcHJlY2F0ZWRTdHJpbmcgb3V0OwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1N0cmVhbWluZ1RleHREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1N0cmVhbWluZ1RleHREZWNvZGVyLmNwcAkocmV2aXNpb24gMTU0MTYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1N0cmVhbWluZ1RleHREZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwzMjcgKzI3LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU3RyZWFtaW5nVGV4dERlY29kZXIuaCIKIAotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0
cmVhbWluZ1RleHREZWNvZGVyOjpTdHJlYW1pbmdUZXh0RGVjb2Rlcihjb25zdCBUZXh0RW5jb2Rp
bmcmIGVuY29kaW5nKQotICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKLSAgICAsIG1fbGl0dGxl
RW5kaWFuKGVuY29kaW5nLmZsYWdzKCkgJiBMaXR0bGVFbmRpYW4pCi0gICAgLCBtX2F0U3RhcnQo
dHJ1ZSkKLSAgICAsIG1fZXJyb3IoZmFsc2UpCi0gICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkK
LSAgICAsIG1fY29udmVydGVySUNVKDApCi17Ci19Ci0KLXN0YXRpYyBjb25zdCBVQ2hhciBCT00g
PSAweEZFRkY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXplID0gMTYz
ODQ7Ci0gICAgCi1zdGF0aWMgVUNvbnZlcnRlciogY2FjaGVkQ29udmVydGVySUNVOwotc3RhdGlj
IFRleHRFbmNvZGluZ0lEIGNhY2hlZENvbnZlcnRlckVuY29kaW5nID0gSW52YWxpZEVuY29kaW5n
OwotCi1TdHJlYW1pbmdUZXh0RGVjb2Rlcjo6flN0cmVhbWluZ1RleHREZWNvZGVyKCkKLXsKLSAg
ICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsKLSAgICAgICAgaWYgKGNhY2hlZENvbnZlcnRlcklDVSAh
PSAwKQotICAgICAgICAgICAgdWNudl9jbG9zZShjYWNoZWRDb252ZXJ0ZXJJQ1UpOwotICAgICAg
ICBjYWNoZWRDb252ZXJ0ZXJJQ1UgPSBtX2NvbnZlcnRlcklDVTsKLSAgICAgICAgY2FjaGVkQ29u
dmVydGVyRW5jb2RpbmcgPSBtX2VuY29kaW5nLmVuY29kaW5nSUQoKTsKLSAgICB9Ci19Ci0KLURl
cHJlY2F0ZWRTdHJpbmcgU3RyZWFtaW5nVGV4dERlY29kZXI6OmNvbnZlcnRVVEYxNihjb25zdCB1
bnNpZ25lZCBjaGFyKiBzLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChtX251bUJ1ZmZlcmVk
Qnl0ZXMgPT0gMCB8fCBtX251bUJ1ZmZlcmVkQnl0ZXMgPT0gMSk7Ci0KLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gczsKLSAgICBzaXplX3QgbGVuID0gbGVuZ3RoOwotICAgIAotICAgIERl
cHJlY2F0ZWRTdHJpbmcgcmVzdWx0KCIiKTsKLSAgICAKLSAgICByZXN1bHQucmVzZXJ2ZShsZW5n
dGggLyAyKTsKLQotICAgIGlmIChtX251bUJ1ZmZlcmVkQnl0ZXMgIT0gMCAmJiBsZW4gIT0gMCkg
ewotICAgICAgICBBU1NFUlQobV9udW1CdWZmZXJlZEJ5dGVzID09IDEpOwotICAgICAgICBVQ2hh
ciBjOwotICAgICAgICBpZiAobV9saXR0bGVFbmRpYW4pCi0gICAgICAgICAgICBjID0gbV9idWZm
ZXJlZEJ5dGVzWzBdIHwgKHBbMF0gPDwgOCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGMg
PSAobV9idWZmZXJlZEJ5dGVzWzBdIDw8IDgpIHwgcFswXTsKLQotICAgICAgICBpZiAoYykKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxEZXByZWNhdGVkQ2hhcio+
KCZjKSwgMSk7Ci0KLSAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKLSAgICAgICAgcCAr
PSAxOwotICAgICAgICBsZW4gLT0gMTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGxlbiA+IDEp
IHsKLSAgICAgICAgVUNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKLSAgICAgICAg
aW50IHJ1bkxlbmd0aCA9IG1pbihsZW4gLyAyLCBDb252ZXJzaW9uQnVmZmVyU2l6ZSk7Ci0gICAg
ICAgIGludCBidWZmZXJMZW5ndGggPSAwOwotICAgICAgICBpZiAobV9saXR0bGVFbmRpYW4pIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBVQ2hhciBjID0gcFswXSB8IChwWzFdIDw8IDgpOwotICAgICAgICAgICAgICAg
IHAgKz0gMjsKLSAgICAgICAgICAgICAgICBpZiAoYyAhPSBCT00pCi0gICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW5MZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIFVDaGFyIGMgPSAocFswXSA8PCA4KSB8IHBbMV07Ci0gICAgICAg
ICAgICAgICAgcCArPSAyOwotICAgICAgICAgICAgICAgIGlmIChjICE9IEJPTSkKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PERlcHJlY2F0
ZWRDaGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoKTsKLSAgICAgICAgbGVuIC09IHJ1bkxlbmd0
aCAqIDI7Ci0gICAgfQotICAgIAotICAgIGlmIChsZW4pIHsKLSAgICAgICAgQVNTRVJUKG1fbnVt
QnVmZmVyZWRCeXRlcyA9PSAwKTsKLSAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMTsKLSAg
ICAgICAgbV9idWZmZXJlZEJ5dGVzWzBdID0gcFswXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotYm9vbCBTdHJlYW1pbmdUZXh0RGVjb2Rlcjo6Y29udmVydElmQVNDSUko
Y29uc3QgdW5zaWduZWQgY2hhciogcywgaW50IGxlbmd0aCwgRGVwcmVjYXRlZFN0cmluZyYgc3Ry
KQotewotICAgIEFTU0VSVChtX251bUJ1ZmZlcmVkQnl0ZXMgPT0gMCB8fCBtX251bUJ1ZmZlcmVk
Qnl0ZXMgPT0gMSk7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdCgiIik7Ci0gICAgcmVz
dWx0LnJlc2VydmUobGVuZ3RoKTsKKyNpZiBVU0UoSUNVX1VOSUNPREUpCisgICAgI2luY2x1ZGUg
IlN0cmVhbWluZ1RleHREZWNvZGVySUNVLmgiCisjZW5kaWYKIAotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIHAgPSBzOwotICAgIHNpemVfdCBsZW4gPSBsZW5ndGg7Ci0gICAgdW5zaWduZWQgY2hh
ciBvcmVkID0gMDsKLSAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgIFVDaGFyIGJ1ZmZlcltDb252
ZXJzaW9uQnVmZmVyU2l6ZV07Ci0gICAgICAgIGludCBydW5MZW5ndGggPSBtaW4obGVuLCBDb252
ZXJzaW9uQnVmZmVyU2l6ZSk7Ci0gICAgICAgIGludCBidWZmZXJMZW5ndGggPSAwOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGMgPSAqcCsrOwotICAgICAgICAgICAgb3JlZCB8PSBjOwotICAgICAgICAgICAg
YnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9yZWQg
JiAweDgwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQuYXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8RGVwcmVjYXRlZENoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGgp
OwotICAgICAgICBsZW4gLT0gcnVuTGVuZ3RoOwotICAgIH0KKyNpZiBQTEFURk9STShNQUMpCisg
ICAgI2luY2x1ZGUgIlN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmgiCisjZW5kaWYKIAotICAgIHN0
ciA9IHJlc3VsdDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAotc3RhdGljIGlubGluZSBUZXh0RW5jb2Rp
bmcgZWZmZWN0aXZlRW5jb2RpbmcoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKLXsKLSAg
ICBUZXh0RW5jb2RpbmdJRCBpZCA9IGVuY29kaW5nLmVuY29kaW5nSUQoKTsKLSAgICBpZiAoaWQg
PT0gTGF0aW4xRW5jb2RpbmcgfHwgaWQgPT0gQVNDSUlFbmNvZGluZykKLSAgICAgICAgaWQgPSBX
aW5MYXRpbjFFbmNvZGluZzsKLSAgICByZXR1cm4gVGV4dEVuY29kaW5nKGlkLCBlbmNvZGluZy5m
bGFncygpKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTdHJlYW1pbmdUZXh0RGVj
b2Rlcjo6Y3JlYXRlSUNVQ29udmVydGVyKCkKK1N0cmVhbWluZ1RleHREZWNvZGVyKiBTdHJlYW1p
bmdUZXh0RGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0g
ICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gZWZmZWN0aXZlRW5jb2RpbmcobV9lbmNvZGluZyk7
Ci0gICAgY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gZW5jb2RpbmcubmFtZSgpOwotCi0gICAg
Ym9vbCBjYWNoZWRFbmNvZGluZ0VxdWFsID0gY2FjaGVkQ29udmVydGVyRW5jb2RpbmcgPT0gZW5j
b2RpbmcuZW5jb2RpbmdJRCgpOwotICAgIGNhY2hlZENvbnZlcnRlckVuY29kaW5nID0gSW52YWxp
ZEVuY29kaW5nOwotCi0gICAgaWYgKGNhY2hlZEVuY29kaW5nRXF1YWwgJiYgY2FjaGVkQ29udmVy
dGVySUNVKSB7Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gY2FjaGVkQ29udmVydGVySUNVOwot
ICAgICAgICBjYWNoZWRDb252ZXJ0ZXJJQ1UgPSAwOwotICAgIH0gZWxzZSB7ICAgIAotICAgICAg
ICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgQVNTRVJUKCFtX2NvbnZl
cnRlcklDVSk7Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gdWNudl9vcGVuKGVuY29kaW5nTmFt
ZSwgJmVycik7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBpZiAoZXJyID09IFVfQU1CSUdV
T1VTX0FMSUFTX1dBUk5JTkcpCi0gICAgICAgICAgICBMT0dfRVJST1IoIklDVSBhbWJpZ3VvdXMg
YWxpYXMgd2FybmluZyBmb3IgZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKLSAgICAgICAg
aWYgKCFtX2NvbnZlcnRlcklDVSkKLSAgICAgICAgICAgIExPR19FUlJPUigidGhlIElDVSBDb252
ZXJ0ZXIgd29uJ3QgY29udmVydCBmcm9tIHRleHQgZW5jb2RpbmcgMHglWCwgZXJyb3IgJWQiLCBl
bmNvZGluZy5lbmNvZGluZ0lEKCksIGVycik7CisjaWYgVVNFKElDVV9VTklDT0RFKQorICAgIE93
blB0cjxTdHJlYW1pbmdUZXh0RGVjb2RlcklDVT4gZGVjb2RlcklDVShuZXcgU3RyZWFtaW5nVGV4
dERlY29kZXJJQ1UoZW5jb2RpbmcpKTsKKyAgICBpZiAoZGVjb2RlcklDVS0+dGV4dEVuY29kaW5n
U3VwcG9ydGVkKCkpCisgICAgICAgIHJldHVybiBkZWNvZGVySUNVLnJlbGVhc2UoKTsKICNlbmRp
ZgotICAgIH0KLX0KIAotLy8gV2Ugc3RyaXAgQk9NIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGNh
biBzaG93IHVwIGJvdGggYXQgdGhlIHN0YXJ0IG9mIGNvbnRlbnQKLS8vIGFuZCBpbnNpZGUgY29u
dGVudCwgYW5kIHdlIG5ldmVyIHdhbnQgdGhlbSB0byBlbmQgdXAgaW4gdGhlIGRlY29kZWQgdGV4
dC4KLXZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXI6OmFwcGVuZE9taXR0aW5nQk9NKERlcHJlY2F0
ZWRTdHJpbmcmIHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgYnl0ZUNvdW50KQotewot
ICAgIEFTU0VSVChieXRlQ291bnQgJSBzaXplb2YoVUNoYXIpID09IDApOwotICAgIGludCBzdGFy
dCA9IDA7Ci0gICAgaW50IGNoYXJhY3RlckNvdW50ID0gYnl0ZUNvdW50IC8gc2l6ZW9mKFVDaGFy
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBjaGFyYWN0ZXJDb3VudDsgKytpKSB7Ci0gICAg
ICAgIGlmIChCT00gPT0gY2hhcmFjdGVyc1tpXSkgewotICAgICAgICAgICAgaWYgKHN0YXJ0ICE9
IGkpCi0gICAgICAgICAgICAgICAgcy5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXBy
ZWNhdGVkQ2hhcio+KCZjaGFyYWN0ZXJzW3N0YXJ0XSksIGkgLSBzdGFydCk7Ci0gICAgICAgICAg
ICBzdGFydCA9IGkgKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzdGFydCAhPSBjaGFy
YWN0ZXJDb3VudCkKLSAgICAgICAgcy5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXBy
ZWNhdGVkQ2hhcio+KCZjaGFyYWN0ZXJzW3N0YXJ0XSksIGNoYXJhY3RlckNvdW50IC0gc3RhcnQp
OwotfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBPd25QdHI8U3RyZWFtaW5nVGV4dERlY29kZXJN
YWM+IGRlY29kZXJNYWMobmV3IFN0cmVhbWluZ1RleHREZWNvZGVyTWFjKGVuY29kaW5nKSk7Cisg
ICAgaWYgKGRlY29kZXJNYWMtPnRleHRFbmNvZGluZ1N1cHBvcnRlZCgpKQorICAgICAgICByZXR1
cm4gZGVjb2Rlck1hYy5yZWxlYXNlKCk7CisjZW5kaWYKIAotRGVwcmVjYXRlZFN0cmluZyBTdHJl
YW1pbmdUZXh0RGVjb2Rlcjo6Y29udmVydFVzaW5nSUNVKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNo
cywgaW50IGxlbiwgYm9vbCBmbHVzaCkKLXsKLSAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRo
ZSBwYXNzZWQtaW4gZW5jb2RpbmcuCi0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkgewotICAgICAg
ICBjcmVhdGVJQ1VDb252ZXJ0ZXIoKTsKLSAgICAgICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKLSAg
ICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgRGVwcmVj
YXRlZFN0cmluZyByZXN1bHQoIiIpOwotICAgIHJlc3VsdC5yZXNlcnZlKGxlbik7Ci0KLSAgICBV
Q2hhciBidWZmZXJbQ29udmVyc2lvbkJ1ZmZlclNpemVdOwotICAgIGNvbnN0IGNoYXIqIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNocyk7Ci0gICAgY29uc3QgY2hhciog
c291cmNlTGltaXQgPSBzb3VyY2UgKyBsZW47Ci0gICAgaW50MzJfdCogb2Zmc2V0cyA9IE5VTEw7
Ci0gICAgVUVycm9yQ29kZSBlcnI7Ci0KLSAgICBkbyB7Ci0gICAgICAgIFVDaGFyKiB0YXJnZXQg
PSBidWZmZXI7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0YXJnZXRMaW1pdCA9IHRhcmdldCArIENv
bnZlcnNpb25CdWZmZXJTaXplOwotICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNv
dXJjZSwgc291cmNlTGltaXQsIG9mZnNldHMsIGZsdXNoLCAmZXJyKTsKLSAgICAgICAgaW50IGNv
dW50ID0gdGFyZ2V0IC0gYnVmZmVyOwotICAgICAgICBhcHBlbmRPbWl0dGluZ0JPTShyZXN1bHQs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihidWZmZXIpLCBjb3VudCAqIHNpemVvZihV
Q2hhcikpOwotICAgIH0gd2hpbGUgKGVyciA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7Ci0K
LSAgICBpZiAoVV9GQUlMVVJFKGVycikpIHsKLSAgICAgICAgLy8gZmx1c2ggdGhlIGNvbnZlcnRl
ciBzbyBpdCBjYW4gYmUgcmV1c2VkLCBhbmQgbm90IGJlIGJvdGhlcmVkIGJ5IHRoaXMgZXJyb3Iu
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIFVDaGFyICp0YXJnZXQgPSBidWZmZXI7Ci0gICAg
ICAgICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0TGltaXQgPSB0YXJnZXQgKyBDb252ZXJzaW9uQnVm
ZmVyU2l6ZTsKLSAgICAgICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgIHVj
bnZfdG9Vbmljb2RlKG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJj
ZSwgc291cmNlTGltaXQsIG9mZnNldHMsIHRydWUsICZlcnIpOwotICAgICAgICB9IHdoaWxlIChz
b3VyY2UgPCBzb3VyY2VMaW1pdCk7Ci0gICAgICAgIExPR19FUlJPUigiSUNVIGNvbnZlcnNpb24g
ZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CisgICAg
TE9HX0VSUk9SKCJubyBjb252ZXJ0ZXIgY2FuIGNvbnZlcnQgZnJvbSB0ZXh0IGVuY29kaW5nIDB4
JVgiLCBlbmNvZGluZy5lbmNvZGluZ0lEKCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
RGVwcmVjYXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0RGVjb2Rlcjo6Y29udmVydChjb25zdCB1bnNp
Z25lZCBjaGFyKiBjaHMsIGludCBsZW4sIGJvb2wgZmx1c2gpCi17Ci0gICAgc3dpdGNoIChtX2Vu
Y29kaW5nLmVuY29kaW5nSUQoKSkgewotICAgICAgICBjYXNlIFVURjE2RW5jb2Rpbmc6Ci0gICAg
ICAgICAgICByZXR1cm4gY29udmVydFVURjE2KGNocywgbGVuKTsKLQotICAgICAgICBjYXNlIEFT
Q0lJRW5jb2Rpbmc6Ci0gICAgICAgIGNhc2UgTGF0aW4xRW5jb2Rpbmc6Ci0gICAgICAgIGNhc2Ug
V2luTGF0aW4xRW5jb2Rpbmc6IHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0
OwotICAgICAgICAgICAgaWYgKGNvbnZlcnRJZkFTQ0lJKGNocywgbGVuLCByZXN1bHQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgVVRGOEVuY29kaW5nOgotICAgICAgICAgICAgLy8gSWYgYSBwcmV2
aW91cyBydW4gdXNlZCBJQ1UsIHdlIG1pZ2h0IGhhdmUgYSBwYXJ0bHkgY29udmVydGVkIGNoYXJh
Y3Rlci4KLSAgICAgICAgICAgIC8vIElmIHNvLCBkb24ndCB1c2UgdGhlIG9wdGltaXplZCBBU0NJ
SSBjb2RlIHBhdGguCi0gICAgICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7Ci0gICAgICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNv
bnZlcnRJZkFTQ0lJKGNocywgbGVuLCByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vI2RlZmluZSBQQVJU
SUFMX0NIQVJBQ1RFUl9IQU5ETElOR19URVNUX0NIVU5LX1NJWkUgMTAwMAotI2lmIFBBUlRJQUxf
Q0hBUkFDVEVSX0hBTkRMSU5HX1RFU1RfQ0hVTktfU0laRQotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVzdWx0OwotICAgIGludCBjaHVua1NpemU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVu
OyBpICs9IGNodW5rU2l6ZSkgewotICAgICAgICBjaHVua1NpemUgPSBsZW4gLSBpOwotICAgICAg
ICBpZiAoY2h1bmtTaXplID4gUEFSVElBTF9DSEFSQUNURVJfSEFORExJTkdfVEVTVF9DSFVOS19T
SVpFKSB7Ci0gICAgICAgICAgICBjaHVua1NpemUgPSBQQVJUSUFMX0NIQVJBQ1RFUl9IQU5ETElO
R19URVNUX0NIVU5LX1NJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ICs9IGNvbnZlcnRV
c2luZ0lDVShjaHMgKyBpLCBjaHVua1NpemUsIGZsdXNoICYmIChpICsgY2h1bmtTaXplID09IGxl
bikpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICByZXR1cm4gY29udmVy
dFVzaW5nSUNVKGNocywgbGVuLCBmbHVzaCk7CisjaWYgVVNFKElDVV9VTklDT0RFKQorICAgIHJl
dHVybiBkZWNvZGVySUNVLnJlbGVhc2UoKTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1
cm4gZGVjb2Rlck1hYy5yZWxlYXNlKCk7CiAjZW5kaWYKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBT
dHJlYW1pbmdUZXh0RGVjb2Rlcjo6dG9Vbmljb2RlKGNvbnN0IGNoYXIqIGNocywgaW50IGxlbiwg
Ym9vbCBmbHVzaCkKK1N0cmVhbWluZ1RleHREZWNvZGVyOjp+U3RyZWFtaW5nVGV4dERlY29kZXIo
KQogewotICAgIEFTU0VSVF9BUkcobGVuLCBsZW4gPj0gMCk7Ci0gICAgCi0gICAgaWYgKG1fZXJy
b3IgfHwgIWNocykKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLQotICAgIGlm
IChsZW4gPD0gMCAmJiAhZmx1c2gpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIC8vIEhhbmRs
ZSBub3JtYWwgY2FzZS4KLSAgICBpZiAoIW1fYXRTdGFydCkKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnQoY2hzLCBsZW4sIGZsdXNoKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBmb3VuZCBh
IEJPTS4KLSAgICBpbnQgbnVtQnVmZmVyZWRCeXRlcyA9IG1fbnVtQnVmZmVyZWRCeXRlczsKLSAg
ICBpbnQgYnVmMUxlbiA9IG51bUJ1ZmZlcmVkQnl0ZXM7Ci0gICAgaW50IGJ1ZjJMZW4gPSBsZW47
Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmMSA9IG1fYnVmZmVyZWRCeXRlczsKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBidWYyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oY2hzKTsKLSAgICB1bnNpZ25lZCBjaGFyIGMxID0gYnVmMUxlbiA/ICgtLWJ1ZjFM
ZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1
bnNpZ25lZCBjaGFyIGMyID0gYnVmMUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxl
biA/ICgtLWJ1ZjJMZW4sICpidWYyKyspIDogMDsKLSAgICB1bnNpZ25lZCBjaGFyIGMzID0gYnVm
MUxlbiA/ICgtLWJ1ZjFMZW4sICpidWYxKyspIDogYnVmMkxlbiA/ICgtLWJ1ZjJMZW4sICpidWYy
KyspIDogMDsKLSAgICBpbnQgQk9NTGVuZ3RoID0gMDsKLSAgICBpZiAoYzEgPT0gMHhGRiAmJiBj
MiA9PSAweEZFKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNv
ZGluZywgTGl0dGxlRW5kaWFuKTsKLSAgICAgICAgbV9saXR0bGVFbmRpYW4gPSB0cnVlOwotICAg
ICAgICBCT01MZW5ndGggPSAyOwotICAgIH0gZWxzZSBpZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAw
eEZGKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNvZGluZywg
QmlnRW5kaWFuKTsKLSAgICAgICAgbV9saXR0bGVFbmRpYW4gPSBmYWxzZTsKLSAgICAgICAgQk9N
TGVuZ3RoID0gMjsKLSAgICB9IGVsc2UgaWYgKGMxID09IDB4RUYgJiYgYzIgPT0gMHhCQiAmJiBj
MyA9PSAweEJGKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoVVRGOEVuY29k
aW5nKTsKLSAgICAgICAgQk9NTGVuZ3RoID0gMzsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgY2Fz
ZSB3aGVyZSB3ZSBmb3VuZCBhIEJPTS4KLSAgICBpZiAoQk9NTGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgQVNTRVJUKG51bUJ1ZmZlcmVkQnl0ZXMgKyBsZW4gPj0gQk9NTGVuZ3RoKTsKLSAgICAgICAg
aW50IHNraXAgPSBCT01MZW5ndGggLSBudW1CdWZmZXJlZEJ5dGVzOwotICAgICAgICBtX251bUJ1
ZmZlcmVkQnl0ZXMgPSAwOwotICAgICAgICBtX2F0U3RhcnQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIGxlbiA9PSBza2lwID8gRGVwcmVjYXRlZFN0cmluZygiIikgOiBjb252ZXJ0KGNocyArIHNr
aXAsIGxlbiAtIHNraXAsIGZsdXNoKTsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgY2FzZSB3aGVy
ZSB3ZSBrbm93IHRoZXJlIGlzIG5vIEJPTSBjb21pbmcuCi0gICAgY29uc3QgaW50IGJ1ZmZlclNp
emUgPSBzaXplb2YobV9idWZmZXJlZEJ5dGVzKTsKLSAgICBpZiAobnVtQnVmZmVyZWRCeXRlcyAr
IGxlbiA+IGJ1ZmZlclNpemUgfHwgZmx1c2gpIHsKLSAgICAgICAgbV9hdFN0YXJ0ID0gZmFsc2U7
Ci0gICAgICAgIGlmIChudW1CdWZmZXJlZEJ5dGVzID09IDApIHsKLSAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0KGNocywgbGVuLCBmbHVzaCk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQg
Y2hhciBidWZmZXJlZEJ5dGVzW3NpemVvZihtX2J1ZmZlcmVkQnl0ZXMpXTsKLSAgICAgICAgbWVt
Y3B5KGJ1ZmZlcmVkQnl0ZXMsIG1fYnVmZmVyZWRCeXRlcywgbnVtQnVmZmVyZWRCeXRlcyk7Ci0g
ICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0KGJ1
ZmZlcmVkQnl0ZXMsIG51bUJ1ZmZlcmVkQnl0ZXMsIGZhbHNlKSArIGNvbnZlcnQoY2hzLCBsZW4s
IGZsdXNoKTsKLSAgICB9Ci0KLSAgICAvLyBDb250aW51ZSB0byBsb29rIGZvciB0aGUgQk9NLgot
ICAgIG1lbWNweSgmbV9idWZmZXJlZEJ5dGVzW251bUJ1ZmZlcmVkQnl0ZXNdLCBjaHMsIGxlbik7
Ci0gICAgbV9udW1CdWZmZXJlZEJ5dGVzICs9IGxlbjsKLSAgICByZXR1cm4gIiI7CiB9Ci0gICAg
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU3RyZWFt
aW5nVGV4dERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1N0cmVhbWlu
Z1RleHREZWNvZGVyLmgJKHJldmlzaW9uIDE1NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TdHJl
YW1pbmdUZXh0RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxh
cEBueXBvcC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQxICsy
OSwxNiBAQAogCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91
dHlwZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RyZWFtaW5nVGV4
dERlY29kZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBTdHJlYW1pbmdU
ZXh0RGVjb2Rlcihjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICAgICAgflN0cmVhbWluZ1RleHRE
ZWNvZGVyKCk7CisgICAgICAgIHN0YXRpYyBTdHJlYW1pbmdUZXh0RGVjb2RlciogY3JlYXRlKGNv
bnN0IFRleHRFbmNvZGluZyYpOworICAgICAgICB2aXJ0dWFsIH5TdHJlYW1pbmdUZXh0RGVjb2Rl
cigpOwogCi0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdG9Vbmljb2RlKGNvbnN0IGNoYXIqIGNo
cywgaW50IGxlbiwgYm9vbCBmbHVzaCA9IGZhbHNlKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgY29udmVydChjb25zdCBjaGFyKiBjaHMsIGludCBsZW4sIGJvb2wg
Zmx1c2gpCi0gICAgICAgICAgICB7IHJldHVybiBjb252ZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGNocyksIGxlbiwgZmx1c2gpOyB9Ci0gICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgY29udmVydChjb25zdCB1bnNpZ25lZCBjaGFyKiBjaHMsIGludCBsZW4sIGJvb2wg
Zmx1c2gpOwotCi0gICAgICAgIGJvb2wgY29udmVydElmQVNDSUkoY29uc3QgdW5zaWduZWQgY2hh
ciosIGludCBsZW4sIERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmlu
ZyBjb252ZXJ0VVRGMTYoY29uc3QgdW5zaWduZWQgY2hhciosIGludCBsZW4pOwotICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIGNvbnZlcnRVc2luZ0lDVShjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50
IGxlbiwgYm9vbCBmbHVzaCk7Ci0KLSAgICAgICAgdm9pZCBjcmVhdGVJQ1VDb252ZXJ0ZXIoKTsK
LQotICAgICAgICBzdGF0aWMgdm9pZCBhcHBlbmRPbWl0dGluZ0JPTShEZXByZWNhdGVkU3RyaW5n
JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBieXRlQ291bnQpOwotCi0gICAgICAgIFRl
eHRFbmNvZGluZyBtX2VuY29kaW5nOwotICAgICAgICBib29sIG1fbGl0dGxlRW5kaWFuOwotICAg
ICAgICBib29sIG1fYXRTdGFydDsKLSAgICAgICAgYm9vbCBtX2Vycm9yOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgbV9udW1CdWZmZXJlZEJ5dGVzOwotICAgICAgICB1bnNpZ25lZCBjaGFy
IG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0aGFuIGFueSBzaW5nbGUgbXVsdGktYnl0
ZSBjaGFyYWN0ZXIKLSAgICAgICAgCi0gICAgICAgIC8vIElDVSBkZWNvZGluZy4KLSAgICAgICAg
VUNvbnZlcnRlciogbV9jb252ZXJ0ZXJJQ1U7CisgICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZyB0b1VuaWNvZGUoY29uc3QgY2hhciogY2hzLCBpbnQgbGVuLCBib29sIGZsdXNoID0gZmFs
c2UpID0gMDsKKyAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkQ1N0cmluZyBmcm9tVW5pY29kZShj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpID0gMDsK
ICAgICB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5jcHAJKHJldmlzaW9uIDE1NDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2RlcklDVS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjQsMTkgKzI1LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlN0cmVhbWluZ1RleHREZWNvZGVyLmgiCisjaW5jbHVkZSAiU3RyZWFt
aW5nVGV4dERlY29kZXJJQ1UuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8dW5pY29kZS91bm9ybS5oPgogCiB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TdHJlYW1pbmdUZXh0RGVjb2Rlcjo6U3RyZWFtaW5nVGV4dERlY29kZXIoY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK1N0cmVhbWluZ1RleHREZWNvZGVySUNVOjpTdHJl
YW1pbmdUZXh0RGVjb2RlcklDVShjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogICAgIDog
bV9lbmNvZGluZyhlbmNvZGluZykKICAgICAsIG1fbGl0dGxlRW5kaWFuKGVuY29kaW5nLmZsYWdz
KCkgJiBMaXR0bGVFbmRpYW4pCiAgICAgLCBtX2F0U3RhcnQodHJ1ZSkKLSAgICAsIG1fZXJyb3Io
ZmFsc2UpCiAgICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKICAgICAsIG1fY29udmVydGVySUNV
KDApCiB7CkBAIC00OCwxNyArNDksMzEgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBDb252ZXJzaW9u
QnVmZmVyU2l6ZQogc3RhdGljIFVDb252ZXJ0ZXIqIGNhY2hlZENvbnZlcnRlcklDVTsKIHN0YXRp
YyBUZXh0RW5jb2RpbmdJRCBjYWNoZWRDb252ZXJ0ZXJFbmNvZGluZyA9IEludmFsaWRFbmNvZGlu
ZzsKIAotU3RyZWFtaW5nVGV4dERlY29kZXI6On5TdHJlYW1pbmdUZXh0RGVjb2RlcigpCitTdHJl
YW1pbmdUZXh0RGVjb2RlcklDVTo6flN0cmVhbWluZ1RleHREZWNvZGVySUNVKCkKK3sKKyAgICBy
ZWxlYXNlSUNVQ29udmVydGVyKCk7Cit9CisKK3ZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXJJQ1U6
OnJlbGVhc2VJQ1VDb252ZXJ0ZXIoKQogewogICAgIGlmIChtX2NvbnZlcnRlcklDVSkgewogICAg
ICAgICBpZiAoY2FjaGVkQ29udmVydGVySUNVICE9IDApCiAgICAgICAgICAgICB1Y252X2Nsb3Nl
KGNhY2hlZENvbnZlcnRlcklDVSk7CiAgICAgICAgIGNhY2hlZENvbnZlcnRlcklDVSA9IG1fY29u
dmVydGVySUNVOwogICAgICAgICBjYWNoZWRDb252ZXJ0ZXJFbmNvZGluZyA9IG1fZW5jb2Rpbmcu
ZW5jb2RpbmdJRCgpOworICAgICAgICBtX2NvbnZlcnRlcklDVSA9IDA7CiAgICAgfQogfQogCi1E
ZXByZWNhdGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVyOjpjb252ZXJ0VVRGMTYoY29uc3Qg
dW5zaWduZWQgY2hhciogcywgaW50IGxlbmd0aCkKK2Jvb2wgU3RyZWFtaW5nVGV4dERlY29kZXJJ
Q1U6OnRleHRFbmNvZGluZ1N1cHBvcnRlZCgpCit7CisgICAgaWYgKCFtX2NvbnZlcnRlcklDVSkK
KyAgICAgICAgY3JlYXRlSUNVQ29udmVydGVyKCk7CisgICAgCisgICAgcmV0dXJuIG1fY29udmVy
dGVySUNVOworfQorCitEZXByZWNhdGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVySUNVOjpj
b252ZXJ0VVRGMTYoY29uc3QgdW5zaWduZWQgY2hhciogcywgaW50IGxlbmd0aCkKIHsKICAgICBB
U1NFUlQobV9udW1CdWZmZXJlZEJ5dGVzID09IDAgfHwgbV9udW1CdWZmZXJlZEJ5dGVzID09IDEp
OwogCkBAIC0xMTcsNyArMTMyLDcgQEAgRGVwcmVjYXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0RGVj
b2Rlcjo6YwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgU3RyZWFtaW5nVGV4dERlY29k
ZXI6OmNvbnZlcnRJZkFTQ0lJKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMsIGludCBsZW5ndGgsIERl
cHJlY2F0ZWRTdHJpbmcmIHN0cikKK2Jvb2wgU3RyZWFtaW5nVGV4dERlY29kZXJJQ1U6OmNvbnZl
cnRJZkFTQ0lJKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMsIGludCBsZW5ndGgsIERlcHJlY2F0ZWRT
dHJpbmcmIHN0cikKIHsKICAgICBBU1NFUlQobV9udW1CdWZmZXJlZEJ5dGVzID09IDAgfHwgbV9u
dW1CdWZmZXJlZEJ5dGVzID09IDEpOwogCkBAIC0xNDYsMTcgKzE2MSw5IEBAIGJvb2wgU3RyZWFt
aW5nVGV4dERlY29kZXI6OmNvbnZlcnRJZkFTQ0kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGlubGluZSBUZXh0RW5jb2RpbmcgZWZmZWN0aXZlRW5jb2RpbmcoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKLXsKLSAgICBUZXh0RW5jb2RpbmdJRCBpZCA9IGVuY29kaW5nLmVuY29k
aW5nSUQoKTsKLSAgICBpZiAoaWQgPT0gTGF0aW4xRW5jb2RpbmcgfHwgaWQgPT0gQVNDSUlFbmNv
ZGluZykKLSAgICAgICAgaWQgPSBXaW5MYXRpbjFFbmNvZGluZzsKLSAgICByZXR1cm4gVGV4dEVu
Y29kaW5nKGlkLCBlbmNvZGluZy5mbGFncygpKTsKLX0KLQotdm9pZCBTdHJlYW1pbmdUZXh0RGVj
b2Rlcjo6Y3JlYXRlSUNVQ29udmVydGVyKCkKK3ZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXJJQ1U6
OmNyZWF0ZUlDVUNvbnZlcnRlcigpCiB7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gZWZm
ZWN0aXZlRW5jb2RpbmcobV9lbmNvZGluZyk7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0g
bV9lbmNvZGluZy5lZmZlY3RpdmVFbmNvZGluZygpOwogICAgIGNvbnN0IGNoYXIqIGVuY29kaW5n
TmFtZSA9IGVuY29kaW5nLm5hbWUoKTsKIAogICAgIGJvb2wgY2FjaGVkRW5jb2RpbmdFcXVhbCA9
IGNhY2hlZENvbnZlcnRlckVuY29kaW5nID09IGVuY29kaW5nLmVuY29kaW5nSUQoKTsKQEAgLTE2
NSwyMiArMTcyLDIwIEBAIHZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXI6OmNyZWF0ZUlDVUNvbnYK
ICAgICBpZiAoY2FjaGVkRW5jb2RpbmdFcXVhbCAmJiBjYWNoZWRDb252ZXJ0ZXJJQ1UpIHsKICAg
ICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252ZXJ0ZXJJQ1U7CiAgICAgICAgIGNhY2hl
ZENvbnZlcnRlcklDVSA9IDA7Ci0gICAgfSBlbHNlIHsgICAgCisgICAgfSBlbHNlIHsKICAgICAg
ICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgIEFTU0VSVCghbV9jb252
ZXJ0ZXJJQ1UpOwogICAgICAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3BlbihlbmNvZGluZ05h
bWUsICZlcnIpOwogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgaWYgKGVyciA9PSBVX0FNQklH
VU9VU19BTElBU19XQVJOSU5HKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJJQ1UgYW1iaWd1b3Vz
IGFsaWFzIHdhcm5pbmcgZm9yIGVuY29kaW5nOiAlcyIsIGVuY29kaW5nTmFtZSk7Ci0gICAgICAg
IGlmICghbV9jb252ZXJ0ZXJJQ1UpCi0gICAgICAgICAgICBMT0dfRVJST1IoInRoZSBJQ1UgQ29u
dmVydGVyIHdvbid0IGNvbnZlcnQgZnJvbSB0ZXh0IGVuY29kaW5nIDB4JVgsIGVycm9yICVkIiwg
ZW5jb2RpbmcuZW5jb2RpbmdJRCgpLCBlcnIpOwogI2VuZGlmCiAgICAgfQogfQogCiAvLyBXZSBz
dHJpcCBCT00gY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgY2FuIHNob3cgdXAgYm90aCBhdCB0aGUg
c3RhcnQgb2YgY29udGVudAogLy8gYW5kIGluc2lkZSBjb250ZW50LCBhbmQgd2UgbmV2ZXIgd2Fu
dCB0aGVtIHRvIGVuZCB1cCBpbiB0aGUgZGVjb2RlZCB0ZXh0Lgotdm9pZCBTdHJlYW1pbmdUZXh0
RGVjb2Rlcjo6YXBwZW5kT21pdHRpbmdCT00oRGVwcmVjYXRlZFN0cmluZyYgcywgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBieXRlQ291bnQpCit2b2lkIFN0cmVhbWluZ1RleHREZWNvZGVy
SUNVOjphcHBlbmRPbWl0dGluZ0JPTShEZXByZWNhdGVkU3RyaW5nJiBzLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGJ5dGVDb3VudCkKIHsKICAgICBBU1NFUlQoYnl0ZUNvdW50ICUgc2l6
ZW9mKFVDaGFyKSA9PSAwKTsKICAgICBpbnQgc3RhcnQgPSAwOwpAQCAtMTk2LDcgKzIwMSw3IEBA
IHZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXI6OmFwcGVuZE9taXR0aW4KICAgICAgICAgcy5hcHBl
bmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KCZjaGFyYWN0ZXJzW3N0
YXJ0XSksIGNoYXJhY3RlckNvdW50IC0gc3RhcnQpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIFN0
cmVhbWluZ1RleHREZWNvZGVyOjpjb252ZXJ0VXNpbmdJQ1UoY29uc3QgdW5zaWduZWQgY2hhciog
Y2hzLCBpbnQgbGVuLCBib29sIGZsdXNoKQorRGVwcmVjYXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0
RGVjb2RlcklDVTo6Y29udmVydFVzaW5nSUNVKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNocywgaW50
IGxlbiwgYm9vbCBmbHVzaCkKIHsKICAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNz
ZWQtaW4gZW5jb2RpbmcuCiAgICAgaWYgKCFtX2NvbnZlcnRlcklDVSkgewpAQCAtMjM4LDcgKzI0
Myw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgU3RyZWFtaW5nVGV4dERlY29kZXI6OmMKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1EZXByZWNhdGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVyOjpj
b252ZXJ0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNocywgaW50IGxlbiwgYm9vbCBmbHVzaCkKK0Rl
cHJlY2F0ZWRTdHJpbmcgU3RyZWFtaW5nVGV4dERlY29kZXJJQ1U6OmNvbnZlcnQoY29uc3QgdW5z
aWduZWQgY2hhciogY2hzLCBpbnQgbGVuLCBib29sIGZsdXNoKQogewogICAgIHN3aXRjaCAobV9l
bmNvZGluZy5lbmNvZGluZ0lEKCkpIHsKICAgICAgICAgY2FzZSBVVEYxNkVuY29kaW5nOgpAQCAt
Mjg0LDExICsyODksMTEgQEAgRGVwcmVjYXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0RGVjb2Rlcjo6
YwogI2VuZGlmCiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgU3RyZWFtaW5nVGV4dERlY29kZXI6OnRv
VW5pY29kZShjb25zdCBjaGFyKiBjaHMsIGludCBsZW4sIGJvb2wgZmx1c2gpCitEZXByZWNhdGVk
U3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVySUNVOjp0b1VuaWNvZGUoY29uc3QgY2hhciogY2hz
LCBpbnQgbGVuLCBib29sIGZsdXNoKQogewogICAgIEFTU0VSVF9BUkcobGVuLCBsZW4gPj0gMCk7
CiAgICAgCi0gICAgaWYgKG1fZXJyb3IgfHwgIWNocykKKyAgICBpZiAoIWNocykKICAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgIGlmIChsZW4gPD0gMCAmJiAhZmx1c2gp
CkBAIC0zMDksMTUgKzMxNCwyNCBAQCBEZXByZWNhdGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNv
ZGVyOjp0CiAgICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVm
MSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CiAgICAgaW50IEJPTUxl
bmd0aCA9IDA7CiAgICAgaWYgKGMxID09IDB4RkYgJiYgYzIgPT0gMHhGRSkgewotICAgICAgICBt
X2VuY29kaW5nID0gVGV4dEVuY29kaW5nKFVURjE2RW5jb2RpbmcsIExpdHRsZUVuZGlhbik7Ci0g
ICAgICAgIG1fbGl0dGxlRW5kaWFuID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZW5jb2RpbmcgIT0g
VGV4dEVuY29kaW5nKFVURjE2RW5jb2RpbmcsIExpdHRsZUVuZGlhbikpIHsKKyAgICAgICAgICAg
IHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKTsKKyAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5j
b2RpbmcoVVRGMTZFbmNvZGluZywgTGl0dGxlRW5kaWFuKTsKKyAgICAgICAgICAgIG1fbGl0dGxl
RW5kaWFuID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBCT01MZW5ndGggPSAyOwogICAgIH0g
ZWxzZSBpZiAoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKSB7Ci0gICAgICAgIG1fZW5jb2Rpbmcg
PSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNvZGluZywgQmlnRW5kaWFuKTsKLSAgICAgICAgbV9saXR0
bGVFbmRpYW4gPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZW5jb2RpbmcgIT0gVGV4dEVuY29kaW5n
KFVURjE2RW5jb2RpbmcsIEJpZ0VuZGlhbikpIHsKKyAgICAgICAgICAgIHJlbGVhc2VJQ1VDb252
ZXJ0ZXIoKTsKKyAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNv
ZGluZywgQmlnRW5kaWFuKTsKKyAgICAgICAgICAgIG1fbGl0dGxlRW5kaWFuID0gZmFsc2U7Cisg
ICAgICAgIH0KICAgICAgICAgQk9NTGVuZ3RoID0gMjsKICAgICB9IGVsc2UgaWYgKGMxID09IDB4
RUYgJiYgYzIgPT0gMHhCQiAmJiBjMyA9PSAweEJGKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBU
ZXh0RW5jb2RpbmcoVVRGOEVuY29kaW5nKTsKKyAgICAgICAgaWYgKG1fZW5jb2RpbmcgIT0gVGV4
dEVuY29kaW5nKFVURjhFbmNvZGluZykpIHsKKyAgICAgICAgICAgIHJlbGVhc2VJQ1VDb252ZXJ0
ZXIoKTsKKyAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoVVRGOEVuY29kaW5n
KTsKKyAgICAgICAgfQogICAgICAgICBCT01MZW5ndGggPSAzOwogICAgIH0KIApAQCAtMzQ5LDQg
KzM2Myw3NiBAQCBEZXByZWNhdGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVyOjp0CiAgICAg
cmV0dXJuICIiOwogfQogICAgIAorRGVwcmVjYXRlZENTdHJpbmcgU3RyZWFtaW5nVGV4dERlY29k
ZXJJQ1U6OmZyb21Vbmljb2RlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnFjcywgYm9vbCBhbGxv
d0VudGl0aWVzKQoreworICAgIFRleHRFbmNvZGluZ0lEIGVuY29kaW5nID0gbV9lbmNvZGluZy5l
ZmZlY3RpdmVFbmNvZGluZygpLmVuY29kaW5nSUQoKTsKKworICAgIGlmIChlbmNvZGluZyA9PSBX
aW5MYXRpbjFFbmNvZGluZyAmJiBxY3MuaXNBbGxMYXRpbjEoKSkKKyAgICAgICAgcmV0dXJuIHFj
cy5sYXRpbjEoKTsKKworICAgIGlmICgoZW5jb2RpbmcgPT0gV2luTGF0aW4xRW5jb2RpbmcgfHwg
ZW5jb2RpbmcgPT0gVVRGOEVuY29kaW5nIHx8IGVuY29kaW5nID09IEFTQ0lJRW5jb2RpbmcpIAor
ICAgICAgICAmJiBxY3MuaXNBbGxBU0NJSSgpKQorICAgICAgICByZXR1cm4gcWNzLmFzY2lpKCk7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNlZSBpZiB0aGVyZSBpcyAiZm9yY2UgQVNDSUkg
cmFuZ2UiIG1vZGUgaW4gSUNVOworICAgIC8vIHVudGlsIHRoZW4sIHdlIGNoYW5nZSB0aGUgYmFj
a3NsYXNoIGludG8gYSB5ZW4gc2lnbi4KKyAgICAvLyBFbmNvZGluZyB3aWxsIGNoYW5nZSB0aGUg
eWVuIHNpZ24gYmFjayBpbnRvIGEgYmFja3NsYXNoLgorICAgIERlcHJlY2F0ZWRTdHJpbmcgY29w
eSA9IHFjczsKKyAgICBjb3B5LnJlcGxhY2UoJ1xcJywgbV9lbmNvZGluZy5iYWNrc2xhc2hBc0N1
cnJlbmN5U3ltYm9sKCkpOworCisgICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKKyAgICAgICAgY3Jl
YXRlSUNVQ29udmVydGVyKCk7CisgICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKKyAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRDU3RyaW5nKCk7CisKKyAgICAvLyBGSVhNRTogd2hlbiBEZXByZWNhdGVk
U3RyaW5nIGJ1ZmZlciBpcyBsYXRpbjEsIGl0IHdvdWxkIGJlIG5pY2UgdG8KKyAgICAvLyBjb252
ZXJ0IGZyb20gdGhhdCB3L28gaGF2aW5nIHRvIGFsbG9jYXRlIGEgdW5pY29kZSBidWZmZXIKKwor
ICAgIGNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKKyAgICBjb25zdCBVQ2hhciog
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGNvcHkudW5pY29kZSgpKTsK
KyAgICBjb25zdCBVQ2hhciogc291cmNlTGltaXQgPSBzb3VyY2UgKyBjb3B5Lmxlbmd0aCgpOwor
CisgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CisgICAgRGVwcmVjYXRlZFN0cmlu
ZyBub3JtYWxpemVkU3RyaW5nOworICAgIGlmIChVTk9STV9ZRVMgIT0gdW5vcm1fcXVpY2tDaGVj
ayhzb3VyY2UsIGNvcHkubGVuZ3RoKCksIFVOT1JNX05GQywgJmVycikpIHsKKyAgICAgICAgbm9y
bWFsaXplZFN0cmluZy50cnVuY2F0ZShjb3B5Lmxlbmd0aCgpKTsgLy8gbm9ybWFsaXphdGlvbiB0
byBORkMgcmFyZWx5IGluY3JlYXNlcyB0aGUgbGVuZ3RoLCBzbyB0aGlzIGZpcnN0IGF0dGVtcHQg
d2lsbCB1c3VhbGx5IHN1Y2NlZWQKKyAgICAgICAgCisgICAgICAgIGludDMyX3Qgbm9ybWFsaXpl
ZExlbmd0aCA9IHVub3JtX25vcm1hbGl6ZShzb3VyY2UsIGNvcHkubGVuZ3RoKCksIFVOT1JNX05G
QywgMCwgcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGNvbnN0X2Nhc3Q8RGVwcmVjYXRlZENoYXIq
Pihub3JtYWxpemVkU3RyaW5nLnVuaWNvZGUoKSkpLCBjb3B5Lmxlbmd0aCgpLCAmZXJyKTsKKyAg
ICAgICAgaWYgKGVyciA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikgeworICAgICAgICAgICAg
ZXJyID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgbm9ybWFsaXplZFN0cmluZy50cnVuY2F0
ZShub3JtYWxpemVkTGVuZ3RoKTsKKyAgICAgICAgICAgIG5vcm1hbGl6ZWRMZW5ndGggPSB1bm9y
bV9ub3JtYWxpemUoc291cmNlLCBjb3B5Lmxlbmd0aCgpLCBVTk9STV9ORkMsIDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIqPihjb25zdF9jYXN0PERlcHJlY2F0ZWRDaGFyKj4obm9ybWFsaXplZFN0
cmluZy51bmljb2RlKCkpKSwgbm9ybWFsaXplZExlbmd0aCwgJmVycik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihu
b3JtYWxpemVkU3RyaW5nLnVuaWNvZGUoKSk7CisgICAgICAgIHNvdXJjZUxpbWl0ID0gc291cmNl
ICsgbm9ybWFsaXplZExlbmd0aDsKKyAgICB9CisKKyAgICBEZXByZWNhdGVkQ1N0cmluZyByZXN1
bHQoMSk7IC8vIGZvciB0cmFpbGluZyB6ZXJvCisKKyAgICBpZiAoYWxsb3dFbnRpdGllcykKKyAg
ICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOworICAgIGVs
c2UgeworICAgICAgICB1Y252X3NldFN1YnN0Q2hhcnMobV9jb252ZXJ0ZXJJQ1UsICI/IiwgMSwg
JmVycik7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgVUNO
Vl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVycik7CisgICAgfQorCisg
ICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKKyAgICBpZiAoVV9GQUlMVVJFKGVycikpCisgICAg
ICAgIHJldHVybiBEZXByZWNhdGVkQ1N0cmluZygpOworCisgICAgZG8geworICAgICAgICBjaGFy
KiB0YXJnZXQgPSBidWZmZXI7CisgICAgICAgIGNoYXIqIHRhcmdldExpbWl0ID0gdGFyZ2V0ICsg
Q29udmVyc2lvbkJ1ZmZlclNpemU7CisgICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsKKyAgICAg
ICAgdWNudl9mcm9tVW5pY29kZShtX2NvbnZlcnRlcklDVSwgJnRhcmdldCwgdGFyZ2V0TGltaXQs
ICZzb3VyY2UsIHNvdXJjZUxpbWl0LCAwLCB0cnVlLCAgJmVycik7CisgICAgICAgIGludCBjb3Vu
dCA9IHRhcmdldCAtIGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyW2NvdW50XSA9IDA7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKKyAgICB9IHdoaWxlIChlcnIgPT0gVV9CVUZGRVJfT1ZF
UkZMT1dfRVJST1IpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1N0cmVhbWluZ1RleHREZWNvZGVySUNV
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2RlcklD
VS5oCShyZXZpc2lvbiAxNTQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU3RyZWFtaW5nVGV4dERl
Y29kZXJJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3Au
Y29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyMiArMjQsMjQgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU3RyZWFtaW5nVGV4dERlY29kZXJfSAot
I2RlZmluZSBTdHJlYW1pbmdUZXh0RGVjb2Rlcl9ICisjaWZuZGVmIFN0cmVhbWluZ1RleHREZWNv
ZGVySUNVX0gKKyNkZWZpbmUgU3RyZWFtaW5nVGV4dERlY29kZXJJQ1VfSAogCi0jaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSAi
U3RyZWFtaW5nVGV4dERlY29kZXIuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KICNpbmNs
dWRlIDx1bmljb2RlL3V0eXBlcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBTdHJlYW1pbmdUZXh0RGVjb2RlciA6IE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBTdHJlYW1p
bmdUZXh0RGVjb2RlcklDVSA6IHB1YmxpYyBTdHJlYW1pbmdUZXh0RGVjb2RlciB7CiAgICAgcHVi
bGljOgotICAgICAgICBTdHJlYW1pbmdUZXh0RGVjb2Rlcihjb25zdCBUZXh0RW5jb2RpbmcmKTsK
LSAgICAgICAgflN0cmVhbWluZ1RleHREZWNvZGVyKCk7CisgICAgICAgIFN0cmVhbWluZ1RleHRE
ZWNvZGVySUNVKGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgICAgICB2aXJ0dWFsIH5TdHJlYW1p
bmdUZXh0RGVjb2RlcklDVSgpOwogCi0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdG9Vbmljb2Rl
KGNvbnN0IGNoYXIqIGNocywgaW50IGxlbiwgYm9vbCBmbHVzaCA9IGZhbHNlKTsKKyAgICAgICAg
Ym9vbCB0ZXh0RW5jb2RpbmdTdXBwb3J0ZWQoKTsKKworICAgICAgICB2aXJ0dWFsIERlcHJlY2F0
ZWRTdHJpbmcgdG9Vbmljb2RlKGNvbnN0IGNoYXIqIGNocywgaW50IGxlbiwgYm9vbCBmbHVzaCA9
IGZhbHNlKTsKKyAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkQ1N0cmluZyBmcm9tVW5pY29kZShj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiwgYm9vbCBhbGxvd0VudGl0aWVzID0gZmFsc2UpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjb252ZXJ0KGNvbnN0IGNoYXIq
IGNocywgaW50IGxlbiwgYm9vbCBmbHVzaCkKQEAgLTUwLDIxICs1MywyMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY29udmVydFVzaW5nSUNVKGNvbnN0
IHVuc2lnbmVkIGNoYXIqLCBpbnQgbGVuLCBib29sIGZsdXNoKTsKIAogICAgICAgICB2b2lkIGNy
ZWF0ZUlDVUNvbnZlcnRlcigpOworICAgICAgICB2b2lkIHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKTsK
IAogICAgICAgICBzdGF0aWMgdm9pZCBhcHBlbmRPbWl0dGluZ0JPTShEZXByZWNhdGVkU3RyaW5n
JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBieXRlQ291bnQpOwogCiAgICAgICAgIFRl
eHRFbmNvZGluZyBtX2VuY29kaW5nOwogICAgICAgICBib29sIG1fbGl0dGxlRW5kaWFuOwogICAg
ICAgICBib29sIG1fYXRTdGFydDsKLSAgICAgICAgYm9vbCBtX2Vycm9yOwogICAgICAgICAKICAg
ICAgICAgdW5zaWduZWQgbV9udW1CdWZmZXJlZEJ5dGVzOwogICAgICAgICB1bnNpZ25lZCBjaGFy
IG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0aGFuIGFueSBzaW5nbGUgbXVsdGktYnl0
ZSBjaGFyYWN0ZXIKICAgICAgICAgCi0gICAgICAgIC8vIElDVSBkZWNvZGluZy4KICAgICAgICAg
VUNvbnZlcnRlciogbV9jb252ZXJ0ZXJJQ1U7CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIFN0cmVhbWluZ1RleHREZWNvZGVyX0gKKyNlbmRpZiAvLyBT
dHJlYW1pbmdUZXh0RGVjb2RlcklDVV9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNv
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmcuY3Bw
CShyZXZpc2lvbiAxNTQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAKICNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKIAogI2luY2x1ZGUgIkNoYXJzZXROYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlICJTdHJlYW1pbmdUZXh0RGVj
b2Rlci5oIgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSwxMCArNDAsMTkgQEAgVGV4dEVu
Y29kaW5nOjpUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogbgogICAgICAgICBtX2VuY29kaW5nSUQg
PSBVVEY4RW5jb2Rpbmc7CiB9CiAKK1RleHRFbmNvZGluZyBUZXh0RW5jb2Rpbmc6OmVmZmVjdGl2
ZUVuY29kaW5nKCkgY29uc3QKK3sKKyAgICBUZXh0RW5jb2RpbmdJRCBpZCA9IG1fZW5jb2RpbmdJ
RDsKKyAgICBpZiAoaWQgPT0gTGF0aW4xRW5jb2RpbmcgfHwgaWQgPT0gQVNDSUlFbmNvZGluZykK
KyAgICAgICAgaWQgPSBXaW5MYXRpbjFFbmNvZGluZzsKKyAgICByZXR1cm4gVGV4dEVuY29kaW5n
KGlkLCBtX2ZsYWdzKTsKK30KKwogY29uc3QgY2hhciogVGV4dEVuY29kaW5nOjpuYW1lKCkgY29u
c3QKIHsKICAgICByZXR1cm4gY2hhcnNldE5hbWVGcm9tVGV4dEVuY29kaW5nSUQobV9lbmNvZGlu
Z0lEKTsKIH0KKwogVUNoYXIgVGV4dEVuY29kaW5nOjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9s
KCkgY29uc3QKIHsKICAgICBpZiAobV9mbGFncyAmIEJhY2tzbGFzaElzWWVuKQpAQCAtNTUsMTMy
ICs2MywxNCBAQCBVQ2hhciBUZXh0RW5jb2Rpbmc6OmJhY2tzbGFzaEFzQ3VycmVuY3lTCiAKIERl
cHJlY2F0ZWRTdHJpbmcgVGV4dEVuY29kaW5nOjp0b1VuaWNvZGUoY29uc3QgY2hhciogY2hzLCBp
bnQgbGVuKSBjb25zdAogewotICAgIHJldHVybiBTdHJlYW1pbmdUZXh0RGVjb2RlcigqdGhpcyku
dG9Vbmljb2RlKGNocywgbGVuLCB0cnVlKTsKLX0KLQotLy8gV2UnZCBsaWtlIHRvIHVzZSBJQ1Ug
Zm9yIHRoaXMgb24gT1MgWCBhcyB3ZWxsIGV2ZW50dWFsbHksIGJ1dCB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZQotLy8gaXQgY292ZXJzIGFsbCB0aGUgZW5jb2RpbmdzIHRoYXQgd2UgbmVlZAotI2lmbmRl
ZiBfX0FQUExFX18KLQotc3RhdGljIFVDb252ZXJ0ZXIqIGNhY2hlZENvbnZlcnRlcjsKLXN0YXRp
YyBUZXh0RW5jb2RpbmdJRCBjYWNoZWRDb252ZXJ0ZXJFbmNvZGluZyA9IEludmFsaWRFbmNvZGlu
ZzsKLQotc3RhdGljIGNvbnN0IGludCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OwotCi1z
dGF0aWMgaW5saW5lIFVDb252ZXJ0ZXIqIGdldENvbnZlcnRlcihUZXh0RW5jb2RpbmdJRCBlbmNv
ZGluZywgVUVycm9yQ29kZSogc3RhdHVzKQotewotICAgIGlmIChjYWNoZWRDb252ZXJ0ZXIgJiYg
ZW5jb2RpbmcgPT0gY2FjaGVkQ29udmVydGVyRW5jb2RpbmcpIHsKLSAgICAgICAgVUNvbnZlcnRl
ciogY29udiA9IGNhY2hlZENvbnZlcnRlcjsKLSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gMDsK
LSAgICAgICAgcmV0dXJuIGNvbnY7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogZW5jb2RpbmdO
YW1lID0gY2hhcnNldE5hbWVGcm9tVGV4dEVuY29kaW5nSUQoZW5jb2RpbmcpOwotICAgIFVFcnJv
ckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgIFVDb252ZXJ0ZXIqIGNvbnYgPSB1Y252X29w
ZW4oZW5jb2RpbmdOYW1lLCAmZXJyKTsKLSAgICBpZiAoZXJyID09IFVfQU1CSUdVT1VTX0FMSUFT
X1dBUk5JTkcpCi0gICAgICAgIExPR19FUlJPUigiSUNVIGFtYmlndW91cyBhbGlhcyB3YXJuaW5n
IGZvciBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOwotCi0gICAgaWYgKCFjb252KSB7Ci0g
ICAgICAgIExPR19FUlJPUigidGhlIElDVSBDb252ZXJ0ZXIgd29uJ3QgY29udmVydCB0byB0ZXh0
IGVuY29kaW5nIDB4JVgsIGVycm9yICVkIiwgZW5jb2RpbmcsIGVycik7Ci0gICAgICAgICpzdGF0
dXMgPSBlcnI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBjb252Owot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVDb252ZXJ0ZXIoVGV4dEVuY29kaW5nSUQgaWQs
IFVDb252ZXJ0ZXIqIGNvbnYpCi17Ci0gICAgaWYgKGNvbnYpIHsKLSAgICAgICAgaWYgKGNhY2hl
ZENvbnZlcnRlcikKLSAgICAgICAgICAgIHVjbnZfY2xvc2UoY2FjaGVkQ29udmVydGVyKTsKLSAg
ICAgICAgY2FjaGVkQ29udmVydGVyID0gY29udjsKLSAgICAgICAgY2FjaGVkQ29udmVydGVyRW5j
b2RpbmcgPSBpZDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dEVuY29kaW5nSUQgZWZm
ZWN0aXZlRW5jb2RpbmcoVGV4dEVuY29kaW5nSUQgZW5jb2RpbmcpCi17Ci0gICAgaWYgKGVuY29k
aW5nID09IExhdGluMUVuY29kaW5nIHx8IGVuY29kaW5nID09IEFTQ0lJRW5jb2RpbmcpCi0gICAg
ICAgIHJldHVybiBXaW5MYXRpbjFFbmNvZGluZzsKLSAgICByZXR1cm4gZW5jb2Rpbmc7CisgICAg
T3duUHRyPFN0cmVhbWluZ1RleHREZWNvZGVyPiBkZWNvZGVyKFN0cmVhbWluZ1RleHREZWNvZGVy
OjpjcmVhdGUoKnRoaXMpKTsKKyAgICByZXR1cm4gZGVjb2Rlci0+dG9Vbmljb2RlKGNocywgbGVu
LCB0cnVlKTsKIH0KIAogRGVwcmVjYXRlZENTdHJpbmcgVGV4dEVuY29kaW5nOjpmcm9tVW5pY29k
ZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZxY3MsIGJvb2wgYWxsb3dFbnRpdGllcykgY29uc3QK
IHsKLSAgICBUZXh0RW5jb2RpbmdJRCBlbmNvZGluZyA9IGVmZmVjdGl2ZUVuY29kaW5nKG1fZW5j
b2RpbmdJRCk7Ci0KLSAgICBpZiAoZW5jb2RpbmcgPT0gV2luTGF0aW4xRW5jb2RpbmcgJiYgcWNz
LmlzQWxsTGF0aW4xKCkpCi0gICAgICAgIHJldHVybiBxY3MubGF0aW4xKCk7Ci0KLSAgICBpZiAo
KGVuY29kaW5nID09IFdpbkxhdGluMUVuY29kaW5nIHx8IGVuY29kaW5nID09IFVURjhFbmNvZGlu
ZyB8fCBlbmNvZGluZyA9PSBBU0NJSUVuY29kaW5nKSAKLSAgICAgICAgJiYgcWNzLmlzQWxsQVND
SUkoKSkKLSAgICAgICAgcmV0dXJuIHFjcy5hc2NpaSgpOwotCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBzZWUgaWYgdGhlcmUgaXMgImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGluIElDVTsKLSAg
ICAvLyB1bnRpbCB0aGVuLCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNpZ24u
Ci0gICAgLy8gRW5jb2Rpbmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBhIGJh
Y2tzbGFzaC4KLSAgICBEZXByZWNhdGVkU3RyaW5nIGNvcHkgPSBxY3M7Ci0gICAgY29weS5yZXBs
YWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7Ci0KLSAgICBVRXJyb3JDb2Rl
IGVyciA9IFVfWkVST19FUlJPUjsKLSAgICBVQ29udmVydGVyKiBjb252ID0gZ2V0Q29udmVydGVy
KGVuY29kaW5nLCAmZXJyKTsKLSAgICBpZiAoIWNvbnYgJiYgVV9GQUlMVVJFKGVycikpCi0gICAg
ICAgIHJldHVybiBEZXByZWNhdGVkQ1N0cmluZygpOwotCi0gICAgQVNTRVJUKGNvbnYpOwotCi0g
ICAgLy8gRklYTUU6IHdoZW4gRGVwcmVjYXRlZFN0cmluZyBidWZmZXIgaXMgbGF0aW4xLCBpdCB3
b3VsZCBiZSBuaWNlIHRvCi0gICAgLy8gY29udmVydCBmcm9tIHRoYXQgdy9vIGhhdmluZyB0byBh
bGxvY2F0ZSBhIHVuaWNvZGUgYnVmZmVyCi0KLSAgICBjaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVm
ZmVyU2l6ZV07Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVUNoYXIqPihjb3B5LnVuaWNvZGUoKSk7Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZUxpbWl0
ID0gc291cmNlICsgY29weS5sZW5ndGgoKTsKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgbm9ybWFs
aXplZFN0cmluZzsKLSAgICBpZiAoVU5PUk1fWUVTICE9IHVub3JtX3F1aWNrQ2hlY2soc291cmNl
LCBjb3B5Lmxlbmd0aCgpLCBVTk9STV9ORkMsICZlcnIpKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRT
dHJpbmcudHJ1bmNhdGUoY29weS5sZW5ndGgoKSk7IC8vIG5vcm1hbGl6YXRpb24gdG8gTkZDIHJh
cmVseSBpbmNyZWFzZXMgdGhlIGxlbmd0aCwgc28gdGhpcyBmaXJzdCBhdHRlbXB0IHdpbGwgdXN1
YWxseSBzdWNjZWVkCi0gICAgICAgIAotICAgICAgICBpbnQzMl90IG5vcm1hbGl6ZWRMZW5ndGgg
PSB1bm9ybV9ub3JtYWxpemUoc291cmNlLCBjb3B5Lmxlbmd0aCgpLCBVTk9STV9ORkMsIDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihjb25zdF9jYXN0PERlcHJlY2F0ZWRDaGFyKj4obm9ybWFs
aXplZFN0cmluZy51bmljb2RlKCkpKSwgY29weS5sZW5ndGgoKSwgJmVycik7Ci0gICAgICAgIGlm
IChlcnIgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IFVf
WkVST19FUlJPUjsKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcudHJ1bmNhdGUobm9ybWFs
aXplZExlbmd0aCk7Ci0gICAgICAgICAgICBub3JtYWxpemVkTGVuZ3RoID0gdW5vcm1fbm9ybWFs
aXplKHNvdXJjZSwgY29weS5sZW5ndGgoKSwgVU5PUk1fTkZDLCAwLCByZWludGVycHJldF9jYXN0
PFVDaGFyKj4oY29uc3RfY2FzdDxEZXByZWNhdGVkQ2hhcio+KG5vcm1hbGl6ZWRTdHJpbmcudW5p
Y29kZSgpKSksIG5vcm1hbGl6ZWRMZW5ndGgsICZlcnIpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obm9ybWFsaXpl
ZFN0cmluZy51bmljb2RlKCkpOwotICAgICAgICBzb3VyY2VMaW1pdCA9IHNvdXJjZSArIG5vcm1h
bGl6ZWRMZW5ndGg7Ci0gICAgfQotCi0gICAgRGVwcmVjYXRlZENTdHJpbmcgcmVzdWx0KDEpOyAv
LyBmb3IgdHJhaWxpbmcgemVybwotCi0gICAgaWYgKGFsbG93RW50aXRpZXMpCi0gICAgICAgIHVj
bnZfc2V0RnJvbVVDYWxsQmFjayhjb252LCBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUsIFVD
TlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwotICAgIGVsc2UgewotICAgICAgICB1Y252
X3NldFN1YnN0Q2hhcnMoY29udiwgIj8iLCAxLCAmZXJyKTsKLSAgICAgICAgdWNudl9zZXRGcm9t
VUNhbGxCYWNrKGNvbnYsIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUsIDAsIDAsIDAs
ICZlcnIpOwotICAgIH0KLQotICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKFVf
RkFJTFVSRShlcnIpKQotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZENTdHJpbmcoKTsKLQotICAg
IGRvIHsKLSAgICAgICAgY2hhciogdGFyZ2V0ID0gYnVmZmVyOwotICAgICAgICBjaGFyKiB0YXJn
ZXRMaW1pdCA9IHRhcmdldCArIENvbnZlcnNpb25CdWZmZXJTaXplOwotICAgICAgICBlcnIgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfZnJvbVVuaWNvZGUoY29udiwgJnRhcmdldCwgdGFy
Z2V0TGltaXQsICZzb3VyY2UsIHNvdXJjZUxpbWl0LCAwLCB0cnVlLCAgJmVycik7Ci0gICAgICAg
IGludCBjb3VudCA9IHRhcmdldCAtIGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyW2NvdW50XSA9IDA7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKLSAgICB9IHdoaWxlIChlcnIgPT0gVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1IpOwotCi0gICAgY2FjaGVDb252ZXJ0ZXIoZW5jb2RpbmcsIGNv
bnYpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBPd25QdHI8U3RyZWFtaW5nVGV4dERlY29k
ZXI+IGRlY29kZXIoU3RyZWFtaW5nVGV4dERlY29kZXI6OmNyZWF0ZSgqdGhpcykpOworICAgIHJl
dHVybiBkZWNvZGVyLT5mcm9tVW5pY29kZShxY3MsIGFsbG93RW50aXRpZXMpOwogfQotI2VuZGlm
Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
RW5jb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGluZy5o
CShyZXZpc2lvbiAxNTQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29kaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgU3RyZWFtaW5nVGV4dERlY29kZXI7Ci0KLSNpZmRlZiBfX0FQUExFX18KKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgdHlwZWRlZiBDRlN0cmluZ0VuY29kaW5nIFRleHRFbmNvZGluZ0lE
OwogICAgIAogICAgIGNvbnN0IFRleHRFbmNvZGluZ0lEIEludmFsaWRFbmNvZGluZyA9IGtDRlN0
cmluZ0VuY29kaW5nSW52YWxpZElkOwpAQCAtNzcsNiArNzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgZXhwbGljaXQgVGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqLCBib29sIGVp
Z2h0Qml0T25seSA9IGZhbHNlKTsKIAorICAgICAgICBUZXh0RW5jb2RpbmcgZWZmZWN0aXZlRW5j
b2RpbmcoKSBjb25zdDsKKwogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2VuY29kaW5nSUQgIT0gSW52YWxpZEVuY29kaW5nOyB9CiAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWUoKSBjb25zdDsKICAgICAgICAgYm9vbCB1c2VzVmlzdWFsT3JkZXJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2ZsYWdzICYgVmlzdWFsT3JkZXJpbmc7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1N0cmVhbWluZ1RleHREZWNvZGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9TdHJlYW1pbmdUZXh0RGVjb2Rlck1hYy5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9TdHJlYW1pbmdUZXh0RGVjb2Rlck1hYy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cmVhbWluZ1RleHREZWNvZGVyTWFjLmgiCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBXZSBuZWVkIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGJlY2F1c2UgSUNV
IGRvZXNuJ3Qgc3VwcG9ydCBzb21lIG9mIHRoZSBlbmNvZGluZ3MgdGhhdCB3ZSBuZWVkOgorLy8g
PGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE5NT4uCisK
K1N0cmVhbWluZ1RleHREZWNvZGVyTWFjOjpTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYyhjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKKyAgICAs
IG1fbGl0dGxlRW5kaWFuKGVuY29kaW5nLmZsYWdzKCkgJiBMaXR0bGVFbmRpYW4pCisgICAgLCBt
X2F0U3RhcnQodHJ1ZSkKKyAgICAsIG1fZXJyb3IoZmFsc2UpCisgICAgLCBtX251bUJ1ZmZlcmVk
Qnl0ZXMoMCkKKyAgICAsIG1fY29udmVydGVyVEVDKDApCit7Cit9CisKK3N0YXRpYyBjb25zdCBV
Q2hhciBCT00gPSAweEZFRkY7CitzdGF0aWMgY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJT
aXplID0gMTYzODQ7CisKK3N0YXRpYyBURUNPYmplY3RSZWYgY2FjaGVkQ29udmVydGVyVEVDOwor
c3RhdGljIFRleHRFbmNvZGluZ0lEIGNhY2hlZENvbnZlcnRlckVuY29kaW5nID0gSW52YWxpZEVu
Y29kaW5nOworCitTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYzo6flN0cmVhbWluZ1RleHREZWNvZGVy
TWFjKCkKK3sKKyAgICByZWxlYXNlVEVDQ29udmVydGVyKCk7Cit9CisKK3ZvaWQgU3RyZWFtaW5n
VGV4dERlY29kZXJNYWM6OnJlbGVhc2VURUNDb252ZXJ0ZXIoKQoreworICAgIGlmIChtX2NvbnZl
cnRlclRFQykgeworICAgICAgICBpZiAoY2FjaGVkQ29udmVydGVyVEVDICE9IDApCisgICAgICAg
ICAgICBURUNEaXNwb3NlQ29udmVydGVyKGNhY2hlZENvbnZlcnRlclRFQyk7CisgICAgICAgIGNh
Y2hlZENvbnZlcnRlclRFQyA9IG1fY29udmVydGVyVEVDOworICAgICAgICBjYWNoZWRDb252ZXJ0
ZXJFbmNvZGluZyA9IG1fZW5jb2RpbmcuZW5jb2RpbmdJRCgpOworICAgICAgICBtX2NvbnZlcnRl
clRFQyA9IDA7CisgICAgfQorfQorCitib29sIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjOjp0ZXh0
RW5jb2RpbmdTdXBwb3J0ZWQoKQoreworICAgIGlmIChtX2VuY29kaW5nLmVuY29kaW5nSUQoKSA9
PSBrQ0ZTdHJpbmdFbmNvZGluZ1VURjE2IHx8IAorICAgICAgICBtX2VuY29kaW5nLmVuY29kaW5n
SUQoKSA9PSBrQ0ZTdHJpbmdFbmNvZGluZ1VURjE2QkUgfHwKKyAgICAgICAgbV9lbmNvZGluZy5l
bmNvZGluZ0lEKCkgPT0ga0NGU3RyaW5nRW5jb2RpbmdVVEYxNkxFKQorICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKCFtX2NvbnZlcnRlclRFQykKKyAgICAgICAgY3JlYXRlVEVDQ29u
dmVydGVyKCk7CisgICAgCisgICAgcmV0dXJuIG1fY29udmVydGVyVEVDOworfQorCitEZXByZWNh
dGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjOjpjb252ZXJ0VVRGMTYoY29uc3QgdW5z
aWduZWQgY2hhciogcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9udW1CdWZmZXJlZEJ5
dGVzID09IDAgfHwgbV9udW1CdWZmZXJlZEJ5dGVzID09IDEpOworCisgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogcCA9IHM7CisgICAgc2l6ZV90IGxlbiA9IGxlbmd0aDsKKyAgICAKKyAgICBEZXBy
ZWNhdGVkU3RyaW5nIHJlc3VsdCgiIik7CisgICAgCisgICAgcmVzdWx0LnJlc2VydmUobGVuZ3Ro
IC8gMik7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzICE9IDAgJiYgbGVuICE9IDApIHsK
KyAgICAgICAgQVNTRVJUKG1fbnVtQnVmZmVyZWRCeXRlcyA9PSAxKTsKKyAgICAgICAgVUNoYXIg
YzsKKyAgICAgICAgaWYgKG1fbGl0dGxlRW5kaWFuKQorICAgICAgICAgICAgYyA9IG1fYnVmZmVy
ZWRCeXRlc1swXSB8IChwWzBdIDw8IDgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0g
KG1fYnVmZmVyZWRCeXRlc1swXSA8PCA4KSB8IHBbMF07CisKKyAgICAgICAgaWYgKGMpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8RGVwcmVjYXRlZENoYXIqPigm
YyksIDEpOworCisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7CisgICAgICAgIHAgKz0g
MTsKKyAgICAgICAgbGVuIC09IDE7CisgICAgfQorICAgIAorICAgIHdoaWxlIChsZW4gPiAxKSB7
CisgICAgICAgIFVDaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CisgICAgICAgIGlu
dCBydW5MZW5ndGggPSBtaW4obGVuIC8gMiwgQ29udmVyc2lvbkJ1ZmZlclNpemUpOworICAgICAg
ICBpbnQgYnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKG1fbGl0dGxlRW5kaWFuKSB7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgVUNoYXIgYyA9IHBbMF0gfCAocFsxXSA8PCA4KTsKKyAgICAgICAgICAgICAgICBw
ICs9IDI7CisgICAgICAgICAgICAgICAgaWYgKGMgIT0gQk9NKQorICAgICAgICAgICAgICAgICAg
ICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuTGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBVQ2hhciBjID0gKHBbMF0gPDwgOCkgfCBwWzFdOworICAgICAgICAg
ICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAoYyAhPSBCT00pCisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxEZXByZWNhdGVk
Q2hhcio+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCk7CisgICAgICAgIGxlbiAtPSBydW5MZW5ndGgg
KiAyOworICAgIH0KKyAgICAKKyAgICBpZiAobGVuKSB7CisgICAgICAgIEFTU0VSVChtX251bUJ1
ZmZlcmVkQnl0ZXMgPT0gMCk7CisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDE7CisgICAg
ICAgIG1fYnVmZmVyZWRCeXRlc1swXSA9IHBbMF07CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgU3RyZWFtaW5nVGV4dERlY29kZXJNYWM6OmNvbnZlcnRJZkFTQ0lJ
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMsIGludCBsZW5ndGgsIERlcHJlY2F0ZWRTdHJpbmcmIHN0
cikKK3sKKyAgICBBU1NFUlQobV9udW1CdWZmZXJlZEJ5dGVzID09IDAgfHwgbV9udW1CdWZmZXJl
ZEJ5dGVzID09IDEpOworCisgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQoIiIpOworICAgIHJl
c3VsdC5yZXNlcnZlKGxlbmd0aCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gczsK
KyAgICBzaXplX3QgbGVuID0gbGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgb3JlZCA9IDA7Cisg
ICAgd2hpbGUgKGxlbikgeworICAgICAgICBVQ2hhciBidWZmZXJbQ29udmVyc2lvbkJ1ZmZlclNp
emVdOworICAgICAgICBpbnQgcnVuTGVuZ3RoID0gbWluKGxlbiwgQ29udmVyc2lvbkJ1ZmZlclNp
emUpOworICAgICAgICBpbnQgYnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBydW5MZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0g
KnArKzsKKyAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJM
ZW5ndGgrK10gPSBjOworICAgICAgICB9CisgICAgICAgIGlmIChvcmVkICYgMHg4MCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9j
YXN0PERlcHJlY2F0ZWRDaGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgbGVu
IC09IHJ1bkxlbmd0aDsKKyAgICB9CisKKyAgICBzdHIgPSByZXN1bHQ7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK09TU3RhdHVzIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjOjpjcmVhdGVURUNDb252
ZXJ0ZXIoKQoreworICAgIGNvbnN0IFRleHRFbmNvZGluZ0lEIGVuY29kaW5nID0gbV9lbmNvZGlu
Zy5lZmZlY3RpdmVFbmNvZGluZygpLmVuY29kaW5nSUQoKTsKKworICAgIGJvb2wgY2FjaGVkRW5j
b2RpbmdFcXVhbCA9IGNhY2hlZENvbnZlcnRlckVuY29kaW5nID09IGVuY29kaW5nOworICAgIGNh
Y2hlZENvbnZlcnRlckVuY29kaW5nID0gSW52YWxpZEVuY29kaW5nOworCisgICAgaWYgKGNhY2hl
ZEVuY29kaW5nRXF1YWwgJiYgY2FjaGVkQ29udmVydGVyVEVDKSB7CisgICAgICAgIG1fY29udmVy
dGVyVEVDID0gY2FjaGVkQ29udmVydGVyVEVDOworICAgICAgICBjYWNoZWRDb252ZXJ0ZXJURUMg
PSAwOworICAgICAgICBURUNDbGVhckNvbnZlcnRlckNvbnRleHRJbmZvKG1fY29udmVydGVyVEVD
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBURUNDcmVhdGVDb252
ZXJ0ZXIoJm1fY29udmVydGVyVEVDLCBlbmNvZGluZywKKyAgICAgICAgICAgIENyZWF0ZVRleHRF
bmNvZGluZyhrVGV4dEVuY29kaW5nVW5pY29kZURlZmF1bHQsIGtUZXh0RW5jb2RpbmdEZWZhdWx0
VmFyaWFudCwga1VuaWNvZGUxNkJpdEZvcm1hdCkpOworICAgICAgICBpZiAoc3RhdHVzKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgICAgICBURUNTZXRCYXNpY09wdGlvbnMobV9j
b252ZXJ0ZXJURUMsIGtVbmljb2RlRm9yY2VBU0NJSVJhbmdlTWFzayk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBub0VycjsKK30KKworLy8gV2Ugc3RyaXAgQk9NIGNoYXJhY3RlcnMgYmVjYXVz
ZSB0aGV5IGNhbiBzaG93IHVwIGJvdGggYXQgdGhlIHN0YXJ0IG9mIGNvbnRlbnQKKy8vIGFuZCBp
bnNpZGUgY29udGVudCwgYW5kIHdlIG5ldmVyIHdhbnQgdGhlbSB0byBlbmQgdXAgaW4gdGhlIGRl
Y29kZWQgdGV4dC4KK3ZvaWQgU3RyZWFtaW5nVGV4dERlY29kZXJNYWM6OmFwcGVuZE9taXR0aW5n
Qk9NKERlcHJlY2F0ZWRTdHJpbmcmIHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgYnl0
ZUNvdW50KQoreworICAgIEFTU0VSVChieXRlQ291bnQgJSBzaXplb2YoVUNoYXIpID09IDApOwor
ICAgIGludCBzdGFydCA9IDA7CisgICAgaW50IGNoYXJhY3RlckNvdW50ID0gYnl0ZUNvdW50IC8g
c2l6ZW9mKFVDaGFyKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSAhPSBjaGFyYWN0ZXJDb3VudDsg
KytpKSB7CisgICAgICAgIGlmIChCT00gPT0gY2hhcmFjdGVyc1tpXSkgeworICAgICAgICAgICAg
aWYgKHN0YXJ0ICE9IGkpCisgICAgICAgICAgICAgICAgcy5hcHBlbmQocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KCZjaGFyYWN0ZXJzW3N0YXJ0XSksIGkgLSBzdGFydCk7
CisgICAgICAgICAgICBzdGFydCA9IGkgKyAxOworICAgICAgICB9CisgICAgfQorICAgIGlmIChz
dGFydCAhPSBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcy5hcHBlbmQocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KCZjaGFyYWN0ZXJzW3N0YXJ0XSksIGNoYXJhY3RlckNv
dW50IC0gc3RhcnQpOworfQorCitPU1N0YXR1cyBTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYzo6Y29u
dmVydE9uZUNodW5rVXNpbmdURUMoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXRCdWZmZXIsIGlu
dCBpbnB1dEJ1ZmZlckxlbmd0aCwgaW50ICZpbnB1dExlbmd0aCwKKyAgICB2b2lkICpvdXRwdXRC
dWZmZXIsIGludCBvdXRwdXRCdWZmZXJMZW5ndGgsIGludCAmb3V0cHV0TGVuZ3RoKQoreworICAg
IE9TU3RhdHVzIHN0YXR1czsKKyAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUmVhZCA9IDA7CisgICAg
dW5zaWduZWQgbG9uZyBieXRlc1dyaXR0ZW4gPSAwOworCisgICAgaWYgKG1fbnVtQnVmZmVyZWRC
eXRlcyAhPSAwKSB7CisgICAgICAgIC8vIEZpbmlzaCBjb252ZXJ0aW5nIGEgcGFydGlhbCBjaGFy
YWN0ZXIgdGhhdCdzIGluIG91ciBidWZmZXIuCisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCwg
ZmlsbCB0aGUgcGFydGlhbCBjaGFyYWN0ZXIgYnVmZmVyIHdpdGggYXMgbWFueSBieXRlcyBhcyBh
cmUgYXZhaWxhYmxlLgorICAgICAgICBBU1NFUlQobV9udW1CdWZmZXJlZEJ5dGVzIDwgc2l6ZW9m
KG1fYnVmZmVyZWRCeXRlcykpOworICAgICAgICBjb25zdCBpbnQgc3BhY2VJbkJ1ZmZlciA9IHNp
emVvZihtX2J1ZmZlcmVkQnl0ZXMpIC0gbV9udW1CdWZmZXJlZEJ5dGVzOworICAgICAgICBjb25z
dCBpbnQgYnl0ZXNUb1B1dEluQnVmZmVyID0gTUlOKHNwYWNlSW5CdWZmZXIsIGlucHV0QnVmZmVy
TGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVzVG9QdXRJbkJ1ZmZlciAhPSAwKTsKKyAgICAg
ICAgbWVtY3B5KG1fYnVmZmVyZWRCeXRlcyArIG1fbnVtQnVmZmVyZWRCeXRlcywgaW5wdXRCdWZm
ZXIsIGJ5dGVzVG9QdXRJbkJ1ZmZlcik7CisKKyAgICAgICAgLy8gTm93LCBkbyBhIGNvbnZlcnNp
b24gb24gdGhlIGJ1ZmZlci4KKyAgICAgICAgc3RhdHVzID0gVEVDQ29udmVydFRleHQobV9jb252
ZXJ0ZXJURUMsIG1fYnVmZmVyZWRCeXRlcywgbV9udW1CdWZmZXJlZEJ5dGVzICsgYnl0ZXNUb1B1
dEluQnVmZmVyLCAmYnl0ZXNSZWFkLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyICo+KG91dHB1dEJ1ZmZlciksIG91dHB1dEJ1ZmZlckxlbmd0aCwgJmJ5dGVzV3Jp
dHRlbik7CisgICAgICAgIEFTU0VSVChieXRlc1JlYWQgPD0gbV9udW1CdWZmZXJlZEJ5dGVzICsg
Ynl0ZXNUb1B1dEluQnVmZmVyKTsKKworICAgICAgICBpZiAoc3RhdHVzID09IGtURUNQYXJ0aWFs
Q2hhckVyciAmJiBieXRlc1JlYWQgPT0gMCkgeworICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBj
YXNlIHdoZXJlIHRoZSBwYXJ0aWFsIGNoYXJhY3RlciB3YXMgbm90IGNvbnZlcnRlZC4KKyAgICAg
ICAgICAgIGlmIChieXRlc1RvUHV0SW5CdWZmZXIgPj0gc3BhY2VJbkJ1ZmZlcikgeworICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiVEVDQ29udmVydFRleHQgZ2F2ZSBhIGtURUNQYXJ0aWFsQ2hh
ckVyciBidXQgcmVhZCBub25lIG9mIHRoZSAldSBieXRlcyBpbiB0aGUgYnVmZmVyIiwgc2l6ZW9m
KG1fYnVmZmVyZWRCeXRlcykpOworICAgICAgICAgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9
IDA7CisgICAgICAgICAgICAgICAgc3RhdHVzID0ga1RFQ1VubWFwcGFibGVFbGVtZW50RXJyOyAv
LyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgdXNlIHRoaXMgZXJyb3IgY29kZQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSBjYWxsZXIgd2UgcmVhZCBh
bGwgdGhlIHNvdXJjZSBieXRlcyBhbmQga2VlcCB0aGVtIGluIHRoZSBidWZmZXIuCisgICAgICAg
ICAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzICs9IGJ5dGVzVG9QdXRJbkJ1ZmZlcjsKKyAgICAg
ICAgICAgICAgICBieXRlc1JlYWQgPSBieXRlc1RvUHV0SW5CdWZmZXI7CisgICAgICAgICAgICAg
ICAgc3RhdHVzID0gbm9FcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBwYXJ0aWFsIGNoYXJhY3RlciBidWZmZXIu
CisgICAgICAgICAgICAvLyBBbHNvLCB3ZSBoYXZlIHJlYWQgc29tZSBvZiB0aGUgYnl0ZXMgZnJv
bSB0aGUgbWFpbiBidWZmZXIuCisgICAgICAgICAgICBpZiAoYnl0ZXNSZWFkID4gbV9udW1CdWZm
ZXJlZEJ5dGVzKSB7CisgICAgICAgICAgICAgICAgYnl0ZXNSZWFkIC09IG1fbnVtQnVmZmVyZWRC
eXRlczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJU
RUNDb252ZXJ0VGV4dCBhY2NlcHRlZCBzb21lIGJ5dGVzIGl0IHByZXZpb3VzbHkgcmVqZWN0ZWQg
d2l0aCBrVEVDUGFydGlhbENoYXJFcnIiKTsKKyAgICAgICAgICAgICAgICBieXRlc1JlYWQgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKKyAg
ICAgICAgICAgIGlmIChzdGF0dXMgPT0ga1RFQ1BhcnRpYWxDaGFyRXJyKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2hpbGUgdGhlcmUgbWF5IGJlIGEgcGFydGlhbCBjaGFyYWN0ZXIgcHJvYmxlbSBp
biB0aGUgc21hbGwgYnVmZmVyLAorICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gdHJ5IGFn
YWluIGFuZCBub3QgZ2V0IGNvbmZ1c2VkIGFuZCB0aGluayB0aGVyZSBpcyBhIHBhcnRpYWwKKyAg
ICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgcHJvYmxlbSBpbiB0aGUgbGFyZ2UgYnVmZmVyLgor
ICAgICAgICAgICAgICAgIHN0YXR1cyA9IG5vRXJyOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzID0gVEVDQ29udmVydFRleHQobV9jb252ZXJ0
ZXJURUMsIGlucHV0QnVmZmVyLCBpbnB1dEJ1ZmZlckxlbmd0aCwgJmJ5dGVzUmVhZCwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4ob3V0cHV0QnVmZmVyKSwgb3V0cHV0
QnVmZmVyTGVuZ3RoLCAmYnl0ZXNXcml0dGVuKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4oYnl0ZXNSZWFkKSA8PSBpbnB1dEJ1ZmZlckxlbmd0aCk7CisgICAgfQorCisgICAgLy8g
V29yayBhcm91bmQgYnVnIDMzNTEwOTMsIHdoZXJlIHNvbWV0aW1lcyB3ZSBnZXQga1RFQ0J1ZmZl
ckJlbG93TWluaW11bVNpemVFcnIgaW5zdGVhZCBvZiBrVEVDT3V0cHV0QnVmZmVyRnVsbFN0YXR1
cy4KKyAgICBpZiAoc3RhdHVzID09IGtURUNCdWZmZXJCZWxvd01pbmltdW1TaXplRXJyICYmIGJ5
dGVzV3JpdHRlbiAhPSAwKSB7CisgICAgICAgIHN0YXR1cyA9IGtURUNPdXRwdXRCdWZmZXJGdWxs
U3RhdHVzOworICAgIH0KKworICAgIGlucHV0TGVuZ3RoID0gYnl0ZXNSZWFkOworICAgIG91dHB1
dExlbmd0aCA9IGJ5dGVzV3JpdHRlbjsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitEZXByZWNh
dGVkU3RyaW5nIFN0cmVhbWluZ1RleHREZWNvZGVyTWFjOjpjb252ZXJ0VXNpbmdURUMoY29uc3Qg
dW5zaWduZWQgY2hhciAqY2hzLCBpbnQgbGVuLCBib29sIGZsdXNoKQoreworICAgIC8vIEdldCBh
IGNvbnZlcnRlciBmb3IgdGhlIHBhc3NlZC1pbiBlbmNvZGluZy4KKyAgICBpZiAoIW1fY29udmVy
dGVyVEVDICYmIGNyZWF0ZVRFQ0NvbnZlcnRlcigpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZygpOworICAgIAorICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KCIi
KTsKKworICAgIHJlc3VsdC5yZXNlcnZlKGxlbik7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2VQb2ludGVyID0gY2hzOworICAgIGludCBzb3VyY2VMZW5ndGggPSBsZW47CisgICAg
Ym9vbCBidWZmZXJXYXNGdWxsID0gZmFsc2U7CisgICAgVW5pQ2hhciBidWZmZXJbQ29udmVyc2lv
bkJ1ZmZlclNpemVdOworCisgICAgd2hpbGUgKHNvdXJjZUxlbmd0aCB8fCBidWZmZXJXYXNGdWxs
KSB7CisgICAgICAgIGludCBieXRlc1JlYWQgPSAwOworICAgICAgICBpbnQgYnl0ZXNXcml0dGVu
ID0gMDsKKyAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gY29udmVydE9uZUNodW5rVXNpbmdURUMo
c291cmNlUG9pbnRlciwgc291cmNlTGVuZ3RoLCBieXRlc1JlYWQsIGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlciksIGJ5dGVzV3JpdHRlbik7CisgICAgICAgIEFTU0VSVChieXRlc1JlYWQgPD0gc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgc291cmNlUG9pbnRlciArPSBieXRlc1JlYWQ7CisgICAgICAgIHNv
dXJjZUxlbmd0aCAtPSBieXRlc1JlYWQ7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHN0YXR1
cykgeworICAgICAgICAgICAgY2FzZSBub0VycjoKKyAgICAgICAgICAgIGNhc2Uga1RFQ091dHB1
dEJ1ZmZlckZ1bGxTdGF0dXM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIGtUZXh0TWFsZm9ybWVkSW5wdXRFcnI6CisgICAgICAgICAgICBjYXNlIGtUZXh0VW5kZWZp
bmVkRWxlbWVudEVycjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUHV0IEZGRkQgY2hhcmFj
dGVyIGludG8gdGhlIG91dHB1dCBzdHJpbmcgaW4gdGhpcyBjYXNlPworICAgICAgICAgICAgICAg
IFRFQ0NsZWFyQ29udmVydGVyQ29udGV4dEluZm8obV9jb252ZXJ0ZXJURUMpOworICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2VMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlUG9p
bnRlciArPSAxOworICAgICAgICAgICAgICAgICAgICBzb3VyY2VMZW5ndGggLT0gMTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtU
RUNQYXJ0aWFsQ2hhckVycjogeworICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgcGFydGlhbCBj
aGFyYWN0ZXIgaW50byB0aGUgYnVmZmVyLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX251bUJ1
ZmZlcmVkQnl0ZXMgPT0gMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGJ1ZmZlclNpemUg
PSBzaXplb2YobV9udW1CdWZmZXJlZEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNl
TGVuZ3RoIDwgYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBtZW1jcHkobV9idWZm
ZXJlZEJ5dGVzLCBzb3VyY2VQb2ludGVyLCBzb3VyY2VMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSBzb3VyY2VMZW5ndGg7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJURUNDb252ZXJ0VGV4dCBn
YXZlIGEga1RFQ1BhcnRpYWxDaGFyRXJyLCBidXQgbGVmdCAldSBieXRlcyBpbiB0aGUgYnVmZmVy
Iiwgc291cmNlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc291
cmNlTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ0ZXh0IGRlY29k
aW5nIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBtX2Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwor
ICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kT21pdHRpbmdCT00ocmVzdWx0LCBidWZmZXIsIGJ5
dGVzV3JpdHRlbik7CisKKyAgICAgICAgYnVmZmVyV2FzRnVsbCA9IHN0YXR1cyA9PSBrVEVDT3V0
cHV0QnVmZmVyRnVsbFN0YXR1czsKKyAgICB9CisgICAgCisgICAgaWYgKGZsdXNoKSB7CisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNXcml0dGVuID0gMDsKKyAgICAgICAgVEVDRmx1c2hUZXh0
KG1fY29udmVydGVyVEVDLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oYnVmZmVy
KSwgc2l6ZW9mKGJ1ZmZlciksICZieXRlc1dyaXR0ZW4pOworICAgICAgICBhcHBlbmRPbWl0dGlu
Z0JPTShyZXN1bHQsIGJ1ZmZlciwgYnl0ZXNXcml0dGVuKTsKKyAgICB9CisKKyAgICAvLyBXb3Jr
YXJvdW5kIGZvciBhIGJ1ZyBpbiB0aGUgVGV4dCBFbmNvZGluZyBDb252ZXJ0ZXIgKHNlZSBidWcg
MzIyNTQ3MikuCisgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBV
K0EzQTAgdG8gbWVhbiAiZnVsbC13aWR0aCBzcGFjZSIuCisgICAgLy8gQnV0IEdCMTgwMzAgZGVj
b2RlcyBpdCB0byBVK0U1RTUsIHdoaWNoIGlzIGNvcnJlY3QgaW4gdGhlb3J5IGJ1dCBub3QgaW4g
cHJhY3RpY2UuCisgICAgLy8gVG8gd29yayBhcm91bmQsIGp1c3QgY2hhbmdlIGFsbCBvY2N1cmVu
Y2VzIG9mIFUrRTVFNSB0byBVKzMwMDAgKGlkZW9ncmFwaGljIHNwYWNlKS4KKyAgICBpZiAobV9l
bmNvZGluZy5lbmNvZGluZ0lEKCkgPT0ga0NGU3RyaW5nRW5jb2RpbmdHQl8xODAzMF8yMDAwKQor
ICAgICAgICByZXN1bHQucmVwbGFjZSgweEU1RTUsIDB4MzAwMCk7CisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworRGVwcmVjYXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYzo6
Y29udmVydChjb25zdCB1bnNpZ25lZCBjaGFyICpjaHMsIGludCBsZW4sIGJvb2wgZmx1c2gpCit7
CisgICAgc3dpdGNoIChtX2VuY29kaW5nLmVuY29kaW5nSUQoKSkgeworICAgICAgICBjYXNlIFVU
RjE2RW5jb2Rpbmc6CisgICAgICAgICAgICByZXR1cm4gY29udmVydFVURjE2KGNocywgbGVuKTsK
KworICAgICAgICBjYXNlIEFTQ0lJRW5jb2Rpbmc6CisgICAgICAgIGNhc2UgTGF0aW4xRW5jb2Rp
bmc6CisgICAgICAgIGNhc2UgV2luTGF0aW4xRW5jb2Rpbmc6IHsKKyAgICAgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcmVzdWx0OworICAgICAgICAgICAgaWYgKGNvbnZlcnRJZkFTQ0lJKGNocywg
bGVuLCByZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVVRGOEVuY29kaW5nOgorICAgICAg
ICAgICAgLy8gSWYgYSBwcmV2aW91cyBydW4gdXNlZCBURUMsIHdlIG1pZ2h0IGhhdmUgYSBwYXJ0
bHkgY29udmVydGVkIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIC8vIElmIHNvLCBkb24ndCB1c2Ug
dGhlIG9wdGltaXplZCBBU0NJSSBjb2RlIHBhdGguCisgICAgICAgICAgICBpZiAoIW1fY29udmVy
dGVyVEVDKSB7CisgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnZlcnRJZkFTQ0lJKGNocywgbGVuLCByZXN1bHQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBjb252ZXJ0VXNpbmdURUMoY2hzLCBsZW4sIGZsdXNoKTsKK30KKworRGVwcmVj
YXRlZFN0cmluZyBTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYzo6dG9Vbmljb2RlKGNvbnN0IGNoYXIq
IGNocywgaW50IGxlbiwgYm9vbCBmbHVzaCkKK3sKKyAgICBBU1NFUlRfQVJHKGxlbiwgbGVuID49
IDApOworICAgIAorICAgIGlmIChtX2Vycm9yIHx8ICFjaHMpCisgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCk7CisKKyAgICBpZiAobGVuIDw9IDAgJiYgIWZsdXNoKQorICAgICAgICBy
ZXR1cm4gIiI7CisKKyAgICAvLyBIYW5kbGUgbm9ybWFsIGNhc2UuCisgICAgaWYgKCFtX2F0U3Rh
cnQpCisgICAgICAgIHJldHVybiBjb252ZXJ0KGNocywgbGVuLCBmbHVzaCk7CisKKyAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgZm91bmQgYSBCT00uCisgICAgaW50IG51bUJ1ZmZlcmVkQnl0ZXMg
PSBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAgaW50IGJ1ZjFMZW4gPSBudW1CdWZmZXJlZEJ5dGVz
OworICAgIGludCBidWYyTGVuID0gbGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZjEg
PSBtX2J1ZmZlcmVkQnl0ZXM7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogYnVmMiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNocyk7CisgICAgdW5zaWduZWQgY2hh
ciBjMSA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYy
TGVuLCAqYnVmMisrKSA6IDA7CisgICAgdW5zaWduZWQgY2hhciBjMiA9IGJ1ZjFMZW4gPyAoLS1i
dWYxTGVuLCAqYnVmMSsrKSA6IGJ1ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7Cisg
ICAgdW5zaWduZWQgY2hhciBjMyA9IGJ1ZjFMZW4gPyAoLS1idWYxTGVuLCAqYnVmMSsrKSA6IGJ1
ZjJMZW4gPyAoLS1idWYyTGVuLCAqYnVmMisrKSA6IDA7CisgICAgaW50IEJPTUxlbmd0aCA9IDA7
CisgICAgaWYgKGMxID09IDB4RkYgJiYgYzIgPT0gMHhGRSkgeworICAgICAgICBpZiAobV9lbmNv
ZGluZyAhPSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNvZGluZywgTGl0dGxlRW5kaWFuKSkgeworICAg
ICAgICAgICAgcmVsZWFzZVRFQ0NvbnZlcnRlcigpOworICAgICAgICAgICAgbV9lbmNvZGluZyA9
IFRleHRFbmNvZGluZyhVVEYxNkVuY29kaW5nLCBMaXR0bGVFbmRpYW4pOworICAgICAgICAgICAg
bV9saXR0bGVFbmRpYW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIEJPTUxlbmd0aCA9IDI7
CisgICAgfSBlbHNlIGlmIChjMSA9PSAweEZFICYmIGMyID09IDB4RkYpIHsKKyAgICAgICAgaWYg
KG1fZW5jb2RpbmcgIT0gVGV4dEVuY29kaW5nKFVURjE2RW5jb2RpbmcsIEJpZ0VuZGlhbikpIHsK
KyAgICAgICAgICAgIHJlbGVhc2VURUNDb252ZXJ0ZXIoKTsKKyAgICAgICAgICAgIG1fZW5jb2Rp
bmcgPSBUZXh0RW5jb2RpbmcoVVRGMTZFbmNvZGluZywgQmlnRW5kaWFuKTsKKyAgICAgICAgICAg
IG1fbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgQk9NTGVuZ3RoID0g
MjsKKyAgICB9IGVsc2UgaWYgKGMxID09IDB4RUYgJiYgYzIgPT0gMHhCQiAmJiBjMyA9PSAweEJG
KSB7CisgICAgICAgIGlmIChtX2VuY29kaW5nICE9IFRleHRFbmNvZGluZyhVVEY4RW5jb2Rpbmcp
KSB7CisgICAgICAgICAgICByZWxlYXNlVEVDQ29udmVydGVyKCk7CisgICAgICAgICAgICBtX2Vu
Y29kaW5nID0gVGV4dEVuY29kaW5nKFVURjhFbmNvZGluZyk7CisgICAgICAgIH0KKyAgICAgICAg
Qk9NTGVuZ3RoID0gMzsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBmb3Vu
ZCBhIEJPTS4KKyAgICBpZiAoQk9NTGVuZ3RoICE9IDApIHsKKyAgICAgICAgQVNTRVJUKG51bUJ1
ZmZlcmVkQnl0ZXMgKyBsZW4gPj0gQk9NTGVuZ3RoKTsKKyAgICAgICAgaW50IHNraXAgPSBCT01M
ZW5ndGggLSBudW1CdWZmZXJlZEJ5dGVzOworICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAw
OworICAgICAgICBtX2F0U3RhcnQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxlbiA9PSBza2lw
ID8gRGVwcmVjYXRlZFN0cmluZygiIikgOiBjb252ZXJ0KGNocyArIHNraXAsIGxlbiAtIHNraXAs
IGZsdXNoKTsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZXJl
IGlzIG5vIEJPTSBjb21pbmcuCisgICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSBzaXplb2YobV9i
dWZmZXJlZEJ5dGVzKTsKKyAgICBpZiAobnVtQnVmZmVyZWRCeXRlcyArIGxlbiA+IGJ1ZmZlclNp
emUgfHwgZmx1c2gpIHsKKyAgICAgICAgbV9hdFN0YXJ0ID0gZmFsc2U7CisgICAgICAgIGlmIChu
dW1CdWZmZXJlZEJ5dGVzID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0KGNocywg
bGVuLCBmbHVzaCk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJlZEJ5
dGVzW3NpemVvZihtX2J1ZmZlcmVkQnl0ZXMpXTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlcmVkQnl0
ZXMsIG1fYnVmZmVyZWRCeXRlcywgbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgICAgIG1fbnVtQnVm
ZmVyZWRCeXRlcyA9IDA7CisgICAgICAgIHJldHVybiBjb252ZXJ0KGJ1ZmZlcmVkQnl0ZXMsIG51
bUJ1ZmZlcmVkQnl0ZXMsIGZhbHNlKSArIGNvbnZlcnQoY2hzLCBsZW4sIGZsdXNoKTsKKyAgICB9
CisKKyAgICAvLyBDb250aW51ZSB0byBsb29rIGZvciB0aGUgQk9NLgorICAgIG1lbWNweSgmbV9i
dWZmZXJlZEJ5dGVzW251bUJ1ZmZlcmVkQnl0ZXNdLCBjaHMsIGxlbik7CisgICAgbV9udW1CdWZm
ZXJlZEJ5dGVzICs9IGxlbjsKKyAgICByZXR1cm4gIiI7Cit9CisKK0RlcHJlY2F0ZWRDU3RyaW5n
IFN0cmVhbWluZ1RleHREZWNvZGVyTWFjOjpmcm9tVW5pY29kZShjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZxY3MsIGJvb2wgYWxsb3dFbnRpdGllcykKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlYWxseSB1c2UgdGhlIHNhbWUgQVBJIGluIGJvdGggZGlyZWN0aW9ucy4KKyAgICAvLyBDdXJy
ZW50bHkgd2UgdXNlIFRFQyB0byBkZWNvZGUgYW5kIENGU3RyaW5nIHRvIGVuY29kZTsgaXQgd291
bGQgYmUgYmV0dGVyIHRvIGVuY29kZSB3aXRoIFRFQyB0b28uCisgICAgCisgICAgVGV4dEVuY29k
aW5nIGVuY29kaW5nID0gbV9lbmNvZGluZy5lZmZlY3RpdmVFbmNvZGluZygpOworCisgICAgLy8g
RklYTUU6IFNpbmNlIHRoZXJlJ3Mgbm8gImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGluIENGU3Ry
aW5nLCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNpZ24uCisgICAgLy8gRW5j
b2Rpbmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBhIGJhY2tzbGFzaC4KKyAg
ICBEZXByZWNhdGVkU3RyaW5nIGNvcHkgPSBxY3M7CisgICAgY29weS5yZXBsYWNlKCdcXCcsIGVu
Y29kaW5nLmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgQ0ZTdHJpbmdSZWYgY2Zz
ID0gY29weS5nZXRDRlN0cmluZygpOworICAgIENGTXV0YWJsZVN0cmluZ1JlZiBjZm1zID0gQ0ZT
dHJpbmdDcmVhdGVNdXRhYmxlQ29weSgwLCAwLCBjZnMpOyAvLyBpbiByYXJlIGNhc2VzLCBub3Jt
YWxpemF0aW9uIGNhbiBtYWtlIHRoZSBzdHJpbmcgbG9uZ2VyLCB0aHVzIG5vIGxpbWl0IG9uIGl0
cyBsZW5ndGgKKyAgICBDRlN0cmluZ05vcm1hbGl6ZShjZm1zLCBrQ0ZTdHJpbmdOb3JtYWxpemF0
aW9uRm9ybUMpOworICAgIAorICAgIENGSW5kZXggc3RhcnRQb3MgPSAwOworICAgIENGSW5kZXgg
Y2hhcmFjdGVyc0xlZnQgPSBDRlN0cmluZ0dldExlbmd0aChjZm1zKTsKKyAgICBEZXByZWNhdGVk
Q1N0cmluZyByZXN1bHQoMSk7IC8vIGZvciB0cmFpbGluZyB6ZXJvCisKKyAgICB3aGlsZSAoY2hh
cmFjdGVyc0xlZnQgPiAwKSB7CisgICAgICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlJhbmdlTWFrZShz
dGFydFBvcywgY2hhcmFjdGVyc0xlZnQpOworICAgICAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aDsK
KyAgICAgICAgQ0ZTdHJpbmdHZXRCeXRlcyhjZm1zLCByYW5nZSwgZW5jb2RpbmcuZW5jb2RpbmdJ
RCgpLCBhbGxvd0VudGl0aWVzID8gMCA6ICc/JywgZmFsc2UsIE5VTEwsIDB4N0ZGRkZGRkYsICZi
dWZmZXJMZW5ndGgpOworICAgICAgICAKKyAgICAgICAgRGVwcmVjYXRlZENTdHJpbmcgY2h1bmso
YnVmZmVyTGVuZ3RoICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihjaHVuay5kYXRhKCkpOworICAgICAgICBDRklu
ZGV4IGNoYXJhY3RlcnNDb252ZXJ0ZWQgPSBDRlN0cmluZ0dldEJ5dGVzKGNmbXMsIHJhbmdlLCBl
bmNvZGluZy5lbmNvZGluZ0lEKCksIGFsbG93RW50aXRpZXMgPyAwIDogJz8nLCBmYWxzZSwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsICZidWZmZXJMZW5ndGgpOworICAgICAgICBidWZmZXJbYnVmZmVy
TGVuZ3RoXSA9IDA7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2h1bmspOworICAgICAgICAKKyAg
ICAgICAgaWYgKGNoYXJhY3RlcnNDb252ZXJ0ZWQgIT0gY2hhcmFjdGVyc0xlZnQpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBiYWRDaGFyID0gQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJBdEluZGV4
KGNmbXMsIHN0YXJ0UG9zICsgY2hhcmFjdGVyc0NvbnZlcnRlZCk7CisgICAgICAgICAgICArK2No
YXJhY3RlcnNDb252ZXJ0ZWQ7CisKKyAgICAgICAgICAgIGlmICgoYmFkQ2hhciAmIDB4ZmMwMCkg
PT0gMHhkODAwICYmICAgICAvLyBpcyBoaWdoIHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgICAg
Y2hhcmFjdGVyc0NvbnZlcnRlZCAhPSBjaGFyYWN0ZXJzTGVmdCkgeworICAgICAgICAgICAgICAg
IFVuaUNoYXIgbG93ID0gQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJBdEluZGV4KGNmbXMsIHN0YXJ0UG9z
ICsgY2hhcmFjdGVyc0NvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKChsb3cgJiAweGZj
MDApID09IDB4ZGMwMCkgeyAgICAgLy8gaXMgbG93IHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAg
ICAgICBiYWRDaGFyIDw8PSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYmFkQ2hhciArPSBsb3c7
CisgICAgICAgICAgICAgICAgICAgIGJhZENoYXIgKz0gMHgxMDAwMCAtICgweGQ4MDAgPDwgMTAp
IC0gMHhkYzAwOworICAgICAgICAgICAgICAgICAgICArK2NoYXJhY3RlcnNDb252ZXJ0ZWQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBidWZbMTZd
OworICAgICAgICAgICAgc3ByaW50ZihidWYsICImIyV1OyIsIGJhZENoYXIpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChidWYpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGFy
dFBvcyArPSBjaGFyYWN0ZXJzQ29udmVydGVkOworICAgICAgICBjaGFyYWN0ZXJzTGVmdCAtPSBj
aGFyYWN0ZXJzQ29udmVydGVkOworICAgIH0KKyAgICBDRlJlbGVhc2UoY2Ztcyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU3RyZWFtaW5nVGV4dERlY29kZXJNYWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21hYy9TdHJlYW1pbmdUZXh0RGVjb2Rlck1hYy5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU3RyZWFtaW5nVGV4dERlY29kZXJNYWMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU3RyZWFtaW5nVGV4dERlY29kZXJNYWNfSAorI2RlZmluZSBTdHJlYW1pbmdUZXh0RGVjb2Rl
ck1hY19ICisKKyNpbmNsdWRlICJTdHJlYW1pbmdUZXh0RGVjb2Rlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdHJlYW1pbmdUZXh0RGVjb2Rlck1hYyA6IHB1YmxpYyBT
dHJlYW1pbmdUZXh0RGVjb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBTdHJlYW1pbmdUZXh0
RGVjb2Rlck1hYyhjb25zdCBUZXh0RW5jb2RpbmcmKTsKKyAgICAgICAgdmlydHVhbCB+U3RyZWFt
aW5nVGV4dERlY29kZXJNYWMoKTsKKworICAgICAgICBib29sIHRleHRFbmNvZGluZ1N1cHBvcnRl
ZCgpOworCisgICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1VuaWNvZGUoY29uc3Qg
Y2hhciogY2hzLCBpbnQgbGVuLCBib29sIGZsdXNoID0gZmFsc2UpOworICAgICAgICB2aXJ0dWFs
IERlcHJlY2F0ZWRDU3RyaW5nIGZyb21Vbmljb2RlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBi
b29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIGNvbnZlcnQoY29uc3QgY2hhciogY2hzLCBpbnQgbGVuLCBib29sIGZsdXNo
KQorICAgICAgICAgICAgeyByZXR1cm4gY29udmVydChyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihjaHMpLCBsZW4sIGZsdXNoKTsgfQorICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nIGNvbnZlcnQoY29uc3QgdW5zaWduZWQgY2hhciAqY2hzLCBpbnQgbGVuLCBib29sIGZsdXNo
KTsKKworICAgICAgICBib29sIGNvbnZlcnRJZkFTQ0lJKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBp
bnQgbGVuLCBEZXByZWNhdGVkU3RyaW5nJik7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY29u
dmVydFVURjE2KGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQgbGVuKTsKKyAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyBjb252ZXJ0VXNpbmdURUMoY29uc3QgdW5zaWduZWQgY2hhciosIGludCBsZW4s
IGJvb2wgZmx1c2gpOworICAgICAgICBPU1N0YXR1cyBjb252ZXJ0T25lQ2h1bmtVc2luZ1RFQyhj
b25zdCB1bnNpZ25lZCBjaGFyICppbnB1dEJ1ZmZlciwgaW50IGlucHV0QnVmZmVyTGVuZ3RoLCBp
bnQgJmlucHV0TGVuZ3RoLCB2b2lkICpvdXRwdXRCdWZmZXIsIGludCBvdXRwdXRCdWZmZXJMZW5n
dGgsIGludCAmb3V0cHV0TGVuZ3RoKTsKKworICAgICAgICBPU1N0YXR1cyBjcmVhdGVURUNDb252
ZXJ0ZXIoKTsKKyAgICAgICAgdm9pZCByZWxlYXNlVEVDQ29udmVydGVyKCk7CisKKyAgICAgICAg
c3RhdGljIHZvaWQgYXBwZW5kT21pdHRpbmdCT00oRGVwcmVjYXRlZFN0cmluZyYsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgYnl0ZUNvdW50KTsKKworICAgICAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKKyAgICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKKyAgICAgICAgYm9vbCBt
X2F0U3RhcnQ7CisgICAgICAgIGJvb2wgbV9lcnJvcjsKKworICAgICAgICB1bnNpZ25lZCBtX251
bUJ1ZmZlcmVkQnl0ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzE2
XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcgorCisgICAg
ICAgIFRFQ09iamVjdFJlZiBtX2NvbnZlcnRlclRFQzsKKyAgICB9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RyZWFtaW5nVGV4dERlY29kZXJNYWNfSApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGV4dEVuY29kaW5nTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9UZXh0RW5jb2RpbmdNYWMuY3BwCShyZXZpc2lvbiAxNTQx
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RleHRFbmNvZGluZ01hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLQotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlICJTdHJl
YW1pbmdUZXh0RGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxp
bmUgVGV4dEVuY29kaW5nSUQgZWZmZWN0aXZlRW5jb2RpbmcoVGV4dEVuY29kaW5nSUQgZW5jb2Rp
bmcpCi17Ci0gICAgaWYgKGVuY29kaW5nID09IExhdGluMUVuY29kaW5nIHx8IGVuY29kaW5nID09
IEFTQ0lJRW5jb2RpbmcpCi0gICAgICAgIHJldHVybiBXaW5MYXRpbjFFbmNvZGluZzsKLSAgICBy
ZXR1cm4gZW5jb2Rpbmc7Ci19Ci0KLS8vIFdlJ2QgbGlrZSB0byB1c2UgSUNVIGZvciB0aGlzIG9u
IE9TIFggYXMgd2VsbCBldmVudHVhbGx5LCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUKLS8vIGl0
IGNvdmVycyBhbGwgdGhlIGVuY29kaW5ncyB0aGF0IHdlIG5lZWQKLURlcHJlY2F0ZWRDU3RyaW5n
IFRleHRFbmNvZGluZzo6ZnJvbVVuaWNvZGUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcWNzLCBi
b29sIGFsbG93RW50aXRpZXMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFs
bHkgdXNlIHRoZSBzYW1lIEFQSSBpbiBib3RoIGRpcmVjdGlvbnMuCi0gICAgLy8gQ3VycmVudGx5
IHdlIHVzZSBJQ1UgdG8gZGVjb2RlIGFuZCBDRlN0cmluZyB0byBlbmNvZGU7IGl0IHdvdWxkIGJl
IGJldHRlciB0byBlbmNvZGUgd2l0aCBJQ1UgdG9vLgotICAgIAotICAgIFRleHRFbmNvZGluZ0lE
IGVuY29kaW5nID0gZWZmZWN0aXZlRW5jb2RpbmcobV9lbmNvZGluZ0lEKTsKLQotICAgIC8vIEZJ
WE1FOiBTaW5jZSB0aGVyZSdzIG5vICJmb3JjZSBBU0NJSSByYW5nZSIgbW9kZSBpbiBDRlN0cmlu
Zywgd2UgY2hhbmdlIHRoZSBiYWNrc2xhc2ggaW50byBhIHllbiBzaWduLgotICAgIC8vIEVuY29k
aW5nIHdpbGwgY2hhbmdlIHRoZSB5ZW4gc2lnbiBiYWNrIGludG8gYSBiYWNrc2xhc2guCi0gICAg
RGVwcmVjYXRlZFN0cmluZyBjb3B5ID0gcWNzOwotICAgIGNvcHkucmVwbGFjZSgnXFwnLCBiYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwotICAgIENGU3RyaW5nUmVmIGNmcyA9IGNvcHkuZ2V0
Q0ZTdHJpbmcoKTsKLSAgICBDRk11dGFibGVTdHJpbmdSZWYgY2ZtcyA9IENGU3RyaW5nQ3JlYXRl
TXV0YWJsZUNvcHkoMCwgMCwgY2ZzKTsgLy8gaW4gcmFyZSBjYXNlcywgbm9ybWFsaXphdGlvbiBj
YW4gbWFrZSB0aGUgc3RyaW5nIGxvbmdlciwgdGh1cyBubyBsaW1pdCBvbiBpdHMgbGVuZ3RoCi0g
ICAgQ0ZTdHJpbmdOb3JtYWxpemUoY2Ztcywga0NGU3RyaW5nTm9ybWFsaXphdGlvbkZvcm1DKTsK
LSAgICAKLSAgICBDRkluZGV4IHN0YXJ0UG9zID0gMDsKLSAgICBDRkluZGV4IGNoYXJhY3RlcnNM
ZWZ0ID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2Ztcyk7Ci0gICAgRGVwcmVjYXRlZENTdHJpbmcgcmVz
dWx0KDEpOyAvLyBmb3IgdHJhaWxpbmcgemVybwotCi0gICAgd2hpbGUgKGNoYXJhY3RlcnNMZWZ0
ID4gMCkgewotICAgICAgICBDRlJhbmdlIHJhbmdlID0gQ0ZSYW5nZU1ha2Uoc3RhcnRQb3MsIGNo
YXJhY3RlcnNMZWZ0KTsKLSAgICAgICAgQ0ZJbmRleCBidWZmZXJMZW5ndGg7Ci0gICAgICAgIENG
U3RyaW5nR2V0Qnl0ZXMoY2ZtcywgcmFuZ2UsIGVuY29kaW5nLCBhbGxvd0VudGl0aWVzID8gMCA6
ICc/JywgZmFsc2UsIE5VTEwsIDB4N0ZGRkZGRkYsICZidWZmZXJMZW5ndGgpOwotICAgICAgICAK
LSAgICAgICAgRGVwcmVjYXRlZENTdHJpbmcgY2h1bmsoYnVmZmVyTGVuZ3RoICsgMSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
ciAqPihjaHVuay5kYXRhKCkpOwotICAgICAgICBDRkluZGV4IGNoYXJhY3RlcnNDb252ZXJ0ZWQg
PSBDRlN0cmluZ0dldEJ5dGVzKGNmbXMsIHJhbmdlLCBlbmNvZGluZywgYWxsb3dFbnRpdGllcyA/
IDAgOiAnPycsIGZhbHNlLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgJmJ1ZmZlckxlbmd0aCk7Ci0g
ICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gMDsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChj
aHVuayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hhcmFjdGVyc0NvbnZlcnRlZCAhPSBjaGFy
YWN0ZXJzTGVmdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhZENoYXIgPSBDRlN0cmlu
Z0dldENoYXJhY3RlckF0SW5kZXgoY2Ztcywgc3RhcnRQb3MgKyBjaGFyYWN0ZXJzQ29udmVydGVk
KTsKLSAgICAgICAgICAgICsrY2hhcmFjdGVyc0NvbnZlcnRlZDsKLQotICAgICAgICAgICAgaWYg
KChiYWRDaGFyICYgMHhmYzAwKSA9PSAweGQ4MDAgJiYgICAgIC8vIGlzIGhpZ2ggc3Vycm9nYXRl
Ci0gICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzQ29udmVydGVkICE9IGNoYXJhY3RlcnNMZWZ0
KSB7Ci0gICAgICAgICAgICAgICAgVW5pQ2hhciBsb3cgPSBDRlN0cmluZ0dldENoYXJhY3RlckF0
SW5kZXgoY2Ztcywgc3RhcnRQb3MgKyBjaGFyYWN0ZXJzQ29udmVydGVkKTsKLSAgICAgICAgICAg
ICAgICBpZiAoKGxvdyAmIDB4ZmMwMCkgPT0gMHhkYzAwKSB7ICAgICAvLyBpcyBsb3cgc3Vycm9n
YXRlCi0gICAgICAgICAgICAgICAgICAgIGJhZENoYXIgPDw9IDEwOwotICAgICAgICAgICAgICAg
ICAgICBiYWRDaGFyICs9IGxvdzsKLSAgICAgICAgICAgICAgICAgICAgYmFkQ2hhciArPSAweDEw
MDAwIC0gKDB4ZDgwMCA8PCAxMCkgLSAweGRjMDA7Ci0gICAgICAgICAgICAgICAgICAgICsrY2hh
cmFjdGVyc0NvbnZlcnRlZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjaGFyIGJ1ZlsxNl07Ci0gICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiYjJXU7Iiwg
YmFkQ2hhcik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJ1Zik7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHN0YXJ0UG9zICs9IGNoYXJhY3RlcnNDb252ZXJ0ZWQ7Ci0gICAgICAg
IGNoYXJhY3RlcnNMZWZ0IC09IGNoYXJhY3RlcnNDb252ZXJ0ZWQ7Ci0gICAgfQotICAgIENGUmVs
ZWFzZShjZm1zKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCg==
</data>
<flag name="review"
          id="2885"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>