<?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>174069</bug_id>
          
          <creation_ts>2017-07-01 17:52:31 -0700</creation_ts>
          <short_desc>Add API test for all parts of WebKit1 API related to favicons</short_desc>
          <delta_ts>2017-07-02 17:14:21 -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>WebKit API</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174073</see_also>
          <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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324853</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-01 17:52:31 -0700</bug_when>
    <thetext>Add API test for all parts of WebKit1 API related to favicons

WebIconDatabase itself is not API.

But there are some icon-related things that *are* API:
- WebView&apos;s &quot;mainFrameIcon&quot; property
- KVO observation of changes to that property
- WebFrameLoadDelegate&apos;s &quot;- (void)webView:(WebView *)sender didReceiveIcon:(NSImage *)image forFrame:(WebFrame *)frame&quot; method

Before we gut WebIconDatabase, we should have a test in place for all that API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324855</commentid>
    <comment_count>1</comment_count>
      <attachid>314394</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-01 17:59:37 -0700</bug_when>
    <thetext>Created attachment 314394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324857</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-01 18:01:57 -0700</bug_when>
    <thetext>Attachment 314394 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:120:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:137:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 3 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>1324868</commentid>
    <comment_count>3</comment_count>
      <attachid>314397</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-01 20:08:49 -0700</bug_when>
    <thetext>Created attachment 314397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324869</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-01 20:10:07 -0700</bug_when>
    <thetext>Attachment 314397 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:186:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:227:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 3 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>1324870</commentid>
    <comment_count>5</comment_count>
      <attachid>314398</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-01 20:11:52 -0700</bug_when>
    <thetext>Created attachment 314398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324941</commentid>
    <comment_count>6</comment_count>
      <attachid>314398</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-07-02 12:00:53 -0700</bug_when>
    <thetext>Comment on attachment 314398
Patch

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

&gt; Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:34
&gt; +static bool messageReceived = false;

