<?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>90713</bug_id>
          
          <creation_ts>2012-07-06 16:48:34 -0700</creation_ts>
          <short_desc>Consider closing unused localStorage database after a timeout.</short_desc>
          <delta_ts>2012-07-19 12:47:53 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yongjun Zhang">yongjun_zhang</reporter>
          <assigned_to name="Yongjun Zhang">yongjun_zhang</assigned_to>
          <cc>beidson</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>664299</commentid>
    <comment_count>0</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-06 16:48:34 -0700</bug_when>
    <thetext>We should consider closing the underlying sqlite database if there is no active document referencing it.  We can do this after a timeout to avoid closing and opening the same database too often, e.g., when user is doing back/forward navigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664308</commentid>
    <comment_count>1</comment_count>
      <attachid>151124</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-06 17:30:07 -0700</bug_when>
    <thetext>Created attachment 151124
close unused sqlite db after 300 seconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664309</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-06 17:33:48 -0700</bug_when>
    <thetext>Attachment 151124 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/storage/StorageAreaImpl.cpp:277:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664311</commentid>
    <comment_count>3</comment_count>
      <attachid>151124</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-06 17:36:38 -0700</bug_when>
    <thetext>Comment on attachment 151124
close unused sqlite db after 300 seconds.

Attachment 151124 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13156263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664312</commentid>
    <comment_count>4</comment_count>
      <attachid>151124</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-06 17:41:38 -0700</bug_when>
    <thetext>Comment on attachment 151124
close unused sqlite db after 300 seconds.

Attachment 151124 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13151498</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664319</commentid>
    <comment_count>5</comment_count>
      <attachid>151124</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-06 17:55:26 -0700</bug_when>
    <thetext>Comment on attachment 151124
close unused sqlite db after 300 seconds.

Attachment 151124 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13157247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664335</commentid>
    <comment_count>6</comment_count>
      <attachid>151131</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-06 22:00:08 -0700</bug_when>
    <thetext>Created attachment 151131
Fix build and style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664336</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-06 22:04:35 -0700</bug_when>
    <thetext>Attachment 151131 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Tools/ChangeLog:3:  Line contains tab character.  [whitespace/tab] [5]
Tools/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Tools/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
Tools/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Tools/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Tools/DumpRenderTree/win/LayoutTestControllerWin.cpp:1489:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/storage/StorageAreaImpl.cpp:279:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/storage/StorageArea.h:59:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/storage/StorageArea.h:60:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 9 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664337</commentid>
    <comment_count>8</comment_count>
      <attachid>151132</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-06 22:12:48 -0700</bug_when>
    <thetext>Created attachment 151132
Fix more style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664939</commentid>
    <comment_count>9</comment_count>
      <attachid>151132</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-07-09 10:11:33 -0700</bug_when>
    <thetext>Comment on attachment 151132
Fix more style issues.

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

&gt; Source/WebCore/storage/StorageAreaImpl.cpp:277
&gt; +    --m_accessCount;

This should assert that it doesn&apos;t go negative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664971</commentid>
    <comment_count>10</comment_count>
      <attachid>151132</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-07-09 10:34:47 -0700</bug_when>
    <thetext>Comment on attachment 151132
Fix more style issues.

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

Let&apos;s go one more pass

&gt; Source/WebCore/storage/StorageTracker.cpp:51
&gt; +// If there is no document referecing a storage database, close the underlying database
&gt; +// after it has been idle for s_StorageDatabaseIdleInterval seconds.
&gt; +static const double StorageDatabaseIdleInterval = 300;

typo &quot;referecing&quot;

s_StorageDatabaseIdleInterval should be m_StorageDatabaseIdleInterval?

And StorageDatabaseIdleInterval should be &quot;DefaultStorageDatabaseIdleInterval&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665052</commentid>
    <comment_count>11</comment_count>
      <attachid>151293</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-09 12:12:07 -0700</bug_when>
    <thetext>Created attachment 151293
Addressing review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665276</commentid>
    <comment_count>12</comment_count>
      <attachid>151293</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 16:09:58 -0700</bug_when>
    <thetext>Comment on attachment 151293
Addressing review comments. 

Rejecting attachment 151293 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/13165455</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665319</commentid>
    <comment_count>13</comment_count>
      <attachid>151359</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2012-07-09 17:05:50 -0700</bug_when>
    <thetext>Created attachment 151359
Reviewed patch for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665365</commentid>
    <comment_count>14</comment_count>
      <attachid>151359</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 18:03:55 -0700</bug_when>
    <thetext>Comment on attachment 151359
Reviewed patch for commit.

Clearing flags on attachment: 151359

Committed r122174: &lt;http://trac.webkit.org/changeset/122174&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665366</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 18:04:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665387</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-09 18:35:25 -0700</bug_when>
    <thetext>Build fix landed in http://trac.webkit.org/changeset/122177.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673809</commentid>
    <comment_count>17</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-07-19 12:47:53 -0700</bug_when>
    <thetext>This patch added no support for testRunner.setStorageDatabaseIdleInterval() on WK2.  Thus, this new test is failing on all WK2 ports.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151124</attachid>
            <date>2012-07-06 17:30:07 -0700</date>
            <delta_ts>2012-07-06 21:34:41 -0700</delta_ts>
            <desc>close unused sqlite db after 300 seconds.</desc>
            <filename>close_localstorage_db.patch</filename>
            <type>text/plain</type>
            <size>20105</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTA2ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xv
