<?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>31175</bug_id>
          
          <creation_ts>2009-11-05 10:53:13 -0800</creation_ts>
          <short_desc>Update API of WebGLArray and friends</short_desc>
          <delta_ts>2009-11-22 21:31:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>brettw</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>petersont</cc>
    
    <cc>rlp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>160879</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-11-05 10:53:13 -0800</bug_when>
    <thetext>The current implementation of CanvasArray has sizeInBytes and alignedSizeInBytes. The former has been moved to CanvasRenderingContextWebGL and the latter has been removed. Attributes buffer, byteOffset and byteLength need to be added. Also need to add slice() method.

All the subclasses need an added copy constructor, and two set() methods, one of which takes another object of the same type and one which takes a JS array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163627</commentid>
    <comment_count>1</comment_count>
      <attachid>43219</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-13 18:20:17 -0800</bug_when>
    <thetext>Created attachment 43219
Proposed patch

Implementation updates to match spec:
 - Renamed WebGL&lt;T&gt;Array.sizeInBytes() to byteLength.
 - Removed WebGLArray.alignedSizeInBytes().
 - Added WebGLArray.buffer, byteOffset, and slice().
 - Added explicit get() and set() methods to WebGL&lt;T&gt;Array.

Added positive and negative test cases for copy constructors, get() / set(), byteOffset, byteLength, and slice().

Fixed crash in JSWebGLArrayCustom.cpp, toJS(), when WebGLArray was NULL. Fixed various bugs in V8 bindings resulting in test failures.

Reformatted WebGLArray classes to match WebKit coding convention, specifically removing indentation within namespaces. Cleaned up a few places from the recent Canvas -&gt; WebGL renaming.

As discussed in https://bugs.webkit.org/show_bug.cgi?id=29343 , updated copyright notices on WebGLArray classes.

Built and tested both WebKit and Chromium on Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163632</commentid>
    <comment_count>2</comment_count>
      <attachid>43219</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-13 18:30:24 -0800</bug_when>
    <thetext>Comment on attachment 43219
Proposed patch

r=me, this all looks sane to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164060</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-11-16 13:30:42 -0800</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Sending        LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt
Sending        LayoutTests/fast/canvas/webgl/array-unit-tests.html
Sending        WebCore/ChangeLog
Sending        WebCore/bindings/js/JSWebGLArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLByteArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLFloatArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLIntArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLShortArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLUnsignedByteArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLUnsignedIntArrayCustom.cpp
Sending        WebCore/bindings/js/JSWebGLUnsignedShortArrayCustom.cpp
Sending        WebCore/bindings/scripts/CodeGeneratorV8.pm
Sending        WebCore/bindings/v8/V8DOMWrapper.cpp
Sending        WebCore/bindings/v8/custom/V8CustomBinding.h
Sending        WebCore/bindings/v8/custom/V8WebGLArrayBufferCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLArrayCustom.h
Sending        WebCore/bindings/v8/custom/V8WebGLByteArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLFloatArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLIntArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLShortArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp
Sending        WebCore/bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp
Sending        WebCore/html/canvas/WebGLArray.cpp
Sending        WebCore/html/canvas/WebGLArray.h
Sending        WebCore/html/canvas/WebGLArray.idl
Sending        WebCore/html/canvas/WebGLArrayBuffer.cpp
Sending        WebCore/html/canvas/WebGLArrayBuffer.h
Sending        WebCore/html/canvas/WebGLByteArray.cpp
Sending        WebCore/html/canvas/WebGLByteArray.h
Sending        WebCore/html/canvas/WebGLByteArray.idl
Sending        WebCore/html/canvas/WebGLFloatArray.cpp
Sending        WebCore/html/canvas/WebGLFloatArray.h
Sending        WebCore/html/canvas/WebGLFloatArray.idl
Sending        WebCore/html/canvas/WebGLIntArray.cpp
Sending        WebCore/html/canvas/WebGLIntArray.h
Sending        WebCore/html/canvas/WebGLIntArray.idl
Sending        WebCore/html/canvas/WebGLShortArray.cpp
Sending        WebCore/html/canvas/WebGLShortArray.h
Sending        WebCore/html/canvas/WebGLShortArray.idl
Sending        WebCore/html/canvas/WebGLUnsignedByteArray.cpp
Sending        WebCore/html/canvas/WebGLUnsignedByteArray.h
Sending        WebCore/html/canvas/WebGLUnsignedByteArray.idl
Sending        WebCore/html/canvas/WebGLUnsignedIntArray.cpp
Sending        WebCore/html/canvas/WebGLUnsignedIntArray.h
Sending        WebCore/html/canvas/WebGLUnsignedIntArray.idl
Sending        WebCore/html/canvas/WebGLUnsignedShortArray.cpp
Sending        WebCore/html/canvas/WebGLUnsignedShortArray.h
Sending        WebCore/html/canvas/WebGLUnsignedShortArray.idl
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Sending        WebKit/chromium/ChangeLog
Sending        WebKit/chromium/src/GraphicsContext3D.cpp
Transmitting file data .....................................................
Committed revision 51049.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164063</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-11-16 13:42:55 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=43219) [details]
&gt; Proposed patch
&gt; 
&gt; Implementation updates to match spec:
&gt;  - Renamed WebGL&lt;T&gt;Array.sizeInBytes() to byteLength.
&gt;  - Removed WebGLArray.alignedSizeInBytes().
&gt;  - Added WebGLArray.buffer, byteOffset, and slice().
&gt;  - Added explicit get() and set() methods to WebGL&lt;T&gt;Array.
&gt; 
&gt; Added positive and negative test cases for copy constructors, get() / set(),
&gt; byteOffset, byteLength, and slice().
&gt; 
&gt; Fixed crash in JSWebGLArrayCustom.cpp, toJS(), when WebGLArray was NULL. Fixed
&gt; various bugs in V8 bindings resulting in test failures.
&gt; 
&gt; Reformatted WebGLArray classes to match WebKit coding convention, specifically
&gt; removing indentation within namespaces. Cleaned up a few places from the recent
&gt; Canvas -&gt; WebGL renaming.

This is the sort of information that should be included in the ChangeLog entry.  Linking to a bug with no description of the changes is not sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164065</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-11-16 13:52:27 -0800</bug_when>
    <thetext>r51049 did not include WebCore/bindings/js/JSWebGLArrayHelper.h.  I landed it in r51051.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43219</attachid>
            <date>2009-11-13 18:20:17 -0800</date>
            <delta_ts>2009-11-22 21:31:31 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webgl-arrays.patch</filename>
            <type>text/plain</type>
            <size>145836</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDk4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTc2IEBACisyMDA5LTExLTEzICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGUgQVBJIG9mIFdlYkdMQXJyYXkgYW5kIGZyaWVuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMTc1CisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2V0V2ViR0xBcnJheUZyb21BcnJheSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMQnl0