No = false</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324942</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-02 12:10:59 -0700</bug_when>
    <thetext>(In reply to Andy Estes from comment #6)
&gt; Comment on attachment 314398 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314398&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:34
&gt; &gt; +static bool messageReceived = false;
&gt; 
&gt; No = false

I&apos;ll loop back around and change that when I touch this test in my next patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324943</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-02 12:12:07 -0700</bug_when>
    <thetext>(In bug 174073)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324948</commentid>
    <comment_count>9</comment_count>
      <attachid>314398</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-02 12:39:01 -0700</bug_when>
    <thetext>Comment on attachment 314398
Patch

Clearing flags on attachment: 314398

Committed r219059: &lt;http://trac.webkit.org/changeset/219059&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324949</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-02 12:39:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324969</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-02 17:14:21 -0700</bug_when>
    <thetext>Some bots aren&apos;t liking this test. Can&apos;t reproduce locally (Of course!)

I think I will resolve with https://bugs.webkit.org/show_bug.cgi?id=174073</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314394</attachid>
            <date>2017-07-01 17:59:37 -0700</date>
            <delta_ts>2017-07-01 20:08:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14150</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMGYz
NDZjY2RkYS4uNWM4OGU4NDUwODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wNy0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGZvciBhbGwgcGFy
dHMgb2YgV2ViS2l0MSBBUEkgcmVsYXRlZCB0byBmYXZpY29ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDA2OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIHR3byBBUEkgdGVzdHMgY292ZXIg
YWxsIFdlYktpdDEgQVBJIHJlbGF0ZWQgdG8gaWNvbnMuCisgICAgICAgIAorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdJY29uTG9hZGluZy5tbTogQWRk
ZWQuCisgICAgICAgIChtYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKGRlZmF1bHRGYXZpY29u
RGF0YSk6CisgICAgICAgIChjdXN0b21GYXZpY29uRGF0YSk6CisgICAgICAgIChpbWFnZUZyb21E
YXRhKToKKyAgICAgICAgKCtbSWNvbkxvYWRpbmdQcm90b2NvbCBjYW5Jbml0V2l0aFJlcXVlc3Q6
XSk6CisgICAgICAgICgrW0ljb25Mb2FkaW5nUHJvdG9jb2wgY2Fub25pY2FsUmVxdWVzdEZvclJl
cXVlc3Q6XSk6CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RhcnRMb2FkaW5nXSk6
CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RvcExvYWRpbmddKToKKyAgICAgICAg
KC1bSWNvbkxvYWRpbmdGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVJY29uOmZv
ckZyYW1lOl0pOgorICAgICAgICAoLVtNYWluRnJhbWVJY29uS1ZPIG9ic2VydmVWYWx1ZUZvcktl
eVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRleHQ6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxNy0wNy0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlcGxhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIEMgQVBJIHdpdGgg
Q29jb2EgU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ1NGNhOWZhNjE3Li5hNGUyMjFm
NDcyYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NSw2ICsxNzUsNyBAQAogCQk1MUNE
MUM3MjFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13
aW5kb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1h
Ym91dC1ibGFuay13aW5kb3cuaHRtbCAqLzsgfTsKIAkJNTFEMTI0OTgxRTc2M0IwMjAwMkIyODIw
IC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFEMTI0OTcxRTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0
b3JlLm1tICovOyB9OwogCQk1MUQxMjQ5QjFFNzg1NDI1MDAyQjI4MjAgLyogQ29va2llTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkYz
RjI5MDEzMzQyRkVCMDBBNkJGMTkgLyogQ29va2llTWFuYWdlci5jcHAgKi87IH07CisJCTUxREIx
NkNFMUYwODUxMzcwMDFGQTRDNSAvKiBXZWJWaWV3SWNvbkxvYWRpbmcubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURCMTZDRDFGMDg1MDQ3MDAxRkE0
QzUgLyogV2ViVmlld0ljb25Mb2FkaW5nLm1tICovOyB9OwogCQk1MUU1QzcwMjE5MTlDM0IyMDBE
OEIzRTEgLyogc2ltcGxlMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTc4MDM2MTkxOUFGRjgwMDE4MjlBMiAvKiBzaW1wbGUyLmh0
bWwgKi87IH07CiAJCTUxRTVDNzAzMTkxOUMzQjIwMEQ4QjNFMSAvKiBzaW1wbGUzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNzgw
MzcxOTE5QUZGODAwMTgyOUEyIC8qIHNpbXBsZTMuaHRtbCAqLzsgfTsKIAkJNTFFNkE4OTQxRDJG
MUMwQTAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8qIExv
Y2FsU3RvcmFnZUNsZWFyLm1tICovOyB9OwpAQCAtMTE5OSw2ICsxMjAwLDcgQEAKIAkJNTFDRDFD
NkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxBbGVydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxQ0QxQzcxMUIzOEQ0ODQwMDE0MkNBNSAvKiBtb2RhbC1hbGVydHMtaW4tbmV3
LWFib3V0LWJsYW5rLXdpbmRvdy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vZGFsLWFsZXJ0cy1pbi1uZXct
YWJvdXQtYmxhbmstd2luZG93Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUQxMjQ5NzFFNzYzQUY4MDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3RvcmUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdl
YlZpZXdJY29uTG9hZGluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdJY29uTG9h
ZGluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNUM3MDQxOTE5RUE1RjAw
RDhCM0UxIC8qIFNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaG91bGRLZWVwQ3VycmVudEJh
Y2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VDbGVhci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNkE4OTUxRDJGMUM3NzAwQzAwNEI2IC8q
IExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBMb2Nh
bFN0b3JhZ2VDbGVhci5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU1OSw2
ICsyNTYxLDcgQEAKIAkJCQk1MUI0NTRFQjFCNEUyMzZCMDA4NUVBQTYgLyogV2ViVmlld0Nsb3Nl
SW5zaWRlRGlkRmluaXNoTG9hZEZvckZyYW1lLm1tICovLAogCQkJCUMyRUIyREQxMTZDQUM3QUMw
MDlCNTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gKi8sCiAJCQkJ
MzdFMzhDMzMxNjlCN0QwMTAwODRDMjhDIC8qIFdlYlZpZXdEaWRSZW1vdmVGcmFtZUZyb21IaWVy
YXJjaHkubW0gKi8sCisJCQkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdlYlZpZXdJY29u
TG9hZGluZy5tbSAqLywKIAkJCQlDRTMyQzdDNzE4MTg0QzQ5MDBDRDhDMjggLyogV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMQ3Jhc2gubW0gKi8sCiAJCQkJMUE3QkZDMEExNzFBMEJEQjAw
QkM1RjY0IC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gKi8sCiAJCQkJQTVFMjAyNzIxNUIyMTgx
OTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tICovLApAQCAtMzEzNSw2
ICszMTM4LDcgQEAKIAkJCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGls
aXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0RDdCQ0Q4MUVBNTc4OTgwMEM0MjFE
MyAvKiBQb3NpdGlvbkluZm9ybWF0aW9uVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VBNjFBNDExQTBGMDA0NDdDNEMgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MURCMTZDRTFGMDg1MTM3MDAxRkE0QzUgLyogV2ViVmlld0ljb25Mb2FkaW5n
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTcxQTQxMUExMzAwNDQ3QzRDIC8qIFBsYXRm
b3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjI2MUE0MTFBRjYwMDQ0
N0M0QyAvKiBQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDMUFGNzk1MUU4RENC
QUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRp
bmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRpbmcu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0N2Y2N2YxM2JjCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvV2ViVmlld0lj
b25Mb2FkaW5nLm1tCkBAIC0wLDAgKzEsMjE3IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxXZWJLaXQv
V2ViRnJhbWVMb2FkRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU1N0cmluZyAqTWFpbkZyYW1lSWNvbktl
eVBhdGggPSBAIm1haW5GcmFtZUljb24iOworc3RhdGljIGJvb2wgbWVzc2FnZVJlY2VpdmVkID0g
ZmFsc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRGYXZpY29uSFRNTFtdID0KKyI8aHRt
bD4iIFwKKyI8L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3VzdG9tRmF2aWNvbkhUTUxb
XSA9CisiPGhlYWQ+IiBcCisiPGxpbmsgcmVsPVwiaWNvblwiIGhyZWY9XCJjdXN0b20uaWNvXCI+
IiBcCisiPC9oZWFkPiI7CisKK3N0YXRpYyBjaGFyKiBjdXJyZW50TWFpbkhUTUw7CitzdGF0aWMg
TlNEYXRhICptYWluUmVzb3VyY2VEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzTm9Db3B5Oih2b2lkKiljdXJyZW50TWFpbkhUTUwgbGVuZ3RoOnN0cmxlbihjdXJyZW50
TWFpbkhUTUwpIGZyZWVXaGVuRG9uZTpOT107Cit9CisKK3N0YXRpYyBOU0RhdGEgKmRlZmF1bHRG
YXZpY29uRGF0YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRo
Q29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNEYXRhICpjdXN0b21GYXZpY29uRGF0
YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJsYXJnZS1yZWQtc3F1YXJlIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRhIGRhdGFX
aXRoQ29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNJbWFnZSAqaW1hZ2VGcm9tRGF0
YShOU0RhdGEgKmRhdGEpCit7CisgICAgYXV0byAqaW1hZ2UgPSBbW05TSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoRGF0YTpkYXRhXTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgor
ICAgIFtpbWFnZSBzZXRTY2FsZXNXaGVuUmVzaXplZDpZRVNdOworI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHBvcAorICAgIFtpbWFnZSBzZXRTaXplOk5TTWFrZVNpemUoMTYsIDE2KV07CisKKyAg
ICByZXR1cm4gW2ltYWdlIGF1dG9yZWxlYXNlXTsKK30KKworQGludGVyZmFjZSBJY29uTG9hZGlu
Z1Byb3RvY29sIDogTlNVUkxQcm90b2NvbAorQGVuZAorCitAaW1wbGVtZW50YXRpb24gSWNvbkxv
YWRpbmdQcm90b2NvbAorCisrIChCT09MKWNhbkluaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdAoreworICAgIHJldHVybiBbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWw6QCJo
dHRwIl07Cit9CisKKysgKE5TVVJMUmVxdWVzdCAqKWNhbm9uaWNhbFJlcXVlc3RGb3JSZXF1ZXN0
OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy0g
KHZvaWQpc3RhcnRMb2FkaW5nCit7CisgICAgTlNEYXRhICpyZXNvdXJjZURhdGEgPSBuaWw7Cisg
ICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlOworCisgICAgaWYgKFtzZWxmLnJl
cXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAibWFpbiJdKSB7CisgICAgICAgIHJlc291cmNlRGF0
YSA9IG1haW5SZXNvdXJjZURhdGEoKTsKKyAgICAgICAgcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpA
InRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0xIHRleHRFbmNvZGluZ05hbWU6bmls
XSk7CisgICAgfSBlbHNlIGlmIChbc2VsZi5yZXF1ZXN0LlVSTC5wYXRoIGhhc1N1ZmZpeDpAImZh
dmljb24uaWNvIl0pIHsKKyAgICAgICAgcmVzb3VyY2VEYXRhID0gZGVmYXVsdEZhdmljb25EYXRh
KCk7CisgICAgICAgIHJlc3BvbnNlID0gYWRvcHROUyhbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnNlbGYucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJpbWFnZS9wbmciIGV4cGVjdGVk
Q29udGVudExlbmd0aDotMSB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgIH0gZWxzZSBpZiAo
W3NlbGYucmVxdWVzdC5VUkwucGF0aCBoYXNTdWZmaXg6QCJjdXN0b20uaWNvIl0pIHsKKyAgICAg
ICAgcmVzb3VyY2VEYXRhID0gY3VzdG9tRmF2aWNvbkRhdGEoKTsKKyAgICAgICAgcmVzcG9uc2Ug
PSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5yZXF1ZXN0
LlVSTCBNSU1FVHlwZTpAImltYWdlL3BuZyIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0xIHRleHRF
bmNvZGluZ05hbWU6bmlsXSk7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBkaWRSZWNl
aXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgY2FjaGVTdG9yYWdlUG9saWN5Ok5TVVJMQ2FjaGVT
dG9yYWdlTm90QWxsb3dlZF07CisgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNlbGYgZGlk
TG9hZERhdGE6cmVzb3VyY2VEYXRhXTsKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2xEaWRG
aW5pc2hMb2FkaW5nOnNlbGZdOworfQorCistICh2b2lkKXN0b3BMb2FkaW5nCit7Cit9CisKK0Bl
bmQKKworQGludGVyZmFjZSBJY29uTG9hZGluZ0ZyYW1lTG9hZERlbGVnYXRlIDogTlNPYmplY3Qg
PFdlYkZyYW1lTG9hZERlbGVnYXRlPgoreworQHB1YmxpYworICAgIFJldGFpblB0cjxOU0ltYWdl
PiByZWNlaXZlZEljb247Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBJY29uTG9hZGluZ0Zy
YW1lTG9hZERlbGVnYXRlCisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRS
ZWNlaXZlSWNvbjooTlNJbWFnZSAqKWltYWdlIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7
CisgICAgcmVjZWl2ZWRJY29uID0gaW1hZ2U7CisgICAgbWVzc2FnZVJlY2VpdmVkID0gdHJ1ZTsK
K30KKworQGVuZAorCitAaW50ZXJmYWNlIE1haW5GcmFtZUljb25LVk8gOiBOU09iamVjdAorewor
QHB1YmxpYworICAgIFJldGFpblB0cjxOU0ltYWdlPiBvbGRJbWFnZTsKKyAgICBSZXRhaW5QdHI8
TlNJbWFnZT4gZXhwZWN0ZWRJbWFnZTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE1haW5G
cmFtZUljb25LVk8KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZh
bHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAg
ICBBU1NFUlQoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOk1haW5GcmFtZUljb25LZXlQYXRoXSk7
CisgICAgQVNTRVJUKFtbb2JqZWN0IGNsYXNzXSBpc0VxdWFsOltXZWJWaWV3IGNsYXNzXV0pOwor
CisgICAgLy8gRklYTUU6IEFzIG1lbnRpb25lZCBpbiBhIEZJWE1FIGluIFdlYktpdDEgY29kZSB3
aGVuIHNlbmRpbmcgdGhlc2UgS1ZPIGV2ZW50cywgdGhlIG9sZCBpY29uIGlzIGFscmVhZHkgbG9z
dCBieSB0aGUgdGltZSB3ZSBzZW5kIHRoZSBldmVudC4KKyAgICAvLyBUaGUgYmVsb3cgbGluZSBz
aG91bGQgYWN0dWFsbHkgYmUgIkVYUEVDVF9UUlVFIiBvbmNlIHRoYXQgYnVnIGlzIGZpeGVkLgor
ICAgIEVYUEVDVF9GQUxTRShbW1tjaGFuZ2Ugb2JqZWN0Rm9yS2V5Ok5TS2V5VmFsdWVDaGFuZ2VP
bGRLZXldIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbb2xkSW1hZ2UgVElGRlJlcHJlc2Vu
dGF0aW9uXV0pOworICAgIEVYUEVDVF9UUlVFKFtbW2NoYW5nZSBvYmplY3RGb3JLZXk6TlNLZXlW
YWx1ZUNoYW5nZU5ld0tleV0gVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltleHBlY3RlZElt
YWdlIFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKyAgICBFWFBFQ1RfVFJVRShbWygoV2ViVmlldyAq
KW9iamVjdCkubWFpbkZyYW1lSWNvbiBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6W2V4cGVj
dGVkSW1hZ2UgVElGRlJlcHJlc2VudGF0aW9uXV0pOworCit9CisKK0BlbmQKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdlYktpdDEsIEljb25Mb2FkaW5nRGVsZWdhdGVEZWZh
dWx0KQoreworICAgIFtOU1VSTFByb3RvY29sIHJlZ2lzdGVyQ2xhc3M6W0ljb25Mb2FkaW5nUHJv
dG9jb2wgY2xhc3NdXTsKKworICAgIGN1cnJlbnRNYWluSFRNTCA9IChjaGFyKilkZWZhdWx0RmF2
aWNvbkhUTUw7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
MTIwLCAyMDApIGZyYW1lTmFtZTpuaWwgZ3JvdXBOYW1lOm5pbF0pOworICAgICAgICBhdXRvIGZy
YW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0ljb25Mb2FkaW5nRnJhbWVMb2FkRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKworICAgICAgICBhdXRvIGt2byA9IGFkb3B0TlMoW1tNYWluRnJhbWVJ
Y29uS1ZPIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGt2by0+b2xkSW1hZ2UgPSB3ZWJWaWV3Lmdl
dCgpLm1haW5GcmFtZUljb247CisgICAgICAgIGt2by0+ZXhwZWN0ZWRJbWFnZSA9IGltYWdlRnJv
bURhdGEoZGVmYXVsdEZhdmljb25EYXRhKCkpOworICAgICAgICBbd2ViVmlldy5nZXQoKSBhZGRP
YnNlcnZlcjprdm8uZ2V0KCkgZm9yS2V5UGF0aDpNYWluRnJhbWVJY29uS2V5UGF0aCBvcHRpb25z
Ok5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgfCBOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9u
T2xkIGNvbnRleHQ6bmlsXTsKKworICAgICAgICB3ZWJWaWV3LmdldCgpLmZyYW1lTG9hZERlbGVn
YXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7CisgICAgICAgIFt3ZWJWaWV3LmdldCgpLm1h
aW5GcmFtZSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovL3Rlc3RzZXJ2ZXIvbWFpbiJdXV07CisKKyAgICAgICAgVXRp
bDo6cnVuKCZtZXNzYWdlUmVjZWl2ZWQpOworCisgICAgICAgIEVYUEVDVF9UUlVFKFtbZnJhbWVM
b2FkRGVsZWdhdGUtPnJlY2VpdmVkSWNvbi5nZXQoKSBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1
YWw6W2ltYWdlRnJvbURhdGEoZGVmYXVsdEZhdmljb25EYXRhKCkpIFRJRkZSZXByZXNlbnRhdGlv
bl1dKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1t3ZWJWaWV3LmdldCgpLm1haW5GcmFtZUljb24g
VElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29u
RGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShbW2Zy
YW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJlc2VudGF0aW9uXSBp
c0VxdWFsOltpbWFnZUZyb21EYXRhKGN1c3RvbUZhdmljb25EYXRhKCkpIFRJRkZSZXByZXNlbnRh
dGlvbl1dKTsKKyAgICB9CisKKyAgICBbTlNVUkxQcm90b2NvbCB1bnJlZ2lzdGVyQ2xhc3M6W0lj
b25Mb2FkaW5nUHJvdG9jb2wgY2xhc3NdXTsKK30KKworVEVTVChXZWJLaXQxLCBJY29uTG9hZGlu
Z0RlbGVnYXRlQ3VzdG9tKQoreworICAgIFtOU1VSTFByb3RvY29sIHJlZ2lzdGVyQ2xhc3M6W0lj
b25Mb2FkaW5nUHJvdG9jb2wgY2xhc3NdXTsKKworICAgIGN1cnJlbnRNYWluSFRNTCA9IChjaGFy
KiljdXN0b21GYXZpY29uSFRNTDsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCAxMjAsIDIwMCkgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6bmlsXSk7CisgICAg
ICAgIGF1dG8gZnJhbWVMb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbSWNvbkxvYWRpbmdGcmFtZUxv
YWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAgICAgIGF1dG8ga3ZvID0gYWRvcHROUyhb
W01haW5GcmFtZUljb25LVk8gYWxsb2NdIGluaXRdKTsKKyAgICAgICAga3ZvLT5vbGRJbWFnZSA9
IHdlYlZpZXcuZ2V0KCkubWFpbkZyYW1lSWNvbjsKKyAgICAgICAga3ZvLT5leHBlY3RlZEltYWdl
ID0gaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKTsKKyAgICAgICAgW3dlYlZpZXcu
Z2V0KCkgYWRkT2JzZXJ2ZXI6a3ZvLmdldCgpIGZvcktleVBhdGg6TWFpbkZyYW1lSWNvbktleVBh
dGggb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IHwgTlNLZXlWYWx1ZU9ic2Vy
dmluZ09wdGlvbk9sZCBjb250ZXh0Om5pbF07CisKKyAgICAgICAgd2ViVmlldy5nZXQoKS5mcmFt
ZUxvYWREZWxlZ2F0ZSA9IGZyYW1lTG9hZERlbGVnYXRlLmdldCgpOworICAgICAgICBbd2ViVmll
dy5nZXQoKS5tYWluRnJhbWUgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly90ZXN0c2VydmVyL21haW4iXV1dOworCisg
ICAgICAgIFV0aWw6OnJ1bigmbWVzc2FnZVJlY2VpdmVkKTsKKworICAgICAgICBFWFBFQ1RfVFJV
RShbW2ZyYW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJlc2VudGF0
aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGN1c3RvbUZhdmljb25EYXRhKCkpIFRJRkZSZXBy
ZXNlbnRhdGlvbl1dKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1t3ZWJWaWV3LmdldCgpLm1haW5G
cmFtZUljb24gVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGN1c3Rv
bUZhdmljb25EYXRhKCkpIFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKFtbZnJhbWVMb2FkRGVsZWdhdGUtPnJlY2VpdmVkSWNvbi5nZXQoKSBUSUZGUmVwcmVzZW50
YXRpb25dIGlzRXF1YWw6W2ltYWdlRnJvbURhdGEoZGVmYXVsdEZhdmljb25EYXRhKCkpIFRJRkZS
ZXByZXNlbnRhdGlvbl1dKTsKKyAgICB9CisKKyAgICBbTlNVUkxQcm90b2NvbCB1bnJlZ2lzdGVy
Q2xhc3M6W0ljb25Mb2FkaW5nUHJvdG9jb2wgY2xhc3NdXTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314397</attachid>
            <date>2017-07-01 20:08:49 -0700</date>
            <delta_ts>2017-07-01 20:11:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15996</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMGYz
NDZjY2RkYS4uNWM4OGU4NDUwODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wNy0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGZvciBhbGwgcGFy
dHMgb2YgV2ViS2l0MSBBUEkgcmVsYXRlZCB0byBmYXZpY29ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDA2OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIHR3byBBUEkgdGVzdHMgY292ZXIg
YWxsIFdlYktpdDEgQVBJIHJlbGF0ZWQgdG8gaWNvbnMuCisgICAgICAgIAorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdJY29uTG9hZGluZy5tbTogQWRk
ZWQuCisgICAgICAgIChtYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKGRlZmF1bHRGYXZpY29u
RGF0YSk6CisgICAgICAgIChjdXN0b21GYXZpY29uRGF0YSk6CisgICAgICAgIChpbWFnZUZyb21E
YXRhKToKKyAgICAgICAgKCtbSWNvbkxvYWRpbmdQcm90b2NvbCBjYW5Jbml0V2l0aFJlcXVlc3Q6
XSk6CisgICAgICAgICgrW0ljb25Mb2FkaW5nUHJvdG9jb2wgY2Fub25pY2FsUmVxdWVzdEZvclJl
cXVlc3Q6XSk6CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RhcnRMb2FkaW5nXSk6
CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RvcExvYWRpbmddKToKKyAgICAgICAg
KC1bSWNvbkxvYWRpbmdGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVJY29uOmZv
ckZyYW1lOl0pOgorICAgICAgICAoLVtNYWluRnJhbWVJY29uS1ZPIG9ic2VydmVWYWx1ZUZvcktl
eVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRleHQ6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxNy0wNy0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlcGxhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIEMgQVBJIHdpdGgg
Q29jb2EgU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ1NGNhOWZhNjE3Li5hNGUyMjFm
NDcyYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NSw2ICsxNzUsNyBAQAogCQk1MUNE
MUM3MjFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13
aW5kb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1h
Ym91dC1ibGFuay13aW5kb3cuaHRtbCAqLzsgfTsKIAkJNTFEMTI0OTgxRTc2M0IwMjAwMkIyODIw
IC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFEMTI0OTcxRTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0
b3JlLm1tICovOyB9OwogCQk1MUQxMjQ5QjFFNzg1NDI1MDAyQjI4MjAgLyogQ29va2llTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkYz
RjI5MDEzMzQyRkVCMDBBNkJGMTkgLyogQ29va2llTWFuYWdlci5jcHAgKi87IH07CisJCTUxREIx
NkNFMUYwODUxMzcwMDFGQTRDNSAvKiBXZWJWaWV3SWNvbkxvYWRpbmcubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURCMTZDRDFGMDg1MDQ3MDAxRkE0
QzUgLyogV2ViVmlld0ljb25Mb2FkaW5nLm1tICovOyB9OwogCQk1MUU1QzcwMjE5MTlDM0IyMDBE
OEIzRTEgLyogc2ltcGxlMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTc4MDM2MTkxOUFGRjgwMDE4MjlBMiAvKiBzaW1wbGUyLmh0
bWwgKi87IH07CiAJCTUxRTVDNzAzMTkxOUMzQjIwMEQ4QjNFMSAvKiBzaW1wbGUzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNzgw
MzcxOTE5QUZGODAwMTgyOUEyIC8qIHNpbXBsZTMuaHRtbCAqLzsgfTsKIAkJNTFFNkE4OTQxRDJG
MUMwQTAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8qIExv
Y2FsU3RvcmFnZUNsZWFyLm1tICovOyB9OwpAQCAtMTE5OSw2ICsxMjAwLDcgQEAKIAkJNTFDRDFD
NkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxBbGVydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxQ0QxQzcxMUIzOEQ0ODQwMDE0MkNBNSAvKiBtb2RhbC1hbGVydHMtaW4tbmV3
LWFib3V0LWJsYW5rLXdpbmRvdy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vZGFsLWFsZXJ0cy1pbi1uZXct
YWJvdXQtYmxhbmstd2luZG93Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUQxMjQ5NzFFNzYzQUY4MDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3RvcmUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdl
YlZpZXdJY29uTG9hZGluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdJY29uTG9h
ZGluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNUM3MDQxOTE5RUE1RjAw
RDhCM0UxIC8qIFNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaG91bGRLZWVwQ3VycmVudEJh
Y2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VDbGVhci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNkE4OTUxRDJGMUM3NzAwQzAwNEI2IC8q
IExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBMb2Nh
bFN0b3JhZ2VDbGVhci5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU1OSw2
ICsyNTYxLDcgQEAKIAkJCQk1MUI0NTRFQjFCNEUyMzZCMDA4NUVBQTYgLyogV2ViVmlld0Nsb3Nl
SW5zaWRlRGlkRmluaXNoTG9hZEZvckZyYW1lLm1tICovLAogCQkJCUMyRUIyREQxMTZDQUM3QUMw
MDlCNTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gKi8sCiAJCQkJ
MzdFMzhDMzMxNjlCN0QwMTAwODRDMjhDIC8qIFdlYlZpZXdEaWRSZW1vdmVGcmFtZUZyb21IaWVy
YXJjaHkubW0gKi8sCisJCQkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdlYlZpZXdJY29u
TG9hZGluZy5tbSAqLywKIAkJCQlDRTMyQzdDNzE4MTg0QzQ5MDBDRDhDMjggLyogV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMQ3Jhc2gubW0gKi8sCiAJCQkJMUE3QkZDMEExNzFBMEJEQjAw
QkM1RjY0IC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gKi8sCiAJCQkJQTVFMjAyNzIxNUIyMTgx
OTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tICovLApAQCAtMzEzNSw2
ICszMTM4LDcgQEAKIAkJCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGls
aXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0RDdCQ0Q4MUVBNTc4OTgwMEM0MjFE
MyAvKiBQb3NpdGlvbkluZm9ybWF0aW9uVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VBNjFBNDExQTBGMDA0NDdDNEMgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MURCMTZDRTFGMDg1MTM3MDAxRkE0QzUgLyogV2ViVmlld0ljb25Mb2FkaW5n
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTcxQTQxMUExMzAwNDQ3QzRDIC8qIFBsYXRm
b3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjI2MUE0MTFBRjYwMDQ0
N0M0QyAvKiBQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDMUFGNzk1MUU4RENC
QUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRp
bmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRpbmcu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkODJjOGNjZmU1Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvV2ViVmlld0lj
b25Mb2FkaW5nLm1tCkBAIC0wLDAgKzEsMjQyIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxXZWJLaXQv
V2ViRnJhbWVMb2FkRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU1N0cmluZyAqTWFpbkZyYW1lSWNvbktl
eVBhdGggPSBAIm1haW5GcmFtZUljb24iOworc3RhdGljIGJvb2wgbWVzc2FnZVJlY2VpdmVkID0g
ZmFsc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRGYXZpY29uSFRNTFtdID0KKyI8aHRt
bD4iIFwKKyI8L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3VzdG9tRmF2aWNvbkhUTUxb
XSA9CisiPGhlYWQ+IiBcCisiPGxpbmsgcmVsPVwiaWNvblwiIGhyZWY9XCJjdXN0b20uaWNvXCI+
IiBcCisiPC9oZWFkPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjdXJyZW50TWFpbkhUTUw7Citz
dGF0aWMgTlNEYXRhICptYWluUmVzb3VyY2VEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0YSBk
YXRhV2l0aEJ5dGVzTm9Db3B5Oih2b2lkKiljdXJyZW50TWFpbkhUTUwgbGVuZ3RoOnN0cmxlbihj
dXJyZW50TWFpbkhUTUwpIGZyZWVXaGVuRG9uZTpOT107Cit9CisKK3N0YXRpYyBOU0RhdGEgKmRl
ZmF1bHRGYXZpY29uRGF0YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRhIGRh
dGFXaXRoQ29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNEYXRhICpjdXN0b21GYXZp
Y29uRGF0YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJsYXJnZS1yZWQtc3F1YXJlIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRh
IGRhdGFXaXRoQ29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNJbWFnZSAqaW1hZ2VG
cm9tRGF0YShOU0RhdGEgKmRhdGEpCit7CisgICAgYXV0byAqaW1hZ2UgPSBbW05TSW1hZ2UgYWxs
b2NdIGluaXRXaXRoRGF0YTpkYXRhXTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zIgorICAgIFtpbWFnZSBzZXRTY2FsZXNXaGVuUmVzaXplZDpZRVNdOworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorICAgIFtpbWFnZSBzZXRTaXplOk5TTWFrZVNpemUoMTYsIDE2KV07
CisKKyAgICByZXR1cm4gW2ltYWdlIGF1dG9yZWxlYXNlXTsKK30KKworQGludGVyZmFjZSBJY29u
TG9hZGluZ1Byb3RvY29sIDogTlNVUkxQcm90b2NvbAorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
SWNvbkxvYWRpbmdQcm90b2NvbAorCisrIChCT09MKWNhbkluaXRXaXRoUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdAoreworICAgIHJldHVybiBbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1
YWw6QCJodHRwIl07Cit9CisKKysgKE5TVVJMUmVxdWVzdCAqKWNhbm9uaWNhbFJlcXVlc3RGb3JS
ZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKKy0gKHZvaWQpc3RhcnRMb2FkaW5nCit7CisgICAgTlNEYXRhICpyZXNvdXJjZURhdGEgPSBu
aWw7CisgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlOworCisgICAgaWYgKFtz
ZWxmLnJlcXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAibWFpbiJdKSB7CisgICAgICAgIHJlc291
cmNlRGF0YSA9IG1haW5SZXNvdXJjZURhdGEoKTsKKyAgICAgICAgcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5yZXF1ZXN0LlVSTCBNSU1F
VHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0xIHRleHRFbmNvZGluZ05h
bWU6bmlsXSk7CisgICAgfSBlbHNlIGlmIChbc2VsZi5yZXF1ZXN0LlVSTC5wYXRoIGhhc1N1ZmZp
eDpAImZhdmljb24uaWNvIl0pIHsKKyAgICAgICAgcmVzb3VyY2VEYXRhID0gZGVmYXVsdEZhdmlj
b25EYXRhKCk7CisgICAgICAgIHJlc3BvbnNlID0gYWRvcHROUyhbW05TVVJMUmVzcG9uc2UgYWxs
b2NdIGluaXRXaXRoVVJMOnNlbGYucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJpbWFnZS9wbmciIGV4
cGVjdGVkQ29udGVudExlbmd0aDotMSB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgIH0gZWxz
ZSBpZiAoW3NlbGYucmVxdWVzdC5VUkwucGF0aCBoYXNTdWZmaXg6QCJjdXN0b20uaWNvIl0pIHsK
KyAgICAgICAgcmVzb3VyY2VEYXRhID0gY3VzdG9tRmF2aWNvbkRhdGEoKTsKKyAgICAgICAgcmVz
cG9uc2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5y
ZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImltYWdlL3BuZyIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0x
IHRleHRFbmNvZGluZ05hbWU6bmlsXSk7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBk
aWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgY2FjaGVTdG9yYWdlUG9saWN5Ok5TVVJM
Q2FjaGVTdG9yYWdlTm90QWxsb3dlZF07CisgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNl
bGYgZGlkTG9hZERhdGE6cmVzb3VyY2VEYXRhXTsKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9j
b2xEaWRGaW5pc2hMb2FkaW5nOnNlbGZdOworfQorCistICh2b2lkKXN0b3BMb2FkaW5nCit7Cit9
CisKK0BlbmQKKworQGludGVyZmFjZSBJY29uTG9hZGluZ0ZyYW1lTG9hZERlbGVnYXRlIDogTlNP
YmplY3QgPFdlYkZyYW1lTG9hZERlbGVnYXRlPiB7CitAcHVibGljCisgICAgUmV0YWluUHRyPE5T
SW1hZ2U+IHJlY2VpdmVkSWNvbjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEljb25Mb2Fk
aW5nRnJhbWVMb2FkRGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IGRpZFJlY2VpdmVJY29uOihOU0ltYWdlICopaW1hZ2UgZm9yRnJhbWU6KFdlYkZyYW1lICopZnJh
bWUKK3sKKyAgICByZWNlaXZlZEljb24gPSBpbWFnZTsKKyAgICBtZXNzYWdlUmVjZWl2ZWQgPSB0
cnVlOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgTWFpbkZyYW1lSWNvbktWTyA6IE5TT2JqZWN0
IHsKK0BwdWJsaWMKKyAgICBSZXRhaW5QdHI8TlNJbWFnZT4gb2xkSW1hZ2U7CisgICAgUmV0YWlu
UHRyPE5TSW1hZ2U+IGV4cGVjdGVkSW1hZ2U7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBN
YWluRnJhbWVJY29uS1ZPCisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJp
bmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Cit7CisgICAgQVNT
RVJUKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpNYWluRnJhbWVJY29uS2V5UGF0aF0pOworICAg
IEFTU0VSVChbW29iamVjdCBjbGFzc10gaXNFcXVhbDpbV2ViVmlldyBjbGFzc11dKTsKKworICAg
IC8vIEZJWE1FOiBBcyBtZW50aW9uZWQgaW4gYSBGSVhNRSBpbiBXZWJLaXQxIGNvZGUgd2hlbiBz
ZW5kaW5nIHRoZXNlIEtWTyBldmVudHMsIHRoZSBvbGQgaWNvbiBpcyBhbHJlYWR5IGxvc3QgYnkg
dGhlIHRpbWUgd2Ugc2VuZCB0aGUgZXZlbnQuCisgICAgLy8gVGhlIGJlbG93IGxpbmUgc2hvdWxk
IGFjdHVhbGx5IGJlICJFWFBFQ1RfVFJVRSIgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KKyAgICBF
WFBFQ1RfRkFMU0UoW1tbY2hhbmdlIG9iamVjdEZvcktleTpOU0tleVZhbHVlQ2hhbmdlT2xkS2V5
XSBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6W29sZEltYWdlIFRJRkZSZXByZXNlbnRhdGlv
bl1dKTsKKyAgICBFWFBFQ1RfVFJVRShbW1tjaGFuZ2Ugb2JqZWN0Rm9yS2V5Ok5TS2V5VmFsdWVD
aGFuZ2VOZXdLZXldIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbZXhwZWN0ZWRJbWFnZSBU
SUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgRVhQRUNUX1RSVUUoW1soKFdlYlZpZXcgKilvYmpl
Y3QpLm1haW5GcmFtZUljb24gVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltleHBlY3RlZElt
YWdlIFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKworfQorCitAZW5kCisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworVEVTVChXZWJLaXQxLCBJY29uTG9hZGluZ0RlbGVnYXRlRGVmYXVsdEZp
cnN0KQoreworICAgIFtOU1VSTFByb3RvY29sIHJlZ2lzdGVyQ2xhc3M6W0ljb25Mb2FkaW5nUHJv
dG9jb2wgY2xhc3NdXTsKKworICAgIGN1cnJlbnRNYWluSFRNTCA9IGRlZmF1bHRGYXZpY29uSFRN
TDsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAxMjAsIDIw
MCkgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6bmlsXSk7CisgICAgICAgIGF1dG8gZnJhbWVMb2Fk
RGVsZWdhdGUgPSBhZG9wdE5TKFtbSWNvbkxvYWRpbmdGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworCisgICAgICAgIGF1dG8ga3ZvID0gYWRvcHROUyhbW01haW5GcmFtZUljb25LVk8g
YWxsb2NdIGluaXRdKTsKKyAgICAgICAga3ZvLT5vbGRJbWFnZSA9IHdlYlZpZXcuZ2V0KCkubWFp
bkZyYW1lSWNvbjsKKyAgICAgICAga3ZvLT5leHBlY3RlZEltYWdlID0gaW1hZ2VGcm9tRGF0YShk
ZWZhdWx0RmF2aWNvbkRhdGEoKSk7CisgICAgICAgIFt3ZWJWaWV3LmdldCgpIGFkZE9ic2VydmVy
Omt2by5nZXQoKSBmb3JLZXlQYXRoOk1haW5GcmFtZUljb25LZXlQYXRoIG9wdGlvbnM6TlNLZXlW
YWx1ZU9ic2VydmluZ09wdGlvbk5ldyB8IE5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25PbGQgY29u
dGV4dDpuaWxdOworCisgICAgICAgIHdlYlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSBm
cmFtZUxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgW3dlYlZpZXcuZ2V0KCkubWFpbkZyYW1l
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vdGVzdHNlcnZlci8xL21haW4iXV1dOworCisgICAgICAgIFV0aWw6OnJ1
bigmbWVzc2FnZVJlY2VpdmVkKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShbW2ZyYW1lTG9hZERl
bGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltp
bWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtbd2ViVmlldy5nZXQoKS5tYWluRnJhbWVJY29uIFRJRkZS
ZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2aWNvbkRhdGEo
KSkgVElGRlJlcHJlc2VudGF0aW9uXV0pOworICAgICAgICBFWFBFQ1RfRkFMU0UoW1tmcmFtZUxv
YWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdldCgpIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVh
bDpbaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25d
XSk7CisKKyAgICAgICAgLy8gTm93IGxvYWQgdGhlIG5leHQgcGFnZSB3aGljaCBzaG91bGQgaGF2
ZSBhIGN1c3RvbSBpY29uIGFuZCBtYWtlIHN1cmUgdGhpbmdzIGFyZSBhcyBleHBlY3RlZC4KKyAg
ICAgICAgbWVzc2FnZVJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIGt2by0+b2xkSW1hZ2UgPSBp
bWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgpKTs7CisgICAgICAgIGt2by0+ZXhwZWN0
ZWRJbWFnZSA9IGltYWdlRnJvbURhdGEoY3VzdG9tRmF2aWNvbkRhdGEoKSk7CisgICAgICAgIGN1
cnJlbnRNYWluSFRNTCA9IGN1c3RvbUZhdmljb25IVE1MOworICAgICAgICBbd2ViVmlldy5nZXQo
KS5tYWluRnJhbWUgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly90ZXN0c2VydmVyLzIvbWFpbiJdXV07CisKKyAgICAg
ICAgVXRpbDo6cnVuKCZtZXNzYWdlUmVjZWl2ZWQpOworCisgICAgICAgIEVYUEVDVF9UUlVFKFtb
ZnJhbWVMb2FkRGVsZWdhdGUtPnJlY2VpdmVkSWNvbi5nZXQoKSBUSUZGUmVwcmVzZW50YXRpb25d
IGlzRXF1YWw6W2ltYWdlRnJvbURhdGEoY3VzdG9tRmF2aWNvbkRhdGEoKSkgVElGRlJlcHJlc2Vu
dGF0aW9uXV0pOworICAgICAgICBFWFBFQ1RfVFJVRShbW3dlYlZpZXcuZ2V0KCkubWFpbkZyYW1l
SWNvbiBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6W2ltYWdlRnJvbURhdGEoY3VzdG9tRmF2
aWNvbkRhdGEoKSkgVElGRlJlcHJlc2VudGF0aW9uXV0pOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
W1tmcmFtZUxvYWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdldCgpIFRJRkZSZXByZXNlbnRhdGlv
bl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2aWNvbkRhdGEoKSkgVElGRlJlcHJl
c2VudGF0aW9uXV0pOworCisgICAgfQorCisgICAgW05TVVJMUHJvdG9jb2wgdW5yZWdpc3RlckNs
YXNzOltJY29uTG9hZGluZ1Byb3RvY29sIGNsYXNzXV07Cit9CisKK1RFU1QoV2ViS2l0MSwgSWNv
bkxvYWRpbmdEZWxlZ2F0ZUN1c3RvbUZpcnN0KQoreworICAgIFtOU1VSTFByb3RvY29sIHJlZ2lz
dGVyQ2xhc3M6W0ljb25Mb2FkaW5nUHJvdG9jb2wgY2xhc3NdXTsKKworICAgIGN1cnJlbnRNYWlu
SFRNTCA9IGN1c3RvbUZhdmljb25IVE1MOworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpuaWxdKTsK
KyAgICAgICAgYXV0byBmcmFtZUxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJY29uTG9hZGluZ0Zy
YW1lTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisKKyAgICAgICAgYXV0byBrdm8gPSBhZG9w
dE5TKFtbTWFpbkZyYW1lSWNvbktWTyBhbGxvY10gaW5pdF0pOworICAgICAgICBrdm8tPm9sZElt
YWdlID0gd2ViVmlldy5nZXQoKS5tYWluRnJhbWVJY29uOworICAgICAgICBrdm8tPmV4cGVjdGVk
SW1hZ2UgPSBpbWFnZUZyb21EYXRhKGN1c3RvbUZhdmljb25EYXRhKCkpOworICAgICAgICBbd2Vi
Vmlldy5nZXQoKSBhZGRPYnNlcnZlcjprdm8uZ2V0KCkgZm9yS2V5UGF0aDpNYWluRnJhbWVJY29u
S2V5UGF0aCBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgfCBOU0tleVZhbHVl
T2JzZXJ2aW5nT3B0aW9uT2xkIGNvbnRleHQ6bmlsXTsKKworICAgICAgICB3ZWJWaWV3LmdldCgp
LmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7CisgICAgICAgIFt3
ZWJWaWV3LmdldCgpLm1haW5GcmFtZSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3Rlc3RzZXJ2ZXIvMS9tYWluIl1d
XTsKKworICAgICAgICBVdGlsOjpydW4oJm1lc3NhZ2VSZWNlaXZlZCk7CisKKyAgICAgICAgRVhQ
RUNUX1RSVUUoW1tmcmFtZUxvYWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdldCgpIFRJRkZSZXBy
ZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKSBU
SUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtbd2ViVmlldy5nZXQo
KS5tYWluRnJhbWVJY29uIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0
YShjdXN0b21GYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShbW2ZyYW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJl
cHJlc2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgp
KSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisKKyAgICAgICAgLy8gTm93IGxvYWQgdGhlIG5leHQg
cGFnZSB3aGljaCBzaG91bGQgaGF2ZSB0aGUgZGVmYXVsdCBpY29uIGFuZCBtYWtlIHN1cmUgdGhp
bmdzIGFyZSBhcyBleHBlY3RlZC4KKyAgICAgICAgbWVzc2FnZVJlY2VpdmVkID0gZmFsc2U7Cisg
ICAgICAgIGt2by0+b2xkSW1hZ2UgPSBpbWFnZUZyb21EYXRhKGN1c3RvbUZhdmljb25EYXRhKCkp
OzsKKyAgICAgICAga3ZvLT5leHBlY3RlZEltYWdlID0gaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2
aWNvbkRhdGEoKSk7CisgICAgICAgIGN1cnJlbnRNYWluSFRNTCA9IGRlZmF1bHRGYXZpY29uSFRN
TDsKKyAgICAgICAgW3dlYlZpZXcuZ2V0KCkubWFpbkZyYW1lIGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vdGVzdHNl
cnZlci8yL21haW4iXV1dOworCisgICAgICAgIFV0aWw6OnJ1bigmbWVzc2FnZVJlY2VpdmVkKTsK
KworICAgICAgICBFWFBFQ1RfVFJVRShbW2ZyYW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24u
Z2V0KCkgVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGRlZmF1bHRG
YXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KFtbd2ViVmlldy5nZXQoKS5tYWluRnJhbWVJY29uIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVh
bDpbaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2aWNvbkRhdGEoKSkgVElGRlJlcHJlc2VudGF0aW9u
XV0pOworICAgICAgICBFWFBFQ1RfRkFMU0UoW1tmcmFtZUxvYWREZWxlZ2F0ZS0+cmVjZWl2ZWRJ
Y29uLmdldCgpIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShjdXN0
b21GYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgfQorCisgICAgW05T
VVJMUHJvdG9jb2wgdW5yZWdpc3RlckNsYXNzOltJY29uTG9hZGluZ1Byb3RvY29sIGNsYXNzXV07
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314398</attachid>
            <date>2017-07-01 20:11:52 -0700</date>
            <delta_ts>2017-07-02 12:39:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15994</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMGYz
NDZjY2RkYS4uNWM4OGU4NDUwODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wNy0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGZvciBhbGwgcGFy
dHMgb2YgV2ViS2l0MSBBUEkgcmVsYXRlZCB0byBmYXZpY29ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDA2OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIHR3byBBUEkgdGVzdHMgY292ZXIg
YWxsIFdlYktpdDEgQVBJIHJlbGF0ZWQgdG8gaWNvbnMuCisgICAgICAgIAorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdJY29uTG9hZGluZy5tbTogQWRk
ZWQuCisgICAgICAgIChtYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKGRlZmF1bHRGYXZpY29u
RGF0YSk6CisgICAgICAgIChjdXN0b21GYXZpY29uRGF0YSk6CisgICAgICAgIChpbWFnZUZyb21E
YXRhKToKKyAgICAgICAgKCtbSWNvbkxvYWRpbmdQcm90b2NvbCBjYW5Jbml0V2l0aFJlcXVlc3Q6
XSk6CisgICAgICAgICgrW0ljb25Mb2FkaW5nUHJvdG9jb2wgY2Fub25pY2FsUmVxdWVzdEZvclJl
cXVlc3Q6XSk6CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RhcnRMb2FkaW5nXSk6
CisgICAgICAgICgtW0ljb25Mb2FkaW5nUHJvdG9jb2wgc3RvcExvYWRpbmddKToKKyAgICAgICAg
KC1bSWNvbkxvYWRpbmdGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVJY29uOmZv
ckZyYW1lOl0pOgorICAgICAgICAoLVtNYWluRnJhbWVJY29uS1ZPIG9ic2VydmVWYWx1ZUZvcktl
eVBhdGg6b2ZPYmplY3Q6Y2hhbmdlOmNvbnRleHQ6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxNy0wNy0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlcGxhY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIEMgQVBJIHdpdGgg
Q29jb2EgU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ1NGNhOWZhNjE3Li5hNGUyMjFm
NDcyYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NSw2ICsxNzUsNyBAQAogCQk1MUNE
MUM3MjFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13
aW5kb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1h
Ym91dC1ibGFuay13aW5kb3cuaHRtbCAqLzsgfTsKIAkJNTFEMTI0OTgxRTc2M0IwMjAwMkIyODIw
IC8qIFdLSFRUUENvb2tpZVN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFEMTI0OTcxRTc2M0FGODAwMkIyODIwIC8qIFdLSFRUUENvb2tpZVN0
b3JlLm1tICovOyB9OwogCQk1MUQxMjQ5QjFFNzg1NDI1MDAyQjI4MjAgLyogQ29va2llTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkYz
RjI5MDEzMzQyRkVCMDBBNkJGMTkgLyogQ29va2llTWFuYWdlci5jcHAgKi87IH07CisJCTUxREIx
NkNFMUYwODUxMzcwMDFGQTRDNSAvKiBXZWJWaWV3SWNvbkxvYWRpbmcubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURCMTZDRDFGMDg1MDQ3MDAxRkE0
QzUgLyogV2ViVmlld0ljb25Mb2FkaW5nLm1tICovOyB9OwogCQk1MUU1QzcwMjE5MTlDM0IyMDBE
OEIzRTEgLyogc2ltcGxlMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTc4MDM2MTkxOUFGRjgwMDE4MjlBMiAvKiBzaW1wbGUyLmh0
bWwgKi87IH07CiAJCTUxRTVDNzAzMTkxOUMzQjIwMEQ4QjNFMSAvKiBzaW1wbGUzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNzgw
MzcxOTE5QUZGODAwMTgyOUEyIC8qIHNpbXBsZTMuaHRtbCAqLzsgfTsKIAkJNTFFNkE4OTQxRDJG
MUMwQTAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8qIExv
Y2FsU3RvcmFnZUNsZWFyLm1tICovOyB9OwpAQCAtMTE5OSw2ICsxMjAwLDcgQEAKIAkJNTFDRDFD
NkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxlcnRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kYWxBbGVydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxQ0QxQzcxMUIzOEQ0ODQwMDE0MkNBNSAvKiBtb2RhbC1hbGVydHMtaW4tbmV3
LWFib3V0LWJsYW5rLXdpbmRvdy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vZGFsLWFsZXJ0cy1pbi1uZXct
YWJvdXQtYmxhbmstd2luZG93Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUQxMjQ5NzFFNzYzQUY4MDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3RvcmUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0hUVFBDb29raWVTdG9yZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdl
YlZpZXdJY29uTG9hZGluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdJY29uTG9h
ZGluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNUM3MDQxOTE5RUE1RjAw
RDhCM0UxIC8qIFNob3VsZEtlZXBDdXJyZW50QmFja0ZvcndhcmRMaXN0SXRlbUluTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaG91bGRLZWVwQ3VycmVudEJh
Y2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VDbGVhci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFNkE4OTUxRDJGMUM3NzAwQzAwNEI2IC8q
IExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBMb2Nh
bFN0b3JhZ2VDbGVhci5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU1OSw2
ICsyNTYxLDcgQEAKIAkJCQk1MUI0NTRFQjFCNEUyMzZCMDA4NUVBQTYgLyogV2ViVmlld0Nsb3Nl
SW5zaWRlRGlkRmluaXNoTG9hZEZvckZyYW1lLm1tICovLAogCQkJCUMyRUIyREQxMTZDQUM3QUMw
MDlCNTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gKi8sCiAJCQkJ
MzdFMzhDMzMxNjlCN0QwMTAwODRDMjhDIC8qIFdlYlZpZXdEaWRSZW1vdmVGcmFtZUZyb21IaWVy
YXJjaHkubW0gKi8sCisJCQkJNTFEQjE2Q0QxRjA4NTA0NzAwMUZBNEM1IC8qIFdlYlZpZXdJY29u
TG9hZGluZy5tbSAqLywKIAkJCQlDRTMyQzdDNzE4MTg0QzQ5MDBDRDhDMjggLyogV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMQ3Jhc2gubW0gKi8sCiAJCQkJMUE3QkZDMEExNzFBMEJEQjAw
QkM1RjY0IC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gKi8sCiAJCQkJQTVFMjAyNzIxNUIyMTgx
OTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tICovLApAQCAtMzEzNSw2
ICszMTM4LDcgQEAKIAkJCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGls
aXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0RDdCQ0Q4MUVBNTc4OTgwMEM0MjFE
MyAvKiBQb3NpdGlvbkluZm9ybWF0aW9uVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VBNjFBNDExQTBGMDA0NDdDNEMgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MURCMTZDRTFGMDg1MTM3MDAxRkE0QzUgLyogV2ViVmlld0ljb25Mb2FkaW5n
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTcxQTQxMUExMzAwNDQ3QzRDIC8qIFBsYXRm
b3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjI2MUE0MTFBRjYwMDQ0
N0M0QyAvKiBQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDMUFGNzk1MUU4RENC
QUIwMDI2NDVCOSAvKiBQcmVwYXJlRm9yTW92ZVRvV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRp
bmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3SWNvbkxvYWRpbmcu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkODJjOGNjZmU1Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvV2ViVmlld0lj
b25Mb2FkaW5nLm1tCkBAIC0wLDAgKzEsMjQyIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxXZWJLaXQv
V2ViRnJhbWVMb2FkRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU1N0cmluZyAqTWFpbkZyYW1lSWNvbktl
eVBhdGggPSBAIm1haW5GcmFtZUljb24iOworc3RhdGljIGJvb2wgbWVzc2FnZVJlY2VpdmVkID0g
ZmFsc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRGYXZpY29uSFRNTFtdID0KKyI8aHRt
bD4iIFwKKyI8L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3VzdG9tRmF2aWNvbkhUTUxb
XSA9CisiPGhlYWQ+IiBcCisiPGxpbmsgcmVsPVwiaWNvblwiIGhyZWY9XCJjdXN0b20uaWNvXCI+
IiBcCisiPC9oZWFkPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjdXJyZW50TWFpbkhUTUw7Citz
dGF0aWMgTlNEYXRhICptYWluUmVzb3VyY2VEYXRhKCkKK3sKKyAgICByZXR1cm4gW05TRGF0YSBk
YXRhV2l0aEJ5dGVzTm9Db3B5Oih2b2lkKiljdXJyZW50TWFpbkhUTUwgbGVuZ3RoOnN0cmxlbihj
dXJyZW50TWFpbkhUTUwpIGZyZWVXaGVuRG9uZTpOT107Cit9CisKK3N0YXRpYyBOU0RhdGEgKmRl
ZmF1bHRGYXZpY29uRGF0YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRhIGRh
dGFXaXRoQ29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNEYXRhICpjdXN0b21GYXZp
Y29uRGF0YSgpCit7CisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJsYXJnZS1yZWQtc3F1YXJlIiB3aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNEYXRh
IGRhdGFXaXRoQ29udGVudHNPZlVSTDp1cmxdOworfQorCitzdGF0aWMgTlNJbWFnZSAqaW1hZ2VG
cm9tRGF0YShOU0RhdGEgKmRhdGEpCit7CisgICAgYXV0byAqaW1hZ2UgPSBbW05TSW1hZ2UgYWxs
b2NdIGluaXRXaXRoRGF0YTpkYXRhXTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zIgorICAgIFtpbWFnZSBzZXRTY2FsZXNXaGVuUmVzaXplZDpZRVNdOworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorICAgIFtpbWFnZSBzZXRTaXplOk5TTWFrZVNpemUoMTYsIDE2KV07
CisKKyAgICByZXR1cm4gW2ltYWdlIGF1dG9yZWxlYXNlXTsKK30KKworQGludGVyZmFjZSBJY29u
TG9hZGluZ1Byb3RvY29sIDogTlNVUkxQcm90b2NvbAorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
SWNvbkxvYWRpbmdQcm90b2NvbAorCisrIChCT09MKWNhbkluaXRXaXRoUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdAoreworICAgIHJldHVybiBbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1
YWw6QCJodHRwIl07Cit9CisKKysgKE5TVVJMUmVxdWVzdCAqKWNhbm9uaWNhbFJlcXVlc3RGb3JS
ZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Cit7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKKy0gKHZvaWQpc3RhcnRMb2FkaW5nCit7CisgICAgTlNEYXRhICpyZXNvdXJjZURhdGEgPSBu
aWw7CisgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlOworCisgICAgaWYgKFtz
ZWxmLnJlcXVlc3QuVVJMLnBhdGggaGFzU3VmZml4OkAibWFpbiJdKSB7CisgICAgICAgIHJlc291
cmNlRGF0YSA9IG1haW5SZXNvdXJjZURhdGEoKTsKKyAgICAgICAgcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5yZXF1ZXN0LlVSTCBNSU1F
VHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0xIHRleHRFbmNvZGluZ05h
bWU6bmlsXSk7CisgICAgfSBlbHNlIGlmIChbc2VsZi5yZXF1ZXN0LlVSTC5wYXRoIGhhc1N1ZmZp
eDpAImZhdmljb24uaWNvIl0pIHsKKyAgICAgICAgcmVzb3VyY2VEYXRhID0gZGVmYXVsdEZhdmlj
b25EYXRhKCk7CisgICAgICAgIHJlc3BvbnNlID0gYWRvcHROUyhbW05TVVJMUmVzcG9uc2UgYWxs
b2NdIGluaXRXaXRoVVJMOnNlbGYucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJpbWFnZS9wbmciIGV4
cGVjdGVkQ29udGVudExlbmd0aDotMSB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgIH0gZWxz
ZSBpZiAoW3NlbGYucmVxdWVzdC5VUkwucGF0aCBoYXNTdWZmaXg6QCJjdXN0b20uaWNvIl0pIHsK
KyAgICAgICAgcmVzb3VyY2VEYXRhID0gY3VzdG9tRmF2aWNvbkRhdGEoKTsKKyAgICAgICAgcmVz
cG9uc2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6c2VsZi5y
ZXF1ZXN0LlVSTCBNSU1FVHlwZTpAImltYWdlL3BuZyIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOi0x
IHRleHRFbmNvZGluZ05hbWU6bmlsXSk7CisgICAgfSBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9jb2w6c2VsZiBk
aWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgY2FjaGVTdG9yYWdlUG9saWN5Ok5TVVJM
Q2FjaGVTdG9yYWdlTm90QWxsb3dlZF07CisgICAgW3NlbGYuY2xpZW50IFVSTFByb3RvY29sOnNl
bGYgZGlkTG9hZERhdGE6cmVzb3VyY2VEYXRhXTsKKyAgICBbc2VsZi5jbGllbnQgVVJMUHJvdG9j
b2xEaWRGaW5pc2hMb2FkaW5nOnNlbGZdOworfQorCistICh2b2lkKXN0b3BMb2FkaW5nCit7Cit9
CisKK0BlbmQKKworQGludGVyZmFjZSBJY29uTG9hZGluZ0ZyYW1lTG9hZERlbGVnYXRlIDogTlNP
YmplY3QgPFdlYkZyYW1lTG9hZERlbGVnYXRlPiB7CitAcHVibGljCisgICAgUmV0YWluUHRyPE5T
SW1hZ2U+IHJlY2VpdmVkSWNvbjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEljb25Mb2Fk
aW5nRnJhbWVMb2FkRGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IGRpZFJlY2VpdmVJY29uOihOU0ltYWdlICopaW1hZ2UgZm9yRnJhbWU6KFdlYkZyYW1lICopZnJh
bWUKK3sKKyAgICByZWNlaXZlZEljb24gPSBpbWFnZTsKKyAgICBtZXNzYWdlUmVjZWl2ZWQgPSB0
cnVlOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgTWFpbkZyYW1lSWNvbktWTyA6IE5TT2JqZWN0
IHsKK0BwdWJsaWMKKyAgICBSZXRhaW5QdHI8TlNJbWFnZT4gb2xkSW1hZ2U7CisgICAgUmV0YWlu
UHRyPE5TSW1hZ2U+IGV4cGVjdGVkSW1hZ2U7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBN
YWluRnJhbWVJY29uS1ZPCisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJp
bmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Cit7CisgICAgQVNT
RVJUKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpNYWluRnJhbWVJY29uS2V5UGF0aF0pOworICAg
IEFTU0VSVChbW29iamVjdCBjbGFzc10gaXNFcXVhbDpbV2ViVmlldyBjbGFzc11dKTsKKworICAg
IC8vIEZJWE1FOiBBcyBtZW50aW9uZWQgaW4gYSBGSVhNRSBpbiBXZWJLaXQxIGNvZGUgd2hlbiBz
ZW5kaW5nIHRoZXNlIEtWTyBldmVudHMsIHRoZSBvbGQgaWNvbiBpcyBhbHJlYWR5IGxvc3QgYnkg
dGhlIHRpbWUgd2Ugc2VuZCB0aGUgZXZlbnQuCisgICAgLy8gVGhlIGJlbG93IGxpbmUgc2hvdWxk
IGFjdHVhbGx5IGJlICJFWFBFQ1RfVFJVRSIgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KKyAgICBF
WFBFQ1RfRkFMU0UoW1tbY2hhbmdlIG9iamVjdEZvcktleTpOU0tleVZhbHVlQ2hhbmdlT2xkS2V5
XSBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6W29sZEltYWdlIFRJRkZSZXByZXNlbnRhdGlv
bl1dKTsKKyAgICBFWFBFQ1RfVFJVRShbW1tjaGFuZ2Ugb2JqZWN0Rm9yS2V5Ok5TS2V5VmFsdWVD
aGFuZ2VOZXdLZXldIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbZXhwZWN0ZWRJbWFnZSBU
SUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgRVhQRUNUX1RSVUUoW1soKFdlYlZpZXcgKilvYmpl
Y3QpLm1haW5GcmFtZUljb24gVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltleHBlY3RlZElt
YWdlIFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKworfQorCitAZW5kCisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworVEVTVChXZWJLaXQxLCBJY29uTG9hZGluZ0RlbGVnYXRlRGVmYXVsdEZp
cnN0KQoreworICAgIFtOU1VSTFByb3RvY29sIHJlZ2lzdGVyQ2xhc3M6W0ljb25Mb2FkaW5nUHJv
dG9jb2wgY2xhc3NdXTsKKworICAgIGN1cnJlbnRNYWluSFRNTCA9IGRlZmF1bHRGYXZpY29uSFRN
TDsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAxMjAsIDIw
MCkgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6bmlsXSk7CisgICAgICAgIGF1dG8gZnJhbWVMb2Fk
RGVsZWdhdGUgPSBhZG9wdE5TKFtbSWNvbkxvYWRpbmdGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworCisgICAgICAgIGF1dG8ga3ZvID0gYWRvcHROUyhbW01haW5GcmFtZUljb25LVk8g
YWxsb2NdIGluaXRdKTsKKyAgICAgICAga3ZvLT5vbGRJbWFnZSA9IHdlYlZpZXcuZ2V0KCkubWFp
bkZyYW1lSWNvbjsKKyAgICAgICAga3ZvLT5leHBlY3RlZEltYWdlID0gaW1hZ2VGcm9tRGF0YShk
ZWZhdWx0RmF2aWNvbkRhdGEoKSk7CisgICAgICAgIFt3ZWJWaWV3LmdldCgpIGFkZE9ic2VydmVy
Omt2by5nZXQoKSBmb3JLZXlQYXRoOk1haW5GcmFtZUljb25LZXlQYXRoIG9wdGlvbnM6TlNLZXlW
YWx1ZU9ic2VydmluZ09wdGlvbk5ldyB8IE5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25PbGQgY29u
dGV4dDpuaWxdOworCisgICAgICAgIHdlYlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSBm
cmFtZUxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgW3dlYlZpZXcuZ2V0KCkubWFpbkZyYW1l
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vdGVzdHNlcnZlci8xL21haW4iXV1dOworCisgICAgICAgIFV0aWw6OnJ1
bigmbWVzc2FnZVJlY2VpdmVkKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShbW2ZyYW1lTG9hZERl
bGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltp
bWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtbd2ViVmlldy5nZXQoKS5tYWluRnJhbWVJY29uIFRJRkZS
ZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2aWNvbkRhdGEo
KSkgVElGRlJlcHJlc2VudGF0aW9uXV0pOworICAgICAgICBFWFBFQ1RfRkFMU0UoW1tmcmFtZUxv
YWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdldCgpIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVh
bDpbaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25d
XSk7CisKKyAgICAgICAgLy8gTm93IGxvYWQgdGhlIG5leHQgcGFnZSB3aGljaCBzaG91bGQgaGF2
ZSBhIGN1c3RvbSBpY29uIGFuZCBtYWtlIHN1cmUgdGhpbmdzIGFyZSBhcyBleHBlY3RlZC4KKyAg
ICAgICAgbWVzc2FnZVJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIGt2by0+b2xkSW1hZ2UgPSBp
bWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgpKTsKKyAgICAgICAga3ZvLT5leHBlY3Rl
ZEltYWdlID0gaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKTsKKyAgICAgICAgY3Vy
cmVudE1haW5IVE1MID0gY3VzdG9tRmF2aWNvbkhUTUw7CisgICAgICAgIFt3ZWJWaWV3LmdldCgp
Lm1haW5GcmFtZSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3Rlc3RzZXJ2ZXIvMi9tYWluIl1dXTsKKworICAgICAg
ICBVdGlsOjpydW4oJm1lc3NhZ2VSZWNlaXZlZCk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoW1tm
cmFtZUxvYWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdldCgpIFRJRkZSZXByZXNlbnRhdGlvbl0g
aXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVzZW50
YXRpb25dXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtbd2ViVmlldy5nZXQoKS5tYWluRnJhbWVJ
Y29uIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShjdXN0b21GYXZp
Y29uRGF0YSgpKSBUSUZGUmVwcmVzZW50YXRpb25dXSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShb
W2ZyYW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJlc2VudGF0aW9u
XSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGRlZmF1bHRGYXZpY29uRGF0YSgpKSBUSUZGUmVwcmVz
ZW50YXRpb25dXSk7CisKKyAgICB9CisKKyAgICBbTlNVUkxQcm90b2NvbCB1bnJlZ2lzdGVyQ2xh
c3M6W0ljb25Mb2FkaW5nUHJvdG9jb2wgY2xhc3NdXTsKK30KKworVEVTVChXZWJLaXQxLCBJY29u
TG9hZGluZ0RlbGVnYXRlQ3VzdG9tRmlyc3QpCit7CisgICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0
ZXJDbGFzczpbSWNvbkxvYWRpbmdQcm90b2NvbCBjbGFzc11dOworCisgICAgY3VycmVudE1haW5I
VE1MID0gY3VzdG9tRmF2aWNvbkhUTUw7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgMTIwLCAyMDApIGZyYW1lTmFtZTpuaWwgZ3JvdXBOYW1lOm5pbF0pOwor
ICAgICAgICBhdXRvIGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0ljb25Mb2FkaW5nRnJh
bWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgICAgICBhdXRvIGt2byA9IGFkb3B0
TlMoW1tNYWluRnJhbWVJY29uS1ZPIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGt2by0+b2xkSW1h
Z2UgPSB3ZWJWaWV3LmdldCgpLm1haW5GcmFtZUljb247CisgICAgICAgIGt2by0+ZXhwZWN0ZWRJ
bWFnZSA9IGltYWdlRnJvbURhdGEoY3VzdG9tRmF2aWNvbkRhdGEoKSk7CisgICAgICAgIFt3ZWJW
aWV3LmdldCgpIGFkZE9ic2VydmVyOmt2by5nZXQoKSBmb3JLZXlQYXRoOk1haW5GcmFtZUljb25L
ZXlQYXRoIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbk5ldyB8IE5TS2V5VmFsdWVP
YnNlcnZpbmdPcHRpb25PbGQgY29udGV4dDpuaWxdOworCisgICAgICAgIHdlYlZpZXcuZ2V0KCku
ZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgW3dl
YlZpZXcuZ2V0KCkubWFpbkZyYW1lIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vdGVzdHNlcnZlci8xL21haW4iXV1d
OworCisgICAgICAgIFV0aWw6OnJ1bigmbWVzc2FnZVJlY2VpdmVkKTsKKworICAgICAgICBFWFBF
Q1RfVFJVRShbW2ZyYW1lTG9hZERlbGVnYXRlLT5yZWNlaXZlZEljb24uZ2V0KCkgVElGRlJlcHJl
c2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRhKGN1c3RvbUZhdmljb25EYXRhKCkpIFRJ
RkZSZXByZXNlbnRhdGlvbl1dKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1t3ZWJWaWV3LmdldCgp
Lm1haW5GcmFtZUljb24gVElGRlJlcHJlc2VudGF0aW9uXSBpc0VxdWFsOltpbWFnZUZyb21EYXRh
KGN1c3RvbUZhdmljb25EYXRhKCkpIFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKFtbZnJhbWVMb2FkRGVsZWdhdGUtPnJlY2VpdmVkSWNvbi5nZXQoKSBUSUZGUmVw
cmVzZW50YXRpb25dIGlzRXF1YWw6W2ltYWdlRnJvbURhdGEoZGVmYXVsdEZhdmljb25EYXRhKCkp
IFRJRkZSZXByZXNlbnRhdGlvbl1dKTsKKworICAgICAgICAvLyBOb3cgbG9hZCB0aGUgbmV4dCBw
YWdlIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBkZWZhdWx0IGljb24gYW5kIG1ha2Ugc3VyZSB0aGlu
Z3MgYXJlIGFzIGV4cGVjdGVkLgorICAgICAgICBtZXNzYWdlUmVjZWl2ZWQgPSBmYWxzZTsKKyAg
ICAgICAga3ZvLT5vbGRJbWFnZSA9IGltYWdlRnJvbURhdGEoY3VzdG9tRmF2aWNvbkRhdGEoKSk7
CisgICAgICAgIGt2by0+ZXhwZWN0ZWRJbWFnZSA9IGltYWdlRnJvbURhdGEoZGVmYXVsdEZhdmlj
b25EYXRhKCkpOworICAgICAgICBjdXJyZW50TWFpbkhUTUwgPSBkZWZhdWx0RmF2aWNvbkhUTUw7
CisgICAgICAgIFt3ZWJWaWV3LmdldCgpLm1haW5GcmFtZSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3Rlc3RzZXJ2
ZXIvMi9tYWluIl1dXTsKKworICAgICAgICBVdGlsOjpydW4oJm1lc3NhZ2VSZWNlaXZlZCk7CisK
KyAgICAgICAgRVhQRUNUX1RSVUUoW1tmcmFtZUxvYWREZWxlZ2F0ZS0+cmVjZWl2ZWRJY29uLmdl
dCgpIFRJRkZSZXByZXNlbnRhdGlvbl0gaXNFcXVhbDpbaW1hZ2VGcm9tRGF0YShkZWZhdWx0RmF2
aWNvbkRhdGEoKSkgVElGRlJlcHJlc2VudGF0aW9uXV0pOworICAgICAgICBFWFBFQ1RfVFJVRShb
W3dlYlZpZXcuZ2V0KCkubWFpbkZyYW1lSWNvbiBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6
W2ltYWdlRnJvbURhdGEoZGVmYXVsdEZhdmljb25EYXRhKCkpIFRJRkZSZXByZXNlbnRhdGlvbl1d
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKFtbZnJhbWVMb2FkRGVsZWdhdGUtPnJlY2VpdmVkSWNv
bi5nZXQoKSBUSUZGUmVwcmVzZW50YXRpb25dIGlzRXF1YWw6W2ltYWdlRnJvbURhdGEoY3VzdG9t
RmF2aWNvbkRhdGEoKSkgVElGRlJlcHJlc2VudGF0aW9uXV0pOworICAgIH0KKworICAgIFtOU1VS
TFByb3RvY29sIHVucmVnaXN0ZXJDbGFzczpbSWNvbkxvYWRpbmdQcm90b2NvbCBjbGFzc11dOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>