c2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAg
ICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVm
ZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwK
KyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKwor
ICAgICAgICBUZXN0OiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1v
bi1pZGxlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlOjpTdG9yYWdlKTogaW5jcmVtZW50IHN0b3JhZ2VBcmVhIGFjY2VzcyBj
b3VudCB3aGVuIGEgRE9NV2luZG93IGlzIHJlZmVyZW5jaW5nIGl0LgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZTo6flN0b3JhZ2UpOiBkZWNyZW1lbnQgc3RvcmFnZUFyZWEgYWNjZXNzIGNvdW50
IHdoZW4gRE9NV2luZG93IGlzIGRvbmUgd2l0aCBpdC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhLmg6CisgICAgICAgIChTdG9yYWdlQXJlYSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbmNyZW1l
bnRBY2Nlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQpOiBzY2hlZHVsZSBjbG9zZURhdGFi
YXNlVGltZXIgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50CisgICAgICAgICAgICByZWZl
cmVuY2luZyB0byB0aGlzIHN0b3JhZ2VBcmVhLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCk6IGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNx
bGl0ZSBkYXRhYmFzZS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAg
ICAgICAoU3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5bmMpOiBpZiBtX3N5
bmNDbG9zZURhdGFiYXNlIGZsYWcgaXMgc2V0IGFuZCB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW5l
ZCwgYmFpbCBvdXQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKTogIHNldCB0aGUgdGltZW91dCB2YWx1ZSB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUg
Y2xvc2luZyB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlLiAgVGhpcyBpcyBjdXJyZW50bHkgdXNl
ZCBieSBEdW1wUmVuZGVyVHJlZSBvbmx5LgorICAgICAgICAoU3RvcmFnZVRyYWNrZXIpOgorCiAy
MDEyLTA3LTA2ICBMYXVybyBOZXRvICA8bGF1cm8ubmV0b0BvcGVuYm9zc2Eub3JnPgogCiAgICAg
ICAgIFtRdF0gQXZvaWQgZGVlcCBjb3B5IG9mIFFJbWFnZSBpbiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkocmV2aXNp
b24gMTIyMDQzKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDE0IEBAIFN0b3JhZ2U6OlN0b3JhZ2UoRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHQKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKG1fc3RvcmFn
ZUFyZWEpOworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAgICAgICBtX3N0b3JhZ2VBcmVhLT5p
bmNyZW1lbnRBY2Nlc3NDb3VudCgpOwogfQogCiBTdG9yYWdlOjp+U3RvcmFnZSgpCiB7CisgICAg
aWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmRlY3JlbWVudEFjY2Vz
c0NvdW50KCk7CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiAxMjIwNDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25z
dCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
aW5jcmVtZW50QWNjZXNzQ291bnQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNyZW1l
bnRBY2Nlc3NDb3VudCgpID0gMDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZpc2lv
biAxMjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAgaW5saW5lIFN0b3JhZ2VBcmVhSW1wbDo6
U3RvcmFnZUFyZWFJbXBsKAogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNTaHV0ZG93bihmYWxz
ZSkKICNlbmRpZgorICAgICwgbV9hY2Nlc3NDb3VudCgwKQorICAgICwgbV9jbG9zZURhdGFiYXNl
VGltZXIodGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdp
bik7CkBAIC05Myw2ICs5NSw4IEBAIFN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0
b3JhZ2UKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRk
b3duKQogI2VuZGlmCisgICAgLCBtX2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2Nsb3NlRGF0YWJh
c2VUaW1lcih0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3NlY3VyaXR5T3Jp
Z2luKTsKQEAgLTI2MCw0ICsyNjQsMjggQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50
aWxJbXBvcnRDbwogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7CiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbmNyZW1lbnRBY2Nlc3NDb3Vu
dCgpCit7CisgICAgbV9hY2Nlc3NDb3VudCsrOworCisgICAgaWYgKG1fY2xvc2VEYXRhYmFzZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0b3AoKTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmRlY3JlbWVudEFjY2Vzc0NvdW50KCkKK3sKKyAgICBp
ZiAoLS1tX2FjY2Vzc0NvdW50ID09IDApIHsKKyAgICAgICAgaWYgKG1fY2xvc2VEYXRhYmFzZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5zdG9wKCk7
CisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZChUaW1lcjxTdG9y
YWdlQXJlYUltcGw+ICopCit7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAg
aWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1
bGVDbG9zZURhdGFiYXNlKCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gMTIyMDQzKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBTdG9yYWdlQXJlYUltcGxfaAogCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CkBAIC01Myw2ICs1NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29u
c3QgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgaW5j
cmVtZW50QWNjZXNzQ291bnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudEFjY2Vz
c0NvdW50KCk7CisKICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IGNvcHkoKTsK
ICAgICAgICAgdm9pZCBjbG9zZSgpOwogCkBAIC02OSw2ICs3Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCopOwogCiAgICAg
ICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CisgICAgICAgIHZvaWQg
Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFJbXBsPiopOwogCiAgICAg
ICAgIFN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKQEAgLTgwLDYgKzg1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtX2lzU2h1dGRvd247CiAjZW5kaWYK
KyAgICAgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKKyAgICAgICAgVGltZXI8U3RvcmFnZUFy
ZWFJbXBsPiBtX2Nsb3NlRGF0YWJhc2VUaW1lcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CShyZXZpc2lvbiAxMjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MiwxMCArMzgyLDE2IEBAIHZvaWQgU3RvcmFn
ZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKIAotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgIWNsZWFySXRlbXMpCisgICAgaWYg
KGl0ZW1zLmlzRW1wdHkoKSAmJiAhY2xlYXJJdGVtcyAmJiAhbV9zeW5jQ2xvc2VEYXRhYmFzZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2RhdGFiYXNlT3BlbkZhaWxlZCkKICAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpICYmIG1fc3luY0Nsb3NlRGF0
YWJhc2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IGZhbHNlOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICBv
cGVuRGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJ
KHJldmlzaW9uIDEyMjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOwogCisvLyBJ
ZiB0aGVyZSBpcyBubyBkb2N1bWVudCByZWZlcmVjaW5nIGEgc3RvcmFnZSBkYXRhYmFzZSwgY2xv
c2UgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UKKy8vIGFmdGVyIGl0IGhhcyBiZWVuIGlkbGUgZm9y
IHNfU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsIHNlY29uZHMuCitzdGF0aWMgY29uc3QgZG91
YmxlIFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCA9IDMwMDsKKyAgICAKIHZvaWQgU3RvcmFn
ZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFN0
b3JhZ2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTkxLDYgKzk1LDcgQEAgU3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKGNvbnN0
IFN0cgogICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKICAgICAsIG1fbmVlZHNJbml0aWFsaXphdGlv
bihmYWxzZSkKICAgICAsIG1fZmluaXNoZWRJbXBvcnRpbmdPcmlnaW5JZGVudGlmaWVycyhmYWxz
ZSkKKyAgICAsIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbCkKIHsKIH0KIApAQCAtNjI3LDUgKzYzMiw1IEBAIGxvbmcgbG9uZyBTdG9yYWdl
VHJhY2tlcjo6ZGlza1VzYWdlRm9yT3IKIAogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpn
ZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwogfQotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oCShyZXZpc2lv
biAxMjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzeW5jTG9j
YWxTdG9yYWdlKCk7CiAKKyAgICBkb3VibGUgc3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKCkg
eyByZXR1cm4gbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw7IH0KKyAgICB2b2lkIHNldFN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsgbV9TdG9yYWdlRGF0
YWJhc2VJZGxlSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQorCiBwcml2YXRlOgogICAgIFN0b3JhZ2VU
cmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOwogICAgIHN0YXRpYyB2b2lkIHNjaGVk
dWxlVGFzayh2b2lkKik7CkBAIC0xMTgsNiArMTIxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNBY3RpdmU7CiAgICAgYm9vbCBtX25lZWRzSW5pdGlhbGl6YXRpb247CiAgICAgYm9vbCBtX2Zp
bmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnM7CisgICAgZG91YmxlIG1fU3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0MykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA3LTA2ICBZ
b25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lk
ZXIgY2xvc2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisK
KyAgICAgICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1l
bnQgcmVmZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNv
bmRzKSwKKyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFz
ZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFN0
b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICgrW1dlYlN0b3JhZ2VNYW5hZ2Vy
IHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDpdKTogYWRkIGEgbmV3IG1ldGhvZCBmb3Ig
RHVtcFJlbmRlclRyZWUgdG8gc2V0IHRoZSB0aW1lb3V0CisgICAgICAgICAgICB0aGF0IHdlIHdp
bGwgd2FpdCBiZWZvcmUgY2xvc2luZyBkYXRhYmFzZS4KKyAgICAgICAgKGluaXRpYWxpemVMb2Nh
bFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oOgorCiAyMDEyLTA3LTA0ICBKb2huIE1lbGxvciAgPGpvaG5tZUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVGV4dCBBdXRvc2l6aW5nOiBBZGQgY29tcGlsZSBmbGFnIGFuZCBydW50aW1lIHNl
dHRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFu
YWdlci5tbQkocmV2aXNpb24gMTIyMDQzKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsMTIgQEAgKyAo
TlNTdHJpbmcgKilfc3RvcmFnZURpcmVjdG9yeVBhdGgKICAgICByZXR1cm4gc0xvY2FsU3RvcmFn
ZVBhdGg7CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2NhbFN0b3JhZ2VQYXRoKCkgCisr
ICh2b2lkKXNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDooZG91YmxlKWludGVydmFsCit7
CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50
ZXJ2YWwoaW50ZXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9jYWxTdG9yYWdl
UGF0aCgpCiB7CiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKICAgICBzTG9jYWxTdG9yYWdlUGF0aCA9IFtkZWZhdWx0
cyBvYmplY3RGb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZh
dGUuaAkocmV2aXNpb24gMTIyMDQzKQorKysgU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNiBAQCBA
aW50ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QKIC0gKHZvaWQpc3luY0ZpbGVT
eXN0ZW1BbmRUcmFja2VyRGF0YWJhc2U7CiAKICsgKE5TU3RyaW5nICopX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoOwotCisrICh2b2lkKXNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDooZG91Ymxl
KWludGVydmFsOwogQGVuZAogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjIwNDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNy0wNiAgWW9uZ2p1biBaaGFuZyAg
PHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNpZGVyIGNsb3NpbmcgdW51
c2VkIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBhZnRlciBhIHRpbWVvdXQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDcxMworCisgICAgICAgIEZvciBh
IGxvY2FsU3RvcmFnZSwgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50IHJlZmVyZW5jaW5n
IHRvIGl0IGZvciBjZXJ0YWluIGFtb3VudCBvZiB0aW1lICgzMDAgc2Vjb25kcyksCisgICAgICAg
IHdlIGNhbiBjbG9zZSB0aGUgdW5kZXJseWluZyBzcWxpdGUgZGF0YWJhc2UuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHA6IGFkZCBhIEpTIG1ldGhvZCBzZXRTdG9yYWdlRGF0YWJh
c2VJZGxlSW50ZXJ2YWxDYWxsYmFjayB0byB0ZXN0UnVubmVyCisgICAgICAgICAgICB0byBzZXQg
YSBkaWZmZXJlbnQgdGltZW91dCB2YWx1ZSBmb3IgY2xvc2luZyBsb2NhbFN0b3JhZ2UgZGF0YWJh
c2UuCisgICAgICAgIChzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjayk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpOgorCiAyMDEyLTA3LTA2ICBaYW4gRG9iZXJzZWsgIDx6
YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0d0a10gQWRkIGEgY29uZmlndXJhdGlv
biBvcHRpb24gZm9yIGRpc2FibGluZyB1bnN0YWJsZSBmZWF0dXJlcyBpbiByZWxlYXNlcwpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTIyMDQzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjI1LDYgKzIyMjUsMjAgQEAgc3RhdGljIEpTVmFs
dWVSZWYgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc2V0U3RvcmFnZURhdGFiYXNl
SWRsZUludGVydmFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGlmIChhcmd1bWVudENvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIGRvdWJsZSBpbnRlcnZhbCA9IEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIGNvbnRyb2xsZXItPnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRp
YyB2b2lkIGxheW91dFRlc3RDb250cm9sbGVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2Jq
ZWN0KQogewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CkBA
IC0yNDQ1LDYgKzI0NTksNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6CiAgICAgICAgIHsgInNldEJhY2tpbmdTY2FsZUZhY3RvciIsIHNldEJhY2tpbmdTY2FsZUZh
Y3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInByZWNpc2VUaW1lIiwgcHJlY2lzZVRp
bWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVo
YXZpb3IiLCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3JDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwiLCBzZXRTdG9yYWdlRGF0
YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQog
ICAgIH07CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMTIyMDQzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1f
Y3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KICAgICBib29sIGhhc0N1c3RvbUZ1
bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yOyB9CiAKKyAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUp
OworCiBwcml2YXRlOgogICAgIExheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOwog
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250
cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMjIwNDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsy
MDEsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYQogICAgIFtb
V2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdp
bnNdOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIFtXZWJTdG9yYWdlTWFuYWdlciBz
ZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6aW50ZXJ2YWxdOworfQorCiBKU1ZhbHVlUmVm
IExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbW1dl
YlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXSk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMjIwNDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNy0wNiAgWW9uZ2p1biBaaGFuZyAgPHlvbmdq
dW5femhhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNpZGVyIGNsb3NpbmcgdW51c2VkIGxv
Y2FsU3RvcmFnZSBkYXRhYmFzZSBhZnRlciBhIHRpbWVvdXQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDcxMworCisgICAgICAgIEZvciBhIGxvY2Fs
U3RvcmFnZSwgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50IHJlZmVyZW5jaW5nIHRvIGl0
IGZvciBjZXJ0YWluIGFtb3VudCBvZiB0aW1lICgzMDAgc2Vjb25kcyksCisgICAgICAgIHdlIGNh
biBjbG9zZSB0aGUgdW5kZXJseWluZyBzcWxpdGUgZGF0YWJhc2UuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0
RXhwZWN0YXRpb25zOiB0aGUgdGVzdCBuZWVkcyBzZXRDYWNoZU1vZGVsIGltcGxlbWVudGF0aW9u
LCBza2lwIGl0IGluIGNocm9taXVtLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9zdG9y
YWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVzb3VyY2VzL3N0b3JhZ2UtY2xvc2UtZGF0YS1v
bi1pZGxlLXN3aXRjaC5odG1sOiBBZGRlZC4KKwogMjAxMi0wNy0wNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvY2FudmFzL3dlYmdsL2dsLXZlcnRleGF0
dHJpYnBvaW50ZXIuaHRtbCBpcyBjcmFzaGluZwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxMjIwNDMpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkp
CkBAIC03MzQsOSArNzM0LDEwIEBAIFdPTlRGSVggU0tJUCA6IGh0dHAvdGVzdHMvZ2xvYmFsaGlz
dG9yeSAKIC8vIEZvciBtb3JlIGRldGFpbHMsIHNlZSBkaXNjdXNzaW9ucyBhdCBpc3N1ZSAyMDU3
MC4KIFdPTlRGSVggU0tJUCA6IGZhc3QvZm9ybXMvZ2V0LWZvcm1zLXRvLWFib3V0LWJsYW5rLmh0
bWwgPSBQQVNTCiAKLS8vIFRoaXMgdGVzdCByZXF1aXJlcyBMYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRDYWNoZU1vZGVsLCB3aGljaCB3ZSBkb24ndAorLy8gVGhlc2UgdGVzdHMgcmVxdWlyZXMgTGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FjaGVNb2RlbCwgd2hpY2ggd2UgZG9uJ3QKIC8vIGltcGxl
bWVudCBiZWNhdXNlIHdlIGNhbid0IGVtdWxhdGUgdGhlIGNhY2hpbmcgYmVoYXZpb3JzIGl0IGV4
cGVjdHMuCiBXT05URklYIFNLSVAgOiBmYXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9uZXN0ZWQt
ZXhlY3V0aW9uLmh0bWwgPSBQQVNTCitXT05URklYIFNLSVAgOiBzdG9yYWdlL2RvbXN0b3JhZ2Uv
c3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWwgPSBQQVNTCiAKIC8vIERlbGV0aW9u
IFVJIGlzIGEgTWFpbC1pc20uIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcy4KIFdP
TlRGSVggU0tJUCA6IGVkaXRpbmcvZGVsZXRpbmcvZGVsZXRpb25VSS1zaW5nbGUtaW5zdGFuY2Uu
aHRtbCA9IFBBU1MKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdl
LWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMyBAQAorUEFTUworUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0
YWJhc2Utb24taWRsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9k
b21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYyIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhhKQoreworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhUTUwgKz0gYSArICI8YnI+IjsKK30K
KworZnVuY3Rpb24gbG9hZE5leHRQYWdlKCkKK3sKKyAgICBsb2NhdGlvbi5ocmVmID0gIi4uL3Jl
c291cmNlcy9zdG9yYWdlLWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbCI7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgwKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRDYWNoZU1vZGVsKDApOyAvLyBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3
ZXIuCisgICAgfQorCisgICAgLy8gVGVzdCB0byBtYWtlIHN1cmUgdGhlIHN0b3JhZ2UgdmFsdWVz
IGRvbid0IGNoYW5nZSBhZnRlciB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLgorICAgIGlmICgibG9j
YWxTdG9yYWdlIiBpbiB3aW5kb3cpIHsKKyAgICAgICAgdmFyIGxvYWRDb3VudCA9IHdpbmRvdy5z
ZXNzaW9uU3RvcmFnZVsnbG9hZENvdW50J107CisgICAgICAgIGlmIChsb2FkQ291bnQgIT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgICAgIGxvYWRDb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBsb2FkQ291bnQgPSAxOworCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsnbG9h
ZENvdW50J10gPSBsb2FkQ291bnQ7CisKKyAgICAgICAgaWYgKGxvYWRDb3VudCA9PSAxICkgewor
ICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5jbGVhcigpOworICAgICAgICAgICAgd2lu
ZG93LmxvY2FsU3RvcmFnZVsnZm9vJ10gPSAnRk9PJzsKKyAgICAgICAgICAgIHdpbmRvdy5sb2Nh
bFN0b3JhZ2VbJ2JhciddID0gJ0JBUic7CisKKyAgICAgICAgICAgIHNldFRpbWVvdXQoImxvYWRO
ZXh0UGFnZSgpIiwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUZXN0IGlm
IHdlIHN0aWxsIGhhdmUgdGhlIHJpZ2h0IHZhbHVlcy4KKyAgICAgICAgICAgIGxvZyh3aW5kb3cu
bG9jYWxTdG9yYWdlWydmb28nXSA9PT0gJ0ZPTycgPyAnUEFTUycgOiAnRkFJTCcpOworICAgICAg
ICAgICAgbG9nKHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2JhciddID09PSAnQkFSJyA/ICdQQVNTJyA6
ICdGQUlMJyk7CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKDMwMCk7
CisgICAgICAgICAgICAgICAgd2luZG93LnRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8ZGl2IGlkPSJsb2dnZXIiPjwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9zdG9yYWdlLWNs
b3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL3Jlc291cmNlcy9zdG9yYWdlLWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL3N0b3JhZ2UtY2xv
c2UtZGF0YS1vbi1pZGxlLXN3aXRjaC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBA
Cis8aHRtbD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gc3dpbmdCYWNrKCkgCisgICAgeworICAg
ICAgICBsb2NhdGlvbi5ocmVmPScuLi9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Ut
b24taWRsZS5odG1sJzsKKyAgICB9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0nc2V0VGltZW91
dChzd2luZ0JhY2soKSwgMTAwKTsnPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="159518"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151131</attachid>
            <date>2012-07-06 22:00:08 -0700</date>
            <delta_ts>2012-07-06 22:10:57 -0700</delta_ts>
            <desc>Fix build and style issues.</desc>
            <filename>close_localstorage_db.patch</filename>
            <type>text/plain</type>
            <size>22019</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTA2ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xv
