<?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>122704</bug_id>
          
          <creation_ts>2013-10-12 16:37:21 -0700</creation_ts>
          <short_desc>Baseline JIT should use the DFG&apos;s PutById IC</short_desc>
          <delta_ts>2013-10-15 12:27:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121641</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939137</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-12 16:37:21 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939138</commentid>
    <comment_count>1</comment_count>
      <attachid>214068</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-12 16:37:48 -0700</bug_when>
    <thetext>Created attachment 214068
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939310</commentid>
    <comment_count>2</comment_count>
      <attachid>214110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 14:06:27 -0700</bug_when>
    <thetext>Created attachment 214110
slowly but surely...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939313</commentid>
    <comment_count>3</comment_count>
      <attachid>214110</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-10-13 14:13:25 -0700</bug_when>
    <thetext>Comment on attachment 214110
slowly but surely...

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

&gt; Source/JavaScriptCore/jit/JIT.h:260
&gt; +            : m_type(PutById)
&gt; +            , bytecodeIndex(bytecodeIndex)
&gt; +            , structureToCompare(structureToCompare)
&gt; +            , strucureCheck(structureCheck)
&gt; +            , propertyStorageLoad(propertyStorageLoad)
&gt; +#if USE(JSVALUE64)
&gt; +            , putDisplacementLabel(displacementLabel)
&gt; +#else
&gt; +            , putDisplacementLabel1(displacementLabel1)
&gt; +            , putDisplacementLabel2(displacementLabel2)
&gt; +#endif
&gt; +            , done(done)

indent or the style bot will complain

&gt; Source/JavaScriptCore/jit/JIT.h:268
&gt; -            getColdPathBegin = coldPathBegin;
&gt; +            this-&gt;coldPathBegin = coldPathBegin;

Can we just rename the members to be m_... ?  (I&apos;m okay with not doing in this patch if there&apos;s a pile of usages that make it awful to change)

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:-610
&gt; -    BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);

Do we still need BEGIN/END_UNINTERRUPTED_SEQUENCE ?  The branch compactor uses (used to?) use these to indicate branches that could not be rewritten.  If it has better handling now, yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939318</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 14:31:30 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 214110 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214110&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.h:260
&gt; &gt; +            : m_type(PutById)
&gt; &gt; +            , bytecodeIndex(bytecodeIndex)
&gt; &gt; +            , structureToCompare(structureToCompare)
&gt; &gt; +            , strucureCheck(structureCheck)
&gt; &gt; +            , propertyStorageLoad(propertyStorageLoad)
&gt; &gt; +#if USE(JSVALUE64)
&gt; &gt; +            , putDisplacementLabel(displacementLabel)
&gt; &gt; +#else
&gt; &gt; +            , putDisplacementLabel1(displacementLabel1)
&gt; &gt; +            , putDisplacementLabel2(displacementLabel2)
&gt; &gt; +#endif
&gt; &gt; +            , done(done)
&gt; 
&gt; indent or the style bot will complain

No it won&apos;t ... this is already indented the same way as the other constructor overloads.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.h:268
&gt; &gt; -            getColdPathBegin = coldPathBegin;
&gt; &gt; +            this-&gt;coldPathBegin = coldPathBegin;
&gt; 
&gt; Can we just rename the members to be m_... ?  (I&apos;m okay with not doing in this patch if there&apos;s a pile of usages that make it awful to change)

I don&apos;t think it would be a good idea to make this change anytime soon.  This patch is an incremental step towards getting rid of the baseline JIT&apos;s IC logic entirely.  So, doing refactorings to &quot;clean up&quot; that logic in the middle of getting rid of it sounds like it might be a waste of time.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:-610
&gt; &gt; -    BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);
&gt; 
&gt; Do we still need BEGIN/END_UNINTERRUPTED_SEQUENCE ?  The branch compactor uses (used to?) use these to indicate branches that could not be rewritten.  If it has better handling now, yay!

The DFG JIT doesn&apos;t use it, so I&apos;m assuming not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939321</commentid>
    <comment_count>5</comment_count>
      <attachid>214115</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 14:49:19 -0700</bug_when>
    <thetext>Created attachment 214115
small steps

I should just have this done by now but I&apos;m feeling sooooper lazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939338</commentid>
    <comment_count>6</comment_count>
      <attachid>214120</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 18:56:22 -0700</bug_when>
    <thetext>Created attachment 214120
almost works

Need to change the JITOperations for PutById to take EncodedJSValue for the base rather than JSCell*.

Also need to kill the old Baseline JIT put_by_id IC code, since that&apos;s now unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939349</commentid>
    <comment_count>7</comment_count>
      <attachid>214124</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 20:52:39 -0700</bug_when>
    <thetext>Created attachment 214124
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939350</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-13 20:54:20 -0700</bug_when>
    <thetext>Attachment 214124 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/PutByIdStatus.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperationWrappers.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:612:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:553:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939351</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 21:05:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Attachment 214124 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/PutByIdStatus.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperationWrappers.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.cpp&apos;]&quot; exit_code: 1
&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:612:  Missing space after ,  [whitespace/comma] [3]
&gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:553:  Missing space after ,  [whitespace/comma] [3]

Oops, fixed.

&gt; Total errors found: 2 in 14 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

I think this patch will break all of 32 bit.  Working on a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939353</commentid>
    <comment_count>10</comment_count>
      <attachid>214125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 21:16:30 -0700</bug_when>
    <thetext>Created attachment 214125
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939533</commentid>
    <comment_count>11</comment_count>
      <attachid>214125</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-14 10:54:55 -0700</bug_when>
    <thetext>Comment on attachment 214125
the patch

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

r=me

&gt; Source/JavaScriptCore/jit/JIT.h:229
&gt;              : m_type(PutById)
&gt;              , bytecodeIndex(bytecodeIndex)
&gt;              , hotPathBegin(hotPathBegin)
&gt; +            , structureToCompare(structureToCompare)
&gt;              , propertyStorageLoad(propertyStorageLoad)
&gt; -            , putStructureToCompare(structureToCompare)
&gt;  #if USE(JSVALUE64)
&gt;              , putDisplacementLabel(displacementLabel)

You said you wanted to remove this constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939566</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-14 11:38:58 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/157411</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939894</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-15 01:59:36 -0700</bug_when>
    <thetext>This may have improved Dromaeo/jslib-event-jquery&apos;s score by ~28%:
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-lion%22%2C%22Dromaeo%2Fjslib-event-jquery%3ARuns%22%5D%2C%5B%22mac-mountainlion%22%2C%22Dromaeo%2Fjslib-event-jquery%3ARuns%22%5D%2C%5B%22mac-mountainlion%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%2C%5B%22mac-lion%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%5D&amp;days=52&amp;zoom=%5B1381585431357.5227%2C1381827392596%5D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940074</commentid>
    <comment_count>14</comment_count>
      <attachid>214291</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-15 12:09:43 -0700</bug_when>
    <thetext>Created attachment 214291
PerformanceTestsResults for Dromaeo/jslib-event-jquery

