<?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>41680</bug_id>
          
          <creation_ts>2010-07-06 03:18:22 -0700</creation_ts>
          <short_desc>[Qt] QtScript should provide an API for enumerating a JS object&apos;s properties</short_desc>
          <delta_ts>2010-07-13 12:34:17 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41769</dependson>
          <blocked>31863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Hansen">kent.hansen</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246988</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-07-06 03:18:22 -0700</bug_when>
    <thetext>See http://doc.trolltech.com/latest/qscriptvalueiterator.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248895</commentid>
    <comment_count>1</comment_count>
      <attachid>61029</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-09 03:27:44 -0700</bug_when>
    <thetext>Created attachment 61029
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248898</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-09 03:35:23 -0700</bug_when>
    <thetext>Attachment 61029 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/QtScript.pro&quot;
JavaScriptCore/qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator_p.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator.cpp&quot;
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250400</commentid>
    <comment_count>3</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-13 02:37:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Bug 35151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250423</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-07-13 03:36:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=61029) [details]
&gt; Fix v1

Looks good except for the &quot;to&quot; in &quot;Introduce to QScriptValueIterator&quot;. And why the trailing comma in &quot;arguments[] = { *m_object, };&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250511</commentid>
    <comment_count>5</comment_count>
      <attachid>61378</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-13 08:15:56 -0700</bug_when>
    <thetext>Created attachment 61378
Fix v1.01</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250514</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 08:18:19 -0700</bug_when>
    <thetext>Attachment 61378 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/QtScript.pro&quot;
JavaScriptCore/qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator_p.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;JavaScriptCore/qt/api/qscriptvalueiterator.cpp&quot;
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250677</commentid>
    <comment_count>7</comment_count>
      <attachid>61378</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-13 12:34:13 -0700</bug_when>
    <thetext>Comment on attachment 61378
Fix v1.01

Clearing flags on attachment: 61378

Committed r63233: &lt;http://trac.webkit.org/changeset/63233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250678</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-13 12:34:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61029</attachid>
            <date>2010-07-09 03:27:44 -0700</date>
            <delta_ts>2010-07-13 08:15:56 -0700</delta_ts>
            <desc>Fix v1</desc>
            <filename>iter.diff</filename>
            <type>text/plain</type>
            <size>40268</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3Jl