c2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAg
ICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVm
ZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwK
KyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKwor
ICAgICAgICBUZXN0OiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1v
bi1pZGxlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlOjpTdG9yYWdlKTogaW5jcmVtZW50IHN0b3JhZ2VBcmVhIGFjY2VzcyBj
b3VudCB3aGVuIGEgRE9NV2luZG93IGlzIHJlZmVyZW5jaW5nIGl0LgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZTo6flN0b3JhZ2UpOiBkZWNyZW1lbnQgc3RvcmFnZUFyZWEgYWNjZXNzIGNvdW50
IHdoZW4gRE9NV2luZG93IGlzIGRvbmUgd2l0aCBpdC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhLmg6CisgICAgICAgIChTdG9yYWdlQXJlYSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbmNyZW1l
bnRBY2Nlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQpOiBzY2hlZHVsZSBjbG9zZURhdGFi
YXNlVGltZXIgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50CisgICAgICAgICAgICByZWZl
cmVuY2luZyB0byB0aGlzIHN0b3JhZ2VBcmVhLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCk6IGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNx
bGl0ZSBkYXRhYmFzZS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAg
ICAgICAoU3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5bmMpOiBpZiBtX3N5
bmNDbG9zZURhdGFiYXNlIGZsYWcgaXMgc2V0IGFuZCB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW5l
ZCwgYmFpbCBvdXQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKTogIHNldCB0aGUgdGltZW91dCB2YWx1ZSB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUg
Y2xvc2luZyB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlLiAgVGhpcyBpcyBjdXJyZW50bHkgdXNl
ZCBieSBEdW1wUmVuZGVyVHJlZSBvbmx5LgorICAgICAgICAoU3RvcmFnZVRyYWNrZXIpOgorCiAy
MDEyLTA3LTA2ICBMYXVybyBOZXRvICA8bGF1cm8ubmV0b0BvcGVuYm9zc2Eub3JnPgogCiAgICAg
ICAgIFtRdF0gQXZvaWQgZGVlcCBjb3B5IG9mIFFJbWFnZSBpbiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkocmV2aXNp
b24gMTIyMDQ3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDE0IEBAIFN0b3JhZ2U6OlN0b3JhZ2UoRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHQKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKG1fc3RvcmFn
ZUFyZWEpOworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAgICAgICBtX3N0b3JhZ2VBcmVhLT5p
bmNyZW1lbnRBY2Nlc3NDb3VudCgpOwogfQogCiBTdG9yYWdlOjp+U3RvcmFnZSgpCiB7CisgICAg
aWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmRlY3JlbWVudEFjY2Vz
c0NvdW50KCk7CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiAxMjIwNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25z
dCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
aW5jcmVtZW50QWNjZXNzQ291bnQoKSB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50
QWNjZXNzQ291bnQoKSB7fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDEy
MjA0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBpbmxpbmUgU3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwoCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQog
I2VuZGlmCisgICAgLCBtX2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2Nsb3NlRGF0YWJhc2VUaW1l
cih0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsK
QEAgLTkzLDYgKzk1LDggQEAgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFn
ZQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24p
CiAjZW5kaWYKKyAgICAsIG1fYWNjZXNzQ291bnQoMCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRp
bWVyKHRoaXMsICZTdG9yYWdlQXJlYUltcGw6OmNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4p
OwpAQCAtMjYwLDQgKzI2NCwzMCBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbElt
cG9ydENvCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKTsKIH0KIAordm9pZCBTdG9yYWdlQXJlYUltcGw6OmluY3JlbWVudEFjY2Vzc0NvdW50KCkK
K3sKKyAgICBtX2FjY2Vzc0NvdW50Kys7CisKKyAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9jbG9zZURhdGFiYXNlVGltZXIuc3RvcCgpOworfQorCit2
b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQoKQoreworICAgIC0tbV9h
Y2Nlc3NDb3VudDsKKworICAgIGlmIChtX2FjY2Vzc0NvdW50ID09IDApIHsKKyAgICAgICAgaWYg
KG1fY2xvc2VEYXRhYmFzZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2Nsb3NlRGF0
YWJhc2VUaW1lci5zdG9wKCk7CisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25l
U2hvdChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZh
bCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGlt
ZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYUltcGw+ICopCit7CisgICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3Jh
Z2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gMTIyMDQ3KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdG9yYWdlQXJlYUltcGxfaAogCiAjaW5jbHVkZSAi
U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01Myw2ICs1NCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVC
cm93c2luZ0luRnJhbWUoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50QWNjZXNzQ291bnQoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRlY3JlbWVudEFjY2Vzc0NvdW50KCk7CisKICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYUltcGw+IGNvcHkoKTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCkBAIC02OSw2ICs3Myw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VB
cmVhSW1wbCopOwogCiAgICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFy
ZWFJbXBsPiopOwogCiAgICAgICAgIFN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7CiAgICAgICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKQEAgLTgwLDYgKzg1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtX2lz
U2h1dGRvd247CiAjZW5kaWYKKyAgICAgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKKyAgICAg
ICAgVGltZXI8U3RvcmFnZUFyZWFJbXBsPiBtX2Nsb3NlRGF0YWJhc2VUaW1lcjsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiAxMjIwNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MiwxMCArMzgy
LDE2IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgIWNs
ZWFySXRlbXMpCisgICAgaWYgKGl0ZW1zLmlzRW1wdHkoKSAmJiAhY2xlYXJJdGVtcyAmJiAhbV9z
eW5jQ2xvc2VEYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2RhdGFiYXNlT3Bl
bkZhaWxlZCkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
ICYmIG1fc3luY0Nsb3NlRGF0YWJhc2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICBvcGVuRGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7CiAgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAJKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRy
YWNrZXIgPSAwOwogCisvLyBJZiB0aGVyZSBpcyBubyBkb2N1bWVudCByZWZlcmVjaW5nIGEgc3Rv
cmFnZSBkYXRhYmFzZSwgY2xvc2UgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UKKy8vIGFmdGVyIGl0
IGhhcyBiZWVuIGlkbGUgZm9yIHNfU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsIHNlY29uZHMu
CitzdGF0aWMgY29uc3QgZG91YmxlIFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCA9IDMwMDsK
KyAgICAKIHZvaWQgU3RvcmFnZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZVBhdGgsIFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTkxLDYgKzk1LDcgQEAgU3RvcmFnZVRyYWNrZXI6OlN0
b3JhZ2VUcmFja2VyKGNvbnN0IFN0cgogICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKICAgICAsIG1f
bmVlZHNJbml0aWFsaXphdGlvbihmYWxzZSkKICAgICAsIG1fZmluaXNoZWRJbXBvcnRpbmdPcmln
aW5JZGVudGlmaWVycyhmYWxzZSkKKyAgICAsIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFs
KFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCkKIHsKIH0KIApAQCAtNjI3LDUgKzYzMiw1IEBA
IGxvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3IKIAogICAgIHJldHVybiBT
UUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwogfQotICAgIAorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5oCShyZXZpc2lvbiAxMjIwNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CiAKKyAgICBkb3VibGUgc3RvcmFnZURhdGFi
YXNlSWRsZUludGVydmFsKCkgeyByZXR1cm4gbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw7
IH0KKyAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpIHsgbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQorCiBwcml2
YXRlOgogICAgIFN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOwogICAg
IHN0YXRpYyB2b2lkIHNjaGVkdWxlVGFzayh2b2lkKik7CkBAIC0xMTgsNiArMTIxLDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNBY3RpdmU7CiAgICAgYm9vbCBtX25lZWRzSW5pdGlhbGl6YXRp
b247CiAgICAgYm9vbCBtX2ZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnM7CisgICAg
ZG91YmxlIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOwogfTsKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0NykKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEyLTA3LTA2ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNl
IGFmdGVyIGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBp
cyBubyBhY3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50
IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5
aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICgr
W1dlYlN0b3JhZ2VNYW5hZ2VyIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDpdKTogYWRk
IGEgbmV3IG1ldGhvZCBmb3IgRHVtcFJlbmRlclRyZWUgdG8gc2V0IHRoZSB0aW1lb3V0CisgICAg
ICAgICAgICB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUgY2xvc2luZyBkYXRhYmFzZS4KKyAgICAg
ICAgKGluaXRpYWxpemVMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oOgorCiAyMDEyLTA3LTA0ICBKb2huIE1lbGxvciAgPGpvaG5t
ZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGV4dCBBdXRvc2l6aW5nOiBBZGQgY29tcGlsZSBm
bGFnIGFuZCBydW50aW1lIHNldHRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2Uv
V2ViU3RvcmFnZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkocmV2aXNpb24gMTIyMDQ3KQorKysgU291cmNlL1dl
YktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAt
OTcsNyArOTcsMTIgQEAgKyAoTlNTdHJpbmcgKilfc3RvcmFnZURpcmVjdG9yeVBhdGgKICAgICBy
ZXR1cm4gc0xvY2FsU3RvcmFnZVBhdGg7CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2Nh
bFN0b3JhZ2VQYXRoKCkgCisrICh2b2lkKXNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDoo
ZG91YmxlKWludGVydmFsCit7CisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRTdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoaW50ZXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBpbml0
aWFsaXplTG9jYWxTdG9yYWdlUGF0aCgpCiB7CiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRz
ID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKICAgICBzTG9jYWxTdG9y
YWdlUGF0aCA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1
bHRzS2V5XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlclByaXZhdGUuaAkocmV2aXNpb24gMTIyMDQ3KQorKysgU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNiBAQCBAaW50ZXJmYWNlIFdlYlN0b3JhZ2VNYW5hZ2VyIDogTlNPYmplY3QK
IC0gKHZvaWQpc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2U7CiAKICsgKE5TU3RyaW5n
ICopX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwotCisrICh2b2lkKXNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbDooZG91YmxlKWludGVydmFsOwogQGVuZAogCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjIwNDcpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0wNy0w
NiAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgorCisJCUNvbnNpZGVy
IGNsb3NpbmcgdW51c2VkIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBhZnRlciBhIHRpbWVvdXQuCisJ
CWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDcxMworCisJCUZvciBh
IGxvY2FsU3RvcmFnZSwgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50IHJlZmVyZW5jaW5n
IHRvIGl0IGZvciBjZXJ0YWluIGFtb3VudCBvZiB0aW1lICgzMDAgc2Vjb25kcyksCisJCXdlIGNh
biBjbG9zZSB0aGUgdW5kZXJseWluZyBzcWxpdGUgZGF0YWJhc2UuCisKKwkJUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcDogYWRkIGEgSlMgbWV0aG9kIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRl
cnZhbCB0byB0ZXN0UnVubmVyCisgICAgICAgICAgICB0byBzZXQgYSBkaWZmZXJlbnQgdGltZW91
dCB2YWx1ZSBmb3IgY2xvc2luZyBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UuCisgICAgICAgIChzZXRT
dG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKTogYWRkIGVtcHR5IG1ldGhvZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6IGRpdHRvLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpOiBkaXR0
by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbCk6IGRpdHRvLgorCiAyMDEyLTA3LTA2ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2Jl
cnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0d0a10gQWRkIGEgY29uZmlndXJhdGlvbiBvcHRp
b24gZm9yIGRpc2FibGluZyB1bnN0YWJsZSBmZWF0dXJlcyBpbiByZWxlYXNlcwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTIyMDQ3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjI1LDYgKzIyMjUsMjAgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChh
cmd1bWVudENvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIGRvdWJsZSBpbnRlcnZhbCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyB2b2lk
IGxheW91dFRlc3RDb250cm9sbGVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQog
ewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CkBAIC0yNDQ1
LDYgKzI0NTksNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAg
ICAgICAgIHsgInNldEJhY2tpbmdTY2FsZUZhY3RvciIsIHNldEJhY2tpbmdTY2FsZUZhY3RvckNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInByZWNpc2VUaW1lIiwgcHJlY2lzZVRpbWVDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3Ii
LCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwiLCBzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07
CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTIyMDQ3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1fY3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KICAgICBib29sIGhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9
CiAKKyAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpOworCiBw
cml2YXRlOgogICAgIExheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0
UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOwogCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxl
ckVmbC5jcHAJKHJldmlzaW9uIDEyMjA0NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyOCwzICs5Mjgs
OCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50CiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpkZWxpdmVyV2ViSW50ZW50KGJyb3dzZXItPm1haW5GcmFt
ZSgpLCBhY3Rpb24sIHR5cGUsIGRhdGEpOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9M
YXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEyMjA0NykKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMDcsMyArMTAwNyw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2
ZXJXZWJJbnQKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNp
b24gMTIyMDQ3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiArMjAxLDExIEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2EKICAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNo
YXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVBbGxPcmlnaW5zXTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBp
bnRlcnZhbCkKK3sKKyAgICBbV2ViU3RvcmFnZU1hbmFnZXIgc2V0U3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsOmludGVydmFsXTsKK30KKwogSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAg
cmV0dXJuIG9yaWdpbnNBcnJheVRvSlMoY29udGV4dCwgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFy
ZWRXZWJTdG9yYWdlTWFuYWdlcl0gb3JpZ2luc10pOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAx
MjIwNDcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgzLDMgKzE0ODMsOCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWwoZG91YmxlKQoreworCS8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEyMjA0NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA3LTA2ICBZb25nanVuIFpoYW5nICA8eW9u
Z2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVzZWQg
bG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEgbG9j
YWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcgdG8g
aXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAgd2Ug
Y2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnM6IHRoZSB0ZXN0IG5lZWRzIHNldENhY2hlTW9kZWwgaW1wbGVtZW50YXRp
b24sIHNraXAgaXQgaW4gY2hyb21pdW0uCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3N0
b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRt
bDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRh
LW9uLWlkbGUtc3dpdGNoLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTA2ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0IFZlcnNpb24gNS4xLjcgKDY1MzQu
NTcuMiwgcjEyMTkzNSk6IERvdWJsZS1jbGljayBubyBsb25nZXIgd29ya3Mgb24gT3BlblN0cmVl
dE1hcApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0
YXRpb25zCShyZXZpc2lvbiAxMjIwNDcpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MzQsOSArNzM0LDEwIEBAIFdP
TlRGSVggU0tJUCA6IGh0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeSAKIC8vIEZvciBtb3JlIGRldGFp
bHMsIHNlZSBkaXNjdXNzaW9ucyBhdCBpc3N1ZSAyMDU3MC4KIFdPTlRGSVggU0tJUCA6IGZhc3Qv
Zm9ybXMvZ2V0LWZvcm1zLXRvLWFib3V0LWJsYW5rLmh0bWwgPSBQQVNTCiAKLS8vIFRoaXMgdGVz
dCByZXF1aXJlcyBMYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYWNoZU1vZGVsLCB3aGljaCB3ZSBk
b24ndAorLy8gVGhlc2UgdGVzdHMgcmVxdWlyZXMgTGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2Fj
aGVNb2RlbCwgd2hpY2ggd2UgZG9uJ3QKIC8vIGltcGxlbWVudCBiZWNhdXNlIHdlIGNhbid0IGVt
dWxhdGUgdGhlIGNhY2hpbmcgYmVoYXZpb3JzIGl0IGV4cGVjdHMuCiBXT05URklYIFNLSVAgOiBm
YXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9uZXN0ZWQtZXhlY3V0aW9uLmh0bWwgPSBQQVNTCitX
T05URklYIFNLSVAgOiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1v
bi1pZGxlLmh0bWwgPSBQQVNTCiAKIC8vIERlbGV0aW9uIFVJIGlzIGEgTWFpbC1pc20uIFdlIGRv
bid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcy4KIFdPTlRGSVggU0tJUCA6IGVkaXRpbmcvZGVs
ZXRpbmcvZGVsZXRpb25VSS1zaW5nbGUtaW5zdGFuY2UuaHRtbCA9IFBBU1MKSW5kZXg6IExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJh
c2Utb24taWRsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorUEFT
UworUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1j
bG9zZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3Rv
cmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2Ut
ZGF0YWJhc2Utb24taWRsZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGxvZyhhKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dn
ZXIiKS5pbm5lckhUTUwgKz0gYSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gbG9hZE5leHRQYWdl
KCkKK3sKKyAgICBsb2NhdGlvbi5ocmVmID0gIi4uL3Jlc291cmNlcy9zdG9yYWdlLWNsb3NlLWRh
dGEtb24taWRsZS1zd2l0Y2guaHRtbCI7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbCgwKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRDYWNoZU1vZGVs
KDApOyAvLyBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIuCisgICAgfQorCisgICAgLy8gVGVz
dCB0byBtYWtlIHN1cmUgdGhlIHN0b3JhZ2UgdmFsdWVzIGRvbid0IGNoYW5nZSBhZnRlciB0aGUg
ZGF0YWJhc2UgaXMgY2xvc2VkLgorICAgIGlmICgibG9jYWxTdG9yYWdlIiBpbiB3aW5kb3cpIHsK
KyAgICAgICAgdmFyIGxvYWRDb3VudCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsnbG9hZENvdW50
J107CisgICAgICAgIGlmIChsb2FkQ291bnQgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGxv
YWRDb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkQ291bnQgPSAxOworCisg
ICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsnbG9hZENvdW50J10gPSBsb2FkQ291bnQ7CisK
KyAgICAgICAgaWYgKGxvYWRDb3VudCA9PSAxICkgeworICAgICAgICAgICAgd2luZG93LmxvY2Fs
U3RvcmFnZS5jbGVhcigpOworICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZVsnZm9vJ10g
PSAnRk9PJzsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2JhciddID0gJ0JBUic7
CisKKyAgICAgICAgICAgIHNldFRpbWVvdXQoImxvYWROZXh0UGFnZSgpIiwgMCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUZXN0IGlmIHdlIHN0aWxsIGhhdmUgdGhlIHJpZ2h0
IHZhbHVlcy4KKyAgICAgICAgICAgIGxvZyh3aW5kb3cubG9jYWxTdG9yYWdlWydmb28nXSA9PT0g
J0ZPTycgPyAnUEFTUycgOiAnRkFJTCcpOworICAgICAgICAgICAgbG9nKHdpbmRvdy5sb2NhbFN0
b3JhZ2VbJ2JhciddID09PSAnQkFSJyA/ICdQQVNTJyA6ICdGQUlMJyk7CisKKyAgICAgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKDMwMCk7CisgICAgICAgICAgICAgICAgd2luZG93
LnRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8
ZGl2IGlkPSJsb2dnZXIiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgorCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9zdG9yYWdlLWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2gu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9zdG9yYWdl
LWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3N0b3JhZ2UvcmVzb3VyY2VzL3N0b3JhZ2UtY2xvc2UtZGF0YS1vbi1pZGxlLXN3aXRjaC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8aHRtbD4KKzxzY3JpcHQ+CisgICAg
ZnVuY3Rpb24gc3dpbmdCYWNrKCkgCisgICAgeworICAgICAgICBsb2NhdGlvbi5ocmVmPScuLi9k
b21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sJzsKKyAgICB9Cis8
L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0nc2V0VGltZW91dChzd2luZ0JhY2soKSwgMTAwKTsnPgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151132</attachid>
            <date>2012-07-06 22:12:48 -0700</date>
            <delta_ts>2012-07-09 12:12:07 -0700</delta_ts>
            <desc>Fix more style issues.</desc>
            <filename>close_localstorage_db.patch</filename>
            <type>text/plain</type>
            <size>22048</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTA2ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xv
