<?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>27698</bug_id>
          
          <creation_ts>2009-07-27 01:36:02 -0700</creation_ts>
          <short_desc>[V8] Database callbacks get wrong isolated world</short_desc>
          <delta_ts>2010-04-13 15:16:03 -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>
          <dependson>27533</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>ager</cc>
    
    <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dumi</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>jorlow</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134861</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-27 01:36:02 -0700</bug_when>
    <thetext>This looks broken from code inspection.  I haven&apos;t tested yet.

    Frame* frame = V8Proxy::retrieveFrame();
[...]
            callback = V8CustomSQLStatementCallback::create(args[2], frame);
[...]
    v8::Handle&lt;v8::Context&gt; context = V8Proxy::context(m_frame.get());

The callbacks should just hold onto a v8::Context.  Right now, they should get the v8::Context::GetCurrent() context.  (This is also wrong, but that&apos;s another bug.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134862</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-27 01:37:03 -0700</bug_when>
    <thetext>I&apos;d like the OwnHandle class from Bug 27533 before fixing this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195792</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-03 15:27:29 -0800</bug_when>
    <thetext>Bug 34726 shows how to do a this right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209935</commentid>
    <comment_count>3</comment_count>
      <attachid>52810</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-07 17:37:36 -0700</bug_when>
    <thetext>Created attachment 52810
patch

Apologies for uploading a huge patch: it&apos;s really just 1 change applied to 5 different locations.

Adam, please review the changes to the V8 bindings.
Gavin, please review the changes to the JSC bindings + ScriptController.{h|cpp}.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209937</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-07 17:41:25 -0700</bug_when>
    <thetext>Attachment 52810 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/js/ScriptController.cpp:172:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp:70:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bindings/js/ScriptController.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/storage/SQLTransactionErrorCallback.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 35 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>209957</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-07 18:11:19 -0700</bug_when>
    <thetext>Attachment 52810 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1694006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210468</commentid>
    <comment_count>6</comment_count>
      <attachid>52913</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-08 16:24:05 -0700</bug_when>
    <thetext>Created attachment 52913
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210473</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-08 16:33:58 -0700</bug_when>
    <thetext>Attachment 52913 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/1609345</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210541</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 19:15:05 -0700</bug_when>
    <thetext>Attachment 52913 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1671181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210558</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-08 22:19:03 -0700</bug_when>
    <thetext>So much copy/paste code.  :(

+ RefPtr&lt;Frame&gt; m_frame

I though we decided we wanted to hold a ScriptExecutionContext instead of a m_frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210690</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-04-09 05:36:09 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; So much copy/paste code.  :(
&gt; 
&gt; + RefPtr&lt;Frame&gt; m_frame
&gt; 
&gt; I though we decided we wanted to hold a ScriptExecutionContext instead of a
&gt; m_frame.

I was the one talking about eliminating it, but it&apos;s fairly easy for Dumi to fix now.

Dumi: Take a look at IDBCallbacks.h + V8CustomIDBCallbacks.h  It&apos;s really not much harder to use the ActiveDOMObject stuff rather than storing a ref to the Frame (which is incorrect for several reasons) and it&apos;ll allow you to get notifications when the frame is going away (so you shouldn&apos;t do the callback...and should probably cancel the transaction).

Whether or not you do that, I&apos;ll be trying to unify our callback code at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210783</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-04-09 10:04:11 -0700</bug_when>
    <thetext>JSC looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210919</commentid>
    <comment_count>12</comment_count>
      <attachid>52913</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 14:10:11 -0700</bug_when>
    <thetext>Comment on attachment 52913
patch

Looks like this breaks the mac and gtk builders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211096</commentid>
    <comment_count>13</comment_count>
      <attachid>53030</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-09 19:35:47 -0700</bug_when>
    <thetext>Created attachment 53030
patch

Same patch. Changed some #includes to make them similar in all callbacks. Should build on all ports now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211862</commentid>
    <comment_count>14</comment_count>
      <attachid>53030</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-12 23:01:07 -0700</bug_when>
    <thetext>Comment on attachment 53030
patch

I feel like this patch highlights a ton of redundant code that might be profitably refactored or autogenerated.  Thanks for updating the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212108</commentid>
    <comment_count>15</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-13 15:16:03 -0700</bug_when>
    <thetext>Landed as r57530.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52810</attachid>
            <date>2010-04-07 17:37:36 -0700</date>
            <delta_ts>2010-04-08 16:24:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>38978</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzI0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDQtMDcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIGFsbCBIVE1MNSBEQiBjYWxsYmFja3MgcnVuIGluIHRoZSBjb3JyZWN0IGNvbnRleHQu
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Njk4
CisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xh
dGVkLXdvcmxkLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2Uvc3RhdGVtZW50LXN1Y2Nlc3Mt
Y2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS90cmFu
c2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCisgICAgICAgICAgICAgICBzdG9y
YWdlL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6SlNDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFN0YXRlbWVu
dENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OkpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ2FsbGJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEYXRhYmFzZUNhbGxiYWNrOjpKU0RhdGFiYXNlQ2FsbGJhY2spOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVNR
TFN0YXRlbWVudENhbGxiYWNrOjpWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjpWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrOjpWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjazo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayk6
CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5oOgorCiAyMDEwLTA0LTA3ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoIGFuZCBEbWl0cnkgVGl0b3Yu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQg
KzM5LDE1IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIAorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotICAgIAorCiBKU0N1c3RvbVNRTFN0
YXRlbWVudENhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKEpTT2JqZWN0KiBj
YWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICA6IG1fZGF0YShu
ZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpCisgICAgLCBtX2lzb2xh
dGVkV29ybGQoU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCkpKQogewogfQotICAgIAorCiBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjp+
SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjaygpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChK
U0NhbGxiYWNrRGF0YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTsKQEAgLTU1LDE0ICs1NiwxOSBAQCBK
U0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjp+SlNDdXN0b21TCiAjZW5kaWYKIH0KIAotdm9p
ZCBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0LCBib29sJiByYWlzZWRFeGNl
cHRpb24pCit2b2lkIEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgU1FMUmVzdWx0U2V0KiByZXN1bHRTZXQsIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikKIHsKICAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICBSZWZQdHI8SlND
dXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTQzo6SlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRl
ZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRl
cHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIHRyYW5zYWN0aW9uKSk7CiAg
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGV4ZWMpLCByZXN1bHRTZXQpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA1NzE2MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxNSArNDUsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrLCBnbG9i
YWxPYmplY3QpKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIH5KU0N1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU1FMVHJhbnNh
Y3Rpb24qLCBTUUxSZXN1bHRTZXQqLCBib29sJiByYWlzZWRFeGNlcHRpb24pOworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rp
b24qLCBTUUxSZXN1bHRTZXQqLCBib29sJiByYWlzZWRFeGNlcHRpb24pOwogCiBwcml2YXRlOgog
ICAgIEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ss
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOworICAg
IFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKIH07CiAKIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxMSArNDAsMTIgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0gICAgCisKIEpTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrKEpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKICAgICA6IG1fZGF0YShuZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVj
dCkpCisgICAgLCBtX2lzb2xhdGVkV29ybGQoU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpKQogewogfQogCkBAIC01NiwxOCArNTcsMjMgQEAg
SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjp+SlNDdQogI2VuZGlmCiB9CiAKLWJv
b2wgSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikKK2Jvb2wgSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikK
IHsKICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgCisgICAgQVNTRVJUKGNvbnRleHQpOwor
CiAgICAgUmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0
aGlzKTsKLSAgICAgICAgCisKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9N
R2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOyAgLy8gaWYgd2UgY2Fubm90IGludm9r
ZSB0aGUgY2FsbGJhY2ssIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24KKworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFs
T2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCB0cmFuc2FjdGlvbikpOwogICAgIGFyZ3MuYXBwZW5k
KHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgZXJy
b3IpKTsKLSAgICAKKwogICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRp
b24pOwogICAgIGlmIChyYWlzZWRFeGNlcHRpb24pIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkocmV2
aXNpb24gNTcxNjApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSlNDYWxsYmFja0RhdGE7ICAgIAorY2xhc3MgSlNDYWxs
YmFja0RhdGE7CiBjbGFzcyBTUUxFcnJvcjsKLSAgICAKKwogY2xhc3MgSlNDdXN0b21TUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrIDogcHVibGljIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQpAQCAtNTAsMTcgKzUwLDE3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgfkpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpOwogCi0gICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9u
KiwgU1FMRXJyb3IqKTsKIAogcHJpdmF0ZToKICAgICBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAK
ICAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOworICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+
IG1faXNvbGF0ZWRXb3JsZDsKIH07Ci0gICAgCisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShEQVRB
QkFTRSkKIAogI2VuZGlmIC8vIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja19oCi0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxNSArNDIsMTYgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAK
KwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBjb3Vu
dGVyKCJKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2siKTsKICNlbmRpZgogCiBKU0N1c3Rv
bVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjayhK
U09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
OiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKQorICAg
ICwgbV9pc29sYXRlZFdvcmxkKFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpKSkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgY291bnRlci5pbmNy
ZW1lbnQoKTsKQEAgLTY2LDE5ICs2NywyNCBAQCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s6On5KU0N1c3RvCiAjZW5kaWYKIH0KIAotdm9pZCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCYgcmFp
c2VkRXhjZXB0aW9uKQordm9pZCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKQogewogICAgIEFTU0VSVChtX2RhdGEp
OworICAgIEFTU0VSVChjb250ZXh0KTsKIAogICAgIFJlZlB0cjxKU0N1c3RvbVNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7Ci0gICAgICAgIAorCiAgICAgSlNDOjpKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29y
bGQuZ2V0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgdHJhbnNhY3Rpb24pKTsKICAgICBt
X2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pOwogfQotICAgIAor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9u
IDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTMgKzUyLDE0IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB2aXJ0dWFsIH5KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2soKTsKLSAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBib29sJiByYWlz
ZWRFeGNlcHRpb24pOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbiosIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbik7CiAK
IHByaXZhdGU6CiAgICAgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKEpTQzo6SlNPYmpl
Y3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwogCiAgICAgSlNDYWxsYmFja0RhdGEq
IG1fZGF0YTsKKyAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNTcxNjApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDEyIEBACiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwotICAgIAorCiBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6SlNDdXN0
b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0
YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKKyAgICAsIG1faXNvbGF0ZWRXb3JsZChTY3JpcHRD
b250cm9sbGVyOjpjcmVhdGVXb3JsZChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSkpCiB7CiB9
CiAKQEAgLTU1LDE0ICs1NiwxOSBAQCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
azo6fkpTCiAjZW5kaWYKIH0KIAotdm9pZCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjazo6aGFuZGxlRXZlbnQoU1FMRXJyb3IqIGVycm9yKQordm9pZCBKU0N1c3RvbVNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFT
U0VSVChjb250ZXh0KTsKIAogICAgIFJlZlB0cjxKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmpl
Y3RGb3JQcm90b3R5cGUoZXhlYyksIGVycm9yKSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFj
ayhhcmdzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDU3MTYwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxNSArNDcsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhj
YWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB+SlND
dXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKTsKIAogcHJpdmF0ZToKICAgICBK
U0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFj
aywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCk7CiAKICAgICBKU0NhbGxiYWNrRGF0
YSogbV9kYXRhOworICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsK
IH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUNhbGxiYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDYWxsYmFjay5j
cHAJKHJldmlzaW9uIDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIEpTRGF0YWJhc2VDYWxsYmFjazo6SlNEYXRhYmFzZUNhbGxiYWNrKEpTT2JqZWN0
KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICA6IG1fZGF0
YShuZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpCi0gICAgLCBtX2lz
b2xhdGVkV29ybGQoRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIHRydWUpKQorICAgICwgbV9pc29sYXRlZFdvcmxkKFNjcmlwdENvbnRyb2xsZXI6OmNy
ZWF0ZVdvcmxkKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKSkKIHsKIH0KIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA1NzE2MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2Nyw5ICsxNjcsMTIgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLVBhc3NSZWZQdHI8
RE9NV3JhcHBlcldvcmxkPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVXb3JsZCgpCitQYXNzUmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoSlNHbG9i
YWxEYXRhKiBqc0dsb2JhbERhdGEpCiB7Ci0gICAgcmV0dXJuIElzb2xhdGVkV29ybGQ6OmNyZWF0
ZShKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgIGlmIChqc0dsb2JhbERh
dGEpCisgICAgICAgIHJldHVybiBJc29sYXRlZFdvcmxkOjpjcmVhdGUoanNHbG9iYWxEYXRhKTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBJc29sYXRlZFdvcmxkOjpjcmVhdGUoSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpn
ZXRBbGxXb3JsZHMoVmVjdG9yPERPTVdyYXBwZXJXb3JsZCo+JiB3b3JsZHMpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNTcxNjApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQCBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiBzdHJ1Y3QgTlBPYmplY3Q7CiAKIG5h
bWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworICAgIGNsYXNzIEpTR2xv
YmFsRGF0YTsKIAogICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAgICAgICAgIGNsYXNzIFJvb3RP
YmplY3Q7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBTY3JpcHRDb250cm9sbGVyKEZy
YW1lKik7CiAgICAgflNjcmlwdENvbnRyb2xsZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gY3JlYXRlV29ybGQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
T01XcmFwcGVyV29ybGQ+IGNyZWF0ZVdvcmxkKEpTQzo6SlNHbG9iYWxEYXRhKiBqc0dsb2JhbERh
dGEgPSAwKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJX
b3JsZCogd29ybGQpCiAgICAgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAJKHJldmlzaW9u
IDU3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6VjhDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFt
ZSkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxs
YmFjaykpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3Vy
cmVudFdvcmxkKQogewogfQogCkBAIC01MiwxNSArNTMsMTUgQEAgVjhDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjazo6flY4Q3VzdG9tUwogICAgIG1fY2FsbGJhY2suRGlzcG9zZSgpOwogfQogCi12
b2lkIFY4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgU1FMUmVzdWx0U2V0KiByZXN1bHRTZXQsIGJvb2wmIHJhaXNlZEV4
Y2VwdGlvbikKK3ZvaWQgVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBTUUxSZXN1bHRTZXQqIHJlc3VsdFNldCwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKQogewog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkpOwotICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgaWYgKHY4Q29u
dGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBzY29wZShjb250ZXh0KTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0
KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7CiAgICAgICAgIHRvVjgo
dHJhbnNhY3Rpb24pLApAQCAtNzcsNCArNzgsMyBAQCB2b2lkIFY4Q3VzdG9tU1FMU3RhdGVtZW50
Q2FsbGJhY2s6OmhhbmRsCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA1NzE2MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlNRTFN0
YXRlbWVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5j
bHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KQEAgLTUxLDEyICs1MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwg
flY4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCosIGJvb2wmIHJhaXNlZEV4Y2Vw
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCosIGJvb2wmIHJhaXNlZEV4Y2VwdGlv
bik7CiBwcml2YXRlOgogICAgIFY4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+LCBGcmFtZSopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
bV9jYWxsYmFjazsKICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CisgICAgV29ybGRDb250ZXh0
SGFuZGxlIG1fd29ybGRDb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1NzE2MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpWOEN1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJh
bWUpCiAgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2Fs
bGJhY2spKQogICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1
cnJlbnRXb3JsZCkKIHsKIH0KIApAQCAtNTIsMTUgKzUzLDE1IEBAIFY4Q3VzdG9tU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjazo6flY4Q3UKICAgICBtX2NhbGxiYWNrLkRpc3Bvc2UoKTsKIH0KIAot
Ym9vbCBWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQorYm9vbCBWOEN1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9y
KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkpOwot
ICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2
OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgaWYg
KHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29w
ZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKICAg
ICAgICAgdG9WOCh0cmFuc2FjdGlvbiksCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
aAkocmV2aXNpb24gNTcxNjApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
NyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaCIKLQotI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNp
bmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTMsMTIgKzUy
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNh
Y3Rpb24qLCBTUUxFcnJvciopOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciopOwogcHJpdmF0ZToK
ICAgICBWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+LCBGcmFtZSopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFj
azsKICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CisgICAgV29ybGRDb250ZXh0SGFuZGxlIG1f
d29ybGRDb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1NzE2MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrOjpWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCiAgICAgOiBtX2NhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQogICAgICwgbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KIApAQCAt
NTIsMTUgKzUzLDE1IEBAIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6flY4Q3VzdG8K
IH0KIAogCi12b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sJiByYWlzZWRFeGNlcHRpb24pCit2b2lk
IFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sJiBy
YWlzZWRFeGNlcHRpb24pCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0g
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9m
cmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250
ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3Zb
XSA9IHsKICAgICAgICAgdG9WOCh0cmFuc2FjdGlvbikKQEAgLTc5LDQgKzgwLDMgQEAgdm9pZCBW
OEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbgogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKLQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDU3MTYw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAi
V29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTUxLDEyICs1MiwxMyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgflY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFj
aygpOwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgYm9v
bCYgcmFpc2VkRXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9u
KTsKIHByaXZhdGU6CiAgICAgVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IG1fY2FsbGJhY2s7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworICAgIFdvcmxkQ29udGV4
dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MTYwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpWOEN1c3RvbVNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ss
IEZyYW1lKiBmcmFtZSkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV93b3JsZENv
bnRleHQoVXNlQ3VycmVudFdvcmxkKQogewogfQogCkBAIC01MSwxNSArNTIsMTUgQEAgVjhDdXN0
b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6On5WOAogICAgIG1fY2FsbGJhY2suRGlzcG9z
ZSgpOwogfQogCi12b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5k
bGVFdmVudChTUUxFcnJvciogZXJyb3IpCit2b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBT
UUxFcnJvciogZXJyb3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0g
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9m
cmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250
ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3Zb
XSA9IHsKICAgICAgICAgdG9WOChlcnJvcikKQEAgLTc1LDQgKzc2LDMgQEAgdm9pZCBWOEN1c3Rv
bVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjawogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKLQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1
NzE2MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTEs
MTMgKzUyLDE0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChT
UUxFcnJvciopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgU1FMRXJyb3IqKTsKIAogcHJpdmF0ZToKICAgICBWOEN1c3RvbVNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CiAKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFJlZlB0cjxGcmFtZT4g
bV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkocmV2
aXNpb24gNTcxNjApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyLDkgKzE3Miw5IEBAIGJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2Fs
bGJhY2soU1FMVHIKICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0
cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KICAgICBpZiAobV9lcnJvcikgewogICAgICAgICBB
U1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJy
b3IuZ2V0KCkpOworICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CiAgICAgfSBlbHNlIGlmICht
X3N0YXRlbWVudENhbGxiYWNrKQotICAgICAgICBtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCksIGNhbGxiYWNrRXJyb3IpOworICAg
ICAgICBtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQu
Z2V0KCksIGNhbGxiYWNrRXJyb3IpOwogCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNr
cywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBtX3N0YXRlbWVudENhbGxiYWNrID0g
MDsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA1
NzE2MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFzcyBT
UUxSZXN1bHRTZXQ7CiAKIGNsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrIDogcHVibGljIFRocmVh
ZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TUUxTdGF0ZW1lbnRDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVu
dChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCosIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqLCBib29sJiByYWlzZWRFeGNlcHRpb24p
ID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaAkocmV2aXNpb24gNTcxNjApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xh
c3MgU1FMVHJhbnNhY3Rpb247CiBjbGFzcyBTUUxFcnJvcjsKIAogY2xhc3MgU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwg
U1FMRXJyb3IqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA1NzE2MCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3
ICsyOTAsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiAKICAg
ICBpZiAobV9jYWxsYmFjaykgewogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsK
LSAgICAgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcywgc2hvdWxkRGVsaXZlckVycm9y
Q2FsbGJhY2spOworICAgICAgICBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNr
KTsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwogICAgIH0gZWxzZQogICAg
ICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IHRydWU7CkBAIC01NDUsNyArNTQ1LDcg
QEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRQogICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRo
ZSBsYXN0CiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9u
LgogICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spCi0gICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFu
ZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKKyAgICAgICAgbV9lcnJvckNhbGxi
YWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1f
dHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CiAKICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0
aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBm
b3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA1NzE2MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTEVycm9yOwogCiBjbGFzcyBTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uQ2FsbGJhY2so
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBib29s
JiByYWlzZWRFeGNlcHRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0
aW9uKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzE2MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAgICAgY2xhc3MgU1FMRXJyb3I7CiAKICAgICBjbGFzcyBTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaygpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQo
U1FMRXJyb3IqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKSA9IDA7CiAgICAgfTsKIAogfQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNTcyNDIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0wNyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3QgdGhhdCB0aGUgSFRNTDUgREIgY2FsbGJhY2tzIHJ1biBpbiB0aGUgY29ycmVjdCBj
b250ZXh0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzY5OAorCisgICAgICAgICogc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNv
bGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3N0YXRl
bWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxs
YmFjay1pc29sYXRlZC13b3JsZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3RyYW5z
YWN0aW9uLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xh
dGVkLXdvcmxkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS90cmFuc2Fj
dGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sOiBBZGRlZC4KKwogMjAxMC0w
NC0wNyAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1lcnJv
ci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1l
bnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK0FMRVJUOiB1bmRlZmluZWQKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0
IHRoZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3b3Js
ZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2st
aXNvbGF0ZWQtd29ybGQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0
YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQt
d29ybGQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxib2R5PgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdGhlIHN0YXRlbWVudCBlcnJv
ciBjYWxsYmFjayBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gZG9uZSgpCit7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrKHR4LCBlcnJvcikK
K3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iKTsKKyAgICBk
b25lKCk7Cit9CisKK2RvY3VtZW50LmJvZHkuZm9vID0gIkZBSUw6IGRvY3VtZW50LmJvZHkuZm9v
IHZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIjsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgMCwKKyAgICAgICAgImZ1bmN0aW9u
IHN0YXRlbWVudEVycm9yQ2FsbGJhY2sodHgsIGVycm9yKVxuIiArCisgICAgICAgICJ7XG4iICsK
KyAgICAgICAgIiAgICBhbGVydChkb2N1bWVudC5ib2R5LmZvbyk7XG4iICsKKyAgICAgICAgIiAg
ICB3aW5kb3cubG9jYXRpb249J2phdmFzY3JpcHQ6ZG9uZSgpJztcbiIgKworICAgICAgICAifVxu
IiArCisgICAgICAgICJ2YXIgZGIgPSBvcGVuRGF0YWJhc2UoJ1N0YXRlbWVudEVycm9yQ2FsbGJh
Y2tJc29sYXRlZFdvcmxkJywgJzEuMCcsICcnLCAxKTtcbiIgKworICAgICAgICAiZGIudHJhbnNh
Y3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAgICAgICAiICB0eC5leGVjdXRlU3FsKCdCQUQg
U1RBVEVNRU5UJywgW10sIGZ1bmN0aW9uKHR4LCBkYXRhKSB7fSwgc3RhdGVtZW50RXJyb3JDYWxs
YmFjayk7XG4iICsKKyAgICAgICAgIn0pOyIpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNr
LWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uvc3RhdGVtZW50LXN1Y2Nl
c3MtY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMgQEAKK0FMRVJUOiB1bmRlZmluZWQKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRoZSBz
dGF0ZW1lbnQgc3VjY2VzcyBjYWxsYmFjayBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlz
b2xhdGVkLXdvcmxkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0
ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRl
ZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+CitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IHN1
Y2Nlc3MgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKHR4LCBk
YXRhKQoreworICAgIGFsZXJ0KCJGQUlMOiBWaXNpYmxlIGluIGlzb2xhdGVkIHdvcmxkLiIpOwor
ICAgIGRvbmUoKTsKK30KKworZG9jdW1lbnQuYm9keS5mb28gPSAiRkFJTDogZG9jdW1lbnQuYm9k
eS5mb28gdmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iOworCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFz
ZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAgICAgICAwLAorICAgICAgICAiZnVu
Y3Rpb24gc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKHR4LCBkYXRhKVxuIiArCisgICAgICAgICJ7
XG4iICsKKyAgICAgICAgIiAgICBhbGVydChkb2N1bWVudC5ib2R5LmZvbyk7XG4iICsKKyAgICAg
ICAgIiAgICB3aW5kb3cubG9jYXRpb249J2phdmFzY3JpcHQ6ZG9uZSgpJztcbiIgKworICAgICAg
ICAifVxuIiArCisgICAgICAgICJ2YXIgZGIgPSBvcGVuRGF0YWJhc2UoJ1N0YXRlbWVudFN1Y2Nl
c3NDYWxsYmFja0lzb2xhdGVkV29ybGQnLCAnMS4wJywgJycsIDEpO1xuIiArCisgICAgICAgICJk
Yi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkge1xuIiArCisgICAgICAgICIgIHR4LmV4ZWN1dGVT
cWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpJywgW10sIHN0YXRl
bWVudFN1Y2Nlc3NDYWxsYmFjayk7XG4iICsKKyAgICAgICAgIn0pOyIpOworfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0aW9u
LWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0aW9uLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24t
Y2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKK0FMRVJUOiB1bmRlZmluZWQKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRoZSB0cmFu
c2FjdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0aW9uLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitUaGlzIHRl
c3QgdGVzdHMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSBy
aWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9u
IGRvbmUoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdHJhbnNh
Y3Rpb25DYWxsYmFjayh0eCkKK3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRl
ZCB3b3JsZC4iKTsKKyAgICBkb25lKCk7Cit9CisKK2RvY3VtZW50LmJvZHkuZm9vID0gIkZBSUw6
IGRvY3VtZW50LmJvZHkuZm9vIHZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIjsKKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNs
ZWFyQWxsRGF0YWJhc2VzKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgMCwK
KyAgICAgICAgImZ1bmN0aW9uIHRyYW5zYWN0aW9uQ2FsbGJhY2sodHgpXG4iICsKKyAgICAgICAg
IntcbiIgKworICAgICAgICAiICAgIGFsZXJ0KGRvY3VtZW50LmJvZHkuZm9vKTtcbiIgKworICAg
ICAgICAiICAgIHdpbmRvdy5sb2NhdGlvbj0namF2YXNjcmlwdDpkb25lKCknO1xuIiArCisgICAg
ICAgICJ9XG4iICsKKyAgICAgICAgInZhciBkYiA9IG9wZW5EYXRhYmFzZSgnVHJhbnNhY3Rpb25D
YWxsYmFja0lzb2xhdGVkV29ybGQnLCAnMS4wJywgJycsIDEpO1xuIiArCisgICAgICAgICJkYi50
cmFuc2FjdGlvbih0cmFuc2FjdGlvbkNhbGxiYWNrKTsiKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1j
YWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0
aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzIEBACitBTEVSVDogdW5kZWZpbmVkCitUaGlzIHRlc3QgdGVzdHMgdGhh
dCB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3
b3JsZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxs
YmFjay1pc29sYXRlZC13b3JsZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvdHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2st
aXNvbGF0ZWQtd29ybGQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdGhlIHRyYW5z
YWN0aW9uIGVycm9yIGNhbGxiYWNrIGlzIGNhbGxlZCBpbiB0aGUgcmlnaHQgd29ybGQuCis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayh0eCkKK3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iKTsK
KyAgICBkb25lKCk7Cit9CisKK2RvY3VtZW50LmJvZHkuZm9vID0gIkZBSUw6IGRvY3VtZW50LmJv
ZHkuZm9vIHZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIjsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJh
c2VzKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgMCwKKyAgICAgICAgImZ1
bmN0aW9uIHRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayh0eClcbiIgKworICAgICAgICAie1xuIiAr
CisgICAgICAgICIgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5mb28pO1xuIiArCisgICAgICAgICIg
ICAgd2luZG93LmxvY2F0aW9uPSdqYXZhc2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAgICAgIn1c
biIgKworICAgICAgICAidmFyIGRiID0gb3BlbkRhdGFiYXNlKCdUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2tJc29sYXRlZFdvcmxkJywgJzEuMCcsICcnLCAxKTtcbiIgKworICAgICAgICAiZGIudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAgICAgICAiICB0eC5leGVjdXRlU3FsKCdC
QUQgU1RBVEVNRU5UJywgW10sIGZ1bmN0aW9uKHR4LCBkYXRhKSB7fSwgZnVuY3Rpb24odHgsIGVy
cm9yKSB7IHJldHVybiB0cnVlOyB9KTtcbiIgKworICAgICAgICAifSwgdHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrKTsiKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="36403"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52913</attachid>
            <date>2010-04-08 16:24:05 -0700</date>
            <delta_ts>2010-04-09 19:35:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39768</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDQtMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIGFsbCBIVE1MNSBEQiBjYWxsYmFja3MgcnVuIGluIHRoZSBjb3JyZWN0IGNvbnRleHQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzY5OAor
CisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRl
ZC13b3JsZC5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNh
bGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvdHJhbnNh
Y3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFn
ZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OkpTQ3VzdG9tU1FMU3Rh
dGVtZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRD
YWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
U3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rp
b25DYWxsYmFjazo6SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
OjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6
VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3Rv
bVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6VjhDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6VjhD
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2Uv
U1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
Lmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6flNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayk6CisKIDIwMTAtMDQtMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1p
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENh
bGxiYWNrLmNwcAkocmV2aXNpb24gNTczMDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMSArMzIs
MjEgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU1NRTFJlc3VsdFNldC5oIgogI2lu
Y2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAK
KwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAKKwogSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxs
YmFjazo6SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJh
Y2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKQorICAgICwgbV9pc29sYXRlZFdvcmxkKGds
b2JhbE9iamVjdC0+d29ybGQoKSkKIHsKIH0KLSAgICAKKwogSlNDdXN0b21TUUxTdGF0ZW1lbnRD
YWxsYmFjazo6fkpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2soKQogewogICAgIGNhbGxPbk1h
aW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEsIG1fZGF0YSk7CkBAIC01NSwxNCAr
NTUsMTkgQEAgSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6fkpTQ3VzdG9tUwogI2VuZGlm
CiB9CiAKLXZvaWQgSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxSZXN1bHRTZXQqIHJlc3VsdFNldCwgYm9vbCYg
cmFpc2VkRXhjZXB0aW9uKQordm9pZCBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0LCBib29sJiByYWlzZWRFeGNlcHRp
b24pCiB7CiAgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKGNvbnRleHQpOwogCiAgICAg
UmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAg
ICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQs
IG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAg
IHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9K
UyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCB0cmFuc2Fj
dGlvbikpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVj
dEZvclByb3RvdHlwZShleGVjKSwgcmVzdWx0U2V0KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkocmV2aXNpb24gNTcz
MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTUgKzQ1LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjayhjYWxs
YmFjaywgZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCB+SlNDdXN0
b21TUUxTdGF0ZW1lbnRDYWxsYmFjaygpOwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50
KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNR
TFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsKIAog
cHJpdmF0ZToKICAgICBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKEpTQzo6SlNPYmplY3Qq
IGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwogCiAgICAgSlNDYWxsYmFja0RhdGEqIG1f
ZGF0YTsKKyAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7CiB9Owog
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTYgKzM1LDE2IEBACiAjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIK
ICNpbmNsdWRlICJKU1NRTEVycm9yLmgiCiAjaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvbi5oIgot
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICAKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAKKwogSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soSlNPYmplY3Qq
IGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV9kYXRh
KG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKKyAgICAsIG1faXNv
bGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxkKCkpCiB7CiB9CiAKQEAgLTU2LDE4ICs1Niwy
MyBAQCBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6On5KU0N1CiAjZW5kaWYKIH0K
IAotYm9vbCBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQorYm9vbCBKU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVy
cm9yKQogewogICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICAKKyAgICBBU1NFUlQoY29udGV4
dCk7CisKICAgICBSZWZQdHI8SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBwcm90
ZWN0KHRoaXMpOwotICAgICAgICAKKwogICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRv
SlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIHdlIGNhbm5vdCBp
bnZva2UgdGhlIGNhbGxiYWNrLCByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgdHJhbnNhY3Rpb24pKTsKICAgICBhcmdzLmFw
cGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyks
IGVycm9yKSk7Ci0gICAgCisKICAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhj
ZXB0aW9uKTsKICAgICBpZiAocmFpc2VkRXhjZXB0aW9uKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJ
KHJldmlzaW9uIDU3MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTQ2FsbGJhY2tEYXRhOyAgICAKK2NsYXNzIEpT
Q2FsbGJhY2tEYXRhOwogY2xhc3MgU1FMRXJyb3I7Ci0gICAgCisKIGNsYXNzIEpTQ3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTUwLDE3ICs1MCwxNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKik7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2Fj
dGlvbiosIFNRTEVycm9yKik7CiAKIHByaXZhdGU6CiAgICAgSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCop
OwogCiAgICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKKyAgICBSZWZQdHI8RE9NV3JhcHBlcldv
cmxkPiBtX2lzb2xhdGVkV29ybGQ7CiB9OwotICAgIAorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCiAKICNlbmRpZiAvLyBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tf
aAotCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMjEgKzM2LDIxIEBACiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJKU1NRTFRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0g
ICAgCisKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIg
Y291bnRlcigiSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrIik7CiAjZW5kaWYKIAogSlND
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkK
KyAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxkKCkpCiB7CiAjaWZuZGVm
IE5ERUJVRwogICAgIGNvdW50ZXIuaW5jcmVtZW50KCk7CkBAIC02NiwxOSArNjYsMjQgQEAgSlND
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjp+SlNDdXN0bwogI2VuZGlmCiB9CiAKLXZvaWQg
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikKK3ZvaWQgSlNDdXN0b21TUUxU
cmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wmIHJhaXNlZEV4Y2VwdGlv
bikKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICBS
ZWZQdHI8SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwotICAg
ICAgICAKKwogICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmpl
Y3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVj
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdz
LmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhl
YyksIHRyYW5zYWN0aW9uKSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCAmcmFp
c2VkRXhjZXB0aW9uKTsKIH0KLSAgICAKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNF
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEw
ICszMiwxMCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEpTT2JqZWN0OworY2xh
c3MgSlNPYmplY3Q7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUyLDEzICs1MiwxNCBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNh
bGxiYWNrKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBib29sJiByYWlz
ZWRFeGNlcHRpb24pOwogCiBwcml2YXRlOgogICAgIEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxs
YmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTsKIAogICAg
IEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7CisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9p
c29sYXRlZFdvcmxkOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDU3MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxMiBAQAogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAKKwogSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKEpTT2JqZWN0KiBj
YWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICA6IG1fZGF0YShu
ZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpCisgICAgLCBtX2lzb2xh
dGVkV29ybGQoZ2xvYmFsT2JqZWN0LT53b3JsZCgpKQogewogfQogCkBAIC01NSwxNCArNTYsMTkg
QEAgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6On5KUwogI2VuZGlmCiB9CiAK
LXZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNR
TEVycm9yKiBlcnJvcikKK3ZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTEVycm9yKiBl
cnJvcikKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKICAg
ICBSZWZQdHI8SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwor
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0
KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5h
cHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
LCBlcnJvcikpOwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncyk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTUgKzQ3LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soY2FsbGJhY2ssIGdsb2JhbE9iamVj
dCkpOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgfkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTEVy
cm9yKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFNRTEVycm9yKik7CiAKIHByaXZhdGU6CiAgICAgSlNDdXN0b21TUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpOwogCiAgICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKKyAgICBSZWZQ
dHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7CiB9OwogCiB9CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTczMDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBWOEN1c3RvbVNRTFN0YXRlbWVu
dENhbGxiYWNrOjpWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZyYW1lKQogICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCisg
ICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CiAKQEAgLTUyLDE1ICs1
MywxNSBAQCBWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjp+VjhDdXN0b21TCiAgICAgbV9j
YWxsYmFjay5EaXNwb3NlKCk7CiB9CiAKLXZvaWQgVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
azo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxSZXN1bHRTZXQq
IHJlc3VsdFNldCwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKQordm9pZCBWOEN1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0LCBi
b29sJiByYWlzZWRFeGNlcHRpb24pCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRl
eHQobV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQsIG1fd29y
bGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGFyZ3ZbXSA9IHsKICAgICAgICAgdG9WOCh0cmFuc2FjdGlvbiksCkBAIC03Nyw0ICs3OCwzIEBA
IHZvaWQgVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGwKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDU3
MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKERB
VEFCQVNFKQogCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJX
b3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTEsMTIgKzUyLDEzIEBAIHB1
YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjaygp
OwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVz
dWx0U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0
U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsKIHByaXZhdGU6CiAgICAgVjhDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CiAKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFJlZlB0cjxGcmFtZT4g
bV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHAJKHJldmlzaW9uIDU3MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s6OlY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQor
ICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQogewogfQogCkBAIC01MiwxNSAr
NTMsMTUgQEAgVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjp+VjhDdQogICAgIG1f
Y2FsbGJhY2suRGlzcG9zZSgpOwogfQogCi1ib29sIFY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJv
ciogZXJyb3IpCitib29sIFY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6
OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQs
IG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Cisg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gYXJndltdID0gewogICAgICAgICB0b1Y4KHRyYW5zYWN0aW9uKSwKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAj
aW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotCi0jaW5jbHVkZSAiU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5oIgog
I2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkBAIC01MywxMiArNTIsMTMgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0
dWFsIH5WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKik7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlv
biosIFNRTEVycm9yKik7CiBwcml2YXRlOgogICAgIFY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CiAKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
KyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3
MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OlY4Q3VzdG9tU1FMVHJh
bnNhY3Rpb25DYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBm
cmFtZSkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhj
YWxsYmFjaykpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV93b3JsZENvbnRleHQoVXNl
Q3VycmVudFdvcmxkKQogewogfQogCkBAIC01MiwxNSArNTMsMTUgQEAgVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrOjp+VjhDdXN0bwogfQogCiAKLXZvaWQgVjhDdXN0b21TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJv
b2wmIHJhaXNlZEV4Y2VwdGlvbikKK3ZvaWQgVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
OjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikKIHsKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gVjhQcm94eTo6Y29udGV4dChtX2ZyYW1lLmdldCgpKTsKLSAgICBpZiAoY29udGV4dC5J
c0VtcHR5KCkpCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENv
bnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOworICAgIGlmICh2OENvbnRleHQuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29u
dGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewogICAgICAgICB0b1Y4KHRyYW5zYWN0aW9u
KQpAQCAtNzksNCArODAsMyBAQCB2b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6
aGFuCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2suaAkocmV2aXNpb24gNTczMDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRl
IDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNTEsMTIgKzUyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhD
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBib29sJiByYWlzZWRFeGNlcHRpb24pOworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rp
b24qLCBib29sJiByYWlzZWRFeGNlcHRpb24pOwogcHJpdmF0ZToKICAgICBWOEN1c3RvbVNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBGcmFtZSopOwogCiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKICAgICBSZWZQdHI8RnJhbWU+
IG1fZnJhbWU7CisgICAgV29ybGRDb250ZXh0SGFuZGxlIG1fd29ybGRDb250ZXh0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmNwcAkocmV2aXNpb24gNTczMDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogVjhDdXN0b21TUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s6OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZyYW1lKQogICAgIDogbV9jYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKICAgICAsIG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CiAK
QEAgLTUxLDE1ICs1MiwxNSBAQCBWOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6
flY4CiAgICAgbV9jYWxsYmFjay5EaXNwb3NlKCk7CiB9CiAKLXZvaWQgVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTEVycm9yKiBlcnJvcikKK3ZvaWQg
VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTEVycm9yKiBlcnJvcikKIHsKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gVjhQcm94eTo6Y29udGV4dChtX2ZyYW1lLmdldCgpKTsKLSAgICBpZiAoY29udGV4dC5J
c0VtcHR5KCkpCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENv
bnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOworICAgIGlmICh2OENvbnRleHQuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29u
dGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewogICAgICAgICB0b1Y4KGVycm9yKQpAQCAt
NzUsNCArNzYsMyBAQCB2b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDU3MzAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRs
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01MSwxMyArNTIsMTQgQEAgcHVibGljOgogICAgIH0KICAg
ICB2aXJ0dWFsIH5WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwogCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTEVycm9yKik7CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciopOwogCiBwcml2YXRl
OgogICAgIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiwgRnJhbWUqKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2Fs
bGJhY2s7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworICAgIFdvcmxkQ29udGV4dEhhbmRs
ZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA1NzMwMykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOSArMTcyLDkgQEAgYm9v
bCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgogICAgIC8vIGJlY2F1c2UgdGhl
biB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgogICAg
IGlmIChtX2Vycm9yKSB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sp
OwotICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5k
bGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CisgICAgICAgIGNhbGxiYWNrRXJy
b3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9y
LmdldCgpKTsKICAgICB9IGVsc2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCi0gICAgICAgIG1f
c3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5n
ZXQoKSwgY2FsbGJhY2tFcnJvcik7CisgICAgICAgIG1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRs
ZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSwgY2FsbGJhY2tFcnJvcik7CiAKICAgICAv
LyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgog
ICAgIG1fc3RhdGVtZW50Q2FsbGJhY2sgPSAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDU3MzAzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxNCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIAogY2xhc3MgU1FMU3RhdGVt
ZW50Q2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudENhbGxiYWNrKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0
KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNl
dCosIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzMwMykKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDEzICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTEVy
cm9yOwogCiBjbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1
YWwgflNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciopID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwg
U1FMRXJyb3IqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAJKHJldmlzaW9uIDU3MzAzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkMKIAogICAgIGlmIChtX2NhbGxiYWNrKSB7CiAgICAgICAgIG1f
ZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbGxiYWNrLT5oYW5kbGVFdmVu
dCh0aGlzLCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayk7CisgICAgICAgIG1fY2FsbGJhY2st
PmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywg
c2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2spOwogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2Vk
ID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNr
ID0gdHJ1ZTsKQEAgLTU0NSw3ICs1NDUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVy
VHJhbnNhY3Rpb25FCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIElmIGV4aXN0cywgaW52
b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKICAgICAvLyBlcnJvciB0byBoYXZlIG9j
Y3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykKLSAg
ICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0
KCkpOworICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKIAogICAg
IG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVy
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDU3
MzAzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3Mg
U1FMRXJyb3I7CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U1FMVHJhbnNhY3Rpb25DYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChTUUxUcmFuc2FjdGlvbiosIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNh
Y3Rpb24qLCBib29sJiByYWlzZWRFeGNlcHRpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDU3
MzAzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgU1FMRXJyb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xh
c3MgU1FMRXJyb3I7CiAKLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygp
IHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7Ci0g
ICAgfTsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4geworcHVibGljOgorICAgIHZp
cnR1YWwgflNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKSA9IDA7Cit9
OwogCiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3MzAzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDQtMDggIER1bWl0cnUg
RGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IHRoYXQgdGhlIEhUTUw1IERCIGNhbGxiYWNrcyBy
dW4gaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3Njk4CisKKyAgICAgICAgKiBzdG9yYWdlL3N0YXRlbWVudC1l
cnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uvc3RhdGVtZW50LXN1Y2Nlc3MtY2FsbGJhY2staXNv
bGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3N0YXRl
bWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3RyYW5zYWN0aW9uLWNhbGxiYWNrLWlzb2xh
dGVkLXdvcmxkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvdHJhbnNhY3Rpb24tZXJy
b3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA0LTA4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW1F0XSByNTcyNzQgcmVtb3ZlZCBmYXN0L2Zvcm1zL3dpbGx2YWxpZGF0
ZS0wMDAuaHRtbCwKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNh
bGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1l
cnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNCBAQAorQUxFUlQ6IHVuZGVmaW5lZAorQUxFUlQ6IFBBU1M6IGRvY3VtZW50LmJv
ZHkuYmFyIHZpc2libGUgaW4gYSBjYWxsYmFjayBjcmVhdGVkIGluIHRoaXMgd29ybGQuCitUaGlz
IHRlc3QgdGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIGlzIGNhbGxlZCBp
biB0aGUgcmlnaHQgd29ybGQuCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvc3RhdGVtZW50
LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNh
bGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRo
ZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3b3JsZC4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciBzdGF0ZW1lbnRFcnJvckNh
bGxiYWNrc0ludm9rZWQgPSAwOworZnVuY3Rpb24gZG9uZSgpCit7CisgICAgaWYgKCgrK3N0YXRl
bWVudEVycm9yQ2FsbGJhY2tzSW52b2tlZCA9PSAyKSAmJiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSkKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrMSh0eCwgZXJyb3IpCit7CisgICAgYWxl
cnQoIkZBSUw6IFZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIik7CisgICAgZG9uZSgpOworfQor
CitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrMih0eCwgZXJyb3IpCit7CisgICAgYWxl
cnQoZG9jdW1lbnQuYm9keS5iYXIpOworICAgIGRvbmUoKTsKK30KKworZG9jdW1lbnQuYm9keS5m
b28gPSAiRkFJTDogZG9jdW1lbnQuYm9keS5mb28gdmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4i
OworZG9jdW1lbnQuYm9keS5iYXIgPSAiUEFTUzogZG9jdW1lbnQuYm9keS5iYXIgdmlzaWJsZSBp
biBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3JsZC4iOworCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRh
YmFzZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAgICAgICAwLAorICAgICAgICAi
ZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjazEodHgsIGVycm9yKVxuIiArCisgICAgICAg
ICJ7XG4iICsKKyAgICAgICAgIiAgICBhbGVydChkb2N1bWVudC5ib2R5LmZvbyk7XG4iICsKKyAg
ICAgICAgIiAgICB3aW5kb3cubG9jYXRpb249J2phdmFzY3JpcHQ6ZG9uZSgpJztcbiIgKworICAg
ICAgICAifVxuIiArCisgICAgICAgICJ2YXIgZGIxID0gb3BlbkRhdGFiYXNlKCdTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrSXNvbGF0ZWRXb3JsZDEnLCAnMS4wJywgJycsIDEpO1xuIiArCisgICAgICAg
ICJkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAgICAgICAiICAgIHR4LmV4
ZWN1dGVTcWwoJ0JBRCBTVEFURU1FTlQnLCBbXSwgZnVuY3Rpb24odHgsIGRhdGEpIHt9LCBzdGF0
ZW1lbnRFcnJvckNhbGxiYWNrMSk7XG4iICsKKyAgICAgICAgIn0pOyIpOworCisgICAgdmFyIGRi
MiA9IG9wZW5EYXRhYmFzZSgnU3RhdGVtZW50RXJyb3JDYWxsYmFja0lzb2xhdGVkV29ybGQyJywg
JzEuMCcsICcnLCAxKTsKKyAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAgdHguZXhlY3V0ZVNxbCgnQkFEIFNUQVRFTUVOVCcsIFtdLCBmdW5jdGlvbih0eCwgZGF0YSkg
e30sIHN0YXRlbWVudEVycm9yQ2FsbGJhY2syKTsKKyAgICB9KTsKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vz
cy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3Js
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRl
bWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0IEBACitBTEVSVDogdW5kZWZpbmVkCitBTEVSVDogUEFTUzogZG9j
dW1lbnQuYm9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3Js
ZC4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRoZSBzdGF0ZW1lbnQgc3VjY2VzcyBjYWxsYmFjayBp
cyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29s
YXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0
ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitUaGlzIHRl
c3QgdGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IHN1Y2Nlc3MgY2FsbGJhY2sgaXMgY2FsbGVkIGlu
IHRoZSByaWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3Zh
ciBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2tzSW52b2tlZCA9IDA7CitmdW5jdGlvbiBkb25lKCkK
K3sKKyAgICBpZiAoKCsrc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrc0ludm9rZWQgPT0gMikgJiYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNr
MSh0eCwgZGF0YSkKK3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRlZCB3b3Js
ZC4iKTsKKyAgICBkb25lKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFj
azIodHgsIGRhdGEpCit7CisgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5iYXIpOworICAgIGRvbmUo
KTsKK30KKworZG9jdW1lbnQuYm9keS5mb28gPSAiRkFJTDogZG9jdW1lbnQuYm9keS5mb28gdmlz
aWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iOworZG9jdW1lbnQuYm9keS5iYXIgPSAiUEFTUzogZG9j
dW1lbnQuYm9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3Js
ZC4iOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KAorICAgICAgICAwLAorICAgICAgICAiZnVuY3Rpb24gc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNr
MSh0eCwgZGF0YSlcbiIgKworICAgICAgICAie1xuIiArCisgICAgICAgICIgICAgYWxlcnQoZG9j
dW1lbnQuYm9keS5mb28pO1xuIiArCisgICAgICAgICIgICAgd2luZG93LmxvY2F0aW9uPSdqYXZh
c2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAgICAgIn1cbiIgKworICAgICAgICAidmFyIGRiMSA9
IG9wZW5EYXRhYmFzZSgnU3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrSXNvbGF0ZWRXb3JsZDEnLCAn
MS4wJywgJycsIDEpO1xuIiArCisgICAgICAgICJkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgp
IHtcbiIgKworICAgICAgICAiICAgIHR4LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIFRlc3QgKEZvbyBJTlQpJywgW10sIHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjazEpO1xu
IiArCisgICAgICAgICJ9KTsiKTsKKworICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2UoJ1N0YXRl
bWVudFN1Y2Nlc3NDYWxsYmFja0lzb2xhdGVkV29ybGQyJywgJzEuMCcsICcnLCAxKTsKKyAgICBk
YjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbCgnQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCknLCBbXSwgc3RhdGVtZW50U3Vj
Y2Vzc0NhbGxiYWNrMik7CisgICAgfSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQt
d29ybGQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdHJh
bnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13
b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQUxFUlQ6IHVu
ZGVmaW5lZAorQUxFUlQ6IFBBU1M6IGRvY3VtZW50LmJvZHkuYmFyIHZpc2libGUgaW4gYSBjYWxs
YmFjayBjcmVhdGVkIGluIHRoaXMgd29ybGQuCitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0aGUgdHJh
bnNhY3Rpb24gY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3b3JsZC4KKwpJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJh
Y2staXNvbGF0ZWQtd29ybGQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorVGhpcyB0
ZXN0IHRlc3RzIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCBpbiB0aGUg
cmlnaHQgd29ybGQuCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgdHJh
bnNhY3Rpb25DYWxsYmFja3NJbnZva2VkID0gMDsKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGlm
ICgoKyt0cmFuc2FjdGlvbkNhbGxiYWNrc0ludm9rZWQgPT0gMikgJiYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworZnVuY3Rpb24gdHJhbnNhY3Rpb25DYWxsYmFjazEodHgpCit7CisgICAgYWxlcnQo
IkZBSUw6IFZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIik7CisgICAgZG9uZSgpOworfQorCitm
dW5jdGlvbiB0cmFuc2FjdGlvbkNhbGxiYWNrMih0eCkKK3sKKyAgICBhbGVydChkb2N1bWVudC5i
b2R5LmJhcik7CisgICAgZG9uZSgpOworfQorCitkb2N1bWVudC5ib2R5LmZvbyA9ICJGQUlMOiBk
b2N1bWVudC5ib2R5LmZvbyB2aXNpYmxlIGluIGlzb2xhdGVkIHdvcmxkLiI7Citkb2N1bWVudC5i
b2R5LmJhciA9ICJQQVNTOiBkb2N1bWVudC5ib2R5LmJhciB2aXNpYmxlIGluIGEgY2FsbGJhY2sg
Y3JlYXRlZCBpbiB0aGlzIHdvcmxkLiI7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhckFsbERhdGFiYXNlcygpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoCisgICAgICAgIDAsCisgICAgICAgICJmdW5jdGlvbiB0cmFu
c2FjdGlvbkNhbGxiYWNrMSh0eClcbiIgKworICAgICAgICAie1xuIiArCisgICAgICAgICIgICAg
YWxlcnQoZG9jdW1lbnQuYm9keS5mb28pO1xuIiArCisgICAgICAgICIgICAgd2luZG93LmxvY2F0
aW9uPSdqYXZhc2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAgICAgIn1cbiIgKworICAgICAgICAi
dmFyIGRiMSA9IG9wZW5EYXRhYmFzZSgnVHJhbnNhY3Rpb25DYWxsYmFja0lzb2xhdGVkV29ybGQx
JywgJzEuMCcsICcnLCAxKTtcbiIgKworICAgICAgICAiZGIxLnRyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uQ2FsbGJhY2sxKTsiKTsKKworICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2UoJ1RyYW5zYWN0
aW9uQ2FsbGJhY2tJc29sYXRlZFdvcmxkMicsICcxLjAnLCAnJywgMSk7CisgICAgZGIyLnRyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uQ2FsbGJhY2syKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
c3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0aW9uLWVy
cm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0IEBACitBTEVSVDogdW5kZWZpbmVkCitBTEVSVDogUEFTUzogZG9jdW1lbnQuYm9k
eS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3JsZC4KK1RoaXMg
dGVzdCB0ZXN0cyB0aGF0IHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjayBpcyBjYWxsZWQg
aW4gdGhlIHJpZ2h0IHdvcmxkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3RyYW5zYWN0
aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3Js
ZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1l
cnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitUaGlzIHRlc3QgdGVzdHMg
dGhhdCB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdo
dCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciB0cmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2tzSW52b2tlZCA9IDA7CitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBp
ZiAoKCsrdHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrc0ludm9rZWQgPT0gMikgJiYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworZnVuY3Rpb24gdHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrMSh0eCkKK3sK
KyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iKTsKKyAgICBkb25l
KCk7Cit9CisKK2Z1bmN0aW9uIHRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazIodHgpCit7CisgICAg
YWxlcnQoZG9jdW1lbnQuYm9keS5iYXIpOworICAgIGRvbmUoKTsKK30KKworZG9jdW1lbnQuYm9k
eS5mb28gPSAiRkFJTDogZG9jdW1lbnQuYm9keS5mb28gdmlzaWJsZSBpbiBpc29sYXRlZCB3b3Js
ZC4iOworZG9jdW1lbnQuYm9keS5iYXIgPSAiUEFTUzogZG9jdW1lbnQuYm9keS5iYXIgdmlzaWJs
ZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3JsZC4iOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxE
YXRhYmFzZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAgICAgICAwLAorICAgICAg
ICAiZnVuY3Rpb24gdHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrMSh0eClcbiIgKworICAgICAgICAi
e1xuIiArCisgICAgICAgICIgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5mb28pO1xuIiArCisgICAg
ICAgICIgICAgd2luZG93LmxvY2F0aW9uPSdqYXZhc2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAg
ICAgIn1cbiIgKworICAgICAgICAidmFyIGRiMSA9IG9wZW5EYXRhYmFzZSgnVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrSXNvbGF0ZWRXb3JsZDEnLCAnMS4wJywgJycsIDEpO1xuIiArCisgICAgICAg
ICJkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAgICAgICAiICAgIHR4LmV4
ZWN1dGVTcWwoJ0JBRCBTVEFURU1FTlQnLCBbXSwgZnVuY3Rpb24odHgsIGRhdGEpIHt9LCBmdW5j
dGlvbih0eCwgZXJyb3IpIHsgcmV0dXJuIHRydWU7IH0pO1xuIiArCisgICAgICAgICJ9LCB0cmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2sxKTsiKTsKKworICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2Uo
J1RyYW5zYWN0aW9uRXJyb3JDYWxsYmFja2lzb2xhdGVkV29ybGQyJywgJzEuMCcsICcnLCAxKTsK
KyAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHguZXhlY3V0ZVNx
bCgnQkFEIFNUQVRFTUVOVCcsIFtdLCBmdW5jdGlvbih0eCwgZGF0YSkge30sIGZ1bmN0aW9uKHR4
LCBlcnJvcikgeyByZXR1cm4gdHJ1ZTsgfSk7CisgICAgfSwgdHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrMik7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="36525"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="36526"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53030</attachid>
            <date>2010-04-09 19:35:47 -0700</date>
            <delta_ts>2010-04-12 23:01:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>42291</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzM5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDQtMDkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIGFsbCBIVE1MNSBEQiBjYWxsYmFja3MgcnVuIGluIHRoZSBjb3JyZWN0IGNvbnRleHQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzY5OAor
CisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRl
ZC13b3JsZC5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNh
bGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvdHJhbnNh
Y3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFn
ZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OkpTQ3VzdG9tU1FMU3Rh
dGVtZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRD
YWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
U3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rp
b25DYWxsYmFjazo6SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
OjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6
VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3Rv
bVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6VjhDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6VjhD
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2Uv
U1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
Lmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6flNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayk6CisKIDIwMTAtMDQtMDkgIFlvdW5nIEhhbiBMZWUgIDxqb3licm9A
Y29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjEgKzMyLDIy
IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSlNTUUxSZXN1bHRTZXQuaCIKICNpbmNs
dWRlICJKU1NRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiB1c2luZyBuYW1lc3BhY2UgSlND
OwotICAgIAorCiBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrKEpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKICAgICA6IG1fZGF0YShuZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2Jh
bE9iamVjdCkpCisgICAgLCBtX2lzb2xhdGVkV29ybGQoZ2xvYmFsT2JqZWN0LT53b3JsZCgpKQog
ewogfQotICAgIAorCiBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjp+SlNDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjaygpCiB7CiAgICAgY2FsbE9uTWFpblRocmVhZChKU0NhbGxiYWNrRGF0
YTo6ZGVsZXRlRGF0YSwgbV9kYXRhKTsKQEAgLTU1LDE0ICs1NiwxOSBAQCBKU0N1c3RvbVNRTFN0
YXRlbWVudENhbGxiYWNrOjp+SlNDdXN0b21TCiAjZW5kaWYKIH0KIAotdm9pZCBKU0N1c3RvbVNR
TFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0LCBib29sJiByYWlzZWRFeGNlcHRpb24pCit2b2lk
IEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMUmVzdWx0
U2V0KiByZXN1bHRTZXQsIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQobV9k
YXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICBSZWZQdHI8SlNDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgp
KTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9i
YWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIHRyYW5zYWN0aW9uKSk7CiAgICAgYXJncy5hcHBl
bmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBy
ZXN1bHRTZXQpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA1NzM5MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxNSArNDUsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKTsK
ICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIH5KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNr
KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxS
ZXN1bHRTZXQqLCBib29sJiByYWlzZWRFeGNlcHRpb24pOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1
bHRTZXQqLCBib29sJiByYWlzZWRFeGNlcHRpb24pOwogCiBwcml2YXRlOgogICAgIEpTQ3VzdG9t
U1FMU3RhdGVtZW50Q2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CiAKICAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOworICAgIFJlZlB0cjxET01X
cmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUs
MTcgQEAKICNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgogI2luY2x1ZGUgIkpTU1FMRXJyb3Iu
aCIKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAKKwogSlNDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0
KSkKKyAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxkKCkpCiB7CiB9CiAK
QEAgLTU2LDE4ICs1NywyMyBAQCBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6On5K
U0N1CiAjZW5kaWYKIH0KIAotYm9vbCBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9y
KQorYm9vbCBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICAKKyAg
ICBBU1NFUlQoY29udGV4dCk7CisKICAgICBSZWZQdHI8SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwotICAgICAgICAKKwogICAgIEpTQzo6SlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxk
LmdldCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8v
IGlmIHdlIGNhbm5vdCBpbnZva2UgdGhlIGNhbGxiYWNrLCByb2xsIGJhY2sgdGhlIHRyYW5zYWN0
aW9uCisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhl
YywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgdHJhbnNhY3Rpb24p
KTsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQ
cm90b3R5cGUoZXhlYyksIGVycm9yKSk7Ci0gICAgCisKICAgICBib29sIHJhaXNlZEV4Y2VwdGlv
biA9IGZhbHNlOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhh
cmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKICAgICBpZiAocmFpc2VkRXhjZXB0aW9uKSB7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTYgKzMxLDE1IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmgiCiAjaW5jbHVkZSAiU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvUHJvdGVjdC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
SlNDYWxsYmFja0RhdGE7ICAgIAorY2xhc3MgSlNDYWxsYmFja0RhdGE7CiBjbGFzcyBTUUxFcnJv
cjsKLSAgICAKKwogY2xhc3MgSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIDogcHVi
bGljIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY3JlYXRlKEpTQzo6SlNP
YmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNTAs
MTcgKzQ5LDE3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkpTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjaygpOwogCi0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5z
YWN0aW9uKiwgU1FMRXJyb3IqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqKTsKIAogcHJpdmF0
ZToKICAgICBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soSlNDOjpKU09iamVjdCog
Y2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU0NhbGxiYWNrRGF0YSogbV9k
YXRhOworICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKIH07Ci0g
ICAgCisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKIAogI2VuZGlmIC8vIEpTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja19oCi0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlz
aW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyNCArMzMsMjMgQEAKIAogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKLSNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci0gICAgCisKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXIgY291bnRlcigiSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrIik7CiAjZW5kaWYKIAog
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0
KSkKKyAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxkKCkpCiB7CiAjaWZu
ZGVmIE5ERUJVRwogICAgIGNvdW50ZXIuaW5jcmVtZW50KCk7CkBAIC02NiwxOSArNjUsMjQgQEAg
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjp+SlNDdXN0bwogI2VuZGlmCiB9CiAKLXZv
aWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGJvb2wmIHJhaXNlZEV4Y2VwdGlvbikKK3ZvaWQgSlNDdXN0b21T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wmIHJhaXNlZEV4Y2Vw
dGlvbikKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CiAKICAg
ICBSZWZQdHI8SlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwot
ICAgICAgICAKKwogICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxP
YmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICBpZiAoIWdsb2JhbE9i
amVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBh
cmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUo
ZXhlYyksIHRyYW5zYWN0aW9uKSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCAm
cmFpc2VkRXhjZXB0aW9uKTsKIH0KLSAgICAKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFC
QVNFKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA1NzM5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDEyICszMSw5IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU09i
amVjdDsKLX0KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTUyLDEzICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+SlND
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGhh
bmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsKKworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJh
bnNhY3Rpb24qLCBib29sJiByYWlzZWRFeGNlcHRpb24pOwogCiBwcml2YXRlOgogICAgIEpTQ3Vz
dG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01H
bG9iYWxPYmplY3QqKTsKIAogICAgIEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7CisgICAgUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOwogfTsKIAogfQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDE2ICszNCwxNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFj
a0RhdGEuaCIKICNpbmNsdWRlICJKU1NRTEVycm9yLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICAKKwogSlNDdXN0
b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrKEpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICA6IG1fZGF0YShuZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9i
amVjdCkpCisgICAgLCBtX2lzb2xhdGVkV29ybGQoZ2xvYmFsT2JqZWN0LT53b3JsZCgpKQogewog
fQogCkBAIC01NSwxNCArNTYsMTkgQEAgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6On5KUwogI2VuZGlmCiB9CiAKLXZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KFNRTEVycm9yKiBlcnJvcikKK3ZvaWQgSlNDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNRTEVycm9yKiBlcnJvcikKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBB
U1NFUlQoY29udGV4dCk7CiAKICAgICBSZWZQdHI8SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7Cisg
ICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBlcnJvcikpOwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJh
Y2soYXJncyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzM5MykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOCBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
CisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUg
PHJ1bnRpbWUvUHJvdGVjdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ3LDE1ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKGNh
bGxiYWNrLCBnbG9iYWxPYmplY3QpKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIH5KU0N1
c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwotICAgIAotICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFdmVudChTUUxFcnJvciopOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciopOwogCiBwcml2YXRlOgogICAgIEpT
Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNr
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KTsKIAogICAgIEpTQ2FsbGJhY2tEYXRh
KiBtX2RhdGE7CisgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOwog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDYWxsYmFjay5oCShy
ZXZpc2lvbiA1NzM5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUNhbGxiYWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNl
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmgiCiAKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4U1FMUmVzdWx0U2V0Lmgi
CiAjaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlvbi5oIgpAQCAtNDQsNiArNDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpWOEN1c3RvbVNRTFN0
YXRlbWVudENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZy
YW1lKQogICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNh
bGxiYWNrKSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3dvcmxkQ29udGV4dChVc2VD
dXJyZW50V29ybGQpCiB7CiB9CiAKQEAgLTUyLDE1ICs1NCwxNSBAQCBWOEN1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrOjp+VjhDdXN0b21TCiAgICAgbV9jYWxsYmFjay5EaXNwb3NlKCk7CiB9CiAK
LXZvaWQgVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxSZXN1bHRTZXQqIHJlc3VsdFNldCwgYm9vbCYgcmFpc2Vk
RXhjZXB0aW9uKQordm9pZCBWOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIFNRTFJlc3VsdFNldCogcmVzdWx0U2V0LCBib29sJiByYWlzZWRFeGNlcHRpb24pCiB7
CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7Ci0gICAg
aWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhD
b250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdjg6OkNvbnRleHQ6OlNj
b3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRl
eHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKICAgICAgICAgdG9W
OCh0cmFuc2FjdGlvbiksCkBAIC03Nyw0ICs3OSwzIEBAIHZvaWQgVjhDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjazo6aGFuZGwKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFN0YXRlbWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw5ICszNCw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiU1FM
U3RhdGVtZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNp
bmNsdWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTEsMTIgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhD
dXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjaygpOwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9u
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsK
IHByaXZhdGU6CiAgICAgVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjayh2ODo6TG9jYWw8djg6
Ok9iamVjdD4sIEZyYW1lKik7CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2Nh
bGxiYWNrOwogICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5k
bGUgbV93b3JsZENvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlY4Q3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suaCIKICNpbmNsdWRlICJWOFNRTEVycm9yLmgiCiAjaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlv
bi5oIgpAQCAtNDQsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBWOEN1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s6OlY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayh2
ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKICAgICA6IG1fY2Fs
bGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBt
X2ZyYW1lKGZyYW1lKQorICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQogewog
fQogCkBAIC01MiwxNSArNTQsMTUgQEAgVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
Ojp+VjhDdQogICAgIG1fY2FsbGJhY2suRGlzcG9zZSgpOwogfQogCi1ib29sIFY4Q3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCitib29sIFY4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiB7CiAgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQu
SXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhD
b250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2Nv
cGUoY29udGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewogICAgICAgICB0b1Y4KHRyYW5z
YWN0aW9uKSwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA1NzM5
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBACiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotCi0j
aW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIldvcmxkQ29u
dGV4dEhhbmRsZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01MywxMiArNTIsMTMgQEAgcHVibGljOgog
ICAgIH0KICAgICB2aXJ0dWFsIH5WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9y
Kik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKik7CiBwcml2YXRlOgogICAgIFY4Q3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CiAK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFJlZlB0cjxG
cmFtZT4gbV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5j
cHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgogCiAjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJWOFNRTFRyYW5zYWN0aW9u
LmgiCiAKQEAgLTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogVjhDdXN0b21TUUxU
cmFuc2FjdGlvbkNhbGxiYWNrOjpWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sodjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCiAgICAgOiBtX2NhbGxiYWNr
KHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQogICAgICwgbV9mcmFt
ZShmcmFtZSkKKyAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KIApA
QCAtNTIsMTUgKzU0LDE1IEBAIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6flY4Q3Vz
dG8KIH0KIAogCi12b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZl
bnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sJiByYWlzZWRFeGNlcHRpb24pCit2
b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29s
JiByYWlzZWRFeGNlcHRpb24pCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQo
bV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRD
b250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgIHY4OjpDb250ZXh0
OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFy
Z3ZbXSA9IHsKICAgICAgICAgdG9WOCh0cmFuc2FjdGlvbikKQEAgLTc5LDQgKzgxLDMgQEAgdm9p
ZCBWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbgogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKLQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDU3
MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8djguaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUxLDEyICs1MSwxMyBAQCBwdWJs
aWM6CiAgICAgfQogICAgIHZpcnR1YWwgflY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjaygp
OwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgYm9vbCYg
cmFpc2VkRXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKTsK
IHByaXZhdGU6CiAgICAgVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiwgRnJhbWUqKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1f
Y2FsbGJhY2s7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOworICAgIFdvcmxkQ29udGV4dEhh
bmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiVjhD
dXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
Vm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhTUUxFcnJvci5oIgogCkBAIC00Myw2ICs0NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrOjpWOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQor
ICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQogewogfQogCkBAIC01MSwxNSAr
NTMsMTUgQEAgVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6On5WOAogICAgIG1f
Y2FsbGJhY2suRGlzcG9zZSgpOwogfQogCi12b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxFcnJvciogZXJyb3IpCit2b2lkIFY4Q3VzdG9tU1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTUUxFcnJvciogZXJyb3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJv
eHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQor
ICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNvbnRl
eHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKICAgICAgICAgdG9WOChlcnJvcikKQEAgLTc1LDQgKzc3LDMg
QEAgdm9pZCBWOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjawogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKLQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5oCShyZXZpc2lvbiA1NzM5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkg
KzM0LDkgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNs
dWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNTEsMTMgKzUxLDE0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+VjhDdXN0
b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChTUUxFcnJvciopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKTsKIAogcHJpdmF0ZToKICAgICBWOEN1c3RvbVNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7
CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERhdGFiYXNlQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gNTczOTMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsOCArMzYsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNp
bmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx2OC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudC5jcHAJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw5ICsxNzIsOSBAQCBib29sIFNRTFN0YXRl
bWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyCiAgICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQg
dG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCiAgICAgaWYgKG1fZXJy
b3IpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayk7Ci0gICAgICAg
IGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRy
YW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwog
ICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgbV9zdGF0ZW1lbnRD
YWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpLCBjYWxs
YmFja0Vycm9yKTsKKyAgICAgICAgbV9zdGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rp
b24sIG1fcmVzdWx0U2V0LmdldCgpLCBjYWxsYmFja0Vycm9yKTsKIAogICAgIC8vIE5vdyByZWxl
YXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgbV9zdGF0
ZW1lbnRDYWxsYmFjayA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJh
Y2suaAkocmV2aXNpb24gNTczOTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5z
YWN0aW9uOwogY2xhc3MgU1FMUmVzdWx0U2V0OwogCiBjbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFj
ayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudENhbGxiYWNrPiB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqLCBib29sJiBy
YWlzZWRFeGNlcHRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KiwgYm9vbCYg
cmFpc2VkRXhjZXB0aW9uKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDU3MzkzKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTMgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMRXJyb3I7CiAKIGNs
YXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChT
UUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciop
ID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNp
b24gNTczOTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRy
YW5zYWN0aW9uQwogCiAgICAgaWYgKG1fY2FsbGJhY2spIHsKICAgICAgICAgbV9leGVjdXRlU3Fs
QWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMsIHNo
b3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrKTsKKyAgICAgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZl
bnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCBzaG91bGREZWxp
dmVyRXJyb3JDYWxsYmFjayk7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsK
ICAgICB9IGVsc2UKICAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSB0cnVlOwpA
QCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlv
bkUKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3Ig
Y2FsbGJhY2sgd2l0aCB0aGUgbGFzdAogICAgIC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4g
dGhpcyB0cmFuc2FjdGlvbi4KICAgICBpZiAobV9lcnJvckNhbGxiYWNrKQotICAgICAgICBtX2Vy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CisgICAg
ICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwogCiAgICAgbV9uZXh0U3Rl
cCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
OwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gNTczOTMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMyArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFzcyBTUUxFcnJvcjsK
IAogY2xhc3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uKiwgYm9vbCYgcmFpc2VkRXhjZXB0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbiosIGJv
b2wmIHJhaXNlZEV4Y2VwdGlvbikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gNTczOTMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDEzICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBTUUxFcnJvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTUUxFcnJv
cjsKIAotICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJl
YWRTYWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTUUxFcnJvciopID0gMDsKLSAgICB9OworY2xh
c3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciopID0gMDsKK307CiAKIH0KIApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNTczOTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wNC0wOSAgRHVtaXRydSBEYW5pbGl1YyAg
PGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3QgdGhhdCB0aGUgSFRNTDUgREIgY2FsbGJhY2tzIHJ1biBpbiB0aGUg
Y29ycmVjdCBjb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjc2OTgKKworICAgICAgICAqIHN0b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNhbGxi
YWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3Js
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uvc3RhdGVtZW50LXN1Y2Nl
c3MtY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS90cmFuc2FjdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQu
aHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
dHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbDogQWRkZWQuCisK
IDIwMTAtMDQtMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvc3Rh
dGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29s
YXRlZC13b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQUxFUlQ6IHVuZGVmaW5lZAorQUxFUlQ6IFBB
U1M6IGRvY3VtZW50LmJvZHkuYmFyIHZpc2libGUgaW4gYSBjYWxsYmFjayBjcmVhdGVkIGluIHRo
aXMgd29ybGQuCitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IGVycm9yIGNhbGxi
YWNrIGlzIGNhbGxlZCBpbiB0aGUgcmlnaHQgd29ybGQuCisKSW5kZXg6IExheW91dFRlc3RzL3N0
b3JhZ2Uvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNv
bGF0ZWQtd29ybGQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uvc3Rh
dGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KK1RoaXMgdGVz
dCB0ZXN0cyB0aGF0IHRoZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRo
ZSByaWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciBz
dGF0ZW1lbnRFcnJvckNhbGxiYWNrc0ludm9rZWQgPSAwOworZnVuY3Rpb24gZG9uZSgpCit7Cisg
ICAgaWYgKCgrK3N0YXRlbWVudEVycm9yQ2FsbGJhY2tzSW52b2tlZCA9PSAyKSAmJiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSkKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrMSh0eCwgZXJy
b3IpCit7CisgICAgYWxlcnQoIkZBSUw6IFZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIik7Cisg
ICAgZG9uZSgpOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrMih0eCwgZXJy
b3IpCit7CisgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5iYXIpOworICAgIGRvbmUoKTsKK30KKwor
ZG9jdW1lbnQuYm9keS5mb28gPSAiRkFJTDogZG9jdW1lbnQuYm9keS5mb28gdmlzaWJsZSBpbiBp
c29sYXRlZCB3b3JsZC4iOworZG9jdW1lbnQuYm9keS5iYXIgPSAiUEFTUzogZG9jdW1lbnQuYm9k
eS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3JsZC4iOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAgICAg
ICAwLAorICAgICAgICAiZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjazEodHgsIGVycm9y
KVxuIiArCisgICAgICAgICJ7XG4iICsKKyAgICAgICAgIiAgICBhbGVydChkb2N1bWVudC5ib2R5
LmZvbyk7XG4iICsKKyAgICAgICAgIiAgICB3aW5kb3cubG9jYXRpb249J2phdmFzY3JpcHQ6ZG9u
ZSgpJztcbiIgKworICAgICAgICAifVxuIiArCisgICAgICAgICJ2YXIgZGIxID0gb3BlbkRhdGFi
YXNlKCdTdGF0ZW1lbnRFcnJvckNhbGxiYWNrSXNvbGF0ZWRXb3JsZDEnLCAnMS4wJywgJycsIDEp
O1xuIiArCisgICAgICAgICJkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAg
ICAgICAiICAgIHR4LmV4ZWN1dGVTcWwoJ0JBRCBTVEFURU1FTlQnLCBbXSwgZnVuY3Rpb24odHgs
IGRhdGEpIHt9LCBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrMSk7XG4iICsKKyAgICAgICAgIn0pOyIp
OworCisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZSgnU3RhdGVtZW50RXJyb3JDYWxsYmFja0lz
b2xhdGVkV29ybGQyJywgJzEuMCcsICcnLCAxKTsKKyAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rp
b24odHgpIHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbCgnQkFEIFNUQVRFTUVOVCcsIFtdLCBmdW5j
dGlvbih0eCwgZGF0YSkge30sIHN0YXRlbWVudEVycm9yQ2FsbGJhY2syKTsKKyAgICB9KTsKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9z
dGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitBTEVSVDogdW5kZWZpbmVkCitB
TEVSVDogUEFTUzogZG9jdW1lbnQuYm9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0
ZWQgaW4gdGhpcyB3b3JsZC4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRoZSBzdGF0ZW1lbnQgc3Vj
Y2VzcyBjYWxsYmFjayBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgorCkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vz
cy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9zdGF0ZW1lbnQtc3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGJvZHk+CitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IHN1Y2Nlc3MgY2FsbGJh
Y2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KK3ZhciBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2tzSW52b2tlZCA9IDA7Citm
dW5jdGlvbiBkb25lKCkKK3sKKyAgICBpZiAoKCsrc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrc0lu
dm9rZWQgPT0gMikgJiYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50
U3VjY2Vzc0NhbGxiYWNrMSh0eCwgZGF0YSkKK3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBp
biBpc29sYXRlZCB3b3JsZC4iKTsKKyAgICBkb25lKCk7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVu
dFN1Y2Nlc3NDYWxsYmFjazIodHgsIGRhdGEpCit7CisgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5i
YXIpOworICAgIGRvbmUoKTsKK30KKworZG9jdW1lbnQuYm9keS5mb28gPSAiRkFJTDogZG9jdW1l
bnQuYm9keS5mb28gdmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4iOworZG9jdW1lbnQuYm9keS5i
YXIgPSAiUEFTUzogZG9jdW1lbnQuYm9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0
ZWQgaW4gdGhpcyB3b3JsZC4iOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKAorICAgICAgICAwLAorICAgICAgICAiZnVuY3Rpb24gc3RhdGVtZW50
U3VjY2Vzc0NhbGxiYWNrMSh0eCwgZGF0YSlcbiIgKworICAgICAgICAie1xuIiArCisgICAgICAg
ICIgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5mb28pO1xuIiArCisgICAgICAgICIgICAgd2luZG93
LmxvY2F0aW9uPSdqYXZhc2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAgICAgIn1cbiIgKworICAg
ICAgICAidmFyIGRiMSA9IG9wZW5EYXRhYmFzZSgnU3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrSXNv
bGF0ZWRXb3JsZDEnLCAnMS4wJywgJycsIDEpO1xuIiArCisgICAgICAgICJkYjEudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHtcbiIgKworICAgICAgICAiICAgIHR4LmV4ZWN1dGVTcWwoJ0NSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpJywgW10sIHN0YXRlbWVudFN1Y2Nl
c3NDYWxsYmFjazEpO1xuIiArCisgICAgICAgICJ9KTsiKTsKKworICAgIHZhciBkYjIgPSBvcGVu
RGF0YWJhc2UoJ1N0YXRlbWVudFN1Y2Nlc3NDYWxsYmFja0lzb2xhdGVkV29ybGQyJywgJzEuMCcs
ICcnLCAxKTsKKyAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHgu
ZXhlY3V0ZVNxbCgnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCknLCBb
XSwgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrMik7CisgICAgfSk7Cit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tY2Fs
bGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxs
YmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NCBAQAorQUxFUlQ6IHVuZGVmaW5lZAorQUxFUlQ6IFBBU1M6IGRvY3VtZW50LmJvZHkuYmFyIHZp
c2libGUgaW4gYSBjYWxsYmFjayBjcmVhdGVkIGluIHRoaXMgd29ybGQuCitUaGlzIHRlc3QgdGVz
dHMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgaXMgY2FsbGVkIGluIHRoZSByaWdodCB3
b3JsZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1jYWxsYmFjay1p
c29sYXRlZC13b3JsZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdHJh
bnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5PgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIGlz
IGNhbGxlZCBpbiB0aGUgcmlnaHQgd29ybGQuCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQ+Cit2YXIgdHJhbnNhY3Rpb25DYWxsYmFja3NJbnZva2VkID0gMDsKK2Z1bmN0aW9uIGRv
bmUoKQoreworICAgIGlmICgoKyt0cmFuc2FjdGlvbkNhbGxiYWNrc0ludm9rZWQgPT0gMikgJiYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdHJhbnNhY3Rpb25DYWxsYmFjazEodHgp
Cit7CisgICAgYWxlcnQoIkZBSUw6IFZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuIik7CisgICAg
ZG9uZSgpOworfQorCitmdW5jdGlvbiB0cmFuc2FjdGlvbkNhbGxiYWNrMih0eCkKK3sKKyAgICBh
bGVydChkb2N1bWVudC5ib2R5LmJhcik7CisgICAgZG9uZSgpOworfQorCitkb2N1bWVudC5ib2R5
LmZvbyA9ICJGQUlMOiBkb2N1bWVudC5ib2R5LmZvbyB2aXNpYmxlIGluIGlzb2xhdGVkIHdvcmxk
LiI7Citkb2N1bWVudC5ib2R5LmJhciA9ICJQQVNTOiBkb2N1bWVudC5ib2R5LmJhciB2aXNpYmxl
IGluIGEgY2FsbGJhY2sgY3JlYXRlZCBpbiB0aGlzIHdvcmxkLiI7CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhckFsbERh
dGFiYXNlcygpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCisgICAgICAgIDAsCisgICAgICAg
ICJmdW5jdGlvbiB0cmFuc2FjdGlvbkNhbGxiYWNrMSh0eClcbiIgKworICAgICAgICAie1xuIiAr
CisgICAgICAgICIgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5mb28pO1xuIiArCisgICAgICAgICIg
ICAgd2luZG93LmxvY2F0aW9uPSdqYXZhc2NyaXB0OmRvbmUoKSc7XG4iICsKKyAgICAgICAgIn1c
biIgKworICAgICAgICAidmFyIGRiMSA9IG9wZW5EYXRhYmFzZSgnVHJhbnNhY3Rpb25DYWxsYmFj
a0lzb2xhdGVkV29ybGQxJywgJzEuMCcsICcnLCAxKTtcbiIgKworICAgICAgICAiZGIxLnRyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uQ2FsbGJhY2sxKTsiKTsKKworICAgIHZhciBkYjIgPSBvcGVuRGF0
YWJhc2UoJ1RyYW5zYWN0aW9uQ2FsbGJhY2tJc29sYXRlZFdvcmxkMicsICcxLjAnLCAnJywgMSk7
CisgICAgZGIyLnRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ2FsbGJhY2syKTsKK30KKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlv
bi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRl
ZC13b3JsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitBTEVSVDogdW5kZWZpbmVkCitBTEVSVDogUEFT
UzogZG9jdW1lbnQuYm9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhp
cyB3b3JsZC4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxs
YmFjayBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IHdvcmxkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CitU
aGlzIHRlc3QgdGVzdHMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgaXMgY2Fs
bGVkIGluIHRoZSByaWdodCB3b3JsZC4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dD4KK3ZhciB0cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2tzSW52b2tlZCA9IDA7CitmdW5jdGlvbiBk
b25lKCkKK3sKKyAgICBpZiAoKCsrdHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrc0ludm9rZWQgPT0g
MikgJiYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrMSh0eCkKK3sKKyAgICBhbGVydCgiRkFJTDogVmlzaWJsZSBpbiBpc29sYXRlZCB3b3Js
ZC4iKTsKKyAgICBkb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
azIodHgpCit7CisgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5iYXIpOworICAgIGRvbmUoKTsKK30K
KworZG9jdW1lbnQuYm9keS5mb28gPSAiRkFJTDogZG9jdW1lbnQuYm9keS5mb28gdmlzaWJsZSBp
biBpc29sYXRlZCB3b3JsZC4iOworZG9jdW1lbnQuYm9keS5iYXIgPSAiUEFTUzogZG9jdW1lbnQu
Ym9keS5iYXIgdmlzaWJsZSBpbiBhIGNhbGxiYWNrIGNyZWF0ZWQgaW4gdGhpcyB3b3JsZC4iOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAg
ICAgICAwLAorICAgICAgICAiZnVuY3Rpb24gdHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrMSh0eClc
biIgKworICAgICAgICAie1xuIiArCisgICAgICAgICIgICAgYWxlcnQoZG9jdW1lbnQuYm9keS5m
b28pO1xuIiArCisgICAgICAgICIgICAgd2luZG93LmxvY2F0aW9uPSdqYXZhc2NyaXB0OmRvbmUo
KSc7XG4iICsKKyAgICAgICAgIn1cbiIgKworICAgICAgICAidmFyIGRiMSA9IG9wZW5EYXRhYmFz
ZSgnVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrSXNvbGF0ZWRXb3JsZDEnLCAnMS4wJywgJycsIDEp
O1xuIiArCisgICAgICAgICJkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHtcbiIgKworICAg
ICAgICAiICAgIHR4LmV4ZWN1dGVTcWwoJ0JBRCBTVEFURU1FTlQnLCBbXSwgZnVuY3Rpb24odHgs
IGRhdGEpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsgcmV0dXJuIHRydWU7IH0pO1xuIiArCisg
ICAgICAgICJ9LCB0cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sxKTsiKTsKKworICAgIHZhciBkYjIg
PSBvcGVuRGF0YWJhc2UoJ1RyYW5zYWN0aW9uRXJyb3JDYWxsYmFja0lzb2xhdGVkV29ybGQyJywg
JzEuMCcsICcnLCAxKTsKKyAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAgdHguZXhlY3V0ZVNxbCgnQkFEIFNUQVRFTUVOVCcsIFtdLCBmdW5jdGlvbih0eCwgZGF0YSkg
e30sIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyByZXR1cm4gdHJ1ZTsgfSk7CisgICAgfSwgdHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrMik7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="36678"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="36679"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>