<?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>147099</bug_id>
          
          <creation_ts>2015-07-19 18:23:39 -0700</creation_ts>
          <short_desc>[Content Extensions] Use a jump table when consecutive transitions have different targets</short_desc>
          <delta_ts>2015-07-21 16:46:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1110546</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-19 18:23:39 -0700</bug_when>
    <thetext>[Content Extensions] Use a jump table when consecutive transitions have different targets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110547</commentid>
    <comment_count>1</comment_count>
      <attachid>257069</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-19 18:26:45 -0700</bug_when>
    <thetext>Created attachment 257069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110681</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 11:27:14 -0700</bug_when>
    <thetext>*** Bug 142514 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110685</commentid>
    <comment_count>3</comment_count>
      <attachid>257069</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 11:31:23 -0700</bug_when>
    <thetext>Comment on attachment 257069
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecode.h:60
&gt; +    CheckValueRangeCaseInsensitive = 0x4,

I think it&apos;s strange to have a case insensitive jump table.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:213
&gt; +    jumpTable.caseSensitive = ranges[lastRange].caseSensitive;

Why is the case sensitivity of the entire table determined by the case sensitivity of the last range?  I don&apos;t think this is correct.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:353
&gt; +    ASSERT_WITH_MESSAGE(jumpTable.max &lt; 128, &quot;The DFA engine only supports the ASCII alphabet.&quot;);

This will make it harder to make this support unicode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110905</commentid>
    <comment_count>4</comment_count>
      <attachid>257069</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 23:25:02 -0700</bug_when>
    <thetext>Comment on attachment 257069
Patch

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

Looks good, but I&apos;m removing the r? because this needs rebasing and addressing a few things, mostly stylistic.  Consecutive unique destinations is a good way to determine if using branch tables is a good idea, but it could miss cases like if there are only two common destinations.  There&apos;s no perfect algorithm here.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:212
&gt; +    jumpTable.max = ranges[lastRange].min;

