<?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>79630</bug_id>
          
          <creation_ts>2012-02-26 23:12:44 -0800</creation_ts>
          <short_desc>[Refactoring] Extract RenderBlock::updateFirstLetter() to FirstLetterUpdater class.</short_desc>
          <delta_ts>2012-03-12 18:10:51 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mitz</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>565362</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-26 23:12:44 -0800</bug_when>
    <thetext>There are several  static function which is only used in a big function called updateFirstLetter().
That can be taken as a signal of should-be-a-class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565379</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-26 23:30:22 -0800</bug_when>
    <thetext>OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565421</commentid>
    <comment_count>2</comment_count>
      <attachid>128974</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-27 00:06:24 -0800</bug_when>
    <thetext>Created attachment 128974
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565438</commentid>
    <comment_count>3</comment_count>
      <attachid>128978</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-27 00:47:55 -0800</bug_when>
    <thetext>Created attachment 128978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565484</commentid>
    <comment_count>4</comment_count>
      <attachid>128988</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-27 02:02:11 -0800</bug_when>
    <thetext>Created attachment 128988
Patch for for 72440, mistakenly attached here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565540</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 03:11:38 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 128988:

inspector/protocol/console-agent.html bug 79563 (authors: caseq@chromium.org, loislo@chromium.org, and pfeldman@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565542</commentid>
    <comment_count>6</comment_count>
      <attachid>128988</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 03:14:01 -0800</bug_when>
    <thetext>Comment on attachment 128988
Patch for for 72440, mistakenly attached here

Clearing flags on attachment: 128988

Committed r108980: &lt;http://trac.webkit.org/changeset/108980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565543</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 03:14:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565642</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-02-27 07:35:17 -0800</bug_when>
    <thetext>Reopening, the patch for bug 72440 was attached for landing (with the wrong bug number in the ChangeLog which is why it ended up here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565804</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-27 10:43:26 -0800</bug_when>
    <thetext>Why is this an improvement? &quot;Updater&quot; is not even a word that describes an entity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566073</commentid>
    <comment_count>10</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-27 16:14:59 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Why is this an improvement? &quot;Updater&quot; is not even a word that describes an entity.

This is an effort to split this giant class into smaller pieces. 
And updateFirstLetter() looks a good candidate for such split-out because 

- it has associated static functions which is used only from updateFirstLetter() and
- it method has such many lines.

But you&apos;re right. Updater doesn&apos;t look a good name.
I&apos;ll come back once the big picture of this kind of refactoring becomes clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576254</commentid>
    <comment_count>11</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-03-12 10:38:00 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Why is this an improvement? &quot;Updater&quot; is not even a word that describes an entity.
&gt; 
&gt; This is an effort to split this giant class into smaller pieces. 
&gt; And updateFirstLetter() looks a good candidate for such split-out because 
&gt; 
&gt; - it has associated static functions which is used only from updateFirstLetter() and
&gt; - it method has such many lines.
&gt; 
&gt; But you&apos;re right. Updater doesn&apos;t look a good name.
&gt; I&apos;ll come back once the big picture of this kind of refactoring becomes clearer.

Hajime,
I have been working in a not so intrusive changes for updateFirstLetter:

https://bugs.webkit.org/show_bug.cgi?id=80772</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576839</commentid>
    <comment_count>12</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-12 18:10:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; Why is this an improvement? &quot;Updater&quot; is not even a word that describes an entity.
&gt; &gt; 
&gt; &gt; This is an effort to split this giant class into smaller pieces. 
&gt; &gt; And updateFirstLetter() looks a good candidate for such split-out because 
&gt; &gt; 
&gt; &gt; - it has associated static functions which is used only from updateFirstLetter() and
&gt; &gt; - it method has such many lines.
&gt; &gt; 
&gt; &gt; But you&apos;re right. Updater doesn&apos;t look a good name.
&gt; &gt; I&apos;ll come back once the big picture of this kind of refactoring becomes clearer.
&gt; 
&gt; Hajime,
&gt; I have been working in a not so intrusive changes for updateFirstLetter:
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=80772
Igor, thanks for letting me know  this! It looks good.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128974</attachid>
            <date>2012-02-27 00:06:24 -0800</date>
            <delta_ts>2012-02-27 00:47:48 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-79630-20120227170623.patch</filename>
            <type>text/plain</type>
            <size>36712</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmE0OWUwYjJhZmVhNjI0
MmQzYzc0ODg3YTQ5YTI2YmZiMWE2NjM3Ni4uYTEwMDI0ZTU5MWQ2NDMyOTIzY2UxZWViNDFhMTQ0
ZWU2OGM0M2JjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAyLTI2ICBNT1JJ
VEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtSZWZhY3RvcmluZ10g
RXh0cmFjdCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKSB0byBGaXJzdExldHRlclVw
ZGF0ZXIgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gTm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHJlbmRlcmluZy9G
aXJzdExldHRlclVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNob3VsZFNraXBGb3JGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZv
ckZpcnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2FmZVRvQ3JlYXRlRmlyc3RMZXR0
ZXJSZW5kZXJlck9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpcnN0TGV0dGVyVXBkYXRlcjo6Zmlu
ZEZpcnN0TGV0dGVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Rmlyc3RMZXR0ZXJVcGRhdGVy
Ojp1cGRhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9GaXJzdExldHRlclVwZGF0ZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZpcnN0TGV0dGVyVXBkYXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaXJzdExldHRlclVwZGF0ZXI6OkZpcnN0TGV0dGVyVXBkYXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpzaG91bGRVcGRhdGVGaXJzdExldHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRh
dGVNYXJrZXJMb2NhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4u
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5n
QWxsSW5PbmUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuaDoKKyAgICAgICAgKFJlbmRlclNWR1RleHQpOgorCiAyMDEyLTAyLTI2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXIgc2hvdWxkIGxpdmUgaW4gaXRzIG93biBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGZl
Y2E5ZjM3YjYyMGU2OGVhYjg3YjcyY2FlNzg5NTk0ZDhiZDliNWIuLjhjMGUwOTMzNTQwNGEyYmI5
YzM1M2VkOWVkMjgzNDYwOTJiYTA4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjczLDYg
KzEyNzMsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2Rl
LmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKICAgICByZW5kZXJpbmcvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuY3BwCisgICAgcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5jcHAK
ICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKICAgICByZW5kZXJpbmcvSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQ4OGI5NmI3MjFhNWI0NDg1NmM0N2Y0
N2U3NmFiNmMyODVmYzAzZi4uZmRhOWFmNDEyNmQ2OTQyZWYzZGJlNDczMWIxNzAzYzU4YzhjYzYw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zNDY4LDYgKzM0NjgsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExldHRlclVwZGF0ZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR2Fw
UmVjdHMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYzYzZWE4OTY2ZjQwZWZhYjVjYzc1N2Q3NzAwOGI5
YjFmNWQ2NDYwLi5lODAxODhhNmM3ZDQyMzM2MmVlOGExOTZlZTIwYmNjZWY5M2FkNDNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTExOTQsNiArMTE5NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmlu
Zy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogICAg
IHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAorICAgIHJlbmRlcmluZy9GaXJz
dExldHRlclVwZGF0ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAg
XAogICAgIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwIFwKICAgICByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg0NzkzOTFjODg5
MjYxMDJkODk0YjM0OGQ2NzA0ZDBhYmQ1NTNlNjEuLmE5MjQ3ZTc5MDMxZmYyYmIyMDAwNDFmZGI0
M2E1ODY2OTdjZTVhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ3Nyw2ICs0NzcsOCBAQAogICAg
ICAgICAgICAgJ3BsdWdpbnMvbnBydW50aW1lLmgnLAogICAgICAgICAgICAgJ3BsdWdpbnMvbnB0
eXBlcy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvQ29sdW1uSW5mby5oJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9GaXJzdExldHRlclVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvR2Fw
UmVjdHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0hpdFRlc3RSZXF1ZXN0LmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTkyNzNiMmQ4
ZTllZDQzZGQxZmMxMWM4MmNiZjlhNTA2ZTA2NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5jcHAKQEAgLTAsMCArMSwyNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29t
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpcnN0TGV0dGVyVXBkYXRlci5o
IgorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIENTUyAyLjEgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc2VsZWN0b3IuaHRtbCNm
aXJzdC1sZXR0ZXIKKy8vICJQdW5jdHVhdGlvbiAoaS5lLCBjaGFyYWN0ZXJzIGRlZmluZWQgaW4g
VW5pY29kZSBbVU5JQ09ERV0gaW4gdGhlICJvcGVuIiAoUHMpLCAiY2xvc2UiIChQZSksCisvLyAi
aW5pdGlhbCIgKFBpKS4gImZpbmFsIiAoUGYpIGFuZCAib3RoZXIiIChQbykgcHVuY3R1YXRpb24g
Y2xhc3NlcyksIHRoYXQgcHJlY2VkZXMgb3IgZm9sbG93cyB0aGUgZmlyc3QgbGV0dGVyIHNob3Vs
ZCBiZSBpbmNsdWRlZCIKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RM
ZXR0ZXIoVUNoYXIgYykKK3sKKyAgICBDaGFyQ2F0ZWdvcnkgY2hhckNhdGVnb3J5ID0gY2F0ZWdv
cnkoYyk7CisgICAgcmV0dXJuIGNoYXJDYXRlZ29yeSA9PSBQdW5jdHVhdGlvbl9PcGVuCisgICAg
ICAgIHx8IGNoYXJDYXRlZ29yeSA9PSBQdW5jdHVhdGlvbl9DbG9zZQorICAgICAgICB8fCBjaGFy
Q2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlCisgICAgICAgIHx8IGNoYXJDYXRl
Z29yeSA9PSBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlCisgICAgICAgIHx8IGNoYXJDYXRlZ29yeSA9
PSBQdW5jdHVhdGlvbl9PdGhlcjsKK30KKworc3RhdGljIGlubGluZSBib29sIHNob3VsZFNraXBG
b3JGaXJzdExldHRlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMp
IHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcihjKTsK
K30KKworaW5saW5lIFJlbmRlclN0eWxlKiBzdHlsZUZvckZpcnN0TGV0dGVyKFJlbmRlck9iamVj
dCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckNvbnRhaW5lcikK
K3sKKyAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBmaXJzdExldHRlckJsb2NrLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJz
dExpbmVTdHlsZSgpKTsKKyAgICAvLyBGb3JjZSBpbmxpbmUgZGlzcGxheSAoZXhjZXB0IGZvciBm
bG9hdGluZyBmaXJzdC1sZXR0ZXJzKS4KKyAgICBwc2V1ZG9TdHlsZS0+c2V0RGlzcGxheShwc2V1
ZG9TdHlsZS0+aXNGbG9hdGluZygpID8gQkxPQ0sgOiBJTkxJTkUpOworICAgIC8vIENTUzIgc2F5
cyBmaXJzdC1sZXR0ZXIgY2FuJ3QgYmUgcG9zaXRpb25lZC4KKyAgICBwc2V1ZG9TdHlsZS0+c2V0
UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAgIHJldHVybiBwc2V1ZG9TdHlsZTsKK30KKwor
Ly8gV2Ugb25seSBob25vciBmaXJzdC1sZXR0ZXIgaWYgCisvLyAtIHRoZSBmaXJzdExldHRlckJs
b2NrIGNhbiBoYXZlIGNoaWxkcmVuIGluIHRoZSBET00gYW5kCisvLyAtIHRoZSBibG9jayBkb2Vz
bid0IGhhdmUgYW55IHNwZWNpYWwgYXNzdW1wdGlvbiBvbiBpdHMgdGV4dCBjaGlsZHJlbi4KKy8v
IFRoaXMgY29ycmVjdGx5IHByZXZlbnRzIGZvcm0gY29udHJvbHMgZnJvbSBob25vcmluZyBmaXJz
dC1sZXR0ZXIuCitpbmxpbmUgYm9vbCBpc1NhZmVUb0NyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXJP
bihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIHJldHVybiAocmVuZGVyZXItPmNhbkhh
dmVDaGlsZHJlbigpCisgICAgICAgICAgICAmJiAhKHJlbmRlcmVyLT5pc0RlcHJlY2F0ZWRGbGV4
aWJsZUJveCgpCisgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PFJlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveCo+KHJlbmRlcmVyKS0+YnV0dG9uVGV4dCgpKSk7Cit9CisKK2lubGluZSBS
ZW5kZXJPYmplY3QqIEZpcnN0TGV0dGVyVXBkYXRlcjo6ZmluZEZpcnN0TGV0dGVyQmxvY2soKSBj
b25zdAoreworICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IHRoaXMtPm1fcmVu
ZGVyZXI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYm9vbCBjYW5IYXZlRmlyc3RMZXR0
ZXJSZW5kZXJlciA9IGZpcnN0TGV0dGVyQmxvY2stPnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJ
UlNUX0xFVFRFUikKKyAgICAgICAgICAgICYmIGlzU2FmZVRvQ3JlYXRlRmlyc3RMZXR0ZXJSZW5k
ZXJlck9uKGZpcnN0TGV0dGVyQmxvY2spOworICAgICAgICBpZiAoY2FuSGF2ZUZpcnN0TGV0dGVy
UmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gZmlyc3RMZXR0ZXJCbG9jazsKKworICAgICAg
ICBSZW5kZXJPYmplY3QqIHBhcmVudEJsb2NrID0gZmlyc3RMZXR0ZXJCbG9jay0+cGFyZW50KCk7
CisgICAgICAgIGlmIChmaXJzdExldHRlckJsb2NrLT5pc1JlcGxhY2VkKCkgfHwgIXBhcmVudEJs
b2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkgIT0gZmlyc3RMZXR0ZXJCbG9jaworICAg
ICAgICAgICAgfHwgIXBhcmVudEJsb2NrLT5pc0Jsb2NrRmxvdygpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIGZpcnN0TGV0dGVyQmxvY2sgPSBwYXJlbnRCbG9jazsKKyAgICB9IAor
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRmlyc3RMZXR0ZXJVcGRhdGVyOjp1cGRhdGUoKSBj
b25zdAoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCk7
CisKKyAgICBpZiAoIWRvY3VtZW50LT51c2VzRmlyc3RMZXR0ZXJSdWxlcygpIHx8ICFtX3JlbmRl
cmVyLT5zaG91bGRVcGRhdGVGaXJzdExldHRlcigpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
RG9uJ3QgcmVjdXIKKyAgICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0g
RklSU1RfTEVUVEVSKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0
byBkZXN0cm95IHRoZSBmaXJzdC1sZXR0ZXIgb2JqZWN0IGlmIGl0IGlzIG5vIGxvbmdlciB0aGUg
Zmlyc3QgY2hpbGQuIE5lZWQgdG8gZmluZAorICAgIC8vIGFuIGVmZmljaWVudCB3YXkgdG8gY2hl
Y2sgZm9yIHRoYXQgc2l0dWF0aW9uIHRob3VnaCBiZWZvcmUgaW1wbGVtZW50aW5nIGFueXRoaW5n
LgorICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IGZpbmRGaXJzdExldHRlckJs
b2NrKCk7CisgICAgaWYgKCFmaXJzdExldHRlckJsb2NrKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBEcmlsbCBpbnRvIGlubGluZXMgbG9va2luZyBmb3Igb3VyIGZpcnN0IHRleHQgY2hpbGQu
CisgICAgUmVuZGVyT2JqZWN0KiBjdXJyQ2hpbGQgPSBmaXJzdExldHRlckJsb2NrLT5maXJzdENo
aWxkKCk7CisgICAgd2hpbGUgKGN1cnJDaGlsZCkgeworICAgICAgICBpZiAoY3VyckNoaWxkLT5p
c1RleHQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0xp
c3RNYXJrZXIoKSkKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgZWxzZSBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IEZJUlNUX0xFVFRFUikgeworICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICB9
IGVsc2UgaWYgKGN1cnJDaGlsZC0+aXNSZXBsYWNlZCgpIHx8IGN1cnJDaGlsZC0+aXNSZW5kZXJC
dXR0b24oKSB8fCBjdXJyQ2hpbGQtPmlzTWVudUxpc3QoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBlbHNlIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNU
X0xFVFRFUikgJiYgY3VyckNoaWxkLT5jYW5IYXZlQ2hpbGRyZW4oKSkgIHsKKyAgICAgICAgICAg
IC8vIFdlIGZvdW5kIGEgbG93ZXItbGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2gg
c3VwZXJzZWRlcyB0aGUgaGlnaGVyLWxldmVsIHN0eWxlCisgICAgICAgICAgICBmaXJzdExldHRl
ckJsb2NrID0gY3VyckNoaWxkOworICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5m
aXJzdENoaWxkKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgfQorCisgICAgaWYgKCFjdXJyQ2hpbGQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IG1fcmVuZGVyZXItPnJlbmRl
ckFyZW5hKCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fcmVuZGVyZXItPnZpZXcoKTsKKwor
ICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBoYXMgYWxyZWFk
eSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAorICAgIC8vIHRvIHVwZGF0ZSBpdC4KKyAg
ICBpZiAoY3VyckNoaWxkLT5wYXJlbnQoKS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1Rf
TEVUVEVSKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXIgPSBjdXJyQ2hpbGQt
PnBhcmVudCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0g
Zmlyc3RMZXR0ZXItPnBhcmVudCgpOworICAgICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUg
PSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFp
bmVyKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RM
ZXR0ZXItPmlzSW5saW5lKCkpOworCisgICAgICAgIGlmIChOb2RlOjpkaWZmKGZpcnN0TGV0dGVy
LT5zdHlsZSgpLCBwc2V1ZG9TdHlsZSkgPT0gTm9kZTo6RGV0YWNoKSB7CisgICAgICAgICAgICAv
LyBUaGUgZmlyc3QtbGV0dGVyIHJlbmRlcmVyIG5lZWRzIHRvIGJlIHJlcGxhY2VkLiBDcmVhdGUg
YSBuZXcgcmVuZGVyZXIgb2YgdGhlIHJpZ2h0IHR5cGUuCisgICAgICAgICAgICBSZW5kZXJPYmpl
Y3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICAgICAgaWYgKHBzZXVkb1N0eWxlLT5kaXNwbGF5
KCkgPT0gSU5MSU5FKQorICAgICAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gbmV3IChhcmVu
YSkgUmVuZGVySW5saW5lKGRvY3VtZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXdGaXJzdExldHRlciA9IG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKGRvY3VtZW50KTsK
KyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRTdHlsZShwc2V1ZG9TdHlsZSk7CisKKyAg
ICAgICAgICAgIC8vIE1vdmUgdGhlIGZpcnN0IGxldHRlciBpbnRvIHRoZSBuZXcgcmVuZGVyZXIu
CisgICAgICAgICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmll
dyk7CisgICAgICAgICAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0TGV0dGVy
LT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dCgpKQor
ICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQoY2hpbGQpLT5yZW1vdmVBbmREZXN0cm95
VGV4dEJveGVzKCk7CisgICAgICAgICAgICAgICAgZmlyc3RMZXR0ZXItPnJlbW92ZUNoaWxkKGNo
aWxkKTsKKyAgICAgICAgICAgICAgICBuZXdGaXJzdExldHRlci0+YWRkQ2hpbGQoY2hpbGQsIDAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIHJlbWFp
bmluZ1RleHQgPSAwOworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZp
cnN0TGV0dGVyLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW1h
aW5pbmdUZXh0T2JqZWN0ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChmaXJzdExldHRlciktPmZp
cnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpOworICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1RleHRP
YmplY3QgJiYgcmVtYWluaW5nVGV4dE9iamVjdC0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KHJl
bWFpbmluZ1RleHRPYmplY3QpLT5pc1RleHRGcmFnbWVudCgpKQorICAgICAgICAgICAgICAgIHJl
bWFpbmluZ1RleHQgPSB0b1JlbmRlclRleHRGcmFnbWVudChyZW1haW5pbmdUZXh0T2JqZWN0KTsK
KyAgICAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHJlbWFpbmluZ1RleHQtPmlzQW5vbnltb3VzKCkgfHwgcmVtYWluaW5nVGV4dC0+bm9kZSgpLT5y
ZW5kZXJlcigpID09IHJlbWFpbmluZ1RleHQpOworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Ug
dGhlIG9sZCByZW5kZXJlciB3aXRoIHRoZSBuZXcgb25lLgorICAgICAgICAgICAgICAgIHJlbWFp
bmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKG5ld0ZpcnN0TGV0dGVyKTsKKyAgICAgICAgICAgICAg
ICB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG5ld0ZpcnN0TGV0dGVyKS0+c2V0Rmlyc3RMZXR0ZXJS
ZW1haW5pbmdUZXh0KHJlbWFpbmluZ1RleHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zmlyc3RMZXR0ZXItPmRlc3Ryb3koKTsKKyAgICAgICAgICAgIGZpcnN0TGV0dGVyID0gbmV3Rmly
c3RMZXR0ZXI7CisgICAgICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQoZmly
c3RMZXR0ZXIsIG5leHRTaWJsaW5nKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmaXJz
dExldHRlci0+c2V0U3R5bGUocHNldWRvU3R5bGUpOworCisgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBnZW5DaGlsZCA9IGZpcnN0TGV0dGVyLT5maXJzdENoaWxkKCk7IGdlbkNoaWxkOyBnZW5D
aGlsZCA9IGdlbkNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoZ2VuQ2hp
bGQtPmlzVGV4dCgpKSAKKyAgICAgICAgICAgICAgICBnZW5DaGlsZC0+c2V0U3R5bGUocHNldWRv
U3R5bGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
Y3VyckNoaWxkLT5pc1RleHQoKSB8fCBjdXJyQ2hpbGQtPmlzQlIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBzdHlsZSwgd2Ug
Y3JlYXRlIGl0IGhlcmUuCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckNvbnRhaW5lciA9
IGN1cnJDaGlsZC0+cGFyZW50KCk7CisKKyAgICAvLyBPdXIgbGF5b3V0IHN0YXRlIGlzIG5vdCB2
YWxpZCBmb3IgdGhlIHJlcGFpbnRzIHdlIGFyZSBnb2luZyB0byB0cmlnZ2VyIGJ5CisgICAgLy8g
YWRkaW5nIGFuZCByZW1vdmluZyBjaGlsZHJlbiBvZiBmaXJzdExldHRlckNvbnRhaW5lci4KKyAg
ICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldyk7CisKKyAgICBS
ZW5kZXJUZXh0KiB0ZXh0T2JqID0gdG9SZW5kZXJUZXh0KGN1cnJDaGlsZCk7CisKKyAgICAvLyBD
cmVhdGUgb3VyIHBzZXVkbyBzdHlsZSBub3cgdGhhdCB3ZSBoYXZlIG91ciBmaXJzdExldHRlckNv
bnRhaW5lciBkZXRlcm1pbmVkLgorICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwor
CisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlciA9IDA7CisgICAgaWYgKHBzZXVkb1N0eWxl
LT5kaXNwbGF5KCkgPT0gSU5MSU5FKQorICAgICAgICBmaXJzdExldHRlciA9IG5ldyAoYXJlbmEp
IFJlbmRlcklubGluZShkb2N1bWVudCk7CisgICAgZWxzZQorICAgICAgICBmaXJzdExldHRlciA9
IG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKGRvY3VtZW50KTsKKyAgICBmaXJzdExldHRlci0+c2V0
U3R5bGUocHNldWRvU3R5bGUpOworICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChm
aXJzdExldHRlciwgY3VyckNoaWxkKTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMg
Z29pbmcgdG8gYmUgZWl0aGVyIGEgZ2VuZXJhdGVkIGNvbnRlbnQgc3RyaW5nIG9yIGEgRE9NIG5v
ZGUncworICAgIC8vIHN0cmluZy4gV2Ugd2FudCB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlZm9yZSBp
dCBnb3QgdHJhbnNmb3JtZWQgaW4gY2FzZSBmaXJzdC1sZXR0ZXIgaGFzCisgICAgLy8gbm8gdGV4
dC10cmFuc2Zvcm0gb3IgYSBkaWZmZXJlbnQgdGV4dC10cmFuc2Zvcm0gYXBwbGllZCB0byBpdC4K
KyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkVGV4dCA9IHRleHRPYmotPm9yaWdpbmFsVGV4dCgp
OworICAgIEFTU0VSVChvbGRUZXh0KTsKKworICAgIGlmIChvbGRUZXh0ICYmIG9sZFRleHQtPmxl
bmd0aCgpID4gMCkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworCisgICAgICAgIC8v
IEFjY291bnQgZm9yIGxlYWRpbmcgc3BhY2VzIGFuZCBwdW5jdHVhdGlvbi4KKyAgICAgICAgd2hp
bGUgKGxlbmd0aCA8IG9sZFRleHQtPmxlbmd0aCgpICYmIHNob3VsZFNraXBGb3JGaXJzdExldHRl
cigoKm9sZFRleHQpW2xlbmd0aF0pKQorICAgICAgICAgICAgbGVuZ3RoKys7CisKKyAgICAgICAg
Ly8gQWNjb3VudCBmb3IgZmlyc3QgbGV0dGVyLgorICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAg
CisgICAgICAgIC8vIEtlZXAgbG9va2luZyBmb3Igd2hpdGVzcGFjZSBhbmQgYWxsb3dlZCBwdW5j
dHVhdGlvbiwgYnV0IGF2b2lkCisgICAgICAgIC8vIGFjY3VtdWxhdGluZyBqdXN0IHdoaXRlc3Bh
Y2UgaW50byB0aGUgOmZpcnN0LWxldHRlci4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBzY2FuTGVu
Z3RoID0gbGVuZ3RoOyBzY2FuTGVuZ3RoIDwgb2xkVGV4dC0+bGVuZ3RoKCk7ICsrc2Nhbkxlbmd0
aCkgeworICAgICAgICAgICAgVUNoYXIgYyA9ICgqb2xkVGV4dClbc2Nhbkxlbmd0aF07IAorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNob3VsZFNraXBGb3JGaXJzdExldHRlcihjKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKGlzUHVuY3R1YXRpb25G
b3JGaXJzdExldHRlcihjKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBzY2FuTGVuZ3RoICsg
MTsKKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0IGZy
YWdtZW50IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgorICAgICAgICAvLyBU
aGlzIHRleHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCisgICAgICAgIFJlbmRlclRleHRGcmFn
bWVudCogcmVtYWluaW5nVGV4dCA9IAorICAgICAgICAgICAgbmV3IChhcmVuYSkgUmVuZGVyVGV4
dEZyYWdtZW50KHRleHRPYmotPm5vZGUoKSA/IHRleHRPYmotPm5vZGUoKSA6IHRleHRPYmotPmRv
Y3VtZW50KCksIG9sZFRleHQuZ2V0KCksIGxlbmd0aCwgb2xkVGV4dC0+bGVuZ3RoKCkgLSBsZW5n
dGgpOworICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRTdHlsZSh0ZXh0T2JqLT5zdHlsZSgpKTsK
KyAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQtPm5vZGUoKSkKKyAgICAgICAgICAgIHJlbWFpbmlu
Z1RleHQtPm5vZGUoKS0+c2V0UmVuZGVyZXIocmVtYWluaW5nVGV4dCk7CisKKyAgICAgICAgZmly
c3RMZXR0ZXJDb250YWluZXItPmFkZENoaWxkKHJlbWFpbmluZ1RleHQsIHRleHRPYmopOworICAg
ICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQodGV4dE9iaik7CisgICAgICAg
IHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsKKyAgICAgICAgdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChmaXJzdExldHRlciktPnNldEZpcnN0TGV0dGVyUmVtYWluaW5n
VGV4dChyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0
IGZyYWdtZW50IGZvciB0aGUgZmlyc3QgbGV0dGVyCisgICAgICAgIFJlbmRlclRleHRGcmFnbWVu
dCogbGV0dGVyID0gCisgICAgICAgICAgICBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0RnJhZ21lbnQo
cmVtYWluaW5nVGV4dC0+bm9kZSgpID8gcmVtYWluaW5nVGV4dC0+bm9kZSgpIDogcmVtYWluaW5n
VGV4dC0+ZG9jdW1lbnQoKSwgb2xkVGV4dC5nZXQoKSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgbGV0
dGVyLT5zZXRTdHlsZShwc2V1ZG9TdHlsZSk7CisgICAgICAgIGZpcnN0TGV0dGVyLT5hZGRDaGls
ZChsZXR0ZXIpOworCisgICAgICAgIHRleHRPYmotPmRlc3Ryb3koKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GaXJzdExldHRlclVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExl
dHRlclVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjlmYTMxOTY1ODU3YjA1N2UyZWNjYWUxZmUxMDAz
MDNlMGU1MDkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
cnN0TGV0dGVyVXBkYXRlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNyBE
YXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGaXJzdExldHRlclVwZGF0ZXJfaAorI2RlZmluZSBG
aXJzdExldHRlclVwZGF0ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
ck9iamVjdDsKK2NsYXNzIFJlbmRlckJsb2NrOworCitjbGFzcyBGaXJzdExldHRlclVwZGF0ZXIg
eworcHVibGljOgorICAgIEZpcnN0TGV0dGVyVXBkYXRlcihSZW5kZXJCbG9jayogcmVuZGVyZXIp
CisgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKKyAgICB7IH0KKworICAgIHZvaWQgdXBk
YXRlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RMZXR0
ZXJCbG9jaygpIGNvbnN0OworCisgICAgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGaXJzdExldHRlclVwZGF0ZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggNzYzMjFmMTVlOWYw
NGEyNTA3YzVhNGIwZGI2ZDY5M2M3YmU3ZmQ0Ni4uNTM4NWYzNWI5ZGI2NGNlZWJiMzQ4ZTcwNmI1
ZTkxNDAxOTg4YmYyNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZpcnN0TGV0dGVyVXBk
YXRlci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTEzMDgsOCArMTMwOSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiAKIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dCgpCiB7Ci0gICAgLy8gVXBkYXRlIG91ciBmaXJzdCBsZXR0ZXIgaW5mbyBub3cuCi0g
ICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICBGaXJzdExldHRlclVwZGF0ZXIodGhpcykudXBk
YXRlKCk7CiAKICAgICAvLyBUYWJsZSBjZWxscyBjYWxsIGxheW91dEJsb2NrIGRpcmVjdGx5LCBz
byBkb24ndCBhZGQgYW55IGxvZ2ljIGhlcmUuICBQdXQgY29kZSBpbnRvCiAgICAgLy8gbGF5b3V0
QmxvY2soKS4KQEAgLTUwOTIsNyArNTA5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIHsKICAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdp
ZHRoc0RpcnR5KCkpOwogCi0gICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICBGaXJzdExldHRl
clVwZGF0ZXIodGhpcykudXBkYXRlKCk7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9
IHN0eWxlKCk7CiAgICAgaWYgKCFpc1RhYmxlQ2VsbCgpICYmIHN0eWxlVG9Vc2UtPmxvZ2ljYWxX
aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpID4g
MCAmJiBzdHlsZSgpLT5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNQUxURVJOQVRFKQpAQCAtNTc5MCwy
MzAgKzU3OTAsNiBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrKCkg
Y29uc3QKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHls
ZSogc3R5bGVGb3JGaXJzdExldHRlcihSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQmxvY2ssIFJl
bmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHBz
ZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1Rf
TEVUVEVSLCBmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7Ci0gICAgLy8g
Rm9yY2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycyku
Ci0gICAgcHNldWRvU3R5bGUtPnNldERpc3BsYXkocHNldWRvU3R5bGUtPmlzRmxvYXRpbmcoKSA/
IEJMT0NLIDogSU5MSU5FKTsKLSAgICAvLyBDU1MyIHNheXMgZmlyc3QtbGV0dGVyIGNhbid0IGJl
IHBvc2l0aW9uZWQuCi0gICAgcHNldWRvU3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9u
KTsKLSAgICByZXR1cm4gcHNldWRvU3R5bGU7Ci19Ci0KLS8vIENTUyAyLjEgaHR0cDovL3d3dy53
My5vcmcvVFIvQ1NTMjEvc2VsZWN0b3IuaHRtbCNmaXJzdC1sZXR0ZXIKLS8vICJQdW5jdHVhdGlv
biAoaS5lLCBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gVW5pY29kZSBbVU5JQ09ERV0gaW4gdGhlICJv
cGVuIiAoUHMpLCAiY2xvc2UiIChQZSksCi0vLyAiaW5pdGlhbCIgKFBpKS4gImZpbmFsIiAoUGYp
IGFuZCAib3RoZXIiIChQbykgcHVuY3R1YXRpb24gY2xhc3NlcyksIHRoYXQgcHJlY2VkZXMgb3Ig
Zm9sbG93cyB0aGUgZmlyc3QgbGV0dGVyIHNob3VsZCBiZSBpbmNsdWRlZCIKLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKLXsKLSAgICBDaGFy
Q2F0ZWdvcnkgY2hhckNhdGVnb3J5ID0gY2F0ZWdvcnkoYyk7Ci0gICAgcmV0dXJuIGNoYXJDYXRl
Z29yeSA9PSBQdW5jdHVhdGlvbl9PcGVuCi0gICAgICAgIHx8IGNoYXJDYXRlZ29yeSA9PSBQdW5j
dHVhdGlvbl9DbG9zZQotICAgICAgICB8fCBjaGFyQ2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fSW5p
dGlhbFF1b3RlCi0gICAgICAgIHx8IGNoYXJDYXRlZ29yeSA9PSBQdW5jdHVhdGlvbl9GaW5hbFF1
b3RlCi0gICAgICAgIHx8IGNoYXJDYXRlZ29yeSA9PSBQdW5jdHVhdGlvbl9PdGhlcjsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldHRlcihVQ2hhciBjKQotewot
ICAgIHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlz
UHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcihjKTsKLX0KLQotLy8gV2Ugb25seSBob25vciBmaXJz
dC1sZXR0ZXIgaWYgCi0vLyAtIHRoZSBmaXJzdExldHRlckJsb2NrIGNhbiBoYXZlIGNoaWxkcmVu
IGluIHRoZSBET00gYW5kCi0vLyAtIHRoZSBibG9jayBkb2Vzbid0IGhhdmUgYW55IHNwZWNpYWwg
YXNzdW1wdGlvbiBvbiBpdHMgdGV4dCBjaGlsZHJlbi4KLS8vIFRoaXMgY29ycmVjdGx5IHByZXZl
bnRzIGZvcm0gY29udHJvbHMgZnJvbSBob25vcmluZyBmaXJzdC1sZXR0ZXIuCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNTYWZlVG9DcmVhdGVGaXJzdExldHRlclJlbmRlcmVyT24oUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gKHJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKQot
ICAgICAgICAgICAgJiYgIShyZW5kZXJlci0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKQotICAg
ICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gq
PihyZW5kZXJlciktPmJ1dHRvblRleHQoKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRlck9i
amVjdCogZmluZEZpcnN0TGV0dGVyQmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQotewotICAgIFJl
bmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IHN0YXJ0OwotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIGJvb2wgY2FuSGF2ZUZpcnN0TGV0dGVyUmVuZGVyZXIgPSBmaXJzdExldHRlckJs
b2NrLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpCi0gICAgICAgICAgICAm
JiBpc1NhZmVUb0NyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXJPbihmaXJzdExldHRlckJsb2NrKTsK
LSAgICAgICAgaWYgKGNhbkhhdmVGaXJzdExldHRlclJlbmRlcmVyKQotICAgICAgICAgICAgcmV0
dXJuIGZpcnN0TGV0dGVyQmxvY2s7Ci0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRCbG9j
ayA9IGZpcnN0TGV0dGVyQmxvY2stPnBhcmVudCgpOwotICAgICAgICBpZiAoZmlyc3RMZXR0ZXJC
bG9jay0+aXNSZXBsYWNlZCgpIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RD
aGlsZCgpICE9IGZpcnN0TGV0dGVyQmxvY2sgfHwgCi0gICAgICAgICAgICAhcGFyZW50QmxvY2st
PmlzQmxvY2tGbG93KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZmlyc3RMZXR0
ZXJCbG9jayA9IHBhcmVudEJsb2NrOwotICAgIH0gCi0KLSAgICByZXR1cm4gMDsKLX0KLSAgIAot
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQotewotICAgIGlmICghZG9jdW1l
bnQoKS0+dXNlc0ZpcnN0TGV0dGVyUnVsZXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIERv
bid0IHJlY3VyCi0gICAgaWYgKHN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVzdHJveSB0aGUg
Zmlyc3QtbGV0dGVyIG9iamVjdCBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGZpcnN0IGNoaWxkLiAg
TmVlZCB0byBmaW5kCi0gICAgLy8gYW4gZWZmaWNpZW50IHdheSB0byBjaGVjayBmb3IgdGhhdCBz
aXR1YXRpb24gdGhvdWdoIGJlZm9yZSBpbXBsZW1lbnRpbmcgYW55dGhpbmcuCi0gICAgUmVuZGVy
T2JqZWN0KiBmaXJzdExldHRlckJsb2NrID0gZmluZEZpcnN0TGV0dGVyQmxvY2sodGhpcyk7Ci0g
ICAgaWYgKCFmaXJzdExldHRlckJsb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEcmls
bCBpbnRvIGlubGluZXMgbG9va2luZyBmb3Igb3VyIGZpcnN0IHRleHQgY2hpbGQuCi0gICAgUmVu
ZGVyT2JqZWN0KiBjdXJyQ2hpbGQgPSBmaXJzdExldHRlckJsb2NrLT5maXJzdENoaWxkKCk7Ci0g
ICAgd2hpbGUgKGN1cnJDaGlsZCkgewotICAgICAgICBpZiAoY3VyckNoaWxkLT5pc1RleHQoKSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0xpc3RNYXJrZXIo
KSkKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgZWxzZSBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKLSAg
ICAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xF
VFRFUikgewotICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGls
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICB9IGVsc2UgaWYg
KGN1cnJDaGlsZC0+aXNSZXBsYWNlZCgpIHx8IGN1cnJDaGlsZC0+aXNSZW5kZXJCdXR0b24oKSB8
fCBjdXJyQ2hpbGQtPmlzTWVudUxpc3QoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBl
bHNlIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikg
JiYgY3VyckNoaWxkLT5jYW5IYXZlQ2hpbGRyZW4oKSkgIHsKLSAgICAgICAgICAgIC8vIFdlIGZv
dW5kIGEgbG93ZXItbGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2ggc3VwZXJzZWRl
cyB0aGUgaGlnaGVyLWxldmVsIHN0eWxlCi0gICAgICAgICAgICBmaXJzdExldHRlckJsb2NrID0g
Y3VyckNoaWxkOwotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxk
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5maXJzdENoaWxkKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjdXJyQ2hpbGQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhl
biBpdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAotICAgIC8vIHRv
IHVwZGF0ZSBpdC4KLSAgICBpZiAoY3VyckNoaWxkLT5wYXJlbnQoKS0+c3R5bGUoKS0+c3R5bGVU
eXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0
ZXIgPSBjdXJyQ2hpbGQtPnBhcmVudCgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgICAgICBSZW5kZXJTdHls
ZSogcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZp
cnN0TGV0dGVyQ29udGFpbmVyKTsKLSAgICAgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0
aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwotCi0gICAgICAgIGlmIChOb2RlOjpk
aWZmKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBwc2V1ZG9TdHlsZSkgPT0gTm9kZTo6RGV0YWNoKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3QtbGV0dGVyIHJlbmRlcmVyIG5lZWRzIHRvIGJlIHJl
cGxhY2VkLiBDcmVhdGUgYSBuZXcgcmVuZGVyZXIgb2YgdGhlIHJpZ2h0IHR5cGUuCi0gICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOwotICAgICAgICAgICAgaWYgKHBzZXVk
b1N0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FKQotICAgICAgICAgICAgICAgIG5ld0ZpcnN0TGV0
dGVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJJbmxpbmUoZG9jdW1lbnQoKSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkpOwotICAgICAgICAgICAgbmV3Rmlyc3RM
ZXR0ZXItPnNldFN0eWxlKHBzZXVkb1N0eWxlKTsKLQotICAgICAgICAgICAgLy8gTW92ZSB0aGUg
Zmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KLSAgICAgICAgICAgIExheW91dFN0
YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkpOwotICAgICAgICAgICAgd2hp
bGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRlci0+Zmlyc3RDaGlsZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJUZXh0KGNoaWxkKS0+cmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygpOwotICAgICAg
ICAgICAgICAgIGZpcnN0TGV0dGVyLT5yZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAgICAgICAg
ICAgbmV3Rmlyc3RMZXR0ZXItPmFkZENoaWxkKGNoaWxkLCAwKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0ID0gMDsKLSAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVtYWluaW5nVGV4dE9iamVjdCA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoZmlyc3RMZXR0ZXIpLT5maXJzdExldHRlclJlbWFpbmluZ1Rl
eHQoKTsKLSAgICAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0T2JqZWN0ICYmIHJlbWFpbmluZ1Rl
eHRPYmplY3QtPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyZW1haW5pbmdUZXh0T2JqZWN0KS0+
aXNUZXh0RnJhZ21lbnQoKSkKLSAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gdG9SZW5k
ZXJUZXh0RnJhZ21lbnQocmVtYWluaW5nVGV4dE9iamVjdCk7Ci0gICAgICAgICAgICBpZiAocmVt
YWluaW5nVGV4dCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdUZXh0LT5pc0Fu
b255bW91cygpIHx8IHJlbWFpbmluZ1RleHQtPm5vZGUoKS0+cmVuZGVyZXIoKSA9PSByZW1haW5p
bmdUZXh0KTsKLSAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgcmVuZGVyZXIgd2l0
aCB0aGUgbmV3IG9uZS4KLSAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExl
dHRlcihuZXdGaXJzdExldHRlcik7Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChuZXdGaXJzdExldHRlciktPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5p
bmdUZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95
KCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlciA9IG5ld0ZpcnN0TGV0dGVyOwotICAgICAgICAg
ICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmFkZENoaWxkKGZpcnN0TGV0dGVyLCBuZXh0U2libGlu
Zyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmlyc3RMZXR0ZXItPnNldFN0eWxlKHBz
ZXVkb1N0eWxlKTsKLQotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogZ2VuQ2hpbGQgPSBmaXJz
dExldHRlci0+Zmlyc3RDaGlsZCgpOyBnZW5DaGlsZDsgZ2VuQ2hpbGQgPSBnZW5DaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGdlbkNoaWxkLT5pc1RleHQoKSkgCi0gICAg
ICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHBzZXVkb1N0eWxlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWN1cnJDaGlsZC0+aXNUZXh0KCkg
fHwgY3VyckNoaWxkLT5pc0JSKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBj
aGlsZCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgc3R5bGUsIHdlIGNyZWF0ZSBpdCBoZXJlLgotICAg
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyQ2hpbGQtPnBhcmVudCgp
OwotCi0gICAgLy8gT3VyIGxheW91dCBzdGF0ZSBpcyBub3QgdmFsaWQgZm9yIHRoZSByZXBhaW50
cyB3ZSBhcmUgZ29pbmcgdG8gdHJpZ2dlciBieQotICAgIC8vIGFkZGluZyBhbmQgcmVtb3Zpbmcg
Y2hpbGRyZW4gb2YgZmlyc3RMZXR0ZXJDb250YWluZXIuCi0gICAgTGF5b3V0U3RhdGVEaXNhYmxl
ciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7Ci0KLSAgICBSZW5kZXJUZXh0KiB0ZXh0T2Jq
ID0gdG9SZW5kZXJUZXh0KGN1cnJDaGlsZCk7Ci0KLSAgICAvLyBDcmVhdGUgb3VyIHBzZXVkbyBz
dHlsZSBub3cgdGhhdCB3ZSBoYXZlIG91ciBmaXJzdExldHRlckNvbnRhaW5lciBkZXRlcm1pbmVk
LgotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmly
c3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwotCi0gICAgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlciA9IDA7Ci0gICAgaWYgKHBzZXVkb1N0eWxlLT5kaXNwbGF5KCkgPT0gSU5M
SU5FKQotICAgICAgICBmaXJzdExldHRlciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVySW5s
aW5lKGRvY3VtZW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgKHJl
bmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkpOwotICAgIGZpcnN0TGV0dGVyLT5z
ZXRTdHlsZShwc2V1ZG9TdHlsZSk7Ci0gICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmFkZENoaWxk
KGZpcnN0TGV0dGVyLCBjdXJyQ2hpbGQpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBp
cyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00g
bm9kZSdzCi0gICAgLy8gc3RyaW5nLiAgV2Ugd2FudCB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlZm9y
ZSBpdCBnb3QgdHJhbnNmb3JtZWQgaW4gY2FzZSBmaXJzdC1sZXR0ZXIgaGFzCi0gICAgLy8gbm8g
dGV4dC10cmFuc2Zvcm0gb3IgYSBkaWZmZXJlbnQgdGV4dC10cmFuc2Zvcm0gYXBwbGllZCB0byBp
dC4KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkVGV4dCA9IHRleHRPYmotPm9yaWdpbmFsVGV4
dCgpOwotICAgIEFTU0VSVChvbGRUZXh0KTsKLQotICAgIGlmIChvbGRUZXh0ICYmIG9sZFRleHQt
Pmxlbmd0aCgpID4gMCkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotCi0gICAgICAg
IC8vIEFjY291bnQgZm9yIGxlYWRpbmcgc3BhY2VzIGFuZCBwdW5jdHVhdGlvbi4KLSAgICAgICAg
d2hpbGUgKGxlbmd0aCA8IG9sZFRleHQtPmxlbmd0aCgpICYmIHNob3VsZFNraXBGb3JGaXJzdExl
dHRlcigoKm9sZFRleHQpW2xlbmd0aF0pKQotICAgICAgICAgICAgbGVuZ3RoKys7Ci0KLSAgICAg
ICAgLy8gQWNjb3VudCBmb3IgZmlyc3QgbGV0dGVyLgotICAgICAgICBsZW5ndGgrKzsKLSAgICAg
ICAgCi0gICAgICAgIC8vIEtlZXAgbG9va2luZyBmb3Igd2hpdGVzcGFjZSBhbmQgYWxsb3dlZCBw
dW5jdHVhdGlvbiwgYnV0IGF2b2lkCi0gICAgICAgIC8vIGFjY3VtdWxhdGluZyBqdXN0IHdoaXRl
c3BhY2UgaW50byB0aGUgOmZpcnN0LWxldHRlci4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBzY2Fu
TGVuZ3RoID0gbGVuZ3RoOyBzY2FuTGVuZ3RoIDwgb2xkVGV4dC0+bGVuZ3RoKCk7ICsrc2Nhbkxl
bmd0aCkgewotICAgICAgICAgICAgVUNoYXIgYyA9ICgqb2xkVGV4dClbc2Nhbkxlbmd0aF07IAot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXNob3VsZFNraXBGb3JGaXJzdExldHRlcihj
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKGlzUHVuY3R1YXRp
b25Gb3JGaXJzdExldHRlcihjKSkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBzY2FuTGVuZ3Ro
ICsgMTsKLSAgICAgICAgIH0KLSAgICAgICAgIAotICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0
IGZyYWdtZW50IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgotICAgICAgICAv
LyBUaGlzIHRleHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRleHRG
cmFnbWVudCogcmVtYWluaW5nVGV4dCA9IAotICAgICAgICAgICAgbmV3IChyZW5kZXJBcmVuYSgp
KSBSZW5kZXJUZXh0RnJhZ21lbnQodGV4dE9iai0+bm9kZSgpID8gdGV4dE9iai0+bm9kZSgpIDog
dGV4dE9iai0+ZG9jdW1lbnQoKSwgb2xkVGV4dC5nZXQoKSwgbGVuZ3RoLCBvbGRUZXh0LT5sZW5n
dGgoKSAtIGxlbmd0aCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldFN0eWxlKHRleHRPYmot
PnN0eWxlKCkpOwotICAgICAgICBpZiAocmVtYWluaW5nVGV4dC0+bm9kZSgpKQotICAgICAgICAg
ICAgcmVtYWluaW5nVGV4dC0+bm9kZSgpLT5zZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKLQot
ICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgdGV4
dE9iaik7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5yZW1vdmVDaGlsZCh0ZXh0T2Jq
KTsKLSAgICAgICAgcmVtYWluaW5nVGV4dC0+c2V0Rmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXIpOwot
ICAgICAgICB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGZpcnN0TGV0dGVyKS0+c2V0Rmlyc3RMZXR0
ZXJSZW1haW5pbmdUZXh0KHJlbWFpbmluZ1RleHQpOwotICAgICAgICAKLSAgICAgICAgLy8gY29u
c3RydWN0IHRleHQgZnJhZ21lbnQgZm9yIHRoZSBmaXJzdCBsZXR0ZXIKLSAgICAgICAgUmVuZGVy
VGV4dEZyYWdtZW50KiBsZXR0ZXIgPSAKLSAgICAgICAgICAgIG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyVGV4dEZyYWdtZW50KHJlbWFpbmluZ1RleHQtPm5vZGUoKSA/IHJlbWFpbmluZ1RleHQt
Pm5vZGUoKSA6IHJlbWFpbmluZ1RleHQtPmRvY3VtZW50KCksIG9sZFRleHQuZ2V0KCksIDAsIGxl
bmd0aCk7Ci0gICAgICAgIGxldHRlci0+c2V0U3R5bGUocHNldWRvU3R5bGUpOwotICAgICAgICBm
aXJzdExldHRlci0+YWRkQ2hpbGQobGV0dGVyKTsKLQotICAgICAgICB0ZXh0T2JqLT5kZXN0cm95
KCk7Ci0gICAgfQotfQotCiAvLyBIZWxwZXIgbWV0aG9kcyBmb3Igb2J0YWluaW5nIHRoZSBsYXN0
IGxpbmUsIGNvbXB1dGluZyBsaW5lIGNvdW50cyBhbmQgaGVpZ2h0cyBmb3IgbGluZSBjb3VudHMK
IC8vIChjcmF3bGluZyBpbnRvIGJsb2NrcykuCiBzdGF0aWMgYm9vbCBzaG91bGRDaGVja0xpbmVz
KFJlbmRlck9iamVjdCogb2JqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApp
bmRleCA4OTk2ZGE1ZWYzYWZkMGM1MWRkNWMyOGU1NjgyZjk0NmZmODFhODVhLi5jYTdhYmIyMWEw
YjZmNTQ3YWM0MzBhN2UyNjE2MmY4NmQ3YzQ1Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaApAQCAtMjk0LDcgKzI5NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBk
YXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KGNvbnN0IEVUZXh0QWxpZ24mLCBCaWRpUnVuKiB0
cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxX
aWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQpOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFVwZGF0ZUZpcnN0TGV0dGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgY2xhc3MgTWFyZ2luVmFsdWVzIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCA4ODMyMThkNGY3NmZjMmRk
NzY1ZTlhNjI3ODYwZjBiN2MwMzBhMjhhLi5hYTU2ZGM2NGM1MTQ1NTVmMjFhN2E3ZDdkYWM3MzQ2
YjAxMDg1YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5j
cHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogCiAjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJGaXJzdExldHRlclVwZGF0ZXIuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtMjQ1LDcgKzI0Niw3IEBAIHZvaWQgUmVuZGVy
TGlzdEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW9uKCkKICAgICAgICAgICAgIC8vIFJlbW92aW5n
IGFuZCBhZGRpbmcgdGhlIG1hcmtlciBjYW4gdHJpZ2dlciByZXBhaW50aW5nIGluCiAgICAgICAg
ICAgICAvLyBjb250YWluZXJzIG90aGVyIHRoYW4gb3Vyc2VsdmVzLCBzbyB3ZSBuZWVkIHRvIGRp
c2FibGUgTGF5b3V0U3RhdGUuCiAgICAgICAgICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91
dFN0YXRlRGlzYWJsZXIodmlldygpKTsKLSAgICAgICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7
CisgICAgICAgICAgICBGaXJzdExldHRlclVwZGF0ZXIodGhpcykudXBkYXRlKCk7CiAgICAgICAg
ICAgICBtX21hcmtlci0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAvLyBJZiBtYXJrZXJQYXIgaXMg
YW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgd2lsbCBsb3NlIGFsbCBpdHMgY2hpbGRyZW4sIGRlc3Ry
b3kgaXQKICAgICAgICAgICAgIGlmIChtYXJrZXJQYXIgJiYgKG1hcmtlclBhciAhPSBsaW5lQm94
UGFyZW50KSAmJiBtYXJrZXJQYXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhKHRvUmVuZGVyQmxv
Y2sobWFya2VyUGFyKS0+Zmlyc3RDaGlsZCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSdWJ5UnVuLmNwcAppbmRleCA1MzBjNmJkYjJjYzZkMGE3ZWRmZTE3Mzg4NmI2MWE5OGVk
YjZmMDVmLi5mZWEzNDQ1YmE3YmFhMGI3MDgzOGU5YTBiMjQ2MTY2NjIzNDE0NWFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCkBAIC05OCw5ICs5OCwxMSBA
QCBSZW5kZXJCbG9jayogUmVuZGVyUnVieVJ1bjo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogICAg
IHJldHVybiAwOwogfQogCisjaWYgMAogdm9pZCBSZW5kZXJSdWJ5UnVuOjp1cGRhdGVGaXJzdExl
dHRlcigpCiB7CiB9CisjZW5kaWYKIAogYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dl
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAppbmRleCBmNjVhZDg2YzZiYWJkMDg5NjlmN2My
ZDg4MGRhOGM3OTJjY2RiZGFiLi45ZGY0ZmFjYTg4Njg4MWJiMWRkMTc5ODUxOWU0YTQzOTVmNTM5
MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisgICAgdmlydHVh
bCBib29sIHNob3VsZFVwZGF0ZUZpcnN0TGV0dGVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIHZvaWQgZ2V0T3ZlcmhhbmcoYm9vbCBmaXJzdExpbmUsIFJlbmRlck9i
amVjdCogc3RhcnRSZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgaW50JiBzdGFy
dE92ZXJoYW5nLCBpbnQmIGVuZE92ZXJoYW5nKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggMWE0MjY1MmRiNTNkMTY1YjJiNTg4OWRhMWU3YWFh
OWJiN2EzN2M4YS4uNDZmZjFlZWNmYzgxMGU1MWVkZjQzODc0ZDMzZDg0OGVlMzA1Y2VlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xMTk0LDkgKzExOTQs
MTEgQEAgUmVuZGVyQmxvY2sqIFJlbmRlclRhYmxlOjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAg
ICAgcmV0dXJuIDA7CiB9CiAKKyNpZiAwCiB2b2lkIFJlbmRlclRhYmxlOjp1cGRhdGVGaXJzdExl
dHRlcigpCiB7CiB9CisjZW5kaWYKIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Zmlyc3RMaW5l
Qm94QmFzZWxpbmUoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAppbmRleCA5YTY1NTdlMDMxMzFkNDA1OTE1Zjk2YzY3ZjRmZDY0NzM4NTc5YWM4Li4xODE0NjBi
NjkzMDQ5ZTM5MjJlODkxMWE2NTRiZjZkN2Q5MDZhNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaApAQCAtMjM0LDcgKzIzNCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBMYXlvdXRVbml0IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGaXJzdExldHRlcigpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVcGRhdGVGaXJzdExl
dHRlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdmlydHVh
bCB2b2lkIHNldENlbGxMb2dpY2FsV2lkdGhzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKaW5kZXggZmY0MDgyNDIyYjVhOTQwMzQwYjcw
M2NhYjVlNjg1YWY5N2RmNjQzNi4uYWZkNjhmYTk0YTM4YTcxNDczNDVhYjA0MGEyNDg0NDA5Njlm
N2MyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFn
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVu
dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0RnJhZ21lbnQuaCIKIAorI2luY2x1ZGUgIkZpcnN0TGV0dGVyVXBkYXRlci5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCkBAIC02NCw3ICs2
NSw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqCiAKICAgICBpZiAoUmVuZGVyQmxvY2sqIGJs
b2NrID0gYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExldHRlcigpKSB7CiAgICAgICAgIGJsb2Nr
LT5zdHlsZSgpLT5yZW1vdmVDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpOwotICAgICAg
ICBibG9jay0+dXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICAgICAgRmlyc3RMZXR0ZXJVcGRhdGVy
KGJsb2NrKS51cGRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCmluZGV4IDdlOWU3ZGRjYzgwMWY5Zjk4NmI0ZDJhNmU3
NjA0NzBiY2FmNjUzNDMuLjNjNmVhZDVlOTFkZTU5NDRhNGY5MGQwNmU1NDUwM2I2ZDE5NGI0NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNvdW50ZXJOb2RlLmNwcCIKICNpbmNsdWRlICJF
bGxpcHNpc0JveC5jcHAiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIgorI2lu
Y2x1ZGUgIkZpcnN0TGV0dGVyVXBkYXRlci5jcHAiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91
dC5jcHAiCiAjaW5jbHVkZSAiSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCmluZGV4IGQ5Y2RlY2NkZjdlZTE4ZTY0OTYzNWQ0ZTY5ZDkzZDJjYzdk
OTUzZTEuLmE1YjZiN2ZjNjMxNTJhODhkMjkxNzdlODQyYjVlNTM5MDZiODBjZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtMzcxLDEx
ICszNzEsMTMgQEAgUmVuZGVyQmxvY2sqIFJlbmRlclNWR1RleHQ6OmZpcnN0TGluZUJsb2NrKCkg
Y29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIDAKIC8vIEZpeCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzgwNDg4NzU+LiBXZSBzaG91bGQgbm90IHJlbmRlciA6Zmlyc3QtbGV0dGVyIENTUyBTdHls
ZQogLy8gaW4gYSBTVkcgdGV4dCBlbGVtZW50IGNvbnRleHQuCiB2b2lkIFJlbmRlclNWR1RleHQ6
OnVwZGF0ZUZpcnN0TGV0dGVyKCkKIHsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQg
cmVjdXJzaXZlQ29sbGVjdExheW91dEF0dHJpYnV0ZXMoUmVuZGVyT2JqZWN0KiBzdGFydCwgVmVj
dG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKj4mIGF0dHJpYnV0ZXMpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCmluZGV4IDdiMGI1ZWZhODBkMzU2
MjllNmM4YzAyYmNmMWZmZTM5MWE4YjQwMDkuLmMyMzFjNzY3ZGU5YzM4Y2JiOWFmYTgwYzljODdm
MzUxYzU4ZTkyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oCkBAIC04Niw3ICs4Niw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBSb290SW5saW5l
Qm94KiBjcmVhdGVSb290SW5saW5lQm94KCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBm
aXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRl
cigpOworICAgIC8vIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzgwNDg4NzU+LiBXZSBzaG91bGQg
bm90IHJlbmRlciA6Zmlyc3QtbGV0dGVyIENTUyBTdHlsZQorICAgIC8vIGluIGEgU1ZHIHRleHQg
ZWxlbWVudCBjb250ZXh0LgorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVcGRhdGVGaXJzdExldHRl
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIG1fbmVlZHNS
ZW9yZGVyaW5nIDogMTsKICAgICBib29sIG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA6
IDE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128978</attachid>
            <date>2012-02-27 00:47:55 -0800</date>
            <delta_ts>2012-02-27 02:02:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79630-20120227174753.patch</filename>
            <type>text/plain</type>
            <size>41357</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzFjZDAxNjY1OGM4OGVi
M2YzOGMzMmQ4NTAwZjUxMTVkODNmMzNiOS4uMWRhNDJmNTY1NmY2YTNlZGI0ZTdiNTAwNDFkZDNl
YTNhNGUwYjhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAyLTI3ICBNT1JJ
VEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFtSZWZhY3RvcmluZ10g
RXh0cmFjdCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKSB0byBGaXJzdExldHRlclVw
ZGF0ZXIgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gTm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvRmlyc3RMZXR0ZXJV
cGRhdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzUHVuY3R1YXRpb25Gb3JGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRT
a2lwRm9yRmlyc3RMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVGb3JGaXJzdExldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVUb0NyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXJP
bik6CisgICAgICAgIChXZWJDb3JlOjpGaXJzdExldHRlclVwZGF0ZXI6OmZpbmRGaXJzdExldHRl
ckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkZpcnN0TGV0dGVyVXBkYXRlcjo6dXBkYXRlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGaXJzdExldHRlclVwZGF0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rmlyc3RMZXR0ZXJVcGRhdGVyOjpGaXJzdExldHRlclVwZGF0ZXIpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2hv
dWxkVXBkYXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2VyTG9j
YXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0RnJhZ21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50Ojpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0Lmg6CisgICAg
ICAgIChSZW5kZXJTVkdUZXh0KToKKwogMjAxMi0wMi0yNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IGUxN2M4YTMxNjRlM2Y4OWU3YzJkYmNjZDEyNzg1ZDQ2NTE0MDgxMzguLmZjNmRmNmJmOWNiYTRj
MDIwMWE3ODlkMGYzNTBiMTdmMDk4MGZjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjcx
LDYgKzEyNzEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJO
b2RlLmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKICAgICByZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwCisgICAgcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5j
cHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKICAgICByZW5kZXJpbmcvSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYWFlNzc3Y2VkZDA4NmE3MjFlYTBk
Y2Y2YmZjNGViN2Q4YmM5NDRhMy4uZDY1YTAzNTc4N2UwYTI5ZGU1ODk0NzkyZDBmMmRiZDc3NzFi
MWM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zNDY1LDYgKzM0NjUsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBkYXRlci5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExldHRlclVwZGF0ZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R2FwUmVjdHMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmYTdmOTYwZjBkOTRiYWViN2U4NjdlYzE1NDcy
ZGVhZTNkNDA1NDExLi5jYTlmZTQ1MmY2YTQ3YjQ0YzFlYTkwNWE1NTQ0ZjZmOThkNTg4NTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTExOTIsNiArMTE5Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAog
ICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAorICAgIHJlbmRlcmluZy9G
aXJzdExldHRlclVwZGF0ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5j
cHAgXAogICAgIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwIFwKICAgICBy
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBmYTU4ODVm
NWViMmU0MDgzNzJlMmVhZDI3NDU4OGJhZDJjNzU3OTMuLmYyNGY3Y2U4ZjAzMmMyYmMzNzY0NDU5
NTIxODRlNzQzZDFlN2U1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ3Nyw2ICs0NzcsOCBAQAog
ICAgICAgICAgICAgJ3BsdWdpbnMvbnBydW50aW1lLmgnLAogICAgICAgICAgICAgJ3BsdWdpbnMv
bnB0eXBlcy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvQ29sdW1uSW5mby5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9GaXJzdExldHRlclVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
R2FwUmVjdHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0hpdFRlc3RSZXF1ZXN0LmgnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ0YmQzMzlkMTZh
Y2MxNTZkOTg2MWZmYzQyNGU2MzNjMTI4NGNmMDguLmFjNTQ0YmI4ZTRmNzlkYWU2Y2M0YzliNTYx
NTUwOTMxN2U1MDU5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTM2MjMsNiArMzYyMyw4IEBACiAJCUE3OEZFMTNDMTIzNjZC
MTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNr
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzk1NDYzRTBCNUM0QzgwMDA3QjQzOEYgLyogRHJhZ0RhdGFNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzk1NDYzRDBCNUM0QzgwMDA3QjQzOEYg
LyogRHJhZ0RhdGFNYWMubW0gKi87IH07CiAJCUE3OTU0NjQzMEI1QzRDQjQwMDdCNDM4RiAvKiBE
cmFnRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJhZ0RhdGEuY3BwICovOyB9OworCQlBNzlC
N0IwRjE0RkI3Mjg3MDAxNkIzMkQgLyogRmlyc3RMZXR0ZXJVcGRhdGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OUI3QjBEMTRGQjcyODcwMDE2
QjMyRCAvKiBGaXJzdExldHRlclVwZGF0ZXIuY3BwICovOyB9OworCQlBNzlCN0IxMDE0RkI3Mjg3
MDAxNkIzMkQgLyogRmlyc3RMZXR0ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCN0IwRTE0RkI3Mjg3MDAxNkIzMkQgLyogRmlyc3RM
ZXR0ZXJVcGRhdGVyLmggKi87IH07CiAJCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5r
SGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0FEMkY4NTBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovOyB9OwogCQlBN0FEMkY4
ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QUQyRjg2MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFz
aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QjA3MEQyMTMwQTQwOUMwMEEzNzYzQyAvKiBGcmFtZUFjdGlvblNjaGVkdWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0IwNzBEMDEzMEE0MDlD
MDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwICovOyB9OwpAQCAtMTA1MTgsNiAr
MTA1MjAsOCBAQAogCQlBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU3BlbGxDaGVja2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OTU0NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0
YU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnRGF0
YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5NTQ2NDIwQjVDNENCNDAw
N0I0MzhGIC8qIERyYWdEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERyYWdEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc5QjdCMEQx
NEZCNzI4NzAwMTZCMzJEIC8qIEZpcnN0TGV0dGVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaXJzdExldHRlclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBNzlCN0IwRTE0RkI3Mjg3MDAxNkIzMkQgLyogRmlyc3RMZXR0
ZXJVcGRhdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpcnN0TGV0dGVy
VXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0FEMkY4NTBFQzg5RDA3
MDA4QUIwMDIgLyogTGlua0hhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGlua0hhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0FEMkY4
NjBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGlua0hhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCMDcw
RDAxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lQWN0aW9uU2NoZWR1bGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMzc2LDYgKzIwMzgwLDggQEAKIAkJCQk1MEQ0
MDY3QzE0N0U0MEQ4MDBEMzBCQjUgLyogRmlsdGVyRWZmZWN0T2JzZXJ2ZXIuaCAqLywKIAkJCQkz
MTMxM0Y2MzE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAog
CQkJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICov
LAorCQkJCUE3OUI3QjBEMTRGQjcyODcwMDE2QjMyRCAvKiBGaXJzdExldHRlclVwZGF0ZXIuY3Bw
ICovLAorCQkJCUE3OUI3QjBFMTRGQjcyODcwMDE2QjMyRCAvKiBGaXJzdExldHRlclVwZGF0ZXIu
aCAqLywKIAkJCQlBOENGRjA0ODBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5j
cHAgKi8sCiAJCQkJQThDRkYwNEEwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQu
aCAqLywKIAkJCQk5MzVDNDc3NDA5QUM0RDhEMDBBNkFBQjQgLyogR2FwUmVjdHMuaCAqLywKQEAg
LTIyMzU5LDYgKzIyMzY1LDcgQEAKIAkJCQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2
MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNzlCN0Ix
MDE0RkI3Mjg3MDAxNkIzMkQgLyogRmlyc3RMZXR0ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU0NDAsNiArMjU0NDcsNyBAQAogCQkJCTMxMzEz
RjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OUVDRUI2RDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3OUI3QjBGMTRGQjcyODcwMDE2QjMy
RCAvKiBGaXJzdExldHRlclVwZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQw
QTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExl
dHRlclVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpcnN0TGV0dGVyVXBk
YXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5MjczYjJkOGU5ZWQ0M2RkMWZjMTFjODJjYmY5YTUwNmUw
NjRkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExl
dHRlclVwZGF0ZXIuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDcgRGF2
aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaXJzdExldHRlclVwZGF0ZXIuaCIKKworI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCisjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCisjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRl
clRleHRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2Ug
VW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDU1MgMi4xIGh0dHA6Ly93d3cu
dzMub3JnL1RSL0NTUzIxL3NlbGVjdG9yLmh0bWwjZmlyc3QtbGV0dGVyCisvLyAiUHVuY3R1YXRp
b24gKGkuZSwgY2hhcmFjdGVycyBkZWZpbmVkIGluIFVuaWNvZGUgW1VOSUNPREVdIGluIHRoZSAi
b3BlbiIgKFBzKSwgImNsb3NlIiAoUGUpLAorLy8gImluaXRpYWwiIChQaSkuICJmaW5hbCIgKFBm
KSBhbmQgIm90aGVyIiAoUG8pIHB1bmN0dWF0aW9uIGNsYXNzZXMpLCB0aGF0IHByZWNlZGVzIG9y
IGZvbGxvd3MgdGhlIGZpcnN0IGxldHRlciBzaG91bGQgYmUgaW5jbHVkZWQiCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKFVDaGFyIGMpCit7CisgICAgQ2hh
ckNhdGVnb3J5IGNoYXJDYXRlZ29yeSA9IGNhdGVnb3J5KGMpOworICAgIHJldHVybiBjaGFyQ2F0
ZWdvcnkgPT0gUHVuY3R1YXRpb25fT3BlbgorICAgICAgICB8fCBjaGFyQ2F0ZWdvcnkgPT0gUHVu
Y3R1YXRpb25fQ2xvc2UKKyAgICAgICAgfHwgY2hhckNhdGVnb3J5ID09IFB1bmN0dWF0aW9uX0lu
aXRpYWxRdW90ZQorICAgICAgICB8fCBjaGFyQ2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fRmluYWxR
dW90ZQorICAgICAgICB8fCBjaGFyQ2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fT3RoZXI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKK3sK
KyAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBp
c1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYyk7Cit9CisKK2lubGluZSBSZW5kZXJTdHlsZSog
c3R5bGVGb3JGaXJzdExldHRlcihSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCit7CisgICAgUmVuZGVyU3R5bGUqIHBzZXVk
b1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSLCBmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CisgICAgLy8gRm9y
Y2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycykuCisg
ICAgcHNldWRvU3R5bGUtPnNldERpc3BsYXkocHNldWRvU3R5bGUtPmlzRmxvYXRpbmcoKSA/IEJM
T0NLIDogSU5MSU5FKTsKKyAgICAvLyBDU1MyIHNheXMgZmlyc3QtbGV0dGVyIGNhbid0IGJlIHBv
c2l0aW9uZWQuCisgICAgcHNldWRvU3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsK
KyAgICByZXR1cm4gcHNldWRvU3R5bGU7Cit9CisKKy8vIFdlIG9ubHkgaG9ub3IgZmlyc3QtbGV0
dGVyIGlmIAorLy8gLSB0aGUgZmlyc3RMZXR0ZXJCbG9jayBjYW4gaGF2ZSBjaGlsZHJlbiBpbiB0
aGUgRE9NIGFuZAorLy8gLSB0aGUgYmxvY2sgZG9lc24ndCBoYXZlIGFueSBzcGVjaWFsIGFzc3Vt
cHRpb24gb24gaXRzIHRleHQgY2hpbGRyZW4uCisvLyBUaGlzIGNvcnJlY3RseSBwcmV2ZW50cyBm
b3JtIGNvbnRyb2xzIGZyb20gaG9ub3JpbmcgZmlyc3QtbGV0dGVyLgoraW5saW5lIGJvb2wgaXNT
YWZlVG9DcmVhdGVGaXJzdExldHRlclJlbmRlcmVyT24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3sKKyAgICByZXR1cm4gKHJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKQorICAgICAgICAgICAg
JiYgIShyZW5kZXJlci0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKQorICAgICAgICAgICAgICAg
ICAmJiBzdGF0aWNfY2FzdDxSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gqPihyZW5kZXJlcikt
PmJ1dHRvblRleHQoKSkpOworfQorCitpbmxpbmUgUmVuZGVyT2JqZWN0KiBGaXJzdExldHRlclVw
ZGF0ZXI6OmZpbmRGaXJzdExldHRlckJsb2NrKCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3Qq
IGZpcnN0TGV0dGVyQmxvY2sgPSB0aGlzLT5tX3JlbmRlcmVyOworICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIGJvb2wgY2FuSGF2ZUZpcnN0TGV0dGVyUmVuZGVyZXIgPSBmaXJzdExldHRlckJs
b2NrLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpCisgICAgICAgICAgICAm
JiBpc1NhZmVUb0NyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXJPbihmaXJzdExldHRlckJsb2NrKTsK
KyAgICAgICAgaWYgKGNhbkhhdmVGaXJzdExldHRlclJlbmRlcmVyKQorICAgICAgICAgICAgcmV0
dXJuIGZpcnN0TGV0dGVyQmxvY2s7CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRCbG9j
ayA9IGZpcnN0TGV0dGVyQmxvY2stPnBhcmVudCgpOworICAgICAgICBpZiAoZmlyc3RMZXR0ZXJC
bG9jay0+aXNSZXBsYWNlZCgpIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RD
aGlsZCgpICE9IGZpcnN0TGV0dGVyQmxvY2sKKyAgICAgICAgICAgIHx8ICFwYXJlbnRCbG9jay0+
aXNCbG9ja0Zsb3coKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBmaXJzdExldHRl
ckJsb2NrID0gcGFyZW50QmxvY2s7CisgICAgfSAKKworICAgIHJldHVybiAwOworfQorCit2b2lk
IEZpcnN0TGV0dGVyVXBkYXRlcjo6dXBkYXRlKCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpOworCisgICAgaWYgKCFkb2N1bWVudC0+dXNl
c0ZpcnN0TGV0dGVyUnVsZXMoKSB8fCAhbV9yZW5kZXJlci0+c2hvdWxkVXBkYXRlRmlyc3RMZXR0
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIERvbid0IHJlY3VyCisgICAgaWYgKG1fcmVu
ZGVyZXItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVzdHJveSB0aGUgZmlyc3QtbGV0dGVy
IG9iamVjdCBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGZpcnN0IGNoaWxkLiBOZWVkIHRvIGZpbmQK
KyAgICAvLyBhbiBlZmZpY2llbnQgd2F5IHRvIGNoZWNrIGZvciB0aGF0IHNpdHVhdGlvbiB0aG91
Z2ggYmVmb3JlIGltcGxlbWVudGluZyBhbnl0aGluZy4KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0
TGV0dGVyQmxvY2sgPSBmaW5kRmlyc3RMZXR0ZXJCbG9jaygpOworICAgIGlmICghZmlyc3RMZXR0
ZXJCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRHJpbGwgaW50byBpbmxpbmVzIGxv
b2tpbmcgZm9yIG91ciBmaXJzdCB0ZXh0IGNoaWxkLgorICAgIFJlbmRlck9iamVjdCogY3VyckNo
aWxkID0gZmlyc3RMZXR0ZXJCbG9jay0+Zmlyc3RDaGlsZCgpOworICAgIHdoaWxlIChjdXJyQ2hp
bGQpIHsKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNUZXh0KCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNMaXN0TWFya2VyKCkpCisgICAgICAgICAgICBj
dXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGVsc2UgaWYgKGN1
cnJDaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CisgICAgICAgICAgICBpZiAoY3Vy
ckNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIpIHsKKyAgICAgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJD
aGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyQ2hpbGQtPmlzUmVw
bGFjZWQoKSB8fCBjdXJyQ2hpbGQtPmlzUmVuZGVyQnV0dG9uKCkgfHwgY3VyckNoaWxkLT5pc01l
bnVMaXN0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoY3VyckNoaWxk
LT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpICYmIGN1cnJDaGlsZC0+Y2Fu
SGF2ZUNoaWxkcmVuKCkpICB7CisgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIGxvd2VyLWxldmVs
IG5vZGUgd2l0aCBmaXJzdC1sZXR0ZXIsIHdoaWNoIHN1cGVyc2VkZXMgdGhlIGhpZ2hlci1sZXZl
bCBzdHlsZQorICAgICAgICAgICAgZmlyc3RMZXR0ZXJCbG9jayA9IGN1cnJDaGlsZDsKKyAgICAg
ICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZCgpOworICAg
IH0KKworICAgIGlmICghY3VyckNoaWxkKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJB
cmVuYSogYXJlbmEgPSBtX3JlbmRlcmVyLT5yZW5kZXJBcmVuYSgpOworICAgIFJlbmRlclZpZXcq
IHZpZXcgPSBtX3JlbmRlcmVyLT52aWV3KCk7CisKKyAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFk
eSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0
IHdhbnQKKyAgICAvLyB0byB1cGRhdGUgaXQuCisgICAgaWYgKGN1cnJDaGlsZC0+cGFyZW50KCkt
PnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgeworICAgICAgICBSZW5kZXJP
YmplY3QqIGZpcnN0TGV0dGVyID0gY3VyckNoaWxkLT5wYXJlbnQoKTsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJz
dExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CisgICAgICAgIEFTU0VSVChmaXJz
dExldHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKKworICAg
ICAgICBpZiAoTm9kZTo6ZGlmZihmaXJzdExldHRlci0+c3R5bGUoKSwgcHNldWRvU3R5bGUpID09
IE5vZGU6OkRldGFjaCkgeworICAgICAgICAgICAgLy8gVGhlIGZpcnN0LWxldHRlciByZW5kZXJl
ciBuZWVkcyB0byBiZSByZXBsYWNlZC4gQ3JlYXRlIGEgbmV3IHJlbmRlcmVyIG9mIHRoZSByaWdo
dCB0eXBlLgorICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdGaXJzdExldHRlcjsKKyAgICAg
ICAgICAgIGlmIChwc2V1ZG9TdHlsZS0+ZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAgICAg
ICAgICBuZXdGaXJzdExldHRlciA9IG5ldyAoYXJlbmEpIFJlbmRlcklubGluZShkb2N1bWVudCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcg
KGFyZW5hKSBSZW5kZXJCbG9jayhkb2N1bWVudCk7CisgICAgICAgICAgICBuZXdGaXJzdExldHRl
ci0+c2V0U3R5bGUocHNldWRvU3R5bGUpOworCisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBmaXJz
dCBsZXR0ZXIgaW50byB0aGUgbmV3IHJlbmRlcmVyLgorICAgICAgICAgICAgTGF5b3V0U3RhdGVE
aXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcpOworICAgICAgICAgICAgd2hpbGUgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRlci0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5k
ZXJUZXh0KGNoaWxkKS0+cmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygpOworICAgICAgICAgICAg
ICAgIGZpcnN0TGV0dGVyLT5yZW1vdmVDaGlsZChjaGlsZCk7CisgICAgICAgICAgICAgICAgbmV3
Rmlyc3RMZXR0ZXItPmFkZENoaWxkKGNoaWxkLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0ID0gMDsKKyAgICAgICAgICAg
IFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmcoKTsK
KyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVtYWluaW5nVGV4dE9iamVjdCA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoZmlyc3RMZXR0ZXIpLT5maXJzdExldHRlclJlbWFpbmluZ1RleHQoKTsK
KyAgICAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0T2JqZWN0ICYmIHJlbWFpbmluZ1RleHRPYmpl
Y3QtPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyZW1haW5pbmdUZXh0T2JqZWN0KS0+aXNUZXh0
RnJhZ21lbnQoKSkKKyAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gdG9SZW5kZXJUZXh0
RnJhZ21lbnQocmVtYWluaW5nVGV4dE9iamVjdCk7CisgICAgICAgICAgICBpZiAocmVtYWluaW5n
VGV4dCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdUZXh0LT5pc0Fub255bW91
cygpIHx8IHJlbWFpbmluZ1RleHQtPm5vZGUoKS0+cmVuZGVyZXIoKSA9PSByZW1haW5pbmdUZXh0
KTsKKyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgcmVuZGVyZXIgd2l0aCB0aGUg
bmV3IG9uZS4KKyAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcihu
ZXdGaXJzdExldHRlcik7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChu
ZXdGaXJzdExldHRlciktPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7Cisg
ICAgICAgICAgICBmaXJzdExldHRlciA9IG5ld0ZpcnN0TGV0dGVyOworICAgICAgICAgICAgZmly
c3RMZXR0ZXJDb250YWluZXItPmFkZENoaWxkKGZpcnN0TGV0dGVyLCBuZXh0U2libGluZyk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZmlyc3RMZXR0ZXItPnNldFN0eWxlKHBzZXVkb1N0
eWxlKTsKKworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogZ2VuQ2hpbGQgPSBmaXJzdExldHRl
ci0+Zmlyc3RDaGlsZCgpOyBnZW5DaGlsZDsgZ2VuQ2hpbGQgPSBnZW5DaGlsZC0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICAgICAgaWYgKGdlbkNoaWxkLT5pc1RleHQoKSkgCisgICAgICAgICAg
ICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHBzZXVkb1N0eWxlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWN1cnJDaGlsZC0+aXNUZXh0KCkgfHwgY3Vy
ckNoaWxkLT5pc0JSKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBjaGlsZCBk
b2VzIG5vdCBhbHJlYWR5IGhhdmUgc3R5bGUsIHdlIGNyZWF0ZSBpdCBoZXJlLgorICAgIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyQ2hpbGQtPnBhcmVudCgpOworCisg
ICAgLy8gT3VyIGxheW91dCBzdGF0ZSBpcyBub3QgdmFsaWQgZm9yIHRoZSByZXBhaW50cyB3ZSBh
cmUgZ29pbmcgdG8gdHJpZ2dlciBieQorICAgIC8vIGFkZGluZyBhbmQgcmVtb3ZpbmcgY2hpbGRy
ZW4gb2YgZmlyc3RMZXR0ZXJDb250YWluZXIuCisgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlv
dXRTdGF0ZURpc2FibGVyKHZpZXcpOworCisgICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHRvUmVu
ZGVyVGV4dChjdXJyQ2hpbGQpOworCisgICAgLy8gQ3JlYXRlIG91ciBwc2V1ZG8gc3R5bGUgbm93
IHRoYXQgd2UgaGF2ZSBvdXIgZmlyc3RMZXR0ZXJDb250YWluZXIgZGV0ZXJtaW5lZC4KKyAgICBS
ZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVy
QmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKworICAgIFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXIgPSAwOworICAgIGlmIChwc2V1ZG9TdHlsZS0+ZGlzcGxheSgpID09IElOTElORSkKKyAg
ICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUoZG9jdW1lbnQpOwor
ICAgIGVsc2UKKyAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhk
b2N1bWVudCk7CisgICAgZmlyc3RMZXR0ZXItPnNldFN0eWxlKHBzZXVkb1N0eWxlKTsKKyAgICBm
aXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQoZmlyc3RMZXR0ZXIsIGN1cnJDaGlsZCk7CisK
KyAgICAvLyBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIGdvaW5nIHRvIGJlIGVpdGhlciBhIGdlbmVy
YXRlZCBjb250ZW50IHN0cmluZyBvciBhIERPTSBub2RlJ3MKKyAgICAvLyBzdHJpbmcuIFdlIHdh
bnQgdGhlIG9yaWdpbmFsIHN0cmluZyBiZWZvcmUgaXQgZ290IHRyYW5zZm9ybWVkIGluIGNhc2Ug
Zmlyc3QtbGV0dGVyIGhhcworICAgIC8vIG5vIHRleHQtdHJhbnNmb3JtIG9yIGEgZGlmZmVyZW50
IHRleHQtdHJhbnNmb3JtIGFwcGxpZWQgdG8gaXQuCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9s
ZFRleHQgPSB0ZXh0T2JqLT5vcmlnaW5hbFRleHQoKTsKKyAgICBBU1NFUlQob2xkVGV4dCk7CisK
KyAgICBpZiAob2xkVGV4dCAmJiBvbGRUZXh0LT5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gMDsKKworICAgICAgICAvLyBBY2NvdW50IGZvciBsZWFkaW5nIHNwYWNl
cyBhbmQgcHVuY3R1YXRpb24uCisgICAgICAgIHdoaWxlIChsZW5ndGggPCBvbGRUZXh0LT5sZW5n
dGgoKSAmJiBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoKCpvbGRUZXh0KVtsZW5ndGhdKSkKKyAg
ICAgICAgICAgIGxlbmd0aCsrOworCisgICAgICAgIC8vIEFjY291bnQgZm9yIGZpcnN0IGxldHRl
ci4KKyAgICAgICAgbGVuZ3RoKys7CisgICAgICAgIAorICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
Zm9yIHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRpb24sIGJ1dCBhdm9pZAorICAgICAg
ICAvLyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGludG8gdGhlIDpmaXJzdC1sZXR0ZXIu
CisgICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxlbmd0aDsgc2Nhbkxlbmd0aCA8
IG9sZFRleHQtPmxlbmd0aCgpOyArK3NjYW5MZW5ndGgpIHsKKyAgICAgICAgICAgIFVDaGFyIGMg
PSAoKm9sZFRleHQpW3NjYW5MZW5ndGhdOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoYykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGlmIChpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYykpCisgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gc2Nhbkxlbmd0aCArIDE7CisgICAgICAgICB9CisgICAgICAgICAK
KyAgICAgICAgLy8gQ29uc3RydWN0IGEgdGV4dCBmcmFnbWVudCBmb3IgdGhlIHRleHQgYWZ0ZXIg
dGhlIGZpcnN0IGxldHRlci4KKyAgICAgICAgLy8gVGhpcyB0ZXh0IGZyYWdtZW50IG1pZ2h0IGJl
IGVtcHR5LgorICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIHJlbWFpbmluZ1RleHQgPSAKKyAg
ICAgICAgICAgIG5ldyAoYXJlbmEpIFJlbmRlclRleHRGcmFnbWVudCh0ZXh0T2JqLT5ub2RlKCkg
PyB0ZXh0T2JqLT5ub2RlKCkgOiB0ZXh0T2JqLT5kb2N1bWVudCgpLCBvbGRUZXh0LmdldCgpLCBs
ZW5ndGgsIG9sZFRleHQtPmxlbmd0aCgpIC0gbGVuZ3RoKTsKKyAgICAgICAgcmVtYWluaW5nVGV4
dC0+c2V0U3R5bGUodGV4dE9iai0+c3R5bGUoKSk7CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0
LT5ub2RlKCkpCisgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5ub2RlKCktPnNldFJlbmRlcmVy
KHJlbWFpbmluZ1RleHQpOworCisgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGls
ZChyZW1haW5pbmdUZXh0LCB0ZXh0T2JqKTsKKyAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXIt
PnJlbW92ZUNoaWxkKHRleHRPYmopOworICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExl
dHRlcihmaXJzdExldHRlcik7CisgICAgICAgIHRvUmVuZGVyQm94TW9kZWxPYmplY3QoZmlyc3RM
ZXR0ZXIpLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7CisgICAg
ICAgIAorICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxl
dHRlcgorICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlciA9IAorICAgICAgICAgICAg
bmV3IChhcmVuYSkgUmVuZGVyVGV4dEZyYWdtZW50KHJlbWFpbmluZ1RleHQtPm5vZGUoKSA/IHJl
bWFpbmluZ1RleHQtPm5vZGUoKSA6IHJlbWFpbmluZ1RleHQtPmRvY3VtZW50KCksIG9sZFRleHQu
Z2V0KCksIDAsIGxlbmd0aCk7CisgICAgICAgIGxldHRlci0+c2V0U3R5bGUocHNldWRvU3R5bGUp
OworICAgICAgICBmaXJzdExldHRlci0+YWRkQ2hpbGQobGV0dGVyKTsKKworICAgICAgICB0ZXh0
T2JqLT5kZXN0cm95KCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlyc3RMZXR0ZXJVcGRhdGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2Y5ZmEzMTk2NTg1N2IwNTdlMmVjY2FlMWZlMTAwMzAzZTBlNTA5MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXJzdExldHRlclVwZGF0ZXIuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdt
YWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
Rmlyc3RMZXR0ZXJVcGRhdGVyX2gKKyNkZWZpbmUgRmlyc3RMZXR0ZXJVcGRhdGVyX2gKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJCbG9j
azsKKworY2xhc3MgRmlyc3RMZXR0ZXJVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBGaXJzdExldHRl
clVwZGF0ZXIoUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVu
ZGVyZXIpCisgICAgeyB9CisKKyAgICB2b2lkIHVwZGF0ZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFJlbmRlck9iamVjdCogZmluZEZpcnN0TGV0dGVyQmxvY2soKSBjb25zdDsKKworICAgIFJl
bmRlckJsb2NrKiBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRmlyc3RMZXR0ZXJVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCmluZGV4IDc2MzIxZjE1ZTlmMDRhMjUwN2M1YTRiMGRiNmQ2OTNjN2JlN2Zk
NDYuLjUzODVmMzViOWRiNjRjZWViYjM0OGU3MDZiNWU5MTQwMTk4OGJmMjQgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkNvbHVtbkluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJGaXJzdExldHRlclVwZGF0ZXIuaCIKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBA
IC0xMzA4LDggKzEzMDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogewotICAgIC8vIFVwZGF0
ZSBvdXIgZmlyc3QgbGV0dGVyIGluZm8gbm93LgotICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7Cisg
ICAgRmlyc3RMZXR0ZXJVcGRhdGVyKHRoaXMpLnVwZGF0ZSgpOwogCiAgICAgLy8gVGFibGUgY2Vs
bHMgY2FsbCBsYXlvdXRCbG9jayBkaXJlY3RseSwgc28gZG9uJ3QgYWRkIGFueSBsb2dpYyBoZXJl
LiAgUHV0IGNvZGUgaW50bwogICAgIC8vIGxheW91dEJsb2NrKCkuCkBAIC01MDkyLDcgKzUwOTIs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7
CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIHVwZGF0
ZUZpcnN0TGV0dGVyKCk7CisgICAgRmlyc3RMZXR0ZXJVcGRhdGVyKHRoaXMpLnVwZGF0ZSgpOwog
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGlmICghaXNUYWJs
ZUNlbGwoKSAmJiBzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVU
b1VzZS0+bG9naWNhbFdpZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5bGUoKS0+bWFycXVlZUJlaGF2
aW9yKCkgIT0gTUFMVEVSTkFURSkKQEAgLTU3OTAsMjMwICs1NzkwLDYgQEAgUmVuZGVyQmxvY2sq
IFJlbmRlckJsb2NrOjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAgICAgcmV0dXJuIGZpcnN0TGlu
ZUJsb2NrOwogfQogCi1zdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yRmlyc3RMZXR0ZXIoUmVu
ZGVyT2JqZWN0KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyKQotewotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxv
Y2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwgZmlyc3RMZXR0ZXJDb250YWlu
ZXItPmZpcnN0TGluZVN0eWxlKCkpOwotICAgIC8vIEZvcmNlIGlubGluZSBkaXNwbGF5IChleGNl
cHQgZm9yIGZsb2F0aW5nIGZpcnN0LWxldHRlcnMpLgotICAgIHBzZXVkb1N0eWxlLT5zZXREaXNw
bGF5KHBzZXVkb1N0eWxlLT5pc0Zsb2F0aW5nKCkgPyBCTE9DSyA6IElOTElORSk7Ci0gICAgLy8g
Q1NTMiBzYXlzIGZpcnN0LWxldHRlciBjYW4ndCBiZSBwb3NpdGlvbmVkLgotICAgIHBzZXVkb1N0
eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0gICAgcmV0dXJuIHBzZXVkb1N0eWxl
OwotfQotCi0vLyBDU1MgMi4xIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3NlbGVjdG9yLmh0
bWwjZmlyc3QtbGV0dGVyCi0vLyAiUHVuY3R1YXRpb24gKGkuZSwgY2hhcmFjdGVycyBkZWZpbmVk
IGluIFVuaWNvZGUgW1VOSUNPREVdIGluIHRoZSAib3BlbiIgKFBzKSwgImNsb3NlIiAoUGUpLAot
Ly8gImluaXRpYWwiIChQaSkuICJmaW5hbCIgKFBmKSBhbmQgIm90aGVyIiAoUG8pIHB1bmN0dWF0
aW9uIGNsYXNzZXMpLCB0aGF0IHByZWNlZGVzIG9yIGZvbGxvd3MgdGhlIGZpcnN0IGxldHRlciBz
aG91bGQgYmUgaW5jbHVkZWQiCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQdW5jdHVhdGlvbkZvckZp
cnN0TGV0dGVyKFVDaGFyIGMpCi17Ci0gICAgQ2hhckNhdGVnb3J5IGNoYXJDYXRlZ29yeSA9IGNh
dGVnb3J5KGMpOwotICAgIHJldHVybiBjaGFyQ2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fT3Blbgot
ICAgICAgICB8fCBjaGFyQ2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fQ2xvc2UKLSAgICAgICAgfHwg
Y2hhckNhdGVnb3J5ID09IFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZQotICAgICAgICB8fCBjaGFy
Q2F0ZWdvcnkgPT0gUHVuY3R1YXRpb25fRmluYWxRdW90ZQotICAgICAgICB8fCBjaGFyQ2F0ZWdv
cnkgPT0gUHVuY3R1YXRpb25fT3RoZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRT
a2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGlu
ZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIo
Yyk7Ci19Ci0KLS8vIFdlIG9ubHkgaG9ub3IgZmlyc3QtbGV0dGVyIGlmIAotLy8gLSB0aGUgZmly
c3RMZXR0ZXJCbG9jayBjYW4gaGF2ZSBjaGlsZHJlbiBpbiB0aGUgRE9NIGFuZAotLy8gLSB0aGUg
YmxvY2sgZG9lc24ndCBoYXZlIGFueSBzcGVjaWFsIGFzc3VtcHRpb24gb24gaXRzIHRleHQgY2hp
bGRyZW4uCi0vLyBUaGlzIGNvcnJlY3RseSBwcmV2ZW50cyBmb3JtIGNvbnRyb2xzIGZyb20gaG9u
b3JpbmcgZmlyc3QtbGV0dGVyLgotc3RhdGljIGlubGluZSBib29sIGlzU2FmZVRvQ3JlYXRlRmly
c3RMZXR0ZXJSZW5kZXJlck9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJu
IChyZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkKLSAgICAgICAgICAgICYmICEocmVuZGVyZXIt
PmlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkKLSAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nh
c3Q8UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Kj4ocmVuZGVyZXIpLT5idXR0b25UZXh0KCkp
KTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldHRlckJsb2Nr
KFJlbmRlckJsb2NrKiBzdGFydCkKLXsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQmxv
Y2sgPSBzdGFydDsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBib29sIGNhbkhhdmVGaXJz
dExldHRlclJlbmRlcmVyID0gZmlyc3RMZXR0ZXJCbG9jay0+c3R5bGUoKS0+aGFzUHNldWRvU3R5
bGUoRklSU1RfTEVUVEVSKQotICAgICAgICAgICAgJiYgaXNTYWZlVG9DcmVhdGVGaXJzdExldHRl
clJlbmRlcmVyT24oZmlyc3RMZXR0ZXJCbG9jayk7Ci0gICAgICAgIGlmIChjYW5IYXZlRmlyc3RM
ZXR0ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiBmaXJzdExldHRlckJsb2NrOwotCi0g
ICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50QmxvY2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJl
bnQoKTsKLSAgICAgICAgaWYgKGZpcnN0TGV0dGVyQmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFy
ZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2Nr
IHx8IAotICAgICAgICAgICAgIXBhcmVudEJsb2NrLT5pc0Jsb2NrRmxvdygpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIGZpcnN0TGV0dGVyQmxvY2sgPSBwYXJlbnRCbG9jazsKLSAg
ICB9IAotCi0gICAgcmV0dXJuIDA7Ci19Ci0gICAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZp
cnN0TGV0dGVyKCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KCktPnVzZXNGaXJzdExldHRlclJ1bGVz
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEb24ndCByZWN1cgotICAgIGlmIChzdHlsZSgp
LT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIGZpcnN0LWxldHRlciBvYmplY3QgaWYgaXQg
aXMgbm8gbG9uZ2VyIHRoZSBmaXJzdCBjaGlsZC4gIE5lZWQgdG8gZmluZAotICAgIC8vIGFuIGVm
ZmljaWVudCB3YXkgdG8gY2hlY2sgZm9yIHRoYXQgc2l0dWF0aW9uIHRob3VnaCBiZWZvcmUgaW1w
bGVtZW50aW5nIGFueXRoaW5nLgotICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9
IGZpbmRGaXJzdExldHRlckJsb2NrKHRoaXMpOwotICAgIGlmICghZmlyc3RMZXR0ZXJCbG9jaykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRHJpbGwgaW50byBpbmxpbmVzIGxvb2tpbmcgZm9y
IG91ciBmaXJzdCB0ZXh0IGNoaWxkLgotICAgIFJlbmRlck9iamVjdCogY3VyckNoaWxkID0gZmly
c3RMZXR0ZXJCbG9jay0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKLSAg
ICAgICAgaWYgKGN1cnJDaGlsZC0+aXNUZXh0KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+aXNMaXN0TWFya2VyKCkpCi0gICAgICAgICAgICBjdXJyQ2hpbGQg
PSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGVsc2UgaWYgKGN1cnJDaGlsZC0+
aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICBpZiAoY3VyckNoaWxkLT5z
dHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIpIHsKLSAgICAgICAgICAgICAgICBj
dXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyQ2hpbGQtPmlzUmVwbGFjZWQoKSB8
fCBjdXJyQ2hpbGQtPmlzUmVuZGVyQnV0dG9uKCkgfHwgY3VyckNoaWxkLT5pc01lbnVMaXN0KCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoY3VyckNoaWxkLT5zdHlsZSgp
LT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpICYmIGN1cnJDaGlsZC0+Y2FuSGF2ZUNoaWxk
cmVuKCkpICB7Ci0gICAgICAgICAgICAvLyBXZSBmb3VuZCBhIGxvd2VyLWxldmVsIG5vZGUgd2l0
aCBmaXJzdC1sZXR0ZXIsIHdoaWNoIHN1cGVyc2VkZXMgdGhlIGhpZ2hlci1sZXZlbCBzdHlsZQot
ICAgICAgICAgICAgZmlyc3RMZXR0ZXJCbG9jayA9IGN1cnJDaGlsZDsKLSAgICAgICAgICAgIGN1
cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZCgpOwotICAg
IH0KLQotICAgIGlmICghY3VyckNoaWxkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0
aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVh
dGVkLCBzbyB3ZSBqdXN0IHdhbnQKLSAgICAvLyB0byB1cGRhdGUgaXQuCi0gICAgaWYgKGN1cnJD
aGlsZC0+cGFyZW50KCktPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyID0gY3VyckNoaWxkLT5wYXJlbnQoKTsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGZpcnN0TGV0dGVy
LT5wYXJlbnQoKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JG
aXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7Ci0gICAg
ICAgIEFTU0VSVChmaXJzdExldHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lu
bGluZSgpKTsKLQotICAgICAgICBpZiAoTm9kZTo6ZGlmZihmaXJzdExldHRlci0+c3R5bGUoKSwg
cHNldWRvU3R5bGUpID09IE5vZGU6OkRldGFjaCkgewotICAgICAgICAgICAgLy8gVGhlIGZpcnN0
LWxldHRlciByZW5kZXJlciBuZWVkcyB0byBiZSByZXBsYWNlZC4gQ3JlYXRlIGEgbmV3IHJlbmRl
cmVyIG9mIHRoZSByaWdodCB0eXBlLgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdGaXJz
dExldHRlcjsKLSAgICAgICAgICAgIGlmIChwc2V1ZG9TdHlsZS0+ZGlzcGxheSgpID09IElOTElO
RSkKLSAgICAgICAgICAgICAgICBuZXdGaXJzdExldHRlciA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVySW5saW5lKGRvY3VtZW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG5ld0ZpcnN0TGV0dGVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhkb2N1
bWVudCgpKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRTdHlsZShwc2V1ZG9TdHls
ZSk7Ci0KLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIGZpcnN0IGxldHRlciBpbnRvIHRoZSBuZXcg
cmVuZGVyZXIuCi0gICAgICAgICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlz
YWJsZXIodmlldygpKTsKLSAgICAgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
Zmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dChjaGlsZCktPnJlbW92
ZUFuZERlc3Ryb3lUZXh0Qm94ZXMoKTsKLSAgICAgICAgICAgICAgICBmaXJzdExldHRlci0+cmVt
b3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGls
ZChjaGlsZCwgMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlbmRlclRleHRGcmFn
bWVudCogcmVtYWluaW5nVGV4dCA9IDA7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRT
aWJsaW5nID0gZmlyc3RMZXR0ZXItPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbWFpbmluZ1RleHRPYmplY3QgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGZpcnN0
TGV0dGVyKS0+Zmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCk7Ci0gICAgICAgICAgICBpZiAocmVt
YWluaW5nVGV4dE9iamVjdCAmJiByZW1haW5pbmdUZXh0T2JqZWN0LT5pc1RleHQoKSAmJiB0b1Jl
bmRlclRleHQocmVtYWluaW5nVGV4dE9iamVjdCktPmlzVGV4dEZyYWdtZW50KCkpCi0gICAgICAg
ICAgICAgICAgcmVtYWluaW5nVGV4dCA9IHRvUmVuZGVyVGV4dEZyYWdtZW50KHJlbWFpbmluZ1Rl
eHRPYmplY3QpOwotICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQocmVtYWluaW5nVGV4dC0+aXNBbm9ueW1vdXMoKSB8fCByZW1haW5pbmdUZXh0
LT5ub2RlKCktPnJlbmRlcmVyKCkgPT0gcmVtYWluaW5nVGV4dCk7Ci0gICAgICAgICAgICAgICAg
Ly8gUmVwbGFjZSB0aGUgb2xkIHJlbmRlcmVyIHdpdGggdGhlIG5ldyBvbmUuCi0gICAgICAgICAg
ICAgICAgcmVtYWluaW5nVGV4dC0+c2V0Rmlyc3RMZXR0ZXIobmV3Rmlyc3RMZXR0ZXIpOwotICAg
ICAgICAgICAgICAgIHRvUmVuZGVyQm94TW9kZWxPYmplY3QobmV3Rmlyc3RMZXR0ZXIpLT5zZXRG
aXJzdExldHRlclJlbWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBmaXJzdExldHRlci0+ZGVzdHJveSgpOwotICAgICAgICAgICAgZmlyc3RMZXR0
ZXIgPSBuZXdGaXJzdExldHRlcjsKLSAgICAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5h
ZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGZpcnN0TGV0dGVyLT5zZXRTdHlsZShwc2V1ZG9TdHlsZSk7Ci0KLSAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGdlbkNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKTsgZ2Vu
Q2hpbGQ7IGdlbkNoaWxkID0gZ2VuQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAg
IGlmIChnZW5DaGlsZC0+aXNUZXh0KCkpIAotICAgICAgICAgICAgICAgIGdlbkNoaWxkLT5zZXRT
dHlsZShwc2V1ZG9TdHlsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFjdXJyQ2hpbGQtPmlzVGV4dCgpIHx8IGN1cnJDaGlsZC0+aXNCUigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgY2hpbGQgZG9lcyBub3QgYWxyZWFkeSBoYXZl
IHN0eWxlLCB3ZSBjcmVhdGUgaXQgaGVyZS4KLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVy
Q29udGFpbmVyID0gY3VyckNoaWxkLT5wYXJlbnQoKTsKLQotICAgIC8vIE91ciBsYXlvdXQgc3Rh
dGUgaXMgbm90IHZhbGlkIGZvciB0aGUgcmVwYWludHMgd2UgYXJlIGdvaW5nIHRvIHRyaWdnZXIg
YnkKLSAgICAvLyBhZGRpbmcgYW5kIHJlbW92aW5nIGNoaWxkcmVuIG9mIGZpcnN0TGV0dGVyQ29u
dGFpbmVyLgotICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3
KCkpOwotCi0gICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHRvUmVuZGVyVGV4dChjdXJyQ2hpbGQp
OwotCi0gICAgLy8gQ3JlYXRlIG91ciBwc2V1ZG8gc3R5bGUgbm93IHRoYXQgd2UgaGF2ZSBvdXIg
Zmlyc3RMZXR0ZXJDb250YWluZXIgZGV0ZXJtaW5lZC4KLSAgICBSZW5kZXJTdHlsZSogcHNldWRv
U3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVy
Q29udGFpbmVyKTsKLQotICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXIgPSAwOwotICAgIGlm
IChwc2V1ZG9TdHlsZS0+ZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgZmlyc3RMZXR0ZXIg
PSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlcklubGluZShkb2N1bWVudCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGZpcnN0TGV0dGVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhk
b2N1bWVudCgpKTsKLSAgICBmaXJzdExldHRlci0+c2V0U3R5bGUocHNldWRvU3R5bGUpOwotICAg
IGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgY3VyckNoaWxkKTsK
LQotICAgIC8vIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgZWl0aGVyIGEgZ2Vu
ZXJhdGVkIGNvbnRlbnQgc3RyaW5nIG9yIGEgRE9NIG5vZGUncwotICAgIC8vIHN0cmluZy4gIFdl
IHdhbnQgdGhlIG9yaWdpbmFsIHN0cmluZyBiZWZvcmUgaXQgZ290IHRyYW5zZm9ybWVkIGluIGNh
c2UgZmlyc3QtbGV0dGVyIGhhcwotICAgIC8vIG5vIHRleHQtdHJhbnNmb3JtIG9yIGEgZGlmZmVy
ZW50IHRleHQtdHJhbnNmb3JtIGFwcGxpZWQgdG8gaXQuCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG9sZFRleHQgPSB0ZXh0T2JqLT5vcmlnaW5hbFRleHQoKTsKLSAgICBBU1NFUlQob2xkVGV4dCk7
Ci0KLSAgICBpZiAob2xkVGV4dCAmJiBvbGRUZXh0LT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgICAgICAvLyBBY2NvdW50IGZvciBsZWFkaW5nIHNw
YWNlcyBhbmQgcHVuY3R1YXRpb24uCi0gICAgICAgIHdoaWxlIChsZW5ndGggPCBvbGRUZXh0LT5s
ZW5ndGgoKSAmJiBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoKCpvbGRUZXh0KVtsZW5ndGhdKSkK
LSAgICAgICAgICAgIGxlbmd0aCsrOwotCi0gICAgICAgIC8vIEFjY291bnQgZm9yIGZpcnN0IGxl
dHRlci4KLSAgICAgICAgbGVuZ3RoKys7Ci0gICAgICAgIAotICAgICAgICAvLyBLZWVwIGxvb2tp
bmcgZm9yIHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRpb24sIGJ1dCBhdm9pZAotICAg
ICAgICAvLyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGludG8gdGhlIDpmaXJzdC1sZXR0
ZXIuCi0gICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxlbmd0aDsgc2Nhbkxlbmd0
aCA8IG9sZFRleHQtPmxlbmd0aCgpOyArK3NjYW5MZW5ndGgpIHsKLSAgICAgICAgICAgIFVDaGFy
IGMgPSAoKm9sZFRleHQpW3NjYW5MZW5ndGhdOyAKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoYykpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGlmIChpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYykpCi0gICAg
ICAgICAgICAgICAgbGVuZ3RoID0gc2Nhbkxlbmd0aCArIDE7Ci0gICAgICAgICB9Ci0gICAgICAg
ICAKLSAgICAgICAgLy8gQ29uc3RydWN0IGEgdGV4dCBmcmFnbWVudCBmb3IgdGhlIHRleHQgYWZ0
ZXIgdGhlIGZpcnN0IGxldHRlci4KLSAgICAgICAgLy8gVGhpcyB0ZXh0IGZyYWdtZW50IG1pZ2h0
IGJlIGVtcHR5LgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIHJlbWFpbmluZ1RleHQgPSAK
LSAgICAgICAgICAgIG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4dEZyYWdtZW50KHRleHRP
YmotPm5vZGUoKSA/IHRleHRPYmotPm5vZGUoKSA6IHRleHRPYmotPmRvY3VtZW50KCksIG9sZFRl
eHQuZ2V0KCksIGxlbmd0aCwgb2xkVGV4dC0+bGVuZ3RoKCkgLSBsZW5ndGgpOwotICAgICAgICBy
ZW1haW5pbmdUZXh0LT5zZXRTdHlsZSh0ZXh0T2JqLT5zdHlsZSgpKTsKLSAgICAgICAgaWYgKHJl
bWFpbmluZ1RleHQtPm5vZGUoKSkKLSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQtPm5vZGUoKS0+
c2V0UmVuZGVyZXIocmVtYWluaW5nVGV4dCk7Ci0KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWlu
ZXItPmFkZENoaWxkKHJlbWFpbmluZ1RleHQsIHRleHRPYmopOwotICAgICAgICBmaXJzdExldHRl
ckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQodGV4dE9iaik7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQt
PnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsKLSAgICAgICAgdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChmaXJzdExldHRlciktPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdU
ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0
aGUgZmlyc3QgbGV0dGVyCi0gICAgICAgIFJlbmRlclRleHRGcmFnbWVudCogbGV0dGVyID0gCi0g
ICAgICAgICAgICBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHRGcmFnbWVudChyZW1haW5p
bmdUZXh0LT5ub2RlKCkgPyByZW1haW5pbmdUZXh0LT5ub2RlKCkgOiByZW1haW5pbmdUZXh0LT5k
b2N1bWVudCgpLCBvbGRUZXh0LmdldCgpLCAwLCBsZW5ndGgpOwotICAgICAgICBsZXR0ZXItPnNl
dFN0eWxlKHBzZXVkb1N0eWxlKTsKLSAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENoaWxkKGxldHRl
cik7Ci0KLSAgICAgICAgdGV4dE9iai0+ZGVzdHJveSgpOwotICAgIH0KLX0KLQogLy8gSGVscGVy
IG1ldGhvZHMgZm9yIG9idGFpbmluZyB0aGUgbGFzdCBsaW5lLCBjb21wdXRpbmcgbGluZSBjb3Vu
dHMgYW5kIGhlaWdodHMgZm9yIGxpbmUgY291bnRzCiAvLyAoY3Jhd2xpbmcgaW50byBibG9ja3Mp
Lgogc3RhdGljIGJvb2wgc2hvdWxkQ2hlY2tMaW5lcyhSZW5kZXJPYmplY3QqIG9iaikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggODk5NmRhNWVmM2FmZDBjNTFkZDVj
MjhlNTY4MmY5NDZmZjgxYTg1YS4uY2E3YWJiMjFhMGI2ZjU0N2FjNDMwYTdlMjYxNjJmODZkN2M0
NWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTI5NCw3ICsy
OTQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVu
dChjb25zdCBFVGV4dEFsaWduJiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgZmxvYXQmIGxv
Z2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKIAotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGaXJzdExldHRlcigpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVcGRhdGVG
aXJzdExldHRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGNsYXNzIE1hcmdpblZh
bHVlcyB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHAKaW5kZXggODgzMjE4ZDRmNzZmYzJkZDc2NWU5YTYyNzg2MGYwYjdjMDMwYTI4YS4u
YWE1NmRjNjRjNTE0NTU1ZjIxYTdhN2Q3ZGFjNzM0NmIwMTA4NWI1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiRmlyc3RMZXR0ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIK
QEAgLTI0NSw3ICsyNDYsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2Nh
dGlvbigpCiAgICAgICAgICAgICAvLyBSZW1vdmluZyBhbmQgYWRkaW5nIHRoZSBtYXJrZXIgY2Fu
IHRyaWdnZXIgcmVwYWludGluZyBpbgogICAgICAgICAgICAgLy8gY29udGFpbmVycyBvdGhlciB0
aGFuIG91cnNlbHZlcywgc28gd2UgbmVlZCB0byBkaXNhYmxlIExheW91dFN0YXRlLgogICAgICAg
ICAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7Ci0g
ICAgICAgICAgICB1cGRhdGVGaXJzdExldHRlcigpOworICAgICAgICAgICAgRmlyc3RMZXR0ZXJV
cGRhdGVyKHRoaXMpLnVwZGF0ZSgpOwogICAgICAgICAgICAgbV9tYXJrZXItPnJlbW92ZSgpOwog
ICAgICAgICAgICAgLy8gSWYgbWFya2VyUGFyIGlzIGFuIGFub255bW91cyBibG9jayB0aGF0IHdp
bGwgbG9zZSBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0CiAgICAgICAgICAgICBpZiAobWFy
a2VyUGFyICYmIChtYXJrZXJQYXIgIT0gbGluZUJveFBhcmVudCkgJiYgbWFya2VyUGFyLT5pc0Fu
b255bW91c0Jsb2NrKCkgJiYgISh0b1JlbmRlckJsb2NrKG1hcmtlclBhciktPmZpcnN0Q2hpbGQo
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKaW5kZXggNTMw
YzZiZGIyY2M2ZDBhN2VkZmUxNzM4ODZiNjFhOThlZGI2ZjA1Zi4uODNiOTYwZmExMTUxZDc3ZDBj
YzcxNWRhY2Q2MWU3M2UzNDdhYTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5UnVuLmNwcApAQCAtOTgsMTAgKzk4LDYgQEAgUmVuZGVyQmxvY2sqIFJlbmRlclJ1YnlS
dW46OmZpcnN0TGluZUJsb2NrKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5k
ZXJSdWJ5UnVuOjp1cGRhdGVGaXJzdExldHRlcigpCi17Ci19Ci0KIGJvb2wgUmVuZGVyUnVieVJ1
bjo6aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5bGUqKSBjb25z
dAogewogICAgIHJldHVybiBjaGlsZC0+aXNSdWJ5VGV4dCgpIHx8IGNoaWxkLT5pc0lubGluZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKaW5kZXggZjY1YWQ4NmM2
YmFiZDA4OTY5ZjdjMmQ4ODBkYThjNzkyY2NkYmRhYi4uOWRmNGZhY2E4ODY4ODFiYjFkZDE3OTg1
MTllNGE0Mzk1ZjUzOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1
bi5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJz
dExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigp
OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVcGRhdGVGaXJzdExldHRlcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGdldE92ZXJoYW5nKGJvb2wgZmlyc3RM
aW5lLCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5kUmVuZGVy
ZXIsIGludCYgc3RhcnRPdmVyaGFuZywgaW50JiBlbmRPdmVyaGFuZykgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDFhNDI2NTJkYjUzZDE2NWIy
YjU4ODlkYTFlN2FhYTliYjdhMzdjOGEuLmE2NDM1ODkyOTE4ZTQyZDk3MDEyMzRmY2RhOTAwZWE0
NWUwNjFkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAt
MTE5NCwxMCArMTE5NCw2IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJUYWJsZTo6Zmlyc3RMaW5lQmxv
Y2soKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjp1cGRhdGVG
aXJzdExldHRlcigpCi17Ci19Ci0KIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmZpcnN0TGluZUJv
eEJhc2VsaW5lKCkgY29uc3QKIHsKICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggOWE2NTU3ZTAzMTMxZDQwNTkxNWY5
NmM2N2Y0ZmQ2NDczODU3OWFjOC4uMTgxNDYwYjY5MzA0OWUzOTIyZTg5MTFhNjU0YmY2ZDdkOTA2
YTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTIzNCw3ICsy
MzQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBmaXJzdExpbmVCb3hCYXNl
bGluZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2so
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXBkYXRlRmlyc3RMZXR0ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDZWxsTG9naWNhbFdpZHRocygp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3Bw
CmluZGV4IGZmNDA4MjQyMmI1YTk0MDM0MGI3MDNjYWI1ZTY4NWFmOTdkZjY0MzYuLmFmZDY4ZmE5
NGEzOGE3MTQ3MzQ1YWIwNDBhMjQ4NDQwOTY5ZjdjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAKKyNpbmNs
dWRlICJGaXJzdExldHRlclVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKIApAQCAtNjQsNyArNjUsNyBAQCB2b2lkIFJlbmRlclRleHRGcmFnbWVu
dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KgogCiAgICAgaWYgKFJlbmRlckJsb2NrKiBibG9jayA9IGJsb2NrRm9yQWNjb21wYW55aW5nRmly
c3RMZXR0ZXIoKSkgewogICAgICAgICBibG9jay0+c3R5bGUoKS0+cmVtb3ZlQ2FjaGVkUHNldWRv
U3R5bGUoRklSU1RfTEVUVEVSKTsKLSAgICAgICAgYmxvY2stPnVwZGF0ZUZpcnN0TGV0dGVyKCk7
CisgICAgICAgIEZpcnN0TGV0dGVyVXBkYXRlcihibG9jaykudXBkYXRlKCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRl
eCA3ZTllN2RkY2M4MDFmOWY5ODZiNGQyYTZlNzYwNDcwYmNhZjY1MzQzLi4zYzZlYWQ1ZTkxZGU1
OTQ0YTRmOTBkMDZlNTQ1MDNiNmQxOTRiNDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
b3VudGVyTm9kZS5jcHAiCiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guY3BwIgogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCIKKyNpbmNsdWRlICJGaXJzdExldHRlclVwZGF0ZXIuY3Bw
IgogI2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuY3BwIgogI2luY2x1ZGUgIkhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZS5jcHAiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5jcHAiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCBkOWNkZWNj
ZGY3ZWUxOGU2NDk2MzVkNGU2OWQ5M2QyY2M3ZDk1M2UxLi5hNWI2YjdmYzYzMTUyYTg4ZDI5MTc3
ZTg0MmI1ZTUzOTA2YjgwY2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAKQEAgLTM3MSwxMSArMzcxLDEzIEBAIFJlbmRlckJsb2NrKiBSZW5k
ZXJTVkdUZXh0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKKyNp
ZiAwCiAvLyBGaXggZm9yIDxyZGFyOi8vcHJvYmxlbS84MDQ4ODc1Pi4gV2Ugc2hvdWxkIG5vdCBy
ZW5kZXIgOmZpcnN0LWxldHRlciBDU1MgU3R5bGUKIC8vIGluIGEgU1ZHIHRleHQgZWxlbWVudCBj
b250ZXh0Lgogdm9pZCBSZW5kZXJTVkdUZXh0Ojp1cGRhdGVGaXJzdExldHRlcigpCiB7CiB9Cisj
ZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHJlY3Vyc2l2ZUNvbGxlY3RMYXlvdXRBdHRyaWJ1
dGVzKFJlbmRlck9iamVjdCogc3RhcnQsIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+
JiBhdHRyaWJ1dGVzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuaAppbmRleCA3YjBiNWVmYTgwZDM1NjI5ZTZjOGMwMmJjZjFmZmUzOTFhOGI0MDA5Li5j
MjMxYzc2N2RlOWMzOGNiYjlhZmE4MGM5Yzg3ZjM1MWM1OGU5MmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaApAQCAtODYsNyArODYsOSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgUm9vdElubGluZUJveCogY3JlYXRlUm9vdElubGluZUJveCgpOwog
CiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2soKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKyAgICAvLyBGaXggZm9yIDxyZGFyOi8v
cHJvYmxlbS84MDQ4ODc1Pi4gV2Ugc2hvdWxkIG5vdCByZW5kZXIgOmZpcnN0LWxldHRlciBDU1Mg
U3R5bGUKKyAgICAvLyBpbiBhIFNWRyB0ZXh0IGVsZW1lbnQgY29udGV4dC4KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXBkYXRlRmlyc3RMZXR0ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgYm9vbCBtX25lZWRzUmVvcmRlcmluZyA6IDE7CiAgICAgYm9vbCBtX25l
ZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAxOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128988</attachid>
            <date>2012-02-27 02:02:11 -0800</date>
            <delta_ts>2012-02-27 10:43:56 -0800</delta_ts>
            <desc>Patch for for 72440, mistakenly attached here</desc>
            <filename>bug-79630-20120227190210.patch</filename>
            <type>text/plain</type>
            <size>6548</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjNmVkYTcwMWY3ZTVk
OGUwZTIyYWJmMjhkOTIxNWQwYjg5MWM4YS4uMGQ1Mjc0NzY2NjMzM2E1OGY4NzgzYWI3NDU2M2Nm
OTRkZjRiZGNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTI2ICBNT1JJ
VEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFJlbW92aW5nIDx1bD4s
IDxsaT4gaW5zaWRlIHNoYWRvdyBET00gdHJpZ2dlcnMgYXNzZXJ0aW9uIGluIHVwZGF0ZUxpc3RN
YXJrZXJOdW1iZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAg
ICBUaGlzIHByb2JsZW0gd2FzIGNhdXNlZCBieSB0aGUgaW5jb25zaXN0ZW50IGRldGFjaCBvcmRl
ciBvZiBET00gdHJlZSB3aGVyZQorICAgICAgICBFbGVtZW50OjpkZXRhY2goKSBjYWxsZWQgQ29u
dGFpbmVyTm9kZTo6ZGV0YWNoKCkgYmVmb3JlIHNoYWRvdyB0cmVlIGlzIGRldGFjaGVkLgorICAg
ICAgICBUaGlzIHJlc3VsdGVkIHRoZSByZW5kZXJlciBvZiB0aGUgZWxlbWVudCBiZWluZyBkZXN0
cm95ZWQgZXZlbiBpZiBpdHMgY2hpbGRyZW4sCisgICAgICAgIGVhY2ggb2Ygd2hpY2ggY2FtZSBm
cm9tIGFuIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyB0cmVlLCBhcmUgYWxpdmUuCisgICAgICAgIElu
IHByaW5jaXBsZSwgY2hpbGQgcmVuZGVyZXJzIHNob3VsZCBiZSBkZXN0cm95ZWQgYmVmb3JlIGl0
cyBwYXJlbnQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxpZ25zIHRoZSBkZXRhY2ggb3JkZXIg
d2l0aCB0aGUgYXR0YWNoIG9yZGVyLiBUaGUgc2hhZG93IHRyZWUgaXMKKyAgICAgICAgbm93IGRl
YXRjaGVkIGJlZm9yZSBwYXJlbnQncyBDb250YWluZXJOb2RlOjpkZXRhY2goKSBpcyBjYWxsZWQu
CisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L3NoYWRvdy11bC1saS5odG1sCisKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkZXRh
Y2gpOgorCiAyMDEyLTAyLTI3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVXNlIGJ1aWx0LWluIGJpbmQgaW4gRXh0ZW5zaW9uQVBJLmpzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggYjNkMmEwYTJkZjRkMDM0ZTRlNmIzM2YwZDZhNzcwNTYwNWFhOGVi
OC4uODk2ZWFiYjU2NzgzNzFhMjgyZTg3YjhmNTJjN2UzMWRiOTIyNWRhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtOTY0LDkgKzk2NCwxOCBAQCB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiAg
ICAgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkp
CiAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSgpOwotICAgIENvbnRhaW5l
ck5vZGU6OmRldGFjaCgpOwotICAgIGlmIChTaGFkb3dUcmVlKiB0cmVlID0gc2hhZG93VHJlZSgp
KQotICAgICAgICB0cmVlLT5kZXRhY2goKTsKKworICAgIGlmIChoYXNTaGFkb3dSb290KCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+YXR0YWNoZWQo
KSkKKyAgICAgICAgICAgICAgICBjaGlsZC0+ZGV0YWNoKCk7CisgICAgICAgIH0KKworICAgICAg
ICBzaGFkb3dUcmVlKCktPmRldGFjaCgpOworICAgICAgICBOb2RlOjpkZXRhY2goKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CisKIAogICAgIFJlbmRlcldp
ZGdldDo6cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpOwogfQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE2MzMxN2Nm
YTU4ZGUxMzBiMWRlMTFkZWRhM2FlOWI5MzcxZjFmNmUuLmRkYjI0ZDA4OTUzYjQ5NGFiNmE3Njg5
M2U0NWZkZDc2ODA2YzRmOTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMi0yNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZW1vdmluZyA8dWw+
LCA8bGk+IGluc2lkZSBzaGFkb3cgRE9NIHRyaWdnZXJzIGFzc2VydGlvbiBpbiB1cGRhdGVMaXN0
TWFya2VyTnVtYmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI0NDAKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy11bC1saS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLmh0bWw6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDoK
KwogMjAxMi0wMi0yMSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBnZXQgcmlkIG9mIFJhd1NvdXJjZUNvZGUuc291cmNl
TWFwcGluZyBnZXR0ZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
c2hhZG93LXVsLWxpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctdWwtbGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2Y2M4NTBjMWNmMTFkZjk5OGJi
ZTJkNThlMmQwNjk5ODE2MWZmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNT
IHVubGVzcyBjcmFzaC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctdWwtbGkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctdWwt
bGkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZjk5OThlOGQ2NzM2MjhlNWZhNjRiMGQ4MDY4ZGE2ZjdkMTEy
MmE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy11bC1saS5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgdmFyIHVsID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgndWwnKTsKKyAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwor
ICAgIHVsLmFwcGVuZENoaWxkKGxpKTsKKyAgICBzaGFkb3cuYXBwZW5kQ2hpbGQodWwpOworICAg
IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1M
ID0gJ1BBU1MgdW5sZXNzIGNyYXNoLic7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0idGVzdCgpIj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQK
aW5kZXggYTFlYzY0MTVlNWQyOTM4OGQwZWQ1ODZjM2IzOWI5NGJiOWI5NjZiZi4uOGZiNWVkMzE1
ODljMWY2ODAxNjE4N2I0NzBjMzNmOTI1NmJjMTAwMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQKQEAgLTQyOSw2ICs0MjksNyBAQCBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtanMtYXBp
Lmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZGlzYWJsZS5odG1sCiBmYXN0L2RvbS9zaGFk
b3cvc2hhZG93LXJvb3QtYXR0YWNoZWQuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290
LW5ldy5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLmh0bWwKIAogIyBKU0MgZG9l
cyBub3Qgc3VwcG9ydCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4gKGh0dHA6Ly93ZWJr
aXQub3JnL2IvNjE1NDApCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3Mt
b3JpZ2luLXhoci5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCBjMzVkMjFmODZmNjJk
YWE4ZTk5ZTgzY2VjYWI1YzExZTRjNTA0OTZhLi42M2ZmM2Y1MmU4NzViY2ViM2YzMzY0ZjE3YTY0
ZTAwYjU1YWYxN2E5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTE2Nyw2ICsxNjcsNyBA
QCBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRpc2FibGUuaHRtbAogZmFzdC9kb20vc2hhZG93L3No
YWRvdy1vbi1pbWFnZS5odG1sCiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYXR0YWNoZWQu
aHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LW5ldy5odG1sCitmYXN0L2RvbS9zaGFk
b3cvc2hhZG93LXVsLWxpLmh0bWwKIAogIyBDU1MgUmVnaW9ucyBzdXBwb3J0IG5vdCB5ZXQgZW5h
YmxlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi81NzMxMgogZmFzdC9yZWdpb25zCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCmluZGV4IDMxYjJjMjdiYTUxYjU4ZGFiOTE2NWRiMmNlN2U5MDVjOWZmMTNk
NmQuLjAwMDM2MWY5Yzg1OTdmNmUxMmJjMTAwZjM5NGEzNWMwNzI0MjVmMGQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkCkBAIC0xNDU4LDYgKzE0NTgsNyBAQCBmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LXJvb3QtanMtYXBpLmh0bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZGlzYWJsZS5odG1s
CiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtYXR0YWNoZWQuaHRtbAogZmFzdC9kb20vc2hh
ZG93L3NoYWRvdy1yb290LW5ldy5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLmh0
bWwKIAogIyBDU1MgUmVnaW9ucyBzdXBwb3J0IG5vdCB5ZXQgZW5hYmxlZC4gaHR0cDovL3dlYmtp
dC5vcmcvYi81NzMxMgogZmFzdC9yZWdpb25zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCmluZGV4
IGQyMjQ3M2IyZWE1NTg4NzIzMmQ0NDc1NWRlOWQ2OWExNWYzZTMxNzUuLmE1Yzk4NTYzNGFjZDMz
MmM5MTEyYzMyMTEwMjU4MTdhN2QxNjBlOTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3drMi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCkBA
IC0xMDc4LDYgKzEwNzgsNyBAQCBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXJvb3QtanMtYXBpLmh0
bWwKIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZGlzYWJsZS5odG1sCiBmYXN0L2RvbS9zaGFkb3cv
c2hhZG93LXJvb3QtYXR0YWNoZWQuaHRtbAogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1yb290LW5l
dy5odG1sCitmYXN0L2RvbS9zaGFkb3cvc2hhZG93LXVsLWxpLmh0bWwKIAogIyBXVFIgbmVlZHMg
YW4gaW1wbGVtZW50YXRpb24gZm9yIGV2ZW50U2VuZGVyLmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5
CiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxNwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>