c2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAg
ICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVm
ZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwK
KyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKwor
ICAgICAgICBUZXN0OiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1v
bi1pZGxlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlOjpTdG9yYWdlKTogaW5jcmVtZW50IHN0b3JhZ2VBcmVhIGFjY2VzcyBj
b3VudCB3aGVuIGEgRE9NV2luZG93IGlzIHJlZmVyZW5jaW5nIGl0LgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZTo6flN0b3JhZ2UpOiBkZWNyZW1lbnQgc3RvcmFnZUFyZWEgYWNjZXNzIGNvdW50
IHdoZW4gRE9NV2luZG93IGlzIGRvbmUgd2l0aCBpdC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhLmg6CisgICAgICAgIChTdG9yYWdlQXJlYSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbmNyZW1l
bnRBY2Nlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQpOiBzY2hlZHVsZSBjbG9zZURhdGFi
YXNlVGltZXIgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50CisgICAgICAgICAgICByZWZl
cmVuY2luZyB0byB0aGlzIHN0b3JhZ2VBcmVhLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCk6IGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNx
bGl0ZSBkYXRhYmFzZS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAg
ICAgICAoU3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5bmMpOiBpZiBtX3N5
bmNDbG9zZURhdGFiYXNlIGZsYWcgaXMgc2V0IGFuZCB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW5l
ZCwgYmFpbCBvdXQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKTogIHNldCB0aGUgdGltZW91dCB2YWx1ZSB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUg
Y2xvc2luZyB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlLiAgVGhpcyBpcyBjdXJyZW50bHkgdXNl
ZCBieSBEdW1wUmVuZGVyVHJlZSBvbmx5LgorICAgICAgICAoU3RvcmFnZVRyYWNrZXIpOgorCiAy
MDEyLTA3LTA2ICBMYXVybyBOZXRvICA8bGF1cm8ubmV0b0BvcGVuYm9zc2Eub3JnPgogCiAgICAg
ICAgIFtRdF0gQXZvaWQgZGVlcCBjb3B5IG9mIFFJbWFnZSBpbiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkocmV2aXNp
b24gMTIyMDQ3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDE0IEBAIFN0b3JhZ2U6OlN0b3JhZ2UoRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHQKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKG1fc3RvcmFn
ZUFyZWEpOworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAgICAgICBtX3N0b3JhZ2VBcmVhLT5p
bmNyZW1lbnRBY2Nlc3NDb3VudCgpOwogfQogCiBTdG9yYWdlOjp+U3RvcmFnZSgpCiB7CisgICAg
aWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmRlY3JlbWVudEFjY2Vz
c0NvdW50KCk7CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiAxMjIwNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25z
dCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
aW5jcmVtZW50QWNjZXNzQ291bnQoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVu
dEFjY2Vzc0NvdW50KCkgeyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2aXNpb24g
MTIyMDQ3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIGlubGluZSBTdG9yYWdlQXJlYUltcGw6OlN0
b3JhZ2VBcmVhSW1wbCgKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2lzU2h1dGRvd24oZmFsc2Up
CiAjZW5kaWYKKyAgICAsIG1fYWNjZXNzQ291bnQoMCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRp
bWVyKHRoaXMsICZTdG9yYWdlQXJlYUltcGw6OmNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4p
OwpAQCAtOTMsNiArOTUsOCBAQCBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9y
YWdlCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9pc1NodXRkb3duKGFyZWEtPm1faXNTaHV0ZG93
bikKICNlbmRpZgorICAgICwgbV9hY2Nlc3NDb3VudCgwKQorICAgICwgbV9jbG9zZURhdGFiYXNl
VGltZXIodGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdp
bik7CkBAIC0yNjAsNCArMjY0LDMwIEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGls
SW1wb3J0Q28KICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpOwogfQogCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6aW5jcmVtZW50QWNjZXNzQ291bnQo
KQoreworICAgIG1fYWNjZXNzQ291bnQrKzsKKworICAgIGlmIChtX2Nsb3NlRGF0YWJhc2VUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkZWNyZW1lbnRBY2Nlc3NDb3VudCgpCit7CisgICAgLS1t
X2FjY2Vzc0NvdW50OworCisgICAgaWYgKCFtX2FjY2Vzc0NvdW50KSB7CisgICAgICAgIGlmICht
X2Nsb3NlRGF0YWJhc2VUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9jbG9zZURhdGFi
YXNlVGltZXIuc3RvcCgpOworICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5zdGFydE9uZVNo
b3QoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwo
KSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVy
RmlyZWQoVGltZXI8U3RvcmFnZUFyZWFJbXBsPiAqKQoreworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDEyMjA0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RvcmFnZUFyZWFJbXBsX2gKIAogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTMsNiArNTQsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGRpc2FibGVkQnlQcml2YXRlQnJv
d3NpbmdJbkZyYW1lKGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CiAKKyAgICAgICAg
dmlydHVhbCB2b2lkIGluY3JlbWVudEFjY2Vzc0NvdW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZWNyZW1lbnRBY2Nlc3NDb3VudCgpOworCiAgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFy
ZWFJbXBsPiBjb3B5KCk7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIApAQCAtNjksNiArNzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJl
YUltcGwqKTsKIAogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0
OworICAgICAgICB2b2lkIGNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVh
SW1wbD4qKTsKIAogICAgICAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwogICAgICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47CkBAIC04MCw2ICs4NSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGJvb2wgbV9pc1No
dXRkb3duOwogI2VuZGlmCisgICAgICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7CisgICAgICAg
IFRpbWVyPFN0b3JhZ2VBcmVhSW1wbD4gbV9jbG9zZURhdGFiYXNlVGltZXI7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmNwcAkocmV2aXNpb24gMTIyMDQ3KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsMTAgKzM4Miwx
NiBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhib29sIGNsZWFySXRlCiB7CiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoaXRlbXMuaXNFbXB0eSgpICYmICFjbGVh
ckl0ZW1zKQorICAgIGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgIWNsZWFySXRlbXMgJiYgIW1fc3lu
Y0Nsb3NlRGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV9kYXRhYmFzZU9wZW5G
YWlsZWQpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSAm
JiBtX3N5bmNDbG9zZURhdGFiYXNlKSB7CisgICAgICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKICAgICAgICAgb3BlbkRhdGFiYXNlKENyZWF0ZUlmTm9uRXhpc3RlbnQpOwogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxMjIwNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU3RvcmFnZVRyYWNrZXIqIHN0b3JhZ2VUcmFj
a2VyID0gMDsKIAorLy8gSWYgdGhlcmUgaXMgbm8gZG9jdW1lbnQgcmVmZXJlY2luZyBhIHN0b3Jh
Z2UgZGF0YWJhc2UsIGNsb3NlIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlCisvLyBhZnRlciBpdCBo
YXMgYmVlbiBpZGxlIGZvciBzX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCBzZWNvbmRzLgor
c3RhdGljIGNvbnN0IGRvdWJsZSBTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwgPSAzMDA7Cisg
ICAgCiB2b2lkIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcm
IHN0b3JhZ2VQYXRoLCBTdG9yYWdlVHJhY2tlckNsaWVudCogY2xpZW50KQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC05MSw2ICs5NSw3IEBAIFN0b3JhZ2VUcmFja2VyOjpTdG9y
YWdlVHJhY2tlcihjb25zdCBTdHIKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiAgICAgLCBtX25l
ZWRzSW5pdGlhbGl6YXRpb24oZmFsc2UpCiAgICAgLCBtX2ZpbmlzaGVkSW1wb3J0aW5nT3JpZ2lu
SWRlbnRpZmllcnMoZmFsc2UpCisgICAgLCBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChT
dG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpCiB7CiB9CiAKQEAgLTYyNyw1ICs2MzIsNSBAQCBs
b25nIGxvbmcgU3RvcmFnZVRyYWNrZXI6OmRpc2tVc2FnZUZvck9yCiAKICAgICByZXR1cm4gU1FM
aXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KLSAgICAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXIuaAkocmV2aXNpb24gMTIyMDQ3KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwogCisgICAgZG91YmxlIHN0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbCgpIHsgcmV0dXJuIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOyB9
CisgICAgdm9pZCBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlIGludGVydmFs
KSB7IG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gaW50ZXJ2YWw7IH0KKwogcHJpdmF0
ZToKICAgICBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKTsKICAgICBz
dGF0aWMgdm9pZCBzY2hlZHVsZVRhc2sodm9pZCopOwpAQCAtMTE4LDYgKzEyMSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzQWN0aXZlOwogICAgIGJvb2wgbV9uZWVkc0luaXRpYWxpemF0aW9u
OwogICAgIGJvb2wgbV9maW5pc2hlZEltcG9ydGluZ09yaWdpbklkZW50aWZpZXJzOworICAgIGRv
dWJsZSBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDsKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjIwNDcpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAxMi0wNy0wNiAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvbnNpZGVyIGNsb3NpbmcgdW51c2VkIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBh
ZnRlciBhIHRpbWVvdXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MDcxMworCisgICAgICAgIEZvciBhIGxvY2FsU3RvcmFnZSwgaWYgdGhlcmUgaXMg
bm8gYWN0aXZlIGRvY3VtZW50IHJlZmVyZW5jaW5nIHRvIGl0IGZvciBjZXJ0YWluIGFtb3VudCBv
ZiB0aW1lICgzMDAgc2Vjb25kcyksCisgICAgICAgIHdlIGNhbiBjbG9zZSB0aGUgdW5kZXJseWlu
ZyBzcWxpdGUgZGF0YWJhc2UuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tOgorICAgICAgICAoK1tX
ZWJTdG9yYWdlTWFuYWdlciBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6XSk6IGFkZCBh
IG5ldyBtZXRob2QgZm9yIER1bXBSZW5kZXJUcmVlIHRvIHNldCB0aGUgdGltZW91dAorICAgICAg
ICAgICAgdGhhdCB3ZSB3aWxsIHdhaXQgYmVmb3JlIGNsb3NpbmcgZGF0YWJhc2UuCisgICAgICAg
IChpbml0aWFsaXplTG9jYWxTdG9yYWdlUGF0aCk6CisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlclByaXZhdGUuaDoKKwogMjAxMi0wNy0wNCAgSm9obiBNZWxsb3IgIDxqb2hubWVA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRleHQgQXV0b3NpemluZzogQWRkIGNvbXBpbGUgZmxh
ZyBhbmQgcnVudGltZSBzZXR0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VNYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTk3
LDcgKzk3LDEyIEBAICsgKE5TU3RyaW5nICopX3N0b3JhZ2VEaXJlY3RvcnlQYXRoCiAgICAgcmV0
dXJuIHNMb2NhbFN0b3JhZ2VQYXRoOwogfQogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplTG9jYWxT
dG9yYWdlUGF0aCgpIAorKyAodm9pZClzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6KGRv
dWJsZSlpbnRlcnZhbAoreworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc2V0U3RvcmFn
ZURhdGFiYXNlSWRsZUludGVydmFsKGludGVydmFsKTsKK30KKworc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUxvY2FsU3RvcmFnZVBhdGgoKQogewogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9
IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAgICAgc0xvY2FsU3RvcmFn
ZVBhdGggPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0
c0tleV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2Vy
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3Rv
cmFnZU1hbmFnZXJQcml2YXRlLmgJKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDYgQEAgQGludGVyZmFjZSBXZWJTdG9yYWdlTWFuYWdlciA6IE5TT2JqZWN0CiAt
ICh2b2lkKXN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlOwogCiArIChOU1N0cmluZyAq
KV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKLQorKyAodm9pZClzZXRTdG9yYWdlRGF0YWJhc2VJZGxl
SW50ZXJ2YWw6KGRvdWJsZSlpbnRlcnZhbDsKIEBlbmQKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDQ3KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDctMDYg
IFlvbmdqdW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KKworICAgICAgICBDb25z
aWRlciBjbG9zaW5nIHVudXNlZCBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgYWZ0ZXIgYSB0aW1lb3V0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3MTMK
KworICAgICAgICBGb3IgYSBsb2NhbFN0b3JhZ2UsIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSBkb2N1
bWVudCByZWZlcmVuY2luZyB0byBpdCBmb3IgY2VydGFpbiBhbW91bnQgb2YgdGltZSAoMzAwIHNl
Y29uZHMpLAorICAgICAgICB3ZSBjYW4gY2xvc2UgdGhlIHVuZGVybHlpbmcgc3FsaXRlIGRhdGFi
YXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOiBhZGQgYSBKUyBtZXRob2Qg
c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsIHRvIHRlc3RSdW5uZXIKKyAgICAgICAgICAg
IHRvIHNldCBhIGRpZmZlcmVudCB0aW1lb3V0IHZhbHVlIGZvciBjbG9zaW5nIGxvY2FsU3RvcmFn
ZSBkYXRhYmFzZS4KKyAgICAgICAgKHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbENhbGxi
YWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xh
eW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpOiBhZGQgZW1wdHkgbWV0aG9kLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVy
dmFsKTogZGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250
cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbCk6IGRpdHRvLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKTogZGl0dG8uCisKIDIwMTItMDct
MDYgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbR3Rr
XSBBZGQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZGlzYWJsaW5nIHVuc3RhYmxlIGZlYXR1
cmVzIGluIHJlbGVhc2VzCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjIwNDcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMjUsNiArMjIy
NSwyMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRIYXNDdXN0b21GdWxsU2NyZWVuCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGludGVydmFs
ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0U3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsKGludGVydmFsKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKwogc3RhdGljIHZvaWQgbGF5b3V0VGVzdENvbnRyb2xsZXJPYmplY3RGaW5h
bGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZShvYmplY3QpKTsKQEAgLTI0NDUsNiArMjQ1OSw3IEBAIEpTU3RhdGljRnVuY3Rpb24q
IExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAic2V0QmFja2luZ1NjYWxlRmFjdG9y
Iiwgc2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicHJl
Y2lzZVRpbWUiLCBwcmVjaXNlVGltZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEhh
c0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciIsIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlv
ckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRl
cnZhbCIsIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMjIwNDcpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYs
NiArMzY2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yKGJvb2wgdmFsdWUpIHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1ZTsgfQog
ICAgIGJvb2wgaGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9j
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7IH0KIAorICAgIHZvaWQgc2V0U3RvcmFnZURhdGFiYXNl
SWRsZUludGVydmFsKGRvdWJsZSk7CisKIHByaXZhdGU6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBl
eHBlY3RlZFBpeGVsSGFzaCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlv
dXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gMTIyMDQ3KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTI4LDMgKzkyOCw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGl2ZXJXZWJJbnQKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmRlbGl2ZXJX
ZWJJbnRlbnQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIGFjdGlvbiwgdHlwZSwgZGF0YSk7CiB9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZh
bChkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2
aXNpb24gMTIyMDQ3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNywzICsxMDA3LDggQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludAogewogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMjIwNDcpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIw
MSw2ICsyMDEsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYQog
ICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFs
bE9yaWdpbnNdOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0
YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIFtXZWJTdG9yYWdlTWFu
YWdlciBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6aW50ZXJ2YWxdOworfQorCiBKU1Zh
bHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0
LCBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXSk7
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29u
dHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDEyMjA0NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODMs
MyArMTQ4Myw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnQKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDQ3KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTItMDctMDYgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBDb25zaWRlciBjbG9zaW5nIHVudXNlZCBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgYWZ0ZXIg
YSB0aW1lb3V0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTA3MTMKKworICAgICAgICBGb3IgYSBsb2NhbFN0b3JhZ2UsIGlmIHRoZXJlIGlzIG5vIGFj
dGl2ZSBkb2N1bWVudCByZWZlcmVuY2luZyB0byBpdCBmb3IgY2VydGFpbiBhbW91bnQgb2YgdGlt
ZSAoMzAwIHNlY29uZHMpLAorICAgICAgICB3ZSBjYW4gY2xvc2UgdGhlIHVuZGVybHlpbmcgc3Fs
aXRlIGRhdGFiYXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczogdGhlIHRlc3QgbmVl
ZHMgc2V0Q2FjaGVNb2RlbCBpbXBsZW1lbnRhdGlvbiwgc2tpcCBpdCBpbiBjaHJvbWl1bS4KKyAg
ICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3N0b3Jh
Z2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L3Jlc291cmNlcy9zdG9yYWdlLWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbDogQWRkZWQu
CisKIDIwMTItMDctMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWJLaXQgVmVyc2lvbiA1LjEuNyAoNjUzNC41Ny4yLCByMTIxOTM1KTogRG91YmxlLWNsaWNr
IG5vIGxvbmdlciB3b3JrcyBvbiBPcGVuU3RyZWV0TWFwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDEyMjA0NykKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcg
Y29weSkKQEAgLTczNCw5ICs3MzQsMTAgQEAgV09OVEZJWCBTS0lQIDogaHR0cC90ZXN0cy9nbG9i
YWxoaXN0b3J5IAogLy8gRm9yIG1vcmUgZGV0YWlscywgc2VlIGRpc2N1c3Npb25zIGF0IGlzc3Vl
IDIwNTcwLgogV09OVEZJWCBTS0lQIDogZmFzdC9mb3Jtcy9nZXQtZm9ybXMtdG8tYWJvdXQtYmxh
bmsuaHRtbCA9IFBBU1MKIAotLy8gVGhpcyB0ZXN0IHJlcXVpcmVzIExheW91dFRlc3RDb250cm9s
bGVyLnNldENhY2hlTW9kZWwsIHdoaWNoIHdlIGRvbid0CisvLyBUaGVzZSB0ZXN0cyByZXF1aXJl
cyBMYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYWNoZU1vZGVsLCB3aGljaCB3ZSBkb24ndAogLy8g
aW1wbGVtZW50IGJlY2F1c2Ugd2UgY2FuJ3QgZW11bGF0ZSB0aGUgY2FjaGluZyBiZWhhdmlvcnMg
aXQgZXhwZWN0cy4KIFdPTlRGSVggU0tJUCA6IGZhc3QvZG9tL0hUTUxTY3JpcHRFbGVtZW50L25l
c3RlZC1leGVjdXRpb24uaHRtbCA9IFBBU1MKK1dPTlRGSVggU0tJUCA6IHN0b3JhZ2UvZG9tc3Rv
cmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbCA9IFBBU1MKIAogLy8gRGVs
ZXRpb24gVUkgaXMgYSBNYWlsLWlzbS4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlz
LgogV09OVEZJWCBTS0lQIDogZWRpdGluZy9kZWxldGluZy9kZWxldGlvblVJLXNpbmdsZS1pbnN0
YW5jZS5odG1sID0gUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0
b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24t
aWRsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitQQVNTCitQQVNTCisKSW5kZXg6IExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9z
ZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKGEpCit7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ2dlciIpLmlubmVySFRNTCArPSBhICsgIjxicj4i
OworfQorCitmdW5jdGlvbiBsb2FkTmV4dFBhZ2UoKQoreworICAgIGxvY2F0aW9uLmhyZWYgPSAi
Li4vcmVzb3VyY2VzL3N0b3JhZ2UtY2xvc2UtZGF0YS1vbi1pZGxlLXN3aXRjaC5odG1sIjsKK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKDApOworICAg
ICAgICB0ZXN0UnVubmVyLnNldENhY2hlTW9kZWwoMCk7IC8vIFdlYkNhY2hlTW9kZWxEb2N1bWVu
dFZpZXdlci4KKyAgICB9CisKKyAgICAvLyBUZXN0IHRvIG1ha2Ugc3VyZSB0aGUgc3RvcmFnZSB2
YWx1ZXMgZG9uJ3QgY2hhbmdlIGFmdGVyIHRoZSBkYXRhYmFzZSBpcyBjbG9zZWQuCisgICAgaWYg
KCJsb2NhbFN0b3JhZ2UiIGluIHdpbmRvdykgeworICAgICAgICB2YXIgbG9hZENvdW50ID0gd2lu
ZG93LnNlc3Npb25TdG9yYWdlWydsb2FkQ291bnQnXTsKKyAgICAgICAgaWYgKGxvYWRDb3VudCAh
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgbG9hZENvdW50Kys7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGxvYWRDb3VudCA9IDE7CisKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdl
Wydsb2FkQ291bnQnXSA9IGxvYWRDb3VudDsKKworICAgICAgICBpZiAobG9hZENvdW50ID09IDEg
KSB7CisgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmNsZWFyKCk7CisgICAgICAgICAg
ICB3aW5kb3cubG9jYWxTdG9yYWdlWydmb28nXSA9ICdGT08nOworICAgICAgICAgICAgd2luZG93
LmxvY2FsU3RvcmFnZVsnYmFyJ10gPSAnQkFSJzsKKworICAgICAgICAgICAgc2V0VGltZW91dCgi
bG9hZE5leHRQYWdlKCkiLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRl
c3QgaWYgd2Ugc3RpbGwgaGF2ZSB0aGUgcmlnaHQgdmFsdWVzLgorICAgICAgICAgICAgbG9nKHdp
bmRvdy5sb2NhbFN0b3JhZ2VbJ2ZvbyddID09PSAnRk9PJyA/ICdQQVNTJyA6ICdGQUlMJyk7Cisg
ICAgICAgICAgICBsb2cod2luZG93LmxvY2FsU3RvcmFnZVsnYmFyJ10gPT09ICdCQVInID8gJ1BB
U1MnIDogJ0ZBSUwnKTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwo
MzAwKTsKKyAgICAgICAgICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL3N0b3Jh
Z2UtY2xvc2UtZGF0YS1vbi1pZGxlLXN3aXRjaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvcmVzb3VyY2VzL3N0b3JhZ2UtY2xvc2UtZGF0YS1vbi1pZGxlLXN3aXRjaC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFn
ZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTAgQEAKKzxodG1sPgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBzd2luZ0JhY2soKSAKKyAgICB7
CisgICAgICAgIGxvY2F0aW9uLmhyZWY9Jy4uL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRh
YmFzZS1vbi1pZGxlLmh0bWwnOworICAgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdzZXRU
aW1lb3V0KHN3aW5nQmFjaygpLCAxMDApOyc+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="159529"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151293</attachid>
            <date>2012-07-09 12:12:07 -0700</date>
            <delta_ts>2012-07-09 17:05:50 -0700</delta_ts>
            <desc>Addressing review comments. </desc>
            <filename>localstorage_for_oss.patch</filename>
            <type>text/plain</type>
            <size>22017</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjEyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTA5ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xv