ZUFycmF5OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xGbG9hdEFycmF5OjpzZXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xJbnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYkdMSW50QXJyYXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFNob3J0
QXJyYXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMVW5zaWduZWRJbnRBcnJheTo6c2V0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNldCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TEFycmF5QnVmZmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNf
REVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5o
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V2ViR0xBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRXZWJHTEFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRXZWJHTEFy
cmF5RnJvbUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFdlYkdMQXJyYXkpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6V2ViR0xBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEFycmF5Ojp+V2ViR0xBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEFycmF5OjpzZXRJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5Ojppc0J5dGVBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEFycmF5Ojppc1Vuc2lnbmVkQnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQXJyYXk6OmlzU2hvcnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5
Ojppc1Vuc2lnbmVkU2hvcnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5Ojpp
c0ludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXk6OmlzVW5zaWduZWRJbnRB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5Ojppc0Zsb2F0QXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQXJyYXk6OmJhc2VBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXk6OmJ5
dGVPZmZzZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQXJyYXkuaWRsOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXlC
dWZmZXI6OldlYkdMQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBcnJheUJ1
ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5QnVmZmVyOjpieXRlTGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXlCdWZmZXI6On5XZWJHTEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xCeXRlQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6
Ynl0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6c2xpY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xCeXRlQXJyYXk6OnNldCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xCeXRlQXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnl0ZUFycmF5
Ojppc0J5dGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMQnl0ZUFycmF5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCeXRlQXJy
YXk6Oml0ZW0pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmlkbDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xGbG9hdEFycmF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9h
dEFycmF5OjpXZWJHTEZsb2F0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFy
cmF5OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpieXRlTGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRBcnJheTo6c2xpY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpzZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMRmxvYXRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5Ojpp
c0Zsb2F0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRBcnJheTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMRmxvYXRBcnJheTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRB
cnJheTo6aXRlbSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmlkbDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMSW50QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEludEFy
cmF5OjpXZWJHTEludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMSW50QXJyYXk6Omxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEludEFycmF5OjpieXRlTGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMSW50QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMSW50QXJyYXk6OnNldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJh
eS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xJbnRBcnJheTo6aXNJbnRBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEludEFycmF5OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMSW50QXJyYXk6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEludEFycmF5OjpnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xJbnRBcnJheTo6aXRlbSk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xJbnRBcnJheS5pZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xT
aG9ydEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJheTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJheTo6V2ViR0xTaG9ydEFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hvcnRBcnJheTo6Ynl0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFNob3J0QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJh
eTo6c2V0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJheTo6aXNTaG9ydEFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hvcnRBcnJheTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNo
b3J0QXJyYXk6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNob3J0QXJyYXk6OmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNob3J0QXJyYXk6Oml0ZW0pOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5pZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEJ5dGVB
cnJheTo6V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheTo6Ynl0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5OjpzbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5OjpzZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXku
aDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmlzVW5zaWduZWRC
eXRlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6ZGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMVW5zaWduZWRCeXRlQXJyYXk6Oml0ZW0pOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMVW5zaWduZWRJbnRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVk
SW50QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJy
YXk6OldlYkdMVW5zaWduZWRJbnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2ln
bmVkSW50QXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50
QXJyYXk6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEludEFy
cmF5OjpzbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNl
dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmlzVW5zaWduZWRJbnRBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEludEFycmF5OjpzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xVbnNpZ25lZEludEFycmF5OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xV
bnNpZ25lZEludEFycmF5OjppdGVtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkSW50QXJyYXkuaWRsOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OldlYkdM
VW5zaWduZWRTaG9ydEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRTaG9y
dEFycmF5OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJy
YXk6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJy
YXk6OnNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5Ojpz
ZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6aXNVbnNpZ25lZFNob3J0
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5OjppdGVtKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5pZGw6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKwogMjAwOS0xMS0xMyAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm8gcmV2aWV3LCBidWlsZCBmaXggb25seS4KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9u
IDUwOTY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwyMCArNDUsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgV2ViR0xBcnJheSogb2JqZWN0KQogewotICAgIGlmIChvYmplY3QtPmlz
RmxvYXRBcnJheSgpKQotICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdM
RmxvYXRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTEZsb2F0QXJy
YXkqPihvYmplY3QpKTsKLSAgICBpZiAob2JqZWN0LT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCi0g
ICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVjdC0+aXNCeXRlQXJyYXkoKSkKLSAgICAgICAgcmV0
dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTEJ5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTEJ5dGVBcnJheSo+KG9iamVjdCkpOwotICAgIGlmIChvYmpl
Y3QtPmlzSW50QXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNX
ZWJHTEludEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMSW50QXJy
YXkqPihvYmplY3QpKTsKLSAgICBpZiAob2JqZWN0LT5pc1Vuc2lnbmVkSW50QXJyYXkoKSkKLSAg
ICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTFVuc2lnbmVkSW50QXJyYXk+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xVbnNpZ25lZEludEFycmF5Kj4o
b2JqZWN0KSk7Ci0gICAgaWYgKG9iamVjdC0+aXNTaG9ydEFycmF5KCkpCi0gICAgICAgIHJldHVy
biBnZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xTaG9ydEFycmF5PihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMU2hvcnRBcnJheSo+KG9iamVjdCkpOwotICAgIGlmIChvYmpl
Y3QtPmlzVW5zaWduZWRTaG9ydEFycmF5KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmplY3RX
cmFwcGVyPEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkqPihvYmplY3QpKTsKKyAgICBpZiAob2Jq
ZWN0KSB7CisgICAgICAgIGlmIChvYmplY3QtPmlzRmxvYXRBcnJheSgpKQorICAgICAgICAgICAg
cmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTEZsb2F0QXJyYXk+KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xGbG9hdEFycmF5Kj4ob2JqZWN0KSk7CisgICAgICAg
IGlmIChvYmplY3QtPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkKKyAgICAgICAgICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Kj4ob2JqZWN0KSk7Cisg
ICAgICAgIGlmIChvYmplY3QtPmlzQnl0ZUFycmF5KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0
RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PFdlYkdMQnl0ZUFycmF5Kj4ob2JqZWN0KSk7CisgICAgICAgIGlmIChvYmplY3Qt
PmlzSW50QXJyYXkoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpT
V2ViR0xJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTEludEFy
cmF5Kj4ob2JqZWN0KSk7CisgICAgICAgIGlmIChvYmplY3QtPmlzVW5zaWduZWRJbnRBcnJheSgp
KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTFVuc2lnbmVk
SW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xVbnNpZ25lZElu
dEFycmF5Kj4ob2JqZWN0KSk7CisgICAgICAgIGlmIChvYmplY3QtPmlzU2hvcnRBcnJheSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTFNob3J0QXJyYXk+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xTaG9ydEFycmF5Kj4ob2JqZWN0
KSk7CisgICAgICAgIGlmIChvYmplY3QtPmlzVW5zaWduZWRTaG9ydEFycmF5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5
PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
Kj4ob2JqZWN0KSk7CisgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUhlbHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5SGVscGVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUhlbHBlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTV2ViR0xBcnJheUhlbHBlcl9oCisj
ZGVmaW5lIEpTV2ViR0xBcnJheUhlbHBlcl9oCisKKyNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxs
RnJhbWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNWYWx1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDxjbGFzcyBU
PgorSlNDOjpKU1ZhbHVlIHNldFdlYkdMQXJyYXlGcm9tQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFQqIHdlYkdMQXJyYXksIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAgICBpZiAo
YXJncy5hdCgwKS5pc09iamVjdCgpKSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHNlcXVlbmNl
PGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAg
ICAgSlNDOjpKU09iamVjdCogYXJyYXkgPSBKU0M6OmFzT2JqZWN0KGFyZ3MuYXQoMCkpOworICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMikK
KyAgICAgICAgICAgIG9mZnNldCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAg
aW50IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyKGV4ZWMsICJsZW5n
dGgiKSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0KGV4ZWMsIGkp
OworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICB3ZWJHTEFycmF5LT5zZXQo
aSArIG9mZnNldCwgdi50b051bWJlcihleGVjKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gSlNDOjpqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHJldHVybiBKU0M6OnRocm93RXJy
b3IoZXhlYywgSlNDOjpTeW50YXhFcnJvcik7Cit9CisKK30KKworI2VuZGlmIC8vIEpTV2ViR0xB
cnJheUhlbHBlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xBcnJheUhlbHBlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExG
CgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0b20u
Y3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVB
cnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMyBAQAogCiAjaWYg
RU5BQkxFKDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkpTV2ViR0xBcnJheUhlbHBlci5oIgogI2lu
Y2x1ZGUgIkpTV2ViR0xCeXRlQXJyYXkuaCIKIAogI2luY2x1ZGUgIldlYkdMQnl0ZUFycmF5Lmgi
CiAKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDYgKzQ4LDMzIEBAIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxK
U1dlYkdMQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9CiAKK0pTQzo6
SlNWYWx1ZSBKU1dlYkdMQnl0ZUFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxIHx8IGFyZ3Mu
c2l6ZSgpID4gMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Ip
OworCisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDIgJiYgYXJncy5hdCgwKS5pc0ludDMyKCkpIHsK
KyAgICAgICAgLy8gdm9pZCBzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gbG9uZyB2YWx1
ZSk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihhcmdz
LmF0KDEpLnRvSW50MzIoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorCisgICAgV2ViR0xCeXRlQXJyYXkqIGFycmF5ID0gdG9XZWJHTEJ5dGVBcnJheShhcmdz
LmF0KDApKTsKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0xC
eXRlQXJyYXkgYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMikK
KyAgICAgICAgICAgIG9mZnNldCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGltcGwoKS0+c2V0KGFycmF5LCBvZmZzZXQs
IGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlGcm9tQXJy
YXkoZXhlYywgaW1wbCgpLCBhcmdzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCisjaW5jbHVkZSAi
SlNXZWJHTEFycmF5SGVscGVyLmgiCiAjaW5jbHVkZSAiSlNXZWJHTEZsb2F0QXJyYXkuaCIKIAog
I2luY2x1ZGUgIldlYkdMRmxvYXRBcnJheS5oIgpAQCAtNDUsNiArNDYsMzMgQEAgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBnZXRET01PYmplY3RX
cmFwcGVyPEpTV2ViR0xGbG9hdEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9
CiAKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMRmxvYXRBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID4g
MikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworCisgICAg
aWYgKGFyZ3Muc2l6ZSgpID09IDIgJiYgYXJncy5hdCgwKS5pc0ludDMyKCkpIHsKKyAgICAgICAg
Ly8gdm9pZCBzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gbG9uZyB2YWx1ZSk7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAg
aW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihhcmdzLmF0KDEpLnRv
SW50MzIoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisg
ICAgV2ViR0xGbG9hdEFycmF5KiBhcnJheSA9IHRvV2ViR0xGbG9hdEFycmF5KGFyZ3MuYXQoMCkp
OworICAgIGlmIChhcnJheSkgeworICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTEZsb2F0QXJy
YXkgYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMikKKyAgICAg
ICAgICAgIG9mZnNldCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGltcGwoKS0+c2V0KGFycmF5LCBvZmZzZXQsIGVjKTsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlGcm9tQXJyYXkoZXhl
YywgaW1wbCgpLCBhcmdzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTElu
dEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCisjaW5jbHVkZSAiSlNXZWJHTEFycmF5
SGVscGVyLmgiCiAjaW5jbHVkZSAiSlNXZWJHTEludEFycmF5LmgiCiAKICNpbmNsdWRlICJXZWJH
TEludEFycmF5LmgiCkBAIC00NSw2ICs0NiwzMyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTElu
dEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9CiAKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMSW50QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNv
bnN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA+IDIpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKworICAgIGlmIChhcmdzLnNpemUoKSA9PSAy
ICYmIGFyZ3MuYXQoMCkuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGluIGxvbmcgdmFsdWUpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGltcGwoKS0+c2V0KGluZGV4LCBz
dGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFdlYkdMSW50QXJyYXkqIGFy
cmF5ID0gdG9XZWJHTEludEFycmF5KGFyZ3MuYXQoMCkpOworICAgIGlmIChhcnJheSkgeworICAg
ICAgICAvLyB2b2lkIHNldChpbiBXZWJHTEludEFycmF5IGFycmF5LCBbT3B0aW9uYWxdIGluIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDIpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmdzLmF0KDEp
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBp
bXBsKCktPnNldChhcnJheSwgb2Zmc2V0LCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHJl
dHVybiBzZXRXZWJHTEFycmF5RnJvbUFycmF5KGV4ZWMsIGltcGwoKSwgYXJncyk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkpTV2ViR0xBcnJheUhlbHBlci5oIgogI2luY2x1ZGUg
IkpTV2ViR0xTaG9ydEFycmF5LmgiCiAKICNpbmNsdWRlICJXZWJHTFNob3J0QXJyYXkuaCIKQEAg
LTQ1LDYgKzQ2LDMzIEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAK
ICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMU2hvcnRBcnJheT4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBvYmplY3QpOwogfQogCitKU0M6OkpTVmFsdWUgSlNXZWJHTFNob3J0QXJy
YXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQor
eworICAgIGlmIChhcmdzLnNpemUoKSA+IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yKTsKKworICAgIGlmIChhcmdzLnNpemUoKSA9PSAyICYmIGFyZ3MuYXQo
MCkuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGluIGxvbmcgdmFsdWUpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMCku
dG9VSW50MzIoZXhlYyk7CisgICAgICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDxz
aWduZWQgY2hhcj4oYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFdlYkdMU2hvcnRBcnJheSogc2hvcnRBcnJheSA9
IHRvV2ViR0xTaG9ydEFycmF5KGFyZ3MuYXQoMCkpOworICAgIGlmIChzaG9ydEFycmF5KSB7Cisg
ICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMU2hvcnRBcnJheSBhcnJheSwgW09wdGlvbmFsXSBp
biB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Cisg
ICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgb2Zmc2V0ID0gYXJncy5h
dCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAg
ICAgaW1wbCgpLT5zZXQoc2hvcnRBcnJheSwgb2Zmc2V0LCBlYyk7CisgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0K
KworICAgIHJldHVybiBzZXRXZWJHTEFycmF5RnJvbUFycmF5KGV4ZWMsIGltcGwoKSwgYXJncyk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWdu
ZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkpT
V2ViR0xBcnJheUhlbHBlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5o
IgogCiAjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgpAQCAtNDUsNiArNDYsMzMg
QEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBvYmplY3QpOwogfQogCitKU0M6OkpTVmFsdWUgSlNXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykK
K3sKKyAgICBpZiAoYXJncy5zaXplKCkgPiAyKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7CisKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMiAmJiBhcmdzLmF0
KDApLmlzSW50MzIoKSkgeworICAgICAgICAvLyB2b2lkIHNldChpbiB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDAp
LnRvVUludDMyKGV4ZWMpOworICAgICAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKSkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KiBhcnJh
eSA9IHRvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShhcmdzLmF0KDApKTsKKyAgICBpZiAoYXJyYXkp
IHsKKyAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBhcnJheSwg
W09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IDA7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgb2Zm
c2V0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgaW1wbCgpLT5zZXQoYXJyYXksIG9mZnNldCwgZWMpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJheUZyb21BcnJheShleGVjLCBpbXBsKCks
IGFyZ3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRB
cnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
VW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKKyNpbmNsdWRl
ICJKU1dlYkdMQXJyYXlIZWxwZXIuaCIKICNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRJbnRBcnJh
eS5oIgogCiAjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEludEFycmF5LmgiCkBAIC00NSw2ICs0Niwz
MyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJu
IGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTFVuc2lnbmVkSW50QXJyYXk+KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgb2JqZWN0KTsKIH0KIAorSlNDOjpKU1ZhbHVlIEpTV2ViR0xVbnNpZ25lZEludEFy
cmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykK
K3sKKyAgICBpZiAoYXJncy5zaXplKCkgPiAyKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7CisKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMiAmJiBhcmdzLmF0
KDApLmlzSW50MzIoKSkgeworICAgICAgICAvLyB2b2lkIHNldChpbiB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDAp
LnRvVUludDMyKGV4ZWMpOworICAgICAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKSkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBXZWJHTFVuc2lnbmVkSW50QXJyYXkqIGFycmF5
ID0gdG9XZWJHTFVuc2lnbmVkSW50QXJyYXkoYXJncy5hdCgwKSk7CisgICAgaWYgKGFycmF5KSB7
CisgICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMVW5zaWduZWRJbnRBcnJheSBhcnJheSwgW09w
dGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IDA7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgb2Zmc2V0
ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgaW1wbCgpLT5zZXQoYXJyYXksIG9mZnNldCwgZWMpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJheUZyb21BcnJheShleGVjLCBpbXBsKCksIGFy
Z3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0Rf
Q0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKKyNpbmNs
dWRlICJKU1dlYkdMQXJyYXlIZWxwZXIuaCIKICNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmgiCiAKICNpbmNsdWRlICJXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIgpAQCAtNDUs
NiArNDYsMzMgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAg
IHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAorSlNDOjpKU1ZhbHVlIEpTV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNv
bnN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA+IDIpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKworICAgIGlmIChhcmdzLnNpemUoKSA9PSAy
ICYmIGFyZ3MuYXQoMCkuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGluIGxvbmcgdmFsdWUpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGltcGwoKS0+c2V0KGluZGV4LCBz
dGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFdlYkdMVW5zaWduZWRTaG9y
dEFycmF5KiBhcnJheSA9IHRvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkoYXJncy5hdCgwKSk7Cisg
ICAgaWYgKGFycmF5KSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMVW5zaWduZWRTaG9y
dEFycmF5IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDIpCisg
ICAgICAgICAgICBvZmZzZXQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBpbXBsKCktPnNldChhcnJheSwgb2Zmc2V0LCBl
Yyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHJldHVybiBzZXRXZWJHTEFycmF5RnJvbUFycmF5
KGV4ZWMsIGltcGwoKSwgYXJncyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTc0NiwyNSAr
MTc0Niw5IEBAIHN1YiBJc1JlZlB0clR5cGUKIHsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJBdHRyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
V2ViR0xBY3RpdmVJbmZvIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xBcnJheSI7
Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMQXJyYXlCdWZmZXIiOwogICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJDYW52YXNCb29sZWFuQXJyYXkiOwotICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJXZWJHTEJ5dGVBcnJheSI7Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdM
QnVmZmVyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xGbG9hdEFycmF5IjsKLSAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xGcmFtZWJ1ZmZlciI7CiAgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIkNhbnZhc0dyYWRpZW50IjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
V2ViR0xJbnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc09iamVjdCI7
Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMUHJvZ3JhbSI7Ci0gICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIldlYkdMUmVuZGVyYnVmZmVyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiV2ViR0xTaGFkZXIiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFNob3J0QXJy
YXkiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFRleHR1cmUiOwotICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IjsKLSAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiV2ViR0xVbnNpZ25lZEludEFycmF5IjsKLSAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJDbGllbnRSZWN0IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2xpZW50UmVjdExpc3Qi
OwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDREFUQVNlY3Rpb24iOwpAQCAtMTgxMiw2ICsx
Nzk2LDIyIEBAIHN1YiBJc1JlZlB0clR5cGUKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiVGV4
dE1ldHJpY3MiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJUaW1lUmFuZ2VzIjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiVHJlZVdhbGtlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgIldlYkdMQWN0aXZlSW5mbyI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMQXJy
YXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEFycmF5QnVmZmVyIjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xCeXRlQXJyYXkiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJXZWJHTEJ1ZmZlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMRmxv
YXRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMRnJhbWVidWZmZXIiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEludEFycmF5IjsKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiV2ViR0xQcm9ncmFtIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2Vi
R0xSZW5kZXJidWZmZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFNoYWRlciI7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMU2hvcnRBcnJheSI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIldlYkdMVGV4dHVyZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEg
IldlYkdMVW5zaWduZWRCeXRlQXJyYXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJH
TFVuc2lnbmVkSW50QXJyYXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTFVuc2ln
bmVkU2hvcnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYktpdENTU01hdHJp
eCI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYktpdFBvaW50IjsKICAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKLSNpbmNsdWRlICJXZWJH
TEFycmF5LmgiCiAjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkRPTU9iamVjdHNJbmNsdWRlLmgiCkBA
IC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4SXNvbGF0
ZWRXb3JsZC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJXZWJHTEFycmF5Lmgi
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKICNpbmNsdWRlIDxh
bGdvcml0aG0+CkBAIC03MjAsNiArNzIwLDI3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERP
TVdyYXBwZXI6OmNvbnYKICAgICAvLyBOb24gRE9NIG5vZGUKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiByZXN1bHQgPSBpc0FjdGl2ZURvbU9iamVjdCA/IGdldEFjdGl2ZURPTU9iamVj
dE1hcCgpLmdldChpbXBsKSA6IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKICAgICBpZiAo
cmVzdWx0LklzRW1wdHkoKSkgeworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgICAgIGlmICh0
eXBlID09IFY4Q2xhc3NJbmRleDo6V0VCR0xBUlJBWSAmJiBpbXBsKSB7CisgICAgICAgICAgICAv
LyBEZXRlcm1pbmUgd2hpY2ggc3ViY2xhc3Mgd2UgYXJlIHdyYXBwaW5nLgorICAgICAgICAgICAg
V2ViR0xBcnJheSogYXJyYXkgPSByZWludGVycHJldF9jYXN0PFdlYkdMQXJyYXkqPihpbXBsKTsK
KyAgICAgICAgICAgIGlmIChhcnJheS0+aXNCeXRlQXJyYXkoKSkKKyAgICAgICAgICAgICAgICB0
eXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGFycmF5LT5pc0Zsb2F0QXJyYXkoKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gVjhDbGFzc0lu
ZGV4OjpXRUJHTEZMT0FUQVJSQVk7CisgICAgICAgICAgICBlbHNlIGlmIChhcnJheS0+aXNJbnRB
cnJheSgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJS
QVk7CisgICAgICAgICAgICBlbHNlIGlmIChhcnJheS0+aXNTaG9ydEFycmF5KCkpCisgICAgICAg
ICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOworICAgICAgICAg
ICAgZWxzZSBpZiAoYXJyYXktPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkKKyAgICAgICAgICAgICAg
ICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZOworICAgICAgICAg
ICAgZWxzZSBpZiAoYXJyYXktPmlzVW5zaWduZWRJbnRBcnJheSgpKQorICAgICAgICAgICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGFycmF5LT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKQorICAgICAgICAgICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZOworICAgICAgICB9
CisjZW5kaWYKKwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhPYmplY3QgPSBpbnN0
YW50aWF0ZVY4T2JqZWN0KHR5cGUsIHR5cGUsIGltcGwpOwogICAgICAgICBpZiAoIXY4T2JqZWN0
LklzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBiaWcgc3dpdGNoIHN0YXRl
bWVudCwgaXQgaGFzIHNvbWUgZHVwbGljYXRpb25zCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMxLDMwICs1MzEsNDIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUNMQVJFX05B
TUVEX1BST1BFUlRZX0dFVFRFUihIVE1MQWxsQ29sbGVjdGlvbik7CiAgICAgICAgIERFQ0xBUkVf
TkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxDb2xsZWN0aW9uKTsKIAorICAgICAgICBERUNMQVJF
X0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOworICAgICAgICBERUNM
QVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOworCiAjaWYgRU5B
QkxFKDNEX0NBTlZBUykKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTEJ5dGVBcnJheUdl
dCk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xCeXRlQXJyYXlTZXQpOwogICAgICAg
ICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKFdlYkdMQnl0ZUFycmF5KTsKICAgICAg
ICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTEJ5dGVBcnJheSk7CiAKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTEZsb2F0QXJyYXlHZXQpOworICAgICAgICBERUNM
QVJFX0NBTExCQUNLKFdlYkdMRmxvYXRBcnJheVNldCk7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIoV2ViR0xGbG9hdEFycmF5KTsKICAgICAgICAgREVDTEFSRV9JTkRF
WEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTEZsb2F0QXJyYXkpOwogCisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soV2ViR0xJbnRBcnJheUdldCk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2Vi
R0xJbnRBcnJheVNldCk7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
V2ViR0xJbnRBcnJheSk7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIo
V2ViR0xJbnRBcnJheSk7Ci0jZW5kaWYKIAotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVS
VFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJP
UEVSVFlfU0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFNob3J0QXJyYXlHZXQpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKFdlYkdMU2hvcnRBcnJheVNldCk7CiAgICAgICAgIERFQ0xBUkVfSU5E
RVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xTaG9ydEFycmF5KTsKICAgICAgICAgREVDTEFSRV9J
TkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFNob3J0QXJyYXkpOwogCisgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUdldCk7CisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soV2ViR0xVbnNpZ25lZEJ5dGVBcnJheVNldCk7CiAgICAgICAgIERFQ0xBUkVfSU5E
RVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSk7CiAgICAgICAgIERF
Q0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSk7CiAK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFVuc2lnbmVkSW50QXJyYXlHZXQpOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKFdlYkdMVW5zaWduZWRJbnRBcnJheVNldCk7CiAgICAgICAg
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xVbnNpZ25lZEludEFycmF5KTsK
ICAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFVuc2lnbmVkSW50
QXJyYXkpOwogCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXlHZXQpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
U2V0KTsKICAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFVuc2ln
bmVkU2hvcnRBcnJheSk7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIo
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5
QnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMQXJyYXlCdWZmZXJDb25z
dHJ1Y3RvcikKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEFycmF5QnVmZmVyLkNvbnRydWN0
b3IiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEFycmF5QnVmZmVyLkNvbnN0cnVjdG9yIik7
CiAKICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5j
dGlvbi4iKTsKIAogICAgIGludCBhcmdMZW4gPSBhcmdzLkxlbmd0aCgpOworICAgIGlmIChhcmdM
ZW4gPT0gMCkgeworICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiB3ZSByZXR1cm4gYSBwcmV2
aW91c2x5IGNvbnN0cnVjdGVkCisgICAgICAgIC8vIFdlYkdMQXJyYXlCdWZmZXIsIGUuZy4gZnJv
bSB0aGUgY2FsbCB0byBXZWJHTEFycmF5LmJ1ZmZlci4KKyAgICAgICAgLy8gVGhlIFY4RE9NV3Jh
cHBlciB3aWxsIHNldCB0aGUgaW50ZXJuYWwgcG9pbnRlciBpbiB0aGUKKyAgICAgICAgLy8gY3Jl
YXRlZCBvYmplY3QuIFVuZm9ydHVuYXRlbHkgaXQgZG9lc24ndCBsb29rIGxpa2UgaXQncworICAg
ICAgICAvLyBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoaXMgY2FzZSBhbmQgdGhh
dCB3aGVyZQorICAgICAgICAvLyB0aGUgdXNlciBjYWxscyAibmV3IFdlYkdMQXJyYXlCdWZmZXIo
KSIgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKyAgICB9
CisKICAgICAvLyBTdXBwb3J0ZWQgY29uc3RydWN0b3JzOgogICAgIC8vIFdlYkdMQXJyYXlCdWZm
ZXIobikgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgogICAgIC8vICAgLS0gY3JlYXRlIGFuIGVtcHR5
IGJ1ZmZlciBvZiBuIGJ5dGVzCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMQXJyYXlDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMQXJyYXlDdXN0b20uaAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
OTUgKzQxLDY0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIFRlbXBsYXRlIGZ1
bmN0aW9uIHVzZWQgYnkgdGhlIFdlYkdMQXJyYXkqQ29uc3RydWN0b3IgY2FsbGJhY2tzLgotICAg
IHRlbXBsYXRlPGNsYXNzIEFycmF5Q2xhc3M+Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnN0cnVjdENhbnZhc0FycmF5KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGFzc0luZGV4KQotICAg
IHsKLSAgICAgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLiIpOwotCi0gICAgICAgIGludCBhcmdMZW4gPSBhcmdzLkxlbmd0aCgpOwot
ICAgICAgICAvLyBTdXBwb3J0ZWQgY29uc3RydWN0b3JzOgotICAgICAgICAvLyBDYW52YXM8VD5B
cnJheShuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6Ci0gICAgICAgIC8vICAgLS0gY3JlYXRlIGFu
IGVtcHR5IGFycmF5IG9mIG4gZWxlbWVudHMKLSAgICAgICAgLy8gQ2FudmFzPFQ+QXJyYXkoYXJy
KSB3aGVyZSBhcnIgaXMgYW4gYXJyYXk6Ci0gICAgICAgIC8vICAgLS0gY3JlYXRlIGEgQ2FudmFz
PFQ+QXJyYXkgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgImFyciIKLSAgICAgICAgLy8gQ2Fu
dmFzPFQ+QXJyYXkoYnVmLCBvZmZzZXQsIGxlbmd0aCkKLSAgICAgICAgLy8gICAtLSBjcmVhdGUg
YSBDYW52YXM8VD5BcnJheSBwb2ludGluZyB0byB0aGUgV2ViR0xBcnJheUJ1ZmZlcgotICAgICAg
ICAvLyAgICAgICJidWYiLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldCwgZm9yIHRo
ZSBnaXZlbgotICAgICAgICAvLyAgICAgIGxlbmd0aAotCi0gICAgICAgIGlmIChhcmdMZW4gPT0g
MCkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJObyBhcmd1bWVudHMgc3BlY2lmaWVk
IHRvIGNvbnN0cnVjdG9yIik7Ci0KLSAgICAgICAgLy8gU2VlIHdoZXRoZXIgdGhlIGZpcnN0IGFy
Z3VtZW50IGlzIGEgV2ViR0xBcnJheUJ1ZmZlci4KLSAgICAgICAgaWYgKFY4V2ViR0xBcnJheUJ1
ZmZlcjo6SGFzSW5zdGFuY2UoYXJnc1swXSkpIHsKLSAgICAgICAgICAgIGlmIChhcmdMZW4gPiAz
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJn
dW1lbnRzIHRvIG5ldyBDYW52YXM8VD5BcnJheShXZWJHTEFycmF5QnVmZmVyLCBpbnQsIGludCki
KTsKKy8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIFdlYkdMQXJyYXkqQ29uc3RydWN0
b3IgY2FsbGJhY2tzLgordGVtcGxhdGU8Y2xhc3MgQXJyYXlDbGFzcz4KK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25zdHJ1Y3RXZWJHTEFycmF5KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xhc3NJbmRleCkK
K3sKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5j
dGlvbi4iKTsKKworICAgIGludCBhcmdMZW4gPSBhcmdzLkxlbmd0aCgpOworICAgIGlmIChhcmdM
ZW4gPT0gMCkgeworICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiB3ZSByZXR1cm4gYSBwcmV2
aW91c2x5IGNvbnN0cnVjdGVkCisgICAgICAgIC8vIFdlYkdMQXJyYXksIGUuZy4gZnJvbSB0aGUg
Y2FsbCB0byBXZWJHTDxUPkFycmF5LnNsaWNlKCkuCisgICAgICAgIC8vIFRoZSBWOERPTVdyYXBw
ZXIgd2lsbCBzZXQgdGhlIGludGVybmFsIHBvaW50ZXIgaW4gdGhlCisgICAgICAgIC8vIGNyZWF0
ZWQgb2JqZWN0LiBVbmZvcnR1bmF0ZWx5IGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0J3MKKyAgICAg
ICAgLy8gcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGlzIGNhc2UgYW5kIHRoYXQg
d2hlcmUKKyAgICAgICAgLy8gdGhlIHVzZXIgY2FsbHMgIm5ldyBXZWJHTDxUPkFycmF5KCkiIGZy
b20gSmF2YVNjcmlwdC4KKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisgICAgfQorCisg
ICAgLy8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKKyAgICAvLyBXZWJHTDxUPkFycmF5KG4pIHdo
ZXJlIG4gaXMgYW4gaW50ZWdlcjoKKyAgICAvLyAgIC0tIGNyZWF0ZSBhbiBlbXB0eSBhcnJheSBv
ZiBuIGVsZW1lbnRzCisgICAgLy8gV2ViR0w8VD5BcnJheShhcnIpIHdoZXJlIGFyciBpcyBhbiBh
cnJheToKKyAgICAvLyAgIC0tIGNyZWF0ZSBhIFdlYkdMPFQ+QXJyYXkgY29udGFpbmluZyB0aGUg
Y29udGVudHMgb2YgImFyciIKKyAgICAvLyBXZWJHTDxUPkFycmF5KGJ1Ziwgb2Zmc2V0LCBsZW5n
dGgpCisgICAgLy8gICAtLSBjcmVhdGUgYSBXZWJHTDxUPkFycmF5IHBvaW50aW5nIHRvIHRoZSBX
ZWJHTEFycmF5QnVmZmVyCisgICAgLy8gICAgICAiYnVmIiwgc3RhcnRpbmcgYXQgdGhlIHNwZWNp
ZmllZCBvZmZzZXQsIGZvciB0aGUgZ2l2ZW4KKyAgICAvLyAgICAgIGxlbmd0aAorCisgICAgLy8g
U2VlIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgV2ViR0xBcnJheUJ1ZmZlci4KKyAg
ICBpZiAoVjhXZWJHTEFycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgeworICAgICAg
ICBpZiAoYXJnTGVuID4gMykKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXcm9uZyBu
dW1iZXIgb2YgYXJndW1lbnRzIHRvIG5ldyBXZWJHTDxUPkFycmF5KFdlYkdMQXJyYXlCdWZmZXIs
IGludCwgaW50KSIpOwogCi0gICAgICAgICAgICBXZWJHTEFycmF5QnVmZmVyKiBidWYgPQorICAg
ICAgICBXZWJHTEFycmF5QnVmZmVyKiBidWYgPQogICAgICAgICAgICAgICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdMQXJyYXlCdWZmZXI+KFY4Q2xhc3NJbmRleDo6
V0VCR0xBUlJBWUJVRkZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXS0+VG9PYmplY3QoKSk7Ci0g
ICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDAgdG8gYSBXZWJHTEFycmF5QnVmZmVy
Iik7Ci0gICAgICAgICAgICBib29sIG9rOwotICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0g
ICAgICAgICAgICBpZiAoYXJnTGVuID4gMSkgewotICAgICAgICAgICAgICAgIG9mZnNldCA9IHRv
SW50MzIoYXJnc1sxXSwgb2spOwotICAgICAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAx
IHRvIGFuIGludGVnZXIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBsZW5ndGgg
PSBidWYtPmJ5dGVMZW5ndGgoKSAtIG9mZnNldDsKLSAgICAgICAgICAgIGlmIChhcmdMZW4gPiAy
KSB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gdG9JbnQzMihhcmdzWzJdLCBvayk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDIgdG8gYW4gaW50ZWdlciIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkxlbmd0aCAvIG9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLQotICAgICAg
ICAgICAgUmVmUHRyPEFycmF5Q2xhc3M+IGFycmF5ID0gQXJyYXlDbGFzczo6Y3JlYXRlKGJ1Ziwg
b2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICAgICAgaWYgKGFycmF5ID09IE5VTEwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG5ldyBDYW52
YXM8VD5BcnJheShXZWJHTEFycmF5QnVmZmVyLCBpbnQsIGludCkiKTsKLSAgICAgICAgICAgIC8v
IFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5
LgotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCks
IGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0
SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXkoYXJncy5Ib2xkZXIoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3NJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJyYXkuZ2V0KCktPmJhc2VBZGRyZXNzKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Lmdl
dCgpLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCks
IGFyZ3MuSG9sZGVyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0tPlRvT2JqZWN0KCkpOworICAg
ICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291
bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgMCB0byBhIFdlYkdMQXJyYXlCdWZmZXIiKTsKKyAgICAg
ICAgYm9vbCBvazsKKyAgICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChhcmdMZW4g
PiAxKSB7CisgICAgICAgICAgICBvZmZzZXQgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICAg
ICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxk
IG5vdCBjb252ZXJ0IGFyZ3VtZW50IDEgdG8gYW4gaW50ZWdlciIpOwogICAgICAgICB9Ci0KLSAg
ICAgICAgaW50IGxlbiA9IDA7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBzcmNBcnJh
eTsKLSAgICAgICAgaWYgKGFyZ0xlbiAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KGludCAv
IGFycmF5KSIpOwotCi0gICAgICAgIGlmIChhcmdzWzBdLT5Jc0ludDMyKCkpIHsKLSAgICAgICAg
ICAgIGxlbiA9IHRvSW50MzIoYXJnc1swXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXS0+
SXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBzcmNBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+
OjpDYXN0KGFyZ3NbMF0pOwotICAgICAgICAgICAgaWYgKHNyY0FycmF5LklzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1l
bnQgMCB0byBhbiBhcnJheSIpOwotICAgICAgICAgICAgbGVuID0gc3JjQXJyYXktPkxlbmd0aCgp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBhbiBhcnJheSIpOwot
Ci0gICAgICAgIFJlZlB0cjxBcnJheUNsYXNzPiBhcnJheSA9IEFycmF5Q2xhc3M6OmNyZWF0ZShs
ZW4pOwotICAgICAgICBpZiAoIXNyY0FycmF5LklzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8g
TmVlZCB0byBjb3B5IHRoZSBpbmNvbWluZyBhcnJheSBpbnRvIHRoZSBuZXdseSBjcmVhdGVkIFdl
YkdMQXJyYXkuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsID0gc3JjQXJyYXktPkdldCh2
ODo6SW50ZWdlcjo6TmV3KGkpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbC0+SXNOdW1iZXIo
KSkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOwotICAgICAgICAgICAgICAg
ICAgICBzcHJpbnRmKGJ1ZiwgIkNvdWxkIG5vdCBjb252ZXJ0IGFycmF5IGVsZW1lbnQgJWQgdG8g
YSBudW1iZXIiLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoYnVm
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJyYXktPnNldChpLCB2YWwt
Pk51bWJlclZhbHVlKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBpbnQgbGVuZ3RoID0gYnVm
LT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQ7CisgICAgICAgIGlmIChhcmdMZW4gPiAyKSB7CisgICAg
ICAgICAgICBsZW5ndGggPSB0b0ludDMyKGFyZ3NbMl0sIG9rKTsKKyAgICAgICAgICAgIGlmICgh
b2spCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0
IGFyZ3VtZW50IDIgdG8gYW4gaW50ZWdlciIpOwogICAgICAgICB9CisgICAgICAgIGlmIChsZW5n
dGggPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkxlbmd0aCAvIG9mZnNldCBv
dXQgb2YgcmFuZ2UiKTsKIAorICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4gYXJyYXkgPSBBcnJh
eUNsYXNzOjpjcmVhdGUoYnVmLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGlmIChhcnJheSA9
PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkludmFsaWQgYXJndW1lbnRz
IHRvIG5ldyBXZWJHTDxUPkFycmF5KFdlYkdMQXJyYXlCdWZmZXIsIGludCwgaW50KSIpOwogICAg
ICAgICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRo
ZSBhcnJheS4KICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVy
KCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRJ
bmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheShhcmdzLkhvbGRlcigpLApAQCAtMTM5LDYg
KzEwOCwxMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdG9WOChhcnJh
eS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOwogICAgIH0KIAorICAgIGludCBsZW4gPSAwOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gc3JjQXJyYXk7CisgICAgaWYgKGFyZ0xlbiAhPSAx
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0
byBuZXcgV2ViR0w8VD5BcnJheShpbnQgLyBhcnJheSkiKTsKKworICAgIGlmIChhcmdzWzBdLT5J
c0ludDMyKCkpIHsKKyAgICAgICAgbGVuID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICB9IGVsc2Ug
aWYgKGFyZ3NbMF0tPklzT2JqZWN0KCkpIHsKKyAgICAgICAgc3JjQXJyYXkgPSBhcmdzWzBdLT5U
b09iamVjdCgpOworICAgICAgICBpZiAoc3JjQXJyYXkuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDAgdG8gYW4gb2Jq
ZWN0Iik7CisgICAgICAgIGxlbiA9IHRvSW50MzIoc3JjQXJyYXktPkdldCh2ODo6U3RyaW5nOjpO
ZXcoImxlbmd0aCIpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJD
b3VsZCBub3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBhbiBvYmpl
Y3QiKTsKKworICAgIFJlZlB0cjxBcnJheUNsYXNzPiBhcnJheSA9IEFycmF5Q2xhc3M6OmNyZWF0
ZShsZW4pOworICAgIGlmICghc3JjQXJyYXkuSXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5lZWQg
dG8gY29weSB0aGUgaW5jb21pbmcgYXJyYXkgaW50byB0aGUgbmV3bHkgY3JlYXRlZCBXZWJHTEFy
cmF5LgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwgPSBzcmNBcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpO
ZXcoaSkpOworICAgICAgICAgICAgYXJyYXktPnNldChpLCB2YWwtPk51bWJlclZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50byBhIHdy
YXBwZXIgb2JqZWN0IGZvciB0aGUgYXJyYXkuCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFw
cGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKKyAgICBWOERPTVdy
YXBwZXI6OnNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFyZ3MuSG9sZGVyKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyYXkuZ2V0KCktPmJhc2VBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5nZXQoKS0+bGVuZ3RoKCkp
OworICAgIHJldHVybiB0b1Y4KGFycmF5LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBnZXRXZWJHTEFycmF5RWxlbWVudChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSkKK3sKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAx
KSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGJvb2wgb2s7
CisgICAgdWludDMyX3QgaW5kZXggPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIFQqIGFycmF5
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VD4od3JhcHBlclR5cGUsIGFy
Z3MuSG9sZGVyKCkpOworICAgIGlmIChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgRWxlbWVudFR5cGUgcmVzdWx0OworICAgIGlm
ICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKyAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBUPgordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNldFdlYkdMQXJyYXlGcm9tQXJyYXko
VCogd2ViR0xBcnJheSwgY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBpZiAoYXJn
c1swXS0+SXNPYmplY3QoKSkgeworICAgICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5jZTxsb25n
PiBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBhcnJheSA9IGFyZ3NbMF0tPlRvT2JqZWN0KCk7CisgICAgICAg
IHVpbnQzMl90IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDIpCisg
ICAgICAgICAgICBvZmZzZXQgPSB0b0ludDMyKGFyZ3NbMV0pOworICAgICAgICB1aW50MzJfdCBs
ZW5ndGggPSB0b0ludDMyKGFycmF5LT5HZXQodjg6OlN0cmluZzo6TmV3KCJsZW5ndGgiKSkpOwor
ICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHdlYkdMQXJyYXktPnNldChvZmZzZXQgKyBpLCBhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpO
ZXcoaSkpLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDUGx1c1BsdXNBcnJheVR5cGUs
IGNsYXNzIEphdmFTY3JpcHRXcmFwcGVyQXJyYXlUeXBlPgordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHNldFdlYkdMQXJyYXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVy
VHlwZSkKK3sKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEgfHwgYXJncy5MZW5ndGgoKSA+IDIp
IHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAg
ICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDUGx1c1Bs
dXNBcnJheVR5cGUqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
Q1BsdXNQbHVzQXJyYXlUeXBlPih3cmFwcGVyVHlwZSwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA9PSAyICYmIGFyZ3NbMF0tPklzSW50MzIoKSkgeworICAgICAgICAv
LyB2b2lkIHNldChpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAgICAg
ICAgdWludDMyX3QgaW5kZXggPSB0b0ludDMyKGFyZ3NbMF0pOworICAgICAgICBhcnJheS0+c2V0
KGluZGV4LCBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoSmF2YVNjcmlwdFdyYXBwZXJBcnJheVR5cGU6Okhh
c0luc3RhbmNlKGFyZ3NbMF0pKSB7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMPFQ+QXJy
YXkgYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAgICAgICBD
UGx1c1BsdXNBcnJheVR5cGUqIHNyYyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENQbHVzUGx1c0FycmF5VHlwZT4od3JhcHBlclR5cGUsIGFyZ3NbMF0tPlRvT2JqZWN0KCkp
OworICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoYXJncy5MZW5ndGgo
KSA9PSAyKQorICAgICAgICAgICAgb2Zmc2V0ID0gdG9JbnQzMihhcmdzWzFdKTsKKyAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGFycmF5LT5zZXQoc3JjLCBvZmZzZXQsIGVj
KTsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJheUZyb21B
cnJheShhcnJheSwgYXJncyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4V2ViR0xBcnJh
eUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4V2ViR0xBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4
V2ViR0xCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCiAKQEAgLTQ3LDcgKzQ4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
Qnl0ZUFycmF5Q29uc3RydQogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0ZUFycmF5LkNv
bnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxXZWJHTEJ5dGVB
cnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMQllURUFS
UkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xCeXRlQXJyYXk+KGFy
Z3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWSkpOwog
fQogCiAvLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBieXRlIGJ1ZmZlciBhbmQg
cmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFj
Y2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJhbmdlIHJldHVybiAidW5kZWZp
bmVkIi4KQEAgLTc4LDYgKzc5LDE4IEBAIElOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMQnl0
ZUFycmF5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
Qnl0ZUFycmF5R2V0KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0ZUFycmF5LmdldCgp
Iik7CisgICAgcmV0dXJuIGdldFdlYkdMQXJyYXlFbGVtZW50PFdlYkdMQnl0ZUFycmF5LCBzaWdu
ZWQgY2hhcj4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWSk7Cit9CisKK0NBTExC
QUNLX0ZVTkNfREVDTChXZWJHTEJ5dGVBcnJheVNldCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5X
ZWJHTEJ5dGVBcnJheS5zZXQoKSIpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMQnl0
ZUFycmF5LCBWOFdlYkdMQnl0ZUFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMQllURUFS
UkFZKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFy
cmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAi
VjhXZWJHTEFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTEFycmF5Q3VzdG9tLmgiCisj
aW5jbHVkZSAiVjhXZWJHTEZsb2F0QXJyYXkuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKQEAgLTQ3LDcgKzQ4LDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKFdlYkdMRmxvYXRBcnJheUNvbnN0cgogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdM
RmxvYXRBcnJheS5Db250cnVjdG9yIik7CiAKLSAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJy
YXk8V2ViR0xGbG9hdEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCR0xGTE9BVEFSUkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2Vi
R0xGbG9hdEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VC
R0xGTE9BVEFSUkFZKSk7CiB9CiAKIC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhl
IGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVj
dCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1
bmRlZmluZWQiLgpAQCAtNzUsNiArNzYsMTggQEAgSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2Vi
R0xGbG9hdEFycmF5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19ERUNM
KFdlYkdMRmxvYXRBcnJheUdldCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEZsb2F0QXJy
YXkuZ2V0KCkiKTsKKyAgICByZXR1cm4gZ2V0V2ViR0xBcnJheUVsZW1lbnQ8V2ViR0xGbG9hdEFy
cmF5LCBmbG9hdD4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVkpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woV2ViR0xGbG9hdEFycmF5U2V0KQoreworICAgIElOQ19TVEFUUygi
RE9NLldlYkdMRmxvYXRBcnJheS5zZXQoKSIpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdl
YkdMRmxvYXRBcnJheSwgVjhXZWJHTEZsb2F0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VC
R0xGTE9BVEFSUkFZKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhXZWJHTEFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTEFycmF5Q3VzdG9tLmgi
CisjaW5jbHVkZSAiVjhXZWJHTEludEFycmF5LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCkBAIC00Nyw3ICs0OCw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChXZWJHTEludEFycmF5Q29uc3RydWMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5XZWJH
TEludEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJh
eTxXZWJHTEludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6
V0VCR0xJTlRBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMSW50
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTElOVEFS
UkFZKSk7CiB9CiAKIC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIg
YXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0
IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0
dXJuICJ1bmRlZmluZWQiLgpAQCAtNzgsNiArNzksMTggQEAgSU5ERVhFRF9QUk9QRVJUWV9TRVRU
RVIoV2ViR0xJbnRBcnJheSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK0NBTExCQUNLX0ZVTkNf
REVDTChXZWJHTEludEFycmF5R2V0KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYkdMSW50QXJy
YXkuZ2V0KCkiKTsKKyAgICByZXR1cm4gZ2V0V2ViR0xBcnJheUVsZW1lbnQ8V2ViR0xJbnRBcnJh
eSwgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVkpOworfQorCitDQUxMQkFD
S19GVU5DX0RFQ0woV2ViR0xJbnRBcnJheVNldCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJH
TEludEFycmF5LnNldCgpIik7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xJbnRBcnJh
eSwgVjhXZWJHTEludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xT
aG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFdlYkdM
QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRl
ICJWOFdlYkdMU2hvcnRBcnJheS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKIApAQCAtNDcsNyArNDgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
V2ViR0xTaG9ydEFycmF5Q29uc3RyCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xTaG9ydEFy
cmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxXZWJH
TFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJH
TFNIT1JUQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFNob3J0
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTFNIT1JU
QVJSQVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkg
YW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4
LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5l
ZCIuCkBAIC03OCw2ICs3OSwxOCBAQCBJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFNob3J0
QXJyYXkpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitDQUxMQkFDS19GVU5DX0RFQ0woV2ViR0xT
aG9ydEFycmF5R2V0KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYkdMU2hvcnRBcnJheS5nZXQo
KSIpOworICAgIHJldHVybiBnZXRXZWJHTEFycmF5RWxlbWVudDxXZWJHTFNob3J0QXJyYXksIHNo
b3J0PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWSk7Cit9CisKK0NBTExCQUNL
X0ZVTkNfREVDTChXZWJHTFNob3J0QXJyYXlTZXQpCit7CisgICAgSU5DX1NUQVRTKCJET00uV2Vi
R0xTaG9ydEFycmF5LnNldCgpIik7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xTaG9y
dEFycmF5LCBWOFdlYkdMU2hvcnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJHTFNIT1JU
QVJSQVkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDk2
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFdlYkdMQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJW
OFdlYkdMQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXku
aCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAK
QEAgLTQ3LDcgKzQ4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMVW5zaWduZWRCeXRlQXJy
YQogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRCeXRlQXJyYXkuQ29udHJ1Y3Rv
ciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lH
TkVEQllURUFSUkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNp
Z25lZEJ5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldF
QkdMVU5TSUdORURCWVRFQVJSQVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUg
ZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1i
ZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBy
ZXR1cm4gInVuZGVmaW5lZCIuCkBAIC03OCw2ICs3OSwxOCBAQCBJTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihXZWJHTFVuc2lnbmVkQnl0CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitDQUxMQkFDS19G
VU5DX0RFQ0woV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUdldCkKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmdldCgpIik7CisgICAgcmV0dXJuIGdldFdlYkdMQXJy
YXlFbGVtZW50PFdlYkdMVW5zaWduZWRCeXRlQXJyYXksIHVuc2lnbmVkIGNoYXI+KGFyZ3MsIFY4
Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FREJZVEVBUlJBWSk7Cit9CisKK0NBTExCQUNLX0ZVTkNf
REVDTChXZWJHTFVuc2lnbmVkQnl0ZUFycmF5U2V0KQoreworICAgIElOQ19TVEFUUygiRE9NLldl
YkdMVW5zaWduZWRCeXRlQXJyYXkuc2V0KCkiKTsKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJheTxX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5LCBWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+KGFyZ3MsIFY4
Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FREJZVEVBUlJBWSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJy
YXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4V2ViR0xB
cnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4V2ViR0xBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUg
IlY4V2ViR0xVbnNpZ25lZEludEFycmF5LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCkBAIC00Nyw3ICs0OCw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChXZWJHTFVuc2lnbmVkSW50QXJyYXkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFVu
c2lnbmVkSW50QXJyYXkuQ29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdENhbnZh
c0FycmF5PFdlYkdMVW5zaWduZWRJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChW
OENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1
Y3RXZWJHTEFycmF5PFdlYkdMVW5zaWduZWRJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWSkpOwogfQogCiAvLyBHZXQg
dGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBpbnRlZ2VyIGFycmF5IGFuZCByZXR1cm4gaXQg
d3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0
c2lkZSB0aGUgdmFsaWQgcGl4ZWwgYnVmZmVyIHJhbmdlIHJldHVybiAidW5kZWZpbmVkIi4KQEAg
LTc4LDYgKzc5LDE4IEBAIElOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMVW5zaWduZWRJbnQK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFVuc2lnbmVk
SW50QXJyYXlHZXQpCit7CisgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZEludEFycmF5
LmdldCgpIik7CisgICAgcmV0dXJuIGdldFdlYkdMQXJyYXlFbGVtZW50PFdlYkdMVW5zaWduZWRJ
bnRBcnJheSwgdW5zaWduZWQgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJ
TlRBUlJBWSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFVuc2lnbmVkSW50QXJyYXlT
ZXQpCit7CisgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZEludEFycmF5LnNldCgpIik7
CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZEludEFycmF5LCBWOFdlYkdM
VW5zaWduZWRJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVESU5UQVJS
QVkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0Rf
Q0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwOTY2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFdlYkdMQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJW
OFdlYkdMQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgog
CkBAIC00Nyw3ICs0OCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChXZWJHTFVuc2lnbmVkU2hvcnRB
cnIKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5Db250cnVj
dG9yIik7CiAKLSAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8V2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTFVO
U0lHTkVEU0hPUlRBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQg
dmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlw
dCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSBy
YW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCkBAIC03OCw2ICs3OSwxOCBAQCBJTkRFWEVEX1BST1BF
UlRZX1NFVFRFUihXZWJHTFVuc2lnbmVkU2hvCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitDQUxM
QkFDS19GVU5DX0RFQ0woV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlHZXQpCit7CisgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuZ2V0KCkiKTsKKyAgICByZXR1cm4gZ2V0
V2ViR0xBcnJheUVsZW1lbnQ8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXksIHVuc2lnbmVkIHNob3J0
PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZKTsKK30KKworQ0FM
TEJBQ0tfRlVOQ19ERUNMKFdlYkdMVW5zaWduZWRTaG9ydEFycmF5U2V0KQoreworICAgIElOQ19T
VEFUUygiRE9NLldlYkdMVW5zaWduZWRTaG9ydEFycmF5LnNldCgpIik7CisgICAgcmV0dXJuIHNl
dFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXksIFY4V2ViR0xVbnNpZ25lZFNob3J0
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwCShyZXZpc2lvbiA1MDk2NikKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIy
ICszMSwzMCBAQAogI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIFdlYkdMQXJyYXk6OldlYkdMQXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5
QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCkKLSAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisKK1dlYkdMQXJyYXk6OldlYkdMQXJy
YXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVP
ZmZzZXQpCiAgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQotICAgIHsKLSAgICAgICAgbV9iYXNl
QWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSgp
KSArIG1fb2Zmc2V0KSA6IDA7Ci0gICAgfQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KIAotICAgIFdlYkdMQXJyYXk6On5XZWJHTEFycmF5KCkKLSAgICB7Ci0gICAgfQor
V2ViR0xBcnJheTo6fldlYkdMQXJyYXkoKQoreworfQogCi0gICAgdW5zaWduZWQgV2ViR0xBcnJh
eTo6YWxpZ25lZFNpemVJbkJ5dGVzKCkgY29uc3QgewotICAgICAgICAvLyBBc3N1bWUgd2Ugb25s
eSBuZWVkIHRvIHJvdW5kIHVwIHRvIDQtYnl0ZSBib3VuZGFyaWVzIGZvciBhbGlnbm1lbnQuCi0g
ICAgICAgIHJldHVybiAoKHNpemVJbkJ5dGVzKCkgKyAzKSAvIDQpICogNDsKK3ZvaWQgV2ViR0xB
cnJheTo6c2V0SW1wbChXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgKyBhcnJheS0+Ynl0ZUxlbmd0
aCgpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAg
ICAgIHJldHVybjsKICAgICB9CisKKyAgICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbWNweShiYXNlICsgYnl0ZU9mZnNldCwgYXJyYXktPmJh
c2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3RoKCkpOworfQorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHJldmlzaW9u
IDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDUwICsyNiw1NiBAQAogI2lmbmRlZiBXZWJHTEFycmF5X2gKICNkZWZpbmUgV2Vi
R0xBcnJheV9oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlICJXZWJHTEFycmF5QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBXZWJHTEFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xBcnJh
eT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRCeXRl
QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
aG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzVW5zaWduZWRTaG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAg
dmlydHVhbCBib29sIGlzSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzRmxvYXRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIAotICAgICAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1
ZmZlcigpIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJl
c3M7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXpl
SW5CeXRlcygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBhbGlnbmVkU2l6
ZUluQnl0ZXMoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB+V2ViR0xBcnJheSgpOwotCi0gICAg
cHJvdGVjdGVkOgotICAgICAgICBXZWJHTEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGFk
ZHJlc3Mgb2YgdGhlIFdlYkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBvZmZzZXQu
Ci0gICAgICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7Ci0gICAgICAgIHVuc2lnbmVkIG1fb2Zmc2V0
OwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZl
cj4gbV9idWZmZXI7Ci0gICAgfTsKLSAgICAKKworY2xhc3MgV2ViR0xBcnJheSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYkdMQXJyYXk+IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0J5
dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVW5z
aWduZWRCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1Vuc2lnbmVkU2hvcnRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0Zsb2F0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIoKSB7CisgICAgICAgIHJldHVy
biBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlQWRkcmVzcygpIHsKKyAgICAgICAg
cmV0dXJuIG1fYmFzZUFkZHJlc3M7CisgICAgfQorCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgp
IGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7CisKKyAgICB2aXJ0
dWFsIH5XZWJHTEFycmF5KCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFdlYkdMQXJyYXkoUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisg
ICAgdm9pZCBzZXRJbXBsKFdlYkdMQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBX
ZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZzZXQuCisgICAgdm9p
ZCogbV9iYXNlQWRkcmVzczsKKworICAgIHVuc2lnbmVkIG1fYnl0ZU9mZnNldDsKKworICBwcml2
YXRlOgorICAgIFJlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFdlYkdMQXJyYXlfaApJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQXJyYXkuaWRsCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDExIEBACiAK
IG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBUywgQ3Vz
dG9tVG9KU10gV2ViR0xBcnJheSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxl
bmd0aDsKLSAgICAgICAgaW50IHNpemVJbkJ5dGVzKCk7Ci0gICAgICAgIGludCBhbGlnbmVkU2l6
ZUluQnl0ZXMoKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFdlYkdMQXJyYXlCdWZmZXIg
YnVmZmVyOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlT2Zm
c2V0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3Ro
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisKKyAg
ICAgICAgV2ViR0xBcnJheSBzbGljZShpbiB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW4gdW5zaWdu
ZWQgbG9uZyBsZW5ndGgpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEFycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDI5IEBA
CiAjaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgCi0gICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBXZWJHTEFycmF5QnVmZmVyOjpj
cmVhdGUodW5zaWduZWQgc2l6ZUluQnl0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkdMQXJyYXlCdWZmZXIoc2l6ZUluQnl0ZXMpKTsKLSAgICB9Ci0gICAgCi0gICAg
V2ViR0xBcnJheUJ1ZmZlcjo6V2ViR0xBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRlcykg
ewotICAgICAgICBtX3NpemVJbkJ5dGVzID0gc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1fZGF0YSA9
IFdURjo6ZmFzdFplcm9lZE1hbGxvYyhzaXplSW5CeXRlcyk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQqIFdlYkdMQXJyYXlCdWZmZXI6OmRhdGEoKSB7Ci0gICAgICAgIHJldHVybiBtX2RhdGE7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgV2ViR0xBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0
IHsKLSAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7Ci0gICAgfQotCi0gICAgV2ViR0xBcnJh
eUJ1ZmZlcjo6fldlYkdMQXJyYXlCdWZmZXIoKSB7Ci0gICAgICAgIFdURjo6ZmFzdEZyZWUobV9k
YXRhKTsKLSAgICB9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gV2ViR0xBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIHNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViR0xBcnJheUJ1ZmZlcihzaXplSW5CeXRlcykpOworfQorCitXZWJHTEFycmF5QnVm
ZmVyOjpXZWJHTEFycmF5QnVmZmVyKHVuc2lnbmVkIHNpemVJbkJ5dGVzKSB7CisgICAgbV9zaXpl
SW5CeXRlcyA9IHNpemVJbkJ5dGVzOworICAgIG1fZGF0YSA9IFdURjo6ZmFzdFplcm9lZE1hbGxv
YyhzaXplSW5CeXRlcyk7Cit9CisKK3ZvaWQqIFdlYkdMQXJyYXlCdWZmZXI6OmRhdGEoKSB7Cisg
ICAgcmV0dXJuIG1fZGF0YTsKK30KKwordW5zaWduZWQgV2ViR0xBcnJheUJ1ZmZlcjo6Ynl0ZUxl
bmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplSW5CeXRlczsKK30KKworV2ViR0xBcnJh
eUJ1ZmZlcjo6fldlYkdMQXJyYXlCdWZmZXIoKSB7CisgICAgV1RGOjpmYXN0RnJlZShtX2RhdGEp
OworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIyICsz
MCwyMiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICAKLSAgICBjbGFzcyBXZWJHTEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViR0xBcnJheUJ1ZmZlcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIHNpemVJbkJ5dGVzKTsKLQotICAg
ICAgICB2b2lkKiBkYXRhKCk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsK
LQotICAgICAgICB+V2ViR0xBcnJheUJ1ZmZlcigpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
V2ViR0xBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIHVuc2lnbmVk
IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIHZvaWQqIG1fZGF0YTsKLSAgICB9OwotICAgIAorCitj
bGFzcyBXZWJHTEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xBcnJheUJ1ZmZl
cj4geworICBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIHNpemVJbkJ5dGVzKTsKKworICAgIHZvaWQqIGRhdGEoKTsKKyAgICB1
bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAgICB+V2ViR0xBcnJheUJ1ZmZlcigpOwor
CisgIHByaXZhdGU6CisgICAgV2ViR0xBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRlcyk7
CisgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKKyAgICB2b2lkKiBtX2RhdGE7Cit9OworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBXZWJHTEFycmF5QnVmZmVyX2gKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwCShyZXZpc2lvbiA1MDk2NikK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NyArMzIsNyBAQAogI2luY2x1ZGUgIldlYkdMQnl0ZUFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAKKwogUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gV2ViR0xCeXRlQXJyYXk6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2Yoc2lnbmVk
IGNoYXIpKTsKQEAgLTQ2LDE2ICs0NywxNiBAQCBQYXNzUmVmUHRyPFdlYkdMQnl0ZUFycmF5PiBX
ZWJHTEJ5dGVBcnJhCiAgICAgcmV0dXJuIGE7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xCeXRlQXJy
YXk+IFdlYkdMQnl0ZUFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBi
dWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWZQdHI8V2ViR0xCeXRl
QXJyYXk+IFdlYkdMQnl0ZUFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVy
PiBidWZmZXIsIGludCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGJ1
ZmZlcikgewogICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJv
dXQgYSB2YWxpZCByZWdpb24gb2YKICAgICAgICAgLy8gdGhlIGdpdmVuIFdlYkdMQXJyYXlCdWZm
ZXIncyBzdG9yYWdlLgotICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2Yoc2ln
bmVkIGNoYXIpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgaWYgKChieXRlT2Zm
c2V0ICsgKGxlbmd0aCAqIHNpemVvZihzaWduZWQgY2hhcikpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViR0xCeXRlQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworCisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEJ5dGVBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkpOwogfQogCiBXZWJHTEJ5dGVBcnJheTo6V2ViR0xCeXRlQXJyYXkoUGFzc1JlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
QEAgLTY3LDkgKzY4LDI0IEBAIFdlYkdMQnl0ZUFycmF5OjpXZWJHTEJ5dGVBcnJheShQYXNzUmVm
UHQKIHVuc2lnbmVkIFdlYkdMQnl0ZUFycmF5OjpsZW5ndGgoKSBjb25zdCB7CiAgICAgcmV0dXJu
IG1fc2l6ZTsKIH0KLSAgICAKLXVuc2lnbmVkIFdlYkdMQnl0ZUFycmF5OjpzaXplSW5CeXRlcygp
IGNvbnN0IHsKLSAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2Yoc2lnbmVkIGNoYXIpOworCit1
bnNpZ25lZCBXZWJHTEJ5dGVBcnJheTo6Ynl0ZUxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4g
bV9zaXplICogc2l6ZW9mKHNpZ25lZCBjaGFyKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTEFycmF5
PiBXZWJHTEJ5dGVBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IHsKKyAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHNwZWNpZmllZCByZWdpb24gaXMgd2l0
aGluIHRoZSBib3VuZHMgb2YKKyAgICAvLyB0aGUgV2ViR0xBcnJheUJ1ZmZlci4KKyAgICB1bnNp
Z25lZCBzdGFydEJ5dGUgPSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2Yoc2lnbmVkIGNo
YXIpOworICAgIHVuc2lnbmVkIGxpbWl0Qnl0ZSA9IHN0YXJ0Qnl0ZSArIGxlbmd0aCAqIHNpemVv
ZihzaWduZWQgY2hhcik7CisgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoID0gYnVmZmVyKCktPmJ5
dGVMZW5ndGgoKTsKKyAgICBpZiAoc3RhcnRCeXRlID49IGJ1ZmZlckxlbmd0aCB8fCBsaW1pdEJ5
dGUgPiBidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyKCksIHN0YXJ0Qnl0ZSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJHTEJ5dGVBcnJheTo6
c2V0KFdlYkdMQnl0ZUFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeworICAgIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZihzaWduZWQgY2hhciks
IGVjKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaAkocmV2
aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw1OCArMzQsNjcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgV2ViR0xBcnJheUJ1ZmZlcjsKIAot
ICAgIGNsYXNzIFdlYkdMQnl0ZUFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnl0ZUFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xCeXRlQXJy
YXk+IGNyZWF0ZShzaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnl0ZUFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJH
TEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAgICAgY2hhciogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVz
cygpKTsgfQotCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLQotICAgICAgICB2b2lk
IHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAgICAgICAgICAgICAg
dmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxz
aWduZWQgY2hhcj46Om1pbigpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czxzaWduZWQgY2hhcj46Om1pbigpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWF4KCkpCi0gICAgICAgICAgICAg
ICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWF4KCk7Ci0gICAg
ICAgICAgICBzaWduZWQgY2hhciogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyKj4o
bV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0
PHNpZ25lZCBjaGFyPih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wg
Z2V0KHVuc2lnbmVkIGluZGV4LCBzaWduZWQgY2hhciYgcmVzdWx0KSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHNpZ25lZCBjaGFyKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0b3Jh
Z2VbaW5kZXhdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzaWduZWQgY2hhciBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICAgICAgc2lnbmVkIGNoYXIq
IHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOwotICAg
ICAgICAgICAgcmV0dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgV2ViR0xCeXRlQXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZm
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAg
IH07Ci0gICAgCitjbGFzcyBXZWJHTEFycmF5QnVmZmVyOworCitjbGFzcyBXZWJHTEJ5dGVBcnJh
eSA6IHB1YmxpYyBXZWJHTEFycmF5IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0J5
dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMQnl0ZUFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gY3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gY3JlYXRl
KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKworICAgIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyKj4oYmFzZUFkZHJlc3MoKSk7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKworICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAorICAgICAgICAg
ICAgdmFsdWUgPSAwOworICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
Z25lZCBjaGFyPjo6bWluKCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2lnbmVkIGNoYXI+OjptaW4oKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWF4KCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+OjptYXgoKTsKKyAgICAgICAgc2lnbmVkIGNo
YXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOwor
ICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPih2YWx1ZSk7
CisgICAgfQorCisgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHNpZ25lZCBjaGFyJiByZXN1
bHQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzaWduZWQgY2hhciogc3RvcmFnZSA9IHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyKj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAgIHJlc3VsdCA9IHN0b3Jh
Z2VbaW5kZXhdOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaWduZWQgY2hh
ciBnZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXRlbShp
bmRleCk7CisgICAgfQorCisgICAgc2lnbmVkIGNoYXIgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHNpZ25l
ZCBjaGFyKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNz
KTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VbaW5kZXhdOworICAgIH0KKworICAgIHZvaWQgc2V0
KFdlYkdMQnl0ZUFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
Yyk7CisKKyAgcHJpdmF0ZToKKyAgICBXZWJHTEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbV9zaXplOworfTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gV2ViR0xCeXRlQXJyYXlfaApJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5pZGwJKHJldmlzaW9uIDUwOTY2
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw1ICszMywxMCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29uc3Ry
dWN0b3IsCiAgICAgICAgIEN1c3RvbVRvSlMKICAgICBdIFdlYkdMQnl0ZUFycmF5IDogV2ViR0xB
cnJheSB7CisgICAgICAgIGxvbmcgZ2V0KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAg
ICAvLyB2b2lkIHNldChpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAg
ICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0xCeXRlQXJyYXkgYXJyYXksIFtPcHRpb25hbF0gaW4g
dW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAgICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5jZTxs
b25nPiBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAg
IFtDdXN0b21dIHZvaWQgc2V0KCk7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGbG9hdEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRmxvYXRBcnJheS5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZsb2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNDkgKzMxLDY1IEBACiAjaW5j
bHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAg
ICBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gV2ViR0xGbG9hdEFycmF5OjpjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YoZmxvYXQpKTsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Ci0gICAgfQogCi0gICAg
UGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKGZsb2F0
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkdMRmxv
YXRBcnJheT4gYSA9IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGEtPnNldChp
LCBhcnJheVtpXSk7Ci0gICAgICAgIHJldHVybiBhOwotICAgIH0KK1Bhc3NSZWZQdHI8V2ViR0xG
bG9hdEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNy
ZWF0ZShsZW5ndGggKiBzaXplb2YoZmxvYXQpKTsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwg
MCwgbGVuZ3RoKTsKK30KIAotICAgIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBXZWJHTEZs
b2F0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBvZmZzZXQgcmVzdWx0cyBpbiB2YWxpZCBhbGlnbm1lbnQuCi0gICAgICAgIGlmICgob2Zmc2V0
ICUgc2l6ZW9mKGZsb2F0KSkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworUGFzc1Jl
ZlB0cjxXZWJHTEZsb2F0QXJyYXk+IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKGZsb2F0KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGEgPSBX
ZWJHTEZsb2F0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICByZXR1
cm4gYTsKK30KIAotICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSB2YWxpZCByZWdpb24gb2YKLSAgICAg
ICAgICAgIC8vIHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KLSAgICAgICAg
ICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihmbG9hdCkpKSA+IGJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xGbG9hdEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBs
ZW5ndGgpKTsKK1Bhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OmNy
ZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRz
IGluIHZhbGlkIGFsaWdubWVudC4KKyAgICBpZiAoKGJ5dGVPZmZzZXQgJSBzaXplb2YoZmxvYXQp
KSAhPSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChidWZmZXIpIHsKKyAgICAg
ICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVn
aW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4K
KyAgICAgICAgaWYgKChieXRlT2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihmbG9hdCkpKSA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAg
IAotICAgIFdlYkdMRmxvYXRBcnJheTo6V2ViR0xGbG9hdEFycmF5KFBhc3NSZWZQdHI8V2ViR0xB
cnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAg
IDogV2ViR0xBcnJheShidWZmZXIsIG9mZnNldCkKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkdMRmxvYXRBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworfQorCitXZWJHTEZs
b2F0QXJyYXk6OldlYkdMRmxvYXRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1
ZmZlciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBXZWJHTEFy
cmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCkKICAgICAgICAgLCBtX3NpemUobGVuZ3RoKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgV2ViR0xGbG9hdEFycmF5OjpsZW5ndGgoKSBjb25z
dCB7Ci0gICAgICAgIHJldHVybiBtX3NpemU7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnNpZ25l
ZCBXZWJHTEZsb2F0QXJyYXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgewotICAgICAgICByZXR1cm4g
bGVuZ3RoKCkgKiBzaXplb2YoZmxvYXQpOwotICAgIH0KK3sKK30KKwordW5zaWduZWQgV2ViR0xG
bG9hdEFycmF5OjpsZW5ndGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKwordW5z
aWduZWQgV2ViR0xGbG9hdEFycmF5OjpieXRlTGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBt
X3NpemUgKiBzaXplb2YoZmxvYXQpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdM
RmxvYXRBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsKKyAg
ICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHNwZWNpZmllZCByZWdpb24gaXMgd2l0aGluIHRo
ZSBib3VuZHMgb2YKKyAgICAvLyB0aGUgV2ViR0xBcnJheUJ1ZmZlci4KKyAgICB1bnNpZ25lZCBz
dGFydEJ5dGUgPSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YoZmxvYXQpOworICAgIHVu
c2lnbmVkIGxpbWl0Qnl0ZSA9IHN0YXJ0Qnl0ZSArIGxlbmd0aCAqIHNpemVvZihmbG9hdCk7Cisg
ICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoID0gYnVmZmVyKCktPmJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoc3RhcnRCeXRlID49IGJ1ZmZlckxlbmd0aCB8fCBsaW1pdEJ5dGUgPiBidWZmZXJMZW5ndGgp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIHN0YXJ0Qnl0
ZSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJHTEZsb2F0QXJyYXk6OnNldChXZWJHTEZsb2F0QXJy
YXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7CisgICAgc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKGZsb2F0KSwgZWMpOworfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZs
b2F0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRB
cnJheS5oCShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMiw1NSArMzMsNjMgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgV2ViR0xGbG9h
dEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVh
bCBib29sIGlzRmxvYXRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGNyZWF0ZShmbG9h
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMRmxvYXRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVy
LCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIGZsb2F0KiBkYXRhKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQqPihiYXNlQWRkcmVzcygpKTsgfQotCi0gICAgICAg
IHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAo
aXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAotICAgICAgICAgICAgICAgIHZhbHVlID0g
MDsKLSAgICAgICAgICAgIGZsb2F0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2Jh
c2VBZGRyZXNzKTsKLSAgICAgICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBnZXQodW5zaWdu
ZWQgaW5kZXgsIGZsb2F0JiByZXN1bHQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChpbmRleCA+PSBtX3NpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgcmVzdWx0ID0gaXRlbShpbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmxvYXQgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAg
ICAgICAgIGZsb2F0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2Jhc2VBZGRyZXNz
KTsKLSAgICAgICAgICAgIGZsb2F0IHJlc3VsdCA9IHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICAg
ICAgaWYgKGlzbmFuKHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDbGFtcCBOYU4gdG8g
MAotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworCitjbGFzcyBXZWJHTEZsb2F0QXJyYXkgOiBwdWJsaWMgV2ViR0xB
cnJheSB7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbG9hdEFycmF5KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5
PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZs
b2F0QXJyYXk+IGNyZWF0ZShmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFy
cmF5QnVmZmVyPiBidWZmZXIsIGludCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCisg
ICAgZmxvYXQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdCo+KGJhc2VBZGRyZXNz
KCkpOyB9CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlz
bmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAg
ICAgICAgZmxvYXQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYmFzZUFkZHJlc3Mp
OworICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7Cisg
ICAgfQorCisgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIGZsb2F0JiByZXN1bHQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXN1bHQgPSBpdGVtKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgZmxvYXQgZ2V0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGl0ZW0oaW5kZXgpOworICAgIH0KKworICAgIGZsb2F0IGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUp
OworICAgICAgICBmbG9hdCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9iYXNlQWRk
cmVzcyk7CisgICAgICAgIGZsb2F0IHJlc3VsdCA9IHN0b3JhZ2VbaW5kZXhdOworICAgICAgICBp
ZiAoaXNuYW4ocmVzdWx0KSkgeworICAgICAgICAgICAgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAg
ICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBXZWJH
TEZsb2F0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICB9Owot
ICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgc2V0KFdlYkdM
RmxvYXRBcnJheSogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOwor
CisgIHByaXZhdGU6CisgICAgV2ViR0xGbG9hdEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gYnVmZmVyLCBpbnQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB1bnNp
Z25lZCBtX3NpemU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBX
ZWJHTEZsb2F0QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJy
YXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5
LmlkbAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRB
cnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDUgKzMzLDEwIEBAIG1vZHVsZSBodG1s
IHsKICAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgQ3VzdG9tVG9K
UwogICAgIF0gV2ViR0xGbG9hdEFycmF5IDogV2ViR0xBcnJheSB7CisgICAgICAgIGxvbmcgZ2V0
KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICAvLyB2b2lkIHNldChpbiB1bnNpZ25l
ZCBsb25nIGluZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2Vi
R0xGbG9hdEFycmF5IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
KyAgICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0g
aW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHNldCgpOwog
ICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAJKHJldmlz
aW9uIDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDUyICszMiw2OCBAQAogI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIAotICAgIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gV2Vi
R0xJbnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVu
Z3RoICogc2l6ZW9mKGludCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVu
Z3RoKTsKLSAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdMSW50QXJy
YXk6OmNyZWF0ZShpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBS
ZWZQdHI8V2ViR0xJbnRBcnJheT4gYSA9IFdlYkdMSW50QXJyYXk6OmNyZWF0ZShsZW5ndGgpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICBhLT5zZXQoaSwgYXJyYXlbaV0pOwotICAgICAgICByZXR1cm4gYTsKLSAgICB9CitQYXNzUmVm
UHRyPFdlYkdMSW50QXJyYXk+IFdlYkdMSW50QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YoaW50KSk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZm
ZXIsIDAsIGxlbmd0aCk7Cit9CiAKLSAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdM
SW50QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9m
ZnNldCByZXN1bHRzIGluIHZhbGlkIGFsaWdubWVudC4KLSAgICAgICAgaWYgKChvZmZzZXQgJSBz
aXplb2YoaW50KSkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworUGFzc1JlZlB0cjxX
ZWJHTEludEFycmF5PiBXZWJHTEludEFycmF5OjpjcmVhdGUoaW50KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBhID0gV2ViR0xJbnRBcnJheTo6
Y3JlYXRlKGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOworICAgIHJldHVybiBhOworfQogCi0gICAg
ICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBh
cmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGdp
dmVuIFdlYkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgotICAgICAgICAgICAgaWYgKChvZmZzZXQg
KyAobGVuZ3RoICogc2l6ZW9mKGludCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYkdMSW50QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwor
UGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBXZWJHTEludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBN
YWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFsaWdubWVudC4KKyAgICBpZiAo
KGJ5dGVPZmZzZXQgJSBzaXplb2YoaW50KSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK
KyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUg
dGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgorICAgICAgICAvLyB0aGUgZ2l2ZW4gV2Vi
R0xBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCisgICAgICAgIGlmICgoYnl0ZU9mZnNldCArIChsZW5n
dGggKiBzaXplb2YoaW50KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCi0gICAgV2ViR0xJbnRBcnJheTo6V2ViR0xJbnRBcnJh
eShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBvZmZzZXQpCisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMSW50QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpKTsKK30KKworV2ViR0xJbnRBcnJheTo6V2ViR0xJbnRBcnJheShQYXNzUmVmUHRyPFdlYkdM
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAg
ICAgICAgOiBXZWJHTEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCkKICAgICAgICAgLCBtX3NpemUo
bGVuZ3RoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgV2ViR0xJbnRBcnJheTo6
bGVuZ3RoKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9zaXplOwotICAgIH0KLSAgICAgICAg
Ci0gICAgdW5zaWduZWQgV2ViR0xJbnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Ci0gICAg
ICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZihpbnQpOwotICAgIH0KK3sKK30KKwordW5zaWdu
ZWQgV2ViR0xJbnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX3NpemU7Cit9
CisKK3Vuc2lnbmVkIFdlYkdMSW50QXJyYXk6OmJ5dGVMZW5ndGgoKSBjb25zdCB7CisgICAgcmV0
dXJuIG1fc2l6ZSAqIHNpemVvZihpbnQpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdl
YkdMSW50QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7Cisg
ICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGlzIHdpdGhpbiB0
aGUgYm91bmRzIG9mCisgICAgLy8gdGhlIFdlYkdMQXJyYXlCdWZmZXIuCisgICAgdW5zaWduZWQg
c3RhcnRCeXRlID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKGludCk7CisgICAgdW5z
aWduZWQgbGltaXRCeXRlID0gc3RhcnRCeXRlICsgbGVuZ3RoICogc2l6ZW9mKGludCk7CisgICAg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoID0gYnVmZmVyKCktPmJ5dGVMZW5ndGgoKTsKKyAgICBpZiAo
c3RhcnRCeXRlID49IGJ1ZmZlckxlbmd0aCB8fCBsaW1pdEJ5dGUgPiBidWZmZXJMZW5ndGgpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIHN0YXJ0Qnl0ZSwg
bGVuZ3RoKTsKK30KKwordm9pZCBXZWJHTEludEFycmF5OjpzZXQoV2ViR0xJbnRBcnJheSogYXJy
YXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKKyAgICBzZXRJbXBsKGFy
cmF5LCBvZmZzZXQgKiBzaXplb2YoaW50KSwgZWMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmgJKHJldmlz
aW9uIDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw1NiArMzQsNjQgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgV2ViR0xJbnRBcnJheSA6IHB1YmxpYyBX
ZWJHTEFycmF5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0ludEFycmF5
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJHTEludEFycmF5PiBjcmVhdGUoaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gY3JlYXRlKFBhc3NS
ZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgICAgIGludCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludCo+KGJh
c2VBZGRyZXNzKCkpOyB9Ci0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OwotCi0gICAg
ICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKLSAgICAgICAg
ICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1pbigpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgICAgICBpbnQqIHN0b3JhZ2UgPSBz
dGF0aWNfY2FzdDxpbnQqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAgICAgIHN0b3JhZ2VbaW5k
ZXhdID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCBpbnQmIHJlc3VsdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBpdGVtKGluZGV4KTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgaXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwg
bV9zaXplKTsKLSAgICAgICAgICAgIGludCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PGludCo+KG1f
YmFzZUFkZHJlc3MpOwotICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAgICAg
ICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXZWJHTEludEFycmF5KFBhc3NSZWZQdHI8V2Vi
R0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICB1bnNp
Z25lZCBtX3NpemU7Ci0gICAgfTsKLSAgICAKKworY2xhc3MgV2ViR0xJbnRBcnJheSA6IHB1Ymxp
YyBXZWJHTEFycmF5IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0ludEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xJbnRB
cnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xJbnRBcnJheT4gY3JlYXRlKGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCBpbnQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAg
IGludCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludCo+KGJhc2VBZGRyZXNzKCkpOyB9
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5z
aWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFy
cmF5PiBzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB2b2lk
IHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlzbmFuKHZh
bHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAg
aWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKKyAgICAgICAgICAg
IHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgZWxzZSBp
ZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICAgICAg
dmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICBpbnQqIHN0
b3JhZ2UgPSBzdGF0aWNfY2FzdDxpbnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgc3RvcmFn
ZVtpbmRleF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGdl
dCh1bnNpZ25lZCBpbmRleCwgaW50JiByZXN1bHQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1
bHQgPSBpdGVtKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaW50
IGdldCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpdGVtKGlu
ZGV4KTsKKyAgICB9CisKKyAgICBpbnQgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIGludCogc3RvcmFnZSA9
IHN0YXRpY19jYXN0PGludCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICByZXR1cm4gc3RvcmFn
ZVtpbmRleF07CisgICAgfQorCisgICAgdm9pZCBzZXQoV2ViR0xJbnRBcnJheSogYXJyYXksIHVu
c2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgIHByaXZhdGU6CisgICAgV2Vi
R0xJbnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgIGludCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICB1bnNpZ25lZCBtX3NpemU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBXZWJHTEludEFycmF5X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xJbnRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEludEFycmF5LmlkbAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMSW50QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNSArMzMsMTAgQEAgbW9kdWxlIGh0bWwgewog
ICAgICAgICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgICBDdXN0b21Ub0pTCiAg
ICAgXSBXZWJHTEludEFycmF5IDogV2ViR0xBcnJheSB7CisgICAgICAgIGxvbmcgZ2V0KGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICAvLyB2b2lkIHNldChpbiB1bnNpZ25lZCBsb25n
IGluZGV4LCBpbiBsb25nIHZhbHVlKTsKKyAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0xJbnRB
cnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAg
IC8vIHZvaWQgc2V0KGluIHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXQoKTsKICAgICB9Owog
fQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkocmV2aXNpb24g
NTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDUyICszMSw2OCBAQAogI2luY2x1ZGUgIldlYkdMU2hvcnRBcnJheS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxXZWJHTFNob3J0
QXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgIFJlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVy
OjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHNob3J0KSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyLCAwLCBsZW5ndGgpOwotICAgIH0KIAotICAgIFBhc3NSZWZQdHI8V2ViR0xTaG9ydEFy
cmF5PiBXZWJHTFNob3J0QXJyYXk6OmNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFNob3J0QXJyYXk+IGEgPSBXZWJHTFNob3J0
QXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOwotICAgICAgICBy
ZXR1cm4gYTsKLSAgICB9CitQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gV2ViR0xTaG9ydEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHNo
b3J0KSk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CiAKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gV2ViR0xTaG9ydEFycmF5OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGlu
IHZhbGlkIGFsaWdubWVudC4KLSAgICAgICAgaWYgKChvZmZzZXQgJSBzaXplb2Yoc2hvcnQpKSAh
PSAwKQorUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6Y3JlYXRl
KHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTFNob3J0
QXJyYXk+IGEgPSBXZWJHTFNob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgYS0+c2V0KGksIGFycmF5W2ld
KTsKKyAgICByZXR1cm4gYTsKK30KKworUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IFdlYkdM
U2hvcnRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi
eXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCBy
ZXN1bHRzIGluIHZhbGlkIGFsaWdubWVudC4KKyAgICBpZiAoKGJ5dGVPZmZzZXQgJSBzaXplb2Yo
c2hvcnQpKSAhPSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChidWZmZXIpIHsK
KyAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFs
aWQgcmVnaW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3Rv
cmFnZS4KKyAgICAgICAgaWYgKChieXRlT2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihzaG9ydCkp
KSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQogCi0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ug
c3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAg
Ly8gdGhlIGdpdmVuIFdlYkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgotICAgICAgICAgICAgaWYg
KChvZmZzZXQgKyAobGVuZ3RoICogc2l6ZW9mKHNob3J0KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMU2hvcnRBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkp
OworfQogCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xTaG9ydEFycmF5KGJ1ZmZl
ciwgb2Zmc2V0LCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgCi0gICAgV2ViR0xTaG9ydEFycmF5OjpX
ZWJHTFNob3J0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBXZWJHTEFycmF5KGJ1ZmZlciwgb2Zm
c2V0KQorV2ViR0xTaG9ydEFycmF5OjpXZWJHTFNob3J0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFy
cmF5QnVmZmVyPiBidWZmZXIsIGludCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
ICAgIDogV2ViR0xBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxl
bmd0aCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIFdlYkdMU2hvcnRBcnJheTo6
bGVuZ3RoKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9zaXplOwotICAgIH0KLSAgICAgICAg
Ci0gICAgdW5zaWduZWQgV2ViR0xTaG9ydEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHNob3J0KTsKLSAgICB9Cit7Cit9CisKK3Vu
c2lnbmVkIFdlYkdMU2hvcnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX3Np
emU7Cit9CisKK3Vuc2lnbmVkIFdlYkdMU2hvcnRBcnJheTo6Ynl0ZUxlbmd0aCgpIGNvbnN0IHsK
KyAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHNob3J0KTsKK30KKworUGFzc1JlZlB0cjxXZWJH
TEFycmF5PiBXZWJHTFNob3J0QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKSB7CisgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgcmVnaW9u
IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mCisgICAgLy8gdGhlIFdlYkdMQXJyYXlCdWZmZXIuCisg
ICAgdW5zaWduZWQgc3RhcnRCeXRlID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKHNo
b3J0KTsKKyAgICB1bnNpZ25lZCBsaW1pdEJ5dGUgPSBzdGFydEJ5dGUgKyBsZW5ndGggKiBzaXpl
b2Yoc2hvcnQpOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlcigpLT5ieXRlTGVu
Z3RoKCk7CisgICAgaWYgKHN0YXJ0Qnl0ZSA+PSBidWZmZXJMZW5ndGggfHwgbGltaXRCeXRlID4g
YnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZl
cigpLCBzdGFydEJ5dGUsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2ViR0xTaG9ydEFycmF5OjpzZXQo
V2ViR0xTaG9ydEFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeworICAgIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZihzaG9ydCksIGVjKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaG9ydEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNob3J0QXJyYXkuaAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMU2hvcnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw1NCArMzMsNjIgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci0gICAgY2xhc3MgV2ViR0xTaG9ydEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgewotICAgIHB1
YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzU2hvcnRBcnJheSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNo
b3J0QXJyYXk+IGNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8V2Vi
R0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgICAgIHNob3J0KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQqPihiYXNlQWRk
cmVzcygpKTsgfQotCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLQotICAgICAgICB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAgICAgICAgICAg
ICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0
czxzaG9ydD46Om1pbigpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxzaG9ydD46Om1pbigpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7Ci0gICAgICAgICAgICBzaG9ydCogc3RvcmFn
ZSA9IHN0YXRpY19jYXN0PHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICBzdG9y
YWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHNob3J0Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCBzaG9ydCYgcmVzdWx0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW0oaW5kZXgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNo
b3J0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICBzaG9ydCogc3RvcmFnZSA9IHN0YXRp
Y19jYXN0PHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RvcmFn
ZVtpbmRleF07Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYkdMU2hvcnRB
cnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIH07Ci0gICAgCisK
K2NsYXNzIFdlYkdMU2hvcnRBcnJheSA6IHB1YmxpYyBXZWJHTEFycmF5IHsKKyAgcHVibGljOgor
ICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gY3JlYXRlKHNo
b3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJH
TFNob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwg
aW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBzaG9ydCogZGF0YSgpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNob3J0Kj4oYmFzZUFkZHJlc3MoKSk7IH0KKworICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVu
Z3RoKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHZvaWQgc2V0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXpl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFt
cCBOYU4gdG8gMAorICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICBpZiAodmFsdWUgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpCisgICAgICAgICAgICB2YWx1ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKTsKKyAgICAgICAgc2hvcnQqIHN0b3Jh
Z2UgPSBzdGF0aWNfY2FzdDxzaG9ydCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICBzdG9yYWdl
W2luZGV4XSA9IHN0YXRpY19jYXN0PHNob3J0Pih2YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBn
ZXQodW5zaWduZWQgaW5kZXgsIHNob3J0JiByZXN1bHQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXN1bHQgPSBpdGVtKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
c2hvcnQgZ2V0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0
ZW0oaW5kZXgpOworICAgIH0KKworICAgIHNob3J0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICBzaG9ydCog
c3RvcmFnZSA9IHN0YXRpY19jYXN0PHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAgIHJl
dHVybiBzdG9yYWdlW2luZGV4XTsKKyAgICB9CisKKyAgICB2b2lkIHNldChXZWJHTFNob3J0QXJy
YXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICBwcml2
YXRlOgorICAgIFdlYkdMU2hvcnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1
ZmZlciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbV9z
aXplOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gV2ViR0xTaG9y
dEFycmF5X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5pZGwJKHJl
dmlzaW9uIDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1ICszMiwxMCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAgIEN1c3RvbVRvSlMKICAgICBdIFdl
YkdMU2hvcnRBcnJheSA6IFdlYkdMQXJyYXkgeworICAgICAgICBsb25nIGdldChpbiB1bnNpZ25l
ZCBsb25nIGluZGV4KTsKKyAgICAgICAgLy8gdm9pZCBzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRl
eCwgaW4gbG9uZyB2YWx1ZSk7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMU2hvcnRBcnJh
eSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIC8v
IHZvaWQgc2V0KGluIHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXQoKTsKICAgICB9OwogfQpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3Bw
CShyZXZpc2lvbiA1MDk2NikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw0OCArMzIsNjQgQEAKICNpbmNsdWRlICJXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNz
UmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gV2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1
bnNpZ25lZCBjaGFyKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgp
OwotICAgIH0KIAotICAgIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYSA9
IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhLT5zZXQoaSwgYXJy
YXlbaV0pOwotICAgICAgICByZXR1cm4gYTsKLSAgICB9CitQYXNzUmVmUHRyPFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlC
dWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YodW5zaWduZWQgY2hhcikpOworICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQogCi0gICAgUGFzc1JlZlB0cjxXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5PiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZmZl
cikgewotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFi
b3V0IGEgdmFsaWQgcmVnaW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgZ2l2ZW4gV2ViR0xBcnJh
eUJ1ZmZlcidzIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBz
aXplb2YodW5zaWduZWQgY2hhcikpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CitQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRC
eXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBjaGFyKiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5PiBhID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBhLT5zZXQoaSwgYXJy
YXlbaV0pOworICAgIHJldHVybiBhOworfQogCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CitQYXNzUmVm
UHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRl
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChidWZmZXIpIHsK
KyAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFs
aWQgcmVnaW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3Rv
cmFnZS4KKyAgICAgICAgaWYgKChieXRlT2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25l
ZCBjaGFyKSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gTlVM
TDsKICAgICB9Ci0gICAgCi0gICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6V2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBvZmZzZXQp
CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKworV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwg
aW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBXZWJHTEFycmF5KGJ1
ZmZlciwgYnl0ZU9mZnNldCkKICAgICAgICAgLCBtX3NpemUobGVuZ3RoKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgdW5zaWduZWQgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6bGVuZ3RoKCkgY29u
c3QgewotICAgICAgICByZXR1cm4gbV9zaXplOwotICAgIH0KLSAgICAgICAgCi0gICAgdW5zaWdu
ZWQgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICB9Cit7Cit9CisK
K3Vuc2lnbmVkIFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICBy
ZXR1cm4gbV9zaXplOworfQorCit1bnNpZ25lZCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpieXRl
TGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX3NpemUgKiBzaXplb2YodW5zaWduZWQgY2hh
cik7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6
c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsKKyAgICAvLyBDaGVjayB0
byBtYWtlIHN1cmUgdGhlIHNwZWNpZmllZCByZWdpb24gaXMgd2l0aGluIHRoZSBib3VuZHMgb2YK
KyAgICAvLyB0aGUgV2ViR0xBcnJheUJ1ZmZlci4KKyAgICB1bnNpZ25lZCBzdGFydEJ5dGUgPSBt
X2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgY2hhcik7CisgICAgdW5zaWdu
ZWQgbGltaXRCeXRlID0gc3RhcnRCeXRlICsgbGVuZ3RoICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIp
OworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlcigpLT5ieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKHN0YXJ0Qnl0ZSA+PSBidWZmZXJMZW5ndGggfHwgbGltaXRCeXRlID4gYnVmZmVyTGVu
Z3RoKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBzdGFy
dEJ5dGUsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6c2V0KFdl
YkdMVW5zaWduZWRCeXRlQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7CisgICAgc2V0SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHVuc2lnbmVkIGNo
YXIpLCBlYyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaAkocmV2aXNpb24g
NTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMzLDU0ICszNCw2MiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5IDogcHVibGljIFdlYkdMQXJyYXkgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBi
b29sIGlzVW5zaWduZWRCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oYmFzZUFkZHJlc3MoKSk7IH0KLSAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9z
aXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChpc25hbih2YWx1
ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAg
ICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWlu
KCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGNoYXI+OjptaW4oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9iYXNl
QWRkcmVzcyk7Ci0gICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBnZXQo
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXImIHJlc3VsdCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBpdGVtKGluZGV4KTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjaGFyIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzdG9yYWdlID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOwotICAgICAgICAgICAgcmV0
dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVy
LCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICB1bnNpZ25lZCBtX3NpemU7
Ci0gICAgfTsKLSAgICAKKworY2xhc3MgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSA6IHB1YmxpYyBX
ZWJHTEFycmF5IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkQnl0ZUFy
cmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGNoYXIq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5z
aWduZWRCeXRlQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJhc2VBZGRyZXNz
KCkpOyB9CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlz
bmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAg
ICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWlu
KCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hh
cj46Om1pbigpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgY2hhcj46Om1heCgpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciogc3Rv
cmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAg
ICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWx1ZSk7Cisg
ICAgfQorCisgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXImIHJlc3Vs
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGl0ZW0oaW5kZXgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGdldCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpdGVtKGluZGV4KTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBjaGFyIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBzdG9yYWdl
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICBy
ZXR1cm4gc3RvcmFnZVtpbmRleF07CisgICAgfQorCisgICAgdm9pZCBzZXQoV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheSogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOwor
CisgIHByaXZhdGU6CisgICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdM
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgbV9zaXplOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5pZGwJKHJldmlzaW9uIDUwOTY2KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDUgKzMzLDEwIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1
Y3RvciwKICAgICAgICAgQ3VzdG9tVG9KUwogICAgIF0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSA6
IFdlYkdMQXJyYXkgeworICAgICAgICBsb25nIGdldChpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICAgICAgLy8gdm9pZCBzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gbG9uZyB2YWx1
ZSk7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgYXJyYXks
IFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAgICAgICAvLyB2b2lkIHNl
dChpbiBzZXF1ZW5jZTxsb25nPiBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgc2V0KCk7CiAgICAgfTsKIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAJKHJldmlzaW9u
IDUwOTY2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsNTMgKzMyLDY5IEBACiAjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEludEFy
cmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNzUmVmUHRyPFdlYkdM
VW5zaWduZWRJbnRBcnJheT4gV2ViR0xVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9
IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YodW5zaWduZWQgaW50KSk7
Ci0gICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotICAgIH0KIAotICAg
IFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6
OmNyZWF0ZSh1bnNpZ25lZCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAg
ICAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBhID0gV2ViR0xVbnNpZ25lZEludEFy
cmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKLSAgICAgICAgcmV0
dXJuIGE7CitQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRJbnRBcnJheT4gV2ViR0xVbnNpZ25lZElu
dEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxXZWJHTEFycmF5
QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9m
KHVuc2lnbmVkIGludCkpOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwor
fQorCitQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRJbnRBcnJheT4gV2ViR0xVbnNpZ25lZEludEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IFJlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IGEgPSBXZWJHTFVuc2lnbmVkSW50QXJyYXk6
OmNyZWF0ZShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKKyAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICByZXR1cm4gYTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IFdlYkdMVW5zaWduZWRJbnRBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRl
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFsaWdubWVudC4KKyAgICBpZiAoKGJ5dGVPZmZzZXQg
JSBzaXplb2YodW5zaWduZWQgaW50KSkgIT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9CiAKLSAgICBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRJbnRBcnJheT4gV2ViR0xVbnNpZ25l
ZEludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFs
aWdubWVudC4KLSAgICAgICAgaWYgKChvZmZzZXQgJSBzaXplb2YodW5zaWduZWQgaW50KSkgIT0g
MCkgeworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdl
IGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCisgICAgICAgIC8vIHRoZSBnaXZl
biBXZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KKyAgICAgICAgaWYgKChieXRlT2Zmc2V0ICsg
KGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkK
ICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlm
IChidWZmZXIpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFs
a2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGdpdmVuIFdl
YkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgotICAgICAgICAgICAgaWYgKChvZmZzZXQgKyAobGVu
Z3RoICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJHTFVuc2lnbmVkSW50QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsK
K30KIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5zaWduZWRJbnRBcnJheShi
dWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIAotICAgIFdlYkdMVW5zaWduZWRJ
bnRBcnJheTo6V2ViR0xVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogV2ViR0xB
cnJheShidWZmZXIsIG9mZnNldCkKK1dlYkdMVW5zaWduZWRJbnRBcnJheTo6V2ViR0xVbnNpZ25l
ZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBieXRl
T2Zmc2V0KQogICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICB1bnNpZ25lZCBXZWJHTFVuc2lnbmVkSW50QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKLSAgICAg
ICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIFdlYkdMVW5z
aWduZWRJbnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBsZW5n
dGgoKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgIH0KK3sKK30KKwordW5zaWduZWQgV2Vi
R0xVbnNpZ25lZEludEFycmF5OjpsZW5ndGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6ZTsK
K30KKwordW5zaWduZWQgV2ViR0xVbnNpZ25lZEludEFycmF5OjpieXRlTGVuZ3RoKCkgY29uc3Qg
eworICAgIHJldHVybiBtX3NpemUgKiBzaXplb2YodW5zaWduZWQgaW50KTsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBz
cGVjaWZpZWQgcmVnaW9uIGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mCisgICAgLy8gdGhlIFdlYkdM
QXJyYXlCdWZmZXIuCisgICAgdW5zaWduZWQgc3RhcnRCeXRlID0gbV9ieXRlT2Zmc2V0ICsgb2Zm
c2V0ICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAgdW5zaWduZWQgbGltaXRCeXRlID0gc3Rh
cnRCeXRlICsgbGVuZ3RoICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoID0gYnVmZmVyKCktPmJ5dGVMZW5ndGgoKTsKKyAgICBpZiAoc3RhcnRCeXRlID49
IGJ1ZmZlckxlbmd0aCB8fCBsaW1pdEJ5dGUgPiBidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIHN0YXJ0Qnl0ZSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNldChXZWJHTFVuc2lnbmVkSW50QXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7CisgICAgc2V0SW1w
bChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHVuc2lnbmVkIGludCksIGVjKTsKK30KKwogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEludEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuc2lnbmVkSW50QXJyYXkuaAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNTQgKzM0LDYyIEBA
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IAotICAgIGNsYXNzIFdlYkdMVW5zaWduZWRJbnRBcnJheSA6IHB1YmxpYyBXZWJHTEFycmF5IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xV
bnNpZ25lZEludEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBjcmVhdGUodW5zaWduZWQgaW50KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xV
bnNpZ25lZEludEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZm
ZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgdW5zaWduZWQgaW50
KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4oYmFzZUFkZHJlc3Mo
KSk7IH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAgICAgICAg
ICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBpbnQ+OjptaW4oKSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWluKCk7Ci0gICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgaW50JiByZXN1bHQpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0ID0gaXRlbShpbmRleCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
dW5zaWduZWQgaW50IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQq
IHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtX2Jhc2VBZGRyZXNzKTsKLSAg
ICAgICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgV2ViR0xVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICB1bnNp
Z25lZCBtX3NpemU7Ci0gICAgfTsKLSAgICAKKworY2xhc3MgV2ViR0xVbnNpZ25lZEludEFycmF5
IDogcHVibGljIFdlYkdMQXJyYXkgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzVW5z
aWduZWRJbnRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMVW5zaWduZWRJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJHTFVuc2lnbmVkSW50QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlciwgaW50IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB1bnNpZ25l
ZCBpbnQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihiYXNlQWRk
cmVzcygpKTsgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
CisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCisgICAgICAgICAgICB2YWx1ZSA9IDA7
CisgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6
bWluKCkpCisgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50Pjo6bWluKCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKTsKKyAgICAgICAgdW5zaWduZWQgaW50KiBzdG9y
YWdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAg
IHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSk7CisgICAg
fQorCisgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGludCYgcmVzdWx0KSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gaXRlbShpbmRleCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBnZXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXRlbShpbmRleCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgaW50IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICB1bnNpZ25lZCBpbnQqIHN0b3JhZ2UgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIHN0
b3JhZ2VbaW5kZXhdOworICAgIH0KKworICAgIHZvaWQgc2V0KFdlYkdMVW5zaWduZWRJbnRBcnJh
eSogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgIHByaXZh
dGU6CisgICAgV2ViR0xVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB1bnNpZ25l
ZCBtX3NpemU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBXZWJH
TFVuc2lnbmVkSW50QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkSW50QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmlkbAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw1ICszMywxMCBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAg
IEN1c3RvbVRvSlMKICAgICBdIFdlYkdMVW5zaWduZWRJbnRBcnJheSA6IFdlYkdMQXJyYXkgewor
ICAgICAgICBsb25nIGdldChpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgLy8gdm9p
ZCBzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gbG9uZyB2YWx1ZSk7CisgICAgICAgIC8v
IHZvaWQgc2V0KGluIFdlYkdMVW5zaWduZWRJbnRBcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1
bnNpZ25lZCBsb25nIG9mZnNldCk7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHNlcXVlbmNlPGxv
bmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAgICAg
W0N1c3RvbV0gdm9pZCBzZXQoKTsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSw1NSArMzIsNzEgQEAKICNpbmNsdWRlICJXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheT4gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi0gICAgewotICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyID0gV2Vi
R0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwot
ICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAgICB9CiAKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eTo6Y3JlYXRlKHVuc2lnbmVkIHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsK
LSAgICAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBhID0gV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOwotICAg
ICAgICByZXR1cm4gYTsKK1Bhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVu
Z3RoICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIs
IDAsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IFdl
YkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBhID0g
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsK
KyAgICByZXR1cm4gYTsKK30KKworUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4g
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZm
ZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZh
bGlkIGFsaWdubWVudC4KKyAgICBpZiAoKGJ5dGVPZmZzZXQgJSBzaXplb2YodW5zaWduZWQgc2hv
cnQpKSAhPSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFBhc3NSZWZQ
dHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgb2Zmc2V0IHJlc3VsdHMgaW4gdmFsaWQgYWxpZ25tZW50
LgotICAgICAgICBpZiAoKG9mZnNldCAlIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpICE9IDApIHsK
KyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUg
dGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgorICAgICAgICAvLyB0aGUgZ2l2ZW4gV2Vi
R0xBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCisgICAgICAgIGlmICgoYnl0ZU9mZnNldCArIChsZW5n
dGggKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkgCiAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAo
YnVmZmVyKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtp
bmcgYWJvdXQgYSB2YWxpZCByZWdpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBXZWJH
TEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0
aCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSAKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
KTsKK30KIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgCi0gICAgV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXk6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5KFBhc3NSZWZQdHI8V2ViR0xB
cnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogV2ViR0xBcnJheShidWZmZXIsIG9mZnNldCkK
K1dlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheShQYXNzUmVm
UHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAg
IDogV2ViR0xBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxlbmd0
aCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5OjpsZW5ndGgoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3NpemU7Ci0gICAgfQotICAg
ICAgICAKLSAgICB1bnNpZ25lZCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6c2l6ZUluQnl0ZXMo
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCk7Ci0gICAgfQoreworfQorCit1bnNpZ25lZCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6bGVu
Z3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX3NpemU7Cit9CisKK3Vuc2lnbmVkIFdlYkdMVW5z
aWduZWRTaG9ydEFycmF5OjpieXRlTGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX3NpemUg
KiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdl
YkdMVW5zaWduZWRTaG9ydEFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkgeworICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBp
cyB3aXRoaW4gdGhlIGJvdW5kcyBvZgorICAgIC8vIHRoZSBXZWJHTEFycmF5QnVmZmVyLgorICAg
IHVuc2lnbmVkIHN0YXJ0Qnl0ZSA9IG1fYnl0ZU9mZnNldCArIG9mZnNldCAqIHNpemVvZih1bnNp
Z25lZCBzaG9ydCk7CisgICAgdW5zaWduZWQgbGltaXRCeXRlID0gc3RhcnRCeXRlICsgbGVuZ3Ro
ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGggPSBi
dWZmZXIoKS0+Ynl0ZUxlbmd0aCgpOworICAgIGlmIChzdGFydEJ5dGUgPj0gYnVmZmVyTGVuZ3Ro
IHx8IGxpbWl0Qnl0ZSA+IGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGNyZWF0ZShidWZmZXIoKSwgc3RhcnRCeXRlLCBsZW5ndGgpOworfQorCit2b2lkIFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5OjpzZXQoV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7CisgICAgc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgZWMpOworfQorCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkU2hvcnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuaAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw1NSArMzQsNjMgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci0gICAgY2xhc3MgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgOiBwdWJsaWMgV2ViR0xBcnJheSB7
Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJyYXko
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlC
dWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAgICB1
bnNpZ25lZCBzaG9ydCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
Kj4oYmFzZUFkZHJlc3MoKSk7IH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBj
b25zdDsKLQotICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0
byAwCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHZhbHVlIDwg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1pbigpKQotICAgICAgICAgICAg
ICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1pbigpOwot
ICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IHNob3J0Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCog
c3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7Ci0g
ICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGlu
ZGV4LCB1bnNpZ25lZCBzaG9ydCYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0b3JhZ2VbaW5k
ZXhdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIHNob3J0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obV9iYXNlQWRk
cmVzcyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RvcmFnZVtpbmRleF07Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLGludCBvZmZzZXQsdW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIH07Ci0gICAgCisKK2NsYXNzIFdlYkdMVW5zaWdu
ZWRTaG9ydEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgeworICBwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzVW5zaWduZWRTaG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZSh1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5PiBjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworCisgICAgdW5zaWduZWQgc2hvcnQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydCo+KGJhc2VBZGRyZXNzKCkpOyB9CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNv
bnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRv
IDAKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1pbigpKQorICAgICAgICAgICAgdmFsdWUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWluKCk7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpKQor
ICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6
bWF4KCk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4odmFsdWUpOworICAgIH0KKworICAgIGJvb2wgZ2V0
KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaG9ydCYgcmVzdWx0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgdW5zaWduZWQgc2hvcnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICByZXN1bHQgPSBzdG9yYWdlW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQgZ2V0KHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0oaW5kZXgpOworICAg
IH0KKworICAgIHVuc2lnbmVkIHNob3J0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICB1bnNpZ25lZCBzaG9y
dCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7
CisgICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKKyAgICB9CisKKyAgICB2b2lkIHNldChX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpOworCisgIHByaXZhdGU6CisgICAgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkoUGFz
c1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsaW50IGJ5dGVPZmZzZXQsdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBtX3NpemU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheV9oCkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmlkbAkocmV2aXNpb24g
NTA5NjYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDUgKzMzLDEwIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJh
dGVDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgQ3VzdG9tVG9KUwogICAgIF0gV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkgOiBXZWJHTEFycmF5IHsKKyAgICAgICAgbG9uZyBnZXQoaW4gdW5zaWdu
ZWQgbG9uZyBpbmRleCk7CisgICAgICAgIC8vIHZvaWQgc2V0KGluIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGluIGxvbmcgdmFsdWUpOworICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Cisg
ICAgICAgIC8vIHZvaWQgc2V0KGluIHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGlu
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXQoKTsKICAg
ICB9OwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gNTA5NjYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KHVuc2lnCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheS0+c2l6ZUluQnl0ZXMoKSwg
YXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQs
IGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgb2Zmc2V0LCBXZWJHTEFycmF5KiBhcnJheSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5zaXplSW5CeXRlcygpLCBhcnJheS0+YmFzZUFk
ZHJlc3MoKSk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5i
eXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKIH0KIAogdW5zaWduZWQgbG9uZyBH
cmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRh
cmdldCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTA5ODYpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEtMTMg
IEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBBUEkgb2YgV2ViR0xBcnJheSBhbmQg
ZnJpZW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzExNzUKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSk6CisKIDIwMDktMTEtMTMgIFlhYXIg
U2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAJKHJldmlzaW9uIDUwOTY2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjcsNyArMTIyNyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWcKIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpCiB7Ci0gICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YUltcGwodGFy
Z2V0LCBhcnJheS0+c2l6ZUluQnl0ZXMoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsK
KyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhSW1wbCh0YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3Ro
KCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBX
ZWJHTEFycmF5KiBhcnJheSkKQEAgLTEyNDcsNyArMTI0Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW4KICAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJT
dWJEYXRhOiBubyBidWZmZXIgYm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+c2l6ZUluQnl0ZXMoKSwgYXJy
YXktPmJhc2VBZGRyZXNzKCkpOworICAgIGdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwg
YXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOwogfQogCiB1bnNpZ25l
ZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTA5ODYpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMS0xMyAgS2Vu
bmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFQSSBvZiBXZWJHTEFycmF5IGFuZCBmcmll
bmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTE3
NQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1s
OgorCiAyMDA5LTExLTEzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAg
ICAgICAgIERpc2FibGUgd2Vic29ja2V0IHRlc3RzIG9uIFRpZ2VyLCBhcyB0aGV5IHRpbWUgb3V0
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwOTY2KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTMsMjUgKzMsODEgQEAgVmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkg
b2YgdGhlIG5ldyBhcgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiBQQVNTIHRlc3QgV2Vi
R0xCeXRlQXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCitQQVNTIHRlc3QgV2ViR0xCeXRlQXJy
YXkgU2V0QW5kR2V0TWV0aG9kc1BvczEwVG9OZWcxMAogUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5
IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xCeXRlQXJy
YXkgQ29uc3RydWN0V2l0aFdlYkdMQXJyYXlPZlNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdM
Qnl0ZUFycmF5IE9mZnNldHNBbmRTaXplcworUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5IFNldEZy
b21XZWJHTEFycmF5CitQQVNTIG5lZ2F0aXZlVGVzdCBXZWJHTEJ5dGVBcnJheSBTZXRGcm9tV2Vi
R0xBcnJheQorUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5IFNldEZyb21BcnJheQorUEFTUyB0ZXN0
IFdlYkdMQnl0ZUFycmF5IFNsaWNlCitQQVNTIG5lZ2F0aXZlVGVzdCBXZWJHTEJ5dGVBcnJheSBT
bGljZQogUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygtMTI4LCAt
MTI4LCAxMjcsIDEyNykKIFBBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgU2V0QW5kR2V0UG9zMTBU
b05lZzEwCitQQVNTIHRlc3QgV2ViR0xGbG9hdEFycmF5IFNldEFuZEdldE1ldGhvZHNQb3MxMFRv
TmVnMTAKIFBBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZTaWdu
ZWRWYWx1ZXMKK1BBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgQ29uc3RydWN0V2l0aFdlYkdMQXJy
YXlPZlNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMRmxvYXRBcnJheSBPZmZzZXRzQW5kU2l6
ZXMKK1BBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgU2V0RnJvbVdlYkdMQXJyYXkKK1BBU1MgbmVn
YXRpdmVUZXN0IFdlYkdMRmxvYXRBcnJheSBTZXRGcm9tV2ViR0xBcnJheQorUEFTUyB0ZXN0IFdl
YkdMRmxvYXRBcnJheSBTZXRGcm9tQXJyYXkKK1BBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgU2xp
Y2UKK1BBU1MgbmVnYXRpdmVUZXN0IFdlYkdMRmxvYXRBcnJheSBTbGljZQogUEFTUyB0ZXN0IFdl
YkdMRmxvYXRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoLTUwMCwgLTUwMCwgNTAwLCA1MDApCiBQ
QVNTIHRlc3QgV2ViR0xJbnRBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKK1BBU1MgdGVzdCBX
ZWJHTEludEFycmF5IFNldEFuZEdldE1ldGhvZHNQb3MxMFRvTmVnMTAKIFBBU1MgdGVzdCBXZWJH
TEludEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2Vi
R0xJbnRBcnJheSBDb25zdHJ1Y3RXaXRoV2ViR0xBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRl
c3QgV2ViR0xJbnRBcnJheSBPZmZzZXRzQW5kU2l6ZXMKK1BBU1MgdGVzdCBXZWJHTEludEFycmF5
IFNldEZyb21XZWJHTEFycmF5CitQQVNTIG5lZ2F0aXZlVGVzdCBXZWJHTEludEFycmF5IFNldEZy
b21XZWJHTEFycmF5CitQQVNTIHRlc3QgV2ViR0xJbnRBcnJheSBTZXRGcm9tQXJyYXkKK1BBU1Mg
dGVzdCBXZWJHTEludEFycmF5IFNsaWNlCitQQVNTIG5lZ2F0aXZlVGVzdCBXZWJHTEludEFycmF5
IFNsaWNlCiBQQVNTIHRlc3QgV2ViR0xJbnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoLTIxNDc0
ODM2NDgsIC0yMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ3LCAyMTQ3NDgzNjQ3KQogUEFTUyB0ZXN0IFdl
YkdMU2hvcnRBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKK1BBU1MgdGVzdCBXZWJHTFNob3J0
QXJyYXkgU2V0QW5kR2V0TWV0aG9kc1BvczEwVG9OZWcxMAogUEFTUyB0ZXN0IFdlYkdMU2hvcnRB
cnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMU2hv
cnRBcnJheSBDb25zdHJ1Y3RXaXRoV2ViR0xBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3Qg
V2ViR0xTaG9ydEFycmF5IE9mZnNldHNBbmRTaXplcworUEFTUyB0ZXN0IFdlYkdMU2hvcnRBcnJh
eSBTZXRGcm9tV2ViR0xBcnJheQorUEFTUyBuZWdhdGl2ZVRlc3QgV2ViR0xTaG9ydEFycmF5IFNl
dEZyb21XZWJHTEFycmF5CitQQVNTIHRlc3QgV2ViR0xTaG9ydEFycmF5IFNldEZyb21BcnJheQor
UEFTUyB0ZXN0IFdlYkdMU2hvcnRBcnJheSBTbGljZQorUEFTUyBuZWdhdGl2ZVRlc3QgV2ViR0xT
aG9ydEFycmF5IFNsaWNlCiBQQVNTIHRlc3QgV2ViR0xTaG9ydEFycmF5IEJvdW5kYXJ5Q29uZGl0
aW9ucygtMzI3NjgsIC0zMjc2OCwgMzI3NjcsIDMyNzY3KQogUEFTUyB0ZXN0IFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkgU2V0QW5kR2V0MTBUbzEKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5IFNldEFuZEdldE1ldGhvZHMxMFRvMQogUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRCeXRlQXJy
YXkgQ29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMVW5z
aWduZWRCeXRlQXJyYXkgQ29uc3RydWN0V2l0aFdlYkdMQXJyYXlPZlVuc2lnbmVkVmFsdWVzCitQ
QVNTIHRlc3QgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBPZmZzZXRzQW5kU2l6ZXMKK1BBU1MgdGVz
dCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IFNldEZyb21XZWJHTEFycmF5CitQQVNTIG5lZ2F0aXZl
VGVzdCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IFNldEZyb21XZWJHTEFycmF5CitQQVNTIHRlc3Qg
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBTZXRGcm9tQXJyYXkKK1BBU1MgdGVzdCBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5IFNsaWNlCitQQVNTIG5lZ2F0aXZlVGVzdCBXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5IFNsaWNlCiBQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBCb3VuZGFyeUNvbmRp
dGlvbnMoMCwgMCwgMjU1LCAyNTUpCiBQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEludEFycmF5IFNl
dEFuZEdldDEwVG8xCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEludEFycmF5IFNldEFuZEdldE1l
dGhvZHMxMFRvMQogUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRJbnRBcnJheSBDb25zdHJ1Y3RXaXRo
QXJyYXlPZlVuc2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEludEFycmF5IENv
bnN0cnVjdFdpdGhXZWJHTEFycmF5T2ZVbnNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMVW5z
aWduZWRJbnRBcnJheSBPZmZzZXRzQW5kU2l6ZXMKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkSW50
QXJyYXkgU2V0RnJvbVdlYkdMQXJyYXkKK1BBU1MgbmVnYXRpdmVUZXN0IFdlYkdMVW5zaWduZWRJ
bnRBcnJheSBTZXRGcm9tV2ViR0xBcnJheQorUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRJbnRBcnJh
eSBTZXRGcm9tQXJyYXkKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkSW50QXJyYXkgU2xpY2UKK1BB
U1MgbmVnYXRpdmVUZXN0IFdlYkdMVW5zaWduZWRJbnRBcnJheSBTbGljZQogUEFTUyB0ZXN0IFdl
YkdMVW5zaWduZWRJbnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoMCwgMCwgNDI5NDk2NzI5NSwg
NDI5NDk2NzI5NSkKIFBBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBTZXRBbmRHZXQx
MFRvMQorUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IFNldEFuZEdldE1ldGhvZHMx
MFRvMQogUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IENvbnN0cnVjdFdpdGhBcnJh
eU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBDb25z
dHJ1Y3RXaXRoV2ViR0xBcnJheU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBXZWJHTFVuc2ln
bmVkU2hvcnRBcnJheSBPZmZzZXRzQW5kU2l6ZXMKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheSBTZXRGcm9tV2ViR0xBcnJheQorUEFTUyBuZWdhdGl2ZVRlc3QgV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkgU2V0RnJvbVdlYkdMQXJyYXkKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheSBTZXRGcm9tQXJyYXkKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBT
bGljZQorUEFTUyBuZWdhdGl2ZVRlc3QgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgU2xpY2UKIFBB
U1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoMCwgMCwg
NjU1MzUsIDY1NTM1KQogVGVzdCBwYXNzZWQuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3Rz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXkt
dW5pdC10ZXN0cy5odG1sCShyZXZpc2lvbiA1MDk2NikKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTMg
KzI3LDI2IEBAIGZ1bmN0aW9uIHBhc3MoKSB7CiB9CiAKIGZ1bmN0aW9uIGZhaWwoc3RyKSB7Ci0g
IHZhciBleGMgPSAnRkFJTEVEOiAnICsgY3VycmVudGx5UnVubmluZyArICc6ICcgKyBzdHI7Ci0g
IHRlc3RGYWlsZWQoc3RyKTsKKyAgYWxsUGFzc2VkID0gZmFsc2U7CisgIHZhciBleGM7CisgIGlm
IChzdHIpCisgICAgZXhjID0gY3VycmVudGx5UnVubmluZyArICc6ICcgKyBzdHI7CisgIGVsc2UK
KyAgICBleGMgPSBzdHI7CisgIHRlc3RGYWlsZWQoZXhjKTsKIH0KIAogZnVuY3Rpb24gYXNzZXJ0
RXEocHJlZml4LCBleHBlY3RlZCwgdmFsKSB7CiAgIGlmIChleHBlY3RlZCAhPSB2YWwpIHsKLSAg
ICBmYWlsKHByZWZpeCArICc6IGV4cGVjdGVkICcgKyBleHBlY3RlZCArICcsIGdvdCAnICsgdmFs
KTsKKyAgICB2YXIgc3RyID0gcHJlZml4ICsgJzogZXhwZWN0ZWQgJyArIGV4cGVjdGVkICsgJywg
Z290ICcgKyB2YWw7CisgICAgdGhyb3cgc3RyOworICB9Cit9CisKK2Z1bmN0aW9uIGFzc2VydChw
cmVmaXgsIGV4cGVjdGVkKSB7CisgIGlmICghZXhwZWN0ZWQpIHsKKyAgICB2YXIgc3RyID0gcHJl
Zml4ICsgJzogZXhwZWN0ZWQgdmFsdWUgLyB0cnVlJzsKKyAgICB0aHJvdyBzdHI7CiAgIH0KIH0K
IApAQCAtNjUsNiArNzgsMjIgQEAgZnVuY3Rpb24gdGVzdFNldEFuZEdldDEwVG8xKHR5cGUsIG5h
bWUpIAogICB9CiB9CiAKK2Z1bmN0aW9uIHRlc3RTZXRBbmRHZXRNZXRob2RzMTBUbzEodHlwZSwg
bmFtZSkgeworICBydW5uaW5nKCd0ZXN0ICcgKyBuYW1lICsgJyBTZXRBbmRHZXRNZXRob2RzMTBU
bzEnKTsKKyAgdHJ5IHsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZSgxMCk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICBhcnJheS5zZXQoaSwgMTAgLSBpKTsKKyAg
ICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICBhc3NlcnRFcSgn
RWxlbWVudCAnICsgaSwgMTAgLSBpLCBhcnJheS5nZXQoaSkpOworICAgIH0KKyAgICBwYXNzKCk7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9Cit9CisKIGZ1bmN0aW9uIHRlc3RD
b25zdHJ1Y3RXaXRoQXJyYXlPZlVuc2lnbmVkVmFsdWVzKHR5cGUsIG5hbWUpIHsKICAgcnVubmlu
ZygndGVzdCAnICsgbmFtZSArICcgQ29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcycp
OwogICB0cnkgewpAQCAtNzksNiArMTA4LDIxIEBAIGZ1bmN0aW9uIHRlc3RDb25zdHJ1Y3RXaXRo
QXJyYXlPZlVuc2lnbmUKICAgfQogfQogCitmdW5jdGlvbiB0ZXN0Q29uc3RydWN0V2l0aFdlYkdM
QXJyYXlPZlVuc2lnbmVkVmFsdWVzKHR5cGUsIG5hbWUpIHsKKyAgcnVubmluZygndGVzdCAnICsg
bmFtZSArICcgQ29uc3RydWN0V2l0aFdlYkdMQXJyYXlPZlVuc2lnbmVkVmFsdWVzJyk7CisgIHRy
eSB7CisgICAgdmFyIHRtcCA9IG5ldyB0eXBlKFsxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwg
MV0pOworICAgIHZhciBhcnJheSA9IG5ldyB0eXBlKHRtcCk7CisgICAgYXNzZXJ0RXEoJ0FycmF5
IGxlbmd0aCcsIDEwLCBhcnJheS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7
IGkrKykgeworICAgICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIDEwIC0gaSwgYXJyYXlbaV0p
OworICAgIH0KKyAgICBwYXNzKCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9
Cit9CisKIC8vCiAvLyBUZXN0cyBmb3Igc2lnbmVkIGFycmF5IHZhcmlhbnRzCiAvLwpAQCAtOTks
NiArMTQzLDIyIEBAIGZ1bmN0aW9uIHRlc3RTZXRBbmRHZXRQb3MxMFRvTmVnMTAodHlwZSwKICAg
fQogfQogCitmdW5jdGlvbiB0ZXN0U2V0QW5kR2V0TWV0aG9kc1BvczEwVG9OZWcxMCh0eXBlLCBu
YW1lKSB7CisgIHJ1bm5pbmcoJ3Rlc3QgJyArIG5hbWUgKyAnIFNldEFuZEdldE1ldGhvZHNQb3Mx
MFRvTmVnMTAnKTsKKyAgdHJ5IHsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZSgyMSk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAyMTsgaSsrKSB7CisgICAgICBhcnJheS5zZXQoaSwgMTAgLSBp
KTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMTsgaSsrKSB7CisgICAgICBhc3Nl
cnRFcSgnRWxlbWVudCAnICsgaSwgMTAgLSBpLCBhcnJheS5nZXQoaSkpOworICAgIH0KKyAgICBw
YXNzKCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9Cit9CisKIGZ1bmN0aW9u
IHRlc3RDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcyh0eXBlLCBuYW1lKSB7CiAgIHJ1
bm5pbmcoJ3Rlc3QgJyArIG5hbWUgKyAnIENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVz
Jyk7CiAgIHRyeSB7CkBAIC0xMTMsMTAgKzE3MywxNTcgQEAgZnVuY3Rpb24gdGVzdENvbnN0cnVj
dFdpdGhBcnJheU9mU2lnbmVkVgogICB9CiB9CiAKK2Z1bmN0aW9uIHRlc3RDb25zdHJ1Y3RXaXRo
V2ViR0xBcnJheU9mU2lnbmVkVmFsdWVzKHR5cGUsIG5hbWUpIHsKKyAgcnVubmluZygndGVzdCAn
ICsgbmFtZSArICcgQ29uc3RydWN0V2l0aFdlYkdMQXJyYXlPZlNpZ25lZFZhbHVlcycpOworICB0
cnkgeworICAgIHZhciB0bXAgPSBuZXcgdHlwZShbMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIs
IDEsIDAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTksIC0xMF0pOworICAgIHZh
ciBhcnJheSA9IG5ldyB0eXBlKHRtcCk7CisgICAgYXNzZXJ0RXEoJ0FycmF5IGxlbmd0aCcsIDIx
LCBhcnJheS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjE7IGkrKykgeworICAg
ICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIDEwIC0gaSwgYXJyYXlbaV0pOworICAgIH0KKyAg
ICBwYXNzKCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9Cit9CisKIC8vCiAv
LyBUZXN0IGNhc2VzIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgdHlwZXMKIC8vCiAKK2Z1
bmN0aW9uIHRlc3RPZmZzZXRzQW5kU2l6ZXModHlwZSwgbmFtZSwgZWxlbWVudFNpemVJbkJ5dGVz
KSB7CisgIHJ1bm5pbmcoJ3Rlc3QgJyArIG5hbWUgKyAnIE9mZnNldHNBbmRTaXplcycpOworICB0
cnkgeworICAgIHZhciBsZW4gPSAxMDsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZShsZW4pOwor
ICAgIGFzc2VydCgnYXJyYXkuYnVmZmVyJywgYXJyYXkuYnVmZmVyKTsKKyAgICBhc3NlcnRFcSgn
YXJyYXkuYnl0ZU9mZnNldCcsIGFycmF5LmJ5dGVPZmZzZXQsIDApOworICAgIGFzc2VydEVxKCdh
cnJheS5sZW5ndGgnLCBhcnJheS5sZW5ndGgsIGxlbik7CisgICAgYXNzZXJ0RXEoJ2FycmF5LmJ5
dGVMZW5ndGgnLCBhcnJheS5ieXRlTGVuZ3RoLCBsZW4gKiBlbGVtZW50U2l6ZUluQnl0ZXMpOwor
ICAgIGFycmF5ID0gbmV3IHR5cGUoYXJyYXkuYnVmZmVyLCBlbGVtZW50U2l6ZUluQnl0ZXMsIGxl
biAtIDEpOworICAgIGFzc2VydCgnYXJyYXkuYnVmZmVyJywgYXJyYXkuYnVmZmVyKTsKKyAgICBh
c3NlcnRFcSgnYXJyYXkuYnl0ZU9mZnNldCcsIGFycmF5LmJ5dGVPZmZzZXQsIGVsZW1lbnRTaXpl
SW5CeXRlcyk7CisgICAgYXNzZXJ0RXEoJ2FycmF5Lmxlbmd0aCcsIGFycmF5Lmxlbmd0aCwgbGVu
IC0gMSk7CisgICAgYXNzZXJ0RXEoJ2FycmF5LmJ5dGVMZW5ndGgnLCBhcnJheS5ieXRlTGVuZ3Ro
LCAobGVuIC0gMSkgKiBlbGVtZW50U2l6ZUluQnl0ZXMpOworICAgIHBhc3MoKTsKKyAgfSBjYXRj
aCAoZSkgeworICAgIGZhaWwoZSk7CisgIH0KK30KKworZnVuY3Rpb24gdGVzdFNldEZyb21XZWJH
TEFycmF5KHR5cGUsIG5hbWUpIHsKKyAgcnVubmluZygndGVzdCAnICsgbmFtZSArICcgU2V0RnJv
bVdlYkdMQXJyYXknKTsKKyAgdHJ5IHsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZSgxMCk7Cisg
ICAgdmFyIGFycmF5MiA9IG5ldyB0eXBlKDUpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7
IGkrKykgeworICAgICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIDAsIGFycmF5W2ldKTsKKyAg
ICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTIubGVuZ3RoOyBpKyspIHsKKyAgICAg
IGFycmF5MltpXSA9IGk7CisgICAgfQorICAgIGFycmF5LnNldChhcnJheTIpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYXJyYXkyLmxlbmd0aDsgaSsrKSB7CisgICAgICBhc3NlcnRFcSgnRWxl
bWVudCAnICsgaSwgaSwgYXJyYXlbaV0pOworICAgIH0KKyAgICBhcnJheS5zZXQoYXJyYXkyLCA1
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Mi5sZW5ndGg7IGkrKykgeworICAgICAg
YXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIGksIGFycmF5WzUgKyBpXSk7CisgICAgfQorICAgIHBh
c3MoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGZhaWwoZSk7CisgIH0KK30KKworZnVuY3Rpb24g
bmVnYXRpdmVUZXN0U2V0RnJvbVdlYkdMQXJyYXkodHlwZSwgbmFtZSkgeworICBydW5uaW5nKCdu
ZWdhdGl2ZVRlc3QgJyArIG5hbWUgKyAnIFNldEZyb21XZWJHTEFycmF5Jyk7CisgIHRyeSB7Cisg
ICAgdmFyIGFycmF5ID0gbmV3IHR5cGUoNSk7CisgICAgdmFyIGFycmF5MiA9IG5ldyB0eXBlKDYp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICBhc3NlcnRFcSgnRWxl
bWVudCAnICsgaSwgMCwgYXJyYXlbaV0pOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFycmF5Mi5sZW5ndGg7IGkrKykgeworICAgICAgYXJyYXkyW2ldID0gaTsKKyAgICB9CisgICAg
dHJ5IHsKKyAgICAgIGFycmF5LnNldChhcnJheTIpOworICAgICAgZmFpbCgnRXhwZWN0ZWQgZXhj
ZXB0aW9uIGZyb20gYXJyYXkuc2V0KGFycmF5MiknKTsKKyAgICAgIHJldHVybjsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgfQorICAgIHRyeSB7CisgICAgICBhcnJheTIuc2V0KGFycmF5LCAyKTsK
KyAgICAgIGZhaWwoJ0V4cGVjdGVkIGV4Y2VwdGlvbiBmcm9tIGFycmF5Mi5zZXQoYXJyYXksIDIp
Jyk7CisgICAgICByZXR1cm47CisgICAgfSBjYXRjaCAoZSkgeworICAgIH0KKyAgICBwYXNzKCk7
CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RT
ZXRGcm9tQXJyYXkodHlwZSwgbmFtZSkgeworICBydW5uaW5nKCd0ZXN0ICcgKyBuYW1lICsgJyBT
ZXRGcm9tQXJyYXknKTsKKyAgdHJ5IHsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZSgxMCk7Cisg
ICAgdmFyIGFycmF5MiA9IFsxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMV07CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICBhc3NlcnRFcSgnRWxlbWVudCAnICsg
aSwgMCwgYXJyYXlbaV0pOworICAgIH0KKyAgICBhcnJheS5zZXQoYXJyYXkyLCAwKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFycmF5Mi5sZW5ndGg7IGkrKykgeworICAgICAgYXNzZXJ0RXEo
J0VsZW1lbnQgJyArIGksIDEwIC0gaSwgYXJyYXlbaV0pOworICAgIH0KKyAgICBwYXNzKCk7Cisg
IH0gY2F0Y2ggKGUpIHsKKyAgICBmYWlsKGUpOworICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RTbGlj
ZSh0eXBlLCBuYW1lKSB7CisgIHJ1bm5pbmcoJ3Rlc3QgJyArIG5hbWUgKyAnIFNsaWNlJyk7Cisg
IHRyeSB7CisgICAgdmFyIGFycmF5ID0gbmV3IHR5cGUoWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDldKTsKKyAgICB2YXIgc2xpY2UgPSBhcnJheS5zbGljZSgwLCA1KTsKKyAgICBhc3NlcnRF
cSgnc2xpY2UubGVuZ3RoJywgNSwgc2xpY2UubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDU7IGkrKykgeworICAgICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIGksIHNsaWNlW2ld
KTsKKyAgICB9CisgICAgc2xpY2UgPSBhcnJheS5zbGljZSg0LCA2KTsKKyAgICBhc3NlcnRFcSgn
c2xpY2UubGVuZ3RoJywgNiwgc2xpY2UubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDY7IGkrKykgeworICAgICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIDQgKyBpLCBzbGljZVtp
XSk7CisgICAgfQorICAgIHBhc3MoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGZhaWwoZSk7Cisg
IH0KK30KKworZnVuY3Rpb24gbmVnYXRpdmVUZXN0U2xpY2UodHlwZSwgbmFtZSkgeworICBydW5u
aW5nKCduZWdhdGl2ZVRlc3QgJyArIG5hbWUgKyAnIFNsaWNlJyk7CisgIHRyeSB7CisgICAgdmFy
IGFycmF5ID0gbmV3IHR5cGUoWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldKTsKKyAgICBz
bGljZSA9IGFycmF5LnNsaWNlKDUsIDYpOworICAgIGlmIChzbGljZSkgeworICAgICAgZmFpbCgp
OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzbGljZSA9IGFycmF5LnNsaWNlKDEwLCAwKTsK
KyAgICBpZiAoc2xpY2UpIHsKKyAgICAgIGZhaWwoKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgcGFzcygpOworICB9IGNhdGNoIChlKSB7CisgICAgcGFzcygpOworICB9Cit9CisKIGZ1bmN0
aW9uIHRlc3RCb3VuZGFyeUNvbmRpdGlvbnModHlwZSwgbmFtZSwgbG93VmFsdWUsIGV4cGVjdGVk
TG93VmFsdWUsIGhpZ2hWYWx1ZSwgZXhwZWN0ZWRIaWdoVmFsdWUpIHsKICAgcnVubmluZygndGVz
dCAnICsgbmFtZSArICcgQm91bmRhcnlDb25kaXRpb25zKCcgKwogICAgICAgICAgIGxvd1ZhbHVl
ICsgJywgJyArIGV4cGVjdGVkTG93VmFsdWUgKyAnLCAnICsKQEAgLTE0Niw0MiArMzUzLDQ5IEBA
IGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICB2YXIgdGVzdENhc2VzID0KICAgICBbIHtuYW1lOiAi
V2ViR0xCeXRlQXJyYXkiLAogICAgICAgIHVuc2lnbmVkOiBmYWxzZSwKKyAgICAgICBlbGVtZW50
U2l6ZUluQnl0ZXM6IDEsCiAgICAgICAgbG93OiAtMTI4LAogICAgICAgIGV4cGVjdGVkTG93OiAt
MTI4LAogICAgICAgIGhpZ2g6IDEyNywKICAgICAgICBleHBlY3RlZEhpZ2g6IDEyN30sCiAgICAg
ICB7bmFtZTogIldlYkdMRmxvYXRBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNlLAorICAg
ICAgIGVsZW1lbnRTaXplSW5CeXRlczogNCwKICAgICAgICBsb3c6IC01MDAsCiAgICAgICAgZXhw
ZWN0ZWRMb3c6IC01MDAsCiAgICAgICAgaGlnaDogNTAwLAogICAgICAgIGV4cGVjdGVkSGlnaDog
NTAwfSwKICAgICAgIHtuYW1lOiAiV2ViR0xJbnRBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZh
bHNlLAorICAgICAgIGVsZW1lbnRTaXplSW5CeXRlczogNCwKICAgICAgICBsb3c6IC0yMTQ3NDgz
NjQ4LAogICAgICAgIGV4cGVjdGVkTG93OiAtMjE0NzQ4MzY0OCwKICAgICAgICBoaWdoOiAyMTQ3
NDgzNjQ3LAogICAgICAgIGV4cGVjdGVkSGlnaDogMjE0NzQ4MzY0N30sCiAgICAgICB7bmFtZTog
IldlYkdMU2hvcnRBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNlLAorICAgICAgIGVsZW1l
bnRTaXplSW5CeXRlczogMiwKICAgICAgICBsb3c6IC0zMjc2OCwKICAgICAgICBleHBlY3RlZExv
dzogLTMyNzY4LAogICAgICAgIGhpZ2g6IDMyNzY3LAogICAgICAgIGV4cGVjdGVkSGlnaDogMzI3
Njd9LAogICAgICAge25hbWU6ICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IiwKICAgICAgICB1bnNp
Z25lZDogdHJ1ZSwKKyAgICAgICBlbGVtZW50U2l6ZUluQnl0ZXM6IDEsCiAgICAgICAgbG93OiAw
LAogICAgICAgIGV4cGVjdGVkTG93OiAwLAogICAgICAgIGhpZ2g6IDI1NSwKICAgICAgICBleHBl
Y3RlZEhpZ2g6IDI1NX0sCiAgICAgICB7bmFtZTogIldlYkdMVW5zaWduZWRJbnRBcnJheSIsCiAg
ICAgICAgdW5zaWduZWQ6IHRydWUsCisgICAgICAgZWxlbWVudFNpemVJbkJ5dGVzOiA0LAogICAg
ICAgIGxvdzogMCwKICAgICAgICBleHBlY3RlZExvdzogMCwKICAgICAgICBoaWdoOiA0Mjk0OTY3
Mjk1LAogICAgICAgIGV4cGVjdGVkSGlnaDogNDI5NDk2NzI5NX0sCiAgICAgICB7bmFtZTogIldl
YkdMVW5zaWduZWRTaG9ydEFycmF5IiwKICAgICAgICB1bnNpZ25lZDogdHJ1ZSwKKyAgICAgICBl
bGVtZW50U2l6ZUluQnl0ZXM6IDIsCiAgICAgICAgbG93OiAwLAogICAgICAgIGV4cGVjdGVkTG93
OiAwLAogICAgICAgIGhpZ2g6IDY1NTM1LApAQCAtMTk4LDExICs0MTIsMjEgQEAgZnVuY3Rpb24g
cnVuVGVzdHMoKSB7CiAgICAgdmFyIG5hbWUgPSB0ZXN0Q2FzZS5uYW1lOwogICAgIGlmICh0ZXN0
Q2FzZS51bnNpZ25lZCkgewogICAgICAgdGVzdFNldEFuZEdldDEwVG8xKHR5cGUsIG5hbWUpOwor
ICAgICAgdGVzdFNldEFuZEdldE1ldGhvZHMxMFRvMSh0eXBlLCBuYW1lKTsKICAgICAgIHRlc3RD
b25zdHJ1Y3RXaXRoQXJyYXlPZlVuc2lnbmVkVmFsdWVzKHR5cGUsIG5hbWUpOworICAgICAgdGVz
dENvbnN0cnVjdFdpdGhXZWJHTEFycmF5T2ZVbnNpZ25lZFZhbHVlcyh0eXBlLCBuYW1lKTsKICAg
ICB9IGVsc2UgewogICAgICAgdGVzdFNldEFuZEdldFBvczEwVG9OZWcxMCh0eXBlLCBuYW1lKTsK
KyAgICAgIHRlc3RTZXRBbmRHZXRNZXRob2RzUG9zMTBUb05lZzEwKHR5cGUsIG5hbWUpOwogICAg
ICAgdGVzdENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzKHR5cGUsIG5hbWUpOworICAg
ICAgdGVzdENvbnN0cnVjdFdpdGhXZWJHTEFycmF5T2ZTaWduZWRWYWx1ZXModHlwZSwgbmFtZSk7
CiAgICAgfQorICAgIHRlc3RPZmZzZXRzQW5kU2l6ZXModHlwZSwgbmFtZSwgdGVzdENhc2UuZWxl
bWVudFNpemVJbkJ5dGVzKTsKKyAgICB0ZXN0U2V0RnJvbVdlYkdMQXJyYXkodHlwZSwgbmFtZSk7
CisgICAgbmVnYXRpdmVUZXN0U2V0RnJvbVdlYkdMQXJyYXkodHlwZSwgbmFtZSk7CisgICAgdGVz
dFNldEZyb21BcnJheSh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2xpY2UodHlwZSwgbmFtZSk7Cisg
ICAgbmVnYXRpdmVUZXN0U2xpY2UodHlwZSwgbmFtZSk7CiAgICAgdGVzdEJvdW5kYXJ5Q29uZGl0
aW9ucyh0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RDYXNlLmxvdywK
</data>
<flag name="review"
          id="24918"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>