L3F0L0NoYW5nZUxvZwppbmRleCA3MWI0YTIxLi45MDYwZjg3IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9xdC9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNzAgQEAKIDIwMTAtMDctMDkgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93
YWNraUBub2tpYS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW50cm9kdWNlIHRvIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yLgorCisgICAgICAgIFRo
ZSBRU2NyaXB0VmFsdWVJdGVyYXRvciBjbGFzcyBwZXJtaXRzIHRvIGl0ZXJhdGUgb3ZlciBhIFFT
Y3JpcHRWYWx1ZSdzIHByb3BlcnRpZXMuCisKKyAgICAgICAgW1F0XSBRdFNjcmlwdCBzaG91bGQg
cHJvdmlkZSBhbiBBUEkgZm9yIGVudW1lcmF0aW5nIGEgSlMgb2JqZWN0J3MgcHJvcGVydGllcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2ODAKKwor
ICAgICAgICAqIGFwaS9RdFNjcmlwdC5wcm86CisgICAgICAgICogYXBpL3FzY3JpcHR2YWx1ZWl0
ZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6UVNjcmlw
dFZhbHVlSXRlcmF0b3IpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6On5RU2NyaXB0
VmFsdWVJdGVyYXRvcik6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6aGFzTmV4dCk6
CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChRU2NyaXB0
VmFsdWVJdGVyYXRvcjo6aGFzUHJldmlvdXMpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0
b3I6OnByZXZpb3VzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0Zyb250KToK
KyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0JhY2spOgorICAgICAgICAoUVNjcmlw
dFZhbHVlSXRlcmF0b3I6Om5hbWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnNj
cmlwdE5hbWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnZhbHVlKToKKyAgICAg
ICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFs
dWVJdGVyYXRvcjo6cmVtb3ZlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpmbGFn
cyk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KiBhcGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogYXBpL3FzY3Jp
cHR2YWx1ZWl0ZXJhdG9yX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRv
clByaXZhdGU6OlFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0
VmFsdWVJdGVyYXRvclByaXZhdGU6On5RU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGUpOgorICAg
ICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpoYXNOZXh0KToKKyAgICAgICAgKFFT
Y3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6bmV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJ
dGVyYXRvclByaXZhdGU6Omhhc1ByZXZpb3VzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJh
dG9yUHJpdmF0ZTo6cHJldmlvdXMpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2
YXRlOjpuYW1lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2NyaXB0
TmFtZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6OnZhbHVlKToKKyAg
ICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAo
UVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpyZW1vdmUpOgorICAgICAgICAoUVNjcmlwdFZh
bHVlSXRlcmF0b3JQcml2YXRlOjp0b0Zyb250KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJh
dG9yUHJpdmF0ZTo6dG9CYWNrKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0
ZTo6ZmxhZ3MpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjppc1ZhbGlk
KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6ZW5naW5lKToKKyAgICAg
ICAgKiB0ZXN0cy9xc2NyaXB0dmFsdWVpdGVyYXRvci9xc2NyaXB0dmFsdWVpdGVyYXRvci5wcm86
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yL3RzdF9xc2NyaXB0
dmFsdWVpdGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0ZXJh
dG9yOjp0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZUl0ZXJhdG9yOjp+dHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yKToKKyAgICAgICAgKHRzdF9RU2Ny
aXB0VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUZvcndhcmRfZGF0YSk6CisgICAgICAgICh0c3RfUVNj
cmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVGb3J3YXJkKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUJhY2t3YXJkX2RhdGEpOgorICAgICAgICAodHN0X1FTY3Jp
cHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlQmFja3dhcmQpOgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZUl0ZXJhdG9yOjppdGVyYXRlQXJyYXlfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZh
bHVlSXRlcmF0b3I6Oml0ZXJhdGVBcnJheSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRl
cmF0b3I6Oml0ZXJhdGVCYWNrQW5kRm9ydGgpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0
ZXJhdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnJl
bW92ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnJlbW92ZU1peGVkKToK
KyAgICAgICAgKHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6cmVtb3ZlVW5kZWxldGFibGUpOgor
ICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlU3RyaW5nKToKKyAgICAg
ICAgKHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6YXNzaWduT2JqZWN0VG9JdGVyYXRvcik6Cisg
ICAgICAgICogdGVzdHMvdGVzdHMucHJvOgorCisyMDEwLTA3LTA5ICBKZWRyemVqIE5vd2Fja2kg
IDxqZWRyemVqLm5vd2Fja2lAbm9raWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgogCiAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSBRU2NyaXB0VmFsdWU6
OnByb3BlcnR5RmxhZ3MgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvUXRTY3JpcHQucHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwppbmRl
eCAzYzI2OTFlLi5mYjQ5Y2ZlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRT
Y3JpcHQucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KQEAgLTI0
LDYgKzI0LDcgQEAgSU5DTFVERVBBVEggKz0gJCRQV0QvLi4vLi4vQVBJCiBTT1VSQ0VTICs9ICAk
JFBXRC9xc2NyaXB0ZW5naW5lLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5l
X3AuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5jcHAgXAorICAgICAgICAg
ICAgJCRQV0QvcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3Fz
Y3JpcHRzdHJpbmcuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRwcm9ncmFtLmNwcCBc
CiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwIFwKQEAgLTMz
LDYgKzM0LDggQEAgSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9iYWwuaCBcCiAgICAgICAg
ICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lX3AuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
dmFsdWUuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWVfcC5oIFwKKyAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmggXAorICAgICAgICAgICAgJCRQV0QvcXNj
cmlwdHZhbHVlaXRlcmF0b3JfcC5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRjb252ZXJ0
ZXJfcC5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuaCBcCiAgICAgICAgICAg
ICAkJFBXRC9xc2NyaXB0c3RyaW5nX3AuaCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fz
Y3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mMWNhYTYxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHR2YWx1ZWl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlaXRlcmF0b3Iu
aCIKKworI2luY2x1ZGUgInFzY3JpcHR2YWx1ZV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVl
aXRlcmF0b3JfcC5oIgorCisvKiEKKyAgICBcY2xhc3MgUVNjcmlwdFZhbHVlSXRlcmF0b3IKKwor
ICAgIFxicmllZiBUaGUgUVNjcmlwdFZhbHVlSXRlcmF0b3IgY2xhc3MgcHJvdmlkZXMgYSBKYXZh
LXN0eWxlIGl0ZXJhdG9yIGZvciBRU2NyaXB0VmFsdWUuCisKKyAgICBcaW5ncm91cCBzY3JpcHQK
KworCisgICAgVGhlIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGNvbnN0cnVjdG9yIHRha2VzIGEgUVNj
cmlwdFZhbHVlIGFzCisgICAgYXJndW1lbnQuICBBZnRlciBjb25zdHJ1Y3Rpb24sIHRoZSBpdGVy
YXRvciBpcyBsb2NhdGVkIGF0IHRoZSB2ZXJ5CisgICAgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5j
ZSBvZiBwcm9wZXJ0aWVzLiBIZXJlJ3MgaG93IHRvIGl0ZXJhdGUgb3ZlcgorICAgIGFsbCB0aGUg
cHJvcGVydGllcyBvZiBhIFFTY3JpcHRWYWx1ZToKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25p
cHBldHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcCAwCisKKyAgICBU
aGUgbmV4dCgpIGFkdmFuY2VzIHRoZSBpdGVyYXRvci4gVGhlIG5hbWUoKSwgdmFsdWUoKSBhbmQg
ZmxhZ3MoKQorICAgIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5hbWUsIHZhbHVlIGFuZCBmbGFncyBv
ZiB0aGUgbGFzdCBpdGVtIHRoYXQgd2FzCisgICAganVtcGVkIG92ZXIuCisKKyAgICBJZiB5b3Ug
d2FudCB0byByZW1vdmUgcHJvcGVydGllcyBhcyB5b3UgaXRlcmF0ZSBvdmVyIHRoZQorICAgIFFT
Y3JpcHRWYWx1ZSwgdXNlIHJlbW92ZSgpLiBJZiB5b3Ugd2FudCB0byBtb2RpZnkgdGhlIHZhbHVl
IG9mIGEKKyAgICBwcm9wZXJ0eSwgdXNlIHNldFZhbHVlKCkuCisKKyAgICBOb3RlIHRoYXQgUVNj
cmlwdFZhbHVlSXRlcmF0b3Igb25seSBpdGVyYXRlcyBvdmVyIHRoZSBRU2NyaXB0VmFsdWUncwor
ICAgIG93biBwcm9wZXJ0aWVzOyBpLmUuIGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgcHJvdG90eXBl
IGNoYWluLiBZb3UgY2FuCisgICAgdXNlIGEgbG9vcCBsaWtlIHRoaXMgdG8gZm9sbG93IHRoZSBw
cm90b3R5cGUgY2hhaW46CisKKyAgICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3Jj
X3NjcmlwdF9xc2NyaXB0dmFsdWVpdGVyYXRvci5jcHAgMQorCisgICAgTm90ZSB0aGF0IFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2tpcCBvdmVyCisgICAgcHJv
cGVydGllcyB0aGF0IGhhdmUgdGhlIFFTY3JpcHRWYWx1ZTo6U2tpcEluRW51bWVyYXRpb24gZmxh
ZyBzZXQ7CisgICAgdGhhdCBmbGFnIG9ubHkgYWZmZWN0cyBpdGVyYXRpb24gaW4gc2NyaXB0IGNv
ZGUuICBJZiB5b3Ugd2FudCwgeW91CisgICAgY2FuIHNraXAgb3ZlciBzdWNoIHByb3BlcnRpZXMg
d2l0aCBjb2RlIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25p
cHBldHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcCAyCisKKyAgICBc
c2EgUVNjcmlwdFZhbHVlOjpwcm9wZXJ0eSgpCisqLworCisvKiEKKyAgICBDb25zdHJ1Y3RzIGFu
IGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIFxhIG9iamVjdC4gVGhlIGl0ZXJhdG9yIGlzCisgICAg
c2V0IHRvIGJlIGF0IHRoZSBmcm9udCBvZiB0aGUgc2VxdWVuY2Ugb2YgcHJvcGVydGllcyAoYmVm
b3JlIHRoZQorICAgIGZpcnN0IHByb3BlcnR5KS4KKyovCitRU2NyaXB0VmFsdWVJdGVyYXRvcjo6
UVNjcmlwdFZhbHVlSXRlcmF0b3IoY29uc3QgUVNjcmlwdFZhbHVlJiBvYmplY3QpCisgICAgOiBk
X3B0cihuZXcgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlKFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmdldChvYmplY3QpKSkKK3t9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoZSBpdGVyYXRvci4KKyov
CitRU2NyaXB0VmFsdWVJdGVyYXRvcjo6flFTY3JpcHRWYWx1ZUl0ZXJhdG9yKCkKK3t9CisKKy8q
IQorICAgIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgaXRlbSBhaGVhZCBv
ZiB0aGUgaXRlcmF0b3IKKyAgICAoaS5lLiB0aGUgaXRlcmF0b3IgaXMgXGUgbm90IGF0IHRoZSBi
YWNrIG9mIHRoZSBwcm9wZXJ0eSBzZXF1ZW5jZSk7CisgICAgb3RoZXJ3aXNlIHJldHVybnMgZmFs
c2UuCisKKyAgICBcc2EgbmV4dCgpLCBoYXNQcmV2aW91cygpCisqLworYm9vbCBRU2NyaXB0VmFs
dWVJdGVyYXRvcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5oYXNOZXh0
KCk7Cit9CisKKy8qIQorICAgIEFkdmFuY2VzIHRoZSBpdGVyYXRvciBieSBvbmUgcG9zaXRpb24u
CisKKyAgICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gb24gYW4gaXRlcmF0b3IgbG9jYXRlZCBhdCB0
aGUgYmFjayBvZiB0aGUKKyAgICBjb250YWluZXIgbGVhZHMgdG8gdW5kZWZpbmVkIHJlc3VsdHMu
CisKKyAgICBcc2EgaGFzTmV4dCgpLCBwcmV2aW91cygpLCBuYW1lKCkKKyovCit2b2lkIFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgICBkX3B0ci0+bmV4dCgpOworfQorCisvKiEK
KyAgICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGl0ZW0gYmVoaW5kIHRo
ZSBpdGVyYXRvcgorICAgIChpLmUuIHRoZSBpdGVyYXRvciBpcyBcZSBub3QgYXQgdGhlIGZyb250
IG9mIHRoZSBwcm9wZXJ0eSBzZXF1ZW5jZSk7CisgICAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2Uu
CisKKyAgICBcc2EgcHJldmlvdXMoKSwgaGFzTmV4dCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWVJ
dGVyYXRvcjo6aGFzUHJldmlvdXMoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aGFzUHJl
dmlvdXMoKTsKK30KKworLyohCisgICAgTW92ZXMgdGhlIGl0ZXJhdG9yIGJhY2sgYnkgb25lIHBv
c2l0aW9uLgorCisgICAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIGl0ZXJhdG9yIGxvY2F0
ZWQgYXQgdGhlIGZyb250IG9mIHRoZQorICAgIGNvbnRhaW5lciBsZWFkcyB0byB1bmRlZmluZWQg
cmVzdWx0cy4KKworICAgIFxzYSBoYXNQcmV2aW91cygpLCBuZXh0KCksIG5hbWUoKQorKi8KK3Zv
aWQgUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnByZXZpb3VzKCkKK3sKKyAgICBkX3B0ci0+cHJldmlv
dXMoKTsKK30KKworLyohCisgICAgTW92ZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmcm9udCBvZiB0
aGUgUVNjcmlwdFZhbHVlIChiZWZvcmUgdGhlCisgICAgZmlyc3QgcHJvcGVydHkpLgorCisgICAg
XHNhIHRvQmFjaygpLCBuZXh0KCkKKyovCit2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0Zy
b250KCkKK3sKKyAgICBkX3B0ci0+dG9Gcm9udCgpOworfQorCisvKiEKKyAgICBNb3ZlcyB0aGUg
aXRlcmF0b3IgdG8gdGhlIGJhY2sgb2YgdGhlIFFTY3JpcHRWYWx1ZSAoYWZ0ZXIgdGhlCisgICAg
bGFzdCBwcm9wZXJ0eSkuCisKKyAgICBcc2EgdG9Gcm9udCgpLCBwcmV2aW91cygpCisqLwordm9p
ZCBRU2NyaXB0VmFsdWVJdGVyYXRvcjo6dG9CYWNrKCkKK3sKKyAgICBkX3B0ci0+dG9CYWNrKCk7
Cit9CisKKy8qIQorICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhh
dCB3YXMganVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAg
IFxzYSB2YWx1ZSgpLCBmbGFncygpCisqLworUVN0cmluZyBRU2NyaXB0VmFsdWVJdGVyYXRvcjo6
bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5uYW1lKCk7Cit9CisKKy8qIQorICAg
IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3YXMganVtcGVkIG92
ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKyovCitRU2NyaXB0U3RyaW5nIFFT
Y3JpcHRWYWx1ZUl0ZXJhdG9yOjpzY3JpcHROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNj
cmlwdFN0cmluZ1ByaXZhdGU6OmdldChkX3B0ci0+c2NyaXB0TmFtZSgpKTsKK30KKworLyohCisg
ICAgUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3YXMganVtcGVk
IG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAgIFxzYSBzZXRWYWx1
ZSgpLCBuYW1lKCkKKyovCitRU2NyaXB0VmFsdWUgUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnZhbHVl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRfcHRyLT52
YWx1ZSgpKTsKK30KKworLyohCisgICAgU2V0cyB0aGUgXGEgdmFsdWUgb2YgdGhlIGxhc3QgcHJv
cGVydHkgdGhhdCB3YXMganVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMo
KS4KKworICAgIFxzYSB2YWx1ZSgpLCBuYW1lKCkKKyovCit2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJh
dG9yOjpzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGRfcHRyLT5z
ZXRWYWx1ZShRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQodmFsdWUpKTsKK30KKworLyohCisgICAg
UmVtb3ZlcyB0aGUgbGFzdCBwcm9wZXJ0eSB0aGF0IHdhcyBqdW1wZWQgb3ZlciB1c2luZyBuZXh0
KCkKKyAgICBvciBwcmV2aW91cygpLgorCisgICAgXHNhIHNldFZhbHVlKCkKKyovCit2b2lkIFFT
Y3JpcHRWYWx1ZUl0ZXJhdG9yOjpyZW1vdmUoKQoreworICAgIGRfcHRyLT5yZW1vdmUoKTsKK30K
KworLyohCisgICAgUmV0dXJucyB0aGUgZmxhZ3Mgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3
YXMganVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAgIFxz
YSB2YWx1ZSgpCisqLworUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzIFFTY3JpcHRWYWx1ZUl0
ZXJhdG9yOjpmbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5mbGFncygpOworfQor
CisvKiEKKyAgICBNYWtlcyB0aGUgaXRlcmF0b3Igb3BlcmF0ZSBvbiBcYSBvYmplY3QuIFRoZSBp
dGVyYXRvciBpcyBzZXQgdG8gYmUKKyAgICBhdCB0aGUgZnJvbnQgb2YgdGhlIHNlcXVlbmNlIG9m
IHByb3BlcnRpZXMgKGJlZm9yZSB0aGUgZmlyc3QKKyAgICBwcm9wZXJ0eSkuCisqLworUVNjcmlw
dFZhbHVlSXRlcmF0b3ImIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpvcGVyYXRvcj0oUVNjcmlwdFZh
bHVlJiBvYmplY3QpCit7CisgICAgZF9wdHIgPSBuZXcgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2
YXRlKFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChvYmplY3QpKTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlaXRlcmF0
b3IuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVpdGVyYXRvci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTA2NjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHR2YWx1ZWl0ZXJhdG9y
X2gKKyNkZWZpbmUgcXNjcmlwdHZhbHVlaXRlcmF0b3JfaAorCisjaW5jbHVkZSAicXRzY3JpcHRn
bG9iYWwuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisjaW5jbHVkZSA8UXRDb3JlL3Fz
aGFyZWRkYXRhLmg+CisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisKK2NsYXNzIFFTY3JpcHRW
YWx1ZTsKK2NsYXNzIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTsKKworCitjbGFzcyBRX0pB
VkFTQ1JJUFRfRVhQT1JUIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBRU2Ny
aXB0VmFsdWVJdGVyYXRvcihjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKTsKKyAgICB+UVNjcmlw
dFZhbHVlSXRlcmF0b3IoKTsKKworICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0OworICAgIHZvaWQg
bmV4dCgpOworCisgICAgYm9vbCBoYXNQcmV2aW91cygpIGNvbnN0OworICAgIHZvaWQgcHJldmlv
dXMoKTsKKworICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFFTY3JpcHRTdHJpbmcgc2Ny
aXB0TmFtZSgpIGNvbnN0OworCisgICAgUVNjcmlwdFZhbHVlIHZhbHVlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKTsKKworICAgIHZvaWQgcmVt
b3ZlKCk7CisgICAgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzIGZsYWdzKCkgY29uc3Q7CisK
KyAgICB2b2lkIHRvRnJvbnQoKTsKKyAgICB2b2lkIHRvQmFjaygpOworCisgICAgUVNjcmlwdFZh
bHVlSXRlcmF0b3ImIG9wZXJhdG9yPShRU2NyaXB0VmFsdWUmIHZhbHVlKTsKK3ByaXZhdGU6Cisg
ICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZh
dGU+IGRfcHRyOworCisgICAgUV9ERUNMQVJFX1BSSVZBVEUoUVNjcmlwdFZhbHVlSXRlcmF0b3Ip
CisgICAgUV9ESVNBQkxFX0NPUFkoUVNjcmlwdFZhbHVlSXRlcmF0b3IpCit9OworCisjZW5kaWYg
Ly8gcXNjcmlwdHZhbHVlaXRlcmF0b3JfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2Ny
aXB0dmFsdWVpdGVyYXRvcl9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzI5YjE5ZAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0
dmFsdWVpdGVyYXRvcl9wLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgcXNjcmlwdHZhbHVlaXRlcmF0b3JfcF9oCisjZGVmaW5lIHFzY3JpcHR2YWx1ZWl0
ZXJhdG9yX3BfaAorCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlX3AuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKyNpbmNsdWRlIDxRdENv
cmUvcXZlY3Rvci5oPgorCitjbGFzcyBRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6IHB1Ymxp
YyBRU2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZUl0ZXJhdG9y
UHJpdmF0ZShjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiB2YWx1ZSk7CisgICAgaW5saW5lIH5R
U2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGUoKTsKKworICAgIGlubGluZSBib29sIGhhc05leHQo
KTsKKyAgICBpbmxpbmUgdm9pZCBuZXh0KCk7CisKKyAgICBpbmxpbmUgYm9vbCBoYXNQcmV2aW91
cygpOworICAgIGlubGluZSB2b2lkIHByZXZpb3VzKCk7CisKKyAgICBpbmxpbmUgUVN0cmluZyBu
YW1lKCkgY29uc3Q7CisgICAgaW5saW5lIFFTY3JpcHRTdHJpbmdQcml2YXRlKiBzY3JpcHROYW1l
KCkgY29uc3Q7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZSogdmFsdWUoKSBjb25z
dDsKKyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiB2
YWx1ZSk7CisKKyAgICBpbmxpbmUgdm9pZCByZW1vdmUoKTsKKworICAgIGlubGluZSB2b2lkIHRv
RnJvbnQoKTsKKyAgICBpbmxpbmUgdm9pZCB0b0JhY2soKTsKKworICAgIFFTY3JpcHRWYWx1ZTo6
UHJvcGVydHlGbGFncyBmbGFncygpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgp
IGNvbnN0OworcHJpdmF0ZToKKyAgICBpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2lu
ZSgpIGNvbnN0OworCisgICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFs
dWVQcml2YXRlPiBtX29iamVjdDsKKyAgICBRVmVjdG9yPEpTU3RyaW5nUmVmPiBtX25hbWVzOwor
ICAgIFFNdXRhYmxlVmVjdG9ySXRlcmF0b3I8SlNTdHJpbmdSZWY+IG1faWR4OworfTsKKworaW5s
aW5lIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6UVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2
YXRlKGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqIHZhbHVlKQorICAgIDogbV9vYmplY3QoY29u
c3RfY2FzdDxRU2NyaXB0VmFsdWVQcml2YXRlKj4odmFsdWUpKQorICAgICwgbV9pZHgobV9uYW1l
cykKK3sKKyAgICAvLyBGSVhNRSBUaGVyZSBpcyBhc3N1bXB0aW9uIHRoYXQgZ2xvYmFsIG9iamVj
dCB3YXNuJ3QgY2hhbmdlZCAoYnVnIDQxODM5KS4KKyAgICAvLyBGSVhNRSBXZSBjYW4ndCB1c2Ug
QyBBUEkgZnVuY3Rpb24gSlNPYmplY3RHZXRQcm9wZXJ0eU5hbWVzIGFzIGl0IHJldHVybnMgb25s
eSBlbnVtZXJhYmxlIHByb3BlcnRpZXMuCisgICAgaWYgKGNvbnN0X2Nhc3Q8UVNjcmlwdFZhbHVl
UHJpdmF0ZSo+KHZhbHVlKS0+aXNPYmplY3QoKSkgeworICAgICAgICBzdGF0aWMgSlNTdHJpbmdS
ZWYgb2JqZWN0TmFtZSA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKCJPYmplY3QiKTsKKyAg
ICAgICAgc3RhdGljIEpTU3RyaW5nUmVmIGdldE93blByb3BlcnR5TmFtZXNOYW1lID0gUVNjcmlw
dENvbnZlcnRlcjo6dG9TdHJpbmcoImdldE93blByb3BlcnR5TmFtZXMiKTsKKworICAgICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVj
dCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdCgqZW5naW5lKCkpOworICAgICAgICBRX0FTU0VS
VChKU1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgSlNW
YWx1ZVJlZiBvYmplY3RDb25zdHJ1Y3RvciA9IEpTT2JqZWN0R2V0UHJvcGVydHkoKmVuZ2luZSgp
LCBnbG9iYWxPYmplY3QsIG9iamVjdE5hbWUsICZleGNlcHRpb24pOworICAgICAgICBRX0FTU0VS
VChKU1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBvYmplY3RDb25zdHJ1Y3RvcikpOworICAgICAg
ICBRX0FTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBwcm9wZXJ0eU5hbWVz
R2V0dGVyID0gSlNPYmplY3RHZXRQcm9wZXJ0eSgqZW5naW5lKCksIGNvbnN0X2Nhc3Q8SlNPYmpl
Y3RSZWY+KG9iamVjdENvbnN0cnVjdG9yKSwgZ2V0T3duUHJvcGVydHlOYW1lc05hbWUsICZleGNl
cHRpb24pOworICAgICAgICBRX0FTU0VSVChKU1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBwcm9w
ZXJ0eU5hbWVzR2V0dGVyKSk7CisgICAgICAgIFFfQVNTRVJUKCFleGNlcHRpb24pOworCisgICAg
ICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7ICptX29iamVjdCwgfTsKKyAgICAgICAgSlNP
YmplY3RSZWYgcHJvcGVydHlOYW1lcworICAgICAgICAgICAgICAgID0gY29uc3RfY2FzdDxKU09i
amVjdFJlZj4oSlNPYmplY3RDYWxsQXNGdW5jdGlvbigqZW5naW5lKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rf
Y2FzdDxKU09iamVjdFJlZj4ocHJvcGVydHlOYW1lc0dldHRlciksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpc09i
amVjdCAqLyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGFyZ3VtZW50Q291bnQgKi8gMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmV4Y2VwdGlvbikpOworICAgICAgICBRX0FTU0VSVChKU1ZhbHVlSXNPYmpl
Y3QoKmVuZ2luZSgpLCBwcm9wZXJ0eU5hbWVzKSk7CisgICAgICAgIFFfQVNTRVJUKCFleGNlcHRp
b24pOworICAgICAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbGVuZ3RoTmFtZSA9IFFTY3JpcHRDb252
ZXJ0ZXI6OnRvU3RyaW5nKCJsZW5ndGgiKTsKKyAgICAgICAgaW50IGNvdW50ID0gSlNWYWx1ZVRv
TnVtYmVyKCplbmdpbmUoKSwgSlNPYmplY3RHZXRQcm9wZXJ0eSgqZW5naW5lKCksIHByb3BlcnR5
TmFtZXMsIGxlbmd0aE5hbWUsICZleGNlcHRpb24pLCAmZXhjZXB0aW9uKTsKKworICAgICAgICBR
X0FTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgbV9uYW1lcy5yZXNlcnZlKGNvdW50KTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBKU1Zh
bHVlUmVmIHRtcCA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KCplbmdpbmUoKSwgcHJvcGVy
dHlOYW1lcywgaSwgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICBtX25hbWVzLmFwcGVuZChKU1Zh
bHVlVG9TdHJpbmdDb3B5KCplbmdpbmUoKSwgdG1wLCAmZXhjZXB0aW9uKSk7CisgICAgICAgICAg
ICBRX0FTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBtX2lkeCA9IG1fbmFt
ZXM7CisgICAgfSBlbHNlCisgICAgICAgIG1fb2JqZWN0ID0gMDsKK30KKworaW5saW5lIFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6flFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZSgpCit7
CisgICAgUVZlY3RvcjxKU1N0cmluZ1JlZj46OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX25hbWVzLmNv
bnN0QmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSBtX25hbWVzLmNvbnN0RW5kKCk7ICsraSkKKyAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKCppKTsKK30KKworaW5saW5lIGJvb2wgUVNjcmlwdFZhbHVl
SXRlcmF0b3JQcml2YXRlOjpoYXNOZXh0KCkKK3sKKyAgICByZXR1cm4gbV9pZHguaGFzTmV4dCgp
OworfQorCitpbmxpbmUgdm9pZCBRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6Om5leHQoKQor
eworICAgIC8vIEZJWE1FIChRdDUpIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSB2YWx1ZSAo
UVRCVUctMTEyMjYpLgorICAgIG1faWR4Lm5leHQoKTsKK30KKworaW5saW5lIGJvb2wgUVNjcmlw
dFZhbHVlSXRlcmF0b3JQcml2YXRlOjpoYXNQcmV2aW91cygpCit7CisgICAgcmV0dXJuIG1faWR4
Lmhhc1ByZXZpb3VzKCk7Cit9CisKK2lubGluZSB2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJp
dmF0ZTo6cHJldmlvdXMoKQoreworICAgIG1faWR4LnByZXZpb3VzKCk7Cit9CisKK2lubGluZSBR
U3RyaW5nIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6bmFtZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CisgICAgcmV0dXJuIFFT
Y3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKG1faWR4LnZhbHVlKCkpOworfQorCitpbmxpbmUgUVNj
cmlwdFN0cmluZ1ByaXZhdGUqIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2NyaXB0TmFt
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBuZXcgUVNj
cmlwdFN0cmluZ1ByaXZhdGUoKTsKKyAgICByZXR1cm4gbmV3IFFTY3JpcHRTdHJpbmdQcml2YXRl
KFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKG1faWR4LnZhbHVlKCkpKTsKK30KKworaW5saW5l
IFFTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6dmFsdWUo
KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbmV3IFFTY3Jp
cHRWYWx1ZVByaXZhdGUoKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNW
YWx1ZVJlZiB2YWx1ZSA9IG1fb2JqZWN0LT5wcm9wZXJ0eShtX2lkeC52YWx1ZSgpLCAmZXhjZXB0
aW9uKTsKKyAgICBlbmdpbmUoKS0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2
b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2V0VmFsdWUoY29uc3QgUVNjcmlwdFZh
bHVlUHJpdmF0ZSogdmFsdWUpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgbV9vYmplY3QtPnNldFByb3Bl
cnR5KG1faWR4LnZhbHVlKCksICp2YWx1ZSwgLyogZmxhZ3MgKi8gMCwgJmV4Y2VwdGlvbik7Cisg
ICAgZW5naW5lKCktPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworfQorCitpbmxpbmUgdm9pZCBR
U2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6OnJlbW92ZSgpCit7CisgICAgaWYgKCFpc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAg
bV9vYmplY3QtPmRlbGV0ZVByb3BlcnR5KG1faWR4LnZhbHVlKCksICZleGNlcHRpb24pOworICAg
IGVuZ2luZSgpLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBtX2lkeC5yZW1vdmUoKTsK
K30KKworaW5saW5lIHZvaWQgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjp0b0Zyb250KCkK
K3sKKyAgICBtX2lkeC50b0Zyb250KCk7Cit9CisKK2lubGluZSB2b2lkIFFTY3JpcHRWYWx1ZUl0
ZXJhdG9yUHJpdmF0ZTo6dG9CYWNrKCkKK3sKKyAgICBtX2lkeC50b0JhY2soKTsKK30KKworUVNj
cmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6Zmxh
Z3MoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gUVNjcmlw
dFZhbHVlOjpQcm9wZXJ0eUZsYWdzKDApOworICAgIHJldHVybiBtX29iamVjdC0+cHJvcGVydHlG
bGFncyhtX2lkeC52YWx1ZSgpLCBRU2NyaXB0VmFsdWU6OlJlc29sdmVMb2NhbCk7Cit9CisKK2lu
bGluZSBib29sIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6aXNWYWxpZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fb2JqZWN0OworfQorCitpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZhdGUq
IFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6ZW5naW5lKCkgY29uc3QKK3sKKyAgICBRX0FT
U0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtX29iamVjdC0+ZW5naW5lKCk7Cit9CisKKyNl
bmRpZiAvLyBxc2NyaXB0dmFsdWVpdGVyYXRvcl9wX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLnBy
byBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yL3FzY3JpcHR2
YWx1ZWl0ZXJhdG9yLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzE0
ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZh
bHVlaXRlcmF0b3IvcXNjcmlwdHZhbHVlaXRlcmF0b3IucHJvCkBAIC0wLDAgKzEsNyBAQAorVEVN
UExBVEUgPSBhcHAKK1RBUkdFVCA9IHRzdF9xc2NyaXB0dmFsdWVpdGVyYXRvcgorUVQgKz0gdGVz
dGxpYgoraW5jbHVkZSguLi90ZXN0cy5wcmkpCisKK1NPVVJDRVMgKz0gdHN0X3FzY3JpcHR2YWx1
ZWl0ZXJhdG9yLmNwcAorCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2Ny
aXB0dmFsdWVpdGVyYXRvci90c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlaXRlcmF0b3IvdHN0X3FzY3JpcHR2YWx1ZWl0ZXJh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QwMDQyCi0tLSAv
ZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlaXRlcmF0
b3IvdHN0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiB0c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3JfaAorI2RlZmlu
ZSB0c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3JfaAorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5o
IgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZWl0ZXJh
dG9yLmgiCisjaW5jbHVkZSA8UXRDb3JlL3FoYXNoLmg+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVz
dD4KKworY2xhc3MgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yIDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IoKTsK
KyAgICB2aXJ0dWFsIH50c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IoKTsKKworcHJpdmF0ZSBzbG90
czoKKyAgICB2b2lkIGl0ZXJhdGVGb3J3YXJkX2RhdGEoKTsKKyAgICB2b2lkIGl0ZXJhdGVGb3J3
YXJkKCk7CisgICAgdm9pZCBpdGVyYXRlQmFja3dhcmRfZGF0YSgpOworICAgIHZvaWQgaXRlcmF0
ZUJhY2t3YXJkKCk7CisgICAgdm9pZCBpdGVyYXRlQXJyYXlfZGF0YSgpOworICAgIHZvaWQgaXRl
cmF0ZUFycmF5KCk7CisgICAgdm9pZCBpdGVyYXRlQmFja0FuZEZvcnRoKCk7CisgICAgdm9pZCBz
ZXRWYWx1ZSgpOworICAgIHZvaWQgcmVtb3ZlKCk7CisgICAgdm9pZCByZW1vdmVNaXhlZCgpOwor
ICAgIHZvaWQgcmVtb3ZlVW5kZWxldGFibGUoKTsKKyAgICB2b2lkIGl0ZXJhdGVTdHJpbmcoKTsK
KyAgICB2b2lkIGFzc2lnbk9iamVjdFRvSXRlcmF0b3IoKTsKK307CisKK3RzdF9RU2NyaXB0VmFs
dWVJdGVyYXRvcjo6dHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yKCkKK3sKK30KKwordHN0X1FTY3Jp
cHRWYWx1ZUl0ZXJhdG9yOjp+dHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yKCkKK3sKK30KKwordm9p
ZCB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVGb3J3YXJkX2RhdGEoKQoreworICAg
IFFUZXN0OjphZGRDb2x1bW48UVN0cmluZ0xpc3Q+KCJwcm9wZXJ0eU5hbWVzIik7CisgICAgUVRl
c3Q6OmFkZENvbHVtbjxRU3RyaW5nTGlzdD4oInByb3BlcnR5VmFsdWVzIik7CisKKyAgICBRVGVz
dDo6bmV3Um93KCJubyBwcm9wZXJ0aWVzIikKKyAgICAgICAgPDwgUVN0cmluZ0xpc3QoKSA8PCBR
U3RyaW5nTGlzdCgpOworICAgIFFUZXN0OjpuZXdSb3coImZvbz1iYXIiKQorICAgICAgICA8PCAo
UVN0cmluZ0xpc3QoKSA8PCAiZm9vIikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImJh
ciIpOworICAgIFFUZXN0OjpuZXdSb3coImZvbz1iYXIsIGJhej0xMjMiKQorICAgICAgICA8PCAo
UVN0cmluZ0xpc3QoKSA8PCAiZm9vIiA8PCAiYmF6IikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0
KCkgPDwgImJhciIgPDwgIjEyMyIpOworICAgIFFUZXN0OjpuZXdSb3coImZvbz1iYXIsIGJhej0x
MjMsIHJhYj1vb2YiKQorICAgICAgICA8PCAoUVN0cmluZ0xpc3QoKSA8PCAiZm9vIiA8PCAiYmF6
IiA8PCAicmFiIikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImJhciIgPDwgIjEyMyIg
PDwgIm9vZiIpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUZv
cndhcmQoKQoreworICAgIFFGRVRDSChRU3RyaW5nTGlzdCwgcHJvcGVydHlOYW1lcyk7CisgICAg
UUZFVENIKFFTdHJpbmdMaXN0LCBwcm9wZXJ0eVZhbHVlcyk7CisgICAgUU1hcDxRU3RyaW5nLCBR
U3RyaW5nPiBwbWFwOworICAgIFFfQVNTRVJUKHByb3BlcnR5TmFtZXMuc2l6ZSgpID09IHByb3Bl
cnR5VmFsdWVzLnNpemUoKSk7CisKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2Ny
aXB0VmFsdWUgb2JqZWN0ID0gZW5naW5lLm5ld09iamVjdCgpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcHJvcGVydHlOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBRU3RyaW5nIG5hbWUg
PSBwcm9wZXJ0eU5hbWVzLmF0KGkpOworICAgICAgICBRU3RyaW5nIHZhbHVlID0gcHJvcGVydHlW
YWx1ZXMuYXQoaSk7CisgICAgICAgIHBtYXAuaW5zZXJ0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAg
b2JqZWN0LnNldFByb3BlcnR5KG5hbWUsIFFTY3JpcHRWYWx1ZSgmZW5naW5lLCB2YWx1ZSkpOwor
ICAgIH0KKyAgICBRU2NyaXB0VmFsdWUgb3RoZXJPYmplY3QgPSBlbmdpbmUubmV3T2JqZWN0KCk7
CisgICAgb3RoZXJPYmplY3Quc2V0UHJvcGVydHkoImZvbyIsIFFTY3JpcHRWYWx1ZSgmZW5naW5l
LCAxMjM0NTYpKTsKKyAgICBvdGhlck9iamVjdC5zZXRQcm9wZXJ0eSgicHJvdG9Qcm9wZXJ0eSIs
IFFTY3JpcHRWYWx1ZSgmZW5naW5lLCA2NTQzMjEpKTsKKyAgICBvYmplY3Quc2V0UHJvdG90eXBl
KG90aGVyT2JqZWN0KTsgLy8gc2hvdWxkIG5vdCBhZmZlY3QgaXRlcmF0b3IKKworICAgIFFTdHJp
bmdMaXN0IGxzdDsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmplY3QpOworICAgIHdo
aWxlICghcG1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAgICAgaXQu
bmV4dCgpOworICAgICAgICBRU3RyaW5nIG5hbWUgPSBpdC5uYW1lKCk7CisgICAgICAgIFFDT01Q
QVJFKHBtYXAuY29udGFpbnMobmFtZSksIHRydWUpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1l
KCksIG5hbWUpOworICAgICAgICBRQ09NUEFSRShpdC5mbGFncygpLCBvYmplY3QucHJvcGVydHlG
bGFncyhuYW1lKSk7CisgICAgICAgIFFDT01QQVJFKGl0LnZhbHVlKCkuc3RyaWN0bHlFcXVhbHMo
UVNjcmlwdFZhbHVlKCZlbmdpbmUsIHBtYXAudmFsdWUobmFtZSkpKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKGl0LnNjcmlwdE5hbWUoKSwgZW5naW5lLnRvU3RyaW5nSGFuZGxlKG5hbWUpKTsK
KyAgICAgICAgcG1hcC5yZW1vdmUobmFtZSk7CisgICAgICAgIGxzdC5hcHBlbmQobmFtZSk7Cisg
ICAgfQorCisgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUo
aXQuaGFzTmV4dCgpLCBmYWxzZSk7CisKKyAgICBpdC50b0Zyb250KCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsc3QuY291bnQoKTsgKytpKSB7CisgICAgICAgIFFDT01QQVJFKGl0Lmhhc05l
eHQoKSwgdHJ1ZSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFt
ZSgpLCBsc3QuYXQoaSkpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHN0LmNv
dW50KCk7ICsraSkgeworICAgICAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCB0cnVlKTsK
KyAgICAgICAgaXQucHJldmlvdXMoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBsc3Qu
YXQobHN0LmNvdW50KCktMS1pKSk7CisgICAgfQorICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3Vz
KCksIGZhbHNlKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVC
YWNrd2FyZF9kYXRhKCkKK3sKKyAgICBpdGVyYXRlRm9yd2FyZF9kYXRhKCk7Cit9CisKK3ZvaWQg
dHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlQmFja3dhcmQoKQoreworICAgIFFGRVRD
SChRU3RyaW5nTGlzdCwgcHJvcGVydHlOYW1lcyk7CisgICAgUUZFVENIKFFTdHJpbmdMaXN0LCBw
cm9wZXJ0eVZhbHVlcyk7CisgICAgUU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBwbWFwOworICAgIFFf
QVNTRVJUKHByb3BlcnR5TmFtZXMuc2l6ZSgpID09IHByb3BlcnR5VmFsdWVzLnNpemUoKSk7CisK
KyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUgb2JqZWN0ID0gZW5n
aW5lLm5ld09iamVjdCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5z
aXplKCk7ICsraSkgeworICAgICAgICBRU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWVzLmF0KGkp
OworICAgICAgICBRU3RyaW5nIHZhbHVlID0gcHJvcGVydHlWYWx1ZXMuYXQoaSk7CisgICAgICAg
IHBtYXAuaW5zZXJ0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgb2JqZWN0LnNldFByb3BlcnR5KG5h
bWUsIFFTY3JpcHRWYWx1ZSgmZW5naW5lLCB2YWx1ZSkpOworICAgIH0KKworICAgIFFTdHJpbmdM
aXN0IGxzdDsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmplY3QpOworICAgIGl0LnRv
QmFjaygpOworICAgIHdoaWxlICghcG1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUUNPTVBBUkUo
aXQuaGFzUHJldmlvdXMoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3Vz
KCksIHRydWUpOworICAgICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBRU3RyaW5nIG5hbWUg
PSBpdC5uYW1lKCk7CisgICAgICAgIFFDT01QQVJFKHBtYXAuY29udGFpbnMobmFtZSksIHRydWUp
OworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIG5hbWUpOworICAgICAgICBRQ09NUEFSRShp
dC5mbGFncygpLCBvYmplY3QucHJvcGVydHlGbGFncyhuYW1lKSk7CisgICAgICAgIFFDT01QQVJF
KGl0LnZhbHVlKCkuc3RyaWN0bHlFcXVhbHMoUVNjcmlwdFZhbHVlKCZlbmdpbmUsIHBtYXAudmFs
dWUobmFtZSkpKSwgdHJ1ZSk7CisgICAgICAgIHBtYXAucmVtb3ZlKG5hbWUpOworICAgICAgICBs
c3QuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCks
IGZhbHNlKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisKKyAgICBp
dC50b0JhY2soKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxzdC5jb3VudCgpOyArK2kpIHsK
KyAgICAgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgdHJ1ZSk7CisgICAgICAgIGl0LnBy
ZXZpb3VzKCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgbHN0LmF0KGkpKTsKKyAgICB9
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxzdC5jb3VudCgpOyArK2kpIHsKKyAgICAgICAg
UUNPTVBBUkUoaXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAg
ICBRQ09NUEFSRShpdC5uYW1lKCksIGxzdC5hdChsc3QuY291bnQoKS0xLWkpKTsKKyAgICB9Cisg
ICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxzZSk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRW
YWx1ZUl0ZXJhdG9yOjppdGVyYXRlQXJyYXlfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENvbHVt
bjxRU3RyaW5nTGlzdD4oImlucHV0UHJvcGVydHlOYW1lcyIpOworICAgIFFUZXN0OjphZGRDb2x1
bW48UVN0cmluZ0xpc3Q+KCJpbnB1dFByb3BlcnR5VmFsdWVzIik7CisgICAgUVRlc3Q6OmFkZENv
bHVtbjxRU3RyaW5nTGlzdD4oInByb3BlcnR5TmFtZXMiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1u
PFFTdHJpbmdMaXN0PigicHJvcGVydHlWYWx1ZXMiKTsKKyAgICBRVGVzdDo6bmV3Um93KCJubyBl
bGVtZW50cyIpIDw8IFFTdHJpbmdMaXN0KCkgPDwgUVN0cmluZ0xpc3QoKSA8PCBRU3RyaW5nTGlz
dCgpIDw8IFFTdHJpbmdMaXN0KCk7CisKKyAgICBRVGVzdDo6bmV3Um93KCIwPWZvbywgMT1iYXJy
IikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0KCkgPDwgIjAiIDw8ICIxIikKKyAgICAgICAgPDwg
KFFTdHJpbmdMaXN0KCkgPDwgImZvbyIgPDwgImJhciIpCisgICAgICAgIDw8IChRU3RyaW5nTGlz
dCgpIDw8ICIwIiA8PCAiMSIpCisgICAgICAgIDw8IChRU3RyaW5nTGlzdCgpIDw8ICJmb28iIDw8
ICJiYXIiKTsKKworICAgIFFUZXN0OjpuZXdSb3coIjA9Zm9vLCAzPWJhcnIiKQorICAgICAgICA8
PCAoUVN0cmluZ0xpc3QoKSA8PCAiMCIgPDwgIjEiIDw8ICIyIiA8PCAiMyIpCisgICAgICAgIDw8
IChRU3RyaW5nTGlzdCgpIDw8ICJmb28iIDw8ICIiIDw8ICIiIDw8ICJiYXIiKQorICAgICAgICA8
PCAoUVN0cmluZ0xpc3QoKSA8PCAiMCIgPDwgIjEiIDw8ICIyIiA8PCAiMyIpCisgICAgICAgIDw8
IChRU3RyaW5nTGlzdCgpIDw8ICJmb28iIDw8ICIiIDw8ICIiIDw8ICJiYXIiKTsKK30KKwordm9p
ZCB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVBcnJheSgpCit7CisgICAgUUZFVENI
KFFTdHJpbmdMaXN0LCBpbnB1dFByb3BlcnR5TmFtZXMpOworICAgIFFGRVRDSChRU3RyaW5nTGlz
dCwgaW5wdXRQcm9wZXJ0eVZhbHVlcyk7CisgICAgUUZFVENIKFFTdHJpbmdMaXN0LCBwcm9wZXJ0
eU5hbWVzKTsKKyAgICBRRkVUQ0goUVN0cmluZ0xpc3QsIHByb3BlcnR5VmFsdWVzKTsKKworICAg
IFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZSBhcnJheSA9IGVuZ2luZS5u
ZXdBcnJheSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRQcm9wZXJ0eU5hbWVzLnNp
emUoKTsgKytpKQorICAgICAgICBhcnJheS5zZXRQcm9wZXJ0eShpbnB1dFByb3BlcnR5TmFtZXMu
YXQoaSksIGlucHV0UHJvcGVydHlWYWx1ZXMuYXQoaSkpOworCisgICAgaW50IGxlbmd0aCA9IGFy
cmF5LnByb3BlcnR5KCJsZW5ndGgiKS50b0ludDMyKCk7CisgICAgUUNPTVBBUkUobGVuZ3RoLCBw
cm9wZXJ0eU5hbWVzLnNpemUoKSk7CisgICAgUVNjcmlwdFZhbHVlSXRlcmF0b3IgaXQoYXJyYXkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgUUNPTVBB
UkUoaXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09N
UEFSRShpdC5uYW1lKCksIHByb3BlcnR5TmFtZXMuYXQoaSkpOworICAgICAgICBRQ09NUEFSRShp
dC5mbGFncygpLCBhcnJheS5wcm9wZXJ0eUZsYWdzKHByb3BlcnR5TmFtZXMuYXQoaSkpKTsKKyAg
ICAgICAgUVZFUklGWShpdC52YWx1ZSgpLnN0cmljdGx5RXF1YWxzKGFycmF5LnByb3BlcnR5KHBy
b3BlcnR5TmFtZXMuYXQoaSkpKSk7CisgICAgICAgIFFDT01QQVJFKGl0LnZhbHVlKCkudG9TdHJp
bmcoKSwgcHJvcGVydHlWYWx1ZXMuYXQoaSkpOworICAgIH0KKyAgICBRVkVSSUZZKGl0Lmhhc05l
eHQoKSk7CisgICAgaXQubmV4dCgpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6
ZnJvbUxhdGluMSgibGVuZ3RoIikpOworICAgIFFWRVJJRlkoaXQudmFsdWUoKS5pc051bWJlcigp
KTsKKyAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnRvSW50MzIoKSwgbGVuZ3RoKTsKKyAgICBRQ09N
UEFSRShpdC5mbGFncygpLCBRU2NyaXB0VmFsdWU6OlByb3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVl
OjpTa2lwSW5FbnVtZXJhdGlvbiB8IFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUpKTsKKworICAg
IGl0LnByZXZpb3VzKCk7CisgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgbGVuZ3RoID4g
MCk7CisgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IGl0LnByZXZpb3VzKCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgcHJvcGVydHlOYW1l
cy5hdChpKSk7CisgICAgICAgIFFDT01QQVJFKGl0LmZsYWdzKCksIGFycmF5LnByb3BlcnR5Rmxh
Z3MocHJvcGVydHlOYW1lcy5hdChpKSkpOworICAgICAgICBRVkVSSUZZKGl0LnZhbHVlKCkuc3Ry
aWN0bHlFcXVhbHMoYXJyYXkucHJvcGVydHkocHJvcGVydHlOYW1lcy5hdChpKSkpKTsKKyAgICAg
ICAgUUNPTVBBUkUoaXQudmFsdWUoKS50b1N0cmluZygpLCBwcm9wZXJ0eVZhbHVlcy5hdChpKSk7
CisgICAgICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCksIGkgPiAwKTsKKyAgICB9CisgICAg
UUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgZmFsc2UpOworCisgICAgLy8gaGFzTmV4dCgpIGFu
ZCBoYXNQcmV2aW91cygpIGNhY2hlIHRoZWlyIHJlc3VsdDsgdmVyaWZ5IHRoYXQgdGhlIHJlc3Vs
dCBpcyBpbiBzeW5jCisgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgUVZFUklGWShpdC5o
YXNOZXh0KCkpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUo
KSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMCIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNOZXh0
KCkpOworICAgICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCks
IFFTdHJpbmc6OmZyb21MYXRpbjEoIjAiKSk7CisgICAgICAgIFFWRVJJRlkoIWl0Lmhhc1ByZXZp
b3VzKCkpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwg
UVN0cmluZzo6ZnJvbUxhdGluMSgiMCIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNQcmV2aW91
cygpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFT
dHJpbmc6OmZyb21MYXRpbjEoIjEiKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gc2FtZSB0
ZXN0IGFzIG9iamVjdDoKKyAgICAgICAgUVNjcmlwdFZhbHVlIG9yaWdpbmFsQXJyYXkgPSBlbmdp
bmUubmV3QXJyYXkoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFByb3BlcnR5
TmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvcmlnaW5hbEFycmF5LnNldFByb3BlcnR5
KGlucHV0UHJvcGVydHlOYW1lcy5hdChpKSwgaW5wdXRQcm9wZXJ0eVZhbHVlcy5hdChpKSk7CisK
KyAgICAgICAgUVNjcmlwdFZhbHVlIGFycmF5ID0gb3JpZ2luYWxBcnJheS50b09iamVjdCgpOwor
ICAgICAgICBpbnQgbGVuZ3RoID0gYXJyYXkucHJvcGVydHkoImxlbmd0aCIpLnRvSW50MzIoKTsK
KyAgICAgICAgUUNPTVBBUkUobGVuZ3RoLCBwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CisgICAgICAg
IFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KGFycmF5KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCB0
cnVlKTsKKyAgICAgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgICAgIFFDT01QQVJFKGl0Lm5h
bWUoKSwgcHJvcGVydHlOYW1lcy5hdChpKSk7CisgICAgICAgICAgICBRQ09NUEFSRShpdC5mbGFn
cygpLCBhcnJheS5wcm9wZXJ0eUZsYWdzKHByb3BlcnR5TmFtZXMuYXQoaSkpKTsKKyAgICAgICAg
ICAgIFFWRVJJRlkoaXQudmFsdWUoKS5zdHJpY3RseUVxdWFscyhhcnJheS5wcm9wZXJ0eShwcm9w
ZXJ0eU5hbWVzLmF0KGkpKSkpOworICAgICAgICAgICAgUUNPTVBBUkUoaXQudmFsdWUoKS50b1N0
cmluZygpLCBwcm9wZXJ0eVZhbHVlcy5hdChpKSk7CisgICAgICAgIH0KKyAgICAgICAgUUNPTVBB
UkUoaXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09N
UEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImxlbmd0aCIpKTsKKyAgICB9Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlQmFja0FuZEZvcnRoKCkK
K3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1
ZSBvYmplY3QgPSBlbmdpbmUubmV3T2JqZWN0KCk7CisgICAgICAgIG9iamVjdC5zZXRQcm9wZXJ0
eSgiZm9vIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsICJiYXIiKSk7CisgICAgICAgIG9iamVjdC5z
ZXRQcm9wZXJ0eSgicmFiIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsICJvb2YiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFFTY3JpcHRWYWx1ZTo6U2tpcEluRW51bWVyYXRpb24pOyAvLyBz
aG91bGQgbm90IGFmZmVjdCBpdGVyYXRvcgorICAgICAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBp
dChvYmplY3QpOworICAgICAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgICAgIGl0Lm5l
eHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7
CisgICAgICAgIFFWRVJJRlkoaXQuaGFzUHJldmlvdXMoKSk7CisgICAgICAgIGl0LnByZXZpb3Vz
KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUUxhdGluMVN0cmluZygiZm9vIikpOwor
ICAgICAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAg
ICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7CisgICAgICAgIFFW
RVJJRlkoaXQuaGFzUHJldmlvdXMoKSk7CisgICAgICAgIGl0LnByZXZpb3VzKCk7CisgICAgICAg
IFFDT01QQVJFKGl0Lm5hbWUoKSwgUUxhdGluMVN0cmluZygiZm9vIikpOworICAgICAgICBRVkVS
SUZZKGl0Lmhhc05leHQoKSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUo
aXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7CisgICAgICAgIFFWRVJJRlkoaXQuaGFz
TmV4dCgpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCks
IFFMYXRpbjFTdHJpbmcoInJhYiIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNQcmV2aW91cygp
KTsKKyAgICAgICAgaXQucHJldmlvdXMoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBR
TGF0aW4xU3RyaW5nKCJyYWIiKSk7CisgICAgICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAg
ICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJp
bmcoInJhYiIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNQcmV2aW91cygpKTsKKyAgICAgICAg
aXQucHJldmlvdXMoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5n
KCJyYWIiKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gaGFzTmV4dCgpIGFuZCBoYXNQcmV2
aW91cygpIGNhY2hlIHRoZWlyIHJlc3VsdDsgdmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBpcyBpbiBz
eW5jCisgICAgICAgIFFTY3JpcHRWYWx1ZSBvYmplY3QgPSBlbmdpbmUubmV3T2JqZWN0KCk7Cisg
ICAgICAgIG9iamVjdC5zZXRQcm9wZXJ0eSgiZm9vIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsICJi
YXIiKSk7CisgICAgICAgIG9iamVjdC5zZXRQcm9wZXJ0eSgicmFiIiwgUVNjcmlwdFZhbHVlKCZl
bmdpbmUsICJvb2YiKSk7CisgICAgICAgIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9iamVjdCk7
CisgICAgICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAg
ICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImZvbyIpKTsKKyAg
ICAgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgICAgICBpdC5wcmV2aW91cygpOworICAg
ICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImZvbyIpKTsKKyAg
ICAgICAgUVZFUklGWSghaXQuaGFzUHJldmlvdXMoKSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAg
ICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJmb28iKSk7Cisg
ICAgICAgIFFWRVJJRlkoaXQuaGFzUHJldmlvdXMoKSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAg
ICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJyYWIiKSk7Cisg
ICAgfQorfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6c2V0VmFsdWUoKQorewor
ICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZSBvYmplY3QgPSBlbmdp
bmUubmV3T2JqZWN0KCk7CisgICAgb2JqZWN0LnNldFByb3BlcnR5KCJmb28iLCBRU2NyaXB0VmFs
dWUoJmVuZ2luZSwgImJhciIpKTsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmplY3Qp
OworICAgIGl0Lm5leHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJpbmco
ImZvbyIpKTsKKyAgICBpdC5zZXRWYWx1ZShRU2NyaXB0VmFsdWUoJmVuZ2luZSwgImJheiIpKTsK
KyAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnN0cmljdGx5RXF1YWxzKFFTY3JpcHRWYWx1ZSgmZW5n
aW5lLCBRTGF0aW4xU3RyaW5nKCJiYXoiKSkpLCB0cnVlKTsKKyAgICBRQ09NUEFSRShvYmplY3Qu
cHJvcGVydHkoImZvbyIpLnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoImJheiIpKTsKKyAgICBp
dC5zZXRWYWx1ZShRU2NyaXB0VmFsdWUoJmVuZ2luZSwgInphYiIpKTsKKyAgICBRQ09NUEFSRShp
dC52YWx1ZSgpLnN0cmljdGx5RXF1YWxzKFFTY3JpcHRWYWx1ZSgmZW5naW5lLCBRTGF0aW4xU3Ry
aW5nKCJ6YWIiKSkpLCB0cnVlKTsKKyAgICBRQ09NUEFSRShvYmplY3QucHJvcGVydHkoImZvbyIp
LnRvU3RyaW5nKCksIFFMYXRpbjFTdHJpbmcoInphYiIpKTsKK30KKwordm9pZCB0c3RfUVNjcmlw
dFZhbHVlSXRlcmF0b3I6OnJlbW92ZSgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7Cisg
ICAgUVNjcmlwdFZhbHVlIG9iamVjdCA9IGVuZ2luZS5uZXdPYmplY3QoKTsKKyAgICBvYmplY3Qu
c2V0UHJvcGVydHkoImZvbyIsIFFTY3JpcHRWYWx1ZSgmZW5naW5lLCAiYmFyIiksCisgICAgICAg
ICAgICAgICAgICAgICAgIFFTY3JpcHRWYWx1ZTo6U2tpcEluRW51bWVyYXRpb24pOyAvLyBzaG91
bGQgbm90IGFmZmVjdCBpdGVyYXRvcgorICAgIG9iamVjdC5zZXRQcm9wZXJ0eSgicmFiIiwgUVNj
cmlwdFZhbHVlKCZlbmdpbmUsICJvb2YiKSk7CisgICAgUVNjcmlwdFZhbHVlSXRlcmF0b3IgaXQo
b2JqZWN0KTsKKyAgICBpdC5uZXh0KCk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4x
U3RyaW5nKCJmb28iKSk7CisgICAgaXQucmVtb3ZlKCk7CisgICAgUUNPTVBBUkUoaXQuaGFzUHJl
dmlvdXMoKSwgZmFsc2UpOworICAgIFFDT01QQVJFKG9iamVjdC5wcm9wZXJ0eSgiZm9vIikuaXNW
YWxpZCgpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUob2JqZWN0LnByb3BlcnR5KCJyYWIiKS50b1N0
cmluZygpLCBRTGF0aW4xU3RyaW5nKCJvb2YiKSk7CisgICAgaXQubmV4dCgpOworICAgIFFDT01Q
QVJFKGl0Lm5hbWUoKSwgUUxhdGluMVN0cmluZygicmFiIikpOworICAgIFFDT01QQVJFKGl0LnZh
bHVlKCkudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygib29mIikpOworICAgIFFDT01QQVJFKGl0
Lmhhc05leHQoKSwgZmFsc2UpOworICAgIGl0LnJlbW92ZSgpOworICAgIFFDT01QQVJFKG9iamVj
dC5wcm9wZXJ0eSgicmFiIikuaXNWYWxpZCgpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUoaXQuaGFz
UHJldmlvdXMoKSwgZmFsc2UpOworICAgIFFDT01QQVJFKGl0Lmhhc05leHQoKSwgZmFsc2UpOwor
fQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6cmVtb3ZlTWl4ZWQoKQoreworICAg
IC8vIFRoaXMgdGVzdCBjaGVja3MgaWYgUVNjcmlwdFZhbHVlSXRlcmF0b3IgYmVoYWl2ZXMgY29y
cmVjdGx5IGlmIGFuIG9iamVjdCdzIHByb3BlcnR5IGdvdCBkZWxldGVkCisgICAgLy8gaW4gZGlm
ZmVyZW50IHdheS4KKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWUg
b2JqZWN0ID0gZW5naW5lLmV2YWx1YXRlKCJvID0gbmV3IE9iamVjdDsgbyIpOworICAgIG9iamVj
dC5zZXRQcm9wZXJ0eSgiYSIsIFFTY3JpcHRWYWx1ZSgxMjQpLCBRU2NyaXB0VmFsdWU6OlNraXBJ
bkVudW1lcmF0aW9uKTsKKyAgICBvYmplY3Quc2V0UHJvcGVydHkoImIiLCBRU2NyaXB0VmFsdWUo
ODE2KSk7CisgICAgb2JqZWN0LnNldFByb3BlcnR5KCJjIiwgUVNjcmlwdFZhbHVlKDMyNjQpKTsK
KyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmplY3QpOworICAgIGl0Lm5leHQoKTsKKyAg
ICBpdC5uZXh0KCk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJiIikp
OworICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCksIHRydWUpOworICAgIFFDT01QQVJFKGl0
Lmhhc05leHQoKSwgdHJ1ZSk7CisgICAgLy8gUmVtb3ZlICdhJworICAgIG9iamVjdC5zZXRQcm9w
ZXJ0eSgiYSIsIFFTY3JpcHRWYWx1ZSgpKTsKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJUaGF0IHdv
dWxkIGJlIGEgc2lnbmlmaWNhbnQgYmVoYXZpb3JhbCBhbmQgcGVyZm9ybWFuY2UgY2hhbmdlLCBu
ZXcgUXRTY3JpcHQgQVBJIHNob3VsZCBiZSBkZXZlbG9wZWQgKFFUQlVHLTEyMDg3KSIsIEFib3J0
KTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUo
aXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAvLyBSZW1vdmUgJ2MnCisgICAgZW5naW5lLmV2YWx1
YXRlKCJkZWxldGUgby5jIik7CisgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgZmFsc2Up
OworICAgIFFDT01QQVJFKGl0Lmhhc05leHQoKSwgZmFsc2UpOworICAgIC8vIFJlbW92ZSAnYicK
KyAgICBvYmplY3Quc2V0UHJvcGVydHkoImIiLCBRU2NyaXB0VmFsdWUoKSk7CisgICAgUUNPTVBB
UkUoaXQuaGFzUHJldmlvdXMoKSwgZmFsc2UpOworICAgIFFDT01QQVJFKGl0Lmhhc05leHQoKSwg
ZmFsc2UpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZygpKTsKKyAgICBRQ09NUEFS
RShpdC52YWx1ZSgpLnRvU3RyaW5nKCksIFFTdHJpbmcoKSk7CisKKyAgICAvLyBUcnkgdG8gcmVt
b3ZlIGEgcmVtb3ZlZCBwcm9wZXJ0eS4KKyAgICBpdC5yZW1vdmUoKTsKKyAgICBRQ09NUEFSRShp
dC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxz
ZSk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nKCkpOworICAgIFFDT01QQVJFKGl0
LnZhbHVlKCkudG9TdHJpbmcoKSwgUVN0cmluZygpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgKytpKSB7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFz
UHJldmlvdXMoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIGZhbHNl
KTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nKCkpOworICAgICAgICBRQ09N
UEFSRShpdC52YWx1ZSgpLnRvU3RyaW5nKCksIFFTdHJpbmcoKSk7CisgICAgfQorCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgaXQucHJldmlvdXMoKTsKKyAgICAg
ICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRShp
dC5oYXNOZXh0KCksIGZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5n
KCkpOworICAgICAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnRvU3RyaW5nKCksIFFTdHJpbmcoKSk7
CisgICAgfQorfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6cmVtb3ZlVW5kZWxl
dGFibGUoKQoreworICAgIC8vIFVuZGVsZXRhYmxlIHByb3BlcnR5IGNhbid0IGJlIGRlbGV0ZWQg
dmlhIGl0ZXJhdG9yLgorICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1
ZSBvYmplY3QgPSBlbmdpbmUuZXZhbHVhdGUoIm8gPSBuZXcgT2JqZWN0OyBvIik7CisgICAgb2Jq
ZWN0LnNldFByb3BlcnR5KCJhIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsIDEyNCkpOworICAgIG9i
amVjdC5zZXRQcm9wZXJ0eSgiYiIsIFFTY3JpcHRWYWx1ZSgmZW5naW5lLCA4MTYpLCBRU2NyaXB0
VmFsdWU6OlVuZGVsZXRhYmxlKTsKKyAgICBRVkVSSUZZKG9iamVjdC5wcm9wZXJ0eSgiYiIpLmlz
VmFsaWQoKSk7CisgICAgUVNjcmlwdFZhbHVlSXRlcmF0b3IgaXQob2JqZWN0KTsKKyAgICBpdC5u
ZXh0KCk7CisgICAgaXQubmV4dCgpOworICAgIGl0LnJlbW92ZSgpOworICAgIGl0LnRvRnJvbnQo
KTsKKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgUVZFUklGWShvYmplY3QucHJvcGVy
dHkoImIiKS5pc1ZhbGlkKCkpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6
aXRlcmF0ZVN0cmluZygpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlw
dFZhbHVlIHN0ciA9IFFTY3JpcHRWYWx1ZSgmZW5naW5lLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJj
aWFvIikpOworICAgIFFWRVJJRlkoc3RyLmlzU3RyaW5nKCkpOworICAgIFFTY3JpcHRWYWx1ZSBv
YmogPSBzdHIudG9PYmplY3QoKTsKKyAgICBpbnQgbGVuZ3RoID0gb2JqLnByb3BlcnR5KCJsZW5n
dGgiKS50b0ludDMyKCk7CisgICAgUUNPTVBBUkUobGVuZ3RoLCA0KTsKKyAgICBRU2NyaXB0VmFs
dWVJdGVyYXRvciBpdChvYmopOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCB0cnVlKTsKKyAgICAgICAgUVN0cmlu
ZyBpbmRleFN0ciA9IFFTY3JpcHRWYWx1ZSgmZW5naW5lLCBpKS50b1N0cmluZygpOworICAgICAg
ICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgaW5kZXhTdHIpOworICAg
ICAgICBRQ09NUEFSRShpdC5mbGFncygpLCBvYmoucHJvcGVydHlGbGFncyhpbmRleFN0cikpOwor
ICAgICAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnN0cmljdGx5RXF1YWxzKG9iai5wcm9wZXJ0eShp
bmRleFN0cikpLCB0cnVlKTsKKyAgICB9CisgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAg
IGl0Lm5leHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEo
Imxlbmd0aCIpKTsKKyAgICBRVkVSSUZZKGl0LnZhbHVlKCkuaXNOdW1iZXIoKSk7CisgICAgUUNP
TVBBUkUoaXQudmFsdWUoKS50b0ludDMyKCksIGxlbmd0aCk7CisgICAgUUNPTVBBUkUoaXQuZmxh
Z3MoKSwgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzKFFTY3JpcHRWYWx1ZTo6UmVhZE9ubHkg
fCBRU2NyaXB0VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uIHwgUVNjcmlwdFZhbHVlOjpVbmRlbGV0
YWJsZSkpOworCisgICAgaXQucHJldmlvdXMoKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91
cygpLCBsZW5ndGggPiAwKTsKKyAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyAt
LWkpIHsKKyAgICAgICAgaXQucHJldmlvdXMoKTsKKyAgICAgICAgUVN0cmluZyBpbmRleFN0ciA9
IFFTY3JpcHRWYWx1ZSgmZW5naW5lLCBpKS50b1N0cmluZygpOworICAgICAgICBRQ09NUEFSRShp
dC5uYW1lKCksIGluZGV4U3RyKTsKKyAgICAgICAgUUNPTVBBUkUoaXQuZmxhZ3MoKSwgb2JqLnBy
b3BlcnR5RmxhZ3MoaW5kZXhTdHIpKTsKKyAgICAgICAgUUNPTVBBUkUoaXQudmFsdWUoKS5zdHJp
Y3RseUVxdWFscyhvYmoucHJvcGVydHkoaW5kZXhTdHIpKSwgdHJ1ZSk7CisgICAgICAgIFFDT01Q
QVJFKGl0Lmhhc1ByZXZpb3VzKCksIGkgPiAwKTsKKyAgICB9CisgICAgUUNPTVBBUkUoaXQuaGFz
UHJldmlvdXMoKSwgZmFsc2UpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6
YXNzaWduT2JqZWN0VG9JdGVyYXRvcigpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmc7CisgICAg
UVNjcmlwdFZhbHVlIG9iajEgPSBlbmcubmV3T2JqZWN0KCk7CisgICAgb2JqMS5zZXRQcm9wZXJ0
eSgiZm9vIiwgMTIzKTsKKyAgICBRU2NyaXB0VmFsdWUgb2JqMiA9IGVuZy5uZXdPYmplY3QoKTsK
KyAgICBvYmoyLnNldFByb3BlcnR5KCJiYXIiLCA0NTYpOworCisgICAgUVNjcmlwdFZhbHVlSXRl
cmF0b3IgaXQob2JqMSk7CisgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgIGl0Lm5leHQo
KTsKKyAgICBpdCA9IG9iajI7CisgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgIGl0Lm5l
eHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImJhciIp
KTsKKworICAgIGl0ID0gb2JqMTsKKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgaXQu
bmV4dCgpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiZm9v
IikpOworCisgICAgaXQgPSBvYmoyOworICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICBp
dC5uZXh0KCk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJi
YXIiKSk7CisKKyAgICBpdCA9IG9iajI7CisgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAg
IGl0Lm5leHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEo
ImJhciIpKTsKK30KKworUVRFU1RfTUFJTih0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IpCisjaW5j
bHVkZSAidHN0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLm1vYyIKKworI2VuZGlmIC8vIHRzdF9xc2Ny
aXB0dmFsdWVpdGVyYXRvcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90
ZXN0cy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8KaW5kZXggN2MzZjU5
MC4uNmQ1NTU5YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJv
CisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAtMSw0ICsxLDUgQEAK
IFRFTVBMQVRFID0gc3ViZGlycwogU1VCRElSUyA9ICAgcXNjcmlwdGVuZ2luZSBcCiAgICAgICAg
ICAgICBxc2NyaXB0dmFsdWUgXAorICAgICAgICAgICAgcXNjcmlwdHZhbHVlaXRlcmF0b3IgXAog
ICAgICAgICAgICAgcXNjcmlwdHN0cmluZwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61378</attachid>
            <date>2010-07-13 08:15:56 -0700</date>
            <delta_ts>2010-07-13 12:34:12 -0700</delta_ts>
            <desc>Fix v1.01</desc>
            <filename>iter.diff</filename>
            <type>text/plain</type>
            <size>40264</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3Jl