min? I guess they&apos;re equal, but this looks confusing.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.h:65
&gt; +    struct JumpTable {

I would add a destructor with ASSERT(min + destinations.size() == max + 1); and ASSERT(destinations.size() &gt; 1);

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:135
&gt; +    if (urlIndexIsAfterEndOfString)
&gt; +        return false;

I think this should be in DFABytecodeInterpreter::interpret to be consistent.  Then this function would return void.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:61
&gt;      void interpretAppendAction(unsigned&amp; programCounter, Actions&amp;, bool ifDomain);
&gt;      void interpretTestFlagsAndAppendAction(unsigned&amp; programCounter, uint16_t flags, Actions&amp;, bool ifDomain);
&gt; +
&gt; +    template&lt;bool caseSensitive&gt;
&gt; +    bool interpetJumpTable(const char* url, uint32_t&amp; urlIndex, uint32_t&amp; programCounter, bool&amp; urlIndexIsAfterEndOfString);

I just used an inline function with a bool parameter, I think it&apos;s probably better to use a template for all of these.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:54
&gt; -    const static uint32_t CurrentContentExtensionFileVersion = 5;
&gt; +    const static uint32_t CurrentContentExtensionFileVersion = 6;

This needs to be rebased :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110925</commentid>
    <comment_count>5</comment_count>
      <attachid>257176</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-21 02:34:24 -0700</bug_when>
    <thetext>Created attachment 257176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110968</commentid>
    <comment_count>6</comment_count>
      <attachid>257176</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-21 11:00:45 -0700</bug_when>
    <thetext>Comment on attachment 257176
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:209
&gt; +    jumpTable.caseSensitive = ranges[lastRange].caseSensitive;

I&apos;m still not convinced this is correct.  What if you have a range that is case insensitive and a range that is case sensitive?  In that case, you don&apos;t want the whole jumpTable to be case sensitive, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111079</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-21 15:20:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 257176 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257176&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:209
&gt; &gt; +    jumpTable.caseSensitive = ranges[lastRange].caseSensitive;
&gt; 
&gt; I&apos;m still not convinced this is correct.  What if you have a range that is
&gt; case insensitive and a range that is case sensitive?  In that case, you
&gt; don&apos;t want the whole jumpTable to be case sensitive, right?

Yep, indeed.


When the case sensitivity changes between two ranges, a new JumpTable is created.

This condition &quot;|| baseRange-&gt;caseSensitive != range.caseSensitive&quot; when finding ranges causes us to enter extractJumpTable() when the case-sensitivity changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111082</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-21 15:28:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/21929554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111122</commentid>
    <comment_count>9</comment_count>
      <attachid>257176</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-21 16:46:19 -0700</bug_when>
    <thetext>Comment on attachment 257176
Patch

Clearing flags on attachment: 257176

Committed r187137: &lt;http://trac.webkit.org/changeset/187137&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111123</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-21 16:46:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257069</attachid>
            <date>2015-07-19 18:26:45 -0700</date>
            <delta_ts>2015-07-21 02:34:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147099-20150719182532.patch</filename>
            <type>text/plain</type>
            <size>19987</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2OTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRkYmY4NzcxNjNjOTE2
OGI4MDUxMWZjYzY2YjYwNzNkNTA0NDRhMi4uNTJjNThlNmViZWMyMGExMzdjZjk3ODYyYjViNGYz
Y2ZjMzFiMGI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTA3LTE5ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBF
eHRlbnNpb25zXSBVc2UgYSBqdW1wIHRhYmxlIHdoZW4gY29uc2VjdXRpdmUgdHJhbnNpdGlvbnMg
aGF2ZSBkaWZmZXJlbnQgdGFyZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2hlbiBoYW5kbGluZyBjb25zZWN1dGl2ZSBzaW5nbGUgdHJhbnNpdGlv
bnMsIG1lcmdlIHRoZW0gaW50bworICAgICAgICBhIGp1bXAgdGFibGUgaW5zdGVhZCBvZiBjcmVh
dGluZyBtYW55IGluZGl2aWR1YWwgQ2hlY2tWYWx1ZS4KKworICAgICAgICBGcm9tIGxvY2FsIHRl
c3Rpbmcgb24geDg2XzY0LCBpdCByZWR1Y2VzIHRoZSBieXRlY29kZSBzaXplIGJ5IGFib3V0IDUl
CisgICAgICAgIGFuZCBpbXByb3ZlIHRoZSBydW50aW1lIGJ5IGFib3V0IDEwJS4KKworICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZXh0cmFjdEp1
bXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6dHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNoZWNrRm9ySnVtcFRhYmxlTWF4Qnl0ZWNvZGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjpjb21waWxlSnVtcFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29t
cGlsZXI6OmNvbXBpbGVOb2RlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OnJhbmdlcyk6IERlbGV0ZWQuCisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVy
cGV0SnVtcFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaDoKKwogMjAxNS0wNy0xOCAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxODY5NzYpOiBV
c2UgcGlGbG9hdCBpbnN0ZWFkIG9mIE1fUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMDI1ODY3Mzg0ZDQ2NmNk
NTNiMDczYTRmZjVjMzQ5Zjk0NTM1ODQwLi44MDkxY2VlNzE3YzA4ODA3ZjI3MWU3MDFkN2M4Yjli
YzkyN2NkZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDctMTkgIEJlbmph
bWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4
dGVuc2lvbnNdIFVzZSBhIGp1bXAgdGFibGUgd2hlbiBjb25zZWN1dGl2ZSB0cmFuc2l0aW9ucyBo
YXZlIGRpZmZlcmVudCB0YXJnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDcwOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oOgorCiAyMDE1LTA3LTE3ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaU9TXSBGdXJ0aGVyIHRpZ2h0ZW4gdGhlIHNhbmRib3ggYXJvdW5kIHBhZ2VzIGZldGNo
ZWQgd2l0aCBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAppbmRleCBhNDRlOTNkMWRhMmNhOTE4
ODM2OTUxMzJjMmEwZGQ1YjJlNmY5MzdhLi5kYmIxZDQ5NDNiZjlmMGYzMjc5NTY3ZTI2ODFlOGM3
ODRjNjIwN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlLmgKQEAgLTQ1LDMxICs0NSwzOSBAQCBlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24gOiB1aW50OF90IHsKICAgICBDaGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlID0gMHgwLAog
ICAgIENoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlID0gMHgxLAogCisgICAgLy8gSnVtcCB0YWJsZSBp
ZiB0aGUgaW5wdXQgdmFsdWUgaXMgd2l0aGluIGEgY2VydGFpbiByYW5nZS4KKyAgICAvLyBUaGUg
bG93ZXIgdmFsdWUgKDEgYnl0ZSkuCisgICAgLy8gVGhlIGhpZ2hlciB2YWx1ZSAoMSBieXRlKS4K
KyAgICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdl
CisgICAgLy8gZm9yIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UgKDEtNCBieXRlcywgc2ln
bmVkKS4KKyAgICBKdW1wVGFibGVDYXNlSW5zZW5zaXRpdmUgPSAweDIsCisgICAgSnVtcFRhYmxl
Q2FzZVNlbnNpdGl2ZSA9IDB4MywKKwogICAgIC8vIEp1bXAgdG8gYW4gb2Zmc2V0IGlmIHRoZSBp
bnB1dCB2YWx1ZSBpcyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlLgogICAgIC8vIFRoZSBsb3dlciB2
YWx1ZSAoMSBieXRlKS4KICAgICAvLyBUaGUgaGlnaGVyIHZhbHVlICgxIGJ5dGUpLgogICAgIC8v
IFRoZSBkaXN0YW5jZSB0byBqdW1wIGlmIHRoZSB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgKDEtNCBi
eXRlcywgc2lnbmVkKS4KLSAgICBDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5zaXRpdmUgPSAweDIs
Ci0gICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZVNlbnNpdGl2ZSA9IDB4MywKKyAgICBDaGVja1ZhbHVl
UmFuZ2VDYXNlSW5zZW5zaXRpdmUgPSAweDQsCisgICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZVNlbnNp
dGl2ZSA9IDB4NSwKIAogICAgIC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgogICAg
IC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KLSAgICBBcHBlbmRBY3Rpb24gPSAw
eDQsCi0gICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQgPSAweDUsCi0gICAgQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluID0gMHg2LAorICAgIEFwcGVuZEFjdGlvbiA9IDB4NiwKKyAgICBB
cHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCA9IDB4NywKKyAgICBBcHBlbmRBY3Rpb25XaXRo
SWZEb21haW4gPSAweDgsCiAgICAgCiAgICAgLy8gVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uIGhh
cyB0d28gYXJndW1lbnRzOgogICAgIC8vIFRoZSBmbGFncyB0byBjaGVjayBiZWZvcmUgYXBwZW5k
aW5nICgyIGJ5dGVzKS4KICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCi0g
ICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg3LAotICAgIFRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4OCwKKyAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24g
PSAweDksCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHhBLAog
CiAgICAgLy8gVGVybWluYXRlIGhhcyBubyBhcmd1bWVudHMuCi0gICAgVGVybWluYXRlID0gMHg5
LAorICAgIFRlcm1pbmF0ZSA9IDB4QiwKIAogICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVudDoK
ICAgICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCAoMS00IGJ5dGVzLCBzaWduZWQpLgotICAgIEp1
bXAgPSAweEEsCisgICAgSnVtcCA9IDB4QywKIH07CiAKIC8vIFRoZSBsYXN0IGZvdXIgYml0cyBj
b250YWluIHRoZSBpbnN0cnVjdGlvbiB0eXBlLgpAQCAtMTA1LDYgKzExMyw4IEBAIHN0YXRpYyBp
bmxpbmUgc2l6ZV90IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbiBpbnN0cnVjCiAgICAgc3dpdGNoIChpbnN0cnVjdGlvbikgewogICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VTZW5zaXRpdmU6CiAgICAgY2FzZSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZUluc2Vuc2l0aXZlOgorICAgIGNh
c2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcFRhYmxlQ2FzZUluc2Vuc2l0aXZlOgorICAg
IGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcFRhYmxlQ2FzZVNlbnNpdGl2ZToKICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRp
dmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNl
SW5zZW5zaXRpdmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAppbmRleCA3ODRiNGUzYWY5MTdiZWU4NTczNjk2YzgxMDg2MTY4NDQ2ODQ5OGM5
Li4zZjAyNTI4MzBiZGEyODA4MWIzYWZiZTNiYjk3MjlmNzczOTZkNTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcApAQCAtMjAyLDI3ICsyMDIsNTYgQEAgdW5zaWduZWQgREZBQnl0ZWNvZGVDb21waWxlcjo6
Y29tcGlsZWROb2RlTWF4Qnl0ZWNvZGVTaXplKHVpbnQzMl90IGluZGV4KQogICAgIHJldHVybiBz
aXplOwogfQogCi1WZWN0b3I8REZBQnl0ZWNvZGVDb21waWxlcjo6UmFuZ2U+IERGQUJ5dGVjb2Rl
Q29tcGlsZXI6OnJhbmdlcyhjb25zdCBERkFOb2RlJiBub2RlKQorREZBQnl0ZWNvZGVDb21waWxl
cjo6SnVtcFRhYmxlIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmV4dHJhY3RKdW1wVGFibGUoVmVjdG9y
PERGQUJ5dGVjb2RlQ29tcGlsZXI6OlJhbmdlPiYgcmFuZ2VzLCB1bnNpZ25lZCBmaXJzdFJhbmdl
LCB1bnNpZ25lZCBsYXN0UmFuZ2UpCiB7CisgICAgQVNTRVJUKGxhc3RSYW5nZSA+IGZpcnN0UmFu
Z2UpOworICAgIEFTU0VSVChsYXN0UmFuZ2UgPCByYW5nZXMuc2l6ZSgpKTsKKworICAgIEp1bXBU
YWJsZSBqdW1wVGFibGU7CisgICAganVtcFRhYmxlLm1pbiA9IHJhbmdlc1tmaXJzdFJhbmdlXS5t
aW47CisgICAganVtcFRhYmxlLm1heCA9IHJhbmdlc1tsYXN0UmFuZ2VdLm1pbjsKKyAgICBqdW1w
VGFibGUuY2FzZVNlbnNpdGl2ZSA9IHJhbmdlc1tsYXN0UmFuZ2VdLmNhc2VTZW5zaXRpdmU7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gbGFzdFJhbmdlIC0gZmlyc3RSYW5nZSArIDE7CisgICAganVt
cFRhYmxlLmRlc3RpbmF0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IGZpcnN0UmFuZ2U7IGkgPD0gbGFzdFJhbmdlOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgUmFuZ2UmIHJhbmdlID0gcmFuZ2VzW2ldOworCisgICAgICAgIEFTU0VSVChyYW5n
ZS5jYXNlU2Vuc2l0aXZlID09IGp1bXBUYWJsZS5jYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgQVNT
RVJUKHJhbmdlLm1pbiA9PSByYW5nZS5tYXgpOworICAgICAgICBBU1NFUlQocmFuZ2UubWluID49
IGp1bXBUYWJsZS5taW4pOworICAgICAgICBBU1NFUlQocmFuZ2UubWluIDw9IGp1bXBUYWJsZS5t
YXgpOworCisgICAgICAgIGp1bXBUYWJsZS5kZXN0aW5hdGlvbnMuYXBwZW5kKHJhbmdlLmRlc3Rp
bmF0aW9uKTsKKyAgICB9CisKKyAgICByYW5nZXMucmVtb3ZlKGZpcnN0UmFuZ2UsIHNpemUpOwor
CisgICAgcmV0dXJuIGp1bXBUYWJsZTsKK30KKworREZBQnl0ZWNvZGVDb21waWxlcjo6VHJhbnNp
dGlvbnMgREZBQnl0ZWNvZGVDb21waWxlcjo6dHJhbnNpdGlvbnMoY29uc3QgREZBTm9kZSYgbm9k
ZSkKK3sKKyAgICBUcmFuc2l0aW9ucyB0cmFuc2l0aW9uczsKKwogICAgIHVpbnQzMl90IGRlc3Rp
bmF0aW9uc1sxMjhdOwogICAgIG1lbXNldChkZXN0aW5hdGlvbnMsIDB4ZmYsIHNpemVvZihkZXN0
aW5hdGlvbnMpKTsKICAgICBjb25zdCB1aW50MzJfdCBub0Rlc3RpbmF0aW9uID0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgYm9vbCBjYW5Vc2VGYWxsYmFja1Ry
YW5zaXRpb24gPSBub2RlLmNhblVzZUZhbGxiYWNrVHJhbnNpdGlvbihtX2RmYSk7Ci0gICAgdWlu
dDMyX3QgZmFsbGJhY2tUcmFuc2l0aW9uVGFyZ2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpOwotICAgIGlmIChjYW5Vc2VGYWxsYmFja1RyYW5zaXRpb24pCi0gICAgICAg
IGZhbGxiYWNrVHJhbnNpdGlvblRhcmdldCA9IG5vZGUuYmVzdEZhbGxiYWNrVGFyZ2V0KG1fZGZh
KTsKKyAgICB0cmFuc2l0aW9ucy51c2VGYWxsYmFja1RyYW5zaXRpb24gPSBub2RlLmNhblVzZUZh
bGxiYWNrVHJhbnNpdGlvbihtX2RmYSk7CisgICAgaWYgKHRyYW5zaXRpb25zLnVzZUZhbGxiYWNr
VHJhbnNpdGlvbikKKyAgICAgICAgdHJhbnNpdGlvbnMuZmFsbGJhY2tUcmFuc2l0aW9uVGFyZ2V0
ID0gbm9kZS5iZXN0RmFsbGJhY2tUYXJnZXQobV9kZmEpOwogCiAgICAgZm9yIChjb25zdCBhdXRv
JiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucyhtX2RmYSkpIHsKICAgICAgICAgdWludDMy
X3QgdGFyZ2V0Tm9kZUluZGV4ID0gdHJhbnNpdGlvbi50YXJnZXQoKTsKLSAgICAgICAgaWYgKGNh
blVzZUZhbGxiYWNrVHJhbnNpdGlvbiAmJiBmYWxsYmFja1RyYW5zaXRpb25UYXJnZXQgPT0gdGFy
Z2V0Tm9kZUluZGV4KQorICAgICAgICBpZiAodHJhbnNpdGlvbnMudXNlRmFsbGJhY2tUcmFuc2l0
aW9uICYmIHRyYW5zaXRpb25zLmZhbGxiYWNrVHJhbnNpdGlvblRhcmdldCA9PSB0YXJnZXROb2Rl
SW5kZXgpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBmb3IgKHVpbnQxNl90IGkg
PSB0cmFuc2l0aW9uLnJhbmdlKCkuZmlyc3Q7IGkgPD0gdHJhbnNpdGlvbi5yYW5nZSgpLmxhc3Q7
ICsraSkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uc1tpXSA9IHRhcmdldE5vZGVJbmRleDsKICAg
ICB9CiAKLSAgICBWZWN0b3I8UmFuZ2U+IHJhbmdlczsKKyAgICBWZWN0b3I8UmFuZ2U+JiByYW5n
ZXMgPSB0cmFuc2l0aW9ucy5yYW5nZXM7CiAgICAgdWludDhfdCByYW5nZU1pbjsKICAgICBib29s
IGhhc1JhbmdlTWluID0gZmFsc2U7CiAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgMTI4OyBp
KyspIHsKQEAgLTI3Miw3ICszMDEsNDMgQEAgVmVjdG9yPERGQUJ5dGVjb2RlQ29tcGlsZXI6OlJh
bmdlPiBERkFCeXRlY29kZUNvbXBpbGVyOjpyYW5nZXMoY29uc3QgREZBTm9kZSYgbm8KICAgICAg
ICAgcmFuZ2VzLmFwcGVuZChSYW5nZShyYW5nZU1pbiwgMTI3LCBkZXN0aW5hdGlvbnNbcmFuZ2VN
aW5dLCB0cnVlKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJhbmdlczsKKyAgICBWZWN0b3I8SnVt
cFRhYmxlPiYganVtcFRhYmxlcyA9IHRyYW5zaXRpb25zLmp1bXBUYWJsZXM7CisgICAgdW5zaWdu
ZWQgcmFuZ2VQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgYmFzZVJhbmdlUG9zaXRpb24gPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgUmFuZ2UqIGJhc2VSYW5n
ZSA9IG51bGxwdHI7CisgICAgd2hpbGUgKHJhbmdlUG9zaXRpb24gPCByYW5nZXMuc2l6ZSgpKSB7
CisgICAgICAgIGF1dG8mIHJhbmdlID0gcmFuZ2VzW3JhbmdlUG9zaXRpb25dOworICAgICAgICBp
ZiAoYmFzZVJhbmdlKSB7CisgICAgICAgICAgICBpZiAocmFuZ2UubWluICE9IHJhbmdlLm1heAor
ICAgICAgICAgICAgICAgIHx8IGJhc2VSYW5nZS0+Y2FzZVNlbnNpdGl2ZSAhPSByYW5nZS5jYXNl
U2Vuc2l0aXZlCisgICAgICAgICAgICAgICAgfHwgcmFuZ2VzW3JhbmdlUG9zaXRpb24gLSAxXS5t
YXggKyAxICE9IHJhbmdlLm1pbikgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZVBvc2l0aW9u
IC0gYmFzZVJhbmdlUG9zaXRpb24gPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJs
ZXMuYXBwZW5kKGV4dHJhY3RKdW1wVGFibGUocmFuZ2VzLCBiYXNlUmFuZ2VQb3NpdGlvbiwgcmFu
Z2VQb3NpdGlvbiAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VQb3NpdGlvbiA9IGJh
c2VSYW5nZVBvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiYXNl
UmFuZ2VQb3NpdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAg
ICAgICAgICAgICAgICBiYXNlUmFuZ2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHJhbmdlLm1pbiA9PSByYW5nZS5tYXgpIHsKKyAg
ICAgICAgICAgICAgICBiYXNlUmFuZ2VQb3NpdGlvbiA9IHJhbmdlUG9zaXRpb247CisgICAgICAg
ICAgICAgICAgYmFzZVJhbmdlID0gJnJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICsrcmFuZ2VQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoYmFzZVJhbmdlICYmIHJh
bmdlcy5zaXplKCkgLSBiYXNlUmFuZ2VQb3NpdGlvbiA+IDEpCisgICAgICAgIGp1bXBUYWJsZXMu
YXBwZW5kKGV4dHJhY3RKdW1wVGFibGUocmFuZ2VzLCBiYXNlUmFuZ2VQb3NpdGlvbiwgcmFuZ2Vz
LnNpemUoKSAtIDEpKTsKKworICAgIHJldHVybiB0cmFuc2l0aW9uczsKK30KKwordW5zaWduZWQg
REZBQnl0ZWNvZGVDb21waWxlcjo6Y2hlY2tGb3JKdW1wVGFibGVNYXhCeXRlY29kZVNpemUoY29u
c3QgSnVtcFRhYmxlJiBqdW1wVGFibGUpCit7CisgICAgdW5zaWduZWQgYmFzZWxpbmVTaXplID0g
c2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5nZUNhc2VJbnNlbnNp
dGl2ZSkgKyAyICogc2l6ZW9mKHVpbnQ4X3QpOworICAgIHVuc2lnbmVkIHRhcmdldHNTaXplID0g
KGp1bXBUYWJsZS5tYXggLSBqdW1wVGFibGUubWluICsgMSkgKiBzaXplb2YodWludDMyX3QpOwor
ICAgIHJldHVybiBiYXNlbGluZVNpemUgKyB0YXJnZXRzU2l6ZTsKIH0KICAgICAKIHVuc2lnbmVk
IERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNoZWNrRm9yUmFuZ2VNYXhCeXRlY29kZVNpemUoY29uc3Qg
UmFuZ2UmIHJhbmdlKQpAQCAtMjgyLDYgKzM0NywzNSBAQCB1bnNpZ25lZCBERkFCeXRlY29kZUNv
bXBpbGVyOjpjaGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKGNvbnN0IFJhbmdlJiByYW5nZSkK
ICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5n
ZUNhc2VJbnNlbnNpdGl2ZSkgKyAyICogc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQzMl90
KTsKIH0KIAordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlSnVtcFRhYmxlKHVpbnQz
Ml90IG5vZGVJbmRleCwgY29uc3QgSnVtcFRhYmxlJiBqdW1wVGFibGUpCit7CisgICAgdW5zaWdu
ZWQgc3RhcnRTaXplID0gbV9ieXRlY29kZS5zaXplKCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShqdW1wVGFibGUubWF4IDwgMTI4LCAiVGhlIERGQSBlbmdpbmUgb25seSBzdXBwb3J0cyB0aGUg
QVNDSUkgYWxwaGFiZXQuIik7CisgICAgQVNTRVJUKGp1bXBUYWJsZS5taW4gPD0ganVtcFRhYmxl
Lm1heCk7CisKKyAgICB1aW50MzJfdCBpbnN0cnVjdGlvbkxvY2F0aW9uID0gbV9ieXRlY29kZS5z
aXplKCk7CisgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1wU2l6ZSA9IEludDg7CisgICAgZm9y
ICh1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCA6IGp1bXBUYWJsZS5kZXN0aW5hdGlvbnMp
IHsKKyAgICAgICAgaW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UgPSBsb25nZXN0
UG9zc2libGVKdW1wKGluc3RydWN0aW9uTG9jYXRpb24sIG5vZGVJbmRleCwgZGVzdGluYXRpb25O
b2RlSW5kZXgpOworICAgICAgICBERkFCeXRlY29kZUp1bXBTaXplIGxvY2FsSnVtcFNpemUgPSBz
bWFsbGVzdFBvc3NpYmxlSnVtcFNpemUobG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlKTsKKyAg
ICAgICAganVtcFNpemUgPSBzdGQ6Om1heChqdW1wU2l6ZSwgbG9jYWxKdW1wU2l6ZSk7CisgICAg
fQorCisgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGp1bXBUYWJsZS5j
YXNlU2Vuc2l0aXZlID8gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcFRhYmxlQ2FzZVNlbnNp
dGl2ZSA6IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXBUYWJsZUNhc2VJbnNlbnNpdGl2ZTsK
KyAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oaW5z
dHJ1Y3Rpb24pIHwganVtcFNpemUpOworICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVjb2RlLCBq
dW1wVGFibGUubWluKTsKKyAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwganVtcFRhYmxl
Lm1heCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4IDoganVtcFRh
YmxlLmRlc3RpbmF0aW9ucykgeworICAgICAgICBpbnQzMl90IGxvbmdlc3RQb3NzaWJsZUp1bXBE
aXN0YW5jZSA9IGxvbmdlc3RQb3NzaWJsZUp1bXAoaW5zdHJ1Y3Rpb25Mb2NhdGlvbiwgbm9kZUlu
ZGV4LCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CisgICAgICAgIHVpbnQzMl90IGp1bXBMb2NhdGlv
biA9IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgICAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChMaW5r
UmVjb3JkKHtqdW1wU2l6ZSwgbG9uZ2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlLCBpbnN0cnVjdGlv
bkxvY2F0aW9uLCBqdW1wTG9jYXRpb24sIGRlc3RpbmF0aW9uTm9kZUluZGV4fSkpOworICAgICAg
ICBhcHBlbmRaZXJvZXMobV9ieXRlY29kZSwganVtcFNpemUpOworICAgIH0KKworICAgIEFTU0VS
VF9VTlVTRUQoc3RhcnRTaXplLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0U2l6ZSA8PSBjaGVj
a0Zvckp1bXBUYWJsZU1heEJ5dGVjb2RlU2l6ZShqdW1wVGFibGUpKTsKK30KKwogdm9pZCBERkFC
eXRlY29kZUNvbXBpbGVyOjpjb21waWxlQ2hlY2tGb3JSYW5nZSh1aW50MzJfdCBub2RlSW5kZXgs
IGNvbnN0IFJhbmdlJiByYW5nZSkKIHsKICAgICB1bnNpZ25lZCBzdGFydFNpemUgPSBtX2J5dGVj
b2RlLnNpemUoKTsKQEAgLTI5OSw5ICszOTMsMTIgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVy
Ojpjb21waWxlQ2hlY2tGb3JSYW5nZSh1aW50MzJfdCBub2RlSW5kZXgsIGNvbnN0IFJhbmdlJgog
dW5zaWduZWQgREZBQnl0ZWNvZGVDb21waWxlcjo6bm9kZVRyYW5zaXRpb25zTWF4Qnl0ZWNvZGVT
aXplKGNvbnN0IERGQU5vZGUmIG5vZGUpCiB7CiAgICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcyhub2RlKSkKKyAgICBUcmFuc2l0aW9ucyBu
b2RlVHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucyhub2RlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGp1bXBUYWJsZSA6IG5vZGVUcmFuc2l0aW9ucy5qdW1wVGFibGVzKQorICAgICAgICBzaXplICs9
IGNoZWNrRm9ySnVtcFRhYmxlTWF4Qnl0ZWNvZGVTaXplKGp1bXBUYWJsZSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiByYW5nZSA6IG5vZGVUcmFuc2l0aW9ucy5yYW5nZXMpCiAgICAgICAgIHNpemUg
Kz0gY2hlY2tGb3JSYW5nZU1heEJ5dGVjb2RlU2l6ZShyYW5nZSk7Ci0gICAgaWYgKG5vZGUuY2Fu
VXNlRmFsbGJhY2tUcmFuc2l0aW9uKG1fZGZhKSkKKyAgICBpZiAobm9kZVRyYW5zaXRpb25zLnVz
ZUZhbGxiYWNrVHJhbnNpdGlvbikKICAgICAgICAgc2l6ZSArPSBzaXplb2YoREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6SnVtcCkgKyBzaXplb2YodWludDMyX3QpOwogICAgIGVsc2UKICAgICAgICAg
c2l6ZSArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OlRlcm1pbmF0ZSk7CkBAIC0zMTIsMTEgKzQwOSwxNCBAQCB2b2lkIERGQUJ5dGVjb2RlQ29t
cGlsZXI6OmNvbXBpbGVOb2RlVHJhbnNpdGlvbnModWludDMyX3Qgbm9kZUluZGV4KQogewogICAg
IGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2Rlc1tub2RlSW5kZXhdOwogICAgIHVuc2ln
bmVkIHN0YXJ0U2l6ZSA9IG1fYnl0ZWNvZGUuc2l6ZSgpOwotICAgIAotICAgIGZvciAoY29uc3Qg
YXV0byYgcmFuZ2UgOiByYW5nZXMobm9kZSkpCisKKyAgICBUcmFuc2l0aW9ucyBub2RlVHJhbnNp
dGlvbnMgPSB0cmFuc2l0aW9ucyhub2RlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGp1bXBUYWJs
ZSA6IG5vZGVUcmFuc2l0aW9ucy5qdW1wVGFibGVzKQorICAgICAgICBjb21waWxlSnVtcFRhYmxl
KG5vZGVJbmRleCwganVtcFRhYmxlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogbm9k
ZVRyYW5zaXRpb25zLnJhbmdlcykKICAgICAgICAgY29tcGlsZUNoZWNrRm9yUmFuZ2Uobm9kZUlu
ZGV4LCByYW5nZSk7Ci0gICAgaWYgKG5vZGUuY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKG1fZGZh
KSkKLSAgICAgICAgZW1pdEp1bXAobm9kZUluZGV4LCBub2RlLmJlc3RGYWxsYmFja1RhcmdldCht
X2RmYSkpOworICAgIGlmIChub2RlVHJhbnNpdGlvbnMudXNlRmFsbGJhY2tUcmFuc2l0aW9uKQor
ICAgICAgICBlbWl0SnVtcChub2RlSW5kZXgsIG5vZGVUcmFuc2l0aW9ucy5mYWxsYmFja1RyYW5z
aXRpb25UYXJnZXQpOwogICAgIGVsc2UKICAgICAgICAgZW1pdFRlcm1pbmF0ZSgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmgKaW5kZXggMmQwZDM5MjA5NTA5NzM3ZGY2OTkyNWYzMDM0YmZlOTkwZWZhYmYwMi4uODQ3
NzMzZDA0MzkyZWQ4OTYzYjIzZWUwZmZmYWExYTVjNjMwYTBiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaApAQCAt
NjIsMTMgKzYyLDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnQzMl90IGRlc3RpbmF0aW9uOwog
ICAgICAgICBib29sIGNhc2VTZW5zaXRpdmU7CiAgICAgfTsKLSAgICBWZWN0b3I8UmFuZ2U+IHJh
bmdlcyhjb25zdCBERkFOb2RlJik7CisgICAgc3RydWN0IEp1bXBUYWJsZSB7CisgICAgICAgIHVp
bnQ4X3QgbWluOworICAgICAgICB1aW50OF90IG1heDsKKyAgICAgICAgYm9vbCBjYXNlU2Vuc2l0
aXZlOworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGRlc3RpbmF0aW9uczsKKyAgICB9OworICAg
IHN0cnVjdCBUcmFuc2l0aW9ucyB7CisgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IGp1bXBUYWJs
ZXM7CisgICAgICAgIFZlY3RvcjxSYW5nZT4gcmFuZ2VzOworICAgICAgICBib29sIHVzZUZhbGxi
YWNrVHJhbnNpdGlvbiB7IGZhbHNlIH07CisgICAgICAgIHVpbnQzMl90IGZhbGxiYWNrVHJhbnNp
dGlvblRhcmdldCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSB9OworICAg
IH07CisgICAgSnVtcFRhYmxlIGV4dHJhY3RKdW1wVGFibGUoVmVjdG9yPFJhbmdlPiYsIHVuc2ln
bmVkIGZpcnN0LCB1bnNpZ25lZCBsYXN0KTsKKyAgICBUcmFuc2l0aW9ucyB0cmFuc2l0aW9ucyhj
b25zdCBERkFOb2RlJik7CiAgICAgCiAgICAgdW5zaWduZWQgY29tcGlsZWROb2RlTWF4Qnl0ZWNv
ZGVTaXplKHVpbnQzMl90IGluZGV4KTsKICAgICB2b2lkIGNvbXBpbGVOb2RlKHVpbnQzMl90IGlu
ZGV4LCBib29sIHJvb3QpOwogICAgIHVuc2lnbmVkIG5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2Rl
U2l6ZShjb25zdCBERkFOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTm9kZVRyYW5zaXRpb25zKHVp
bnQzMl90IG5vZGVJbmRleCk7CisgICAgdW5zaWduZWQgY2hlY2tGb3JKdW1wVGFibGVNYXhCeXRl
Y29kZVNpemUoY29uc3QgSnVtcFRhYmxlJik7CiAgICAgdW5zaWduZWQgY2hlY2tGb3JSYW5nZU1h
eEJ5dGVjb2RlU2l6ZShjb25zdCBSYW5nZSYpOworICAgIHZvaWQgY29tcGlsZUp1bXBUYWJsZSh1
aW50MzJfdCBub2RlSW5kZXgsIGNvbnN0IEp1bXBUYWJsZSYpOwogICAgIHZvaWQgY29tcGlsZUNo
ZWNrRm9yUmFuZ2UodWludDMyX3Qgbm9kZUluZGV4LCBjb25zdCBSYW5nZSYpOwogICAgIGludDMy
X3QgbG9uZ2VzdFBvc3NpYmxlSnVtcCh1aW50MzJfdCBqdW1wTG9jYXRpb24sIHVpbnQzMl90IHNv
dXJjZU5vZGVJbmRleCwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IGE5YTAwNGIzMzliZTQ0NWEyYmYyNTlhOTM1MWQ5NGIyYTU1OTg2
MjcuLjdiZDUzZDRjZDcxMWM1ZjIxMDVlMDg3YTg5ZTM3NDViYzgwN2YxNTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuY3BwCkBAIC0xMjgsNiArMTI4LDI5IEBAIHZvaWQgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFt
CiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bldpdGhJZkRvbWFpbikpOwogfQogCit0ZW1wbGF0ZTxib29sIGNhc2VTZW5zaXRpdmU+Citpbmxp
bmUgYm9vbCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnBldEp1bXBUYWJsZShjb25zdCBj
aGFyKiB1cmwsIHVpbnQzMl90JiB1cmxJbmRleCwgdWludDMyX3QmIHByb2dyYW1Db3VudGVyLCBi
b29sJiB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZykKK3sKKyAgICBpZiAodXJsSW5kZXhJc0Fm
dGVyRW5kT2ZTdHJpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERGQUJ5dGVjb2Rl
SnVtcFNpemUganVtcFNpemUgPSBnZXRKdW1wU2l6ZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlcik7CisKKyAgICBjaGFyIGNoYXJhY3RlciA9IGNhc2VTZW5zaXRp
dmUgPyB1cmxbdXJsSW5kZXhdIDogdG9BU0NJSUxvd2VyKHVybFt1cmxJbmRleF0pOworICAgIHVp
bnQ4X3QgZmlyc3RDaGFyYWN0ZXIgPSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pKTsKKyAgICB1aW50OF90IGxhc3RDaGFyYWN0ZXIgPSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICBpZiAoY2hhcmFjdGVyID49
IGZpcnN0Q2hhcmFjdGVyICYmIGNoYXJhY3RlciA8PSBsYXN0Q2hhcmFjdGVyKSB7CisgICAgICAg
IHVpbnQzMl90IHN0YXJ0T2Zmc2V0ID0gcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikgKyAyICogc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICB1aW50MzJfdCBq
dW1wTG9jYXRpb24gPSBzdGFydE9mZnNldCArIChjaGFyYWN0ZXIgLSBmaXJzdENoYXJhY3Rlcikg
KiBqdW1wU2l6ZUluQnl0ZXMoanVtcFNpemUpOworICAgICAgICBwcm9ncmFtQ291bnRlciArPSBn
ZXRKdW1wRGlzdGFuY2UobV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwganVtcExvY2F0aW9u
LCBqdW1wU2l6ZSk7CisgICAgICAgIGlmICghY2hhcmFjdGVyKQorICAgICAgICAgICAgdXJsSW5k
ZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0cnVlOworICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlz
IHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgorICAgIH0gZWxzZQorICAgICAgICBwcm9n
cmFtQ291bnRlciArPSBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyAyICogc2l6ZW9m
KHVpbnQ4X3QpICsganVtcFNpemVJbkJ5dGVzKGp1bXBTaXplKSAqIChsYXN0Q2hhcmFjdGVyIC0g
Zmlyc3RDaGFyYWN0ZXIgKyAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVm
YXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpCiB7CiAgICAgQWN0aW9ucyBhY3Rpb25zOwpAQCAt
MjQ2LDYgKzI2OSwxNiBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJgogICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtQ291bnRlciArPSBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBz
aXplb2YodWludDhfdCkgKyBqdW1wU2l6ZUluQnl0ZXMoanVtcFNpemUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246Okp1bXBUYWJsZUNhc2VJbnNlbnNpdGl2ZToKKyAgICAgICAgICAgICAgICBp
ZiAoIWludGVycGV0SnVtcFRhYmxlPGZhbHNlPih1cmwsIHVybEluZGV4LCBwcm9ncmFtQ291bnRl
ciwgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBnb3Rv
IG5leHRERkE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXBUYWJsZUNhc2VTZW5zaXRpdmU6CisgICAgICAgICAgICAg
ICAgaWYgKCFpbnRlcnBldEp1bXBUYWJsZTx0cnVlPih1cmwsIHVybEluZGV4LCBwcm9ncmFtQ291
bnRlciwgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBn
b3RvIG5leHRERkE7CisKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVS
YW5nZUNhc2VTZW5zaXRpdmU6IHsKICAgICAgICAgICAgICAgICBpZiAodXJsSW5kZXhJc0FmdGVy
RW5kT2ZTdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgKaW5kZXggODg5YmU1OTU4OGVkZGRlNGE2OTBh
ZDZlNDRjNTllNTAxNWVmYTI1Ni4uYzY3MTYxMWNlZDY3ZmE3YTE5ZWQzOGY3YzI0NWRiYTc0ZTdk
YmQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaApAQCAtNTYsNiArNTYsMTAgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNv
dW50ZXIsIEFjdGlvbnMmLCBib29sIGlmRG9tYWluKTsKICAgICB2b2lkIGludGVycHJldFRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZs
YWdzLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CisKKyAgICB0ZW1wbGF0ZTxib29sIGNhc2VT
ZW5zaXRpdmU+CisgICAgYm9vbCBpbnRlcnBldEp1bXBUYWJsZShjb25zdCBjaGFyKiB1cmwsIHVp
bnQzMl90JiB1cmxJbmRleCwgdWludDMyX3QmIHByb2dyYW1Db3VudGVyLCBib29sJiB1cmxJbmRl
eElzQWZ0ZXJFbmRPZlN0cmluZyk7CisKICAgICBjb25zdCBERkFCeXRlY29kZSogbV9ieXRlY29k
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBtX2J5dGVjb2RlTGVuZ3RoOwogICAgIGNvbnN0IERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMqIG1fZG9tYWluQWN0aW9ucyB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgKaW5kZXggYmFkMGU3MWY3NWVmNjEzMTI1OTFiOTgxYWQyMTFi
ZmM0MTBlOWEzMy4uYWI4MDYzZjA4NDllNGFjZThhZjc4MjgzMTc0MTVjNzRhNjE1NDcxYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAg
IC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNo
YW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KICAgICAvLyB0
byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAgY29uc3Qgc3Rh
dGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA1OworICAg
IGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9u
ID0gNjsKIAogICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3Rv
cmUoKTsKICAgICBzdGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0
aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257176</attachid>
            <date>2015-07-21 02:34:24 -0700</date>
            <delta_ts>2015-07-21 16:46:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147099-20150721023310.patch</filename>
            <type>text/plain</type>
            <size>23750</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ4ZGQ3NTYzYzY0YWU3
ODFlNTZkZjcxY2NkNmYyMGYyOTE0NWU1ZS4uZjdjNTZjYWNlMGU3MTQwYTQ2ZWFkM2I4MDAyMWQ1
ODI5ZDZhYjQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTA3LTIxICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBF
eHRlbnNpb25zXSBVc2UgYSBqdW1wIHRhYmxlIHdoZW4gY29uc2VjdXRpdmUgdHJhbnNpdGlvbnMg
aGF2ZSBkaWZmZXJlbnQgdGFyZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2hlbiBoYW5kbGluZyBjb25zZWN1dGl2ZSBzaW5nbGUgdHJhbnNpdGlv
bnMsIG1lcmdlIHRoZW0gaW50bworICAgICAgICBhIGp1bXAgdGFibGUgaW5zdGVhZCBvZiBjcmVh
dGluZyBtYW55IGluZGl2aWR1YWwgQ2hlY2tWYWx1ZS4KKworICAgICAgICBGcm9tIGxvY2FsIHRl
c3Rpbmcgb24geDg2XzY0LCBpdCByZWR1Y2VzIHRoZSBieXRlY29kZSBzaXplIGJ5IGFib3V0IDUl
CisgICAgICAgIGFuZCBpbXByb3ZlIHRoZSBydW50aW1lIGJ5IGFib3V0IDEwJS4KKworICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyk6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZXh0cmFjdEp1
bXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6dHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNoZWNrRm9ySnVtcFRhYmxlTWF4Qnl0ZWNvZGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjpjb21waWxlSnVtcFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29t
cGlsZXI6OmNvbXBpbGVOb2RlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OnJhbmdlcyk6IERlbGV0ZWQuCisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVy
cGV0SnVtcFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaDoKKwogMjAxNS0wNy0yMSAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHlsZVNoZWV0Q29udGVudHM6
OndyYXBwZXJJbnNlcnRSdWxlKCkgY2FuIGNyZWF0ZSBydWxlcyB0aGF0IG92ZXJmbG93IFJ1bGVE
YXRhJ3Mgc2VsZWN0b3IgaW5kZXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMDBjODdlNzk0NmU0ZjQyYTJkY2Fj
ZWYwNGQ0OTFhYmRlMmI4ZmE4Li5iOTE3Y2JlYjg1ZTdkYTk4YzZhNWMzMDc5MWI5ZTBmMGQ5MWQw
YzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDctMjEgIEJlbmphbWluIFBv
dWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lv
bnNdIFVzZSBhIGp1bXAgdGFibGUgd2hlbiBjb25zZWN1dGl2ZSB0cmFuc2l0aW9ucyBoYXZlIGRp
ZmZlcmVudCB0YXJnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDcwOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oOgor
CiAyMDE1LTA3LTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZhY2Vib29rIGluIHRpbGVkIGZ1bGxzY3JlZW4gaXMgc2xvdwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKaW5kZXggZGExMmNjZWRlMjkx
YmQxNzhiOTRmMzRlOGU1ZjBhMTVhNDI5ZDk0Ni4uZjkxMGRkODI0M2UwNWU5ZDEyNDg4MWQ2YjA1
OGJhMmEzM2U1NWE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZS5oCkBAIC00NSwzMCArNDUsMzggQEAgZW51bSBjbGFzcyBERkFCeXRlY29kZUlu
c3RydWN0aW9uIDogdWludDhfdCB7CiAgICAgQ2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSA9IDB4
MCwKICAgICBDaGVja1ZhbHVlQ2FzZVNlbnNpdGl2ZSA9IDB4MSwKIAorICAgIC8vIEp1bXAgdGFi
bGUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UuCisgICAgLy8g
VGhlIGxvd2VyIHZhbHVlICgxIGJ5dGUpLgorICAgIC8vIFRoZSBoaWdoZXIgdmFsdWUgKDEgYnl0
ZSkuCisgICAgLy8gVGhlIGRpc3RhbmNlIHRvIGp1bXAgaWYgdGhlIHZhbHVlIGlzIGluIHRoZSBy
YW5nZQorICAgIC8vIGZvciBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlICgxLTQgYnl0ZXMs
IHNpZ25lZCkuCisgICAgSnVtcFRhYmxlQ2FzZUluc2Vuc2l0aXZlID0gMHgyLAorICAgIEp1bXBU
YWJsZUNhc2VTZW5zaXRpdmUgPSAweDMsCisKICAgICAvLyBKdW1wIHRvIGFuIG9mZnNldCBpZiB0
aGUgaW5wdXQgdmFsdWUgaXMgd2l0aGluIGEgY2VydGFpbiByYW5nZS4KICAgICAvLyBUaGUgbG93
ZXIgdmFsdWUgKDEgYnl0ZSkuCiAgICAgLy8gVGhlIGhpZ2hlciB2YWx1ZSAoMSBieXRlKS4KICAg
ICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIHJhbmdlICgx
LTQgYnl0ZXMsIHNpZ25lZCkuCi0gICAgQ2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlID0g
MHgyLAotICAgIENoZWNrVmFsdWVSYW5nZUNhc2VTZW5zaXRpdmUgPSAweDMsCisgICAgQ2hlY2tW
YWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlID0gMHg0LAorICAgIENoZWNrVmFsdWVSYW5nZUNhc2VT
ZW5zaXRpdmUgPSAweDUsCiAKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoK
ICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCi0gICAgQXBwZW5kQWN0aW9u
ID0gMHg0LAotICAgIEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4NSwKKyAgICBBcHBlbmRB
Y3Rpb24gPSAweDYsCisgICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg3LAogICAgIAog
ICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKICAgICAv
LyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcykuCiAgICAgLy8g
VGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbiA9IDB4NiwKLSAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4gPSAw
eDcsCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg4LAorICAgIFRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4OSwKIAogICAgIC8vIFRlcm1pbmF0ZSBoYXMg
bm8gYXJndW1lbnRzLgotICAgIFRlcm1pbmF0ZSA9IDB4OCwKKyAgICBUZXJtaW5hdGUgPSAweEEs
CiAKICAgICAvLyBKdW1wIGhhcyBvbmUgYXJndW1lbnQ6CiAgICAgLy8gVGhlIGRpc3RhbmNlIHRv
IGp1bXAgKDEtNCBieXRlcywgc2lnbmVkKS4KLSAgICBKdW1wID0gMHg5LAorICAgIEp1bXAgPSAw
eEIsCiB9OwogCiAvLyBUaGUgbGFzdCBmb3VyIGJpdHMgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24g
dHlwZS4KQEAgLTEwNCw2ICsxMTIsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlv
blNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1YwogICAgIHN3
aXRjaCAoaW5zdHJ1Y3Rpb24pIHsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNo
ZWNrVmFsdWVDYXNlU2Vuc2l0aXZlOgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZToKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246Okp1bXBUYWJsZUNhc2VJbnNlbnNpdGl2ZToKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246Okp1bXBUYWJsZUNhc2VTZW5zaXRpdmU6CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlU2Vuc2l0aXZlOgogICAgIGNhc2UgREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlOgogICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKaW5kZXggYjc0Y2Q1
MmQxZTdiNzM4N2QzODVmMDUwYWM5NGQ4Nzc4OTExMmMxZi4uNTBiZjI1NjdmMzA5YmQwZTVlNzM0
MGUyZDZmZmM1OTM3ZDJjOTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKQEAgLTE5OCwyNyArMTk4LDU2
IEBAIHVuc2lnbmVkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVkTm9kZU1heEJ5dGVjb2Rl
U2l6ZSh1aW50MzJfdCBpbmRleCkKICAgICByZXR1cm4gc2l6ZTsKIH0KIAotVmVjdG9yPERGQUJ5
dGVjb2RlQ29tcGlsZXI6OlJhbmdlPiBERkFCeXRlY29kZUNvbXBpbGVyOjpyYW5nZXMoY29uc3Qg
REZBTm9kZSYgbm9kZSkKK0RGQUJ5dGVjb2RlQ29tcGlsZXI6Okp1bXBUYWJsZSBERkFCeXRlY29k
ZUNvbXBpbGVyOjpleHRyYWN0SnVtcFRhYmxlKFZlY3RvcjxERkFCeXRlY29kZUNvbXBpbGVyOjpS
YW5nZT4mIHJhbmdlcywgdW5zaWduZWQgZmlyc3RSYW5nZSwgdW5zaWduZWQgbGFzdFJhbmdlKQog
eworICAgIEFTU0VSVChsYXN0UmFuZ2UgPiBmaXJzdFJhbmdlKTsKKyAgICBBU1NFUlQobGFzdFJh
bmdlIDwgcmFuZ2VzLnNpemUoKSk7CisKKyAgICBKdW1wVGFibGUganVtcFRhYmxlOworICAgIGp1
bXBUYWJsZS5taW4gPSByYW5nZXNbZmlyc3RSYW5nZV0ubWluOworICAgIGp1bXBUYWJsZS5tYXgg
PSByYW5nZXNbbGFzdFJhbmdlXS5tYXg7CisgICAganVtcFRhYmxlLmNhc2VTZW5zaXRpdmUgPSBy
YW5nZXNbbGFzdFJhbmdlXS5jYXNlU2Vuc2l0aXZlOworCisgICAgdW5zaWduZWQgc2l6ZSA9IGxh
c3RSYW5nZSAtIGZpcnN0UmFuZ2UgKyAxOworICAgIGp1bXBUYWJsZS5kZXN0aW5hdGlvbnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdFJh
bmdlOyBpIDw9IGxhc3RSYW5nZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJhbmdlJiByYW5nZSA9
IHJhbmdlc1tpXTsKKworICAgICAgICBBU1NFUlQocmFuZ2UuY2FzZVNlbnNpdGl2ZSA9PSBqdW1w
VGFibGUuY2FzZVNlbnNpdGl2ZSk7CisgICAgICAgIEFTU0VSVChyYW5nZS5taW4gPT0gcmFuZ2Uu
bWF4KTsKKyAgICAgICAgQVNTRVJUKHJhbmdlLm1pbiA+PSBqdW1wVGFibGUubWluKTsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLm1pbiA8PSBqdW1wVGFibGUubWF4KTsKKworICAgICAgICBqdW1wVGFi
bGUuZGVzdGluYXRpb25zLmFwcGVuZChyYW5nZS5kZXN0aW5hdGlvbik7CisgICAgfQorCisgICAg
cmFuZ2VzLnJlbW92ZShmaXJzdFJhbmdlLCBzaXplKTsKKworICAgIHJldHVybiBqdW1wVGFibGU7
Cit9CisKK0RGQUJ5dGVjb2RlQ29tcGlsZXI6OlRyYW5zaXRpb25zIERGQUJ5dGVjb2RlQ29tcGls
ZXI6OnRyYW5zaXRpb25zKGNvbnN0IERGQU5vZGUmIG5vZGUpCit7CisgICAgVHJhbnNpdGlvbnMg
dHJhbnNpdGlvbnM7CisKICAgICB1aW50MzJfdCBkZXN0aW5hdGlvbnNbMTI4XTsKICAgICBtZW1z
ZXQoZGVzdGluYXRpb25zLCAweGZmLCBzaXplb2YoZGVzdGluYXRpb25zKSk7CiAgICAgY29uc3Qg
dWludDMyX3Qgbm9EZXN0aW5hdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKIAotICAgIGJvb2wgY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uID0gbm9kZS5jYW5Vc2VG
YWxsYmFja1RyYW5zaXRpb24obV9kZmEpOwotICAgIHVpbnQzMl90IGZhbGxiYWNrVHJhbnNpdGlv
blRhcmdldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKLSAgICBpZiAo
Y2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKQotICAgICAgICBmYWxsYmFja1RyYW5zaXRpb25UYXJn
ZXQgPSBub2RlLmJlc3RGYWxsYmFja1RhcmdldChtX2RmYSk7CisgICAgdHJhbnNpdGlvbnMudXNl
RmFsbGJhY2tUcmFuc2l0aW9uID0gbm9kZS5jYW5Vc2VGYWxsYmFja1RyYW5zaXRpb24obV9kZmEp
OworICAgIGlmICh0cmFuc2l0aW9ucy51c2VGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgIHRy
YW5zaXRpb25zLmZhbGxiYWNrVHJhbnNpdGlvblRhcmdldCA9IG5vZGUuYmVzdEZhbGxiYWNrVGFy
Z2V0KG1fZGZhKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlvbiA6IG5vZGUudHJh
bnNpdGlvbnMobV9kZmEpKSB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldE5vZGVJbmRleCA9IHRy
YW5zaXRpb24udGFyZ2V0KCk7Ci0gICAgICAgIGlmIChjYW5Vc2VGYWxsYmFja1RyYW5zaXRpb24g
JiYgZmFsbGJhY2tUcmFuc2l0aW9uVGFyZ2V0ID09IHRhcmdldE5vZGVJbmRleCkKKyAgICAgICAg
aWYgKHRyYW5zaXRpb25zLnVzZUZhbGxiYWNrVHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9ucy5mYWxs
YmFja1RyYW5zaXRpb25UYXJnZXQgPT0gdGFyZ2V0Tm9kZUluZGV4KQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgZm9yICh1aW50MTZfdCBpID0gdHJhbnNpdGlvbi5yYW5nZSgpLmZp
cnN0OyBpIDw9IHRyYW5zaXRpb24ucmFuZ2UoKS5sYXN0OyArK2kpCiAgICAgICAgICAgICBkZXN0
aW5hdGlvbnNbaV0gPSB0YXJnZXROb2RlSW5kZXg7CiAgICAgfQogCi0gICAgVmVjdG9yPFJhbmdl
PiByYW5nZXM7CisgICAgVmVjdG9yPFJhbmdlPiYgcmFuZ2VzID0gdHJhbnNpdGlvbnMucmFuZ2Vz
OwogICAgIHVpbnQ4X3QgcmFuZ2VNaW47CiAgICAgYm9vbCBoYXNSYW5nZU1pbiA9IGZhbHNlOwog
ICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IDEyODsgaSsrKSB7CkBAIC0yNjgsNyArMjk3LDQz
IEBAIFZlY3RvcjxERkFCeXRlY29kZUNvbXBpbGVyOjpSYW5nZT4gREZBQnl0ZWNvZGVDb21waWxl
cjo6cmFuZ2VzKGNvbnN0IERGQU5vZGUmIG5vCiAgICAgICAgIHJhbmdlcy5hcHBlbmQoUmFuZ2Uo
cmFuZ2VNaW4sIDEyNywgZGVzdGluYXRpb25zW3JhbmdlTWluXSwgdHJ1ZSkpOwogICAgIH0KIAot
ICAgIHJldHVybiByYW5nZXM7CisgICAgVmVjdG9yPEp1bXBUYWJsZT4mIGp1bXBUYWJsZXMgPSB0
cmFuc2l0aW9ucy5qdW1wVGFibGVzOworICAgIHVuc2lnbmVkIHJhbmdlUG9zaXRpb24gPSAwOwor
ICAgIHVuc2lnbmVkIGJhc2VSYW5nZVBvc2l0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworICAgIFJhbmdlKiBiYXNlUmFuZ2UgPSBudWxscHRyOworICAgIHdoaWxl
IChyYW5nZVBvc2l0aW9uIDwgcmFuZ2VzLnNpemUoKSkgeworICAgICAgICBhdXRvJiByYW5nZSA9
IHJhbmdlc1tyYW5nZVBvc2l0aW9uXTsKKyAgICAgICAgaWYgKGJhc2VSYW5nZSkgeworICAgICAg
ICAgICAgaWYgKHJhbmdlLm1pbiAhPSByYW5nZS5tYXgKKyAgICAgICAgICAgICAgICB8fCBiYXNl
UmFuZ2UtPmNhc2VTZW5zaXRpdmUgIT0gcmFuZ2UuY2FzZVNlbnNpdGl2ZQorICAgICAgICAgICAg
ICAgIHx8IHJhbmdlc1tyYW5nZVBvc2l0aW9uIC0gMV0ubWF4ICsgMSAhPSByYW5nZS5taW4pIHsK
KyAgICAgICAgICAgICAgICBpZiAocmFuZ2VQb3NpdGlvbiAtIGJhc2VSYW5nZVBvc2l0aW9uID4g
MSkgeworICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVzLmFwcGVuZChleHRyYWN0SnVtcFRh
YmxlKHJhbmdlcywgYmFzZVJhbmdlUG9zaXRpb24sIHJhbmdlUG9zaXRpb24gLSAxKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJhbmdlUG9zaXRpb24gPSBiYXNlUmFuZ2VQb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFzZVJhbmdlUG9zaXRpb24gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgICAgICAgICAgYmFzZVJhbmdl
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChyYW5nZS5taW4gPT0gcmFuZ2UubWF4KSB7CisgICAgICAgICAgICAgICAgYmFzZVJhbmdl
UG9zaXRpb24gPSByYW5nZVBvc2l0aW9uOworICAgICAgICAgICAgICAgIGJhc2VSYW5nZSA9ICZy
YW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICArK3JhbmdlUG9zaXRpb247
CisgICAgfQorCisgICAgaWYgKGJhc2VSYW5nZSAmJiByYW5nZXMuc2l6ZSgpIC0gYmFzZVJhbmdl
UG9zaXRpb24gPiAxKQorICAgICAgICBqdW1wVGFibGVzLmFwcGVuZChleHRyYWN0SnVtcFRhYmxl
KHJhbmdlcywgYmFzZVJhbmdlUG9zaXRpb24sIHJhbmdlcy5zaXplKCkgLSAxKSk7CisKKyAgICBy
ZXR1cm4gdHJhbnNpdGlvbnM7Cit9CisKK3Vuc2lnbmVkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNo
ZWNrRm9ySnVtcFRhYmxlTWF4Qnl0ZWNvZGVTaXplKGNvbnN0IEp1bXBUYWJsZSYganVtcFRhYmxl
KQoreworICAgIHVuc2lnbmVkIGJhc2VsaW5lU2l6ZSA9IHNpemVvZihERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5zaXRpdmUpICsgMiAqIHNpemVvZih1aW50
OF90KTsKKyAgICB1bnNpZ25lZCB0YXJnZXRzU2l6ZSA9IChqdW1wVGFibGUubWF4IC0ganVtcFRh
YmxlLm1pbiArIDEpICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICByZXR1cm4gYmFzZWxpbmVTaXpl
ICsgdGFyZ2V0c1NpemU7CiB9CiAgICAgCiB1bnNpZ25lZCBERkFCeXRlY29kZUNvbXBpbGVyOjpj
aGVja0ZvclJhbmdlTWF4Qnl0ZWNvZGVTaXplKGNvbnN0IFJhbmdlJiByYW5nZSkKQEAgLTI3OCw2
ICszNDMsMzUgQEAgdW5zaWduZWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y2hlY2tGb3JSYW5nZU1h
eEJ5dGVjb2RlU2l6ZShjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIHNpemVvZihERkFC
eXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlSW5zZW5zaXRpdmUpICsgMiAq
IHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MzJfdCk7CiB9CiAKK3ZvaWQgREZBQnl0ZWNv
ZGVDb21waWxlcjo6Y29tcGlsZUp1bXBUYWJsZSh1aW50MzJfdCBub2RlSW5kZXgsIGNvbnN0IEp1
bXBUYWJsZSYganVtcFRhYmxlKQoreworICAgIHVuc2lnbmVkIHN0YXJ0U2l6ZSA9IG1fYnl0ZWNv
ZGUuc2l6ZSgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoanVtcFRhYmxlLm1heCA8IDEyOCwg
IlRoZSBERkEgZW5naW5lIG9ubHkgc3VwcG9ydHMgdGhlIEFTQ0lJIGFscGhhYmV0LiIpOworICAg
IEFTU0VSVChqdW1wVGFibGUubWluIDw9IGp1bXBUYWJsZS5tYXgpOworCisgICAgdWludDMyX3Qg
aW5zdHJ1Y3Rpb25Mb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgIERGQUJ5dGVjb2Rl
SnVtcFNpemUganVtcFNpemUgPSBJbnQ4OworICAgIGZvciAodWludDMyX3QgZGVzdGluYXRpb25O
b2RlSW5kZXggOiBqdW1wVGFibGUuZGVzdGluYXRpb25zKSB7CisgICAgICAgIGludDMyX3QgbG9u
Z2VzdFBvc3NpYmxlSnVtcERpc3RhbmNlID0gbG9uZ2VzdFBvc3NpYmxlSnVtcChpbnN0cnVjdGlv
bkxvY2F0aW9uLCBub2RlSW5kZXgsIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICAgICAgREZB
Qnl0ZWNvZGVKdW1wU2l6ZSBsb2NhbEp1bXBTaXplID0gc21hbGxlc3RQb3NzaWJsZUp1bXBTaXpl
KGxvbmdlc3RQb3NzaWJsZUp1bXBEaXN0YW5jZSk7CisgICAgICAgIGp1bXBTaXplID0gc3RkOjpt
YXgoanVtcFNpemUsIGxvY2FsSnVtcFNpemUpOworICAgIH0KKworICAgIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBqdW1wVGFibGUuY2FzZVNlbnNpdGl2ZSA/IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246Okp1bXBUYWJsZUNhc2VTZW5zaXRpdmUgOiBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpKdW1wVGFibGVDYXNlSW5zZW5zaXRpdmU7CisgICAgYXBwZW5kPHVpbnQ4X3Q+KG1f
Ynl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGluc3RydWN0aW9uKSB8IGp1bXBTaXplKTsK
KyAgICBhcHBlbmQ8dWludDhfdD4obV9ieXRlY29kZSwganVtcFRhYmxlLm1pbik7CisgICAgYXBw
ZW5kPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIGp1bXBUYWJsZS5tYXgpOworCisgICAgZm9yICh1aW50
MzJfdCBkZXN0aW5hdGlvbk5vZGVJbmRleCA6IGp1bXBUYWJsZS5kZXN0aW5hdGlvbnMpIHsKKyAg
ICAgICAgaW50MzJfdCBsb25nZXN0UG9zc2libGVKdW1wRGlzdGFuY2UgPSBsb25nZXN0UG9zc2li
bGVKdW1wKGluc3RydWN0aW9uTG9jYXRpb24sIG5vZGVJbmRleCwgZGVzdGluYXRpb25Ob2RlSW5k
ZXgpOworICAgICAgICB1aW50MzJfdCBqdW1wTG9jYXRpb24gPSBtX2J5dGVjb2RlLnNpemUoKTsK
KyAgICAgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoTGlua1JlY29yZCh7anVtcFNpemUsIGxvbmdl
c3RQb3NzaWJsZUp1bXBEaXN0YW5jZSwgaW5zdHJ1Y3Rpb25Mb2NhdGlvbiwganVtcExvY2F0aW9u
LCBkZXN0aW5hdGlvbk5vZGVJbmRleH0pKTsKKyAgICAgICAgYXBwZW5kWmVyb2VzKG1fYnl0ZWNv
ZGUsIGp1bXBTaXplKTsKKyAgICB9CisKKyAgICBBU1NFUlRfVU5VU0VEKHN0YXJ0U2l6ZSwgbV9i
eXRlY29kZS5zaXplKCkgLSBzdGFydFNpemUgPD0gY2hlY2tGb3JKdW1wVGFibGVNYXhCeXRlY29k
ZVNpemUoanVtcFRhYmxlKSk7Cit9CisKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGls
ZUNoZWNrRm9yUmFuZ2UodWludDMyX3Qgbm9kZUluZGV4LCBjb25zdCBSYW5nZSYgcmFuZ2UpCiB7
CiAgICAgdW5zaWduZWQgc3RhcnRTaXplID0gbV9ieXRlY29kZS5zaXplKCk7CkBAIC0yOTUsOSAr
Mzg5LDEyIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZUNoZWNrRm9yUmFuZ2Uo
dWludDMyX3Qgbm9kZUluZGV4LCBjb25zdCBSYW5nZSYKIHVuc2lnbmVkIERGQUJ5dGVjb2RlQ29t
cGlsZXI6Om5vZGVUcmFuc2l0aW9uc01heEJ5dGVjb2RlU2l6ZShjb25zdCBERkFOb2RlJiBub2Rl
KQogewogICAgIHVuc2lnbmVkIHNpemUgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2Ug
OiByYW5nZXMobm9kZSkpCisgICAgVHJhbnNpdGlvbnMgbm9kZVRyYW5zaXRpb25zID0gdHJhbnNp
dGlvbnMobm9kZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBqdW1wVGFibGUgOiBub2RlVHJhbnNp
dGlvbnMuanVtcFRhYmxlcykKKyAgICAgICAgc2l6ZSArPSBjaGVja0Zvckp1bXBUYWJsZU1heEJ5
dGVjb2RlU2l6ZShqdW1wVGFibGUpOworICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiBub2Rl
VHJhbnNpdGlvbnMucmFuZ2VzKQogICAgICAgICBzaXplICs9IGNoZWNrRm9yUmFuZ2VNYXhCeXRl
Y29kZVNpemUocmFuZ2UpOwotICAgIGlmIChub2RlLmNhblVzZUZhbGxiYWNrVHJhbnNpdGlvbiht
X2RmYSkpCisgICAgaWYgKG5vZGVUcmFuc2l0aW9ucy51c2VGYWxsYmFja1RyYW5zaXRpb24pCiAg
ICAgICAgIHNpemUgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXApICsgc2l6
ZW9mKHVpbnQzMl90KTsKICAgICBlbHNlCiAgICAgICAgIHNpemUgKz0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOwpAQCAtMzA4
LDExICs0MDUsMTQgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYW5z
aXRpb25zKHVpbnQzMl90IG5vZGVJbmRleCkKIHsKICAgICBjb25zdCBERkFOb2RlJiBub2RlID0g
bV9kZmEubm9kZXNbbm9kZUluZGV4XTsKICAgICB1bnNpZ25lZCBzdGFydFNpemUgPSBtX2J5dGVj
b2RlLnNpemUoKTsKLSAgICAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKG5v
ZGUpKQorCisgICAgVHJhbnNpdGlvbnMgbm9kZVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnMobm9k
ZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBqdW1wVGFibGUgOiBub2RlVHJhbnNpdGlvbnMuanVt
cFRhYmxlcykKKyAgICAgICAgY29tcGlsZUp1bXBUYWJsZShub2RlSW5kZXgsIGp1bXBUYWJsZSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IG5vZGVUcmFuc2l0aW9ucy5yYW5nZXMpCiAg
ICAgICAgIGNvbXBpbGVDaGVja0ZvclJhbmdlKG5vZGVJbmRleCwgcmFuZ2UpOwotICAgIGlmIChu
b2RlLmNhblVzZUZhbGxiYWNrVHJhbnNpdGlvbihtX2RmYSkpCi0gICAgICAgIGVtaXRKdW1wKG5v
ZGVJbmRleCwgbm9kZS5iZXN0RmFsbGJhY2tUYXJnZXQobV9kZmEpKTsKKyAgICBpZiAobm9kZVRy
YW5zaXRpb25zLnVzZUZhbGxiYWNrVHJhbnNpdGlvbikKKyAgICAgICAgZW1pdEp1bXAobm9kZUlu
ZGV4LCBub2RlVHJhbnNpdGlvbnMuZmFsbGJhY2tUcmFuc2l0aW9uVGFyZ2V0KTsKICAgICBlbHNl
CiAgICAgICAgIGVtaXRUZXJtaW5hdGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCmluZGV4IDJkMGQzOTIwOTUw
OTczN2RmNjk5MjVmMzAzNGJmZTk5MGVmYWJmMDIuLjFkMDYwMjNkMjY2MzUyZDY3MzNiNTk1MTM2
MjZlNzViZTgxMGM3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKQEAgLTYyLDEzICs2MiwzNCBAQCBwcml2YXRl
OgogICAgICAgICB1aW50MzJfdCBkZXN0aW5hdGlvbjsKICAgICAgICAgYm9vbCBjYXNlU2Vuc2l0
aXZlOwogICAgIH07Ci0gICAgVmVjdG9yPFJhbmdlPiByYW5nZXMoY29uc3QgREZBTm9kZSYpOwor
ICAgIHN0cnVjdCBKdW1wVGFibGUgeworICAgICAgICB+SnVtcFRhYmxlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1pbiArIGRlc3RpbmF0aW9ucy5zaXplKCkgPT0gbWF4ICsgMSk7
CisgICAgICAgICAgICBBU1NFUlQobWluID09IG1heCB8fCBkZXN0aW5hdGlvbnMuc2l6ZSgpID4g
MSk7CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90IG1pbiB7IDAgfTsKKyAgICAgICAgdWlu
dDhfdCBtYXggeyAwIH07CisgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSB7IHRydWUgfTsKKyAg
ICAgICAgVmVjdG9yPHVpbnQzMl90PiBkZXN0aW5hdGlvbnM7CisgICAgfTsKKyAgICBzdHJ1Y3Qg
VHJhbnNpdGlvbnMgeworICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBqdW1wVGFibGVzOworICAg
ICAgICBWZWN0b3I8UmFuZ2U+IHJhbmdlczsKKyAgICAgICAgYm9vbCB1c2VGYWxsYmFja1RyYW5z
aXRpb24geyBmYWxzZSB9OworICAgICAgICB1aW50MzJfdCBmYWxsYmFja1RyYW5zaXRpb25UYXJn
ZXQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgfTsKKyAgICB9OworICAg
IEp1bXBUYWJsZSBleHRyYWN0SnVtcFRhYmxlKFZlY3RvcjxSYW5nZT4mLCB1bnNpZ25lZCBmaXJz
dCwgdW5zaWduZWQgbGFzdCk7CisgICAgVHJhbnNpdGlvbnMgdHJhbnNpdGlvbnMoY29uc3QgREZB
Tm9kZSYpOwogICAgIAogICAgIHVuc2lnbmVkIGNvbXBpbGVkTm9kZU1heEJ5dGVjb2RlU2l6ZSh1
aW50MzJfdCBpbmRleCk7CiAgICAgdm9pZCBjb21waWxlTm9kZSh1aW50MzJfdCBpbmRleCwgYm9v
bCByb290KTsKICAgICB1bnNpZ25lZCBub2RlVHJhbnNpdGlvbnNNYXhCeXRlY29kZVNpemUoY29u
c3QgREZBTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyh1aW50MzJfdCBu
b2RlSW5kZXgpOworICAgIHVuc2lnbmVkIGNoZWNrRm9ySnVtcFRhYmxlTWF4Qnl0ZWNvZGVTaXpl
KGNvbnN0IEp1bXBUYWJsZSYpOwogICAgIHVuc2lnbmVkIGNoZWNrRm9yUmFuZ2VNYXhCeXRlY29k
ZVNpemUoY29uc3QgUmFuZ2UmKTsKKyAgICB2b2lkIGNvbXBpbGVKdW1wVGFibGUodWludDMyX3Qg
bm9kZUluZGV4LCBjb25zdCBKdW1wVGFibGUmKTsKICAgICB2b2lkIGNvbXBpbGVDaGVja0ZvclJh
bmdlKHVpbnQzMl90IG5vZGVJbmRleCwgY29uc3QgUmFuZ2UmKTsKICAgICBpbnQzMl90IGxvbmdl
c3RQb3NzaWJsZUp1bXAodWludDMyX3QganVtcExvY2F0aW9uLCB1aW50MzJfdCBzb3VyY2VOb2Rl
SW5kZXgsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmNwcAppbmRleCA1Njc3YmQzMjExNmZjNjkzZjZjNmZkM2QxZTk1ZWY0YTQwNTM5YTUyLi5hMGRh
MDg0YTYyNWJkMjRlNTBjOTM2ZjYwNDhmZjI0OWZjYzBmNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmNwcApAQCAtMTI2LDYgKzEyNiwyNSBAQCB2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6Omlu
dGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1aW50MzJfdCYgcHJvZ3JhbQogICAgIEFT
U0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50
cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZE
b21haW4pKTsKIH0KIAordGVtcGxhdGU8Ym9vbCBjYXNlU2Vuc2l0aXZlPgoraW5saW5lIHZvaWQg
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwZXRKdW1wVGFibGUoY29uc3QgY2hhciogdXJs
LCB1aW50MzJfdCYgdXJsSW5kZXgsIHVpbnQzMl90JiBwcm9ncmFtQ291bnRlciwgYm9vbCYgdXJs
SW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcpCit7CisgICAgREZBQnl0ZWNvZGVKdW1wU2l6ZSBqdW1w
U2l6ZSA9IGdldEp1bXBTaXplKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyKTsKKworICAgIGNoYXIgY2hhcmFjdGVyID0gY2FzZVNlbnNpdGl2ZSA/IHVybFt1cmxJ
bmRleF0gOiB0b0FTQ0lJTG93ZXIodXJsW3VybEluZGV4XSk7CisgICAgdWludDhfdCBmaXJzdENo
YXJhY3RlciA9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwg
cHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpOworICAgIHVp
bnQ4X3QgbGFzdENoYXJhY3RlciA9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bikgKyBzaXplb2YodWludDhfdCkpOworICAgIGlmIChjaGFyYWN0ZXIgPj0gZmlyc3RDaGFyYWN0
ZXIgJiYgY2hhcmFjdGVyIDw9IGxhc3RDaGFyYWN0ZXIpIHsKKyAgICAgICAgdWludDMyX3Qgc3Rh
cnRPZmZzZXQgPSBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIDIgKiBzaXplb2YodWludDhfdCk7CisgICAgICAgIHVpbnQzMl90IGp1bXBMb2NhdGlvbiA9
IHN0YXJ0T2Zmc2V0ICsgKGNoYXJhY3RlciAtIGZpcnN0Q2hhcmFjdGVyKSAqIGp1bXBTaXplSW5C
eXRlcyhqdW1wU2l6ZSk7CisgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGdldEp1bXBEaXN0YW5j
ZShtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBqdW1wTG9jYXRpb24sIGp1bXBTaXplKTsK
KyAgICAgICAgaWYgKCFjaGFyYWN0ZXIpCisgICAgICAgICAgICB1cmxJbmRleElzQWZ0ZXJFbmRP
ZlN0cmluZyA9IHRydWU7CisgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBh
biBlZGdlIGluIHRoZSBERkEuCisgICAgfSBlbHNlCisgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIDIgKiBzaXplb2YodWludDhfdCkgKyBq
dW1wU2l6ZUluQnl0ZXMoanVtcFNpemUpICogKGxhc3RDaGFyYWN0ZXIgLSBmaXJzdENoYXJhY3Rl
ciArIDEpOworfQorCiBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKQogewogICAgIEFjdGlvbnMg
YWN0aW9uczsKQEAgLTI0NSw2ICsyNjQsMTkgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYKICAg
ICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsganVtcFNpemVJbkJ5dGVzKGp1bXBTaXplKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fz
ZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wVGFibGVDYXNlSW5zZW5zaXRpdmU6CisgICAg
ICAgICAgICAgICAgaWYgKHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nKQorICAgICAgICAgICAg
ICAgICAgICBnb3RvIG5leHRERkE7CisKKyAgICAgICAgICAgICAgICBpbnRlcnBldEp1bXBUYWJs
ZTxmYWxzZT4odXJsLCB1cmxJbmRleCwgcHJvZ3JhbUNvdW50ZXIsIHVybEluZGV4SXNBZnRlckVu
ZE9mU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcFRhYmxlQ2FzZVNlbnNpdGl2ZToKKyAgICAgICAgICAg
ICAgICBpZiAodXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcpCisgICAgICAgICAgICAgICAgICAg
IGdvdG8gbmV4dERGQTsKKworICAgICAgICAgICAgICAgIGludGVycGV0SnVtcFRhYmxlPHRydWU+
KHVybCwgdXJsSW5kZXgsIHByb2dyYW1Db3VudGVyLCB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmlu
Zyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VDYXNlU2Vu
c2l0aXZlOiB7CiAgICAgICAgICAgICAgICAgaWYgKHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oCmluZGV4IDJhMjVmOWYzODJkNTcxNzQ5OGI3MmVmYWVkOWQ0ZDJh
ODAxYTJmMmQuLmI4MDY3ZWI2OGUzNWFhMzY3NTgxZjUwN2JiNTExMWRmY2ViZTBhMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUludGVycHJldGVyLmgKQEAgLTU2LDYgKzU2LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCBpbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCBBY3Rp
b25zJiwgYm9vbCBpZkRvbWFpbik7CiAgICAgdm9pZCBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCB1aW50MTZfdCBmbGFncywgQWN0aW9u
cyYsIGJvb2wgaWZEb21haW4pOworCisgICAgdGVtcGxhdGU8Ym9vbCBjYXNlU2Vuc2l0aXZlPgor
ICAgIHZvaWQgaW50ZXJwZXRKdW1wVGFibGUoY29uc3QgY2hhciogdXJsLCB1aW50MzJfdCYgdXJs
SW5kZXgsIHVpbnQzMl90JiBwcm9ncmFtQ291bnRlciwgYm9vbCYgdXJsSW5kZXhJc0FmdGVyRW5k
T2ZTdHJpbmcpOworCiAgICAgY29uc3QgREZBQnl0ZWNvZGUqIG1fYnl0ZWNvZGU7CiAgICAgY29u
c3QgdW5zaWduZWQgbV9ieXRlY29kZUxlbmd0aDsKICAgICBjb25zdCBERkFCeXRlY29kZUludGVy
cHJldGVyOjpBY3Rpb25zKiBtX2RvbWFpbkFjdGlvbnMgeyBudWxscHRyIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCmluZGV4IGFiODA2M2YwODQ5ZTRhY2U4YWY3ODI4MzE3NDE1Yzc0YTYxNTQ3MWIu
LjI4MzA5ZmJiNmQ4ZTAxMGRjZjdjNDc2YjA3Njc3MjJkY2Q4MWFiODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFk
ZSB0byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBj
cmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgotICAgIGNvbnN0IHN0YXRpYyB1aW50MzJf
dCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gNjsKKyAgICBjb25zdCBzdGF0
aWMgdWludDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDc7CiAKICAg
ICBzdGF0aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7CiAgICAg
c3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0
IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU2NTBkM2ZjOGNhZWRhMGIyOTBkNGNj
YmNmNDk3NWU2NjJkYzU4MWEuLmQ1YWU1N2M2MGZiZWYyM2Q5NmE5MGFhOGVmYjVlNzFmYjQ1ODMw
N2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wNy0yMSAgQmVuamFtaW4gUG91bGFpbiAg
PGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gVXNl
IGEganVtcCB0YWJsZSB3aGVuIGNvbnNlY3V0aXZlIHRyYW5zaXRpb25zIGhhdmUgZGlmZmVyZW50
IHRhcmdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzA5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzb21lIHByaW1pdGl2ZSB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyBjb3Zl
cmVkLgorCisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy90ZXN0LWp1bXAt
dGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvdGVzdC1qdW1wLXRhYmxlLWJ5dGVjb2RlLWdl
bmVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5z
aW9ucy90ZXN0LWp1bXAtdGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi5odG1sLmpzb246IEFkZGVk
LgorCiAyMDE1LTA3LTIxICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckluc2VydFJ1bGUoKSBjYW4gY3Jl
YXRlIHJ1bGVzIHRoYXQgb3ZlcmZsb3cgUnVsZURhdGEncyBzZWxlY3RvciBpbmRleApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy90ZXN0LWp1bXAt
dGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL3Rlc3QtanVtcC10YWJsZS1ieXRlY29kZS1nZW5lcmF0
aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmE5NDdkNDJhNGVlNjIyMDY4MjViMTY3YzVl
M2Y4MjRmZTdmZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
b250ZW50ZXh0ZW5zaW9ucy90ZXN0LWp1bXAtdGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSBAQAorVGhpcyB0ZXh0IHNob3VsZCBiZSB2aXNpYmxlLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy90ZXN0LWp1
bXAtdGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9jb250ZW50ZXh0ZW5zaW9ucy90ZXN0LWp1bXAtdGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRkNzAzYWZlMmM0NjBhMTE3NjU4MzAzZWM2YmQwYWFhZWI4ZGM3MzYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNp
b25zL3Rlc3QtanVtcC10YWJsZS1ieXRlY29kZS1nZW5lcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwx
MSBAQAorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJVVEYtOCI+PC9tZXRhPgorPHNjcmlwdD4KKyAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cD5UaGlzIHRleHQgc2hvdWxkIGJlIHZpc2libGUuPC9wPgorPHAgY2xhc3M9ImZvbyI+VGhpcyB0
ZXh0IHNob3VsZCBub3QgYmUgdmlzaWJsZS48L3A+Cis8cCBjbGFzcz0iYmFyIj5UaGlzIHRleHQg
c2hvdWxkIG5vdCBiZSB2aXNpYmxlLjwvcD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvdGVzdC1qdW1wLXRhYmxlLWJ5dGVjb2Rl
LWdlbmVyYXRpb24uaHRtbC5qc29uIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0
ZW5zaW9ucy90ZXN0LWp1bXAtdGFibGUtYnl0ZWNvZGUtZ2VuZXJhdGlvbi5odG1sLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjRlNTU4M2VkNTljNGYwYmE0MGM3ZjJhNDk3MWE0MTNkODJlNDNhMAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvdGVz
dC1qdW1wLXRhYmxlLWJ5dGVjb2RlLWdlbmVyYXRpb24uaHRtbC5qc29uCkBAIC0wLDAgKzEsNjAg
QEAKK1sKKyAgICB7CisgICAgICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJj
c3MtZGlzcGxheS1ub25lIiwKKyAgICAgICAgICAgICJzZWxlY3RvciI6ICIuZm9vIgorICAgICAg
ICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwtZmlsdGVyIjogImNv
ZCIKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAg
ICAgICAgInR5cGUiOiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2VyIjogewor
ICAgICAgICAgICAgInVybC1maWx0ZXIiOiAiZHBjIgorICAgICAgICB9CisgICAgfSwKKyAgICB7
CisgICAgICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jay1jb29raWVz
IgorICAgICAgICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwtZmls
dGVyIjogImVtZSIKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjog
eworICAgICAgICAgICAgInR5cGUiOiAiY3NzLWRpc3BsYXktbm9uZSIsCisgICAgICAgICAgICAi
c2VsZWN0b3IiOiAiLmJhciIKKyAgICAgICAgfSwKKyAgICAgICAgInRyaWdnZXIiOiB7CisgICAg
ICAgICAgICAidXJsLWZpbHRlciI6ICJlY28iCisgICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAg
ICAgICAgImFjdGlvbiI6IHsKKyAgICAgICAgICAgICJ0eXBlIjogImJsb2NrIgorICAgICAgICB9
LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwtZmlsdGVyIjogImNjbyIK
KyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAgICAg
ICAgInR5cGUiOiAiaWdub3JlLXByZXZpb3VzLXJ1bGVzIgorICAgICAgICB9LAorICAgICAgICAi
dHJpZ2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwtZmlsdGVyIjogImNwZCIKKyAgICAgICAgfQor
ICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAgICAgICAgInR5cGUiOiAi
YmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2VyIjogeworICAgICAgICAgICAgInVy
bC1maWx0ZXIiOiAiZG9jIgorICAgICAgICB9CisgICAgfQorXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>