c2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAg
ICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVm
ZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwK
KyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKwor
ICAgICAgICBUZXN0OiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1v
bi1pZGxlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlOjpTdG9yYWdlKTogaW5jcmVtZW50IHN0b3JhZ2VBcmVhIGFjY2VzcyBj
b3VudCB3aGVuIGEgRE9NV2luZG93IGlzIHJlZmVyZW5jaW5nIGl0LgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZTo6flN0b3JhZ2UpOiBkZWNyZW1lbnQgc3RvcmFnZUFyZWEgYWNjZXNzIGNvdW50
IHdoZW4gRE9NV2luZG93IGlzIGRvbmUgd2l0aCBpdC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VBcmVhLmg6CisgICAgICAgIChTdG9yYWdlQXJlYSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpTdG9y
YWdlQXJlYUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbmNyZW1l
bnRBY2Nlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQpOiBzY2hlZHVsZSBjbG9zZURhdGFi
YXNlVGltZXIgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvY3VtZW50CisgICAgICAgICAgICByZWZl
cmVuY2luZyB0byB0aGlzIHN0b3JhZ2VBcmVhLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCk6IGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNx
bGl0ZSBkYXRhYmFzZS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAg
ICAgICAoU3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5bmMpOiBpZiBtX3N5
bmNDbG9zZURhdGFiYXNlIGZsYWcgaXMgc2V0IGFuZCB0aGUgZGF0YWJhc2UgaXMgbm90IG9wZW5l
ZCwgYmFpbCBvdXQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdl
VHJhY2tlcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKTogIHNldCB0aGUgdGltZW91dCB2YWx1ZSB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUg
Y2xvc2luZyB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlLiAgVGhpcyBpcyBjdXJyZW50bHkgdXNl
ZCBieSBEdW1wUmVuZGVyVHJlZSBvbmx5LgorICAgICAgICAoU3RvcmFnZVRyYWNrZXIpOgorCiAy
MDEyLTA3LTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQ3JlYXRlIHJlbmRlciBzdXJmYWNlcyBvbiBtYWluIHRocmVhZCBvbmx5IGZv
ciB0aGUgY3VycmVudCBmcmFtZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCShy
ZXZpc2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTQgQEAgU3RvcmFnZTo6U3RvcmFnZShGcmFtZSog
ZnJhbWUsIFBhc3NSZWZQdAogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQobV9z
dG9yYWdlQXJlYSk7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIG1fc3RvcmFnZUFy
ZWEtPmluY3JlbWVudEFjY2Vzc0NvdW50KCk7CiB9CiAKIFN0b3JhZ2U6On5TdG9yYWdlKCkKIHsK
KyAgICBpZiAobV9zdG9yYWdlQXJlYSkKKyAgICAgICAgbV9zdG9yYWdlQXJlYS0+ZGVjcmVtZW50
QWNjZXNzQ291bnQoKTsKIH0KIAogdW5zaWduZWQgU3RvcmFnZTo6bGVuZ3RoKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDEyMjEyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBj
b250YWlucyhjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7
CiAKICAgICAgICAgdmlydHVhbCBib29sIGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1l
KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBpbmNyZW1lbnRBY2Nlc3NDb3VudCgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVj
cmVtZW50QWNjZXNzQ291bnQoKSB7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZp
c2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAgaW5saW5lIFN0b3JhZ2VBcmVhSW1w
bDo6U3RvcmFnZUFyZWFJbXBsKAogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNTaHV0ZG93bihm
YWxzZSkKICNlbmRpZgorICAgICwgbV9hY2Nlc3NDb3VudCgwKQorICAgICwgbV9jbG9zZURhdGFi
YXNlVGltZXIodGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9zZWN1cml0eU9y
aWdpbik7CkBAIC05Myw2ICs5NSw4IEBAIFN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBs
KFN0b3JhZ2UKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1No
dXRkb3duKQogI2VuZGlmCisgICAgLCBtX2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2Nsb3NlRGF0
YWJhc2VUaW1lcih0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJl
ZCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3NlY3VyaXR5
T3JpZ2luKTsKQEAgLTI2MCw0ICsyNjQsMzEgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmJsb2Nr
VW50aWxJbXBvcnRDbwogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiB9CiAKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbmNyZW1lbnRBY2Nlc3ND
b3VudCgpCit7CisgICAgbV9hY2Nlc3NDb3VudCsrOworCisgICAgaWYgKG1fY2xvc2VEYXRhYmFz
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0b3AoKTsK
K30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmRlY3JlbWVudEFjY2Vzc0NvdW50KCkKK3sKKyAg
ICAtLW1fYWNjZXNzQ291bnQ7CisgICAgQVNTRVJUKG1fYWNjZXNzQ291bnQgPj0gMCk7CisKKyAg
ICBpZiAoIW1fYWNjZXNzQ291bnQpIHsKKyAgICAgICAgaWYgKG1fY2xvc2VEYXRhYmFzZVRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5zdG9wKCk7Cisg
ICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlVHJhY2tlcjo6
dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZChUaW1lcjxTdG9yYWdl
QXJlYUltcGw+ICopCit7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgaWYg
KG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVD
bG9zZURhdGFiYXNlKCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuaAkocmV2aXNpb24gMTIyMTI1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBTdG9yYWdlQXJlYUltcGxfaAogCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkBAIC01Myw2ICs1NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29uc3Qg
RnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgaW5jcmVt
ZW50QWNjZXNzQ291bnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudEFjY2Vzc0Nv
dW50KCk7CisKICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IGNvcHkoKTsKICAg
ICAgICAgdm9pZCBjbG9zZSgpOwogCkBAIC02OSw2ICs3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCopOwogCiAgICAgICAg
IHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgY2xv
c2VEYXRhYmFzZVRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFJbXBsPiopOwogCiAgICAgICAg
IFN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gbV9zZWN1cml0eU9yaWdpbjsKQEAgLTgwLDYgKzg1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtX2lzU2h1dGRvd247CiAjZW5kaWYKKyAg
ICAgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKKyAgICAgICAgVGltZXI8U3RvcmFnZUFyZWFJ
bXBsPiBtX2Nsb3NlRGF0YWJhc2VUaW1lcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShy
ZXZpc2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MiwxMCArMzgyLDE2IEBAIHZvaWQgU3RvcmFnZUFy
ZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKIAotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgIWNsZWFySXRlbXMpCisgICAgaWYgKGl0
ZW1zLmlzRW1wdHkoKSAmJiAhY2xlYXJJdGVtcyAmJiAhbV9zeW5jQ2xvc2VEYXRhYmFzZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChtX2RhdGFiYXNlT3BlbkZhaWxlZCkKICAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpICYmIG1fc3luY0Nsb3NlRGF0YWJh
c2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICBvcGVu
RGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJKHJl
dmlzaW9uIDEyMjEyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOwogCisvLyBJZiB0
aGVyZSBpcyBubyBkb2N1bWVudCByZWZlcmVuY2luZyBhIHN0b3JhZ2UgZGF0YWJhc2UsIGNsb3Nl
IHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlCisvLyBhZnRlciBpdCBoYXMgYmVlbiBpZGxlIGZvciBt
X1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCBzZWNvbmRzLgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBEZWZhdWx0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gMzAwOworICAgIAogdm9pZCBT
dG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0
aCwgU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwpAQCAtOTEsNiArOTUsNyBAQCBTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIo
Y29uc3QgU3RyCiAgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQogICAgICwgbV9uZWVkc0luaXRpYWxp
emF0aW9uKGZhbHNlKQogICAgICwgbV9maW5pc2hlZEltcG9ydGluZ09yaWdpbklkZW50aWZpZXJz
KGZhbHNlKQorICAgICwgbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoRGVmYXVsdFN0b3Jh
Z2VEYXRhYmFzZUlkbGVJbnRlcnZhbCkKIHsKIH0KIApAQCAtNjI3LDUgKzYzMiw1IEBAIGxvbmcg
bG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3IKIAogICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwogfQotICAgIAorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5oCShyZXZpc2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CiAKKyAgICBkb3VibGUgc3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsKCkgeyByZXR1cm4gbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw7IH0KKyAg
ICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsg
bV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQorCiBwcml2YXRlOgog
ICAgIFN0b3JhZ2VUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpOwogICAgIHN0YXRp
YyB2b2lkIHNjaGVkdWxlVGFzayh2b2lkKik7CkBAIC0xMTgsNiArMTIxLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNBY3RpdmU7CiAgICAgYm9vbCBtX25lZWRzSW5pdGlhbGl6YXRpb247CiAg
ICAgYm9vbCBtX2ZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnM7CisgICAgZG91Ymxl
IG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjEyNSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisy
MDEyLTA3LTA5ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVy
IGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBh
Y3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRp
bWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNx
bGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICgrW1dlYlN0
b3JhZ2VNYW5hZ2VyIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDpdKTogYWRkIGEgbmV3
IG1ldGhvZCBmb3IgRHVtcFJlbmRlclRyZWUgdG8gc2V0IHRoZSB0aW1lb3V0CisgICAgICAgICAg
ICB0aGF0IHdlIHdpbGwgd2FpdCBiZWZvcmUgY2xvc2luZyBkYXRhYmFzZS4KKyAgICAgICAgKGlu
aXRpYWxpemVMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VN
YW5hZ2VyUHJpdmF0ZS5oOgorCiAyMDEyLTA3LTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZp
ZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIy
MTA3LgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5h
Z2VyLm1tCShyZXZpc2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VNYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5NywxMiBAQCArIChO
U1N0cmluZyAqKV9zdG9yYWdlRGlyZWN0b3J5UGF0aAogICAgIHJldHVybiBzTG9jYWxTdG9yYWdl
UGF0aDsKIH0KIAotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvY2FsU3RvcmFnZVBhdGgoKSAKKysg
KHZvaWQpc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOihkb3VibGUpaW50ZXJ2YWwKK3sK
KyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRl
cnZhbChpbnRlcnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVMb2NhbFN0b3JhZ2VQ
YXRoKCkKIHsKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogICAgIHNMb2NhbFN0b3JhZ2VQYXRoID0gW2RlZmF1bHRz
IG9iamVjdEZvcktleTpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oCShyZXZpc2lvbiAxMjIxMjUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0
b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2IEBAIEBp
bnRlcmZhY2UgV2ViU3RvcmFnZU1hbmFnZXIgOiBOU09iamVjdAogLSAodm9pZClzeW5jRmlsZVN5
c3RlbUFuZFRyYWNrZXJEYXRhYmFzZTsKIAogKyAoTlNTdHJpbmcgKilfc3RvcmFnZURpcmVjdG9y
eVBhdGg7Ci0KKysgKHZvaWQpc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOihkb3VibGUp
aW50ZXJ2YWw7CiBAZW5kCiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjEyNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTA5ICBZb25nanVuIFpoYW5nICA8
eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVz
ZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEg
bG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcg
dG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAg
d2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcDogYWRkIGEgSlMgbWV0aG9kIHNldFN0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbCB0byB0ZXN0UnVubmVyCisgICAgICAgICAgICB0byBzZXQgYSBkaWZmZXJl
bnQgdGltZW91dCB2YWx1ZSBmb3IgY2xvc2luZyBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UuCisgICAg
ICAgIChzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjayk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxl
ckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFi
YXNlSWRsZUludGVydmFsKTogYWRkIGVtcHR5IG1ldGhvZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6IGRpdHRvLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2
YWwpOiBkaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbCk6IGRpdHRvLgorCiAyMDEyLTA3LTA5ICBKw6Fub3MgQmFkaWNz
ICA8amJhZGljc0BpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XVtOUldUXSBFbmFibGUg
Y2FzY2FkZWQgVGVzdEV4cGVjdGF0aW9ucwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTIyMTI1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjI1LDYgKzIyMjUsMjAgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGlj
IEpTVmFsdWVSZWYgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJs
ZSBpbnRlcnZhbCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyB2b2lkIGxheW91dFRlc3RDb250cm9sbGVy
T2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQogewogICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CkBAIC0yNDQ1LDYgKzI0NTksNyBAQCBKU1N0YXRp
Y0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldEJhY2tpbmdT
Y2FsZUZhY3RvciIsIHNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInByZWNpc2VUaW1lIiwgcHJlY2lzZVRpbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IiLCBzZXRIYXNDdXN0b21GdWxsU2Ny
ZWVuQmVoYXZpb3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRTdG9yYWdlRGF0YWJh
c2VJZGxlSW50ZXJ2YWwiLCBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTIyMTI1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzY2LDYgKzM2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0g
dmFsdWU7IH0KICAgICBib29sIGhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9CiAKKyAgICB2b2lkIHNldFN0b3Jh
Z2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpOworCiBwcml2YXRlOgogICAgIExheW91dFRl
c3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6
OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJldmlzaW9uIDEy
MjEyNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyOCwzICs5MjgsOCBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxpdmVyV2ViSW50CiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpkZWxpdmVyV2ViSW50ZW50KGJyb3dzZXItPm1haW5GcmFtZSgpLCBhY3Rpb24sIHR5cGUsIGRh
dGEpOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWwoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAJKHJldmlzaW9uIDEyMjEyNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsMyArMTAxMCw4
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnQKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTIyMTI1KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDEsNiArMjAxLDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0
ZUFsbExvY2EKICAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2Vy
XSBkZWxldGVBbGxPcmlnaW5zXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3sKKyAgICBbV2Vi
U3RvcmFnZU1hbmFnZXIgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOmludGVydmFsXTsK
K30KKwogSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIG9yaWdpbnNBcnJheVRv
SlMoY29udGV4dCwgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0g
b3JpZ2luc10pOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMjIxMjUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDgzLDMgKzE0ODMsOCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVy
V2ViSW50CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEy
MjEyNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDEyLTA3LTA5ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFi
YXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVy
ZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1v
dW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRl
cmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6IHRo
ZSB0ZXN0IG5lZWRzIHNldENhY2hlTW9kZWwgaW1wbGVtZW50YXRpb24sIHNraXAgaXQgaW4gY2hy
b21pdW0uCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJh
c2Utb24taWRsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTA3LTA5ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFp
bC5jb20+CiAKICAgICAgICAgW0d0a10gVW5za2lwIHRoZSBDU1MgUmVnaW9ucyBsYXlvdXQgdGVz
dHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucwkocmV2aXNpb24gMTIyMTI1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzM0LDkgKzczNCwxMCBAQCBXT05U
RklYIFNLSVAgOiBodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkgCiAvLyBGb3IgbW9yZSBkZXRhaWxz
LCBzZWUgZGlzY3Vzc2lvbnMgYXQgaXNzdWUgMjA1NzAuCiBXT05URklYIFNLSVAgOiBmYXN0L2Zv
cm1zL2dldC1mb3Jtcy10by1hYm91dC1ibGFuay5odG1sID0gUEFTUwogCi0vLyBUaGlzIHRlc3Qg
cmVxdWlyZXMgTGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FjaGVNb2RlbCwgd2hpY2ggd2UgZG9u
J3QKKy8vIFRoZXNlIHRlc3RzIHJlcXVpcmVzIExheW91dFRlc3RDb250cm9sbGVyLnNldENhY2hl
TW9kZWwsIHdoaWNoIHdlIGRvbid0CiAvLyBpbXBsZW1lbnQgYmVjYXVzZSB3ZSBjYW4ndCBlbXVs
YXRlIHRoZSBjYWNoaW5nIGJlaGF2aW9ycyBpdCBleHBlY3RzLgogV09OVEZJWCBTS0lQIDogZmFz
dC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbmVzdGVkLWV4ZWN1dGlvbi5odG1sID0gUEFTUworV09O
VEZJWCBTS0lQIDogc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24t
aWRsZS5odG1sID0gUEFTUwogCiAvLyBEZWxldGlvbiBVSSBpcyBhIE1haWwtaXNtLiBXZSBkb24n
dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiBXT05URklYIFNLSVAgOiBlZGl0aW5nL2RlbGV0
aW5nL2RlbGV0aW9uVUktc2luZ2xlLWluc3RhbmNlLmh0bWwgPSBQQVNTCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uv
c3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNl
LW9uLWlkbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1BBU1MK
K1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xv
c2UtZGF0YWJhc2Utb24taWRsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRh
dGFiYXNlLW9uLWlkbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQor
CitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2Vy
IikuaW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIGxvYWROZXh0UGFnZSgp
Cit7CisgICAgbG9jYXRpb24uaHJlZiA9ICIuLi9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRh
LW9uLWlkbGUtc3dpdGNoLmh0bWwiOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdG9yYWdlRGF0
YWJhc2VJZGxlSW50ZXJ2YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q2FjaGVNb2RlbCgw
KTsgLy8gV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyLgorICAgIH0KKworICAgIC8vIFRlc3Qg
dG8gbWFrZSBzdXJlIHRoZSBzdG9yYWdlIHZhbHVlcyBkb24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIGRh
dGFiYXNlIGlzIGNsb3NlZC4KKyAgICBpZiAoImxvY2FsU3RvcmFnZSIgaW4gd2luZG93KSB7Cisg
ICAgICAgIHZhciBsb2FkQ291bnQgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbJ2xvYWRDb3VudCdd
OworICAgICAgICBpZiAobG9hZENvdW50ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICBsb2Fk
Q291bnQrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENvdW50ID0gMTsKKworICAg
ICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbJ2xvYWRDb3VudCddID0gbG9hZENvdW50OworCisg
ICAgICAgIGlmIChsb2FkQ291bnQgPT0gMSApIHsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0
b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2ZvbyddID0g
J0ZPTyc7CisgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlWydiYXInXSA9ICdCQVInOwor
CisgICAgICAgICAgICBzZXRUaW1lb3V0KCJsb2FkTmV4dFBhZ2UoKSIsIDApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gVGVzdCBpZiB3ZSBzdGlsbCBoYXZlIHRoZSByaWdodCB2
YWx1ZXMuCisgICAgICAgICAgICBsb2cod2luZG93LmxvY2FsU3RvcmFnZVsnZm9vJ10gPT09ICdG
T08nID8gJ1BBU1MnIDogJ0ZBSUwnKTsKKyAgICAgICAgICAgIGxvZyh3aW5kb3cubG9jYWxTdG9y
YWdlWydiYXInXSA9PT0gJ0JBUicgPyAnUEFTUycgOiAnRkFJTCcpOworCisgICAgICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgzMDApOworICAgICAgICAgICAgICAgIHdpbmRvdy50
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRp
diBpZD0ibG9nZ2VyIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVz
dHMvc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1j
bG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL3Jlc291cmNlcy9zdG9yYWdlLWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+Cis8c2NyaXB0PgorICAgIGZ1
bmN0aW9uIHN3aW5nQmFjaygpIAorICAgIHsKKyAgICAgICAgbG9jYXRpb24uaHJlZj0nLi4vZG9t
c3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbCc7CisgICAgfQorPC9z
Y3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3NldFRpbWVvdXQoc3dpbmdCYWNrKCksIDEwMCk7Jz4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="159768"
          type_id="1"
          status="+"
          setter="beidson"
    />
    <flag name="commit-queue"
          id="159777"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151359</attachid>
            <date>2012-07-09 17:05:50 -0700</date>
            <delta_ts>2012-07-09 18:03:54 -0700</delta_ts>
            <desc>Reviewed patch for commit.</desc>
            <filename>localstorage_for_oss.patch</filename>
            <type>text/plain</type>
            <size>22047</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjE2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTA5ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xv