L3F0L0NoYW5nZUxvZwppbmRleCA3MWI0YTIxLi41MDFiM2VhIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9xdC9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNzAgQEAKIDIwMTAtMDctMDkgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93
YWNraUBub2tpYS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW50cm9kdWNlIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yLgorCisgICAgICAgIFRoZSBR
U2NyaXB0VmFsdWVJdGVyYXRvciBjbGFzcyBwZXJtaXRzIHRvIGl0ZXJhdGUgb3ZlciBhIFFTY3Jp
cHRWYWx1ZSdzIHByb3BlcnRpZXMuCisKKyAgICAgICAgW1F0XSBRdFNjcmlwdCBzaG91bGQgcHJv
dmlkZSBhbiBBUEkgZm9yIGVudW1lcmF0aW5nIGEgSlMgb2JqZWN0J3MgcHJvcGVydGllcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2ODAKKworICAg
ICAgICAqIGFwaS9RdFNjcmlwdC5wcm86CisgICAgICAgICogYXBpL3FzY3JpcHR2YWx1ZWl0ZXJh
dG9yLmNwcDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6UVNjcmlwdFZh
bHVlSXRlcmF0b3IpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6On5RU2NyaXB0VmFs
dWVJdGVyYXRvcik6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6aGFzTmV4dCk6Cisg
ICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChRU2NyaXB0VmFs
dWVJdGVyYXRvcjo6aGFzUHJldmlvdXMpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6
OnByZXZpb3VzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0Zyb250KToKKyAg
ICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0JhY2spOgorICAgICAgICAoUVNjcmlwdFZh
bHVlSXRlcmF0b3I6Om5hbWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnNjcmlw
dE5hbWUpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnZhbHVlKToKKyAgICAgICAg
KFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJ
dGVyYXRvcjo6cmVtb3ZlKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpmbGFncyk6
CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBh
cGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogYXBpL3FzY3JpcHR2
YWx1ZWl0ZXJhdG9yX3AuaDogQWRkZWQuCisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvclBy
aXZhdGU6OlFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0VmFs
dWVJdGVyYXRvclByaXZhdGU6On5RU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGUpOgorICAgICAg
ICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpoYXNOZXh0KToKKyAgICAgICAgKFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6bmV4dCk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVy
YXRvclByaXZhdGU6Omhhc1ByZXZpb3VzKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9y
UHJpdmF0ZTo6cHJldmlvdXMpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRl
OjpuYW1lKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2NyaXB0TmFt
ZSk6CisgICAgICAgIChRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6OnZhbHVlKToKKyAgICAg
ICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6c2V0VmFsdWUpOgorICAgICAgICAoUVNj
cmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpyZW1vdmUpOgorICAgICAgICAoUVNjcmlwdFZhbHVl
SXRlcmF0b3JQcml2YXRlOjp0b0Zyb250KToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9y
UHJpdmF0ZTo6dG9CYWNrKToKKyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6
ZmxhZ3MpOgorICAgICAgICAoUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjppc1ZhbGlkKToK
KyAgICAgICAgKFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6ZW5naW5lKToKKyAgICAgICAg
KiB0ZXN0cy9xc2NyaXB0dmFsdWVpdGVyYXRvci9xc2NyaXB0dmFsdWVpdGVyYXRvci5wcm86IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yL3RzdF9xc2NyaXB0dmFs
dWVpdGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9y
Ojp0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0
ZXJhdG9yOjp+dHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUZvcndhcmRfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlw
dFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVGb3J3YXJkKToKKyAgICAgICAgKHRzdF9RU2NyaXB0VmFs
dWVJdGVyYXRvcjo6aXRlcmF0ZUJhY2t3YXJkX2RhdGEpOgorICAgICAgICAodHN0X1FTY3JpcHRW
YWx1ZUl0ZXJhdG9yOjppdGVyYXRlQmFja3dhcmQpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1
ZUl0ZXJhdG9yOjppdGVyYXRlQXJyYXlfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVl
SXRlcmF0b3I6Oml0ZXJhdGVBcnJheSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRlcmF0
b3I6Oml0ZXJhdGVCYWNrQW5kRm9ydGgpOgorICAgICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0ZXJh
dG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnJlbW92
ZSk6CisgICAgICAgICh0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnJlbW92ZU1peGVkKToKKyAg
ICAgICAgKHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6cmVtb3ZlVW5kZWxldGFibGUpOgorICAg
ICAgICAodHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlU3RyaW5nKToKKyAgICAgICAg
KHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6YXNzaWduT2JqZWN0VG9JdGVyYXRvcik6CisgICAg
ICAgICogdGVzdHMvdGVzdHMucHJvOgorCisyMDEwLTA3LTA5ICBKZWRyemVqIE5vd2Fja2kgIDxq
ZWRyemVqLm5vd2Fja2lAbm9raWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgogCiAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSBRU2NyaXB0VmFsdWU6OnBy
b3BlcnR5RmxhZ3MgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
UXRTY3JpcHQucHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwppbmRleCAz
YzI2OTFlLi5mYjQ5Y2ZlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3Jp
cHQucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KQEAgLTI0LDYg
KzI0LDcgQEAgSU5DTFVERVBBVEggKz0gJCRQV0QvLi4vLi4vQVBJCiBTT1VSQ0VTICs9ICAkJFBX
RC9xc2NyaXB0ZW5naW5lLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lX3Au
Y3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5jcHAgXAorICAgICAgICAgICAg
JCRQV0QvcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3Jp
cHRzdHJpbmcuY3BwIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRwcm9ncmFtLmNwcCBcCiAg
ICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3ludGF4Y2hlY2tyZXN1bHQuY3BwIFwKQEAgLTMzLDYg
KzM0LDggQEAgSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9iYWwuaCBcCiAgICAgICAgICAg
ICAkJFBXRC9xc2NyaXB0ZW5naW5lX3AuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFs
dWUuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWVfcC5oIFwKKyAgICAgICAgICAg
ICQkUFdEL3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmggXAorICAgICAgICAgICAgJCRQV0QvcXNjcmlw
dHZhbHVlaXRlcmF0b3JfcC5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRjb252ZXJ0ZXJf
cC5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuaCBcCiAgICAgICAgICAgICAk
JFBXRC9xc2NyaXB0c3RyaW5nX3AuaCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHR2YWx1ZWl0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
MWNhYTYxCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHR2
YWx1ZWl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlaXRlcmF0b3IuaCIK
KworI2luY2x1ZGUgInFzY3JpcHR2YWx1ZV9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlaXRl
cmF0b3JfcC5oIgorCisvKiEKKyAgICBcY2xhc3MgUVNjcmlwdFZhbHVlSXRlcmF0b3IKKworICAg
IFxicmllZiBUaGUgUVNjcmlwdFZhbHVlSXRlcmF0b3IgY2xhc3MgcHJvdmlkZXMgYSBKYXZhLXN0
eWxlIGl0ZXJhdG9yIGZvciBRU2NyaXB0VmFsdWUuCisKKyAgICBcaW5ncm91cCBzY3JpcHQKKwor
CisgICAgVGhlIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGNvbnN0cnVjdG9yIHRha2VzIGEgUVNjcmlw
dFZhbHVlIGFzCisgICAgYXJndW1lbnQuICBBZnRlciBjb25zdHJ1Y3Rpb24sIHRoZSBpdGVyYXRv
ciBpcyBsb2NhdGVkIGF0IHRoZSB2ZXJ5CisgICAgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSBv
ZiBwcm9wZXJ0aWVzLiBIZXJlJ3MgaG93IHRvIGl0ZXJhdGUgb3ZlcgorICAgIGFsbCB0aGUgcHJv
cGVydGllcyBvZiBhIFFTY3JpcHRWYWx1ZToKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBl
dHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcCAwCisKKyAgICBUaGUg
bmV4dCgpIGFkdmFuY2VzIHRoZSBpdGVyYXRvci4gVGhlIG5hbWUoKSwgdmFsdWUoKSBhbmQgZmxh
Z3MoKQorICAgIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5hbWUsIHZhbHVlIGFuZCBmbGFncyBvZiB0
aGUgbGFzdCBpdGVtIHRoYXQgd2FzCisgICAganVtcGVkIG92ZXIuCisKKyAgICBJZiB5b3Ugd2Fu
dCB0byByZW1vdmUgcHJvcGVydGllcyBhcyB5b3UgaXRlcmF0ZSBvdmVyIHRoZQorICAgIFFTY3Jp
cHRWYWx1ZSwgdXNlIHJlbW92ZSgpLiBJZiB5b3Ugd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIG9m
IGEKKyAgICBwcm9wZXJ0eSwgdXNlIHNldFZhbHVlKCkuCisKKyAgICBOb3RlIHRoYXQgUVNjcmlw
dFZhbHVlSXRlcmF0b3Igb25seSBpdGVyYXRlcyBvdmVyIHRoZSBRU2NyaXB0VmFsdWUncworICAg
IG93biBwcm9wZXJ0aWVzOyBpLmUuIGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgcHJvdG90eXBlIGNo
YWluLiBZb3UgY2FuCisgICAgdXNlIGEgbG9vcCBsaWtlIHRoaXMgdG8gZm9sbG93IHRoZSBwcm90
b3R5cGUgY2hhaW46CisKKyAgICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3Nj
cmlwdF9xc2NyaXB0dmFsdWVpdGVyYXRvci5jcHAgMQorCisgICAgTm90ZSB0aGF0IFFTY3JpcHRW
YWx1ZUl0ZXJhdG9yIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2tpcCBvdmVyCisgICAgcHJvcGVy
dGllcyB0aGF0IGhhdmUgdGhlIFFTY3JpcHRWYWx1ZTo6U2tpcEluRW51bWVyYXRpb24gZmxhZyBz
ZXQ7CisgICAgdGhhdCBmbGFnIG9ubHkgYWZmZWN0cyBpdGVyYXRpb24gaW4gc2NyaXB0IGNvZGUu
ICBJZiB5b3Ugd2FudCwgeW91CisgICAgY2FuIHNraXAgb3ZlciBzdWNoIHByb3BlcnRpZXMgd2l0
aCBjb2RlIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBl
dHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yLmNwcCAyCisKKyAgICBcc2Eg
UVNjcmlwdFZhbHVlOjpwcm9wZXJ0eSgpCisqLworCisvKiEKKyAgICBDb25zdHJ1Y3RzIGFuIGl0
ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIFxhIG9iamVjdC4gVGhlIGl0ZXJhdG9yIGlzCisgICAgc2V0
IHRvIGJlIGF0IHRoZSBmcm9udCBvZiB0aGUgc2VxdWVuY2Ugb2YgcHJvcGVydGllcyAoYmVmb3Jl
IHRoZQorICAgIGZpcnN0IHByb3BlcnR5KS4KKyovCitRU2NyaXB0VmFsdWVJdGVyYXRvcjo6UVNj
cmlwdFZhbHVlSXRlcmF0b3IoY29uc3QgUVNjcmlwdFZhbHVlJiBvYmplY3QpCisgICAgOiBkX3B0
cihuZXcgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlKFFTY3JpcHRWYWx1ZVByaXZhdGU6Omdl
dChvYmplY3QpKSkKK3t9CisKKy8qIQorICAgIERlc3Ryb3lzIHRoZSBpdGVyYXRvci4KKyovCitR
U2NyaXB0VmFsdWVJdGVyYXRvcjo6flFTY3JpcHRWYWx1ZUl0ZXJhdG9yKCkKK3t9CisKKy8qIQor
ICAgIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgaXRlbSBhaGVhZCBvZiB0
aGUgaXRlcmF0b3IKKyAgICAoaS5lLiB0aGUgaXRlcmF0b3IgaXMgXGUgbm90IGF0IHRoZSBiYWNr
IG9mIHRoZSBwcm9wZXJ0eSBzZXF1ZW5jZSk7CisgICAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2Uu
CisKKyAgICBcc2EgbmV4dCgpLCBoYXNQcmV2aW91cygpCisqLworYm9vbCBRU2NyaXB0VmFsdWVJ
dGVyYXRvcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5oYXNOZXh0KCk7
Cit9CisKKy8qIQorICAgIEFkdmFuY2VzIHRoZSBpdGVyYXRvciBieSBvbmUgcG9zaXRpb24uCisK
KyAgICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gb24gYW4gaXRlcmF0b3IgbG9jYXRlZCBhdCB0aGUg
YmFjayBvZiB0aGUKKyAgICBjb250YWluZXIgbGVhZHMgdG8gdW5kZWZpbmVkIHJlc3VsdHMuCisK
KyAgICBcc2EgaGFzTmV4dCgpLCBwcmV2aW91cygpLCBuYW1lKCkKKyovCit2b2lkIFFTY3JpcHRW
YWx1ZUl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgICBkX3B0ci0+bmV4dCgpOworfQorCisvKiEKKyAg
ICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGl0ZW0gYmVoaW5kIHRoZSBp
dGVyYXRvcgorICAgIChpLmUuIHRoZSBpdGVyYXRvciBpcyBcZSBub3QgYXQgdGhlIGZyb250IG9m
IHRoZSBwcm9wZXJ0eSBzZXF1ZW5jZSk7CisgICAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisK
KyAgICBcc2EgcHJldmlvdXMoKSwgaGFzTmV4dCgpCisqLworYm9vbCBRU2NyaXB0VmFsdWVJdGVy
YXRvcjo6aGFzUHJldmlvdXMoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aGFzUHJldmlv
dXMoKTsKK30KKworLyohCisgICAgTW92ZXMgdGhlIGl0ZXJhdG9yIGJhY2sgYnkgb25lIHBvc2l0
aW9uLgorCisgICAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIGl0ZXJhdG9yIGxvY2F0ZWQg
YXQgdGhlIGZyb250IG9mIHRoZQorICAgIGNvbnRhaW5lciBsZWFkcyB0byB1bmRlZmluZWQgcmVz
dWx0cy4KKworICAgIFxzYSBoYXNQcmV2aW91cygpLCBuZXh0KCksIG5hbWUoKQorKi8KK3ZvaWQg
UVNjcmlwdFZhbHVlSXRlcmF0b3I6OnByZXZpb3VzKCkKK3sKKyAgICBkX3B0ci0+cHJldmlvdXMo
KTsKK30KKworLyohCisgICAgTW92ZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmcm9udCBvZiB0aGUg
UVNjcmlwdFZhbHVlIChiZWZvcmUgdGhlCisgICAgZmlyc3QgcHJvcGVydHkpLgorCisgICAgXHNh
IHRvQmFjaygpLCBuZXh0KCkKKyovCit2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjp0b0Zyb250
KCkKK3sKKyAgICBkX3B0ci0+dG9Gcm9udCgpOworfQorCisvKiEKKyAgICBNb3ZlcyB0aGUgaXRl
cmF0b3IgdG8gdGhlIGJhY2sgb2YgdGhlIFFTY3JpcHRWYWx1ZSAoYWZ0ZXIgdGhlCisgICAgbGFz
dCBwcm9wZXJ0eSkuCisKKyAgICBcc2EgdG9Gcm9udCgpLCBwcmV2aW91cygpCisqLwordm9pZCBR
U2NyaXB0VmFsdWVJdGVyYXRvcjo6dG9CYWNrKCkKK3sKKyAgICBkX3B0ci0+dG9CYWNrKCk7Cit9
CisKKy8qIQorICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3
YXMganVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAgIFxz
YSB2YWx1ZSgpLCBmbGFncygpCisqLworUVN0cmluZyBRU2NyaXB0VmFsdWVJdGVyYXRvcjo6bmFt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5uYW1lKCk7Cit9CisKKy8qIQorICAgIFJl
dHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3YXMganVtcGVkIG92ZXIg
dXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKyovCitRU2NyaXB0U3RyaW5nIFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yOjpzY3JpcHROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNjcmlw
dFN0cmluZ1ByaXZhdGU6OmdldChkX3B0ci0+c2NyaXB0TmFtZSgpKTsKK30KKworLyohCisgICAg
UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3YXMganVtcGVkIG92
ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAgIFxzYSBzZXRWYWx1ZSgp
LCBuYW1lKCkKKyovCitRU2NyaXB0VmFsdWUgUVNjcmlwdFZhbHVlSXRlcmF0b3I6OnZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRfcHRyLT52YWx1
ZSgpKTsKK30KKworLyohCisgICAgU2V0cyB0aGUgXGEgdmFsdWUgb2YgdGhlIGxhc3QgcHJvcGVy
dHkgdGhhdCB3YXMganVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4K
KworICAgIFxzYSB2YWx1ZSgpLCBuYW1lKCkKKyovCit2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9y
OjpzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGRfcHRyLT5zZXRW
YWx1ZShRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQodmFsdWUpKTsKK30KKworLyohCisgICAgUmVt
b3ZlcyB0aGUgbGFzdCBwcm9wZXJ0eSB0aGF0IHdhcyBqdW1wZWQgb3ZlciB1c2luZyBuZXh0KCkK
KyAgICBvciBwcmV2aW91cygpLgorCisgICAgXHNhIHNldFZhbHVlKCkKKyovCit2b2lkIFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yOjpyZW1vdmUoKQoreworICAgIGRfcHRyLT5yZW1vdmUoKTsKK30KKwor
LyohCisgICAgUmV0dXJucyB0aGUgZmxhZ3Mgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGhhdCB3YXMg
anVtcGVkIG92ZXIgdXNpbmcKKyAgICBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKworICAgIFxzYSB2
YWx1ZSgpCisqLworUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzIFFTY3JpcHRWYWx1ZUl0ZXJh
dG9yOjpmbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT5mbGFncygpOworfQorCisv
KiEKKyAgICBNYWtlcyB0aGUgaXRlcmF0b3Igb3BlcmF0ZSBvbiBcYSBvYmplY3QuIFRoZSBpdGVy
YXRvciBpcyBzZXQgdG8gYmUKKyAgICBhdCB0aGUgZnJvbnQgb2YgdGhlIHNlcXVlbmNlIG9mIHBy
b3BlcnRpZXMgKGJlZm9yZSB0aGUgZmlyc3QKKyAgICBwcm9wZXJ0eSkuCisqLworUVNjcmlwdFZh
bHVlSXRlcmF0b3ImIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpvcGVyYXRvcj0oUVNjcmlwdFZhbHVl
JiBvYmplY3QpCit7CisgICAgZF9wdHIgPSBuZXcgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRl
KFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChvYmplY3QpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlaXRlcmF0b3Iu
aCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFsdWVpdGVyYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9K
YXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZhbHVlaXRlcmF0b3IuaApAQCAtMCwwICsxLDYz
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHR2YWx1ZWl0ZXJhdG9yX2gK
KyNkZWZpbmUgcXNjcmlwdHZhbHVlaXRlcmF0b3JfaAorCisjaW5jbHVkZSAicXRzY3JpcHRnbG9i
YWwuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisjaW5jbHVkZSA8UXRDb3JlL3FzaGFy
ZWRkYXRhLmg+CisjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisKK2NsYXNzIFFTY3JpcHRWYWx1
ZTsKK2NsYXNzIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTsKKworCitjbGFzcyBRX0pBVkFT
Q1JJUFRfRVhQT1JUIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBRU2NyaXB0
VmFsdWVJdGVyYXRvcihjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKTsKKyAgICB+UVNjcmlwdFZh
bHVlSXRlcmF0b3IoKTsKKworICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0OworICAgIHZvaWQgbmV4
dCgpOworCisgICAgYm9vbCBoYXNQcmV2aW91cygpIGNvbnN0OworICAgIHZvaWQgcHJldmlvdXMo
KTsKKworICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFFTY3JpcHRTdHJpbmcgc2NyaXB0
TmFtZSgpIGNvbnN0OworCisgICAgUVNjcmlwdFZhbHVlIHZhbHVlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWUmIHZhbHVlKTsKKworICAgIHZvaWQgcmVtb3Zl
KCk7CisgICAgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzIGZsYWdzKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHRvRnJvbnQoKTsKKyAgICB2b2lkIHRvQmFjaygpOworCisgICAgUVNjcmlwdFZhbHVl
SXRlcmF0b3ImIG9wZXJhdG9yPShRU2NyaXB0VmFsdWUmIHZhbHVlKTsKK3ByaXZhdGU6CisgICAg
UUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU+
IGRfcHRyOworCisgICAgUV9ERUNMQVJFX1BSSVZBVEUoUVNjcmlwdFZhbHVlSXRlcmF0b3IpCisg
ICAgUV9ESVNBQkxFX0NPUFkoUVNjcmlwdFZhbHVlSXRlcmF0b3IpCit9OworCisjZW5kaWYgLy8g
cXNjcmlwdHZhbHVlaXRlcmF0b3JfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHR2YWx1ZWl0ZXJhdG9yX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0
dmFsdWVpdGVyYXRvcl9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZm
YzAwMQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0dmFs
dWVpdGVyYXRvcl9wLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
Zm5kZWYgcXNjcmlwdHZhbHVlaXRlcmF0b3JfcF9oCisjZGVmaW5lIHFzY3JpcHR2YWx1ZWl0ZXJh
dG9yX3BfaAorCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlX3AuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKyNpbmNsdWRlIDxRdENvcmUv
cXZlY3Rvci5oPgorCitjbGFzcyBRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6IHB1YmxpYyBR
U2hhcmVkRGF0YSB7CitwdWJsaWM6CisgICAgaW5saW5lIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJp
dmF0ZShjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiB2YWx1ZSk7CisgICAgaW5saW5lIH5RU2Ny
aXB0VmFsdWVJdGVyYXRvclByaXZhdGUoKTsKKworICAgIGlubGluZSBib29sIGhhc05leHQoKTsK
KyAgICBpbmxpbmUgdm9pZCBuZXh0KCk7CisKKyAgICBpbmxpbmUgYm9vbCBoYXNQcmV2aW91cygp
OworICAgIGlubGluZSB2b2lkIHByZXZpb3VzKCk7CisKKyAgICBpbmxpbmUgUVN0cmluZyBuYW1l
KCkgY29uc3Q7CisgICAgaW5saW5lIFFTY3JpcHRTdHJpbmdQcml2YXRlKiBzY3JpcHROYW1lKCkg
Y29uc3Q7CisKKyAgICBpbmxpbmUgUVNjcmlwdFZhbHVlUHJpdmF0ZSogdmFsdWUoKSBjb25zdDsK
KyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWVQcml2YXRlKiB2YWx1
ZSk7CisKKyAgICBpbmxpbmUgdm9pZCByZW1vdmUoKTsKKworICAgIGlubGluZSB2b2lkIHRvRnJv
bnQoKTsKKyAgICBpbmxpbmUgdm9pZCB0b0JhY2soKTsKKworICAgIFFTY3JpcHRWYWx1ZTo6UHJv
cGVydHlGbGFncyBmbGFncygpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNv
bnN0OworcHJpdmF0ZToKKyAgICBpbmxpbmUgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSgp
IGNvbnN0OworCisgICAgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0VmFsdWVQ
cml2YXRlPiBtX29iamVjdDsKKyAgICBRVmVjdG9yPEpTU3RyaW5nUmVmPiBtX25hbWVzOworICAg
IFFNdXRhYmxlVmVjdG9ySXRlcmF0b3I8SlNTdHJpbmdSZWY+IG1faWR4OworfTsKKworaW5saW5l
IFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6UVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRl
KGNvbnN0IFFTY3JpcHRWYWx1ZVByaXZhdGUqIHZhbHVlKQorICAgIDogbV9vYmplY3QoY29uc3Rf
Y2FzdDxRU2NyaXB0VmFsdWVQcml2YXRlKj4odmFsdWUpKQorICAgICwgbV9pZHgobV9uYW1lcykK
K3sKKyAgICAvLyBGSVhNRSBUaGVyZSBpcyBhc3N1bXB0aW9uIHRoYXQgZ2xvYmFsIG9iamVjdCB3
YXNuJ3QgY2hhbmdlZCAoYnVnIDQxODM5KS4KKyAgICAvLyBGSVhNRSBXZSBjYW4ndCB1c2UgQyBB
UEkgZnVuY3Rpb24gSlNPYmplY3RHZXRQcm9wZXJ0eU5hbWVzIGFzIGl0IHJldHVybnMgb25seSBl
bnVtZXJhYmxlIHByb3BlcnRpZXMuCisgICAgaWYgKGNvbnN0X2Nhc3Q8UVNjcmlwdFZhbHVlUHJp
dmF0ZSo+KHZhbHVlKS0+aXNPYmplY3QoKSkgeworICAgICAgICBzdGF0aWMgSlNTdHJpbmdSZWYg
b2JqZWN0TmFtZSA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKCJPYmplY3QiKTsKKyAgICAg
ICAgc3RhdGljIEpTU3RyaW5nUmVmIGdldE93blByb3BlcnR5TmFtZXNOYW1lID0gUVNjcmlwdENv
bnZlcnRlcjo6dG9TdHJpbmcoImdldE93blByb3BlcnR5TmFtZXMiKTsKKworICAgICAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdCgqZW5naW5lKCkpOworICAgICAgICBRX0FTU0VSVChK
U1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgSlNWYWx1
ZVJlZiBvYmplY3RDb25zdHJ1Y3RvciA9IEpTT2JqZWN0R2V0UHJvcGVydHkoKmVuZ2luZSgpLCBn
bG9iYWxPYmplY3QsIG9iamVjdE5hbWUsICZleGNlcHRpb24pOworICAgICAgICBRX0FTU0VSVChK
U1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBvYmplY3RDb25zdHJ1Y3RvcikpOworICAgICAgICBR
X0FTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBwcm9wZXJ0eU5hbWVzR2V0
dGVyID0gSlNPYmplY3RHZXRQcm9wZXJ0eSgqZW5naW5lKCksIGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KG9iamVjdENvbnN0cnVjdG9yKSwgZ2V0T3duUHJvcGVydHlOYW1lc05hbWUsICZleGNlcHRp
b24pOworICAgICAgICBRX0FTU0VSVChKU1ZhbHVlSXNPYmplY3QoKmVuZ2luZSgpLCBwcm9wZXJ0
eU5hbWVzR2V0dGVyKSk7CisgICAgICAgIFFfQVNTRVJUKCFleGNlcHRpb24pOworCisgICAgICAg
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7ICptX29iamVjdCB9OworICAgICAgICBKU09iamVj
dFJlZiBwcm9wZXJ0eU5hbWVzCisgICAgICAgICAgICAgICAgPSBjb25zdF9jYXN0PEpTT2JqZWN0
UmVmPihKU09iamVjdENhbGxBc0Z1bmN0aW9uKCplbmdpbmUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0
PEpTT2JqZWN0UmVmPihwcm9wZXJ0eU5hbWVzR2V0dGVyKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzT2JqZWN0
ICovIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogYXJndW1lbnRDb3VudCAqLyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZXhjZXB0aW9uKSk7CisgICAgICAgIFFfQVNTRVJUKEpTVmFsdWVJc09iamVjdCgq
ZW5naW5lKCksIHByb3BlcnR5TmFtZXMpKTsKKyAgICAgICAgUV9BU1NFUlQoIWV4Y2VwdGlvbik7
CisgICAgICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBsZW5ndGhOYW1lID0gUVNjcmlwdENvbnZlcnRl
cjo6dG9TdHJpbmcoImxlbmd0aCIpOworICAgICAgICBpbnQgY291bnQgPSBKU1ZhbHVlVG9OdW1i
ZXIoKmVuZ2luZSgpLCBKU09iamVjdEdldFByb3BlcnR5KCplbmdpbmUoKSwgcHJvcGVydHlOYW1l
cywgbGVuZ3RoTmFtZSwgJmV4Y2VwdGlvbiksICZleGNlcHRpb24pOworCisgICAgICAgIFFfQVNT
RVJUKCFleGNlcHRpb24pOworICAgICAgICBtX25hbWVzLnJlc2VydmUoY291bnQpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWYgdG1wID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoKmVuZ2luZSgpLCBwcm9wZXJ0eU5h
bWVzLCBpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIG1fbmFtZXMuYXBwZW5kKEpTVmFsdWVU
b1N0cmluZ0NvcHkoKmVuZ2luZSgpLCB0bXAsICZleGNlcHRpb24pKTsKKyAgICAgICAgICAgIFFf
QVNTRVJUKCFleGNlcHRpb24pOworICAgICAgICB9CisgICAgICAgIG1faWR4ID0gbV9uYW1lczsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9vYmplY3QgPSAwOworfQorCitpbmxpbmUgUVNjcmlwdFZh
bHVlSXRlcmF0b3JQcml2YXRlOjp+UVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlKCkKK3sKKyAg
ICBRVmVjdG9yPEpTU3RyaW5nUmVmPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fbmFtZXMuY29uc3RC
ZWdpbigpOworICAgIGZvciAoOyBpICE9IG1fbmFtZXMuY29uc3RFbmQoKTsgKytpKQorICAgICAg
ICBKU1N0cmluZ1JlbGVhc2UoKmkpOworfQorCitpbmxpbmUgYm9vbCBRU2NyaXB0VmFsdWVJdGVy
YXRvclByaXZhdGU6Omhhc05leHQoKQoreworICAgIHJldHVybiBtX2lkeC5oYXNOZXh0KCk7Cit9
CisKK2lubGluZSB2b2lkIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6bmV4dCgpCit7Cisg
ICAgLy8gRklYTUUgKFF0NSkgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHZhbHVlIChRVEJV
Ry0xMTIyNikuCisgICAgbV9pZHgubmV4dCgpOworfQorCitpbmxpbmUgYm9vbCBRU2NyaXB0VmFs
dWVJdGVyYXRvclByaXZhdGU6Omhhc1ByZXZpb3VzKCkKK3sKKyAgICByZXR1cm4gbV9pZHguaGFz
UHJldmlvdXMoKTsKK30KKworaW5saW5lIHZvaWQgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRl
OjpwcmV2aW91cygpCit7CisgICAgbV9pZHgucHJldmlvdXMoKTsKK30KKworaW5saW5lIFFTdHJp
bmcgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICByZXR1cm4gUVNjcmlw
dENvbnZlcnRlcjo6dG9TdHJpbmcobV9pZHgudmFsdWUoKSk7Cit9CisKK2lubGluZSBRU2NyaXB0
U3RyaW5nUHJpdmF0ZSogUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpzY3JpcHROYW1lKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBRU2NyaXB0
U3RyaW5nUHJpdmF0ZSgpOworICAgIHJldHVybiBuZXcgUVNjcmlwdFN0cmluZ1ByaXZhdGUoUVNj
cmlwdENvbnZlcnRlcjo6dG9TdHJpbmcobV9pZHgudmFsdWUoKSkpOworfQorCitpbmxpbmUgUVNj
cmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjp2YWx1ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBuZXcgUVNjcmlwdFZh
bHVlUHJpdmF0ZSgpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gbV9vYmplY3QtPnByb3BlcnR5KG1faWR4LnZhbHVlKCksICZleGNlcHRpb24p
OworICAgIGVuZ2luZSgpLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbmV3
IFFTY3JpcHRWYWx1ZVByaXZhdGUoZW5naW5lKCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQg
UVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpzZXRWYWx1ZShjb25zdCBRU2NyaXB0VmFsdWVQ
cml2YXRlKiB2YWx1ZSkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBtX29iamVjdC0+c2V0UHJvcGVydHko
bV9pZHgudmFsdWUoKSwgKnZhbHVlLCAvKiBmbGFncyAqLyAwLCAmZXhjZXB0aW9uKTsKKyAgICBl
bmdpbmUoKS0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7Cit9CisKK2lubGluZSB2b2lkIFFTY3Jp
cHRWYWx1ZUl0ZXJhdG9yUHJpdmF0ZTo6cmVtb3ZlKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBtX29i
amVjdC0+ZGVsZXRlUHJvcGVydHkobV9pZHgudmFsdWUoKSwgJmV4Y2VwdGlvbik7CisgICAgZW5n
aW5lKCktPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIG1faWR4LnJlbW92ZSgpOworfQor
CitpbmxpbmUgdm9pZCBRU2NyaXB0VmFsdWVJdGVyYXRvclByaXZhdGU6OnRvRnJvbnQoKQorewor
ICAgIG1faWR4LnRvRnJvbnQoKTsKK30KKworaW5saW5lIHZvaWQgUVNjcmlwdFZhbHVlSXRlcmF0
b3JQcml2YXRlOjp0b0JhY2soKQoreworICAgIG1faWR4LnRvQmFjaygpOworfQorCitRU2NyaXB0
VmFsdWU6OlByb3BlcnR5RmxhZ3MgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjpmbGFncygp
IGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBRU2NyaXB0VmFs
dWU6OlByb3BlcnR5RmxhZ3MoMCk7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5wcm9wZXJ0eUZsYWdz
KG1faWR4LnZhbHVlKCksIFFTY3JpcHRWYWx1ZTo6UmVzb2x2ZUxvY2FsKTsKK30KKworaW5saW5l
IGJvb2wgUVNjcmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9vYmplY3Q7Cit9CisKK2lubGluZSBRU2NyaXB0RW5naW5lUHJpdmF0ZSogUVNj
cmlwdFZhbHVlSXRlcmF0b3JQcml2YXRlOjplbmdpbmUoKSBjb25zdAoreworICAgIFFfQVNTRVJU
KGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0LT5lbmdpbmUoKTsKK30KKworI2VuZGlm
IC8vIHFzY3JpcHR2YWx1ZWl0ZXJhdG9yX3BfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvdGVzdHMvcXNjcmlwdHZhbHVlaXRlcmF0b3IvcXNjcmlwdHZhbHVlaXRlcmF0b3IucHJvIGIv
SmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHZhbHVlaXRlcmF0b3IvcXNjcmlwdHZhbHVl
aXRlcmF0b3IucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTRlYzkK
LS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWVp
dGVyYXRvci9xc2NyaXB0dmFsdWVpdGVyYXRvci5wcm8KQEAgLTAsMCArMSw3IEBACitURU1QTEFU
RSA9IGFwcAorVEFSR0VUID0gdHN0X3FzY3JpcHR2YWx1ZWl0ZXJhdG9yCitRVCArPSB0ZXN0bGli
CitpbmNsdWRlKC4uL3Rlc3RzLnByaSkKKworU09VUkNFUyArPSB0c3RfcXNjcmlwdHZhbHVlaXRl
cmF0b3IuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHR2
YWx1ZWl0ZXJhdG9yL3RzdF9xc2NyaXB0dmFsdWVpdGVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWVpdGVyYXRvci90c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDAwNDIKLS0tIC9kZXYv
bnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0dmFsdWVpdGVyYXRvci90
c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTMxIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIHRzdF9xc2NyaXB0dmFsdWVpdGVyYXRvcl9oCisjZGVmaW5lIHRz
dF9xc2NyaXB0dmFsdWVpdGVyYXRvcl9oCisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisj
aW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCisjaW5jbHVkZSAicXNjcmlwdHZhbHVlaXRlcmF0b3Iu
aCIKKyNpbmNsdWRlIDxRdENvcmUvcWhhc2guaD4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0Pgor
CitjbGFzcyB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IgOiBwdWJsaWMgUU9iamVjdCB7CisgICAg
UV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcigpOworICAg
IHZpcnR1YWwgfnRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcigpOworCitwcml2YXRlIHNsb3RzOgor
ICAgIHZvaWQgaXRlcmF0ZUZvcndhcmRfZGF0YSgpOworICAgIHZvaWQgaXRlcmF0ZUZvcndhcmQo
KTsKKyAgICB2b2lkIGl0ZXJhdGVCYWNrd2FyZF9kYXRhKCk7CisgICAgdm9pZCBpdGVyYXRlQmFj
a3dhcmQoKTsKKyAgICB2b2lkIGl0ZXJhdGVBcnJheV9kYXRhKCk7CisgICAgdm9pZCBpdGVyYXRl
QXJyYXkoKTsKKyAgICB2b2lkIGl0ZXJhdGVCYWNrQW5kRm9ydGgoKTsKKyAgICB2b2lkIHNldFZh
bHVlKCk7CisgICAgdm9pZCByZW1vdmUoKTsKKyAgICB2b2lkIHJlbW92ZU1peGVkKCk7CisgICAg
dm9pZCByZW1vdmVVbmRlbGV0YWJsZSgpOworICAgIHZvaWQgaXRlcmF0ZVN0cmluZygpOworICAg
IHZvaWQgYXNzaWduT2JqZWN0VG9JdGVyYXRvcigpOworfTsKKwordHN0X1FTY3JpcHRWYWx1ZUl0
ZXJhdG9yOjp0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IoKQoreworfQorCit0c3RfUVNjcmlwdFZh
bHVlSXRlcmF0b3I6On50c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3IoKQoreworfQorCit2b2lkIHRz
dF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUZvcndhcmRfZGF0YSgpCit7CisgICAgUVRl
c3Q6OmFkZENvbHVtbjxRU3RyaW5nTGlzdD4oInByb3BlcnR5TmFtZXMiKTsKKyAgICBRVGVzdDo6
YWRkQ29sdW1uPFFTdHJpbmdMaXN0PigicHJvcGVydHlWYWx1ZXMiKTsKKworICAgIFFUZXN0Ojpu
ZXdSb3coIm5vIHByb3BlcnRpZXMiKQorICAgICAgICA8PCBRU3RyaW5nTGlzdCgpIDw8IFFTdHJp
bmdMaXN0KCk7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vPWJhciIpCisgICAgICAgIDw8IChRU3Ry
aW5nTGlzdCgpIDw8ICJmb28iKQorICAgICAgICA8PCAoUVN0cmluZ0xpc3QoKSA8PCAiYmFyIik7
CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vPWJhciwgYmF6PTEyMyIpCisgICAgICAgIDw8IChRU3Ry
aW5nTGlzdCgpIDw8ICJmb28iIDw8ICJiYXoiKQorICAgICAgICA8PCAoUVN0cmluZ0xpc3QoKSA8
PCAiYmFyIiA8PCAiMTIzIik7CisgICAgUVRlc3Q6Om5ld1JvdygiZm9vPWJhciwgYmF6PTEyMywg
cmFiPW9vZiIpCisgICAgICAgIDw8IChRU3RyaW5nTGlzdCgpIDw8ICJmb28iIDw8ICJiYXoiIDw8
ICJyYWIiKQorICAgICAgICA8PCAoUVN0cmluZ0xpc3QoKSA8PCAiYmFyIiA8PCAiMTIzIiA8PCAi
b29mIik7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVyYXRlRm9yd2Fy
ZCgpCit7CisgICAgUUZFVENIKFFTdHJpbmdMaXN0LCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBRRkVU
Q0goUVN0cmluZ0xpc3QsIHByb3BlcnR5VmFsdWVzKTsKKyAgICBRTWFwPFFTdHJpbmcsIFFTdHJp
bmc+IHBtYXA7CisgICAgUV9BU1NFUlQocHJvcGVydHlOYW1lcy5zaXplKCkgPT0gcHJvcGVydHlW
YWx1ZXMuc2l6ZSgpKTsKKworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRW
YWx1ZSBvYmplY3QgPSBlbmdpbmUubmV3T2JqZWN0KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBwcm9wZXJ0eU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IHBy
b3BlcnR5TmFtZXMuYXQoaSk7CisgICAgICAgIFFTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eVZhbHVl
cy5hdChpKTsKKyAgICAgICAgcG1hcC5pbnNlcnQobmFtZSwgdmFsdWUpOworICAgICAgICBvYmpl
Y3Quc2V0UHJvcGVydHkobmFtZSwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsIHZhbHVlKSk7CisgICAg
fQorICAgIFFTY3JpcHRWYWx1ZSBvdGhlck9iamVjdCA9IGVuZ2luZS5uZXdPYmplY3QoKTsKKyAg
ICBvdGhlck9iamVjdC5zZXRQcm9wZXJ0eSgiZm9vIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsIDEy
MzQ1NikpOworICAgIG90aGVyT2JqZWN0LnNldFByb3BlcnR5KCJwcm90b1Byb3BlcnR5IiwgUVNj
cmlwdFZhbHVlKCZlbmdpbmUsIDY1NDMyMSkpOworICAgIG9iamVjdC5zZXRQcm90b3R5cGUob3Ro
ZXJPYmplY3QpOyAvLyBzaG91bGQgbm90IGFmZmVjdCBpdGVyYXRvcgorCisgICAgUVN0cmluZ0xp
c3QgbHN0OworICAgIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9iamVjdCk7CisgICAgd2hpbGUg
KCFwbWFwLmlzRW1wdHkoKSkgeworICAgICAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIHRydWUp
OworICAgICAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIHRydWUpOworICAgICAgICBpdC5uZXh0
KCk7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0Lm5hbWUoKTsKKyAgICAgICAgUUNPTVBBUkUo
cG1hcC5jb250YWlucyhuYW1lKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwg
bmFtZSk7CisgICAgICAgIFFDT01QQVJFKGl0LmZsYWdzKCksIG9iamVjdC5wcm9wZXJ0eUZsYWdz
KG5hbWUpKTsKKyAgICAgICAgUUNPTVBBUkUoaXQudmFsdWUoKS5zdHJpY3RseUVxdWFscyhRU2Ny
aXB0VmFsdWUoJmVuZ2luZSwgcG1hcC52YWx1ZShuYW1lKSkpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUoaXQuc2NyaXB0TmFtZSgpLCBlbmdpbmUudG9TdHJpbmdIYW5kbGUobmFtZSkpOworICAg
ICAgICBwbWFwLnJlbW92ZShuYW1lKTsKKyAgICAgICAgbHN0LmFwcGVuZChuYW1lKTsKKyAgICB9
CisKKyAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIGZhbHNlKTsKKyAgICBRQ09NUEFSRShpdC5o
YXNOZXh0KCksIGZhbHNlKTsKKworICAgIGl0LnRvRnJvbnQoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxzdC5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgp
LCB0cnVlKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCks
IGxzdC5hdChpKSk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsc3QuY291bnQo
KTsgKytpKSB7CisgICAgICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCksIHRydWUpOworICAg
ICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIGxzdC5hdChs
c3QuY291bnQoKS0xLWkpKTsKKyAgICB9CisgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwg
ZmFsc2UpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUJhY2t3
YXJkX2RhdGEoKQoreworICAgIGl0ZXJhdGVGb3J3YXJkX2RhdGEoKTsKK30KKwordm9pZCB0c3Rf
UVNjcmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVCYWNrd2FyZCgpCit7CisgICAgUUZFVENIKFFT
dHJpbmdMaXN0LCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBRRkVUQ0goUVN0cmluZ0xpc3QsIHByb3Bl
cnR5VmFsdWVzKTsKKyAgICBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+IHBtYXA7CisgICAgUV9BU1NF
UlQocHJvcGVydHlOYW1lcy5zaXplKCkgPT0gcHJvcGVydHlWYWx1ZXMuc2l6ZSgpKTsKKworICAg
IFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZSBvYmplY3QgPSBlbmdpbmUu
bmV3T2JqZWN0KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IHByb3BlcnR5TmFtZXMuYXQoaSk7Cisg
ICAgICAgIFFTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eVZhbHVlcy5hdChpKTsKKyAgICAgICAgcG1h
cC5pbnNlcnQobmFtZSwgdmFsdWUpOworICAgICAgICBvYmplY3Quc2V0UHJvcGVydHkobmFtZSwg
UVNjcmlwdFZhbHVlKCZlbmdpbmUsIHZhbHVlKSk7CisgICAgfQorCisgICAgUVN0cmluZ0xpc3Qg
bHN0OworICAgIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9iamVjdCk7CisgICAgaXQudG9CYWNr
KCk7CisgICAgd2hpbGUgKCFwbWFwLmlzRW1wdHkoKSkgeworICAgICAgICBRQ09NUEFSRShpdC5o
YXNQcmV2aW91cygpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwg
dHJ1ZSk7CisgICAgICAgIGl0LnByZXZpb3VzKCk7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0
Lm5hbWUoKTsKKyAgICAgICAgUUNPTVBBUkUocG1hcC5jb250YWlucyhuYW1lKSwgdHJ1ZSk7Cisg
ICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgbmFtZSk7CisgICAgICAgIFFDT01QQVJFKGl0LmZs
YWdzKCksIG9iamVjdC5wcm9wZXJ0eUZsYWdzKG5hbWUpKTsKKyAgICAgICAgUUNPTVBBUkUoaXQu
dmFsdWUoKS5zdHJpY3RseUVxdWFscyhRU2NyaXB0VmFsdWUoJmVuZ2luZSwgcG1hcC52YWx1ZShu
YW1lKSkpLCB0cnVlKTsKKyAgICAgICAgcG1hcC5yZW1vdmUobmFtZSk7CisgICAgICAgIGxzdC5h
cHBlbmQobmFtZSk7CisgICAgfQorCisgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgZmFs
c2UpOworICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCksIGZhbHNlKTsKKworICAgIGl0LnRv
QmFjaygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHN0LmNvdW50KCk7ICsraSkgeworICAg
ICAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCB0cnVlKTsKKyAgICAgICAgaXQucHJldmlv
dXMoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBsc3QuYXQoaSkpOworICAgIH0KKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHN0LmNvdW50KCk7ICsraSkgeworICAgICAgICBRQ09N
UEFSRShpdC5oYXNOZXh0KCksIHRydWUpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFD
T01QQVJFKGl0Lm5hbWUoKSwgbHN0LmF0KGxzdC5jb3VudCgpLTEtaSkpOworICAgIH0KKyAgICBR
Q09NUEFSRShpdC5oYXNOZXh0KCksIGZhbHNlKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFZhbHVl
SXRlcmF0b3I6Oml0ZXJhdGVBcnJheV9kYXRhKCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFT
dHJpbmdMaXN0PigiaW5wdXRQcm9wZXJ0eU5hbWVzIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxR
U3RyaW5nTGlzdD4oImlucHV0UHJvcGVydHlWYWx1ZXMiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1u
PFFTdHJpbmdMaXN0PigicHJvcGVydHlOYW1lcyIpOworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0
cmluZ0xpc3Q+KCJwcm9wZXJ0eVZhbHVlcyIpOworICAgIFFUZXN0OjpuZXdSb3coIm5vIGVsZW1l
bnRzIikgPDwgUVN0cmluZ0xpc3QoKSA8PCBRU3RyaW5nTGlzdCgpIDw8IFFTdHJpbmdMaXN0KCkg
PDwgUVN0cmluZ0xpc3QoKTsKKworICAgIFFUZXN0OjpuZXdSb3coIjA9Zm9vLCAxPWJhcnIiKQor
ICAgICAgICA8PCAoUVN0cmluZ0xpc3QoKSA8PCAiMCIgPDwgIjEiKQorICAgICAgICA8PCAoUVN0
cmluZ0xpc3QoKSA8PCAiZm9vIiA8PCAiYmFyIikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0KCkg
PDwgIjAiIDw8ICIxIikKKyAgICAgICAgPDwgKFFTdHJpbmdMaXN0KCkgPDwgImZvbyIgPDwgImJh
ciIpOworCisgICAgUVRlc3Q6Om5ld1JvdygiMD1mb28sIDM9YmFyciIpCisgICAgICAgIDw8IChR
U3RyaW5nTGlzdCgpIDw8ICIwIiA8PCAiMSIgPDwgIjIiIDw8ICIzIikKKyAgICAgICAgPDwgKFFT
dHJpbmdMaXN0KCkgPDwgImZvbyIgPDwgIiIgPDwgIiIgPDwgImJhciIpCisgICAgICAgIDw8IChR
U3RyaW5nTGlzdCgpIDw8ICIwIiA8PCAiMSIgPDwgIjIiIDw8ICIzIikKKyAgICAgICAgPDwgKFFT
dHJpbmdMaXN0KCkgPDwgImZvbyIgPDwgIiIgPDwgIiIgPDwgImJhciIpOworfQorCit2b2lkIHRz
dF9RU2NyaXB0VmFsdWVJdGVyYXRvcjo6aXRlcmF0ZUFycmF5KCkKK3sKKyAgICBRRkVUQ0goUVN0
cmluZ0xpc3QsIGlucHV0UHJvcGVydHlOYW1lcyk7CisgICAgUUZFVENIKFFTdHJpbmdMaXN0LCBp
bnB1dFByb3BlcnR5VmFsdWVzKTsKKyAgICBRRkVUQ0goUVN0cmluZ0xpc3QsIHByb3BlcnR5TmFt
ZXMpOworICAgIFFGRVRDSChRU3RyaW5nTGlzdCwgcHJvcGVydHlWYWx1ZXMpOworCisgICAgUVNj
cmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIGFycmF5ID0gZW5naW5lLm5ld0Fy
cmF5KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFByb3BlcnR5TmFtZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGFycmF5LnNldFByb3BlcnR5KGlucHV0UHJvcGVydHlOYW1lcy5hdChp
KSwgaW5wdXRQcm9wZXJ0eVZhbHVlcy5hdChpKSk7CisKKyAgICBpbnQgbGVuZ3RoID0gYXJyYXku
cHJvcGVydHkoImxlbmd0aCIpLnRvSW50MzIoKTsKKyAgICBRQ09NUEFSRShsZW5ndGgsIHByb3Bl
cnR5TmFtZXMuc2l6ZSgpKTsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChhcnJheSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBRQ09NUEFSRShp
dC5oYXNOZXh0KCksIHRydWUpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJF
KGl0Lm5hbWUoKSwgcHJvcGVydHlOYW1lcy5hdChpKSk7CisgICAgICAgIFFDT01QQVJFKGl0LmZs
YWdzKCksIGFycmF5LnByb3BlcnR5RmxhZ3MocHJvcGVydHlOYW1lcy5hdChpKSkpOworICAgICAg
ICBRVkVSSUZZKGl0LnZhbHVlKCkuc3RyaWN0bHlFcXVhbHMoYXJyYXkucHJvcGVydHkocHJvcGVy
dHlOYW1lcy5hdChpKSkpKTsKKyAgICAgICAgUUNPTVBBUkUoaXQudmFsdWUoKS50b1N0cmluZygp
LCBwcm9wZXJ0eVZhbHVlcy5hdChpKSk7CisgICAgfQorICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgp
KTsKKyAgICBpdC5uZXh0KCk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nOjpmcm9t
TGF0aW4xKCJsZW5ndGgiKSk7CisgICAgUVZFUklGWShpdC52YWx1ZSgpLmlzTnVtYmVyKCkpOwor
ICAgIFFDT01QQVJFKGl0LnZhbHVlKCkudG9JbnQzMigpLCBsZW5ndGgpOworICAgIFFDT01QQVJF
KGl0LmZsYWdzKCksIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlGbGFncyhRU2NyaXB0VmFsdWU6OlNr
aXBJbkVudW1lcmF0aW9uIHwgUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSkpOworCisgICAgaXQu
cHJldmlvdXMoKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCBsZW5ndGggPiAwKTsK
KyAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaXQu
cHJldmlvdXMoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBwcm9wZXJ0eU5hbWVzLmF0
KGkpKTsKKyAgICAgICAgUUNPTVBBUkUoaXQuZmxhZ3MoKSwgYXJyYXkucHJvcGVydHlGbGFncyhw
cm9wZXJ0eU5hbWVzLmF0KGkpKSk7CisgICAgICAgIFFWRVJJRlkoaXQudmFsdWUoKS5zdHJpY3Rs
eUVxdWFscyhhcnJheS5wcm9wZXJ0eShwcm9wZXJ0eU5hbWVzLmF0KGkpKSkpOworICAgICAgICBR
Q09NUEFSRShpdC52YWx1ZSgpLnRvU3RyaW5nKCksIHByb3BlcnR5VmFsdWVzLmF0KGkpKTsKKyAg
ICAgICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgaSA+IDApOworICAgIH0KKyAgICBRQ09N
UEFSRShpdC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisKKyAgICAvLyBoYXNOZXh0KCkgYW5kIGhh
c1ByZXZpb3VzKCkgY2FjaGUgdGhlaXIgcmVzdWx0OyB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IGlz
IGluIHN5bmMKKyAgICBpZiAobGVuZ3RoID4gMSkgeworICAgICAgICBRVkVSSUZZKGl0Lmhhc05l
eHQoKSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCIwIikpOworICAgICAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7
CisgICAgICAgIGl0LnByZXZpb3VzKCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0
cmluZzo6ZnJvbUxhdGluMSgiMCIpKTsKKyAgICAgICAgUVZFUklGWSghaXQuaGFzUHJldmlvdXMo
KSk7CisgICAgICAgIGl0Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCIwIikpOworICAgICAgICBRVkVSSUZZKGl0Lmhhc1ByZXZpb3VzKCkp
OworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiMSIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLyBzYW1lIHRlc3Qg
YXMgb2JqZWN0OgorICAgICAgICBRU2NyaXB0VmFsdWUgb3JpZ2luYWxBcnJheSA9IGVuZ2luZS5u
ZXdBcnJheSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0UHJvcGVydHlOYW1l
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG9yaWdpbmFsQXJyYXkuc2V0UHJvcGVydHkoaW5w
dXRQcm9wZXJ0eU5hbWVzLmF0KGkpLCBpbnB1dFByb3BlcnR5VmFsdWVzLmF0KGkpKTsKKworICAg
ICAgICBRU2NyaXB0VmFsdWUgYXJyYXkgPSBvcmlnaW5hbEFycmF5LnRvT2JqZWN0KCk7CisgICAg
ICAgIGludCBsZW5ndGggPSBhcnJheS5wcm9wZXJ0eSgibGVuZ3RoIikudG9JbnQzMigpOworICAg
ICAgICBRQ09NUEFSRShsZW5ndGgsIHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKKyAgICAgICAgUVNj
cmlwdFZhbHVlSXRlcmF0b3IgaXQoYXJyYXkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIHRydWUp
OworICAgICAgICAgICAgaXQubmV4dCgpOworICAgICAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgp
LCBwcm9wZXJ0eU5hbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIFFDT01QQVJFKGl0LmZsYWdzKCks
IGFycmF5LnByb3BlcnR5RmxhZ3MocHJvcGVydHlOYW1lcy5hdChpKSkpOworICAgICAgICAgICAg
UVZFUklGWShpdC52YWx1ZSgpLnN0cmljdGx5RXF1YWxzKGFycmF5LnByb3BlcnR5KHByb3BlcnR5
TmFtZXMuYXQoaSkpKSk7CisgICAgICAgICAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnRvU3RyaW5n
KCksIHByb3BlcnR5VmFsdWVzLmF0KGkpKTsKKyAgICAgICAgfQorICAgICAgICBRQ09NUEFSRShp
dC5oYXNOZXh0KCksIHRydWUpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJF
KGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgibGVuZ3RoIikpOworICAgIH0KK30KKwor
dm9pZCB0c3RfUVNjcmlwdFZhbHVlSXRlcmF0b3I6Oml0ZXJhdGVCYWNrQW5kRm9ydGgoKQorewor
ICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIG9i
amVjdCA9IGVuZ2luZS5uZXdPYmplY3QoKTsKKyAgICAgICAgb2JqZWN0LnNldFByb3BlcnR5KCJm
b28iLCBRU2NyaXB0VmFsdWUoJmVuZ2luZSwgImJhciIpKTsKKyAgICAgICAgb2JqZWN0LnNldFBy
b3BlcnR5KCJyYWIiLCBRU2NyaXB0VmFsdWUoJmVuZ2luZSwgIm9vZiIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbik7IC8vIHNob3Vs
ZCBub3QgYWZmZWN0IGl0ZXJhdG9yCisgICAgICAgIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9i
amVjdCk7CisgICAgICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICAgICAgaXQubmV4dCgp
OworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKKyAg
ICAgICAgUVZFUklGWShpdC5oYXNQcmV2aW91cygpKTsKKyAgICAgICAgaXQucHJldmlvdXMoKTsK
KyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7CisgICAg
ICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBR
Q09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKKyAgICAgICAgUVZFUklG
WShpdC5oYXNQcmV2aW91cygpKTsKKyAgICAgICAgaXQucHJldmlvdXMoKTsKKyAgICAgICAgUUNP
TVBBUkUoaXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJmb28iKSk7CisgICAgICAgIFFWRVJJRlko
aXQuaGFzTmV4dCgpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5u
YW1lKCksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNOZXh0
KCkpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUUxh
dGluMVN0cmluZygicmFiIikpOworICAgICAgICBRVkVSSUZZKGl0Lmhhc1ByZXZpb3VzKCkpOwor
ICAgICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRp
bjFTdHJpbmcoInJhYiIpKTsKKyAgICAgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgICAg
ICBpdC5uZXh0KCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUUxhdGluMVN0cmluZygi
cmFiIikpOworICAgICAgICBRVkVSSUZZKGl0Lmhhc1ByZXZpb3VzKCkpOworICAgICAgICBpdC5w
cmV2aW91cygpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJpbmcoInJh
YiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLyBoYXNOZXh0KCkgYW5kIGhhc1ByZXZpb3Vz
KCkgY2FjaGUgdGhlaXIgcmVzdWx0OyB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IGlzIGluIHN5bmMK
KyAgICAgICAgUVNjcmlwdFZhbHVlIG9iamVjdCA9IGVuZ2luZS5uZXdPYmplY3QoKTsKKyAgICAg
ICAgb2JqZWN0LnNldFByb3BlcnR5KCJmb28iLCBRU2NyaXB0VmFsdWUoJmVuZ2luZSwgImJhciIp
KTsKKyAgICAgICAgb2JqZWN0LnNldFByb3BlcnR5KCJyYWIiLCBRU2NyaXB0VmFsdWUoJmVuZ2lu
ZSwgIm9vZiIpKTsKKyAgICAgICAgUVNjcmlwdFZhbHVlSXRlcmF0b3IgaXQob2JqZWN0KTsKKyAg
ICAgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgICAgICBpdC5uZXh0KCk7CisgICAgICAg
IFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiZm9vIikpOworICAgICAg
ICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgICAgIGl0LnByZXZpb3VzKCk7CisgICAgICAg
IFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiZm9vIikpOworICAgICAg
ICBRVkVSSUZZKCFpdC5oYXNQcmV2aW91cygpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAg
ICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImZvbyIpKTsKKyAgICAg
ICAgUVZFUklGWShpdC5oYXNQcmV2aW91cygpKTsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAg
ICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoInJhYiIpKTsKKyAgICB9
Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpzZXRWYWx1ZSgpCit7CisgICAg
UVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIG9iamVjdCA9IGVuZ2luZS5u
ZXdPYmplY3QoKTsKKyAgICBvYmplY3Quc2V0UHJvcGVydHkoImZvbyIsIFFTY3JpcHRWYWx1ZSgm
ZW5naW5lLCAiYmFyIikpOworICAgIFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9iamVjdCk7Cisg
ICAgaXQubmV4dCgpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUUxhdGluMVN0cmluZygiZm9v
IikpOworICAgIGl0LnNldFZhbHVlKFFTY3JpcHRWYWx1ZSgmZW5naW5lLCAiYmF6IikpOworICAg
IFFDT01QQVJFKGl0LnZhbHVlKCkuc3RyaWN0bHlFcXVhbHMoUVNjcmlwdFZhbHVlKCZlbmdpbmUs
IFFMYXRpbjFTdHJpbmcoImJheiIpKSksIHRydWUpOworICAgIFFDT01QQVJFKG9iamVjdC5wcm9w
ZXJ0eSgiZm9vIikudG9TdHJpbmcoKSwgUUxhdGluMVN0cmluZygiYmF6IikpOworICAgIGl0LnNl
dFZhbHVlKFFTY3JpcHRWYWx1ZSgmZW5naW5lLCAiemFiIikpOworICAgIFFDT01QQVJFKGl0LnZh
bHVlKCkuc3RyaWN0bHlFcXVhbHMoUVNjcmlwdFZhbHVlKCZlbmdpbmUsIFFMYXRpbjFTdHJpbmco
InphYiIpKSksIHRydWUpOworICAgIFFDT01QQVJFKG9iamVjdC5wcm9wZXJ0eSgiZm9vIikudG9T
dHJpbmcoKSwgUUxhdGluMVN0cmluZygiemFiIikpOworfQorCit2b2lkIHRzdF9RU2NyaXB0VmFs
dWVJdGVyYXRvcjo6cmVtb3ZlKCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBR
U2NyaXB0VmFsdWUgb2JqZWN0ID0gZW5naW5lLm5ld09iamVjdCgpOworICAgIG9iamVjdC5zZXRQ
cm9wZXJ0eSgiZm9vIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsICJiYXIiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbik7IC8vIHNob3VsZCBu
b3QgYWZmZWN0IGl0ZXJhdG9yCisgICAgb2JqZWN0LnNldFByb3BlcnR5KCJyYWIiLCBRU2NyaXB0
VmFsdWUoJmVuZ2luZSwgIm9vZiIpKTsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmpl
Y3QpOworICAgIGl0Lm5leHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJp
bmcoImZvbyIpKTsKKyAgICBpdC5yZW1vdmUoKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91
cygpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUob2JqZWN0LnByb3BlcnR5KCJmb28iKS5pc1ZhbGlk
KCksIGZhbHNlKTsKKyAgICBRQ09NUEFSRShvYmplY3QucHJvcGVydHkoInJhYiIpLnRvU3RyaW5n
KCksIFFMYXRpbjFTdHJpbmcoIm9vZiIpKTsKKyAgICBpdC5uZXh0KCk7CisgICAgUUNPTVBBUkUo
aXQubmFtZSgpLCBRTGF0aW4xU3RyaW5nKCJyYWIiKSk7CisgICAgUUNPTVBBUkUoaXQudmFsdWUo
KS50b1N0cmluZygpLCBRTGF0aW4xU3RyaW5nKCJvb2YiKSk7CisgICAgUUNPTVBBUkUoaXQuaGFz
TmV4dCgpLCBmYWxzZSk7CisgICAgaXQucmVtb3ZlKCk7CisgICAgUUNPTVBBUkUob2JqZWN0LnBy
b3BlcnR5KCJyYWIiKS5pc1ZhbGlkKCksIGZhbHNlKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2
aW91cygpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxzZSk7Cit9CisK
K3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpyZW1vdmVNaXhlZCgpCit7CisgICAgLy8g
VGhpcyB0ZXN0IGNoZWNrcyBpZiBRU2NyaXB0VmFsdWVJdGVyYXRvciBiZWhhaXZlcyBjb3JyZWN0
bHkgaWYgYW4gb2JqZWN0J3MgcHJvcGVydHkgZ290IGRlbGV0ZWQKKyAgICAvLyBpbiBkaWZmZXJl
bnQgd2F5LgorICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZSBvYmpl
Y3QgPSBlbmdpbmUuZXZhbHVhdGUoIm8gPSBuZXcgT2JqZWN0OyBvIik7CisgICAgb2JqZWN0LnNl
dFByb3BlcnR5KCJhIiwgUVNjcmlwdFZhbHVlKDEyNCksIFFTY3JpcHRWYWx1ZTo6U2tpcEluRW51
bWVyYXRpb24pOworICAgIG9iamVjdC5zZXRQcm9wZXJ0eSgiYiIsIFFTY3JpcHRWYWx1ZSg4MTYp
KTsKKyAgICBvYmplY3Quc2V0UHJvcGVydHkoImMiLCBRU2NyaXB0VmFsdWUoMzI2NCkpOworICAg
IFFTY3JpcHRWYWx1ZUl0ZXJhdG9yIGl0KG9iamVjdCk7CisgICAgaXQubmV4dCgpOworICAgIGl0
Lm5leHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFMYXRpbjFTdHJpbmcoImIiKSk7Cisg
ICAgUUNPTVBBUkUoaXQuaGFzUHJldmlvdXMoKSwgdHJ1ZSk7CisgICAgUUNPTVBBUkUoaXQuaGFz
TmV4dCgpLCB0cnVlKTsKKyAgICAvLyBSZW1vdmUgJ2EnCisgICAgb2JqZWN0LnNldFByb3BlcnR5
KCJhIiwgUVNjcmlwdFZhbHVlKCkpOworICAgIFFFWFBFQ1RfRkFJTCgiIiwgIlRoYXQgd291bGQg
YmUgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIGFuZCBwZXJmb3JtYW5jZSBjaGFuZ2UsIG5ldyBR
dFNjcmlwdCBBUEkgc2hvdWxkIGJlIGRldmVsb3BlZCAoUVRCVUctMTIwODcpIiwgQWJvcnQpOwor
ICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCksIGZhbHNlKTsKKyAgICBRQ09NUEFSRShpdC5o
YXNOZXh0KCksIHRydWUpOworICAgIC8vIFJlbW92ZSAnYycKKyAgICBlbmdpbmUuZXZhbHVhdGUo
ImRlbGV0ZSBvLmMiKTsKKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2aW91cygpLCBmYWxzZSk7Cisg
ICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxzZSk7CisgICAgLy8gUmVtb3ZlICdiJworICAg
IG9iamVjdC5zZXRQcm9wZXJ0eSgiYiIsIFFTY3JpcHRWYWx1ZSgpKTsKKyAgICBRQ09NUEFSRShp
dC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisgICAgUUNPTVBBUkUoaXQuaGFzTmV4dCgpLCBmYWxz
ZSk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nKCkpOworICAgIFFDT01QQVJFKGl0
LnZhbHVlKCkudG9TdHJpbmcoKSwgUVN0cmluZygpKTsKKworICAgIC8vIFRyeSB0byByZW1vdmUg
YSByZW1vdmVkIHByb3BlcnR5LgorICAgIGl0LnJlbW92ZSgpOworICAgIFFDT01QQVJFKGl0Lmhh
c1ByZXZpb3VzKCksIGZhbHNlKTsKKyAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIGZhbHNlKTsK
KyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmcoKSk7CisgICAgUUNPTVBBUkUoaXQudmFs
dWUoKS50b1N0cmluZygpLCBRU3RyaW5nKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy
OyArK2kpIHsKKyAgICAgICAgaXQubmV4dCgpOworICAgICAgICBRQ09NUEFSRShpdC5oYXNQcmV2
aW91cygpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKGl0Lmhhc05leHQoKSwgZmFsc2UpOwor
ICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmcoKSk7CisgICAgICAgIFFDT01QQVJF
KGl0LnZhbHVlKCkudG9TdHJpbmcoKSwgUVN0cmluZygpKTsKKyAgICB9CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBR
Q09NUEFSRShpdC5oYXNQcmV2aW91cygpLCBmYWxzZSk7CisgICAgICAgIFFDT01QQVJFKGl0Lmhh
c05leHQoKSwgZmFsc2UpOworICAgICAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmcoKSk7
CisgICAgICAgIFFDT01QQVJFKGl0LnZhbHVlKCkudG9TdHJpbmcoKSwgUVN0cmluZygpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjpyZW1vdmVVbmRlbGV0YWJs
ZSgpCit7CisgICAgLy8gVW5kZWxldGFibGUgcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZCB2aWEg
aXRlcmF0b3IuCisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlIG9i
amVjdCA9IGVuZ2luZS5ldmFsdWF0ZSgibyA9IG5ldyBPYmplY3Q7IG8iKTsKKyAgICBvYmplY3Qu
c2V0UHJvcGVydHkoImEiLCBRU2NyaXB0VmFsdWUoJmVuZ2luZSwgMTI0KSk7CisgICAgb2JqZWN0
LnNldFByb3BlcnR5KCJiIiwgUVNjcmlwdFZhbHVlKCZlbmdpbmUsIDgxNiksIFFTY3JpcHRWYWx1
ZTo6VW5kZWxldGFibGUpOworICAgIFFWRVJJRlkob2JqZWN0LnByb3BlcnR5KCJiIikuaXNWYWxp
ZCgpKTsKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRvciBpdChvYmplY3QpOworICAgIGl0Lm5leHQo
KTsKKyAgICBpdC5uZXh0KCk7CisgICAgaXQucmVtb3ZlKCk7CisgICAgaXQudG9Gcm9udCgpOwor
ICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICBRVkVSSUZZKG9iamVjdC5wcm9wZXJ0eSgi
YiIpLmlzVmFsaWQoKSk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjppdGVy
YXRlU3RyaW5nKCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBRU2NyaXB0VmFs
dWUgc3RyID0gUVNjcmlwdFZhbHVlKCZlbmdpbmUsIFFTdHJpbmc6OmZyb21MYXRpbjEoImNpYW8i
KSk7CisgICAgUVZFUklGWShzdHIuaXNTdHJpbmcoKSk7CisgICAgUVNjcmlwdFZhbHVlIG9iaiA9
IHN0ci50b09iamVjdCgpOworICAgIGludCBsZW5ndGggPSBvYmoucHJvcGVydHkoImxlbmd0aCIp
LnRvSW50MzIoKTsKKyAgICBRQ09NUEFSRShsZW5ndGgsIDQpOworICAgIFFTY3JpcHRWYWx1ZUl0
ZXJhdG9yIGl0KG9iaik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBRQ09NUEFSRShpdC5oYXNOZXh0KCksIHRydWUpOworICAgICAgICBRU3RyaW5nIGlu
ZGV4U3RyID0gUVNjcmlwdFZhbHVlKCZlbmdpbmUsIGkpLnRvU3RyaW5nKCk7CisgICAgICAgIGl0
Lm5leHQoKTsKKyAgICAgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBpbmRleFN0cik7CisgICAgICAg
IFFDT01QQVJFKGl0LmZsYWdzKCksIG9iai5wcm9wZXJ0eUZsYWdzKGluZGV4U3RyKSk7CisgICAg
ICAgIFFDT01QQVJFKGl0LnZhbHVlKCkuc3RyaWN0bHlFcXVhbHMob2JqLnByb3BlcnR5KGluZGV4
U3RyKSksIHRydWUpOworICAgIH0KKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgaXQu
bmV4dCgpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgibGVu
Z3RoIikpOworICAgIFFWRVJJRlkoaXQudmFsdWUoKS5pc051bWJlcigpKTsKKyAgICBRQ09NUEFS
RShpdC52YWx1ZSgpLnRvSW50MzIoKSwgbGVuZ3RoKTsKKyAgICBRQ09NUEFSRShpdC5mbGFncygp
LCBRU2NyaXB0VmFsdWU6OlByb3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVlOjpSZWFkT25seSB8IFFT
Y3JpcHRWYWx1ZTo6U2tpcEluRW51bWVyYXRpb24gfCBRU2NyaXB0VmFsdWU6OlVuZGVsZXRhYmxl
KSk7CisKKyAgICBpdC5wcmV2aW91cygpOworICAgIFFDT01QQVJFKGl0Lmhhc1ByZXZpb3VzKCks
IGxlbmd0aCA+IDApOworICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBpdC5wcmV2aW91cygpOworICAgICAgICBRU3RyaW5nIGluZGV4U3RyID0gUVNj
cmlwdFZhbHVlKCZlbmdpbmUsIGkpLnRvU3RyaW5nKCk7CisgICAgICAgIFFDT01QQVJFKGl0Lm5h
bWUoKSwgaW5kZXhTdHIpOworICAgICAgICBRQ09NUEFSRShpdC5mbGFncygpLCBvYmoucHJvcGVy
dHlGbGFncyhpbmRleFN0cikpOworICAgICAgICBRQ09NUEFSRShpdC52YWx1ZSgpLnN0cmljdGx5
RXF1YWxzKG9iai5wcm9wZXJ0eShpbmRleFN0cikpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUo
aXQuaGFzUHJldmlvdXMoKSwgaSA+IDApOworICAgIH0KKyAgICBRQ09NUEFSRShpdC5oYXNQcmV2
aW91cygpLCBmYWxzZSk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRWYWx1ZUl0ZXJhdG9yOjphc3Np
Z25PYmplY3RUb0l0ZXJhdG9yKCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZzsKKyAgICBRU2Ny
aXB0VmFsdWUgb2JqMSA9IGVuZy5uZXdPYmplY3QoKTsKKyAgICBvYmoxLnNldFByb3BlcnR5KCJm
b28iLCAxMjMpOworICAgIFFTY3JpcHRWYWx1ZSBvYmoyID0gZW5nLm5ld09iamVjdCgpOworICAg
IG9iajIuc2V0UHJvcGVydHkoImJhciIsIDQ1Nik7CisKKyAgICBRU2NyaXB0VmFsdWVJdGVyYXRv
ciBpdChvYmoxKTsKKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgaXQubmV4dCgpOwor
ICAgIGl0ID0gb2JqMjsKKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgaXQubmV4dCgp
OworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiYmFyIikpOwor
CisgICAgaXQgPSBvYmoxOworICAgIFFWRVJJRlkoaXQuaGFzTmV4dCgpKTsKKyAgICBpdC5uZXh0
KCk7CisgICAgUUNPTVBBUkUoaXQubmFtZSgpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJmb28iKSk7
CisKKyAgICBpdCA9IG9iajI7CisgICAgUVZFUklGWShpdC5oYXNOZXh0KCkpOworICAgIGl0Lm5l
eHQoKTsKKyAgICBRQ09NUEFSRShpdC5uYW1lKCksIFFTdHJpbmc6OmZyb21MYXRpbjEoImJhciIp
KTsKKworICAgIGl0ID0gb2JqMjsKKyAgICBRVkVSSUZZKGl0Lmhhc05leHQoKSk7CisgICAgaXQu
bmV4dCgpOworICAgIFFDT01QQVJFKGl0Lm5hbWUoKSwgUVN0cmluZzo6ZnJvbUxhdGluMSgiYmFy
IikpOworfQorCitRVEVTVF9NQUlOKHRzdF9RU2NyaXB0VmFsdWVJdGVyYXRvcikKKyNpbmNsdWRl
ICJ0c3RfcXNjcmlwdHZhbHVlaXRlcmF0b3IubW9jIgorCisjZW5kaWYgLy8gdHN0X3FzY3JpcHR2
YWx1ZWl0ZXJhdG9yX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3Rz
LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwppbmRleCA3YzNmNTkwLi42
ZDU1NTliIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8KKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0xLDQgKzEsNSBAQAogVEVN
UExBVEUgPSBzdWJkaXJzCiBTVUJESVJTID0gICBxc2NyaXB0ZW5naW5lIFwKICAgICAgICAgICAg
IHFzY3JpcHR2YWx1ZSBcCisgICAgICAgICAgICBxc2NyaXB0dmFsdWVpdGVyYXRvciBcCiAgICAg
ICAgICAgICBxc2NyaXB0c3RyaW5nCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>