(In reply to comment #13)
&gt; This may have improved Dromaeo/jslib-event-jquery&apos;s score by ~28%:
&gt; https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-lion%22%2C%22Dromaeo%2Fjslib-event-jquery%3ARuns%22%5D%2C%5B%22mac-mountainlion%22%2C%22Dromaeo%2Fjslib-event-jquery%3ARuns%22%5D%2C%5B%22mac-mountainlion%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%2C%5B%22mac-lion%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%5D&amp;days=52&amp;zoom=%5B1381585431357.5227%2C1381827392596%5D

Confirmed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940084</commentid>
    <comment_count>15</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-10-15 12:27:40 -0700</bug_when>
    <thetext>nice!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214068</attachid>
            <date>2013-10-12 16:37:48 -0700</date>
            <delta_ts>2013-10-13 14:06:27 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12615</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzczLDYgKzM3Myw4IEBACiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQ0NBRTQ1MTZEMENGNzQw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CisJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDRUZBQjAx
ODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQgLyogSW5p
dGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkNFRkFCMTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRjE4
MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0gKi87IH07CiAJCTBGQ0VGQUMx
MTgwNUQ5NEUwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBM
TFZNT3ZlcnJpZGVzLmNwcCAqLzsgfTsKQEAgLTM4OSw4ICszOTEsNiBAQAogCQkwRkNFRkFENzE4
MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFu
Y2hvci5jcHAgKi87IH07CiAJCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4
MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwogCQkwRkNFRkFEQzE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICov
OyB9OwotCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLzsgfTsKLQkJMEZDRUZBQUMxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2
ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTYyNyw2ICsxNjI3LDggQEAKIAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVD
MEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2F2ZVJlc3Rv
cmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmg7IHBhdGgg
PSBmdGwvRlRMU2F2ZVJlc3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEluaXRpYWxpemVMTFZNLmg7IHBhdGggPSBsbHZtL0luaXRpYWxp
emVMTFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUFGMTgwNUNBNkQw
MDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLm1tOyBwYXRoID0gbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBQjYxODA1
RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJsbHZtRm9ySlNDLmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTY0Miw4ICsxNjQ0LDYgQEAKIAkJMEZDRUZBRDIx
ODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExMVk1IZWFkZXJzLmg7IHBhdGggPSBsbHZtL0xMVk1IZWFkZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZN
QW5jaG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMVk1BbmNo
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFEQjE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnX2xsdm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVz
dG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFBMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2Nh
dGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9G
VExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw4ICsxNTUs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgaG90UGF0aEJlZ2luOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIGdldFN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgZ2V0U3RydWN0dXJlQ2hlY2s7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjazsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQ7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZ2V0
RGlzcGxhY2VtZW50TGFiZWw7CkBAIC0xNjYsNyArMTY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGdldFB1dFJlc3VsdDsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGdldENvbGRQYXRoQmVnaW47Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgcHV0U3RydWN0dXJlVG9Db21wYXJlOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBwdXREaXNwbGFj
ZW1lbnRMYWJlbDsKICNlbHNlCkBAIC0xOTgsNyArMTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwg
aG90UGF0aEJlZ2luKGhvdFBhdGhCZWdpbikKICAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlVG9D
b21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlQ2hl
Y2soc3RydWN0dXJlQ2hlY2spCisgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVy
ZUNoZWNrKQogICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFn
ZUxvYWQpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50
TGFiZWwoZGlzcGxhY2VtZW50TGFiZWwpCkBAIC0yMzUsNiArMjM0LDMyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxh
dGlvbkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkX1QsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0
cnVjdHVyZVRvQ29tcGFyZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZlcnRp
YmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbAor
I2Vsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1l
bnRMYWJlbDEsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxh
Y2VtZW50TGFiZWwyCisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIDogbV90eXBl
KFB1dEJ5SWQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKKyAgICAg
ICAgICAgICwgc3RydWN1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKKyAgICAgICAgICAgICwgcHJv
cGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQor
I2Vsc2UKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwxKGRpc3BsYWNlbWVudExh
YmVsMSkKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwyKGRpc3BsYWNlbWVudExh
YmVsMikKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIHNsb3dD
YXNlSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkX1QsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjb2xk
UGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQobV90eXBlID09IEdldEJ5SWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDcsMjIgKzYwNywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJh
c2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBt
YXRjaC4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
IAotICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKLQot
ICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0
aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBp
biBvcmRlciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCiAgICAgRGF0YUxhYmVsUHRyIHN0
cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKSk7Ci0KLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBw
cm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBEYXRhTGFiZWwzMiBkaXNw
bGFjZW1lbnRMYWJlbCA9IHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7Ci0KLSAgICBFTkRfVU5JTlRF
UlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwotCisgICAgUGF0Y2hhYmxlSnVtcCBz
dHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgTm90
RXF1YWwsQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVy
ZVRvQ29tcGFyZSwKKyAgICAgICAgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
Pih1bnVzZWRQb2ludGVyKSkpOworICAgIAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJl
Z1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8u
YXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBt
X2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvcGVy
dHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwpKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAK
KyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9CisgICAgICAgIHN0b3JlNjRXaXRoQWRk
cmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0
T2Zmc2V0KSk7CisgICAgCisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBl
bmQoCisgICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFBy
b3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwg
c3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdp
dGhQYXRjaCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC02MzQsMTUgKzYzNSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKEluc3RydWN0CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcp
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7
Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW1QdHIoaWRlbnQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MSk7Ci0gICAgbW92ZShyZWdUMCwgbm9uQXJnR1BSMSk7Ci0gICAgQ2FsbCBjYWxsID0gc3R1YkNh
bGwuY2FsbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgCisgICAgVl9K
SVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAg
ICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCByZWdUMSwgcmVnVDAsIGlkZW50LT5pbXBs
KCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwg
YmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgotICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xv
d0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIGNhbGwpOworICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xv
d0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiAvLyBDb21waWxlIGEgc3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAg
TWF5IG92ZXJ3cml0ZSB0aGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214110</attachid>
            <date>2013-10-13 14:06:27 -0700</date>
            <delta_ts>2013-10-13 14:49:19 -0700</delta_ts>
            <desc>slowly but surely...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18164</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzczLDYgKzM3Myw4IEBACiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQ0NBRTQ1MTZEMENGNzQw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CisJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDRUZBQjAx
ODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQgLyogSW5p
dGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkNFRkFCMTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRjE4
MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0gKi87IH07CiAJCTBGQ0VGQUMx
MTgwNUQ5NEUwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBM
TFZNT3ZlcnJpZGVzLmNwcCAqLzsgfTsKQEAgLTM4OSw4ICszOTEsNiBAQAogCQkwRkNFRkFENzE4
MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFu
Y2hvci5jcHAgKi87IH07CiAJCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4
MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwogCQkwRkNFRkFEQzE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICov
OyB9OwotCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLzsgfTsKLQkJMEZDRUZBQUMxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2
ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTYyNyw2ICsxNjI3LDggQEAKIAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVD
MEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2F2ZVJlc3Rv
cmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmg7IHBhdGgg
PSBmdGwvRlRMU2F2ZVJlc3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEluaXRpYWxpemVMTFZNLmg7IHBhdGggPSBsbHZtL0luaXRpYWxp
emVMTFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUFGMTgwNUNBNkQw
MDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLm1tOyBwYXRoID0gbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBQjYxODA1
RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJsbHZtRm9ySlNDLmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTY0Miw4ICsxNjQ0LDYgQEAKIAkJMEZDRUZBRDIx
ODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExMVk1IZWFkZXJzLmg7IHBhdGggPSBsbHZtL0xMVk1IZWFkZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZN
QW5jaG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMVk1BbmNo
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFEQjE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnX2xsdm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVz
dG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFBMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2Nh
dGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9G
VExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwx
MSArNDg5LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eVN0dWJDb21waWxhdGkKICAg
ICBBU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOwogICAgIGluZm8uY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7
CiAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2Fs
bFJldHVybkxvY2F0aW9uKTsKLSAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihob3RQYXRoQmVnaW4pOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEdldEJ5SWQ6IHsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKKyAgICAgICAgaW5mby5o
b3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW5Mb2NhdGlvbjsKICAgICAgICAgaW5mby5wYXRjaC5i
YXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoZ2V0U3RydWN0dXJlVG9Db21wYXJlKSk7CiAgICAgICAgIGluZm8ucGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0
U3RydWN0dXJlQ2hlY2spKTsKICAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3BlcnR5U3Rv
cmFnZUxvYWQpKTsKQEAgLTUwOCwxNSArNTA4LDI0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBQcm9w
ZXJ0eVN0dWJDb21waWxhdGkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHV0QnlJ
ZDoKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNl
bGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YocHV0U3RydWN0dXJlVG9Db21wYXJlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUu
dS5wdXQucHJvcGVydHlTdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihw
cm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtC
dWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBjYWxsUmV0dXJuTG9jYWl0b24p
OworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdGhlY2sgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbCA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOworICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwogI2Vsc2UKLSAgICAgICAgaW5mby5w
YXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDEgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0gICAgICAgIGluZm8ucGF0Y2gu
YmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50TGFiZWwyID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBGSVhNRTsKICNlbmRpZgor
ICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBp
bmZvLnBhdGNoLmRmZy52YWx1ZUdQUiA9IEdQUkluZm86OnJlZ1QxOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzOworICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhpbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsK
KyAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDggKzE1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9j
YXRpb247CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBob3RQYXRoQmVnaW47Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZ2V0U3RydWN0dXJlVG9Db21wYXJlOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBnZXRTdHJ1Y3R1cmVDaGVjazsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDsKQEAgLTE2NCw5ICsxNjQsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
Z2V0RGlzcGxhY2VtZW50TGFiZWwxOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
Q29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDI7CiAjZW5kaWYKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGdldFB1dFJlc3VsdDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGdldENvbGRQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIg
cHV0U3RydWN0dXJlVG9Db21wYXJlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW47CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3Bs
YWNlbWVudExhYmVsOwogI2Vsc2UKQEAgLTE5MywxMiArMTkyLDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2Vt
ZW50TGFiZWwxLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
ZGlzcGxhY2VtZW50TGFiZWwyLAogI2VuZGlmCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgcHV0UmVzdWx0KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmUp
CiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAgICAgICAgLCBieXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGhvdFBhdGhCZWdpbihob3RQYXRoQmVn
aW4pCiAgICAgICAgICAgICAsIGdldFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBh
cmUpCi0gICAgICAgICAgICAsIGdldFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQorICAg
ICAgICAgICAgLCBzdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKICAgICAgICAgICAgICwg
cHJvcGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVs
KQpAQCAtMjA2LDcgKzIwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBnZXRE
aXNwbGFjZW1lbnRMYWJlbDEoZGlzcGxhY2VtZW50TGFiZWwxKQogICAgICAgICAgICAgLCBnZXRE
aXNwbGFjZW1lbnRMYWJlbDIoZGlzcGxhY2VtZW50TGFiZWwyKQogI2VuZGlmCi0gICAgICAgICAg
ICAsIGdldFB1dFJlc3VsdChwdXRSZXN1bHQpCisgICAgICAgICAgICAsIGRvbmUoZG9uZSkKICAg
ICAgICAgewogICAgICAgICB9CiAKQEAgLTIzNSwxMSArMjM0LDM4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlv
bkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkX1QsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVj
dHVyZVRvQ29tcGFyZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZlcnRpYmxl
TG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbAorI2Vs
c2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRM
YWJlbDEsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2Vt
ZW50TGFiZWwyCisjZW5kaWYKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25l
KQorICAgICAgICAgICAgOiBtX3R5cGUoUHV0QnlJZCkKKyAgICAgICAgICAgICwgYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3Ry
dWN0dXJlVG9Db21wYXJlKQorICAgICAgICAgICAgLCBzdHJ1Y3VyZUNoZWNrKHN0cnVjdHVyZUNo
ZWNrKQorICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxv
YWQpCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFi
ZWwoZGlzcGxhY2VtZW50TGFiZWwpCisjZWxzZQorICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1l
bnRMYWJlbDEoZGlzcGxhY2VtZW50TGFiZWwxKQorICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1l
bnRMYWJlbDIoZGlzcGxhY2VtZW50TGFiZWwyKQorI2VuZGlmCisgICAgICAgICAgICAsIGRvbmUo
ZG9uZSkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8o
UHJvcGVydHlTdHViR2V0QnlJZF9ULCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdp
biwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBHZXRCeUlkKTsKICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGNhbGw7Ci0gICAgICAgICAgICBnZXRDb2xkUGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKKyAg
ICAgICAgICAgIHRoaXMtPmNvbGRQYXRoQmVnaW4gPSBjb2xkUGF0aEJlZ2luOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZF9ULCBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NTEsMTEgKzU1MSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBi
YXNlCiAgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZl
cnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxvYWQ2
NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJ
ZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CiAKLSAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7Cisg
ICAgTGFiZWwgZG9uZSh0aGlzKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNl
cXVlbmNlR2V0QnlJZEhvdFBhdGgpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5
SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBz
dHJ1Y3R1cmVDaGVjaywgcHJvcGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwsIHB1
dFJlc3VsdCkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkLCBtX2J5dGVjb2Rl
T2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ss
IHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsLCBkb25lKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYwNywyMiAr
NjA3LDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAv
LyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1t
ZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCi0gICAgQkVHSU5fVU5JTlRF
UlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwotCi0gICAgTGFiZWwgaG90UGF0aEJl
Z2luKHRoaXMpOwotCi0gICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBp
bnN0cnVjdGlvbiBwbGFudHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2Fu
IGJlIHBhdGNoZWQgb3Zlci4KICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0
dXJlKSkpKTsKLQotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQg
PSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsID0gc3Rv
cmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0
QnlJZERlZmF1bHRPZmZzZXQpKTsKLQotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNl
cXVlbmNlUHV0QnlJZCk7Ci0KKyAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBOb3RFcXVhbCxBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAg
ICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7
CisgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwog
Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHVi
Q29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIGhv
dFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBkaXNw
bGFjZW1lbnRMYWJlbCkpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQgPQorICAgICAgICBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIAorICAgIERhdGFMYWJlbDMyIHN0
b3JlV2l0aFBhdGNoID0KKyAgICAgICAgc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVn
VDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKKyAgICAKKyAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvLmFwcGVuZCgKKyAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAor
ICAgICAgICAgICAgUHJvcGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0
dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZUxvYWQsIHN0b3JlV2l0aFBhdGNoLCBkb25lKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYzNCwxNSArNjM3LDI1IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3Qg
OiBjdGlfb3BfcHV0X2J5X2lkKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihpZGVudCkpOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICBtb3ZlKHJlZ1QwLCBub25BcmdHUFIxKTsKLSAg
ICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKKyAgICAKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAg
aWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAoZGlyZWN0KQor
ICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocHV0
S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
cHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIH0K
KyAgICAKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHJlZ1Qx
LCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2Yg
dGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24u
Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZCwgY2FsbCk7
CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZCwgY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIC8vIENvbXBpbGUgYSBzdG9yZSBpbnRvIGFuIG9iamVjdCdz
IHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIHRoZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214115</attachid>
            <date>2013-10-13 14:49:19 -0700</date>
            <delta_ts>2013-10-13 18:56:22 -0700</delta_ts>
            <desc>small steps</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22360</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzczLDYgKzM3Myw4IEBACiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQ0NBRTQ1MTZEMENGNzQw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CisJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDRUZBQjAx
ODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQgLyogSW5p
dGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkNFRkFCMTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRjE4
MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0gKi87IH07CiAJCTBGQ0VGQUMx
MTgwNUQ5NEUwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBM
TFZNT3ZlcnJpZGVzLmNwcCAqLzsgfTsKQEAgLTM4OSw4ICszOTEsNiBAQAogCQkwRkNFRkFENzE4
MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFu
Y2hvci5jcHAgKi87IH07CiAJCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4
MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwogCQkwRkNFRkFEQzE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICov
OyB9OwotCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLzsgfTsKLQkJMEZDRUZBQUMxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2
ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTYyNyw2ICsxNjI3LDggQEAKIAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVD
MEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2F2ZVJlc3Rv
cmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmg7IHBhdGgg
PSBmdGwvRlRMU2F2ZVJlc3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEluaXRpYWxpemVMTFZNLmg7IHBhdGggPSBsbHZtL0luaXRpYWxp
emVMTFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUFGMTgwNUNBNkQw
MDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLm1tOyBwYXRoID0gbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBQjYxODA1
RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJsbHZtRm9ySlNDLmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTY0Miw4ICsxNjQ0LDYgQEAKIAkJMEZDRUZBRDIx
ODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExMVk1IZWFkZXJzLmg7IHBhdGggPSBsbHZtL0xMVk1IZWFkZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZN
QW5jaG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMVk1BbmNo
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFEQjE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnX2xsdm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVz
dG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFBMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2Nh
dGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9G
VExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwx
MyArNDg5LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eVN0dWJDb21waWxhdGkKICAg
ICBBU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOwogICAgIGluZm8uY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7
CiAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2Fs
bFJldHVybkxvY2F0aW9uKTsKLSAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihob3RQYXRoQmVnaW4pOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEdldEJ5SWQ6IHsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5w
YXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZ2V0U3RydWN0dXJlVG9Db21wYXJlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoZ2V0U3RydWN0dXJlQ2hlY2spKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBob3RQ
YXRoQmVnaW5Mb2NhdGlvbjsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1
Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlVG9D
b21wYXJlKSk7CisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdp
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKICAgICAg
ICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExh
YmVsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVn
aW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsKSk7
CkBAIC01MDMsMjAgKzUwMywzMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlTdHViQ29t
cGlsYXRpCiAgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFi
ZWwxID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVn
aW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsMSkp
OwogICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMiA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDIpKTsKICNl
bmRpZgotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXRQdXRSZXN1bHQpKTsKLSAgICAgICAgaW5mby5wYXRj
aC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0Q29sZFBhdGhCZWdpbiks
IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24pKTsKKyAgICAgICAgaW5m
by5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoZG9uZSkpOworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRo
QmVnaW4gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxS
ZXR1cm5Mb2NhdGlvbikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQdXRCeUlk
OgotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW5Mb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihob3RQYXRoQmVnaW4pOwotICAgICAgICBpbmZvLnBhdGNoLmJhc2Vs
aW5lLnUucHV0LnN0cnVjdHVyZVRvQ29tcGFyZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihwdXRTdHJ1Y3R1cmVUb0NvbXBhcmUpKTsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51
LnB1dC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b3BlcnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0lt
bVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1
ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZVRvQ29tcGFyZSksIGluZm8uY2FsbFJldHVybkxvY2F0
aW9uKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50
TGFiZWwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhC
ZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwp
KTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwogI2Vsc2UK
LSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDEgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0gICAg
ICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50TGFiZWwyID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBG
SVhNRTsKICNlbmRpZgorICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvbGRQYXRoQmVnaW4pKTsKKyAgICAg
ICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGRvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9y
YWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VM
b2FkKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQ
UiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1ZUdQUiA9IEdQ
UkluZm86OnJlZ1QxOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhp
bmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBpbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
NTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsOCArMTU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXg7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxSZXR1cm5Mb2Nh
dGlvbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhvdFBhdGhCZWdpbjsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBnZXRTdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGdldFN0cnVjdHVyZUNoZWNrOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2s7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsOwpAQCAtMTY0LDkgKzE2NCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBn
ZXREaXNwbGFjZW1lbnRMYWJlbDE7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxD
b21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsMjsKICNlbmRpZgotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZ2V0UHV0UmVzdWx0OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
Z2V0Q29sZFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBw
dXRTdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25l
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdpbjsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgcHV0RGlzcGxh
Y2VtZW50TGFiZWw7CiAjZWxzZQpAQCAtMTkzLDEyICsxOTIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1l
bnRMYWJlbDEsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBk
aXNwbGFjZW1lbnRMYWJlbDIsCiAjZW5kaWYKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBwdXRSZXN1bHQpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSkK
ICAgICAgICAgICAgIDogbV90eXBlKEdldEJ5SWQpCiAgICAgICAgICAgICAsIGJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgaG90UGF0aEJlZ2luKGhvdFBhdGhCZWdp
bikKLSAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFy
ZSkKLSAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCisgICAg
ICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCisgICAgICAg
ICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQogICAgICAgICAgICAgLCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwoZGlzcGxhY2VtZW50TGFiZWwpCkBA
IC0yMDYsNyArMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIGdldERpc3Bs
YWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEpCiAgICAgICAgICAgICAsIGdldERpc3Bs
YWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIpCiAjZW5kaWYKLSAgICAgICAgICAgICwg
Z2V0UHV0UmVzdWx0KHB1dFJlc3VsdCkKKyAgICAgICAgICAgICwgZG9uZShkb25lKQogICAgICAg
ICB7CiAgICAgICAgIH0KIApAQCAtMjI0LDggKzIyMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgOiBtX3R5cGUoUHV0QnlJZCkKICAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KQogICAgICAgICAgICAgLCBob3RQYXRoQmVnaW4oaG90UGF0aEJlZ2luKQor
ICAgICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0dXJlVG9Db21wYXJlKQogICAg
ICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCi0gICAg
ICAgICAgICAsIHB1dFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwoZGlzcGxh
Y2VtZW50TGFiZWwpCiAjZWxzZQpAQCAtMjM1LDE2ICsyMzQsNDEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2xvd0Nhc2VJbmZvKFByb3Bl
cnR5U3R1YkdldEJ5SWRfVCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4sIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9u
SW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWRfVCwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0
dXJlVG9Db21wYXJlLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
c3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVM
b2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsLAorI2Vs
c2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRM
YWJlbDEsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2Vt
ZW50TGFiZWwyLAorI2VuZGlmCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZSkKKyAgICAgICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCisgICAgICAgICAgICAsIGJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0
cnVjdHVyZVRvQ29tcGFyZSkKKyAgICAgICAgICAgICwgc3RydWN0dXJlQ2hlY2soc3RydWN0dXJl
Q2hlY2spCisgICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFnZUxvYWQocHJvcGVydHlTdG9yYWdl
TG9hZCkKKyAgICAgICAgICAgICwgZG9uZShkb25lKQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQorI2Vsc2UK
KyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwxKGRpc3BsYWNlbWVudExhYmVsMSkK
KyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwyKGRpc3BsYWNlbWVudExhYmVsMikK
KyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNsb3dDYXNlSW5m
byhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBHZXRCeUlk
KTsKICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICBn
ZXRDb2xkUGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKKyAgICAgICAgICAgIHRoaXMtPmNvbGRQ
YXRoQmVnaW4gPSBjb2xkUGF0aEJlZ2luOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzbG93
Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZF9ULCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
KQorICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IFB1dEJ5SWQpOwogICAgICAg
ICAgICAgY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsKICAgICAgICAgfQogCkBAIC04ODIsNiAr
OTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUosIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRU9Kc3MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VK
Q0ksIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFN0cmluZ0ltcGwqKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKEpfSklUT3BlcmF0aW9uX0UpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25f
RUNiLCBDb2RlQmxvY2sqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKFpfSklUT3BlcmF0aW9uX0UpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NzM0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTEsNiArMjkxLDEyIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEs
IFJlZ2lzdGVySUQgcmVnT3AyLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKHJlZ09wMSwgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCiB7
CiAgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNTczNDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUxLDExICs1NTEsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90
UGF0aChpbnQgYmFzZQogICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwogICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFi
ZWwgPSBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QwLCBw
YXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCi0gICAgTGFiZWwgcHV0UmVzdWx0
KHRoaXMpOworICAgIExhYmVsIGRvbmUodGhpcyk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3ND
b21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0
eVN0dWJHZXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRv
Q29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVu
dExhYmVsLCBwdXRSZXN1bHQpKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwg
bV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVj
dHVyZUNoZWNrLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCwgZG9uZSkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC01OTAsNyArNTkwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJl
cwogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNl
KTsKIAogICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJl
IHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dD
YXNlSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkLCBjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC02MDcsMjIgKzYwNywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2JqZWN0
IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4KICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAotICAgIEJF
R0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKLQotICAgIExhYmVs
IGhvdFBhdGhCZWdpbih0aGlzKTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBm
b2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRlciB0
aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRv
Q29tcGFyZTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBh
cmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSkpKSk7Ci0KLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRM
YWJlbCA9IHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7Ci0KLSAgICBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwotCisgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgTm90RXF1YWwsQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFy
ZSwKKyAgICAgICAgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQ
b2ludGVyKSkpOworICAgIAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdU
MiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2Rl
T2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvcGVydHlTdG9yYWdl
TG9hZCwgZGlzcGxhY2VtZW50TGFiZWwpKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAKKyAgICBEYXRh
TGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9CisgICAgICAgIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7
CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0
aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNvZGVPZmZz
ZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdpdGhQYXRjaCwgZG9uZSkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MzQsMTUgKzYzNywyNSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAgICAgbGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
IAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlf
aWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
cmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoaWRlbnQpKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgbW92ZShyZWdUMCwgbm9uQXJn
R1BSMSk7Ci0gICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbCgpOworICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4odGhpcyk7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRD
YWxsOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYg
KGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdGltaXplZENh
bGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgfQor
ICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgcmVnVDEs
IHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0
aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4K
LSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBjYWxsKTsK
KyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
Ly8gQ29tcGlsZSBhIHN0b3JlIGludG8gYW4gb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1h
eSBvdmVyd3JpdGUgdGhlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214120</attachid>
            <date>2013-10-13 18:56:22 -0700</date>
            <delta_ts>2013-10-13 20:52:39 -0700</delta_ts>
            <desc>almost works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29725</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzczLDYgKzM3Myw4IEBACiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQ0NBRTQ1MTZEMENGNzQw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CisJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDRUZBQjAx
ODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQgLyogSW5p
dGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkNFRkFCMTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRjE4
MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1NYWMubW0gKi87IH07CiAJCTBGQ0VGQUMx
MTgwNUQ5NEUwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBM
TFZNT3ZlcnJpZGVzLmNwcCAqLzsgfTsKQEAgLTM4OSw4ICszOTEsNiBAQAogCQkwRkNFRkFENzE4
MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFu
Y2hvci5jcHAgKi87IH07CiAJCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4
MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwogCQkwRkNFRkFEQzE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICov
OyB9OwotCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLzsgfTsKLQkJMEZDRUZBQUMxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2
ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2
RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTYyNyw2ICsxNjI3LDggQEAKIAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0MDg1MTVD
MEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2F2ZVJlc3Rv
cmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmg7IHBhdGgg
PSBmdGwvRlRMU2F2ZVJlc3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEluaXRpYWxpemVMTFZNLmg7IHBhdGggPSBsbHZtL0luaXRpYWxp
emVMTFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUFGMTgwNUNBNkQw
MDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLm1tOyBwYXRoID0gbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBQjYxODA1
RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJsbHZtRm9ySlNDLmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTY0Miw4ICsxNjQ0LDYgQEAKIAkJMEZDRUZBRDIx
ODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExMVk1IZWFkZXJzLmg7IHBhdGggPSBsbHZtL0xMVk1IZWFkZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZN
QW5jaG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMVk1BbmNo
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFEQjE4MDY0QTE0MDA0
NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnX2xsdm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQTkxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVz
dG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFBMTgwNEMxM0Uw
MDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2Nh
dGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9G
VExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzODIsNyArMjM4Miw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpyZXNldFN0dWJJbnRlcm5hbChSZXBhdGMKICAgICAgICAgICAgIEpJVDo6cmVzZXRQYXRj
aEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpOwotICAg
ICAgICAgICAgSklUOjpyZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8p
OworICAgICAgICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw4IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICB9CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHBvbHltb3JwaGljIFB1
dEJ5SWQuIFdlIHByb2JhYmx5IGhhdmUgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MKKyAgICAgICAg
Ly8gd2UgY291bGQgZG8gYWJvdXQgaXQuCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAgIH0KICNlbHNlIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTcz
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4OSwxMyArNDg5LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eVN0dWJDb21w
aWxhdGkKICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpOwogICAgIGluZm8uY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNv
ZGVJbmRleCk7CiAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihob3RQYXRoQmVnaW4pOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICBjYXNlIEdldEJ5SWQ6IHsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJl
Z2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKLSAgICAg
ICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0U3RydWN0dXJlVG9Db21wYXJlKSk7Ci0gICAgICAgIGlu
Zm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZ2V0U3RydWN0dXJlQ2hlY2spKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVn
aW4gPSBob3RQYXRoQmVnaW5Mb2NhdGlvbjsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51
LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3Ry
dWN0dXJlVG9Db21wYXJlKSk7CisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3Ry
dWN0dXJlQ2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhv
dFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2sp
KTsKICAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3Bs
YWNlbWVudExhYmVsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0ciho
b3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVu
dExhYmVsKSk7CkBAIC01MDMsMjAgKzUwMyw0MCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVy
dHlTdHViQ29tcGlsYXRpCiAgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxh
Y2VtZW50TGFiZWwxID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0ciho
b3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVu
dExhYmVsMSkpOwogICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVu
dExhYmVsMiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0
aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJl
bDIpKTsKICNlbmRpZgotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2lu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXRQdXRSZXN1bHQpKTsKLSAgICAgICAg
aW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0Q29sZFBh
dGhCZWdpbiksIGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24pKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LmNvbGRQYXRoQmVnaW4gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGNhbGxSZXR1cm5Mb2NhdGlvbikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBQdXRCeUlkOgotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW5Mb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihob3RQYXRoQmVnaW4pOwotICAgICAgICBpbmZvLnBh
dGNoLmJhc2VsaW5lLnUucHV0LnN0cnVjdHVyZVRvQ29tcGFyZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwdXRTdHJ1Y3R1cmVUb0NvbXBhcmUpKTsKLSAgICAgICAgaW5mby5wYXRjaC5i
YXNlbGluZS51LnB1dC5wcm9wZXJ0eVN0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVs
dGFDaGVja0ltbVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZVRvQ29tcGFyZSksIGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RD
aGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVDaGVjaykpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50
TGFiZWwpKTsKKyNlbHNlCisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9h
ZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50
TGFiZWwyKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExh
YmVsMSkpOworI2VuZGlmCisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29sZFBhdGhCZWdpbikpOworICAg
ICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0
b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3BlcnR5U3RvcmFn
ZUxvYWQpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5l
LnUucHV0LmRpc3BsYWNlbWVudExhYmVsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1
dERpc3BsYWNlbWVudExhYmVsKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDApOworICAgICAgICB1c2VkUmVnaXN0ZXJzLnNl
dChHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5w
YXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CiAjZWxzZQotICAgICAgICBpbmZvLnBhdGNoLmJhc2Vs
aW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51
LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDIgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0
RGlzcGxhY2VtZW50TGFiZWwyKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIgPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgdXNlZFJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDApOworICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChH
UFJJbmZvOjpyZWdUMik7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1Qz
KTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhpbmZvLnBhdGNoLmRmZy51c2VkUmVn
aXN0ZXJzKTsKICNlbmRpZgorICAgICAgICBpbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVk
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhv
dFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBnZXRTdHJ1
Y3R1cmVUb0NvbXBhcmU7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGdl
dFN0cnVjdHVyZUNoZWNrOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0
cnVjdHVyZVRvQ29tcGFyZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
c3RydWN0dXJlQ2hlY2s7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsOwpAQCAt
MTY0LDkgKzE2NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDE7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsMjsKICNlbmRpZgot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZ2V0UHV0UmVzdWx0OwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZ2V0Q29sZFBhdGhCZWdpbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBwdXRTdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBh
dGhCZWdpbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsMzIgcHV0RGlzcGxhY2VtZW50TGFiZWw7CiAjZWxzZQpAQCAtMTkzLDEyICsxOTIsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
Q29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDEsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDIsCiAjZW5kaWYKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBwdXRSZXN1bHQpCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZG9uZSkKICAgICAgICAgICAgIDogbV90eXBlKEdldEJ5SWQpCiAgICAgICAg
ICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgaG90UGF0
aEJlZ2luKGhvdFBhdGhCZWdpbikKLSAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlVG9Db21wYXJl
KHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAgICAgICwgZ2V0U3RydWN0dXJlQ2hlY2soc3Ry
dWN0dXJlQ2hlY2spCisgICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVU
b0NvbXBhcmUpCisgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQog
ICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwoZGlz
cGxhY2VtZW50TGFiZWwpCkBAIC0yMDYsNyArMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEpCiAgICAg
ICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIpCiAjZW5k
aWYKLSAgICAgICAgICAgICwgZ2V0UHV0UmVzdWx0KHB1dFJlc3VsdCkKKyAgICAgICAgICAgICwg
ZG9uZShkb25lKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMjI0LDggKzIyMyw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgOiBtX3R5cGUoUHV0QnlJZCkKICAgICAgICAgICAg
ICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAgICAgLCBob3RQYXRoQmVn
aW4oaG90UGF0aEJlZ2luKQorICAgICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0
dXJlVG9Db21wYXJlKQogICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5
U3RvcmFnZUxvYWQpCi0gICAgICAgICAgICAsIHB1dFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1
cmVUb0NvbXBhcmUpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICwgcHV0RGlzcGxh
Y2VtZW50TGFiZWwoZGlzcGxhY2VtZW50TGFiZWwpCiAjZWxzZQpAQCAtMjM1LDE2ICsyMzQsNDEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
c2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YkdldEJ5SWRfVCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGNvbGRQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgICAgIFByb3Bl
cnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWRf
VCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3Bs
YWNlbWVudExhYmVsLAorI2Vsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwyLAorI2VuZGlmCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZG9uZSkKKyAgICAgICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCisgICAg
ICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgc3Ry
dWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKKyAgICAgICAgICAgICwgc3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCisgICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFnZUxv
YWQocHJvcGVydHlTdG9yYWdlTG9hZCkKKyAgICAgICAgICAgICwgZG9uZShkb25lKQorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNl
bWVudExhYmVsKQorI2Vsc2UKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwxKGRp
c3BsYWNlbWVudExhYmVsMSkKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwyKGRp
c3BsYWNlbWVudExhYmVsMikKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdpbiwg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBHZXRCeUlkKTsKICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNh
bGw7Ci0gICAgICAgICAgICBnZXRDb2xkUGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKKyAgICAg
ICAgICAgIHRoaXMtPmNvbGRQYXRoQmVnaW4gPSBjb2xkUGF0aEJlZ2luOwogICAgICAgICB9CiAK
LSAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZF9ULCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09
IFB1dEJ5SWQpOwogICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsKICAgICAg
ICAgfQogCkBAIC04ODIsNiArOTA2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3Rl
cklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9w
ZXJhdGlvbl9FSkosIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VPSnNzLCBSZWdpc3RlcklE
LCBSZWdpc3RlcklEKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0ksIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQsIFN0cmluZ0ltcGwqKTsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSwgUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgU3RyaW5nSW1wbCopOworI2VuZGlmCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihKX0pJVE9wZXJhdGlvbl9FKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKFZfSklUT3BlcmF0aW9uX0VD
YiwgQ29kZUJsb2NrKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihaX0pJVE9wZXJhdGlvbl9FKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTczNDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQ1LDYgKzM0NSwxMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKIH0KIAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxVGFn
LCBSZWdpc3RlcklEIHJlZ09wMVBheWxvYWQsIFJlZ2lzdGVySUQgcmVnT3AyLCBTdHJpbmdJbXBs
KiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVN
TVlfQVJHIHJlZ09wMVBheWxvYWQsIHJlZ09wMVRhZywgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVp
ZCkpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
Cit9CisKICN1bmRlZiBFQUJJXzMyQklUX0RVTU1ZX0FSRwogI3VuZGVmIFNINF8zMkJJVF9EVU1N
WV9BUkcKIApAQCAtMzU2LDYgKzM2MiwxMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBvcGVy
YXRpb24sIFJlZ2lzdGVySUQgcmVnT3AxLCBSZWdpc3RlcklEIHJlZ09wMiwgU3RyaW5nSW1wbCog
dWlkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShyZWdPcDEsIHJlZ09wMiwg
VHJ1c3RlZEltbVB0cih1aWQpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogQUxX
QVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJlZywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRT
bG93Q2FzZShpbnQgZHN0CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0VfRk9SX1BVVChz
ZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSwgZHN0KTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgbG9j
YXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5m
b3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHViR2V0QnlJ
ZCwgY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNTQ4LDQyICs1NDgsNjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgCi0gICAgQkVHSU5fVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwotICAgIAotICAgIExhYmVsIGhvdFBhdGhC
ZWdpbih0aGlzKTsKLSAgICAKLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93
aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBp
dCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBh
cmU7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRT
dHJ1Y3R1cmUpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgIE5vdEVxdWFsLEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsCisgICAgICAgIFRy
dXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKICAg
ICAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVy
dGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEgPSBzdG9yZVB0cldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDIsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERl
ZmF1bHRPZmZzZXQpKTsgLy8gcGF5bG9hZAotICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExh
YmVsMiA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywgQWRkcmVzcyhyZWdU
MSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAvLyB0YWcKKyAgICBhZGRTbG93Q2FzZShz
dHJ1Y3R1cmVDaGVjayk7CiAgICAgCi0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2Vx
dWVuY2VQdXRCeUlkKTsKLQogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdU
MSwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2Rl
T2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvcGVydHlTdG9yYWdl
TG9hZCwgZGlzcGxhY2VtZW50TGFiZWwxLCBkaXNwbGFjZW1lbnRMYWJlbDIpKTsKKyAgICBDb252
ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGli
bGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QxKTsKKyAgICAKKyAgICAvLyBQYXlsb2FkLgorICAgIERhdGFMYWJlbDMyIHN0b3JlV2l0aFBh
dGNoMSA9CisgICAgICAgIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QyLCBBZGRy
ZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CisgICAgLy8gVGFnLgorICAg
IERhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoMiA9CisgICAgICAgIHN0b3JlMzJXaXRoQWRkcmVz
c09mZnNldFBhdGNoKHJlZ1QzLCBBZGRyZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zm
c2V0KSk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAgICAgIFByb3BlcnR5U3R1YkNv
bXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNv
ZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdpdGhQYXRjaDEsIHN0b3JlV2l0aFBhdGNoMiwg
ZG9uZSkpOworICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlk
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgaWRlbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlv
bls4XS51Lm9wZXJhbmQ7CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
KTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3QgOiBjdGlfb3BfcHV0X2J5
X2lkKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tUHRyKCYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnQpKSkp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QzLCByZWdUMik7IAotICAgIENhbGwgY2Fs
bCA9IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAg
IAorICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBpZiAobV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChkaXJlY3QpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChkaXJlY3QpCisgICAg
ICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHJlZ1QzLCByZWdUMiwgcmVnVDAsIGlkZW50
LT5pbXBsKCkpOworCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlz
IHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgotICAgIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgr
K10uc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIGNhbGwpOworICAgIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgr
K10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAvLyBDb21waWxlIGEg
c3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBi
YXNlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsMTEgKzU1MSwxMSBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgRGF0
YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCBy
ZWdUMCk7CiAKLSAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CisgICAgTGFiZWwgZG9uZSh0aGlz
KTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBh
dGgpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVy
dHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZz
ZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywgcHJv
cGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwsIHB1dFJlc3VsdCkpOworICAgIG1f
cHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0
aW9uSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRoQmVn
aW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxv
YWQsIGRpc3BsYWNlbWVudExhYmVsLCBkb25lKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzCiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VR
VUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOwogCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0
aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9y
bWF0aW9uLgotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQs
IGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTYwNywyMiArNjA3LDI3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBj
YXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUg
U3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOwogCi0gICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShz
ZXF1ZW5jZVB1dEJ5SWQpOwotCi0gICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwotCi0gICAg
Ly8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBwbGFudHMg
YSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4K
ICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKLQotICAgIENv
bnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsID0gc3RvcmU2NFdpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQp
KTsKLQotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7Ci0K
KyAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKAorICAgICAgICBOb3RFcXVhbCxBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgCisgICAgYWRkU2xv
d0Nhc2Uoc3RydWN0dXJlQ2hlY2spOworICAgIAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAs
IHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlk
LCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgcHJv
cGVydHlTdG9yYWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwpKTsKKyAgICBDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAg
ICAKKyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9CisgICAgICAgIHN0b3JlNjRXaXRo
QWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZh
dWx0T2Zmc2V0KSk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAgICAgIFByb3BlcnR5
U3R1YkNvbXBpbGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1f
Ynl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdpdGhQYXRjaCwgZG9uZSkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MzQs
MTUgKzYzOSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAg
ICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0
aV9vcF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQocmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIoaWRlbnQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgbW92ZShy
ZWdUMCwgbm9uQXJnR1BSMSk7Ci0gICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbCgpOworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRUpD
SSBvcHRpbWl6ZWRDYWxsOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsK
KyAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgfQorICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVk
Q2FsbCwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBs
b2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBp
bmZvcm1hdGlvbi4KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhQcm9wZXJ0eVN0dWJQdXRC
eUlkLCBjYWxsKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogLy8gQ29tcGlsZSBhIHN0b3JlIGludG8gYW4gb2JqZWN0J3MgcHJvcGVydHkg
c3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgdGhlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214124</attachid>
            <date>2013-10-13 20:52:39 -0700</date>
            <delta_ts>2013-10-13 21:16:30 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86906</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Mzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTEwLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIHNob3VsZCB1c2UgdGhlIERGRydzIFB1dEJ5SWQgSUMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjcwNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW9zdGx5IG5vIGJp
ZyBkZWFsLCBqdXN0IHJlbW92aW5nIHRoZSBvbGQgQmFzZWxpbmUgSklUJ3MgcHV0X2J5X2lkIElD
IHN1cHBvcnQgYW5kIGZvcmNpbmcKKyAgICAgICAgdGhhdCBKSVQgdG8gdXNlIHRoZSBERkcncyAo
aS5lLiBKSVRPcGVyYXRpb25zKSBQdXRCeUlkIElDLgorICAgICAgICAKKyAgICAgICAgVGhlIG9u
bHkgY29tcGxpY2F0ZWQgcGFydCB3YXMgdGhhdCB0aGUgUHV0QnlJZCBvcGVyYXRpb25zIGFzc3Vt
ZWQgdGhhdCB3ZSBmaXJzdCBkaWQgYQorICAgICAgICBjZWxsIHNwZWN1bGF0aW9uLCB3aGljaCB0
aGUgYmFzZWxpbmUgSklUIG9idmlvdXNseSB3b24ndCBkby4gU28gSSBjaGFuZ2VkIGFsbCBvZiB0
aG9zZQorICAgICAgICBzbG93IHBhdGhzIHRvIGRlYWwgd2l0aCBFbmNvZGVkSlNWYWx1ZSdzLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpyZXNldFN0dWJJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQp
OgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21w
aWxhdGlvbkluZm86OmNvcHlUb1N0dWJJbmZvKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbzo6UHJvcGVydHlTdHViQ29tcGls
YXRpb25JbmZvKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpz
bG93Q2FzZUluZm8pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbldyYXBwZXJz
Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlR2V0QnlJZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQ
dXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorCiAyMDEzLTEw
LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIE9TUiBl
eGl0IHNob3VsZCBwZXJmb3JtIHplcm8gZXh0ZW5zaW9uIG9uIHZhbHVlcyBzbWFsbGVyIHRoYW4g
NjQtYml0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzODIsNyArMjM4Miw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbChSZXBhdGMKICAgICAgICAgICAgIEpJVDo6cmVz
ZXRQYXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkp
OwotICAgICAgICAgICAgSklUOjpyZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1
YkluZm8pOworICAgICAgICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw4IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICB9CiAgICAgICAgIAog
ICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHBvbHltb3Jw
aGljIFB1dEJ5SWQuIFdlIHByb2JhYmx5IGhhdmUgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MKKyAg
ICAgICAgLy8gd2UgY291bGQgZG8gYWJvdXQgaXQuCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwogICAgIH0KICNlbHNl
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1NCw3ICsyNTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVP
CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAg
ICAKLSAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVy
YXRpb25fRUpKSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVj
dCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsNyArMTM2Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkkgb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVp
ZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwpAQCAtMTYyMCw5ICsxNjIwLDkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFy
ZzFUYWcsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1w
bCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxv
YWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFy
ZzNQYXlsb2FkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3
MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00ODksMTMgKzQ4OSwxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlTdHViQ29t
cGlsYXRpCiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsKICAgICBpbmZvLmNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVj
b2RlSW5kZXgpOwogICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0gICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBHZXRCeUlkOiB7CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhC
ZWdpbkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhvdFBhdGhCZWdpbik7Ci0gICAg
ICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldFN0cnVjdHVyZVRvQ29tcGFyZSkpOwotICAgICAgICBp
bmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGdldFN0cnVjdHVyZUNoZWNrKSk7CisgICAgICAgIGluZm8uaG90UGF0aEJl
Z2luID0gaG90UGF0aEJlZ2luTG9jYXRpb247CisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlVG9Db21wYXJlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0
cnVjdHVyZVRvQ29tcGFyZSkpOworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0
cnVjdHVyZUNoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0ciho
b3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNr
KSk7CiAgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQucHJvcGVydHlTdG9yYWdlTG9h
ZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2lu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNw
bGFjZW1lbnRMYWJlbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
aG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1l
bnRMYWJlbCkpOwpAQCAtNTAzLDIwICs1MDMsNDAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFByb3Bl
cnR5U3R1YkNvbXBpbGF0aQogICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3Bs
YWNlbWVudExhYmVsMSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
aG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1l
bnRMYWJlbDEpKTsKICAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1l
bnRMYWJlbDIgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBh
dGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFi
ZWwyKSk7CiAjZW5kaWYKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdp
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0UHV0UmVzdWx0KSk7Ci0gICAgICAg
IGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbiA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldENvbGRQ
YXRoQmVnaW4pLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKSk7Cisg
ICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0ID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51Lmdl
dC5jb2xkUGF0aEJlZ2luID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY29sZFBhdGhCZWdpbiksIGxpbmtCdWZmZXIubG9jYXRp
b25PZihjYWxsUmV0dXJuTG9jYXRpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgUHV0QnlJZDoKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5w
YXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHV0U3RydWN0dXJlVG9Db21wYXJlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2gu
YmFzZWxpbmUudS5wdXQucHJvcGVydHlTdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xv
YWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVu
dExhYmVsKSk7CisjZWxzZQorICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVu
dExhYmVsMikpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRM
YWJlbDEpKTsKKyNlbmRpZgorICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dD
YXNlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNvbGRQYXRoQmVnaW4pKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGRvbmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
dG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3Jh
Z2VMb2FkKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGlu
ZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihw
dXREaXNwbGFjZW1lbnRMYWJlbCkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlR1BSID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5z
ZXQoR1BSSW5mbzo6cmVnVDEpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLmNvcHlJbmZvKGluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOwogI2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5iYXNl
bGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDEgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUu
dS5wdXQuZGlzcGxhY2VtZW50TGFiZWwyID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1
dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlR1BSID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSID0gR1BSSW5mbzo6
cmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIHVzZWRS
ZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQo
R1BSSW5mbzo6cmVnVDIpOworICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdU
Myk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNlZFJl
Z2lzdGVycyk7CiAjZW5kaWYKKyAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hl
ZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDggKzE1NSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBo
b3RQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZ2V0U3Ry
dWN0dXJlVG9Db21wYXJlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBn
ZXRTdHJ1Y3R1cmVDaGVjazsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IHN0cnVjdHVyZUNoZWNrOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDsKQEAg
LTE2NCw5ICsxNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbENvbXBhY3QgZ2V0RGlzcGxhY2VtZW50TGFiZWwxOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDI7CiAjZW5kaWYK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGdldFB1dFJlc3VsdDsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGdldENvbGRQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpEYXRhTGFiZWxQdHIgcHV0U3RydWN0dXJlVG9Db21wYXJlOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQ
YXRoQmVnaW47CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbDMyIHB1dERpc3BsYWNlbWVudExhYmVsOwogI2Vsc2UKQEAgLTE5MywxMiArMTkyLDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwxLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwyLAogI2VuZGlmCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcHV0UmVzdWx0KQorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGRvbmUpCiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAg
ICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGhvdFBh
dGhCZWdpbihob3RQYXRoQmVnaW4pCi0gICAgICAgICAgICAsIGdldFN0cnVjdHVyZVRvQ29tcGFy
ZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCi0gICAgICAgICAgICAsIGdldFN0cnVjdHVyZUNoZWNrKHN0
cnVjdHVyZUNoZWNrKQorICAgICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0dXJl
VG9Db21wYXJlKQorICAgICAgICAgICAgLCBzdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykK
ICAgICAgICAgICAgICwgcHJvcGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsKGRp
c3BsYWNlbWVudExhYmVsKQpAQCAtMjA2LDcgKzIwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgLCBnZXREaXNwbGFjZW1lbnRMYWJlbDEoZGlzcGxhY2VtZW50TGFiZWwxKQogICAg
ICAgICAgICAgLCBnZXREaXNwbGFjZW1lbnRMYWJlbDIoZGlzcGxhY2VtZW50TGFiZWwyKQogI2Vu
ZGlmCi0gICAgICAgICAgICAsIGdldFB1dFJlc3VsdChwdXRSZXN1bHQpCisgICAgICAgICAgICAs
IGRvbmUoZG9uZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTIyNCw4ICsyMjMsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCiAgICAgICAgICAg
ICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgaG90UGF0aEJl
Z2luKGhvdFBhdGhCZWdpbikKKyAgICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0cnVj
dHVyZVRvQ29tcGFyZSkKICAgICAgICAgICAgICwgcHJvcGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0
eVN0b3JhZ2VMb2FkKQotICAgICAgICAgICAgLCBwdXRTdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0
dXJlVG9Db21wYXJlKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAsIHB1dERpc3Bs
YWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQogI2Vsc2UKQEAgLTIzNSwxNiArMjM0LDQx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IHNsb3dDYXNlSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlkX1QsIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBjb2xkUGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgICAgICBQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlk
X1QsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNw
bGFjZW1lbnRMYWJlbCwKKyNlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsMzIgZGlzcGxhY2VtZW50TGFiZWwxLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsMiwKKyNlbmRpZgorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmUpCisgICAgICAgICAgICA6IG1fdHlwZShQdXRCeUlkKQorICAg
ICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIHN0
cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCisgICAgICAgICAgICAsIHN0cnVj
dHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQorICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VM
b2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCisgICAgICAgICAgICAsIGRvbmUoZG9uZSkKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1lbnRMYWJlbChkaXNwbGFj
ZW1lbnRMYWJlbCkKKyNlbHNlCisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMShk
aXNwbGFjZW1lbnRMYWJlbDEpCisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMihk
aXNwbGFjZW1lbnRMYWJlbDIpCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBzbG93Q2FzZUluZm8oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4s
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gR2V0QnlJZCk7CiAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24gPSBj
YWxsOwotICAgICAgICAgICAgZ2V0Q29sZFBhdGhCZWdpbiA9IGNvbGRQYXRoQmVnaW47CisgICAg
ICAgICAgICB0aGlzLT5jb2xkUGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKICAgICAgICAgfQog
Ci0gICAgICAgIHZvaWQgc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWRfVCwgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCkKKyAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9
PSBQdXRCeUlkKTsKICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CiAgICAg
ICAgIH0KIApAQCAtMzQ0LDEzICszNjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihzdHViSW5mbywgc3RydWN0dXJlLCBjaGFp
biwgY291bnQsIGlkZW50LCBzbG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNhbGxG
cmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvbihWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBq
aXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7
Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5m
bywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVy
bkFkZHJlc3MsIGRpcmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVHZXRCeVZhbChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwpAQCAtMzc5LDkgKzM5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgcmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVj
dHVyZVN0dWJJbmZvKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hQdXRCeUlkKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOwogICAgICAgICBzdGF0aWMgdm9pZCBw
YXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJl
KiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJu
QWRkcmVzc1B0ciwgYm9vbCBkaXJlY3QpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
YXRjaEdldEFycmF5TGVuZ3RoKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewpAQCAtNDEzLDcgKzQyOCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGlu
dCwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGlu
dCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291
bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwotICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qLCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVj
dHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBkaXJlY3QpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwpAQCAtNDQ3LDgg
KzQ2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycygpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0UHV0QnlJ
ZChTdHJ1Y3R1cmVTdHViSW5mbyopOwotCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7
CiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcExpc3QpOwogICAgICAgICB2b2lkIGFkZFNs
b3dDYXNlKCk7CkBAIC01ODYsOSArNTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VHZXRCeUlkU2xvd0Nhc2VJbnN0cnVjdGlvblNwYWNlID0gODA7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2VDb25zdGFudFNwYWNlID0gNDsKLSAgICAg
ICAgLy8gc2VxdWVuY2VQdXRCeUlkCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQ
dXRCeUlkSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNl
cXVlbmNlUHV0QnlJZENvbnN0YW50U3BhY2UgPSA0OwogI2VsaWYgQ1BVKFNINCkKICAgICAgICAg
Ly8gc2VxdWVuY2VPcENhbGwKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2Fs
bEluc3RydWN0aW9uU3BhY2UgPSAxMjsKQEAgLTU5OSw5ICs2MDgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAzODsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3Bh
Y2UgPSA0OwotICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CiAjZW5kaWYKIAog
I2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTg4Miw2ICs4ODgsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRP
cGVyYXRpb25fRUosIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRU9Kc3MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
RUpKSSwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgU3RyaW5nSW1wbCopOworI2Vsc2UKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJ
LCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBTdHJpbmdJ
bXBsKik7CisjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKEpfSklUT3BlcmF0aW9uX0UpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiLCBDb2RlQmxvY2sqKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKFpfSklUT3BlcmF0aW9uX0UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDEyIEBAIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJ
IG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDFUYWcsIFJlZ2lzdGVySUQgcmVnT3AxUGF5bG9h
ZCwgUmVnaXN0ZXJJRCByZWdPcDJUYWcsIHJlZ09wMlBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcg
cmVnT3AxUGF5bG9hZCwgcmVnT3AxVGFnLCByZWdPcDJQYXlsb2FkLCByZWdPcDJUYWcsIFRydXN0
ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKK30KKwogI3VuZGVmIEVBQklfMzJCSVRfRFVNTVlfQVJHCiAjdW5kZWYgU0g0
XzMyQklUX0RVTU1ZX0FSRwogCkBAIC0zNTYsNiArMzYyLDEyIEBAIEFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwogfQogCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FSkpJIG9wZXJhdGlvbiwgUmVnaXN0ZXJJRCByZWdPcDEsIFJlZ2lzdGVySUQgcmVnT3AyLCBT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHJlZ09w
MSwgcmVnT3AyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmNoZWNrU3RydWN0dXJlKFJlZ2lz
dGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgJKHJldmlzaW9uIDE1NzM0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQogI2RlZmluZSBf
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCiAjZGVmaW5l
IF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZp
bmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24p
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCisjZGVm
aW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1bmN0aW9u
KSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQogCiAj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCiAKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDgpCiAjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDE2KQogI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCAyMCkKLSNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMjQpCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkpJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDI4KQogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQog
CkBAIC0xMTcsMTAgKzExNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIEFzIGEgcmVzdWx0LCBy
ZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhl
IGZvbGxvd2luZyBjYXNlcy4KICNpZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJN
KQogI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwg
W3NwLCAjNF0iCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kg
InN0ciBsciwgW3NwLCAjOF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERS
RVNTX0VKSkkgInN0ciBsciwgW3NwLCAjMTJdIgogI2Vsc2UKICNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNU
UlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgorI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkpJICJzdHIgbHIsIFtzcCwg
IzhdIgogI2VuZGlmCiAKICNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXApAQCAtMTM2LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAg
ICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTE0NSw3ICsxNDUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAiLnRodW1iIiAiXG4iIFwKICAgICAiLnRodW1iX2Z1bmMg
IiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKICAgICBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERS
RVNTX0VKQ0kgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSkkgIlxuIiBcCiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKQEAgLTE4MCwxMCArMTgwLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQg
YSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzLgogI2lmIENP
TVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCiAjZGVmaW5lIElOU1RSVUNUSU9OX1NU
T1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIKLSNkZWZpbmUgSU5TVFJV
Q1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM4XSIKKyNkZWZp
bmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpKSSAic3RyIGxyLCBbc3AsICMx
Ml0iCiAjZWxzZQogI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkg
InN0ciBsciwgW3NwLCAjMF0iCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERS
RVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSkkgInN0ciBsciwgW3NwLCAjOF0iCiAjZW5kaWYKIAogI2RlZmluZSBf
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCkBA
IC0xOTcsMTQgKzE5NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9S
RUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAot
I2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikgXAorI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpKSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKICAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCiAgICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAogICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RP
UkVfUkVUVVJOX0FERFJFU1NfRUpKSSAiXG4iIFwKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIApAQCAtMjQ2
LDE0ICsyNDYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZp
bmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24p
IFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkko
ZnVuY3Rpb24pIFwKICAgICBhc20oIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKICAgICBISURFX1NZTUJPTChmdW5jdGlv
bikgIlxuIiBcCiAgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAogICAgIExP
QURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAg
ICJzdyAkcmEsIDI0KCRzcCkiICJcbiIgXAorICAgICAgICAic3cgJHJhLCAyOCgkc3ApIiAiXG4i
IFwKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCiAgICAgKTsKIApAQCAtMzA1LDcgKzMwNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICk7CiAKICNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0jZGVmaW5lIF9WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQor
I2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShmdW5j
dGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4LCBT
SDRfU0NSQVRDSF9SRUdJU1RFUikKIAogI2VsaWYgQ09NUElMRVIoTVNWQykKIApAQCAtMzIxLDgg
KzMyMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVz
cyhleGVjLCB2YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNz
T2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQogCi0jZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgdm9pZCBKSVRfT1BFUkFUSU9O
IGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIEpTQ2VsbCog
Y2VsbCwgU3RyaW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlvbiMjV2l0aFJldHVybkFk
ZHJlc3MoZXhlYywgdmFsdWUsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQq
KilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkoZnVuY3Rpb24pIFwKKyAgICB2b2lkIEpJVF9P
UEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwg
RW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1
bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCB2YWx1ZSwgYmFzZVZhbHVlLCBzdHJpbmcs
IFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9
CiAKICNlbmRpZgogCkBAIC0zNDIsOSArMzQyLDkgQEAgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTXwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwq
LCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAog
X0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikKIAot
I2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0
aW9uKSBcCi12b2lkIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRk
cmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLV9WX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQorI2RlZmluZSBWX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1bmN0aW9uKSBcCit2b2lk
IEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQ
dHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitfVl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShmdW5jdGlvbikKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDUwICsyMjMsNDggQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbEdldHRlcihleGVjLCBiYXNlLCBnZXR0ZXJTZXR0ZXIpKTsKIH0KIAotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBT
dHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2Rl
QmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0
KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7
CisgICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXQoZXhlYywgaWRlbnQsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChi
YXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwor
ICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0KGV4ZWMsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgp
KTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgYXNPYmplY3QoSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBl
eGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlz
T2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBhc09iamVjdChK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLVZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Skkob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMjc2LDcgKzI3NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZShiYXNlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQs
IHZhbHVlLCBzbG90KTsKQEAgLTI5MCw4ICsyODgsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljCiAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwogfQogCi1W
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkpJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTMwMSw3ICsyOTksNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZh
bHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgCiAgICAgYmFz
ZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwpAQCAtMzE1LDggKzMxMyw4IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICAgICAgc3R1Yklu
Zm8uc2VlbiA9IHRydWU7CiB9CiAKLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkob3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMzI2LDIyICszMjQsMjIgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7CiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChi
YXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFz
ZU9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAg
CiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8uc2Vl
bikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlT2JqZWN0LCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CiAgICAgZWxzZQogICAgICAgICBzdHViSW5m
by5zZWVuID0gdHJ1ZTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQorVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0zNTEsMjIgKzM0OSwyMiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNP
YmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2Up
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwogICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CisgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwg
c2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAo
c3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBi
YXNlT2JqZWN0LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CiAgICAgZWxzZQogICAg
ICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KTsKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0
cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtMzc2LDcgKzM3NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWMKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRD
b250ZXh0KCkpOwogICAgIAogICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBz
bG90KTsKQEAgLTM4Nyw4ICszODUsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljCiAgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsK
LXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMzk4LDcgKzM5Niw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZShiYXNlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICAKICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlk
ZW50LCB2YWx1ZSwgc2xvdCk7CkBAIC00MDksOCArNDA3LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWROb25TdAogICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZh
bHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CiB9CiAKLVZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdCk7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpKSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQyMCwxOSAr
NDE4LDE5IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKTsKICAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBl
eGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgCi0gICAgQVNTRVJUKGJh
c2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVj
dCwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwogfQogCi1WX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RCdWlsZExpc3QpOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSkkob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlz
dCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00
NDIsMTUgKzQ0MCwxNSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
CiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAotICAgIEFTU0VS
VChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZU9iamVjdCAtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBl
ICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwg
c2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNl
T2JqZWN0LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcg
KzEyMiw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBp
bnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUND
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRUpKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwg
dm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE5OCwxOCArMTk4LDE4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlKTsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1
c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwot
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNo
UHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyAr
NTMyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IGRzdAogICAgIEVO
RF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2Us
IGRzdCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlz
IHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgotICAgIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgr
K10uc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTU0OCw0MiArNTQ4LDYyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJ
bnN0cnVjdGlvbioKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOwogICAgIAotICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQ
dXRCeUlkKTsKLSAgICAKLSAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7Ci0gICAgCi0gICAg
Ly8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBwbGFudHMg
YSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4K
ICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKKyAgICBQYXRj
aGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAor
ICAgICAgICBOb3RFcXVhbCxBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgRGF0YUxhYmVs
MzIgZGlzcGxhY2VtZW50TGFiZWwxID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHBheWxv
YWQKLSAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDIgPSBzdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gocmVnVDMsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQpKTsgLy8gdGFnCisgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogICAgIAot
ICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7Ci0KICAgICBl
bWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMiwgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJ
bW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAKLSAgICBtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbklu
Zm8oUHJvcGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVs
MSwgZGlzcGxhY2VtZW50TGFiZWwyKSk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVy
dHlTdG9yYWdlTG9hZCA9CisgICAgICAgIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgCisgICAgLy8gUGF5
bG9hZC4KKyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaDEgPQorICAgICAgICBzdG9yZTMy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMiwgQWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlk
RGVmYXVsdE9mZnNldCkpOworICAgIC8vIFRhZy4KKyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQ
YXRjaDIgPQorICAgICAgICBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywgQWRk
cmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIAorICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8uYXBwZW5kKAorICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCisgICAgICAg
ICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0Nv
bXBhcmUsIHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwg
c3RvcmVXaXRoUGF0Y2gxLCBzdG9yZVdpdGhQYXRjaDIsIGRvbmUpKTsKKyAgICBCRUdJTl9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGlkZW50ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwog
ICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCiAgICAg
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogICAgIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9v
cF9wdXRfYnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50KSkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMywgcmVnVDIpOyAKLSAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7Cisg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKKyAgICBWX0pJVE9wZXJhdGlvbl9F
SkpJIG9wdGltaXplZENhbGw7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkg
eworICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICB9CisgICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6
ZWRDYWxsLCByZWdUMywgcmVnVDIsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisKICAg
ICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRv
IHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8o
UHJvcGVydHlTdHViUHV0QnlJZCwgY2FsbCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8o
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIC8vIENvbXBpbGUgYSBzdG9yZSBpbnRvIGFuIG9i
amVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCkBAIC02MjEsMTEx
ICs2NDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAg
bG9hZDMyKEFkZHJlc3MocmVzdWx0VGFnLCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZyk7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKLXsKLSAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3N1
bWVzIHRoYXQgcmVnVDAgY29udGFpbnMgdGhlIGJhc2VQYXlsb2FkIGFuZCByZWdUMSBjb250YWlu
cyB0aGUgYmFzZVRhZy4gUmVzdG9yZSB0aGVtIGZyb20gdGhlIHN0YWNrLgotI2lmIENQVShNSVBT
KSB8fCBDUFUoU0g0KSB8fCBDUFUoQVJNKQotICAgIC8vIEZvciBNSVBTLCB3ZSBkb24ndCBhZGQg
c2l6ZW9mKHZvaWQqKSB0byB0aGUgc3RhY2sgb2Zmc2V0LgotICAgIGxvYWQzMihBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1sw
XSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7
Ci0gICAgLy8gRm9yIE1JUFMsIHdlIGRvbid0IGFkZCBzaXplb2Yodm9pZCopIHRvIHRoZSBzdGFj
ayBvZmZzZXQuCi0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVD
VF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotI2Vsc2UKLSAgICBsb2FkMzIoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3Nb
MF0pICsgc2l6ZW9mKHZvaWQqKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMF0pICsgc2l6ZW9mKHZvaWQq
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotI2Vu
ZGlmCi0KLSAgICBKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihvbGRTdHJ1
Y3R1cmUpKSk7Ci0gICAgdGVzdFByb3RvdHlwZShvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvKTsKLSAgICAKLSAgICBpZiAoIWRpcmVjdCkgewot
ICAgICAgICAvLyBWZXJpZnkgdGhhdCBub3RoaW5nIGluIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFz
IGEgc2V0dGVyIGZvciB0aGlzIHByb3BlcnR5LiAKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpCi0gICAgICAgICAgICB0
ZXN0UHJvdG90eXBlKCgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzLCBzdHVi
SW5mbyk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2Ugc3VjY2VlZCBpbiBhbGwgb2Ygb3VyIGNoZWNr
cywgYW5kIHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAv
LyBkZWNyZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVyLgotI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgIT0gREZH
OjpDYW5ub3RDb21waWxlKSB7Ci0gICAgICAgIHN1YjMyKAotICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKDEpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCktPm1fY291bnRlcikpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIC8vIFJlYWxsb2Nh
dGUgcHJvcGVydHkgc3RvcmFnZSBpZiBuZWVkZWQuCi0gICAgQ2FsbCBjYWxsVGFyZ2V0OwotICAg
IGJvb2wgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYyA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKHdp
bGxOZWVkU3RvcmFnZVJlYWxsb2MpIHsKLSAgICAgICAgLy8gVGhpcyB0cmFtcG9saW5lIHdhcyBj
YWxsZWQgdG8gbGlrZSBhIEpJVCBzdHViOyBiZWZvcmUgd2UgY2FuIGNhbiBjYWxsIGFnYWluIHdl
IG5lZWQgdG8KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIHRoZSBz
dGFjaywgdG8gcHJldmVudCB0aGUgc3RhY2sgZnJvbSBiZWNvbWluZyBtaXNhbGlnbmVkLgotICAg
ICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgICAgICAKLSAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0
aW9uX3JlYWxsb2MpOwotICAgICAgICBzdHViQ2FsbC5za2lwQXJndW1lbnQoKTsgLy8gYmFzZQot
ICAgICAgICBzdHViQ2FsbC5za2lwQXJndW1lbnQoKTsgLy8gaWRlbnQKLSAgICAgICAgc3R1YkNh
bGwuc2tpcEFyZ3VtZW50KCk7IC8vIHZhbHVlCi0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW0zMihvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpKTsKLSAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUpKTsKLSAg
ICAgICAgc3R1YkNhbGwuY2FsbChyZWdUMCk7Ci0KLSAgICAgICAgcmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotCi0jaWYgQ1BVKE1JUFMpIHx8IENQVShTSDQpIHx8IENQ
VShBUk0pCi0gICAgICAgIC8vIEZvciBNSVBTLCB3ZSBkb24ndCBhZGQgc2l6ZW9mKHZvaWQqKSB0
byB0aGUgc3RhY2sgb2Zmc2V0LgotICAgICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgICAgICAv
LyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNl
dC4KLSAgICAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotI2Vsc2UKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdz
WzBdKSArIHNpemVvZih2b2lkKikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1swXSkgKyBzaXplb2Yo
dm9pZCopICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVn
VDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcyk7Ci0KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSks
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSNpZiBDUFUoTUlQ
UykgfHwgQ1BVKFNINCkgfHwgQ1BVKEFSTSkKLSAgICAvLyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRk
IHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KLSAgICBsb2FkMzIoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3Nb
Ml0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDMp
OwotICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QyKTsKLSNlbHNlCi0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzJdKSArIHNp
emVvZih2b2lkKikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVD
VF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzJdKSArIHNpemVvZih2b2lkKikgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKLSNlbmRpZgotICAg
IGNvbXBpbGVQdXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QyLCByZWdUMywgY2FjaGVkT2Zmc2V0
KTsKLSAgICAKLSAgICByZXQoKTsKLSAgICAKLSAgICBBU1NFUlQoIWZhaWx1cmVDYXNlcy5lbXB0
eSgpKTsKLSAgICBmYWlsdXJlQ2FzZXMubGluayh0aGlzKTsKLSAgICByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1
cnNpdmVDYWxsKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhp
cywgbV9jb2RlQmxvY2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGws
IEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwpKTsKLSAgICAKLSAgICBpZiAod2lsbE5lZWRTdG9yYWdlUmVhbGxv
YykgewotICAgICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fcmVhbGxvYykpOwotICAgIH0KLSAgICAKLSAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQg
dHJhbnNpdGlvbiBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAg
ICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9jLAotICAgICAgICBuZXdTdHJ1Y3R1cmUp
OwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0K
IHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTc0MSwyMSArNjU2LDYg
QEAgdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjbwogICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwyKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKGNhY2hlZE9mZnNldCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSk7IC8vIHRhZwogfQogCi12b2lkIEpJVDo6cGF0
Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQotewotICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIAotICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3Rp
X29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rp
bmcgcmlnaHQgbm93LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVj
dF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgCi0gICAgLy8gUGF0
Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiBw
YXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHJ1Y3R1cmUpOwotICAg
IHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5wdXQucHJvcGVydHlTdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KGNhY2hlZE9mZnNl
dCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRh
dGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNl
bWVudExhYmVsMSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKTsgLy8gcGF5bG9h
ZAotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFM
YWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVu
dExhYmVsMiksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpOyAvLyB0YWcKLX0KLQogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCiB7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJm1f
Y29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKQEAgLTE0ODYsMTcgKzEzODYs
NiBAQCB2b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlCiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKSwgc3R1YkluZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuY29sZFBhdGhCZWdpbikpOwogfQogCi12b2lkIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQot
ewotICAgIGlmIChpc0RpcmVjdFB1dEJ5SWQoc3R1YkluZm8pKQotICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lk
X2RpcmVjdCk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQuc3RydWN0dXJlVG9Db21wYXJlKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMSksIDApOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMiksIDAp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSwxMSArNTUxLDExIEBAIHZv
aWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBEYXRhTGFi
ZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zm
c2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1Qw
KTsKIAotICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKKyAgICBMYWJlbCBkb25lKHRoaXMpOwog
CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkSG90UGF0aCk7
CiAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0
dWJDb21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwg
aG90UGF0aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLCBwcm9wZXJ0
eVN0b3JhZ2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCwgcHV0UmVzdWx0KSk7CisgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25J
bmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwg
c3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywgcHJvcGVydHlTdG9yYWdlTG9hZCwg
ZGlzcGxhY2VtZW50TGFiZWwsIGRvbmUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgSklUOjpjb21w
aWxlR2V0QnlJZFNsb3dDYXNlKGludCByZXMKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5D
RShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24g
b2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRp
b24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjA3LDIyICs2MDcsMjcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2Ug
aWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1
Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7CiAKLSAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVl
bmNlUHV0QnlJZCk7Ci0KLSAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7Ci0KLSAgICAvLyBJ
dCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMy
Yml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgogICAg
IERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwotCi0gICAgQ29udmVy
dGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwot
Ci0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKLQorICAg
IFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goCisgICAgICAgIE5vdEVxdWFsLEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsCisgICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAKKyAgICBhZGRTbG93Q2Fz
ZShzdHJ1Y3R1cmVDaGVjayk7CisgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVn
VDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5h
cHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1f
Ynl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBwcm9wZXJ0
eVN0b3JhZ2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCkpOworICAgIENvbnZlcnRpYmxlTG9hZExh
YmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQorICAgICAgICBjb252ZXJ0aWJsZUxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIAor
ICAgIERhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0KKyAgICAgICAgc3RvcmU2NFdpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQpKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKKyAgICAgICAgUHJvcGVydHlTdHVi
Q29tcGlsYXRpb25JbmZvKAorICAgICAgICAgICAgUHJvcGVydHlTdHViUHV0QnlJZCwgbV9ieXRl
Y29kZU9mZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywKKyAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZUxvYWQsIHN0b3JlV2l0aFBhdGNoLCBkb25lKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYzNCwxNSAr
NjM5LDI1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgZGlyZWN0ID8gY3RpX29w
X3B1dF9ieV9pZF9kaXJlY3QgOiBjdGlfb3BfcHV0X2J5X2lkKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChyZWdUMCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihp
ZGVudCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICBtb3ZlKHJlZ1Qw
LCBub25BcmdHUFIxKTsKLSAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKKyAgICAKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkpJIG9w
dGltaXplZENhbGw7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0
aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICB9CisgICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxs
LCByZWdUMSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0
aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9y
bWF0aW9uLgotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQs
IGNhbGwpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCiAvLyBDb21waWxlIGEgc3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9y
YWdlLiAgTWF5IG92ZXJ3cml0ZSB0aGUKQEAgLTY4MSw5MyArNjk2LDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwg
b2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwgcmVzdWx0KTsKIH0KIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRy
YW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNl
dCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IGJvb2wgZGlyZWN0KQotewotICAgIG1vdmUobm9uQXJnR1BSMSwgcmVnVDApOwotCi0gICAgSnVt
cExpc3QgZmFpbHVyZUNhc2VzOwotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhl
IHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RK
U0NlbGwocmVnVDApKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIob2xkU3RydWN0dXJlKSkpOwotICAgIAotICAgIHRlc3RQcm90b3R5cGUob2xkU3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzLCBzdHViSW5mbyk7Ci0gICAgCi0gICAg
QVNTRVJUKG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgfHwgb2xkU3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gY2hhaW4t
PmhlYWQoKS0+Z2V0KCkpOwotCi0gICAgLy8gZWN4ID0gYmFzZU9iamVjdC0+bV9zdHJ1Y3R1cmUK
LSAgICBpZiAoIWRpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IGNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCgq
aXQpLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSB8fCAoKml0KS0+c3RvcmVkUHJvdG90eXBl
KCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IGl0WzFdLmdldCgpKTsKLSAgICAgICAgICAgIHRl
c3RQcm90b3R5cGUoKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBmYWlsdXJlQ2FzZXMsIHN0dWJJ
bmZvKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlIHN1Y2NlZWQgaW4gYWxsIG9m
IG91ciBjaGVja3MsIGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFibGUsIHRoZW4gbWFrZSBzdXJl
IHdlCi0gICAgLy8gZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291bnRlci4KLSNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWxTdGF0
ZSgpICE9IERGRzo6Q2Fubm90Q29tcGlsZSkgewotICAgICAgICBzdWIzMigKLSAgICAgICAgICAg
IFRydXN0ZWRJbW0zMigxKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KHN0dWJJbmZvLT5jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpLT5tX2NvdW50ZXIpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICAv
LyBlbWl0IGEgY2FsbCBvbmx5IGlmIHN0b3JhZ2UgcmVhbGxvYyBpcyBuZWVkZWQKLSAgICBib29s
IHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGlmICh3aWxsTmVl
ZFN0b3JhZ2VSZWFsbG9jKSB7Ci0gICAgICAgIC8vIFRoaXMgdHJhbXBvbGluZSB3YXMgY2FsbGVk
IHRvIGxpa2UgYSBKSVQgc3R1YjsgYmVmb3JlIHdlIGNhbiBjYW4gY2FsbCBhZ2FpbiB3ZSBuZWVk
IHRvCi0gICAgICAgIC8vIHJlbW92ZSB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSB0aGUgc3RhY2ss
IHRvIHByZXZlbnQgdGhlIHN0YWNrIGZyb20gYmVjb21pbmcgbWlzYWxpZ25lZC4KLSAgICAgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAKLSAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2Mp
OwotICAgICAgICBzdHViQ2FsbC5za2lwQXJndW1lbnQoKTsgLy8gYmFzZQotICAgICAgICBzdHVi
Q2FsbC5za2lwQXJndW1lbnQoKTsgLy8gaWRlbnQKLSAgICAgICAgc3R1YkNhbGwuc2tpcEFyZ3Vt
ZW50KCk7IC8vIHZhbHVlCi0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0z
MihvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUpKTsKLSAgICAgICAgc3R1YkNh
bGwuY2FsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRKSVRTdHViQXJnKDIsIHJlZ1QxKTsKLQot
ICAgICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgfQot
Ci0gICAgLy8gUGxhbnRpbmcgdGhlIG5ldyBzdHJ1Y3R1cmUgdHJpZ2dlcnMgdGhlIHdyaXRlIGJh
cnJpZXIgc28gd2UgbmVlZAotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgYmFycmllciBoZXJlLgot
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLQotICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IG9sZFN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwotICAgIGNvbXBpbGVQdXREaXJl
Y3RPZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwotCi0gICAgcmV0KCk7Ci0gICAg
Ci0gICAgQVNTRVJUKCFmYWlsdXJlQ2FzZXMuZW1wdHkoKSk7Ci0gICAgZmFpbHVyZUNhc2VzLmxp
bmsodGhpcyk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwot
ICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwotCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOwotCi0gICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9i
eV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwotCi0gICAgaWYgKHdp
bGxOZWVkU3RvcmFnZVJlYWxsb2MpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbHMuc2l6ZSgpID09
IDEpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25Q
dHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAg
IEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgi
QmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAot
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSksCi0gICAgICAgICptX3ZtLAotICAgICAgICBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCi0gICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCi0gICAgICAg
IG5ld1N0cnVjdHVyZSk7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5B
ZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLX0KLQogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAt
NzgyLDIwICs3MTAsNiBAQCB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNv
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFj
ZW1lbnRMYWJlbCksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQp
KTsKIH0KIAotdm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBib29sIGRpcmVjdCkKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBp
biBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBw
cm9iYWJseSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8g
YW55dGhpbmcgaW50ZXJlc3RpbmcgcmlnaHQgbm93LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
Q2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlf
b3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7
Ci0KLSAgICAvLyBQYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9h
ZCBmcm9tLCB0aGVuIHBhdGNoIHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3IuCi0gICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHN0
cnVjdHVyZSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShz
dHViSW5mby0+aG90UGF0aEJlZ2luLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LnB1dC5wcm9wZXJ0eVN0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZz
ZXQoY2FjaGVkT2Zmc2V0KSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5wdXQuZGlzcGxhY2VtZW50TGFiZWwpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
Y2FjaGVkT2Zmc2V0KSk7Ci19Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJy
YXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9ICZtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcyk7CkBAIC0xNDI3LDE2ICsxMzQxLDYgQEAgdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlk
KFJlcGF0Y2hCdWZmZQogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayksIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pKTsKIH0KIAotdm9pZCBK
SVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICBpZiAoaXNEaXJlY3RQdXRCeUlkKHN0dWJJ
bmZvKSkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgY3RpX29wX3B1dF9ieV9pZF9kaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX3B1
dF9ieV9pZCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LnN0
cnVjdHVyZVRvQ29tcGFyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIp
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1l
bnRMYWJlbCksIDApOwotfQotCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1v
ZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKQEAgLTE1MDQsMzEgKzE0MDgsNiBAQCB2
b2lkIEpJVDo6dGVzdFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwCiAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKSwgc3R1YkluZm8sIGZhaWx1cmVDYXNlcywgcmVnVDMpOwogfQogCi1ib29sIEpJ
VDo6aXNEaXJlY3RQdXRCeUlkKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICBz
d2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfZ2VuZXJpYzogewotICAgICAgICB2b2lkKiBvbGRDYWxsID0gTWFjcm9Bc3NlbWJsZXI6OnJl
YWRDYWxsVGFyZ2V0KHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgICAgIGlmIChvbGRDYWxsID09IGJpdHdpc2VfY2FzdDx2b2lkKj4oY3RpX29w
X3B1dF9ieV9pZF9kaXJlY3QpCi0gICAgICAgICAgICB8fCBvbGRDYWxsID09IGJpdHdpc2VfY2Fz
dDx2b2lkKj4oY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYykKLSAgICAgICAgICAgIHx8
IG9sZENhbGwgPT0gYml0d2lzZV9jYXN0PHZvaWQqPihjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9m
YWlsKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBBU1NFUlQob2xkQ2FsbCA9
PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGN0aV9vcF9wdXRfYnlfaWQpCi0gICAgICAgICAgICAgICB8
fCBvbGRDYWxsID09IGJpdHdpc2VfY2FzdDx2b2lkKj4oY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
KQotICAgICAgICAgICAgICAgfHwgb2xkQ2FsbCA9PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGN0aV9v
cF9wdXRfYnlfaWRfZmFpbCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFs
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNjIgKzEyMyw2IEBAIHZvaWQgcGVyZm9ybVBsYXRm
b3JtU3BlY2lmaWNKSVRBc3NlcnRpb24KICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIGJvb2wgZGlyZWN0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICAvLyBUaGUgaW50ZXJwcmV0ZXIgY2hlY2tzIGZvciBy
ZWN1cnNpb24gaGVyZTsgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGNhbiBvY2N1ciBpbiBDVEkuCi0K
LSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
VW5jYWNoZWFibGU6IGdpdmUgdXAuCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpIHsKLSAg
ICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyA6
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0KLSAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkgewotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBj
dGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiBiYXNlQ2VsbCAhPSBiYXNl
LCB0aGVuIGJhc2VDZWxsIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmplY3QuCi0gICAg
aWYgKGJhc2VDZWxsICE9IHNsb3QuYmFzZSgpKSB7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/
IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMgOiBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIGhpdDogU3BlY2lh
bGl6ZSBpbnN0cnVjdGlvbiBhbmQgcmVmIFN0cnVjdHVyZXMuCi0KLSAgICAvLyBTdHJ1Y3R1cmUg
dHJhbnNpdGlvbiwgY2FjaGUgdHJhbnNpdGlvbiBpbmZvCi0gICAgaWYgKHNsb3QudHlwZSgpID09
IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9w
dXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMgOiBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHB1dF9ieV9pZF90cmFu
c2l0aW9uIGNoZWNrcyB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBzZXR0ZXJzLgotICAgICAgICBp
ZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lLCBiYXNlQ2VsbCkgPT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3Bf
cHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSk7Ci0g
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5pbml0UHV0QnlJ
ZFRyYW5zaXRpb24oY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgZGly
ZWN0KTsKLSAgICAgICAgSklUOjpjb21waWxlUHV0QnlJZFRyYW5zaXRpb24oY2FsbEZyYW1lLT5z
Y29wZSgpLT52bSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm90b3R5cGVDaGFpbiwgcmV0dXJu
QWRkcmVzcywgZGlyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzdHVi
SW5mby0+aW5pdFB1dEJ5SWRSZXBsYWNlKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLQotICAgIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFj
ZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJl
dHVybkFkZHJlc3MsIGRpcmVjdCk7Ci19Ci0KIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCB0cnlD
YWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKQEAgLTQzNiwzMCArMzgwLDYgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgaGFuZGxlX3dhdGNoZAogICAgIH0KIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHV0X2J5X2lkX2dlbmVyaWMpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOwotCi0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoCi0gICAgICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCksCi0gICAgICAg
IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0g
ICAgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5wdXQoc3RhY2tGcmFtZS5jYWxsRnJhbWUs
IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1syXS5qc1Zh
bHVlKCksIHNsb3QpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci19Ci0KLURF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYykKLXsK
LSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgCi0gICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoCi0gICAgICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCksCi0gICAgICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7
Ci0gICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHN0YWNrRnJhbWUuY2FsbEZyYW1l
LT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uanNWYWx1ZSgpLCBzbG90KTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwot
fQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X2lkX2dl
bmVyaWMpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtNDc1
LDEwOCArMzk1LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfcHV0X2J5X2lkKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwotICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZp
ZXIoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSAmY29k
ZUJsb2NrLT5nZXRTdHViSW5mbyhTVFVCX1JFVFVSTl9BRERSRVNTKTsKLSAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSk7Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCgKLSAgICAgICAgY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCksCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkucHV0
KGNhbGxGcmFtZSwgaWRlbnQsIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwot
ICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKSkgewotICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOwotICAgICAg
ICB0cnlDYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJF
U1MsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIHNsb3QsIHN0dWJJbmZvLCBmYWxzZSk7
Ci0gICAgfQotICAgIAotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci19Ci0KLURF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF9kaXJlY3QpCi17Ci0gICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpOwotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9ICZjb2RlQmxvY2stPmdldFN0dWJJbmZvKFNUVUJfUkVUVVJOX0FERFJF
U1MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KAotICAg
ICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSwKLSAgICAgICAgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEFTU0VSVChiYXNlVmFs
dWUuaXNPYmplY3QoKSk7Ci0gICAgCi0gICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0
KGNhbGxGcmFtZS0+dm0oKSwgaWRlbnQsIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNs
b3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkgewotICAgICAgICBzdHViSW5mby0+c2V0U2VlbigpOwot
ICAgICAgICB0cnlDYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIFNUVUJfUkVUVVJO
X0FERFJFU1MsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIHNsb3QsIHN0dWJJbmZvLCB0
cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLX0K
LQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2lkX2ZhaWwpCi17Ci0gICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0gICAgCi0gICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpLAot
ICAgICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnB1dChjYWxsRnJhbWUsIGlkZW50LCBzdGFja0Zy
YW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKLQotICAgIENIRUNLX0ZPUl9FWENFUFRJT05f
QVRfRU5EKCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF9k
aXJlY3RfZmFpbCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0g
ICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAg
ICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7Ci0g
ICAgCi0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpLAotICAgICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBh
c09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBpZGVudCwgc3Rh
Y2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7Ci0gICAgCi0gICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKLSAgICBpbnQzMl90IG9sZFNpemUgPSBzdGFja0ZyYW1lLmFyZ3Nb
M10uaW50MzIoKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHN0YWNrRnJhbWUuYXJn
c1s0XS5zdHJ1Y3R1cmUoKTsKLSAgICBpbnQzMl90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgCi0gICAgQVNTRVJUKG9sZFNpemUgPj0gMCk7Ci0gICAg
QVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLQotICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIFZN
JiB2bSA9ICpzdGFja0ZyYW1lLnZtOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZFNpemUsIG5ld1NpemUpOwotICAgIGJhc2UtPnNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBidXR0ZXJmbHkpOwotCi0g
ICAgcmV0dXJuIGJhc2U7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF9nZXRfYnlfaWQpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3MzQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTEsNyArMzUxLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX3RvX29iamVj
dChTVAogSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX2FjdGl2YXRpb24oU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXNoX25h
bWVfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9wdXNoX3dpdGhfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3Jl
YWxsb2MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X3BuYW1lcyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9sb2FkX3ZhcmFyZ3MoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9oYW5k
bGVfd2F0Y2hkb2dfdGltZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBA
IC0zNTksMTIgKzM1OCw2IEBAIHZvaWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJfQVJHU19E
RUMKIHZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
cm9maWxlX3dpbGxfY2FsbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9mYWlsKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lk
X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9T
VFVCIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0
X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbChTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9i
eV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTU3MzQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjA0LDcgKzYwNCw3IEBAIHZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEoK
ICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKLXN0YXRpYyBWX0pJVE9wZXJhdGlv
bl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0
eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9FSkpJ
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkg
ewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCkBAIC02MTYsNyArNjE2LDcgQEAgc3Rh
dGljIFZfSklUT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVHZQogICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0OwogfQogCi1zdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHBy
b3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9FSkpJIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7
CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKQEAgLTEzNzUsOCArMTM3NSw4IEBAIHZv
aWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2gKIAogdm9pZCByZXNldFB1dEJ5
SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogewotICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJp
dHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxU
YXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
LSAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZEZ1bmN0aW9uOworICAgIFZfSklUT3Bl
cmF0aW9uX0VKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJh
dGlvbl9FSkpJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0pJVE9wZXJhdGlvbl9F
SkpJIG9wdGltaXplZEZ1bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0QnVpbGRMaXN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214125</attachid>
            <date>2013-10-13 21:16:30 -0700</date>
            <delta_ts>2013-10-14 10:54:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>89694</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Mzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEzLTEwLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIHNob3VsZCB1c2UgdGhlIERGRydzIFB1dEJ5SWQgSUMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjcwNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW9zdGx5IG5vIGJp
ZyBkZWFsLCBqdXN0IHJlbW92aW5nIHRoZSBvbGQgQmFzZWxpbmUgSklUJ3MgcHV0X2J5X2lkIElD
IHN1cHBvcnQgYW5kIGZvcmNpbmcKKyAgICAgICAgdGhhdCBKSVQgdG8gdXNlIHRoZSBERkcncyAo
aS5lLiBKSVRPcGVyYXRpb25zKSBQdXRCeUlkIElDLgorICAgICAgICAKKyAgICAgICAgVGhlIG9u
bHkgY29tcGxpY2F0ZWQgcGFydCB3YXMgdGhhdCB0aGUgUHV0QnlJZCBvcGVyYXRpb25zIGFzc3Vt
ZWQgdGhhdCB3ZSBmaXJzdCBkaWQgYQorICAgICAgICBjZWxsIHNwZWN1bGF0aW9uLCB3aGljaCB0
aGUgYmFzZWxpbmUgSklUIG9idmlvdXNseSB3b24ndCBkby4gU28gSSBjaGFuZ2VkIGFsbCBvZiB0
aG9zZQorICAgICAgICBzbG93IHBhdGhzIHRvIGRlYWwgd2l0aCBFbmNvZGVkSlNWYWx1ZSdzLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpyZXNldFN0dWJJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICogaml0L0ND
YWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbzo6Y29weVRvU3R1YkluZm8pOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21w
aWxhdGlvbkluZm86OnNsb3dDYXNlSW5mbyk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmg6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6CisKIDIwMTMtMTAtMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGVEwgT1NSIGV4aXQgc2hvdWxkIHBlcmZvcm0gemVybyBleHRlbnNpb24gb24gdmFsdWVz
IHNtYWxsZXIgdGhhbiA2NC1iaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4Miw3ICsy
MzgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogICAgICAg
ICAgICAgSklUOjpyZXNldFBhdGNoR2V0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzUHV0QnlJZEFjY2Vz
cyhhY2Nlc3NUeXBlKSk7Ci0gICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKHJlcGF0
Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAgICAgICByZXNldFB1dEJ5SUQocmVwYXRjaEJ1
ZmZlciwgc3R1YkluZm8pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklU
Q29kZTo6REZHSklUOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
NiArMTQxLDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
IH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
YW5kbGUgcG9seW1vcnBoaWMgUHV0QnlJZC4gV2UgcHJvYmFibHkgaGF2ZSBzb21lIGludGVyZXN0
aW5nIHRoaW5ncworICAgICAgICAvLyB3ZSBjb3VsZCBkbyBhYm91dCBpdC4KICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7
CiAgICAgfQogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU3
MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgcGF5
bG9hZFN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
dmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAKICAg
ICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLSAgICBWX0pJ
VE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25fRUpKSSBv
cHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAg
ICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAgICAKLSAgICBWX0pJVE9w
ZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25fRUpKSSBvcHRp
bWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsNyArMTM2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0
ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VKSkkgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMTYyMCw5
ICsxNjIwLDkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpKSSBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyUGF5bG9h
ZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBh
cmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFy
ZzJQYXlsb2FkLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIFRydXN0ZWRJbW1QdHIo
dWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRP
cGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BS
UmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTcz
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTIsNiArMzUyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3Vt
ZW50KGFyZzQpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJn
MywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzQpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcg
YXJnMywgR1BSUmVnIGFyZzQpCiAgICAgewogICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
QEAgLTM3Myw2ICszODMsMjggQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
NSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJn
NCwgVHJ1c3RlZEltbVB0ciBhcmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRz
KCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmc0KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQsIFRydXN0
ZWRJbW1QdHIgYXJnNSkKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKKyAgICB9CisKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEZQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMTMgKzQ4OSwx
MyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlTdHViQ29tcGlsYXRpCiAgICAgQVNTRVJU
KGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsK
ICAgICBpbmZvLmNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpOwogICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxSZXR1cm5M
b2NhdGlvbik7Ci0gICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aG90UGF0aEJlZ2luKTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHZXRCeUlk
OiB7CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGhvdFBhdGhCZWdpbik7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFz
ZWxpbmUudS5nZXQuc3RydWN0dXJlVG9Db21wYXJlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGdldFN0cnVjdHVyZVRvQ29tcGFyZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnN0cnVjdHVyZUNoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldFN0
cnVjdHVyZUNoZWNrKSk7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2lu
TG9jYXRpb247CisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlVG9D
b21wYXJlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRo
QmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZVRvQ29tcGFyZSkp
OworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7CiAgICAgICAgIGluZm8u
cGF0Y2guYmFzZWxpbmUudS5nZXQucHJvcGVydHlTdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVy
OjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbCA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbCkpOwpAQCAtNTAz
LDIwICs1MDMsNDAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aQog
ICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3BsYWNlbWVudExhYmVsMSA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKICAgICAg
ICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7CiAjZW5kaWYKLSAg
ICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoZ2V0UHV0UmVzdWx0KSk7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxp
bmUudS5nZXQuY29sZFBhdGhCZWdpbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldENvbGRQYXRoQmVnaW4pLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoY2FsbFJldHVybkxvY2F0aW9uKSk7CisgICAgICAgIGluZm8ucGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRv
bmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoY29sZFBhdGhCZWdpbiksIGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9j
YXRpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHV0QnlJZDoKLSAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaG90UGF0aEJlZ2luKTsKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1
dC5zdHJ1Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0U3Ry
dWN0dXJlVG9Db21wYXJlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5wdXQucHJv
cGVydHlTdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0
b3JhZ2VMb2FkKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9j
YXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbik7Cisg
ICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsKSk7CisjZWxzZQor
ICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOworICAgICAg
ICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKKyNlbmRpZgor
ICAgICAgICBpbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGNvbGRQYXRoQmVnaW4pKTsKKyAgICAgICAgaW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUp
KTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1l
bnRMYWJlbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0
aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJl
bCkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDE7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICB1c2VkUmVnaXN0ZXJzLmNvcHlJbmZvKGluZm8ucGF0Y2guZGZnLnVzZWRSZWdp
c3RlcnMpOwogI2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFj
ZW1lbnRMYWJlbDEgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGhv
dFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0RGlzcGxhY2VtZW50
TGFiZWwxKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50
TGFiZWwyID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihob3RQYXRo
QmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVs
MikpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5iYXNlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDI7CisgICAgICAg
IGluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgIHVzZWRS
ZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYK
KyAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDggKzE1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9j
YXRpb247CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBob3RQYXRoQmVnaW47Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZ2V0U3RydWN0dXJlVG9Db21wYXJlOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBnZXRTdHJ1Y3R1cmVDaGVjazsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDsKQEAgLTE2NCw5ICsxNjQsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
Z2V0RGlzcGxhY2VtZW50TGFiZWwxOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
Q29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDI7CiAjZW5kaWYKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGdldFB1dFJlc3VsdDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGdldENvbGRQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIg
cHV0U3RydWN0dXJlVG9Db21wYXJlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW47CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3Bs
YWNlbWVudExhYmVsOwogI2Vsc2UKQEAgLTE5MywxMiArMTkyLDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2Vt
ZW50TGFiZWwxLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
ZGlzcGxhY2VtZW50TGFiZWwyLAogI2VuZGlmCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgcHV0UmVzdWx0KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmUp
CiAgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQogICAgICAgICAgICAgLCBieXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGhvdFBhdGhCZWdpbihob3RQYXRoQmVn
aW4pCi0gICAgICAgICAgICAsIGdldFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBh
cmUpCi0gICAgICAgICAgICAsIGdldFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQorICAg
ICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0dXJlVG9Db21wYXJlKQorICAgICAg
ICAgICAgLCBzdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKICAgICAgICAgICAgICwgcHJv
cGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQpA
QCAtMjA2LDcgKzIwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBnZXREaXNw
bGFjZW1lbnRMYWJlbDEoZGlzcGxhY2VtZW50TGFiZWwxKQogICAgICAgICAgICAgLCBnZXREaXNw
bGFjZW1lbnRMYWJlbDIoZGlzcGxhY2VtZW50TGFiZWwyKQogI2VuZGlmCi0gICAgICAgICAgICAs
IGdldFB1dFJlc3VsdChwdXRSZXN1bHQpCisgICAgICAgICAgICAsIGRvbmUoZG9uZSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTIyNCw4ICsyMjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCiAgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgaG90UGF0aEJlZ2luKGhvdFBhdGhCZWdpbikK
KyAgICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKICAg
ICAgICAgICAgICwgcHJvcGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQotICAg
ICAgICAgICAgLCBwdXRTdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0dXJlVG9Db21wYXJlKQogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3Bs
YWNlbWVudExhYmVsKQogI2Vsc2UKQEAgLTIzNSwxNiArMjM0LDQxIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhQcm9w
ZXJ0eVN0dWJHZXRCeUlkX1QsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjb2xkUGF0aEJlZ2luLCBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlv
bkluZm8oCisgICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkX1QsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVj
dHVyZVRvQ29tcGFyZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZlcnRpYmxl
TG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCwKKyNl
bHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50
TGFiZWwxLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3BsYWNl
bWVudExhYmVsMiwKKyNlbmRpZgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmUpCisgICAgICAgICAgICA6IG1fdHlwZShQdXRCeUlkKQorICAgICAgICAgICAgLCBieXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShz
dHJ1Y3R1cmVUb0NvbXBhcmUpCisgICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVy
ZUNoZWNrKQorICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFn
ZUxvYWQpCisgICAgICAgICAgICAsIGRvbmUoZG9uZSkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgLCBwdXREaXNwbGFjZW1lbnRMYWJlbChkaXNwbGFjZW1lbnRMYWJlbCkKKyNlbHNl
CisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEp
CisgICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIp
CisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzbG93Q2FzZUlu
Zm8oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gR2V0QnlJ
ZCk7CiAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotICAgICAgICAgICAg
Z2V0Q29sZFBhdGhCZWdpbiA9IGNvbGRQYXRoQmVnaW47CisgICAgICAgICAgICB0aGlzLT5jb2xk
UGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2xv
d0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWRfVCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCkKKyAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkK
ICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBQdXRCeUlkKTsKICAgICAg
ICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CiAgICAgICAgIH0KIApAQCAtMzQ0LDEz
ICszNjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihzdHViSW5mbywgc3RydWN0dXJlLCBjaGFpbiwgY291bnQsIGlkZW50LCBz
bG90LCBjYWNoZWRPZmZzZXQsIHJldHVybkFkZHJlc3MsIGNhbGxGcmFtZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNl
dCA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBu
ZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZh
bChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwpAQCAtMzc5LDkgKzM5
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQg
cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyopOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGF0
Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBk
aXJlY3QpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3Ro
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKICAgICAgICAgewpAQCAtNDEzLDcgKzQyOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5m
byosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5m
byosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3Ry
dWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwg
U3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJu
QWRkcmVzc1B0ciwgYm9vbCBkaXJlY3QpOwogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9k
ZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwpAQCAtNDQ3LDggKzQ2MSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
OwogCi0gICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0UHV0QnlJZChTdHJ1Y3R1cmVTdHViSW5m
byopOwotCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CiAgICAgICAgIHZvaWQgYWRk
U2xvd0Nhc2UoSnVtcExpc3QpOwogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKCk7CkBAIC01ODYs
OSArNTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZFNs
b3dDYXNlCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2VJ
bnN0cnVjdGlvblNwYWNlID0gODA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VH
ZXRCeUlkU2xvd0Nhc2VDb25zdGFudFNwYWNlID0gNDsKLSAgICAgICAgLy8gc2VxdWVuY2VQdXRC
eUlkCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkSW5zdHJ1Y3Rpb25T
cGFjZSA9IDM2OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENvbnN0
YW50U3BhY2UgPSA0OwogI2VsaWYgQ1BVKFNINCkKICAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2Ug
PSAxMjsKQEAgLTU5OSw5ICs2MDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gc2Vx
dWVuY2VHZXRCeUlkU2xvd0Nhc2UKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdl
dEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAzODsKICAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSA0OwotICAgICAgICAv
LyBzZXF1ZW5jZVB1dEJ5SWQKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5
SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CiAjZW5kaWYKIAogI2Vsc2UgLy8gVVNFKEpTVkFM
VUUzMl82NCkKQEAgLTg4Miw2ICs4ODgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUosIFJlZ2lz
dGVySUQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklU
T3BlcmF0aW9uX0VKSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRU9Kc3MsIFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpKSSwgUmVnaXN0ZXJJRCwg
UmVnaXN0ZXJJRCwgU3RyaW5nSW1wbCopOworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJLCBSZWdpc3RlcklELCBSZWdp
c3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklELCBTdHJpbmdJbXBsKik7CisjZW5kaWYKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKEpfSklUT3BlcmF0aW9uX0UpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9K
SVRPcGVyYXRpb25fRUNiLCBDb2RlQmxvY2sqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKFpfSklUT3Bl
cmF0aW9uX0UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDEyIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpJIG9wZXJhdGlvbiwgUmVnaXN0
ZXJJRCByZWdPcDFUYWcsIFJlZ2lzdGVySUQgcmVnT3AxUGF5bG9hZCwgUmVnaXN0ZXJJRCByZWdP
cDJUYWcsIFJlZ2lzdGVySUQgcmVnT3AyUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQoreworICAg
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyByZWdPcDFQ
YXlsb2FkLCByZWdPcDFUYWcsIHJlZ09wMlBheWxvYWQsIHJlZ09wMlRhZywgVHJ1c3RlZEltbVB0
cih1aWQpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworfQorCiAjdW5kZWYgRUFCSV8zMkJJVF9EVU1NWV9BUkcKICN1bmRlZiBTSDRfMzJCSVRf
RFVNTVlfQVJHCiAKQEAgLTM1Niw2ICszNjIsMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkkg
b3BlcmF0aW9uLCBSZWdpc3RlcklEIHJlZ09wMSwgUmVnaXN0ZXJJRCByZWdPcDIsIFN0cmluZ0lt
cGwqIHVpZCkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUocmVnT3AxLCByZWdP
cDIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBy
ZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkocmV2aXNpb24gMTU3MzQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBfSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCiAjZGVmaW5lIF9KX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKICNkZWZpbmUgX0pfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBfVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKyNkZWZpbmUgX1Zf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkoZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKICNlbGlmIENP
TVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKIApAQCAtODAsNyArODAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVu
Y3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
OCkKICNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
MTYpCiAjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IDIwKQotI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9u
LCAyNCkKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SkkoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMjgpCiAKICNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCiAKQEAgLTEx
NywxMCArMTE3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogLy8gQXMgYSByZXN1bHQsIHJldHVybiBh
ZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93
aW5nIGNhc2VzLgogI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCiAjZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0
XSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxy
LCBbc3AsICM4XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpK
SSAic3RyIGxyLCBbc3AsICMxMl0iCiAjZWxzZQogI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9S
RVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjMF0iCi0jZGVmaW5lIElOU1RSVUNUSU9O
X1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElO
U1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSkkgInN0ciBsciwgW3NwLCAjOF0iCiAj
ZW5kaWYKIAogI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSBcCkBAIC0xMzYsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAogICAgICk7CiAKLSNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSkkoZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0
IiAiXG4iIFwKICAgICAiLmFsaWduIDIiICJcbiIgXApAQCAtMTQ1LDcgKzE0NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICIudGh1bWIiICJcbiIgXAogICAgICIudGh1bWJfZnVuYyAiIFRIVU1C
X0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAogICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpKSSAi
XG4iIFwKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIApAQCAtMTgwLDEwICsxODAsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAvLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0
ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCiAjaWYgQ09NUElMRVJf
U1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVU
VVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9T
VE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgorI2RlZmluZSBJTlNU
UlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkpJICJzdHIgbHIsIFtzcCwgIzEyXSIKICNl
bHNlCiAjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxy
LCBbc3AsICMwXSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAic3RyIGxyLCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FE
RFJFU1NfRUpKSSAic3RyIGxyLCBbc3AsICM4XSIKICNlbmRpZgogCiAjZGVmaW5lIF9KX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKQEAgLTE5Nywx
NCArMTk3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5l
IF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBc
CisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1
bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAogICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKICAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCiAgICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9S
RVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkpJICJcbiIgXAogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCkBAIC0yNDYsMTQgKzI0
NiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBfVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorI2Rl
ZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShmdW5jdGlv
bikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAogICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKICAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCiAgICAgTE9BRF9GVU5D
VElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgInN3ICRy
YSwgMjQoJHNwKSIgIlxuIiBcCisgICAgICAgICJzdyAkcmEsIDI4KCRzcCkiICJcbiIgXAogICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKICAgICApOwogCkBAIC0zMDUsNyArMzA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
KTsKIAogI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJ
KGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9u
LCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVmaW5l
IF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgsIFNINF9TQ1JB
VENIX1JFR0lTVEVSKQogCiAjZWxpZiBDT01QSUxFUihNU1ZDKQogCkBAIC0zMjEsOCArMzIxLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMs
IHZhbHVlLCBzdHJpbmcsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVy
bkFkZHJlc3MoKSkpOyB9CiAKLSNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKLSAgICB2b2lkIEpJVF9PUEVSQVRJT04gZnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgSlNDZWxsKiBjZWxsLCBT
dHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhl
eGVjLCB2YWx1ZSwgY2VsbCwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRy
ZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpKSShmdW5jdGlvbikgXAorICAgIHZvaWQgSklUX09QRVJBVElP
TiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cmluZ0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIHZhbHVlLCBiYXNlVmFsdWUsIHN0cmluZywgUmV0dXJu
QWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KIAogI2Vu
ZGlmCiAKQEAgLTM0Miw5ICszNDIsOSBAQCBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCosIFJldHVy
bkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCiBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQogCi0jZGVmaW5l
IFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwK
LXZvaWQgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRy
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotX1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pCisjZGVmaW5lIFZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkoZnVuY3Rpb24pIFwKK3ZvaWQgSklUX09Q
RVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK19WX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkpJKGZ1bmN0aW9uKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNTAgKzIyMyw0OCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
R2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBJZGVudGlmaWVyIGlkZW50KHZt
LCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwg
ZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICAKICAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+
cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4
ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXQoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAg
IGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3Qo
KSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIGFzT2JqZWN0KEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSkpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUp
Owotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQorVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
U3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC0yNzYsNyArMjc0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWRTdHJpYwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2Up
OworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7CiAgICAgCiAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwpAQCAtMjkwLDggKzI4OCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWMKICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CiB9CiAKLVZfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSkkob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMzAxLDcgKzI5OSw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4
ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICAKICAgICBiYXNlVmFsdWUu
cHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CkBAIC0zMTUsOCArMzEzLDggQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdAogICAgICAgICBzdHViSW5mby5zZWVu
ID0gdHJ1ZTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpKSShvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
U3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC0zMjYsMjIgKzMyNCwyMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjCiAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAg
ICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlT2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby5zZWVuKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERp
cmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VPYmplY3QsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgRGlyZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOwogfQogCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkpJKG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTM1MSwyMiArMzQ5LDIyIEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU09iamVjdCog
YmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7CiAgICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAg
ICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsK
ICAgICAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5m
by5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8sIERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VPYmpl
Y3QsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKICAgICBlbHNlCiAgICAgICAgIHN0
dWJJbmZvLnNlZW4gPSB0cnVlOwogfQogCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK1Zf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkob3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1w
bCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0zNzYsNyArMzc0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRT
dHJpYwogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CiAgICAgCiAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwpA
QCAtMzg3LDggKzM4NSw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKICAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvLCBOb3REaXJlY3QpOwogfQogCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSkkob3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CkBAIC0zOTgsNyArMzk2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWROb25TdAogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJh
c2UpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKQEAgLTQwOSw4ICs0MDcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0CiAgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKIH0KIAotVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVp
bGRMaXN0KTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkpJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDIwLDE5ICs0MTgsMTkg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpOwogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSkpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNP
YmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBp
ZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8sIERpcmVjdCk7CisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlT2JqZWN0LCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxk
TGlzdCk7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQorVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpKSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ0MiwxNSAr
NDQwLDE1IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSkpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgCi0gICAgQVNTRVJUKGJhc2Ut
PmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
aWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlT2JqZWN0IC0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgRGlyZWN0KTsKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3Qs
IGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcg
QEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3Qp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwg
U3RyaW5nSW1wbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FSkpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpK
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKUFAp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKiwgdm9pZCopOwogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwg
aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTk4LDE4ICsxOTgsMTggQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUpOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5B
TDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
LXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVp
bGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgU3RyaW5nSW1wbCopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgZHN0CiAgICAgRU5EX1VOSU5U
RVJSVVBURURfU0VRVUVOQ0VfRk9SX1BVVChzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSwgZHN0KTsK
ICAgICAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBi
ZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93
Q2FzZUluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNTQ4LDQyICs1NDgsNjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0
aW9uKgogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAgICAgCi0gICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQp
OwotICAgIAotICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKLSAgICAKLSAgICAvLyBJdCBp
cyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0
IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgogICAgIERh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOworICAgIFBhdGNoYWJsZUp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAg
IE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwg
cHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgRGF0YUxhYmVsMzIgZGlz
cGxhY2VtZW50TGFiZWwxID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHBheWxvYWQKLSAg
ICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDIgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2gocmVnVDMsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQp
KTsgLy8gdGFnCisgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogICAgIAotICAgIEVO
RF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7Ci0KICAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QwLCByZWdUMiwgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAKLSAgICBtX3Byb3BlcnR5QWNj
ZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oUHJv
cGVydHlTdHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0aEJlZ2luLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIHByb3BlcnR5U3RvcmFnZUxvYWQsIGRpc3BsYWNlbWVudExhYmVsMSwgZGlz
cGxhY2VtZW50TGFiZWwyKSk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZCA9CisgICAgICAgIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgCisgICAgLy8gUGF5bG9hZC4K
KyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaDEgPQorICAgICAgICBzdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChyZWdUMiwgQWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVs
dE9mZnNldCkpOworICAgIC8vIFRhZy4KKyAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaDIg
PQorICAgICAgICBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywgQWRkcmVzcyhy
ZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIAorICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOworICAgIAorICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBw
ZW5kKAorICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCisgICAgICAgICAgICBQ
cm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
IHN0cnVjdHVyZUNoZWNrLAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgc3RvcmVX
aXRoUGF0Y2gxLCBzdG9yZVdpdGhQYXRjaDIsIGRvbmUpKTsKKyAgICBCRUdJTl9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGlkZW50ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgIGlu
dCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCiAgICAgbGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
ICAgIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRf
YnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50KSkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMywgcmVnVDIpOyAKLSAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkpJIG9w
dGltaXplZENhbGw7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAg
ICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0
aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICB9CisgICAgCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxs
LCByZWdUMywgcmVnVDIsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisKICAgICAvLyBU
cmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292
ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
b1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVy
dHlTdHViUHV0QnlJZCwgY2FsbCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
b1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKIC8vIENvbXBpbGUgYSBzdG9yZSBpbnRvIGFuIG9iamVjdCdz
IHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCkBAIC02MjEsMTExICs2NDEs
NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAgbG9hZDMy
KEFkZHJlc3MocmVzdWx0VGFnLCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlc3VsdFRhZyk7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBib29sIGRpcmVjdCkKLXsKLSAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3N1bWVzIHRo
YXQgcmVnVDAgY29udGFpbnMgdGhlIGJhc2VQYXlsb2FkIGFuZCByZWdUMSBjb250YWlucyB0aGUg
YmFzZVRhZy4gUmVzdG9yZSB0aGVtIGZyb20gdGhlIHN0YWNrLgotI2lmIENQVShNSVBTKSB8fCBD
UFUoU0g0KSB8fCBDUFUoQVJNKQotICAgIC8vIEZvciBNSVBTLCB3ZSBkb24ndCBhZGQgc2l6ZW9m
KHZvaWQqKSB0byB0aGUgc3RhY2sgb2Zmc2V0LgotICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1swXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAg
Ly8gRm9yIE1JUFMsIHdlIGRvbid0IGFkZCBzaXplb2Yodm9pZCopIHRvIHRoZSBzdGFjayBvZmZz
ZXQuCi0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZT
RVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOwotI2Vsc2UKLSAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMF0pICsg
c2l6ZW9mKHZvaWQqKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMF0pICsgc2l6ZW9mKHZvaWQqKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotI2VuZGlmCi0K
LSAgICBKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUp
KSk7Ci0gICAgdGVzdFByb3RvdHlwZShvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBm
YWlsdXJlQ2FzZXMsIHN0dWJJbmZvKTsKLSAgICAKLSAgICBpZiAoIWRpcmVjdCkgewotICAgICAg
ICAvLyBWZXJpZnkgdGhhdCBub3RoaW5nIGluIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzIGEgc2V0
dGVyIGZvciB0aGlzIHByb3BlcnR5LiAKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpCi0gICAgICAgICAgICB0ZXN0UHJv
dG90eXBlKCgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzLCBzdHViSW5mbyk7
Ci0gICAgfQotCi0gICAgLy8gSWYgd2Ugc3VjY2VlZCBpbiBhbGwgb2Ygb3VyIGNoZWNrcywgYW5k
IHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAvLyBkZWNy
ZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVyLgotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LSAgICBpZiAobV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgIT0gREZHOjpDYW5u
b3RDb21waWxlKSB7Ci0gICAgICAgIHN1YjMyKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEp
LAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+cmFyZUNhc2VQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkt
Pm1fY291bnRlcikpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIC8vIFJlYWxsb2NhdGUgcHJv
cGVydHkgc3RvcmFnZSBpZiBuZWVkZWQuCi0gICAgQ2FsbCBjYWxsVGFyZ2V0OwotICAgIGJvb2wg
d2lsbE5lZWRTdG9yYWdlUmVhbGxvYyA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKHdpbGxOZWVk
U3RvcmFnZVJlYWxsb2MpIHsKLSAgICAgICAgLy8gVGhpcyB0cmFtcG9saW5lIHdhcyBjYWxsZWQg
dG8gbGlrZSBhIEpJVCBzdHViOyBiZWZvcmUgd2UgY2FuIGNhbiBjYWxsIGFnYWluIHdlIG5lZWQg
dG8KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIHRoZSBzdGFjaywg
dG8gcHJldmVudCB0aGUgc3RhY2sgZnJvbSBiZWNvbWluZyBtaXNhbGlnbmVkLgotICAgICAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgICAgICAKLSAgICAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3Jl
YWxsb2MpOwotICAgICAgICBzdHViQ2FsbC5za2lwQXJndW1lbnQoKTsgLy8gYmFzZQotICAgICAg
ICBzdHViQ2FsbC5za2lwQXJndW1lbnQoKTsgLy8gaWRlbnQKLSAgICAgICAgc3R1YkNhbGwuc2tp
cEFyZ3VtZW50KCk7IC8vIHZhbHVlCi0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW0zMihvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUpKTsKLSAgICAgICAg
c3R1YkNhbGwuY2FsbChyZWdUMCk7Ci0KLSAgICAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4ocmVnVDMpOwotCi0jaWYgQ1BVKE1JUFMpIHx8IENQVShTSDQpIHx8IENQVShBUk0p
Ci0gICAgICAgIC8vIEZvciBNSVBTLCB3ZSBkb24ndCBhZGQgc2l6ZW9mKHZvaWQqKSB0byB0aGUg
c3RhY2sgb2Zmc2V0LgotICAgICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgICAgICAvLyBGb3Ig
TUlQUywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihKSVRTdGFja0ZyYW1lLCBhcmdzWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVnVDEpOwotI2Vsc2UKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzBdKSAr
IHNpemVvZih2b2lkKikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1swXSkgKyBzaXplb2Yodm9pZCop
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJl
Z1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7Ci0KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSksIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSNpZiBDUFUoTUlQUykgfHwg
Q1BVKFNINCkgfHwgQ1BVKEFSTSkKLSAgICAvLyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRkIHNpemVv
Zih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KLSAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMl0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDMpOwotICAg
IGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklU
U3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksIHJlZ1QyKTsKLSNlbHNlCi0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzJdKSArIHNpemVvZih2
b2lkKikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdU
Myk7Ci0gICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZT
RVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzJdKSArIHNpemVvZih2b2lkKikgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKLSNlbmRpZgotICAgIGNvbXBp
bGVQdXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QyLCByZWdUMywgY2FjaGVkT2Zmc2V0KTsKLSAg
ICAKLSAgICByZXQoKTsKLSAgICAKLSAgICBBU1NFUlQoIWZhaWx1cmVDYXNlcy5lbXB0eSgpKTsK
LSAgICBmYWlsdXJlQ2FzZXMubGluayh0aGlzKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVD
YWxsKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9j
b2RlQmxvY2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0
aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwpKTsKLSAgICAKLSAgICBpZiAod2lsbE5lZWRTdG9yYWdlUmVhbGxvYykgewot
ICAgICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fcmVhbGxvYykpOwotICAgIH0KLSAgICAKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERSgKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNp
dGlvbiBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAotICAg
ICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAg
ICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9jLAotICAgICAgICBuZXdTdHJ1Y3R1cmUpOwotICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci19Ci0KIHZvaWQg
SklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTc0MSwyMSArNjU2LDYgQEAgdm9p
ZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjbwogICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwyKSwgb2Zmc2V0
UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKGNhY2hlZE9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSk7IC8vIHRhZwogfQogCi12b2lkIEpJVDo6cGF0Y2hQdXRC
eUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQotewotICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIAotICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1
dF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rpbmcgcmln
aHQgbm93LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5l
cmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgCi0gICAgLy8gUGF0Y2ggdGhl
IG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhlbiBwYXRjaCB0
aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0
Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQu
cHJvcGVydHlTdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KGNhY2hlZE9mZnNldCkpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExh
YmVsMSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKTsgLy8gcGF5bG9hZAotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVs
MiksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShjYWNoZWRPZmZzZXQpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpOyAvLyB0YWcKLX0KLQogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCiB7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJm1fY29kZUJs
b2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKQEAgLTE0ODYsMTcgKzEzODYsNiBAQCB2
b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29s
ZFBhdGhCZWdpbikpOwogfQogCi12b2lkIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQotewotICAg
IGlmIChpc0RpcmVjdFB1dEJ5SWQoc3R1YkluZm8pKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkX2RpcmVj
dCk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5wdXQuc3RydWN0dXJlVG9Db21wYXJlKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMSksIDApOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMiksIDApOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTU3MzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSwxMSArNTUxLDExIEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBDb252ZXJ0aWJsZUxvYWRMYWJl
bCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBEYXRhTGFiZWxDb21w
YWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAot
ICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKKyAgICBMYWJlbCBkb25lKHRoaXMpOwogCiAgICAg
RU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkSG90UGF0aCk7CiAKLSAg
ICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21w
aWxhdGlvbkluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgaG90UGF0
aEJlZ2luLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkLCBkaXNwbGFjZW1lbnRMYWJlbCwgcHV0UmVzdWx0KSk7CisgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFBy
b3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0
dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywgcHJvcGVydHlTdG9yYWdlTG9hZCwgZGlzcGxh
Y2VtZW50TGFiZWwsIGRvbmUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0
QnlJZFNsb3dDYXNlKGludCByZXMKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1
ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhl
IGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCi0g
ICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHViR2V0QnlJZCwgY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNjA3LDIyICs2MDcsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0
aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUg
ZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAKLSAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0
QnlJZCk7Ci0KLSAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7Ci0KLSAgICAvLyBJdCBpcyBp
bXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGlt
bWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgogICAgIERhdGFM
YWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwotCi0gICAgQ29udmVydGlibGVM
b2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgRGF0YUxh
YmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwotCi0gICAg
RU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKLQorICAgIFBhdGNo
YWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisg
ICAgICAgIE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLAorICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgCisgICAgYWRkU2xvd0Nhc2Uoc3Ry
dWN0dXJlQ2hlY2spOworICAgIAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzKTsKIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5k
KFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVj
b2RlT2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvcGVydHlTdG9y
YWdlTG9hZCwgZGlzcGxhY2VtZW50TGFiZWwpKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBw
cm9wZXJ0eVN0b3JhZ2VMb2FkID0KKyAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICAKKyAgICBE
YXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9CisgICAgICAgIHN0b3JlNjRXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0
KSk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCisgICAgICAgIFByb3BlcnR5U3R1YkNvbXBp
bGF0aW9uSW5mbygKKyAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNvZGVP
ZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCisgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdpdGhQYXRjaCwgZG9uZSkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MzQsMTUgKzYzOSwy
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAgICAgbGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRf
YnlfaWRfZGlyZWN0IDogY3RpX29wX3B1dF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoaWRlbnQp
KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgbW92ZShyZWdUMCwgbm9u
QXJnR1BSMSk7Ci0gICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbCgpOworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4odGhpcyk7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRUpKSSBvcHRpbWl6
ZWRDYWxsOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAg
aWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
fQorICAgIAorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgcmVn
VDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBv
ZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlv
bi4KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBjYWxs
KTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
IAogLy8gQ29tcGlsZSBhIHN0b3JlIGludG8gYW4gb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZS4g
IE1heSBvdmVyd3JpdGUgdGhlCkBAIC02ODEsOTMgKzY5Niw2IEBAIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIG9mZnNl
dEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSksIHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29s
IGRpcmVjdCkKLXsKLSAgICBtb3ZlKG5vbkFyZ0dQUjEsIHJlZ1QwKTsKLQotICAgIEp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdo
dCBTdHJ1Y3R1cmUuCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxs
KHJlZ1QwKSk7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG9s
ZFN0cnVjdHVyZSkpKTsKLSAgICAKLSAgICB0ZXN0UHJvdG90eXBlKG9sZFN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCksIGZhaWx1cmVDYXNlcywgc3R1YkluZm8pOwotICAgIAotICAgIEFTU0VS
VChvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpIHx8IG9sZFN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IGNoYWluLT5oZWFk
KCktPmdldCgpKTsKLQotICAgIC8vIGVjeCA9IGJhc2VPYmplY3QtPm1fc3RydWN0dXJlCi0gICAg
aWYgKCFkaXJlY3QpIHsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQg
PSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgoKml0KS0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkgfHwgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBpdFsxXS5nZXQoKSk7Ci0gICAgICAgICAgICB0ZXN0UHJv
dG90eXBlKCgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzLCBzdHViSW5mbyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBzdWNjZWVkIGluIGFsbCBvZiBvdXIg
Y2hlY2tzLCBhbmQgdGhlIGNvZGUgd2FzIG9wdGltaXphYmxlLCB0aGVuIG1ha2Ugc3VyZSB3ZQot
ICAgIC8vIGRlY3JlbWVudCB0aGUgcmFyZSBjYXNlIGNvdW50ZXIuCi0jaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQotICAgIGlmIChtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSAh
PSBERkc6OkNhbm5vdENvbXBpbGUpIHsKLSAgICAgICAgc3ViMzIoCi0gICAgICAgICAgICBUcnVz
dGVkSW1tMzIoMSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJsb2NrLT5y
YXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChzdHViSW5mby0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KS0+bV9jb3VudGVyKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgLy8gZW1p
dCBhIGNhbGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAgYm9vbCB3aWxs
TmVlZFN0b3JhZ2VSZWFsbG9jID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAod2lsbE5lZWRTdG9y
YWdlUmVhbGxvYykgewotICAgICAgICAvLyBUaGlzIHRyYW1wb2xpbmUgd2FzIGNhbGxlZCB0byBs
aWtlIGEgSklUIHN0dWI7IGJlZm9yZSB3ZSBjYW4gY2FuIGNhbGwgYWdhaW4gd2UgbmVlZCB0bwot
ICAgICAgICAvLyByZW1vdmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gdGhlIHN0YWNrLCB0byBw
cmV2ZW50IHRoZSBzdGFjayBmcm9tIGJlY29taW5nIG1pc2FsaWduZWQuCi0gICAgICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gCi0gICAgICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKTsKLSAg
ICAgICAgc3R1YkNhbGwuc2tpcEFyZ3VtZW50KCk7IC8vIGJhc2UKLSAgICAgICAgc3R1YkNhbGwu
c2tpcEFyZ3VtZW50KCk7IC8vIGlkZW50Ci0gICAgICAgIHN0dWJDYWxsLnNraXBBcmd1bWVudCgp
OyAvLyB2YWx1ZQotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIob2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKSk7Ci0gICAgICAgIHN0dWJDYWxsLmNh
bGwocmVnVDApOwotICAgICAgICBlbWl0R2V0SklUU3R1YkFyZygyLCByZWdUMSk7Ci0KLSAgICAg
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotICAgIH0KLQotICAg
IC8vIFBsYW50aW5nIHRoZSBuZXcgc3RydWN0dXJlIHRyaWdnZXJzIHRoZSB3cml0ZSBiYXJyaWVy
IHNvIHdlIG5lZWQKLSAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGJhcnJpZXIgaGVyZS4KLSAgICBl
bWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0KLSAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSksIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSAgICBjb21waWxlUHV0RGlyZWN0T2Zm
c2V0KHJlZ1QwLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKLQotICAgIHJldCgpOwotICAgIAotICAg
IEFTU0VSVCghZmFpbHVyZUNhc2VzLmVtcHR5KCkpOwotICAgIGZhaWx1cmVDYXNlcy5saW5rKHRo
aXMpOwotICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKLSAgICBD
YWxsIGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKLQotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKLQotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRf
ZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKLQotICAgIGlmICh3aWxsTmVl
ZFN0b3JhZ2VSZWFsbG9jKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxzLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0
aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7Ci0gICAgfQotICAgIAotICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5B
TElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkJhc2Vs
aW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLAotICAgICAgICAqbV92bSwKLSAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9jLAotICAgICAgICBuZXdT
dHJ1Y3R1cmUpOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVz
cywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7Ci19Ci0KIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
IHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTc4Miwy
MCArNzEwLDYgQEAgdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjbwogICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50
TGFiZWwpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSk7CiB9
CiAKLXZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9v
bCBkaXJlY3QpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFi
bHkgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRo
aW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1
dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyA6IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwotCi0g
ICAgLy8gUGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJv
bSwgdGhlbiBwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHJ1Y3R1
cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5wdXQucHJvcGVydHlTdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KGNh
Y2hlZE9mZnNldCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0
aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0
LmRpc3BsYWNlbWVudExhYmVsKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKGNhY2hl
ZE9mZnNldCkpOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSAmbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OwpAQCAtMTQyNywxNiArMTM0MSw2IEBAIHZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBh
dGNoQnVmZmUKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hl
Y2spLCBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKSk7CiB9CiAKLXZvaWQgSklUOjpy
ZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8pCi17Ci0gICAgaWYgKGlzRGlyZWN0UHV0QnlJZChzdHViSW5mbykp
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9wdXRfYnlf
aWQpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1Y3R1
cmVUb0NvbXBhcmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50TGFi
ZWwpLCAwKTsKLX0KLQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCkBAIC0xNTA0LDMxICsxNDA4LDYgQEAgdm9pZCBK
SVQ6OnRlc3RQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cAogICAgIGFkZFN0cnVjdHVyZVRyYW5z
aXRpb25DaGVjayhwcm90b3R5cGUuYXNDZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCksIHN0dWJJbmZvLCBmYWlsdXJlQ2FzZXMsIHJlZ1QzKTsKIH0KIAotYm9vbCBKSVQ6Omlz
RGlyZWN0UHV0QnlJZChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCi17Ci0gICAgc3dpdGNo
IChzdHViSW5mby0+YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2dl
bmVyaWM6IHsKLSAgICAgICAgdm9pZCogb2xkQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2Fs
bFRhcmdldChzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICBpZiAob2xkQ2FsbCA9PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGN0aV9vcF9wdXRf
YnlfaWRfZGlyZWN0KQotICAgICAgICAgICAgfHwgb2xkQ2FsbCA9PSBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMpCi0gICAgICAgICAgICB8fCBvbGRD
YWxsID09IGJpdHdpc2VfY2FzdDx2b2lkKj4oY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgQVNTRVJUKG9sZENhbGwgPT0gYml0
d2lzZV9jYXN0PHZvaWQqPihjdGlfb3BfcHV0X2J5X2lkKQotICAgICAgICAgICAgICAgfHwgb2xk
Q2FsbCA9PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykKLSAg
ICAgICAgICAgICAgIHx8IG9sZENhbGwgPT0gYml0d2lzZV9jYXN0PHZvaWQqPihjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQogewogICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZp
c2lvbiAxNTczNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDYyICsxMjMsNiBAQCB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNw
ZWNpZmljSklUQXNzZXJ0aW9uCiAjZW5kaWYKIH0KIAotTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBi
b29sIGRpcmVjdCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgCi0gICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3IgcmVjdXJz
aW9uIGhlcmU7IEkgZG8gbm90IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgotCi0gICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFVuY2Fj
aGVhYmxlOiBnaXZlIHVwLgotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKSB7Ci0gICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMgOiBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotCi0gICAgaWYgKHN0cnVjdHVyZS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29w
X3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyA6IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgYmFzZUNlbGwgIT0gYmFzZSwgdGhl
biBiYXNlQ2VsbCBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgotICAgIGlmIChi
YXNlQ2VsbCAhPSBzbG90LmJhc2UoKSkgewotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlf
b3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBoaXQ6IFNwZWNpYWxpemUg
aW5zdHJ1Y3Rpb24gYW5kIHJlZiBTdHJ1Y3R1cmVzLgotCi0gICAgLy8gU3RydWN0dXJlIHRyYW5z
aXRpb24sIGNhY2hlIHRyYW5zaXRpb24gaW5mbwotICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5
X2lkX2RpcmVjdF9nZW5lcmljIDogY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwdXRfYnlfaWRfdHJhbnNpdGlv
biBjaGVja3MgdGhlIHByb3RvdHlwZSBjaGFpbiBmb3Igc2V0dGVycy4KLSAgICAgICAgaWYgKG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSwgYmFzZUNlbGwpID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikgewotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNv
ZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9i
eV9pZF9kaXJlY3RfZ2VuZXJpYyA6IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpOwotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5wcmV2aW91c0lEKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICBzdHViSW5mby0+aW5pdFB1dEJ5SWRUcmFu
c2l0aW9uKGNhbGxGcmFtZS0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3Ry
dWN0dXJlLT5wcmV2aW91c0lEKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGRpcmVjdCk7
Ci0gICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKGNhbGxGcmFtZS0+c2NvcGUo
KS0+dm0oKSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLT5wcmV2aW91c0lEKCksIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvdG90eXBlQ2hhaW4sIHJldHVybkFkZHJl
c3MsIGRpcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3R1YkluZm8t
PmluaXRQdXRCeUlkUmVwbGFjZShjYWxsRnJhbWUtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0KLSAgICBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoY29k
ZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5B
ZGRyZXNzLCBkaXJlY3QpOwotfQotCiBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVH
ZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbykKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CkBAIC00MzYsMzAgKzM4MCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIGhhbmRsZV93YXRjaGQKICAgICB9CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV9pZF9nZW5lcmljKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKLQotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KAotICAgICAgICBzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpLAotICAgICAgICBzdGFj
a0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkucHV0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgp
LCBzbG90KTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotfQotCi1ERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMpCi17Ci0gICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIAotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KAotICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpLAotICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAg
IGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+dm0o
KSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzJdLmpz
VmFsdWUoKSwgc2xvdCk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLX0KLQog
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV9pZF9nZW5lcmlj
KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTQ3NSwxMDgg
KzM5NSw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wX3B1dF9ieV9pZCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCk7
Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gJmNvZGVCbG9j
ay0+Z2V0U3R1YkluZm8oU1RVQl9SRVRVUk5fQUREUkVTUyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwot
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPmlzU3RyaWN0TW9kZSgpLAotICAgICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLSAgICBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnB1dChjYWxs
RnJhbWUsIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsKLSAgICAK
LSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+
YWNjZXNzVHlwZSkpIHsKLSAgICAgICAgc3R1YkluZm8tPnNldFNlZW4oKTsKLSAgICAgICAgdHJ5
Q2FjaGVQdXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLCBzbG90LCBzdHViSW5mbywgZmFsc2UpOwotICAg
IH0KLSAgICAKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotfQotCi1ERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfaWRfZGlyZWN0KQotewotICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0
YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5h
cmdzWzFdLmlkZW50aWZpZXIoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSAmY29kZUJsb2NrLT5nZXRTdHViSW5mbyhTVFVCX1JFVFVSTl9BRERSRVNTKTsK
LSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCgKLSAgICAgICAg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCksCi0gICAgICAgIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOwotICAgIAotICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChjYWxs
RnJhbWUtPnZtKCksIGlkZW50LCBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpLCBzbG90KTsK
LSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSkpIHsKLSAgICAgICAgc3R1YkluZm8tPnNldFNlZW4oKTsKLSAgICAg
ICAgdHJ5Q2FjaGVQdXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLCBzbG90LCBzdHViSW5mbywgdHJ1ZSk7
Ci0gICAgfQotICAgIAotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci19Ci0KLURF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV9pZF9mYWlsKQotewotICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpOwotICAgIAotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KAotICAgICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSwKLSAgICAg
ICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgc3RhY2tG
cmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5wdXQoY2FsbEZyYW1lLCBpZGVudCwgc3RhY2tGcmFtZS5h
cmdzWzJdLmpzVmFsdWUoKSwgc2xvdCk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfaWRfZGlyZWN0
X2ZhaWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotICAgIAot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpOwotICAgIAot
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KAotICAgICAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSwKLSAgICAgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0u
anNWYWx1ZSgpOwotICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgYXNPYmpl
Y3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgaWRlbnQsIHN0YWNrRnJh
bWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwotICAgIAotICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7Ci0gICAgaW50MzJfdCBvbGRTaXplID0gc3RhY2tGcmFtZS5hcmdzWzNdLmlu
dDMyKCk7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBzdGFja0ZyYW1lLmFyZ3NbNF0u
c3RydWN0dXJlKCk7Ci0gICAgaW50MzJfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwotICAgIAotICAgIEFTU0VSVChvbGRTaXplID49IDApOwotICAgIEFTU0VS
VChuZXdTaXplID4gb2xkU2l6ZSk7Ci0KLSAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkp
OwotICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBWTSYgdm0g
PSAqc3RhY2tGcmFtZS52bTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGJhc2UtPmdyb3dP
dXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNlLT5zZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgYnV0dGVyZmx5KTsKLQotICAgIHJl
dHVybiBiYXNlOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
Z2V0X2J5X2lkKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE1NzM0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUxLDcgKzM1MSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV90b19vYmplY3QoU1QK
IEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uYW1lX3Nj
b3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBj
dGlfb3BfcHVzaF93aXRoX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwotSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9j
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogSklUX1NUVUIgY3RpX29wX2dldF9wbmFtZXMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CiB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfbG9hZF92YXJhcmdzKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfaGFuZGxlX3dh
dGNoZG9nX3RpbWVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpAQCAtMzU5
LDEyICszNTgsNiBAQCB2b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1ZyhTVFVCX0FSR1NfREVDCiB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wb3Bfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmls
ZV93aWxsX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfYnlfaWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci12b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfZmFpbChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RVQiBj
dGlfb3BfcHV0X2J5X2lkX2RpcmVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9p
ZF9kaXJlY3RfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFs
X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NzM0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCw3
ICs2MDQsNyBAQCB2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAg
ICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQogCi1zdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpD
SSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90
ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpKSSBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90
LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQpAQCAtNjE2LDcgKzYxNiw3IEBAIHN0YXRpYyBW
X0pJVE9wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2UKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZfSklUT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlh
dGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90
LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpKSSBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAg
ICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCkBAIC0xMzc1LDggKzEzNzUsOCBAQCB2b2lkIHJl
c2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoCiAKIHZvaWQgcmVzZXRQdXRCeUlEKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNl
X2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
Vl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBWX0pJVE9wZXJhdGlv
bl9FSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25f
RUpKST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRpb25fRUpKSSBv
cHRpbWl6ZWRGdW5jdGlvbjsKICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdEJ1aWxkTGlzdCkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemU7CiAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkK
</data>
<flag name="review"
          id="236628"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>214291</attachid>
            <date>2013-10-15 12:09:43 -0700</date>
            <delta_ts>2013-10-15 12:09:43 -0700</delta_ts>
            <desc>PerformanceTestsResults for Dromaeo/jslib-event-jquery</desc>
            <filename>PerformanceTestsResults.html</filename>
            <type>text/html</type>
            <size>22641</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUt
cGxvdHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7
CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEg
ewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24g
LnRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBh
ZGRpbmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAw
cHg7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3Vu
ZDogd2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJh
Y2tncm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50
ZXI7CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwog
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBc
MjVCOCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsK
fQoKdGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRk
LmNvbXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0
dGVyIHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoK
dGQubWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3Vu
ZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShy
Z2IoMjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjog
aW5zZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7
CiAgICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBo
YW5kOwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xk
Owp9CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5l
LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAx
cHggdHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAj
ZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUs
IDIzNSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czog
NXB4Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEw
cHg7Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3Bh
biBjbGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpS
ZWZlcmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48L3NwYW4+Cjwv
ZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAo
KSB7CiAgICB2YXIgalF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyc7CiAgICB2YXIgcGx1Z2lucyA9IFsnUGVy
Zm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1hbmNl
VGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnLAogICAgICAgICdQZXJm
b3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzJ107CiAgICB2YXIgbG9jYWxQYXRo
ID0gJy9Wb2x1bWVzL0RhdGEvd2Via2l0Myc7CiAgICB2YXIgcmVtb3RlUGF0aCA9ICdodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rJzsKICAgIHZhciBudW1iZXJP
ZkZhaWx1cmVzID0gMDsKICAgIHZhciBzdGFydGVkTG9hZGluZ1BsdWdpbnMgPSBmYWxzZTsKICAg
IHZhciBudW1iZXJPZkxvYWRlZFBsdWdpbnMgPSAwOwoKICAgIGZ1bmN0aW9uIGxvYWRTY3JpcHQo
c3JjLCBsb2FkZWQsIGZhaWxlZCkgewogICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlOwogICAgICAg
IHNjcmlwdC5zcmMgPSBzcmM7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRlZDsKICAgICAg
ICBpZiAoZmFpbGVkKQogICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IGZhaWxlZDsKICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICB9CgogICAgZnVuY3Rpb24g
bG9hZFBsdWdpbnModHJ1bmtQYXRoKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVn
aW5zLmxlbmd0aDsgaSsrKQogICAgICAgICAgICBsb2FkU2NyaXB0KHRydW5rUGF0aCArICcvJyAr
IHBsdWdpbnNbaV0sIGxvYWRlZFBsdWdpbiwgY3JlYXRlRmFpbGVkVG9Mb2FkUGx1Z2luKHBsdWdp
bnNbaV0pKTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkZWRQbHVnaW4oKSB7CiAgICAgICAgbnVt
YmVyT2ZMb2FkZWRQbHVnaW5zKys7CiAgICAgICAgaWYgKG51bWJlck9mTG9hZGVkUGx1Z2lucyA9
PSBwbHVnaW5zLmxlbmd0aCkKICAgICAgICAgICAgc2V0VGltZW91dChpbml0LCAwKTsgICAgICAg
ICAgICAKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2lu
KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkICIg
KyBwbHVnaW4pOyB9CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlTG9hZGVkSlF1ZXJ5KHRydW5r
UGF0aCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGxvYWRQbHVnaW5zKHRydW5rUGF0
aCk7IH0KICAgIH0KCiAgICBsb2FkU2NyaXB0KGxvY2FsUGF0aCArICcvJyArIGpRdWVyeSwKICAg
ICAgICBjcmVhdGVMb2FkZWRKUXVlcnkobG9jYWxQYXRoKSwKICAgICAgICBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIGxvYWRTY3JpcHQocmVtb3RlUGF0aCArICcvJyArIGpRdWVyeSwKICAgICAg
ICAgICAgICAgIGNyZWF0ZUxvYWRlZEpRdWVyeShyZW1vdGVQYXRoKSwKICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkIGpRdWVyeS4iKTsgfSk7CiAgICAg
ICAgfSk7Cn0pKCk7CgpmdW5jdGlvbiBUZXN0UmVzdWx0KG1ldHJpYywgdmFsdWVzLCBhc3NvY2lh
dGVkUnVuKSB7CiAgICBpZiAodmFsdWVzWzBdIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICB2
YXIgZmxhdHRlbmVkVmFsdWVzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1
ZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIGZsYXR0ZW5lZFZhbHVlcyA9IGZsYXR0ZW5lZFZh
bHVlcy5jb25jYXQodmFsdWVzW2ldKTsKICAgICAgICB2YWx1ZXMgPSBmbGF0dGVuZWRWYWx1ZXM7
CiAgICB9CgogICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljOyB9CiAg
ICB0aGlzLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24g
KHZhbHVlKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pOyB9CiAg
ICB0aGlzLnVuc2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0YXRpc3RpY3Muc3Vt
KHZhbHVlcykgLyB2YWx1ZXMubGVuZ3RoOyB9CiAgICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdGhpcy51bnNjYWxlZE1lYW4oKTsgfQog
ICAgdGhpcy5taW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3Rvcigp
ICogU3RhdGlzdGljcy5taW4odmFsdWVzKTsgfQogICAgdGhpcy5tYXggPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlzdGljcy5tYXgodmFsdWVzKTsg
fQogICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKICAgICAg
ICByZXR1cm4gbWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MuY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEoMC45NSwgdmFsdWVzLmxlbmd0aCwKICAgICAgICAgICAgU3RhdGlzdGljcy5z
dW0odmFsdWVzKSwgU3RhdGlzdGljcy5zcXVhcmVTdW0odmFsdWVzKSk7CiAgICB9CiAgICB0aGlz
LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlz
LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkgLyB0aGlzLm1lYW4oKTsgfQogICAgdGhpcy5wZXJj
ZW50RGlmZmVyZW5jZSA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiAob3RoZXIudW5zY2FsZWRN
ZWFuKCkgLSB0aGlzLnVuc2NhbGVkTWVhbigpKSAvIHRoaXMudW5zY2FsZWRNZWFuKCk7IH0KICAg
IHRoaXMuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAg
ICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKG90aGVyLm1lYW4oKSAtIHRoaXMubWVhbigpKTsKICAg
ICAgICByZXR1cm4gZGlmZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZm
ID4gb3RoZXIuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKTsKICAgIH0KICAgIHRoaXMucnVuID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFJ1bjsgfQp9CgpmdW5jdGlvbiBUZXN0UnVu
KGVudHJ5KSB7CiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50
cnlbJ2Rlc2NyaXB0aW9uJ107IH0KICAgIHRoaXMud2Via2l0UmV2aXNpb24gPSBmdW5jdGlvbiAo
KSB7IHJldHVybiBlbnRyeVsncmV2aXNpb25zJ11bJ1dlYktpdCddWydyZXZpc2lvbiddOyB9CiAg
ICB0aGlzLmxhYmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBsYWJlbCA9ICdyJyArIHRo
aXMud2Via2l0UmV2aXNpb24oKTsKICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbigpKQogICAg
ICAgICAgICBsYWJlbCArPSAnICZkYXNoOyAnICsgdGhpcy5kZXNjcmlwdGlvbigpOwogICAgICAg
IHJldHVybiBsYWJlbDsKICAgIH0KfQoKZnVuY3Rpb24gUGVyZlRlc3RNZXRyaWMobmFtZSwgbWV0
cmljKSB7CiAgICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgIHZhciBjYWNoZWRVbml0ID0gbnVs
bDsKICAgIHZhciBjYWNoZWRTY2FsaW5nRmFjdG9yID0gbnVsbDsKICAgIHZhciB1bml0ID0geydG
cmFtZVJhdGUnOiAnZnBzJywgJ1J1bnMnOiAncnVucy9zJywgJ1RpbWUnOiAnbXMnLCAnTWFsbG9j
JzogJ2J5dGVzJywgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CgogICAgLy8gV2UgY2FuJ3Qg
ZG8gdGhpcyBpbiBUZXN0UmVzdWx0IGJlY2F1c2UgYWxsIHJlc3VsdHMgZm9yIGVhY2ggdGVzdCBu
ZWVkIHRvIHNoYXJlIHRoZSBzYW1lIHVuaXQgYW5kIHRoZSBzYW1lIHNjYWxpbmcgZmFjdG9yLgog
ICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGJlIGFkanVzdGluZyB1bml0cyBvbiBldmVyeSB0ZXN0IHJlc3Vs
dC4KICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9uIHRoZSBmaXJzdCB0ZXN0LgogICAg
ICAgIGlmICghdGVzdFJlc3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgIHJl
dHVybjsKCiAgICAgICAgdmFyIG1lYW4gPSB0ZXN0UmVzdWx0c1swXS51bnNjYWxlZE1lYW4oKTsg
Ly8gRklYTUU6IFdlIHNob3VsZCBsb29rIGF0IGFsbCB2YWx1ZXMuCiAgICAgICAgdmFyIGtpbG8g
PSB1bml0ID09ICdieXRlcycgPyAxMDI0IDogMTAwMDsKICAgICAgICBpZiAobWVhbiA+IDEwICog
a2lsbyAqIGtpbG8gJiYgdW5pdCAhPSAnbXMnKSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdG
YWN0b3IgPSAxIC8ga2lsbyAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSAnTSAnICsg
dW5pdDsKICAgICAgICB9IGVsc2UgaWYgKG1lYW4gPiAxMCAqIGtpbG8pIHsKICAgICAgICAgICAg
Y2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxvOwogICAgICAgICAgICBjYWNoZWRVbml0ID0g
dW5pdCA9PSAnbXMnID8gJ3MnIDogKCdLICcgKyB1bml0KTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMTsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9
IHVuaXQ7CiAgICAgICAgfQogICAgfQoKICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5hbWUgKyAnOicgKyBtZXRyaWM7IH0KICAgIHRoaXMuaXNNZW1vcnlUZXN0ID0gZnVuY3Rp
b24gKCkgeyByZXR1cm4gbWV0cmljID09ICdKU0hlYXAnIHx8IG1ldHJpYyA9PSAnTWFsbG9jJzsg
fQogICAgdGhpcy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7CiAgICAgICAgdGVz
dFJlc3VsdHMucHVzaChuZXdSZXN1bHQpOwogICAgICAgIGNhY2hlZFVuaXQgPSBudWxsOwogICAg
ICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOwogICAgfQogICAgdGhpcy5yZXN1bHRzID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdFJlc3VsdHM7IH0KICAgIHRoaXMuc2NhbGluZ0ZhY3Rv
ciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsK
ICAgICAgICByZXR1cm4gY2FjaGVkU2NhbGluZ0ZhY3RvcjsKICAgIH0KICAgIHRoaXMudW5pdCA9
IGZ1bmN0aW9uICgpIHsKICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAg
ICAgICAgcmV0dXJuIGNhY2hlZFVuaXQ7CiAgICB9CiAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuaXQgPT0gJ21zJyB8fCB1bml0ID09ICdieXRlcyc7IH0K
fQoKdmFyIHBsb3RDb2xvciA9ICdyZ2IoMjMwLDUwLDUwKSc7CnZhciBzdWJwb2ludHNQbG90T3B0
aW9ucyA9IHsKICAgIGxpbmVzOiB7c2hvdzp0cnVlLCBsaW5lV2lkdGg6IDB9LAogICAgY29sb3I6
IHBsb3RDb2xvciwKICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1czogMX0sCiAgICBiYXJz
OiB7c2hvdzogZmFsc2V9fTsKCnZhciBtYWluUGxvdE9wdGlvbnMgPSB7CiAgICB4YXhpczogewog
ICAgICAgIG1pbjogLTAuNSwKICAgICAgICB0aWNrU2l6ZTogMSwKICAgIH0sCiAgICBjcm9zc2hh
aXI6IHsgbW9kZTogJ3knIH0sCiAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTogMCB9LAogICAgYmFy
czoge3Nob3c6IHRydWUsIGFsaWduOiAnY2VudGVyJywgYmFyV2lkdGg6IDAuNX0sCiAgICBsaW5l
czogeyBzaG93OiBmYWxzZSB9LAogICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6
IHsKICAgICAgICBib3JkZXJXaWR0aDogMSwKICAgICAgICBib3JkZXJDb2xvcjogJyNjY2MnLAog
ICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLAogICAgICAgIGhvdmVyYWJsZTogdHJ1ZSwK
ICAgICAgICBhdXRvSGlnaGxpZ2h0OiBmYWxzZSwKICAgIH0KfTsKCnZhciB0aW1lUGxvdE9wdGlv
bnMgPSB7CiAgICB5YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgeGF4aXM6IHsgc2hvdzogZmFs
c2UgfSwKICAgIGxpbmVzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsgYm9yZGVyV2lkdGg6
IDEsIGJvcmRlckNvbG9yOiAnI2NjYycgfSwKICAgIGNvbG9yczogWyBwbG90Q29sb3IgXQp9OwoK
ZnVuY3Rpb24gY3JlYXRlUGxvdChjb250YWluZXIsIHRlc3QpIHsKICAgIHZhciBzZWN0aW9uID0g
JCgnPHNlY3Rpb24+PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+PGRpdiBjbGFzcz0idGltZS1wbG90
cyI+PC9kaXY+JwogICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48L3NwYW4+PC9zZWN0
aW9uPicpOwogICAgc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKS5jc3Moeyd3aWR0aCc6ICgxMDAg
KiB0ZXN0LnJlc3VsdHMoKS5sZW5ndGggKyAyNSkgKyAncHgnLCAnaGVpZ2h0JzogJzMwMHB4J30p
OwogICAgJChjb250YWluZXIpLmFwcGVuZChzZWN0aW9uKTsKCiAgICB2YXIgcGxvdENvbnRhaW5l
ciA9IHNlY3Rpb24uY2hpbGRyZW4oJy5wbG90Jyk7CiAgICB2YXIgbWluSXNaZXJvID0gdHJ1ZTsK
ICAgIGF0dGFjaFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKCiAgICBhdHRh
Y2hUaW1lUGxvdHModGVzdCwgc2VjdGlvbi5jaGlsZHJlbignLnRpbWUtcGxvdHMnKSk7CgogICAg
dmFyIHRvb2x0aXAgPSBzZWN0aW9uLmNoaWxkcmVuKCcudG9vbHRpcCcpOwogICAgcGxvdENvbnRh
aW5lci5iaW5kKCdwbG90aG92ZXInLCBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCBpdGVtKSB7
CiAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgdmFyIHBvc3RmaXggPSBpdGVtLnNlcmll
cy5pZCA/ICcgKCcgKyBpdGVtLnNlcmllcy5pZCArICcpJyA6ICcnOwogICAgICAgICAgICB0b29s
dGlwLmh0bWwoaXRlbS5kYXRhcG9pbnRbMV0udG9QcmVjaXNpb24oNCkgKyBwb3N0Zml4KTsKICAg
ICAgICAgICAgdmFyIHNlY3Rpb25PZmZzZXQgPSAkKHNlY3Rpb24pLm9mZnNldCgpOwogICAgICAg
ICAgICB0b29sdGlwLmNzcyh7bGVmdDogaXRlbS5wYWdlWCAtIHNlY3Rpb25PZmZzZXQubGVmdCAt
IHRvb2x0aXAub3V0ZXJXaWR0aCgpIC8gMiwgdG9wOiBpdGVtLnBhZ2VZIC0gc2VjdGlvbk9mZnNl
dC50b3AgKyAxMH0pOwogICAgICAgICAgICB0b29sdGlwLmZhZGVJbigyMDApOwogICAgICAgIH0g
ZWxzZQogICAgICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5l
ci5tb3VzZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICB9KTsK
ICAgIHBsb3RDb250YWluZXIuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKICAgICAgICBtaW5Jc1plcm8gPSAhbWluSXNaZXJvOwogICAgICAg
IGF0dGFjaFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKICAgIH0pOwoKICAg
IHJldHVybiBzZWN0aW9uOwp9CgpmdW5jdGlvbiBhdHRhY2hUaW1lUGxvdHModGVzdCwgY29udGFp
bmVyKSB7CiAgICB2YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwogICAgdmFyIGF0dGFjaGVk
UGxvdCA9IGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsr
KSB7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICB2YXIg
dmFsdWVzID0gcmVzdWx0c1tpXS52YWx1ZXMoKTsKICAgICAgICBpZiAoIXZhbHVlcykKICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgYXR0YWNoZWRQbG90ID0gdHJ1ZTsKCiAgICAgICAgJC5w
bG90KGNvbnRhaW5lci5jaGlsZHJlbigpLmxhc3QoKSwgW3ZhbHVlcy5tYXAoZnVuY3Rpb24gKHZh
bHVlLCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCB2YWx1ZV07IH0pXSwKICAgICAgICAgICAgJC5l
eHRlbmQodHJ1ZSwge30sIHRpbWVQbG90T3B0aW9ucywge3lheGlzOiB7bWluOiBNYXRoLm1pbi5h
cHBseShNYXRoLCB2YWx1ZXMpICogMC45LCBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHZhbHVl
cykgKiAxLjF9LAogICAgICAgICAgICAgICAgeGF4aXM6IHttaW46IC0wLjUsIG1heDogdmFsdWVz
Lmxlbmd0aCAtIDAuNX19KSk7CiAgICB9CiAgICBpZiAoIWF0dGFjaGVkUGxvdCkKICAgICAgICBj
b250YWluZXIuY2hpbGRyZW4oKS5yZW1vdmUoKTsKfQoKZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0
LCBwbG90Q29udGFpbmVyLCBtaW5Jc1plcm8pIHsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1
bHRzKCk7CgogICAgdmFyIHZhbHVlcyA9IHJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZXMs
IHJlc3VsdCwgaW5kZXgpIHsKICAgICAgICB2YXIgbmV3VmFsdWVzID0gcmVzdWx0LnZhbHVlcygp
OwogICAgICAgIHJldHVybiBuZXdWYWx1ZXMgPyB2YWx1ZXMuY29uY2F0KG5ld1ZhbHVlcy5tYXAo
ZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBbaW5kZXgsIHZhbHVlXTsgfSkpIDogdmFsdWVzOwog
ICAgfSwgW10pOwoKICAgIHZhciBwbG90RGF0YSA9IFskLmV4dGVuZCh0cnVlLCB7fSwgc3VicG9p
bnRzUGxvdE9wdGlvbnMsIHtkYXRhOiB2YWx1ZXN9KV07CiAgICBwbG90RGF0YS5wdXNoKHtpZDog
JyZtdTsnLCBkYXRhOiByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1
cm4gW2luZGV4LCByZXN1bHQubWVhbigpXTsgfSksIGNvbG9yOiBwbG90Q29sb3J9KTsKCiAgICB2
YXIgb3ZlcmFsbE1heCA9IFN0YXRpc3RpY3MubWF4KHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1
bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKTsKICAgIHZhciBvdmVyYWxsTWlu
ID0gU3RhdGlzdGljcy5taW4ocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsg
cmV0dXJuIHJlc3VsdC5taW4oKTsgfSkpOwogICAgdmFyIG1hcmdpbiA9IChvdmVyYWxsTWF4IC0g
b3ZlcmFsbE1pbikgKiAwLjE7CiAgICB2YXIgY3VycmVudFBsb3RPcHRpb25zID0gJC5leHRlbmQo
dHJ1ZSwge30sIG1haW5QbG90T3B0aW9ucywge3lheGlzOiB7CiAgICAgICAgbWluOiBtaW5Jc1pl
cm8gPyAwIDogb3ZlcmFsbE1pbiAtIG1hcmdpbiwKICAgICAgICBtYXg6IG1pbklzWmVybyA/IG92
ZXJhbGxNYXggKiAxLjEgOiBvdmVyYWxsTWF4ICsgbWFyZ2lufX0pOwoKICAgIGN1cnJlbnRQbG90
T3B0aW9ucy54YXhpcy5tYXggPSByZXN1bHRzLmxlbmd0aCAtIDAuNTsKICAgIGN1cnJlbnRQbG90
T3B0aW9ucy54YXhpcy50aWNrcyA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4
KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5ydW4oKS5sYWJlbCgpXTsgfSk7CgogICAgJC5wbG90
KHBsb3RDb250YWluZXIsIHBsb3REYXRhLCBjdXJyZW50UGxvdE9wdGlvbnMpOwp9CgpmdW5jdGlv
biB0b0ZpeGVkV2lkdGhQcmVjaXNpb24odmFsdWUpIHsKICAgIHZhciBkZWNpbWFsID0gdmFsdWUu
dG9GaXhlZCgyKTsKICAgIHJldHVybiBkZWNpbWFsOwp9CgpmdW5jdGlvbiBmb3JtYXRQZXJjZW50
YWdlKGZyYWN0aW9uKSB7CiAgICB2YXIgcGVyY2VudGFnZSA9IGZyYWN0aW9uICogMTAwOwogICAg
cmV0dXJuIChmcmFjdGlvbiAqIDEwMCkudG9GaXhlZCgyKSArICclJzsKfQoKZnVuY3Rpb24gY3Jl
YXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgp
IHsKICAgICQoJyNjb250YWluZXInKS5odG1sKCc8dGhlYWQ+PHRyPjx0aD5UZXN0PC90aD48dGg+
VW5pdDwvdGg+JyArIHJ1bnMubWFwKGZ1bmN0aW9uIChydW4sIGluZGV4KSB7CiAgICAgICAgcmV0
dXJuICc8dGggY29sc3Bhbj0iJyArIChpbmRleCA9PSByZWZlcmVuY2VJbmRleCA/IDIgOiAzKSAr
ICciIGNsYXNzPSJ7c29ydGVyOiBcJ2NvbXBhcmlzb25cJ30iPicgKyBydW4ubGFiZWwoKSArICc8
L3RoPic7CiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG1hcmt1cCwgY2VsbCkgeyByZXR1cm4gbWFy
a3VwICsgY2VsbDsgfSwgJycpICsgJzwvdHI+PC9oZWFkPjx0Ym9keT48L3Rib2R5PicpOwoKICAg
IHZhciB0ZXN0TmFtZXMgPSBbXTsKICAgIGZvciAodGVzdE5hbWUgaW4gdGVzdHMpCiAgICAgICAg
dGVzdE5hbWVzLnB1c2godGVzdE5hbWUpOwoKICAgIHRlc3ROYW1lcy5zb3J0KCkubWFwKGZ1bmN0
aW9uICh0ZXN0TmFtZSkgewogICAgICAgIHZhciB0ZXN0ID0gdGVzdHNbdGVzdE5hbWVdOwogICAg
ICAgIGlmICh0ZXN0LmlzTWVtb3J5VGVzdCgpICE9IHNob3VsZElnbm9yZU1lbW9yeSkKICAgICAg
ICAgICAgY3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7
CgogICAgJCgnI2NvbnRhaW5lcicpLnRhYmxlc29ydGVyKHt3aWRnZXRzOiBbJ3plYnJhJ119KTsK
fQoKZnVuY3Rpb24gbGluZWFyUmVncmVzc2lvbihwb2ludHMpIHsKICAgIC8vIEltcGxlbWVudCBo
dHRwOi8vd3d3LmVhc3ljYWxjdWxhdGlvbi5jb20vc3RhdGlzdGljcy9sZWFybi1jb3JyZWxhdGlv
bi5waHAuCiAgICAvLyB4ID0gbWFnbml0dWRlCiAgICAvLyB5ID0gaXRlcmF0aW9ucwogICAgdmFy
IHN1bVggPSAwOwogICAgdmFyIHN1bVkgPSAwOwogICAgdmFyIHN1bVhTcXVhcmVkID0gMDsKICAg
IHZhciBzdW1ZU3F1YXJlZCA9IDA7CiAgICB2YXIgc3VtWFRpbWVzWSA9IDA7CgogICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgeCA9IGk7CiAg
ICAgICAgdmFyIHkgPSBwb2ludHNbaV07CiAgICAgICAgc3VtWCArPSB4OwogICAgICAgIHN1bVkg
Kz0geTsKICAgICAgICBzdW1YU3F1YXJlZCArPSB4ICogeDsKICAgICAgICBzdW1ZU3F1YXJlZCAr
PSB5ICogeTsKICAgICAgICBzdW1YVGltZXNZICs9IHggKiB5OwogICAgfQoKICAgIHZhciByID0g
KHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAqIHN1bVkpIC8KICAgICAgICBNYXRo
LnNxcnQoKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKSAqCiAgICAg
ICAgICAgICAgICAgIChwb2ludHMubGVuZ3RoICogc3VtWVNxdWFyZWQgLSBzdW1ZICogc3VtWSkp
OwoKICAgIGlmIChpc05hTihyKSB8fCByID09IE1hdGguSW5maW5pdHkpCiAgICAgICAgciA9IDA7
CgogICAgdmFyIHNsb3BlID0gKHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAqIHN1
bVkpIC8gKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKTsKICAgIHZh
ciBpbnRlcmNlcHQgPSBzdW1ZIC8gcG9pbnRzLmxlbmd0aCAtIHNsb3BlICogc3VtWCAvIHBvaW50
cy5sZW5ndGg7CiAgICByZXR1cm4ge3Nsb3BlOiBzbG9wZSwgaW50ZXJjZXB0OiBpbnRlcmNlcHQs
IHJTcXVhcmVkOiByICogcn07Cn0KCnZhciB3YXJuaW5nU2lnbiA9ICc8c3ZnIHZpZXdCb3g9IjAg
MCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgdmVydGljYWwtYWxp
Z246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+JwogICAgKyAnPHBvbHlnb24gZmlsbD0icmVkIiBw
b2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJva2U9InJlZCIgc3Ryb2tlLXdpZHRo
PSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4nCiAgICArICc8cG9seWdvbiBmaWxsPSJ3
aGl0ZSIgcG9pbnRzPSI0NywzMCA0OCwyOSwgNTAsIDI4LjcsIDUyLDI5IDUzLDMwIDUwLDYwIiBz
dHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAv
PicKICAgICsgJzxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRlIiAvPicK
ICAgICsgJzwvc3ZnPic7CgpmdW5jdGlvbiBjcmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZl
cmVuY2VJbmRleCkgewogICAgdmFyIHRhYmxlUm93ID0gJCgnPHRyPjx0ZCBjbGFzcz0idGVzdCI+
JyArIHRlc3QubmFtZSgpICsgJzwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij4nICsgdGVzdC51bml0KCkg
KyAnPC90ZD48L3RyPicpOwoKICAgIGZ1bmN0aW9uIG1hcmt1cEZvclJ1bihyZXN1bHQsIHJlZmVy
ZW5jZVJlc3VsdCkgewogICAgICAgIHZhciBjb21wYXJpc29uQ2VsbCA9ICcnOwogICAgICAgIHZh
ciBoaWRkZW5WYWx1ZSA9ICcnOwogICAgICAgIHZhciBzaG91bGRDb21wYXJlID0gcmVzdWx0ICE9
PSByZWZlcmVuY2VSZXN1bHQ7CiAgICAgICAgaWYgKHNob3VsZENvbXBhcmUgJiYgcmVmZXJlbmNl
UmVzdWx0KSB7CiAgICAgICAgICAgIHZhciBwZXJjZW50RGlmZmVyZW5jZSA9IHJlZmVyZW5jZVJl
c3VsdC5wZXJjZW50RGlmZmVyZW5jZShyZXN1bHQpOwogICAgICAgICAgICB2YXIgYmV0dGVyID0g
dGVzdC5zbWFsbGVySXNCZXR0ZXIoKSA/IHBlcmNlbnREaWZmZXJlbmNlIDwgMCA6IHBlcmNlbnRE
aWZmZXJlbmNlID4gMDsKICAgICAgICAgICAgdmFyIGNvbXBhcmlzb24gPSAnJzsKICAgICAgICAg
ICAgdmFyIGNsYXNzTmFtZSA9ICdjb21wYXJpc29uJzsKICAgICAgICAgICAgaWYgKHJlZmVyZW5j
ZVJlc3VsdC5pc1N0YXRpc3RpY2FsbHlTaWduaWZpY2FudChyZXN1bHQpKSB7CiAgICAgICAgICAg
ICAgICBjb21wYXJpc29uID0gZm9ybWF0UGVyY2VudGFnZShNYXRoLmFicyhwZXJjZW50RGlmZmVy
ZW5jZSkpICsgKGJldHRlciA/ICcgQmV0dGVyJyA6ICcgV29yc2UmbmJzcDsnKTsKICAgICAgICAg
ICAgICAgIGNsYXNzTmFtZSArPSBiZXR0ZXIgPyAnIGJldHRlcicgOiAnIHdvcnNlJzsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBoaWRkZW5WYWx1ZSA9ICc8c3BhbiBzdHlsZT0iZGlzcGxheTog
bm9uZSI+fCcgKyBjb21wYXJpc29uICsgJzwvc3Bhbj4nOwogICAgICAgICAgICBjb21wYXJpc29u
Q2VsbCA9ICc8dGQgY2xhc3M9IicgKyBjbGFzc05hbWUgKyAnIj4nICsgY29tcGFyaXNvbiArICc8
L3RkPic7CiAgICAgICAgfSBlbHNlIGlmIChzaG91bGRDb21wYXJlKQogICAgICAgICAgICBjb21w
YXJpc29uQ2VsbCA9ICc8dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+JzsKCiAgICAgICAgdmFy
IHZhbHVlcyA9IHJlc3VsdC52YWx1ZXMoKTsKICAgICAgICB2YXIgd2FybmluZyA9ICcnOwogICAg
ICAgIHZhciByZWdyZXNzaW9uQW5hbHlzaXMgPSAnJzsKICAgICAgICBpZiAodmFsdWVzICYmIHZh
bHVlcy5sZW5ndGggPiAzKSB7CiAgICAgICAgICAgIHJlZ3Jlc3Npb25SZXN1bHQgPSBsaW5lYXJS
ZWdyZXNzaW9uKHZhbHVlcyk7CiAgICAgICAgICAgIHJlZ3Jlc3Npb25BbmFseXNpcyA9ICdzbG9w
ZT0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlZ3Jlc3Npb25SZXN1bHQuc2xvcGUpCiAgICAg
ICAgICAgICAgICArICcsIFJeMj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlZ3Jlc3Npb25S
ZXN1bHQuclNxdWFyZWQpOwogICAgICAgICAgICBpZiAocmVncmVzc2lvblJlc3VsdC5yU3F1YXJl
ZCA+IDAuNiAmJiBNYXRoLmFicyhyZWdyZXNzaW9uUmVzdWx0LnNsb3BlKSA+IDAuMDEpIHsKICAg
ICAgICAgICAgICAgIHdhcm5pbmcgPSAnIDxzcGFuIGNsYXNzPSJyZWdyZXNzaW9uLXdhcm5pbmci
IHRpdGxlPSJEZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3aXRoICcgKyByZWdyZXNzaW9uQW5h
bHlzaXMgKyAnIj4nICsgd2FybmluZ1NpZ24gKyAnIDwvc3Bhbj4nOwogICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0ZpeGVkV2lk
dGhQcmVjaXNpb24ocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkpICsgJywgbWluPScg
KyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1pbigpKQogICAgICAgICAgICArICcsIG1h
eD0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tYXgoKSkgKyAnXG4nICsgcmVncmVz
c2lvbkFuYWx5c2lzOwoKICAgICAgICAvLyBUYWJsZXNvcnRlciBkb2Vzbid0IGtub3cgYWJvdXQg
dGhlIHNlY29uZCBjZWxsIHNvIHB1dCB0aGUgY29tcGFyaXNvbiBpbiB0aGUgaW52aXNpYmxlIGVs
ZW1lbnQuCiAgICAgICAgcmV0dXJuICc8dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9IicgKyBzdGF0
aXN0aWNzICsgJyI+JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWVhbigpKSArIGhp
ZGRlblZhbHVlCiAgICAgICAgICAgICsgJzwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9IicgKyBzdGF0aXN0aWNzICsgJyI+JnBsdXNtbjsgJwogICAgICAgICAg
ICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8o
KSkgKyB3YXJuaW5nICsgJzwvdGQ+JyArIGNvbXBhcmlzb25DZWxsOwogICAgfQoKICAgIGZ1bmN0
aW9uIG1hcmt1cEZvck1pc3NpbmdSdW4oaXNSZWZlcmVuY2UpIHsKICAgICAgICByZXR1cm4gJzx0
ZCBjb2xzcGFuPSInICsgKGlzUmVmZXJlbmNlID8gMiA6IDMpICsgJyIgY2xhc3M9Im1pc3Npbmci
Pk1pc3Npbmc8L3RkPic7CiAgICB9CgogICAgdmFyIHJ1bkluZGV4ID0gMDsKICAgIHZhciByZXN1
bHRzID0gdGVzdC5yZXN1bHRzKCk7CiAgICB2YXIgcmVmZXJlbmNlUmVzdWx0ID0gdW5kZWZpbmVk
OwogICAgdmFyIHJlc3VsdEluZGV4TWFwID0ge307CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJl
c3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB3aGlsZSAocnVuc1tydW5JbmRleF0gIT09IHJl
c3VsdHNbaV0ucnVuKCkpCiAgICAgICAgICAgIHJ1bkluZGV4Kys7CiAgICAgICAgaWYgKHJ1bklu
ZGV4ID09IHJlZmVyZW5jZUluZGV4KQogICAgICAgICAgICByZWZlcmVuY2VSZXN1bHQgPSByZXN1
bHRzW2ldOwogICAgICAgIHJlc3VsdEluZGV4TWFwW3J1bkluZGV4XSA9IGk7CiAgICB9CiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJ1bnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleE1hcFtpXTsKICAgICAgICBpZiAocmVzdWx0SW5kZXggPT0gdW5k
ZWZpbmVkKQogICAgICAgICAgICB0YWJsZVJvdy5hcHBlbmQobWFya3VwRm9yTWlzc2luZ1J1bihp
ID09IHJlZmVyZW5jZUluZGV4KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0YWJsZVJvdy5h
cHBlbmQobWFya3VwRm9yUnVuKHJlc3VsdHNbcmVzdWx0SW5kZXhdLCByZWZlcmVuY2VSZXN1bHQp
KTsKICAgIH0KCiAgICAkKCcjY29udGFpbmVyJykuY2hpbGRyZW4oJ3Rib2R5JykubGFzdCgpLmFw
cGVuZCh0YWJsZVJvdyk7CgogICAgdGFibGVSb3cuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAg
ICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPSB0YWJsZVJvd1swXSAmJiBldmVudC50YXJnZXQucGFy
ZW50Tm9kZSAhPSB0YWJsZVJvd1swXSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICB2YXIgZmlyc3RDZWxsID0gdGFibGVSb3cuY2hp
bGRyZW4oJ3RkJykuZmlyc3QoKTsKICAgICAgICBpZiAoZmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0
aW9uJykubGVuZ3RoKSB7CiAgICAgICAgICAgIGZpcnN0Q2VsbC5jaGlsZHJlbignc2VjdGlvbicp
LnJlbW92ZSgpOwogICAgICAgICAgICB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5jc3MoeydwYWRk
aW5nLWJvdHRvbSc6ICcnfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHBsb3Qg
PSBjcmVhdGVQbG90KGZpcnN0Q2VsbCwgdGVzdCk7CiAgICAgICAgICAgIHBsb3QuY3NzKHsncG9z
aXRpb24nOiAnYWJzb2x1dGUnLCAnei1pbmRleCc6IDJ9KTsKICAgICAgICAgICAgdmFyIG9mZnNl
dCA9IHRhYmxlUm93Lm9mZnNldCgpOwogICAgICAgICAgICBvZmZzZXQubGVmdCArPSAxOwogICAg
ICAgICAgICBvZmZzZXQudG9wICs9IHRhYmxlUm93Lm91dGVySGVpZ2h0KCk7CiAgICAgICAgICAg
IHBsb3Qub2Zmc2V0KG9mZnNldCk7CiAgICAgICAgICAgIHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcp
LmNzcyh7J3BhZGRpbmctYm90dG9tJzogcGxvdC5vdXRlckhlaWdodCgpICsgNX0pOwogICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Cn0KCmZ1bmN0aW9uIGluaXQoKSB7CiAg
ICAkLnRhYmxlc29ydGVyLmFkZFBhcnNlcih7CiAgICAgICAgaWQ6ICdjb21wYXJpc29uJywKICAg
ICAgICBpczogZnVuY3Rpb24ocykgewogICAgICAgICAgICByZXR1cm4gcy5pbmRleE9mKCd8Jykg
Pj0gMDsKICAgICAgICB9LAogICAgICAgIGZvcm1hdDogZnVuY3Rpb24ocykgewogICAgICAgICAg
ICB2YXIgcGFyc2VkID0gcGFyc2VGbG9hdChzLnN1YnN0cmluZyhzLmluZGV4T2YoJ3wnKSArIDEp
KTsKICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyAwIDogcGFyc2VkOwogICAgICAg
IH0sCiAgICAgICAgdHlwZTogJ251bWVyaWMnLAogICAgfSk7CgogICAgdmFyIHJ1bnMgPSBbXTsK
ICAgIHZhciBtZXRyaWNzID0ge307CiAgICAkLmVhY2goSlNPTi5wYXJzZShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnanNvbicpLnRleHRDb250ZW50KSwgZnVuY3Rpb24gKGluZGV4LCBlbnRyeSkg
ewogICAgICAgIHZhciBydW4gPSBuZXcgVGVzdFJ1bihlbnRyeSk7CiAgICAgICAgcnVucy5wdXNo
KHJ1bik7CgogICAgICAgIGZ1bmN0aW9uIGFkZFRlc3RzKHRlc3RzLCBwYXJlbnRGdWxsTmFtZSkg
ewogICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiB0ZXN0cykgewogICAgICAgICAgICAg
ICAgdmFyIGZ1bGxUZXN0TmFtZSA9IHBhcmVudEZ1bGxOYW1lICsgJy8nICsgdGVzdE5hbWU7CiAg
ICAgICAgICAgICAgICB2YXIgcmF3TWV0cmljcyA9IHRlc3RzW3Rlc3ROYW1lXS5tZXRyaWNzOwoK
ICAgICAgICAgICAgICAgIGZvciAodmFyIG1ldHJpY05hbWUgaW4gcmF3TWV0cmljcykgewogICAg
ICAgICAgICAgICAgICAgIHZhciBmdWxsTWV0cmljTmFtZSA9IGZ1bGxUZXN0TmFtZSArICc6JyAr
IG1ldHJpY05hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IG1ldHJpY3NbZnVs
bE1ldHJpY05hbWVdOwogICAgICAgICAgICAgICAgICAgIGlmICghbWV0cmljKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldHJpYyA9IG5ldyBQZXJmVGVzdE1ldHJpYyhmdWxsVGVzdE5hbWUs
IG1ldHJpY05hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzW2Z1bGxNZXRyaWNO
YW1lXSA9IG1ldHJpYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
bWV0cmljLmFkZFJlc3VsdChuZXcgVGVzdFJlc3VsdChtZXRyaWMsIHJhd01ldHJpY3NbbWV0cmlj
TmFtZV0uY3VycmVudCwgcnVuKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKHRlc3RzW3Rlc3ROYW1lXS50ZXN0cykKICAgICAgICAgICAgICAgICAgICBhZGRUZXN0cyh0
ZXN0c1t0ZXN0TmFtZV0udGVzdHMsIGZ1bGxUZXN0TmFtZSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIGFkZFRlc3RzKGVudHJ5LnRlc3RzLCAnJyk7CiAgICB9KTsKCiAgICB2YXIg
c2hvdWxkSWdub3JlTWVtb3J5PSB0cnVlOwogICAgdmFyIHJlZmVyZW5jZUluZGV4ID0gMDsKCiAg
ICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5j
ZUluZGV4KTsKCiAgICAkKCcjdGltZS1tZW1vcnknKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAo
ZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgc2hvdWxkSWdub3JlTWVtb3J5ID0gY2hl
Y2tlZEVsZW1lbnQudGV4dENvbnRlbnQgPT0gJ1RpbWUnOwogICAgICAgIGNyZWF0ZVRhYmxlKG1l
dHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7
CgogICAgcnVucy5tYXAoZnVuY3Rpb24gKHJ1biwgaW5kZXgpIHsKICAgICAgICAkKCcjcmVmZXJl
bmNlJykuYXBwZW5kKCc8c3BhbiB2YWx1ZT0iJyArIGluZGV4ICsgJyInICsgKGluZGV4ID09IHJl
ZmVyZW5jZUluZGV4ID8gJyBjbGFzcz0iY2hlY2tlZCInIDogJycpICsgJz4nICsgcnVuLmxhYmVs
KCkgKyAnPC9zcGFuPicpOwogICAgfSkKCiAgICAkKCcjcmVmZXJlbmNlJykuYmluZCgnY2hhbmdl
JywgZnVuY3Rpb24gKGV2ZW50LCBjaGVja2VkRWxlbWVudCkgewogICAgICAgIHJlZmVyZW5jZUlu
ZGV4ID0gcGFyc2VJbnQoY2hlY2tlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKTsKICAg
ICAgICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVy
ZW5jZUluZGV4KTsKICAgIH0pOwoKICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKGlu
ZGV4LCBjaGVja2JveCkgewogICAgICAgICQoY2hlY2tib3gpLmNoaWxkcmVuKCdzcGFuJykuY2xp
Y2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdj
aGVja2VkJykpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICQoY2hlY2tib3gp
LmNoaWxkcmVuKCdzcGFuJykucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJCh0
aGlzKS5hZGRDbGFzcygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKGNoZWNrYm94KS50cmlnZ2Vy
KCdjaGFuZ2UnLCAkKHRoaXMpKTsKICAgICAgICB9KTsKICAgIH0pOwp9Cgo8L3NjcmlwdD4KPHNj
cmlwdCBpZD0ianNvbiIgdHlwZT0iYXBwbGljYXRpb24vanNvbiI+W3sidGVzdHMiOiB7IkRyb21h
ZW8iOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9y
bWFuY2VUZXN0cy9Ecm9tYWVvIiwgInRlc3RzIjogeyJqc2xpYi1ldmVudC1qcXVlcnkiOiB7InVy
bCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0
cy9Ecm9tYWVvL2pzbGliLWV2ZW50LWpxdWVyeS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7
ImN1cnJlbnQiOiBbWzAuMDEwMjY4NTgxMzcwNjQwMzA1LCAwLjEyMzkzNzA1ODA4MTkzNDQyLCAw
LjEyNTg5MDY2MzIwMTc1NDMyLCAwLjEyNTkwNjk3NTUxMDA4Mjk4LCAwLjE1MDkxMjc1NTg4NzQ4
MjI2XSwgWzAuMDEwNjcyNzU3OTIxNTUzMzIsIDAuMTMzODkzMzUwMDU1MDc0NTUsIDAuMTM0MDA0
MjM1NjQ0MTUzMywgMC4xMzU5NzMyNzQ4MjUxOTkzLCAwLjE1MTY0NDc3NTA4ODEwNTI1XSwgWzAu
MDA5OTgyODg2MDcyMzg2NTA2LCAwLjEzMTk0ODQwNjE4MzkyNzAzLCAwLjEzNTAxNzcyMjI2ODEz
MjM2LCAwLjEzNTM4Mzg0MzQ5ODA4MjgsIDAuMTQ5Mzc5MjU0ODMzMzI4ODddLCBbMC4wMDk4MjM1
MjExNzUxODYzNywgMC4xMjY2MDc1NTQwNzczMzA2OCwgMC4xMjc2NzQ5OTA5MTQxODI1NSwgMC4x
MzI1NjcyMzY3Mzg3NjgyMiwgMC4xNDIzNjM3Njk0MDc0ODEzOF1dfX19fX19LCAiYnVpbGRUaW1l
IjogIjIwMTMtMTAtMTVUMTg6Mzg6MDUuNjA3Njc5IiwgInJldmlzaW9ucyI6IHsiV2ViS2l0Ijog
eyJ0aW1lc3RhbXAiOiAiMjAxMy0xMC0xNFQxODoyOTozNy40MTEyOTNaIiwgInJldmlzaW9uIjog
IjE1NzQxMCJ9fX0sIHsidGVzdHMiOiB7IkRyb21hZW8iOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvIiwgInRlc3Rz
IjogeyJqc2xpYi1ldmVudC1qcXVlcnkiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9Ecm9tYWVvL2pzbGliLWV2ZW50LWpxdWVy
eS5odG1sIiwgIm1ldHJpY3MiOiB7IlJ1bnMiOiB7ImN1cnJlbnQiOiBbWzAuMDA5MzE5OTc2Nzk0
MzA0OTcsIDAuMTU3NzkwNTA3MDQ1NjAzNTcsIDAuMTYyODI4NzM3MTgwMTcyNiwgMC4xNjI4Mjkw
ODkxNjA5NjkwOCwgMC4xNjQ4NzEwOTUyODcxOTAzOF0sIFswLjAxMDQzMjI2Mjk3Njk3ODk1OSwg
MC4xNzUzMzA5MDQ2NTU1MzUwNSwgMC4xODQ3Mjc0MjI0NDc3Njc1NSwgMC4xODUwNjk5NjgzNDU1
MjQyLCAwLjE4NzgxNzY3NjAxMjQ5NTcyXSwgWzAuMDEwMzIxMzU4NTMzNjM4NTIsIDAuMTc3NDc0
NzM2OTk1NjY3OTMsIDAuMTgxOTM4NjE3NDI5MjcyNTMsIDAuMTgyNDA0NzMzMzAyNjA2ODEsIDAu
MTgyODM5MTE5ODQzNzQxNjVdLCBbMC4wMDkyNTU5NzM1MDExMDE5NjMsIDAuMTY3ODU4NzkxNjYz
NzY3NzEsIDAuMTY4NDU0NjY5MjE0NjA3NzIsIDAuMTcwOTAyNTQxMDc0OTAxNDQsIDAuMTcxMTM3
MDQzMzIwNTMzNzhdXX19fX19fSwgImJ1aWxkVGltZSI6ICIyMDEzLTEwLTE1VDE4OjU5OjE0Ljgw
MDA5NCIsICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMTAtMTRU
MTg6Mzk6NDUuMjQ1NDYzWiIsICJyZXZpc2lvbiI6ICIxNTc0MTEifX19XTwvc2NyaXB0Pgo8L2Jv
ZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>