c2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAg
ICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVm
ZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwK
KyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgVGVzdDogc3RvcmFn
ZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sCisKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6U3Rv
cmFnZSk6IGluY3JlbWVudCBzdG9yYWdlQXJlYSBhY2Nlc3MgY291bnQgd2hlbiBhIERPTVdpbmRv
dyBpcyByZWZlcmVuY2luZyBpdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6On5TdG9yYWdl
KTogZGVjcmVtZW50IHN0b3JhZ2VBcmVhIGFjY2VzcyBjb3VudCB3aGVuIERPTVdpbmRvdyBpcyBk
b25lIHdpdGggaXQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYS5oOgorICAgICAgICAo
U3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6aW5jcmVtZW50QWNjZXNzQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmRlY3Jl
bWVudEFjY2Vzc0NvdW50KTogc2NoZWR1bGUgY2xvc2VEYXRhYmFzZVRpbWVyIGlmIHRoZXJlIGlz
IG5vIGFjdGl2ZSBkb2N1bWVudAorICAgICAgICAgICAgcmVmZXJlbmNpbmcgdG8gdGhpcyBzdG9y
YWdlQXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFz
ZVRpbWVyRmlyZWQpOiBjbG9zZSB0aGUgdW5kZXJseWluZyBzcWxpdGUgZGF0YWJhc2UuCisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDoKKyAgICAgICAgKFN0b3JhZ2VBcmVhSW1w
bCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzeW5jKTogaWYgbV9zeW5jQ2xvc2VEYXRhYmFzZSBmbGFn
IGlzIHNldCBhbmQgdGhlIGRhdGFiYXNlIGlzIG5vdCBvcGVuZWQsIGJhaWwgb3V0LgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIpOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFj
a2VyOjpzdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVRyYWNrZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6ICBzZXQgdGhlIHRp
bWVvdXQgdmFsdWUgdGhhdCB3ZSB3aWxsIHdhaXQgYmVmb3JlIGNsb3NpbmcgdGhlCisgICAgICAg
ICAgICBkYXRhYmFzZS4gIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgYnkgRHVtcFJlbmRlclRyZWUg
b25seS4KKyAgICAgICAgKFN0b3JhZ2VUcmFja2VyKToKKwogMjAxMi0wNy0wOSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNaWNyb2RhdGEgdGVzdHMgYXJlIGZs
YWt5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAJKHJldmlzaW9uIDEyMjE2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDEwICs0NiwxNCBAQCBTdG9yYWdlOjpTdG9yYWdlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0
CiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwogICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhKTsKKyAg
ICBpZiAobV9zdG9yYWdlQXJlYSkKKyAgICAgICAgbV9zdG9yYWdlQXJlYS0+aW5jcmVtZW50QWNj
ZXNzQ291bnQoKTsKIH0KIAogU3RvcmFnZTo6flN0b3JhZ2UoKQogeworICAgIGlmIChtX3N0b3Jh
Z2VBcmVhKQorICAgICAgICBtX3N0b3JhZ2VBcmVhLT5kZWNyZW1lbnRBY2Nlc3NDb3VudCgpOwog
fQogCiB1bnNpZ25lZCBTdG9yYWdlOjpsZW5ndGgoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWEuaAkocmV2aXNpb24gMTIyMTY3KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29uc3QgRnJhbWUqIHNv
dXJjZUZyYW1lKSBjb25zdCA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudEFj
Y2Vzc0NvdW50KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNyZW1lbnRBY2Nlc3NDb3Vu
dCgpIHsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDEyMjE2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsOCBAQCBpbmxpbmUgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUlt
cGwoCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQogI2VuZGlmCisg
ICAgLCBtX2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2Nsb3NlRGF0YWJhc2VUaW1lcih0aGlzLCAm
U3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKQEAgLTkzLDYg
Kzk1LDggQEAgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZQogI2lmbmRl
ZiBOREVCVUcKICAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCiAjZW5kaWYK
KyAgICAsIG1fYWNjZXNzQ291bnQoMCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKHRoaXMs
ICZTdG9yYWdlQXJlYUltcGw6OmNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOwpAQCAtMjYw
LDQgKzI2NCwzMSBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENvCiAg
ICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIH0K
IAordm9pZCBTdG9yYWdlQXJlYUltcGw6OmluY3JlbWVudEFjY2Vzc0NvdW50KCkKK3sKKyAgICBt
X2FjY2Vzc0NvdW50Kys7CisKKyAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9jbG9zZURhdGFiYXNlVGltZXIuc3RvcCgpOworfQorCit2b2lkIFN0b3Jh
Z2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNzQ291bnQoKQoreworICAgIC0tbV9hY2Nlc3NDb3Vu
dDsKKyAgICBBU1NFUlQobV9hY2Nlc3NDb3VudCA+PSAwKTsKKworICAgIGlmICghbV9hY2Nlc3ND
b3VudCkgeworICAgICAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgbV9jbG9zZURh
dGFiYXNlVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3RvcmFn
ZURhdGFiYXNlSWRsZUludGVydmFsKCkpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhSW1wbD4gKikKK3sK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsb3NlRGF0YWJhc2UoKTsK
K30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShy
ZXZpc2lvbiAxMjIxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0b3JhZ2VBcmVh
SW1wbF9oCiAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTUzLDYgKzU0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSogc291cmNlRnJh
bWUpIGNvbnN0OwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRBY2Nlc3NDb3VudCgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50QWNjZXNzQ291bnQoKTsKKwogICAgICAg
ICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gY29weSgpOwogICAgICAgICB2b2lkIGNsb3Nl
KCk7CiAKQEAgLTY5LDYgKzczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdG9y
YWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKik7CiAKICAgICAgICAgdm9pZCBibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbG9zZURhdGFiYXNlVGltZXJG
aXJlZChUaW1lcjxTdG9yYWdlQXJlYUltcGw+Kik7CiAKICAgICAgICAgU3RvcmFnZVR5cGUgbV9z
dG9yYWdlVHlwZTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3Jp
Z2luOwpAQCAtODAsNiArODUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBib29sIG1faXNTaHV0ZG93bjsKICNlbmRpZgorICAgICAgICB1bnNpZ25lZCBt
X2FjY2Vzc0NvdW50OworICAgICAgICBUaW1lcjxTdG9yYWdlQXJlYUltcGw+IG1fY2xvc2VEYXRh
YmFzZVRpbWVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDEyMjE2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgyLDEwICszODIsMTYgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9v
bCBjbGVhckl0ZQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGl0
ZW1zLmlzRW1wdHkoKSAmJiAhY2xlYXJJdGVtcykKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpICYm
ICFjbGVhckl0ZW1zICYmICFtX3N5bmNDbG9zZURhdGFiYXNlKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKG1fZGF0YWJhc2VPcGVuRmFpbGVkKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkgJiYgbV9zeW5jQ2xvc2VEYXRhYmFzZSkgeworICAgICAgICBt
X3N5bmNDbG9zZURhdGFiYXNlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIG9wZW5EYXRhYmFzZShDcmVhdGVJ
Zk5vbkV4aXN0ZW50KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTIyMTY3KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFN0b3Jh
Z2VUcmFja2VyKiBzdG9yYWdlVHJhY2tlciA9IDA7CiAKKy8vIElmIHRoZXJlIGlzIG5vIGRvY3Vt
ZW50IHJlZmVyZW5jaW5nIGEgc3RvcmFnZSBkYXRhYmFzZSwgY2xvc2UgdGhlIHVuZGVybHlpbmcg
ZGF0YWJhc2UKKy8vIGFmdGVyIGl0IGhhcyBiZWVuIGlkbGUgZm9yIG1fU3RvcmFnZURhdGFiYXNl
SWRsZUludGVydmFsIHNlY29uZHMuCitzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRTdG9yYWdl
RGF0YWJhc2VJZGxlSW50ZXJ2YWwgPSAzMDA7CisgICAgCiB2b2lkIFN0b3JhZ2VUcmFja2VyOjpp
bml0aWFsaXplVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTdG9yYWdlVHJhY2tl
ckNsaWVudCogY2xpZW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC05MSw2
ICs5NSw3IEBAIFN0b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcihjb25zdCBTdHIKICAgICAs
IG1faXNBY3RpdmUoZmFsc2UpCiAgICAgLCBtX25lZWRzSW5pdGlhbGl6YXRpb24oZmFsc2UpCiAg
ICAgLCBtX2ZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnMoZmFsc2UpCisgICAgLCBt
X1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChEZWZhdWx0U3RvcmFnZURhdGFiYXNlSWRsZUlu
dGVydmFsKQogewogfQogCkBAIC02MjcsNSArNjMyLDUgQEAgbG9uZyBsb25nIFN0b3JhZ2VUcmFj
a2VyOjpkaXNrVXNhZ2VGb3JPcgogCiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERh
dGFiYXNlRmlsZVNpemUocGF0aCk7CiB9Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmgJKHJldmlzaW9uIDEy
MjE2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN5bmNMb2NhbFN0
b3JhZ2UoKTsKIAorICAgIGRvdWJsZSBzdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoKSB7IHJl
dHVybiBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDsgfQorICAgIHZvaWQgc2V0U3RvcmFn
ZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkgeyBtX1N0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbCA9IGludGVydmFsOyB9CisKIHByaXZhdGU6CiAgICAgU3RvcmFnZVRyYWNr
ZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCk7CiAgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVU
YXNrKHZvaWQqKTsKQEAgLTExOCw2ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Fj
dGl2ZTsKICAgICBib29sIG1fbmVlZHNJbml0aWFsaXphdGlvbjsKICAgICBib29sIG1fZmluaXNo
ZWRJbXBvcnRpbmdPcmlnaW5JZGVudGlmaWVyczsKKyAgICBkb3VibGUgbV9TdG9yYWdlRGF0YWJh
c2VJZGxlSW50ZXJ2YWw7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMTY3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDctMDkgIFlvbmdq
dW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KKworICAgICAgICBDb25zaWRlciBj
bG9zaW5nIHVudXNlZCBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgYWZ0ZXIgYSB0aW1lb3V0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3MTMKKworICAg
ICAgICBGb3IgYSBsb2NhbFN0b3JhZ2UsIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSBkb2N1bWVudCBy
ZWZlcmVuY2luZyB0byBpdCBmb3IgY2VydGFpbiBhbW91bnQgb2YgdGltZSAoMzAwIHNlY29uZHMp
LAorICAgICAgICB3ZSBjYW4gY2xvc2UgdGhlIHVuZGVybHlpbmcgc3FsaXRlIGRhdGFiYXNlLgor
CisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICAqIFN0b3JhZ2Uv
V2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICgrW1dlYlN0b3JhZ2VNYW5hZ2VyIHNldFN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDpdKTogYWRkIGEgbmV3IG1ldGhvZCBmb3IgRHVtcFJl
bmRlclRyZWUgdG8gc2V0IHRoZSB0aW1lb3V0CisgICAgICAgICAgICB0aGF0IHdlIHdpbGwgd2Fp
dCBiZWZvcmUgY2xvc2luZyBkYXRhYmFzZS4KKyAgICAgICAgKGluaXRpYWxpemVMb2NhbFN0b3Jh
Z2VQYXRoKToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oOgor
CiAyMDEyLTA3LTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIyMTA3LgpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAx
MjIxNjcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5NywxMiBAQCArIChOU1N0cmluZyAqKV9zdG9yYWdl
RGlyZWN0b3J5UGF0aAogICAgIHJldHVybiBzTG9jYWxTdG9yYWdlUGF0aDsKIH0KIAotc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUxvY2FsU3RvcmFnZVBhdGgoKSAKKysgKHZvaWQpc2V0U3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsOihkb3VibGUpaW50ZXJ2YWwKK3sKKyAgICBTdG9yYWdlVHJhY2tl
cjo6dHJhY2tlcigpLnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7Cit9
CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVMb2NhbFN0b3JhZ2VQYXRoKCkKIHsKICAgICBOU1Vz
ZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdOwogICAgIHNMb2NhbFN0b3JhZ2VQYXRoID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpXZWJT
dG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oCShyZXZpc2lvbiAxMjIx
NjcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2IEBAIEBpbnRlcmZhY2UgV2ViU3RvcmFn
ZU1hbmFnZXIgOiBOU09iamVjdAogLSAodm9pZClzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRh
YmFzZTsKIAogKyAoTlNTdHJpbmcgKilfc3RvcmFnZURpcmVjdG9yeVBhdGg7Ci0KKysgKHZvaWQp
c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOihkb3VibGUpaW50ZXJ2YWw7CiBAZW5kCiAK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEyMjE2NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI4IEBACisyMDEyLTA3LTA5ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgY2xvc2luZyB1bnVzZWQgbG9jYWxTdG9yYWdlIGRh
dGFiYXNlIGFmdGVyIGEgdGltZW91dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkwNzEzCisKKyAgICAgICAgRm9yIGEgbG9jYWxTdG9yYWdlLCBpZiB0
aGVyZSBpcyBubyBhY3RpdmUgZG9jdW1lbnQgcmVmZXJlbmNpbmcgdG8gaXQgZm9yIGNlcnRhaW4g
YW1vdW50IG9mIHRpbWUgKDMwMCBzZWNvbmRzKSwKKyAgICAgICAgd2UgY2FuIGNsb3NlIHRoZSB1
bmRlcmx5aW5nIHNxbGl0ZSBkYXRhYmFzZS4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBF
aWRzb24uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHA6IGFkZCBhIEpTIG1ldGhvZCBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwgdG8gdGVz
dFJ1bm5lcgorICAgICAgICAgICAgdG8gc2V0IGEgZGlmZmVyZW50IHRpbWVvdXQgdmFsdWUgZm9y
IGNsb3NpbmcgbG9jYWxTdG9yYWdlIGRhdGFiYXNlLgorICAgICAgICAoc2V0U3RvcmFnZURhdGFi
YXNlSWRsZUludGVydmFsQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6IGFk
ZCBlbXB0eSBtZXRob2QuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpOiBkaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKTogZGl0dG8uCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwp
OiBkaXR0by4KKwogMjAxMi0wNy0wOSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZW5hbWUgV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlciB0byBXZWJD
b3JlOjpNdXRhdGlvbk9ic2VydmVyCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjIxNjcpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMjUs
NiArMjIyNSwyMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRIYXNDdXN0b21GdWxsU2NyZWVuCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWxDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGlu
dGVydmFsID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0U3RvcmFnZURhdGFi
YXNlSWRsZUludGVydmFsKGludGVydmFsKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIHZvaWQgbGF5b3V0VGVzdENvbnRyb2xsZXJPYmpl
Y3RGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKQEAgLTI0NDUsNiArMjQ1OSw3IEBAIEpTU3RhdGljRnVu
Y3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAic2V0QmFja2luZ1NjYWxl
RmFjdG9yIiwgc2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAicHJlY2lzZVRpbWUiLCBwcmVjaXNlVGltZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
InNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciIsIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5C
ZWhhdmlvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbCIsIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMjIxNjcpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjYsNiArMzY2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yKGJvb2wgdmFsdWUpIHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1
ZTsgfQogICAgIGJvb2wgaGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1
cm4gbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7IH0KIAorICAgIHZvaWQgc2V0U3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSk7CisKIHByaXZhdGU6CiAgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBleHBlY3RlZFBpeGVsSGFzaCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gMTIyMTY3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTI4LDMgKzkyOCw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRlbGl2ZXJXZWJJbnQKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmRl
bGl2ZXJXZWJJbnRlbnQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIGFjdGlvbiwgdHlwZSwgZGF0YSk7
CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJ
bnRlcnZhbChkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cAkocmV2aXNpb24gMTIyMTY3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRl
c3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMCwzICsxMDEwLDggQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludAogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMjIxNjcpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTIwMSw2ICsyMDEsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxs
TG9jYQogICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRl
bGV0ZUFsbE9yaWdpbnNdOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIFtXZWJTdG9y
YWdlTWFuYWdlciBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6aW50ZXJ2YWxdOworfQor
CiBKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhj
b250ZXh0LCBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmln
aW5zXSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xs
ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDEyMjE2NykKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODMsMyArMTQ4Myw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJ
bnQKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMTY3
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTItMDctMDkgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4K
KworICAgICAgICBDb25zaWRlciBjbG9zaW5nIHVudXNlZCBsb2NhbFN0b3JhZ2UgZGF0YWJhc2Ug
YWZ0ZXIgYSB0aW1lb3V0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA3MTMKKworICAgICAgICBGb3IgYSBsb2NhbFN0b3JhZ2UsIGlmIHRoZXJlIGlz
IG5vIGFjdGl2ZSBkb2N1bWVudCByZWZlcmVuY2luZyB0byBpdCBmb3IgY2VydGFpbiBhbW91bnQg
b2YgdGltZSAoMzAwIHNlY29uZHMpLAorICAgICAgICB3ZSBjYW4gY2xvc2UgdGhlIHVuZGVybHlp
bmcgc3FsaXRlIGRhdGFiYXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6IHRoZSB0ZXN0
IG5lZWRzIHNldENhY2hlTW9kZWwgaW1wbGVtZW50YXRpb24sIHNraXAgaXQgaW4gY2hyb21pdW0u
CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24t
aWRsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9z
dG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3Rv
cmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTA3LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgREZHIG1heSBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgZml4IHBvaW50IGlmIGl0IGNv
bnN0YW50IGZvbGRzIGEgbWlzcHJlZGljdGVkIG5vZGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTIyMTY3KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBj
b3B5KQpAQCAtNzM0LDkgKzczNCwxMCBAQCBXT05URklYIFNLSVAgOiBodHRwL3Rlc3RzL2dsb2Jh
bGhpc3RvcnkgCiAvLyBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgZGlzY3Vzc2lvbnMgYXQgaXNzdWUg
MjA1NzAuCiBXT05URklYIFNLSVAgOiBmYXN0L2Zvcm1zL2dldC1mb3Jtcy10by1hYm91dC1ibGFu
ay5odG1sID0gUEFTUwogCi0vLyBUaGlzIHRlc3QgcmVxdWlyZXMgTGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0Q2FjaGVNb2RlbCwgd2hpY2ggd2UgZG9uJ3QKKy8vIFRoZXNlIHRlc3RzIHJlcXVpcmVz
IExheW91dFRlc3RDb250cm9sbGVyLnNldENhY2hlTW9kZWwsIHdoaWNoIHdlIGRvbid0CiAvLyBp
bXBsZW1lbnQgYmVjYXVzZSB3ZSBjYW4ndCBlbXVsYXRlIHRoZSBjYWNoaW5nIGJlaGF2aW9ycyBp
dCBleHBlY3RzLgogV09OVEZJWCBTS0lQIDogZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvbmVz
dGVkLWV4ZWN1dGlvbi5odG1sID0gUEFTUworV09OVEZJWCBTS0lQIDogc3RvcmFnZS9kb21zdG9y
YWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sID0gUEFTUwogCiAvLyBEZWxl
dGlvbiBVSSBpcyBhIE1haWwtaXNtLiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMu
CiBXT05URklYIFNLSVAgOiBlZGl0aW5nL2RlbGV0aW5nL2RlbGV0aW9uVUktc2luZ2xlLWluc3Rh
bmNlLmh0bWwgPSBQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc3Rv
cmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1pZGxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc3RvcmFnZS1jbG9zZS1kYXRhYmFzZS1vbi1p
ZGxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1BBU1MKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9kb21zdG9yYWdlL3N0b3JhZ2UtY2xvc2UtZGF0YWJhc2Utb24taWRsZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3Nl
LWRhdGFiYXNlLW9uLWlkbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFiYXNlLW9uLWlkbGUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7
Cit9CisKK2Z1bmN0aW9uIGxvYWROZXh0UGFnZSgpCit7CisgICAgbG9jYXRpb24uaHJlZiA9ICIu
Li9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0bWwiOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoMCk7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0Q2FjaGVNb2RlbCgwKTsgLy8gV2ViQ2FjaGVNb2RlbERvY3VtZW50
Vmlld2VyLgorICAgIH0KKworICAgIC8vIFRlc3QgdG8gbWFrZSBzdXJlIHRoZSBzdG9yYWdlIHZh
bHVlcyBkb24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIGRhdGFiYXNlIGlzIGNsb3NlZC4KKyAgICBpZiAo
ImxvY2FsU3RvcmFnZSIgaW4gd2luZG93KSB7CisgICAgICAgIHZhciBsb2FkQ291bnQgPSB3aW5k
b3cuc2Vzc2lvblN0b3JhZ2VbJ2xvYWRDb3VudCddOworICAgICAgICBpZiAobG9hZENvdW50ICE9
PSB1bmRlZmluZWQpCisgICAgICAgICAgICBsb2FkQ291bnQrKzsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbG9hZENvdW50ID0gMTsKKworICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Vb
J2xvYWRDb3VudCddID0gbG9hZENvdW50OworCisgICAgICAgIGlmIChsb2FkQ291bnQgPT0gMSAp
IHsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgICAg
IHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2ZvbyddID0gJ0ZPTyc7CisgICAgICAgICAgICB3aW5kb3cu
bG9jYWxTdG9yYWdlWydiYXInXSA9ICdCQVInOworCisgICAgICAgICAgICBzZXRUaW1lb3V0KCJs
b2FkTmV4dFBhZ2UoKSIsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGVz
dCBpZiB3ZSBzdGlsbCBoYXZlIHRoZSByaWdodCB2YWx1ZXMuCisgICAgICAgICAgICBsb2cod2lu
ZG93LmxvY2FsU3RvcmFnZVsnZm9vJ10gPT09ICdGT08nID8gJ1BBU1MnIDogJ0ZBSUwnKTsKKyAg
ICAgICAgICAgIGxvZyh3aW5kb3cubG9jYWxTdG9yYWdlWydiYXInXSA9PT0gJ0JBUicgPyAnUEFT
UycgOiAnRkFJTCcpOworCisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAg
ICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgz
MDApOworICAgICAgICAgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0ibG9nZ2VyIj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFn
ZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9yZXNvdXJjZXMvc3RvcmFnZS1jbG9zZS1kYXRhLW9uLWlkbGUtc3dpdGNoLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9zdG9yYWdl
LWNsb3NlLWRhdGEtb24taWRsZS1zd2l0Y2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MCBAQAorPGh0bWw+Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHN3aW5nQmFjaygpIAorICAgIHsK
KyAgICAgICAgbG9jYXRpb24uaHJlZj0nLi4vZG9tc3RvcmFnZS9zdG9yYWdlLWNsb3NlLWRhdGFi
YXNlLW9uLWlkbGUuaHRtbCc7CisgICAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3NldFRp
bWVvdXQoc3dpbmdCYWNrKCksIDEwMCk7Jz4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>