<?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>136199</bug_id>
          
          <creation_ts>2014-08-24 08:30:39 -0700</creation_ts>
          <short_desc>Remove scheduling code from network process</short_desc>
          <delta_ts>2014-08-25 11:05:12 -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>Page Loading</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>psolanki</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030968</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-24 08:30:39 -0700</bug_when>
    <thetext>It is not really used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030969</commentid>
    <comment_count>1</comment_count>
      <attachid>237045</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-24 08:35:06 -0700</bug_when>
    <thetext>Created attachment 237045
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030976</commentid>
    <comment_count>2</comment_count>
      <attachid>237047</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-24 11:21:51 -0700</bug_when>
    <thetext>Created attachment 237047
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030986</commentid>
    <comment_count>3</comment_count>
      <attachid>237047</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-08-24 12:42:13 -0700</bug_when>
    <thetext>Comment on attachment 237047
patch

OK. Good to delete this if it’s not being used. But here’s hoping we do these kinds of optimizations as appropriate in the networking layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030990</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-24 14:21:18 -0700</bug_when>
    <thetext>Hmm, maybe we can&apos;t do this yet. NSURLRequest priorities have some bugs that cause problems in releases prior to Yosemite and so haven&apos;t been enabled. If we don&apos;t do prioritization ourselves then performance may suffer. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030994</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-08-24 15:24:59 -0700</bug_when>
    <thetext>So we don&apos;t do any of the prioritization in WebProcess? If so, how do we reprioritize in NetworkProcess?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031028</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-24 21:50:39 -0700</bug_when>
    <thetext>In network process mode the web process side ResourceLoadScheduler is just a dumb proxy (WebKit::WebResourceLoadScheduler overrides the WebCore implementation). The actual priority-based scheduling is done by this copy code that I was trying to get rid of (NetworkResourceLoadScheduler) when the networking layer priorities are not supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031171</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-25 10:50:59 -0700</bug_when>
    <thetext>Turns out that the network process scheduling code is never really used. Scheduling requires priority but making the requests we do  

void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, CachedResource* resource, ResourceLoadPriority priority, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
{
    ASSERT(resourceLoader);
    ASSERT(priority != ResourceLoadPriorityUnresolved);
    priority = ResourceLoadPriorityHighest;

(the priorities that we tell to CFNetwork are part of ResourceRequest and are not affected by this)

This mean the network process scheduling has never really been used and we can remove it without risking regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031175</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-25 11:05:12 -0700</bug_when>
    <thetext>https://trac.webkit.org/r172927</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237045</attachid>
            <date>2014-08-24 08:35:06 -0700</date>
            <delta_ts>2014-08-24 11:21:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-host-record-2.patch</filename>
            <type>text/plain</type>
            <size>39336</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mjg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTA4LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbG9hZCBzY2hlZHVs
aW5nIGNvZGUgZnJvbSBuZXR3b3JrIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjE5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFsbCBwbGF0Zm9ybXMganVzdCBmbHVzaCByZXNvdXJjZSBs
b2FkcyBkaXJlY3RseSB0byB0aGUgbmV0d29ya2luZyBsYXllci4KKyAgICAgICAgVGhpcyBpcyBl
ZmZlY3RpdmVseSBkZWFkIGNvZGUuCisKKyAgICAgICAgS2VlcCBiYXNpYyBzdXBwb3J0IGZvciBz
ZXJpYWxpemluZyBsb2Fkcy4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmdldE5ldHdvcmtQcm9jZXNzU3RhdGlzdGljcyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRzUGVuZGluZ0NvdW50KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZHNBY3RpdmVDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2Vy
dmVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNl
aXZlZFJlZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2Fk
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVSZW1vdmVMb2FkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0c1BlbmRpbmdDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RzQWN0
aXZlQ291bnQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjppc0xvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNldEhvc3RSZWNvcmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Omhvc3RSZWNvcmQpOiBEZWxldGVkLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrU2V0dGlu
Z3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0
Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0w
OC0yMyAgQnl1bmdzZW9uIFNoaW4gIDxzdW4uc2hpbkBsZ2UuY29tPgogIAogICAgICAgICBVbmlm
eSBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEgYW5kIHNldENvbnRlbnRzVG9DYW52
YXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3Bw
CShyZXZpc2lvbiAxNzI4OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0
UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIb3N0UmVjb3JkLmgiCi0KLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIK
LSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5o
IgotI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUhvc3RSZWNvcmQ6Okhvc3RSZWNv
cmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCkKLSAgICA6IG1f
bmFtZShuYW1lKQotICAgICwgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KG1heFJlcXVlc3RzSW5GbGln
aHQpCi17Ci19Ci0KLUhvc3RSZWNvcmQ6On5Ib3N0UmVjb3JkKCkKLXsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgQVNTRVJUKG1fbG9hZGVyc0luUHJvZ3Jlc3MuaXNFbXB0eSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQotICAg
ICAgICBBU1NFUlQobV9sb2FkZXJzUGVuZGluZ1twXS5pc0VtcHR5KCkpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSG9zdFJlY29yZDo6c2NoZWR1bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdv
cmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBsb2FkZXItPnNldEhvc3RSZWNvcmQodGhpcyk7Ci0gICAgCi0gICAgaWYgKGxv
YWRlci0+aXNTeW5jaHJvbm91cygpKQotICAgICAgICBtX3N5bmNMb2FkZXJzUGVuZGluZy5hcHBl
bmQobG9hZGVyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbG9hZGVyc1BlbmRpbmdbbG9hZGVyLT5w
cmlvcml0eSgpXS5hcHBlbmQobG9hZGVyKTsKLX0KLQotdm9pZCBIb3N0UmVjb3JkOjphZGRMb2Fk
ZXJJblByb2dyZXNzKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2xvYWRlcnNJblByb2dyZXNzLmFkZChsb2Fk
ZXIpOwotICAgIGxvYWRlci0+c2V0SG9zdFJlY29yZCh0aGlzKTsKLX0KLQotaW5saW5lIGJvb2wg
cmVtb3ZlTG9hZGVyRnJvbVF1ZXVlKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBMb2Fk
ZXJRdWV1ZSYgcXVldWUpCi17Ci0gICAgTG9hZGVyUXVldWU6Oml0ZXJhdG9yIGVuZCA9IHF1ZXVl
LmVuZCgpOwotICAgIGZvciAoTG9hZGVyUXVldWU6Oml0ZXJhdG9yIGl0ID0gcXVldWUuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Z2V0KCkgPT0gbG9hZGVyKSB7
Ci0gICAgICAgICAgICBsb2FkZXItPnNldEhvc3RSZWNvcmQoMCk7Ci0gICAgICAgICAgICBxdWV1
ZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZUxvYWRlcihO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogRHVlIHRvIElQQyByYWNl
IGNvbmRpdGlvbnMsIGl0J3MgcG9zc2libGUgdGhpcyBIb3N0UmVjb3JkIHdpbGwgYmUgYXNrZWQg
dG8gcmVtb3ZlIHRoZSBzYW1lIGxvYWRlciB0d2ljZS4KLSAgICAvLyBJdCB3b3VsZCBiZSBuaWNl
IHRvIGtub3cgdGhlIGxvYWRlciBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIHRyZWF0IGl0
IGFzIGEgbm8tb3AuCi0KLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGkg
PSBtX2xvYWRlcnNJblByb2dyZXNzLmZpbmQobG9hZGVyKTsKLSAgICBpZiAoaSAhPSBtX2xvYWRl
cnNJblByb2dyZXNzLmVuZCgpKSB7Ci0gICAgICAgIGktPmdldCgpLT5zZXRIb3N0UmVjb3JkKDAp
OwotICAgICAgICBtX2xvYWRlcnNJblByb2dyZXNzLnJlbW92ZShpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChyZW1vdmVMb2FkZXJGcm9tUXVldWUobG9hZGVyLCBtX3N5bmNM
b2FkZXJzUGVuZGluZykpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGludCBwcmlv
cml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0gUmVzb3VyY2VM
b2FkUHJpb3JpdHlMb3dlc3Q7IC0tcHJpb3JpdHkpIHsKLSAgICAgICAgaWYgKHJlbW92ZUxvYWRl
ckZyb21RdWV1ZShsb2FkZXIsIG1fbG9hZGVyc1BlbmRpbmdbcHJpb3JpdHldKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgSG9zdFJlY29yZDo6aGFzUmVxdWVzdHMoKSBj
b25zdAotewotICAgIGlmICghbV9sb2FkZXJzSW5Qcm9ncmVzcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBSZXNvdXJjZUxv
YWRQcmlvcml0eUhpZ2hlc3Q7IHArKykgewotICAgICAgICBpZiAoIW1fbG9hZGVyc1BlbmRpbmdb
cF0uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi11aW50NjRfdCBIb3N0UmVjb3JkOjpwZW5kaW5nUmVxdWVzdENvdW50
KCkgY29uc3QKLXsKLSAgICB1aW50NjRfdCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQotICAgICAgICBj
b3VudCArPSBtX2xvYWRlcnNQZW5kaW5nW3BdLnNpemUoKTsKLQotICAgIHJldHVybiBjb3VudDsK
LX0KLQotdWludDY0X3QgSG9zdFJlY29yZDo6YWN0aXZlTG9hZENvdW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9sb2FkZXJzSW5Qcm9ncmVzcy5zaXplKCk7Ci19Ci0KLXZvaWQgSG9zdFJlY29y
ZDo6c2VydmVQZW5kaW5nUmVxdWVzdHNGb3JRdWV1ZShMb2FkZXJRdWV1ZSYgcXVldWUsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQotewotICAgIC8vIFdlIG9ubHkgZW5mb3JjZSB0aGUg
Y29ubmVjdGlvbiBsaW1pdCBmb3IgaHR0cChzKSBob3N0cywgd2hpY2ggYXJlIHRoZSBvbmx5IG9u
ZXMgd2l0aCBuYW1lcy4KLSAgICBib29sIHNob3VsZExpbWl0UmVxdWVzdHMgPSAhbmFtZSgpLmlz
TnVsbCgpOwotCi0gICAgLy8gRm9yIG5vbi1uYW1lZCBob3N0cyAtIGV2ZXJ5dGhpbmcgYnV0IGh0
dHAocykgLSB3ZSBzaG91bGQgb25seSBlbmZvcmNlIHRoZSBsaW1pdCBpZiB0aGUgZG9jdW1lbnQK
LSAgICAvLyBpc24ndCBkb25lIHBhcnNpbmcgYW5kIHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hl
ZXRzIHlldC4KLQotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFRoZSBhYm92ZSBjb21t
ZW50IGFib3V0IGRvY3VtZW50IHBhcnNpbmcgYW5kIHN0eWxlc2hlZXRzIGlzIGEgaG9sZG92ZXIK
LSAgICAvLyBmcm9tIHRoZSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIuCi0gICAgLy8g
VGhlIGJlaGF2aW9yIGRlc2NyaWJlZCB3YXMgYXQgb25lIHRpbWUgaW1wb3J0YW50IGZvciBXZWJD
b3JlJ3Mgc2luZ2xlIHRocmVhZGVkbmVzcy4KLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2Ug
ZG9uJ3QgY2FyZSBhYm91dCBpdCB3aXRoIHRoZSBOZXR3b3JrUHJvY2Vzcy4KLSAgICAvLyBXZSBz
aG91bGQgZWl0aGVyIGRlY2lkZSBpdCdzIG5vdCBpbXBvcnRhbnQgYW5kIGNoYW5nZSB0aGUgYWJv
dmUgY29tbWVudCwgb3IgZGVjaWRlIGl0IGlzCi0gICAgLy8gc3RpbGwgaW1wb3J0YW50IGFuZCBz
b21laG93IGFjY291bnQgZm9yIGl0LgotICAgIAotICAgIC8vIFZlcnkgbG93IHByaW9yaXR5IGxv
YWRlcnMgYXJlIG9ubHkgaGFuZGxlZCB3aGVuIG5vIG90aGVyIGxvYWRlcnMgYXJlIGluIHByb2dy
ZXNzLgotICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIHByaW9yaXR5ID09IFJlc291cmNl
TG9hZFByaW9yaXR5VmVyeUxvdyAmJiAhbV9sb2FkZXJzSW5Qcm9ncmVzcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5maXJzdCgp
OwotICAgICAgICBBU1NFUlQobG9hZGVyLT5ob3N0UmVjb3JkKCkgPT0gdGhpcyk7Ci0KLSAgICAg
ICAgLy8gVGhpcyByZXF1ZXN0IG1pZ2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3ZSd2ZSBsb3N0IG91
ciBjb25uZWN0aW9uIHRvLgotICAgICAgICAvLyBJZiBzbyB3ZSBzaG91bGQganVzdCBza2lwIGl0
LgotICAgICAgICBpZiAoIWxvYWRlci0+Y29ubmVjdGlvblRvV2ViUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICByZW1vdmVMb2FkZXIobG9hZGVyLmdldCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYgbGltaXRz
UmVxdWVzdHMocHJpb3JpdHksIGxvYWRlci5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgbV9sb2FkZXJzSW5Qcm9ncmVzcy5hZGQobG9hZGVyKTsKLSAgICAgICAgcXVldWUu
cmVtb3ZlRmlyc3QoKTsKLQotICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoTmV0d29y
a1Byb2Nlc3MpIEhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUgLSBTdGFy
dGluZyBsb2FkIG9mICVzXG4iLCBsb2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgbG9hZGVyLT5zdGFydCgpOwotICAgIH0KLX0KLQotdm9pZCBI
b3N0UmVjb3JkOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5p
bXVtUHJpb3JpdHkpCi17Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9j
ZXNzKSBIb3N0UmVjb3JkOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyBIb3N0IG5hbWU9JyVzJyIsIG5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIC8vIFdlIHNlcnZlIHN5bmNocm9ub3VzIHJlcXVl
c3RzIGJlZm9yZSBhbnkgb3RoZXIgcmVxdWVzdHMgdG8gaW1wcm92ZSByZXNwb25zaXZlbmVzcyBp
biBhbnkKLSAgICAvLyBXZWJQcm9jZXNzIHRoYXQgaXMgd2FpdGluZyBvbiBhIHN5bmNocm9ub3Vz
IGxvYWQuCi0gICAgc2VydmVQZW5kaW5nUmVxdWVzdHNGb3JRdWV1ZShtX3N5bmNMb2FkZXJzUGVu
ZGluZywgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0KTsKLSAgICAKLSAgICBmb3IgKGludCBw
cmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0gbWluaW11
bVByaW9yaXR5OyAtLXByaW9yaXR5KQotICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1
ZXVlKG1fbG9hZGVyc1BlbmRpbmdbcHJpb3JpdHldLCAoUmVzb3VyY2VMb2FkUHJpb3JpdHkpcHJp
b3JpdHkpOwotfQotCi1ib29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IHByaW9yaXR5LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikgY29uc3QK
LXsKLSAgICBBU1NFUlQobG9hZGVyKTsKLSAgICBBU1NFUlQobG9hZGVyLT5jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKCkpOwotCi0gICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5
VmVyeUxvdyAmJiAhbV9sb2FkZXJzSW5Qcm9ncmVzcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGxvYWRlci0+Y29ubmVjdGlvblRvV2ViUHJvY2VzcygpLT5pc1Nl
cmlhbExvYWRpbmdFbmFibGVkKCkgJiYgbV9sb2FkZXJzSW5Qcm9ncmVzcy5zaXplKCkgPj0gMSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiB3ZSdyZSBleGFjdGx5IGF0IHRoZSBs
aW1pdCBmb3IgcmVxdWVzdHMgaW4gZmxpZ2h0LCBhbmQgdGhpcyBsb2FkZXIgaXMgYXN5bmNocm9u
b3VzLCB0aGVuIHdlJ3JlIGRvbmUgc2VydmluZyBuZXcgcmVxdWVzdHMuCi0gICAgLy8gVGhlIHN5
bmNocm9ub3VzIGxvYWRlciBleGNlcHRpb24gaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhIHN5bmMg
WEhSIGlzIG1hZGUgd2hpbGUgNiBvdGhlciByZXF1ZXN0cyBhcmUgYWxyZWFkeSBpbiBmbGlnaHQu
Ci0gICAgaWYgKG1fbG9hZGVyc0luUHJvZ3Jlc3Muc2l6ZSgpID09IG1fbWF4UmVxdWVzdHNJbkZs
aWdodCAmJiAhbG9hZGVyLT5pc1N5bmNocm9ub3VzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBwYXN0IHRoZSBsaW1pdCBvZiB0aGUgbnVtYmVyIG9m
IGxvYWRlcnMgaW4gZmxpZ2h0LCB3ZSB3b24ndCBldmVuIHNlcnZlIG5ldyBzeW5jaHJvbm91cyBy
ZXF1ZXN0cyByaWdodCBub3cuCi0gICAgaWYgKG1fbG9hZGVyc0luUHJvZ3Jlc3Muc2l6ZSgpID4g
bV9tYXhSZXF1ZXN0c0luRmxpZ2h0KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAvLyBJZiB3
ZSBoYXZlIG1vcmUgbG9hZGVycyBpbiBwcm9ncmVzcyB0aGFuIHdlIHNob3VsZCwgYXQgbGVhc3Qg
b25lIG9mIHRoZW0gaGFkIGJldHRlciBiZSBzeW5jaHJvbm91cy4KLSAgICAgICAgTmV0d29ya1Jl
c291cmNlTG9hZGVyU2V0OjppdGVyYXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5iZWdpbigp
OwotICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbG9h
ZGVyc0luUHJvZ3Jlc3MuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoaS0+Z2V0KCktPmlzU3luY2hyb25vdXMoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoaSAhPSBlbmQpOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmgJKHJldmlzaW9u
IDE3Mjg5MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIb3N0
UmVjb3JkX2gKLSNkZWZpbmUgSG9zdFJlY29yZF9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRQcmlvcml0eS5oPgotI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKLQotdHlwZWRlZiBE
ZXF1ZTxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPj4gTG9hZGVyUXVldWU7Ci10eXBlZGVm
IHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7Ci0KLWNsYXNzIEhvc3RSZWNvcmQgOiBw
dWJsaWMgUmVmQ291bnRlZDxIb3N0UmVjb3JkPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SG9zdFJlY29yZD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IG1heFJlcXVl
c3RzSW5GbGlnaHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhvc3RSZWNv
cmQobmFtZSwgbWF4UmVxdWVzdHNJbkZsaWdodCkpOwotICAgIH0KLSAgICAKLSAgICB+SG9zdFJl
Y29yZCgpOwotICAgIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQotICAgIAotICAgIHZvaWQgc2NoZWR1bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOwotICAgIHZvaWQgYWRkTG9hZGVySW5Qcm9ncmVzcyhO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKLSAgICB2b2lkIHJlbW92ZUxvYWRlcihOZXR3b3JrUmVz
b3VyY2VMb2FkZXIqKTsKLSAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7Ci0KLSAg
ICB1aW50NjRfdCBwZW5kaW5nUmVxdWVzdENvdW50KCkgY29uc3Q7Ci0gICAgdWludDY0X3QgYWN0
aXZlTG9hZENvdW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgSG9zdFJlY29yZChjb25zdCBT
dHJpbmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0luRmxpZ2h0KTsKLQotICAgIHZvaWQgc2VydmVQ
ZW5kaW5nUmVxdWVzdHNGb3JRdWV1ZShMb2FkZXJRdWV1ZSYsIFdlYkNvcmU6OlJlc291cmNlTG9h
ZFByaW9yaXR5KTsKLSAgICBib29sIGxpbWl0c1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9h
ZFByaW9yaXR5LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKSBjb25zdDsKLQotICAgIExvYWRlclF1
ZXVlIG1fbG9hZGVyc1BlbmRpbmdbV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
ICsgMV07Ci0gICAgTG9hZGVyUXVldWUgbV9zeW5jTG9hZGVyc1BlbmRpbmc7Ci0KLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IE5ldHdvcmtSZXNvdXJj
ZUxvYWRlclNldDsKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQgbV9sb2FkZXJzSW5Qcm9n
cmVzczsKLQotICAgIGNvbnN0IFN0cmluZyBtX25hbWU7Ci0gICAgaW50IG1fbWF4UmVxdWVzdHNJ
bkZsaWdodDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKLQotI2VuZGlmIC8vICNpZm5kZWYgSG9zdFJlY29yZF9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxNzI4OTApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw5ICsxNDUsOCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpzZXRECiAgICAgbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVy
cyk7CiB9CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNlcnZlUGVuZGlu
Z1JlcXVlc3RzKHVpbnQzMl90IHJlc291cmNlTG9hZFByaW9yaXR5KQordm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVxdWVzdHModWludDMyX3QpCiB7Ci0g
ICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4o
cmVzb3VyY2VMb2FkUHJpb3JpdHkpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2
aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsOCArMjU4LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Z2V0TmV0d29ya1Byb2Nlc3NTdAogCiAgICAgU3RhdGlzdGljc0RhdGEgZGF0YTsK
IAotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJIb3N0c1BlbmRpbmdDb3VudCIsIHNj
aGVkdWxlci5ob3N0c1BlbmRpbmdDb3VudCgpKTsKLSAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSG9zdHNBY3RpdmVDb3VudCIsIHNjaGVkdWxlci5ob3N0c0FjdGl2ZUNvdW50KCkpOwog
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJMb2Fkc1BlbmRpbmdDb3VudCIsIHNjaGVk
dWxlci5sb2Fkc1BlbmRpbmdDb3VudCgpKTsKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiTG9hZHNBY3RpdmVDb3VudCIsIHNjaGVkdWxlci5sb2Fkc0FjdGl2ZUNvdW50KCkpOwogICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJEb3dubG9hZHNBY3RpdmVDb3VudCIsIHNoYXJl
ZCgpLmRvd25sb2FkTWFuYWdlcigpLmFjdGl2ZURvd25sb2FkQ291bnQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIgogCi0jaW5jbHVkZSAiSG9zdFJlY29yZC5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaCIKQEAgLTE1LDIxMSArMTUsNTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZs
aWdodEZvck5vbkhUVFBQcm90b2NvbHMgPSAyMDsKLQogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcjo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpCi0gICAgOiBtX25vbkhUVFBQcm90
b2NvbEhvc3QoSG9zdFJlY29yZDo6Y3JlYXRlKFN0cmluZygpLCBtYXhSZXF1ZXN0c0luRmxpZ2h0
Rm9yTm9uSFRUUFByb3RvY29scykpCi0gICAgLCBtX3JlcXVlc3RUaW1lcih0aGlzLCAmTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCi0KLXsKLSAgICBwbGF0
Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKLX0KLQot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKLXsKLSAgICBpZiAoIW1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyPiopCiB7Ci0gICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsK
KyAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrU2V0dGluZ3MoKTsKIH0KIAogdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdv
cmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQogewotICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5ID0gbG9hZGVyLT5wcmlvcml0eSgpOwotICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0ID0gbG9hZGVyLT5yZXF1ZXN0KCk7Ci0gICAgICAgIAotICAgIExPRyhO
ZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIgcmVzb3VyY2UgJyVzJyIsIHJlc291cmNlUmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBo
b3N0Rm9yVVJMKHJlc291cmNlUmVxdWVzdC51cmwoKSwgQ3JlYXRlSWZOb3RGb3VuZCk7Ci0gICAg
Ym9vbCBoYWRSZXF1ZXN0cyA9IGhvc3QtPmhhc1JlcXVlc3RzKCk7Ci0gICAgaG9zdC0+c2NoZWR1
bGVSZXNvdXJjZUxvYWRlcihsb2FkZXIpOwotCi0gICAgaWYgKHByaW9yaXR5ID4gUmVzb3VyY2VM
b2FkUHJpb3JpdHlMb3cgfHwgIXJlc291cmNlUmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQ
RmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5TG93ICYmICFoYWRS
ZXF1ZXN0cykpIHsKLSAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291cmNl
cyBpbW1lZGlhdGVseS4KLSAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMocHJpb3Jp
dHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIEhhbmRsZSBhc3luY2hy
b25vdXNseSBzbyBlYXJseSBsb3cgcHJpb3JpdHkgcmVxdWVzdHMgZG9uJ3QgZ2V0IHNjaGVkdWxl
ZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlvcml0eSBvbmVzLgotICAgIHNjaGVkdWxlU2VydmVQZW5k
aW5nUmVxdWVzdHMoKTsKLX0KLQotSG9zdFJlY29yZCogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcjo6aG9zdEZvclVSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGlj
eSBjcmVhdGVIb3N0UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdC5nZXQoKTsKLQotICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7Ci0gICAgSG9zdFJlY29yZCogaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lKTsKLSAg
ICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBDcmVhdGVJZk5vdEZvdW5kKSB7Ci0g
ICAgICAgIFJlZlB0cjxIb3N0UmVjb3JkPiBuZXdIb3N0ID0gSG9zdFJlY29yZDo6Y3JlYXRlKGhv
c3ROYW1lLCBtX21heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0KTsKLSAgICAgICAgaG9zdCA9IG5l
d0hvc3QuZ2V0KCk7Ci0gICAgICAgIG1faG9zdHMuYWRkKGhvc3ROYW1lLCBuZXdIb3N0LnJlbGVh
c2UoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBob3N0OwotfQotCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChs
b2FkZXIpOwotCi0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkSWRlbnRpZmllciByZW1vdmlu
ZyBsb2FkZXIgJXMiLCBsb2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBsb2FkZXItPmhvc3RSZWNvcmQoKTsKLSAg
ICAKLSAgICAvLyBEdWUgdG8gYSByYWNlIGNvbmRpdGlvbiB0aGUgV2ViUHJvY2VzcyBtaWdodCBo
YXZlIG1lc3NhZ2VkIHRoZSBOZXR3b3JrUHJvY2VzcyB0byByZW1vdmUgdGhpcyBpZGVudGlmaWVy
Ci0gICAgLy8gYWZ0ZXIgdGhlIE5ldHdvcmtQcm9jZXNzIGhhcyBhbHJlYWR5IHJlbW92ZWQgaXQg
aW50ZXJuYWxseS4KLSAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiB3ZSBtaWdodCBub3QgaGF2ZSBh
IEhvc3RSZWNvcmQgdG8gY2xlYW4gdXAuCi0gICAgaWYgKGhvc3QpCi0gICAgICAgIGhvc3QtPnJl
bW92ZUxvYWRlcihsb2FkZXIpOwotCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJl
Y3QoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVk
aXJlY3RVUkwpCi17CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBMT0coTmV0
d29ya1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QgbG9hZGVyIG9yaWdpbmFsbHkgZm9yICclcycgcmVkaXJl
Y3RlZCB0byAnJXMnIiwgbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgcmVkaXJlY3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBIb3N0UmVj
b3JkKiBvbGRIb3N0ID0gbG9hZGVyLT5ob3N0UmVjb3JkKCk7CisgICAgTE9HKE5ldHdvcmtTY2hl
ZHVsaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
Y2hlZHVsZUxvYWRlciByZXNvdXJjZSAnJXMnIiwgbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAvLyBUaGUgbG9hZCBtYXkgaGF2ZSBiZWVuIGNh
bmNlbGxlZCB3aGlsZSB0aGUgbWVzc2FnZSB3YXMgaW4gZmxpZ2h0IGZyb20gbmV0d29yayB0aHJl
YWQgdG8gbWFpbiB0aHJlYWQuCi0gICAgaWYgKCFvbGRIb3N0KQorICAgIC8vIFRoaXMgcmVxdWVz
dCBtaWdodCBiZSBmcm9tIFdlYlByb2Nlc3Mgd2UndmUgbG9zdCBvdXIgY29ubmVjdGlvbiB0by4K
KyAgICAvLyBJZiBzbyB3ZSBzaG91bGQganVzdCBza2lwIGl0LgorICAgIGlmICghbG9hZGVyLT5j
b25uZWN0aW9uVG9XZWJQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhvc3RSZWNv
cmQqIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsK
LSAgICAKLSAgICBpZiAob2xkSG9zdC0+bmFtZSgpID09IG5ld0hvc3QtPm5hbWUoKSkKKyAgICBp
ZiAobG9hZGVyLT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQoKSAmJiAhbV9hY3RpdmVMb2FkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdT
ZXJpYWxMb2FkZXJzLmFwcGVuZChsb2FkZXIpOwogICAgICAgICByZXR1cm47Ci0KLSAgICBvbGRI
b3N0LT5yZW1vdmVMb2FkZXIobG9hZGVyKTsKLSAgICBuZXdIb3N0LT5hZGRMb2FkZXJJblByb2dy
ZXNzKGxvYWRlcik7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQot
ewotICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgU2VydmluZyByZXF1ZXN0
cyBmb3IgdXAgdG8gJWkgaG9zdHMgd2l0aCBtaW5pbXVtIHByaW9yaXR5ICVpIiwgbV9ob3N0cy5z
aXplKCksIG1pbmltdW1Qcmlvcml0eSk7Ci0KLSAgICBtX3JlcXVlc3RUaW1lci5zdG9wKCk7Ci0g
ICAgCi0gICAgbV9ub25IVFRQUHJvdG9jb2xIb3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5p
bXVtUHJpb3JpdHkpOwotCi0gICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgVmVj
dG9yPFJlZlB0cjxIb3N0UmVjb3JkPj4gaG9zdHNUb1NlcnZlOwotICAgIGNvcHlWYWx1ZXNUb1Zl
Y3RvcihtX2hvc3RzLCBob3N0c1RvU2VydmUpOwotCi0gICAgc2l6ZV90IHNpemUgPSBob3N0c1Rv
U2VydmUuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBob3N0c1RvU2VydmVbaV0uZ2V0KCk7Ci0gICAgICAg
IGlmIChob3N0LT5oYXNSZXF1ZXN0cygpKQotICAgICAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5n
UmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9o
b3N0cy5yZW1vdmUoaG9zdC0+bmFtZSgpKTsKICAgICB9Ci19Ci0KLXN0YXRpYyBib29sIHJlbW92
ZVNjaGVkdWxlZExvYWRlcnNDYWxsZWQgPSBmYWxzZTsKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2FkZXJzKHZvaWQqIGNvbnRleHQpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQocmVtb3ZlU2NoZWR1bGVk
TG9hZGVyc0NhbGxlZCk7CisgICAgbV9hY3RpdmVMb2FkZXJzLmFkZChsb2FkZXIuZ2V0KCkpOwog
Ci0gICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciogc2NoZWR1bGVyID0gc3RhdGljX2Nh
c3Q8TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcio+KGNvbnRleHQpOwotICAgIHNjaGVkdWxl
ci0+cmVtb3ZlU2NoZWR1bGVkTG9hZGVycygpOworICAgIGxvYWRlci0+c3RhcnQoKTsKIH0KIAot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2FkZXJz
KCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IGxvYWRlcnNU
b1JlbW92ZTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvYWRlcnNUb1Jl
bW92ZU11dGV4KTsKLSAgICAgICAgbG9hZGVyc1RvUmVtb3ZlID0gbV9sb2FkZXJzVG9SZW1vdmU7
Ci0gICAgICAgIG1fbG9hZGVyc1RvUmVtb3ZlLmNsZWFyKCk7Ci0gICAgICAgIHJlbW92ZVNjaGVk
dWxlZExvYWRlcnNDYWxsZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsb2FkZXJzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbW92ZUxv
YWRlcihsb2FkZXJzVG9SZW1vdmVbaV0uZ2V0KCkpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUmVtb3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRl
ciogbG9hZGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2Fk
ZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbG9hZGVyc1RvUmVtb3ZlTXV0ZXgpOwotICAgIAotICAgIG1fbG9hZGVyc1RvUmVtb3Zl
LmFwcGVuZChsb2FkZXIpOwotICAgIAotICAgIGlmICghcmVtb3ZlU2NoZWR1bGVkTG9hZGVyc0Nh
bGxlZCkgewotICAgICAgICByZW1vdmVTY2hlZHVsZWRMb2FkZXJzQ2FsbGVkID0gdHJ1ZTsKLSAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1v
dmVTY2hlZHVsZWRMb2FkZXJzLCB0aGlzKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotdWludDY0X3QgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9z
dHNQZW5kaW5nQ291bnQoKSBjb25zdAotewotICAgIHVpbnQ2NF90IGNvdW50ID0gbV9ub25IVFRQ
UHJvdG9jb2xIb3N0LT5wZW5kaW5nUmVxdWVzdENvdW50KCkgPyAxIDogMDsKKyAgICBMT0coTmV0
d29ya1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlbW92ZUxvYWRlciByZXNvdXJjZSAnJXMnIiwgbG9hZGVyLT5yZXF1ZXN0KCkudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBIb3N0TWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2hvc3RzLmVuZCgpOwotICAgIGZvciAoSG9zdE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aSA9IG1faG9zdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBpZiAoaS0+dmFs
dWUtPnBlbmRpbmdSZXF1ZXN0Q291bnQoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQor
ICAgIG1fYWN0aXZlTG9hZGVycy5yZW1vdmUobG9hZGVyKTsKIAotICAgIHJldHVybiBjb3VudDsK
KyAgICB3aGlsZSAoIW1fcGVuZGluZ1NlcmlhbExvYWRlcnMuaXNFbXB0eSgpICYmIG1fYWN0aXZl
TG9hZGVycy5pc0VtcHR5KCkpCisgICAgICAgIHNjaGVkdWxlTG9hZGVyKG1fcGVuZGluZ1Nlcmlh
bExvYWRlcnMudGFrZUxhc3QoKSk7CiB9CiAKIHVpbnQ2NF90IE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmxvYWRzUGVuZGluZ0NvdW50KCkgY29uc3QKIHsKLSAgICB1aW50NjRfdCBjb3Vu
dCA9IG1fbm9uSFRUUFByb3RvY29sSG9zdC0+cGVuZGluZ1JlcXVlc3RDb3VudCgpOwotCi0gICAg
SG9zdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKLSAgICBmb3IgKEhv
c3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX2hvc3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kp
Ci0gICAgICAgIGNvdW50ICs9IGktPnZhbHVlLT5wZW5kaW5nUmVxdWVzdENvdW50KCk7Ci0KLSAg
ICByZXR1cm4gY291bnQ7Ci19Ci0KLXVpbnQ2NF90IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Omhvc3RzQWN0aXZlQ291bnQoKSBjb25zdAotewotICAgIHVpbnQ2NF90IGNvdW50ID0gMDsK
LQotICAgIGlmIChtX25vbkhUVFBQcm90b2NvbEhvc3QtPmFjdGl2ZUxvYWRDb3VudCgpKQotICAg
ICAgICBjb3VudCA9IDE7Ci0KLSAgICBIb3N0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2hv
c3RzLmVuZCgpOwotICAgIGZvciAoSG9zdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1faG9zdHMu
YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBpZiAoaS0+dmFsdWUtPmFjdGl2ZUxv
YWRDb3VudCgpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291
bnQ7CisgICAgcmV0dXJuIG1fcGVuZGluZ1NlcmlhbExvYWRlcnMuc2l6ZSgpOwogfQogCiB1aW50
NjRfdCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2Fkc0FjdGl2ZUNvdW50KCkgY29u
c3QKIHsKLSAgICB1aW50NjRfdCBjb3VudCA9IG1fbm9uSFRUUFByb3RvY29sSG9zdC0+YWN0aXZl
TG9hZENvdW50KCk7Ci0KLSAgICBIb3N0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2hvc3Rz
LmVuZCgpOwotICAgIGZvciAoSG9zdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1faG9zdHMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgY291bnQgKz0gaS0+dmFsdWUtPmFjdGl2ZUxv
YWRDb3VudCgpOwotCi0gICAgcmV0dXJuIGNvdW50OworICAgIHJldHVybiBtX2FjdGl2ZUxvYWRl
cnMuc2l6ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgJKHJldmlzaW9uIDE3Mjg5MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMjEgKzI2LDE0IEBACiAjaWZuZGVmIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAog
I2RlZmluZSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gKIAotI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFVSTDsKLX0KLQogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIEhvc3RSZWNvcmQ7CiBjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXI7CiAK
IGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIgewpAQCAtNDksNTYgKzQyLDE4IEBA
IGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIgewogcHVibGljOgogICAgIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKICAgICAKLSAgICAvLyBBZGRzIHRoZSByZXF1ZXN0
IHRvIHRoZSBxdWV1ZSBmb3IgaXRzIGhvc3QuCiAgICAgdm9pZCBzY2hlZHVsZUxvYWRlcihQYXNz
UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBX
ZWJQcm9jZXNzIHdoZW4gYSBSZXNvdXJjZUxvYWRlciBpcyBiZWluZyBjbGVhbmVkIHVwLgogICAg
IHZvaWQgcmVtb3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwogCi0gICAgLy8gQ2Fs
bGVkIHdpdGhpbiB0aGUgTmV0d29ya1Byb2Nlc3Mgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB3aGVu
IGEgcmVzb3VyY2UgbG9hZCBoYXMgZmluaXNoZWQuCi0gICAgdm9pZCBzY2hlZHVsZVJlbW92ZUxv
YWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKLQotICAgIHZvaWQgcmVjZWl2ZWRSZWRpcmVj
dChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlZGlyZWN0VVJM
KTsKLSAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFBy
aW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKLQogICAgIC8v
IEZvciBOZXR3b3JrUHJvY2VzcyBzdGF0aXN0aWNzIHJlcG9ydGluZy4KLSAgICB1aW50NjRfdCBo
b3N0c1BlbmRpbmdDb3VudCgpIGNvbnN0OwogICAgIHVpbnQ2NF90IGxvYWRzUGVuZGluZ0NvdW50
KCkgY29uc3Q7Ci0gICAgdWludDY0X3QgaG9zdHNBY3RpdmVDb3VudCgpIGNvbnN0OwogICAgIHVp
bnQ2NF90IGxvYWRzQWN0aXZlQ291bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBlbnVtIENy
ZWF0ZUhvc3RQb2xpY3kgewotICAgICAgICBDcmVhdGVJZk5vdEZvdW5kLAotICAgICAgICBGaW5k
T25seQotICAgIH07Ci0gICAgCi0gICAgSG9zdFJlY29yZCogaG9zdEZvclVSTChjb25zdCBXZWJD
b3JlOjpVUkwmLCBDcmVhdGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOwotICAgIAotICAgIHZvaWQg
c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcj4qKTsKLQotICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0
KCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZW1vdmVTY2hlZHVsZWRMb2FkZXJzKHZvaWQqIGNvbnRl
eHQpOwotICAgIHZvaWQgcmVtb3ZlU2NoZWR1bGVkTG9hZGVycygpOwotCi0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEhvc3RSZWNvcmQ+LCBTdHJpbmdIYXNoPiBIb3N0TWFwOwot
ICAgIEhvc3RNYXAgbV9ob3N0czsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8TmV0d29y
a1Jlc291cmNlTG9hZGVyPj4gTmV0d29ya1Jlc291cmNlTG9hZGVyU2V0OwotICAgIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlclNldCBtX2xvYWRlcnM7Ci0KLSAgICBSZWZQdHI8SG9zdFJlY29yZD4gbV9u
b25IVFRQUHJvdG9jb2xIb3N0OwotCi0gICAgYm9vbCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7
Ci0KLSAgICBXZWJDb3JlOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiBtX3Jl
cXVlc3RUaW1lcjsKLSAgICAKLSAgICBNdXRleCBtX2xvYWRlcnNUb1JlbW92ZU11dGV4OwotICAg
IFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPj4gbV9sb2FkZXJzVG9SZW1vdmU7
CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1NldHRpbmdzKCk7CiAK
LSAgICB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0OworICAgIEhhc2hTZXQ8
UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IG1fYWN0aXZlTG9hZGVyczsKKyAgICBWZWN0
b3I8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IG1fcGVuZGluZ1NlcmlhbExvYWRlcnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNp
b24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUwKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIEFTU0VSVCghbV9oYW5kbGUpOwotICAgIEFTU0VSVCghbV9ob3N0UmVj
b3JkKTsKIH0KIAogYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmlzU3luY2hyb25vdXMoKSBj
b25zdApAQCAtMTYxLDcgKzE2MCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVh
bnVwKCkKICAgICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAogICAgIC8vIFRlbGwg
dGhlIHNjaGVkdWxlciBhYm91dCB0aGlzIGZpbmlzaGVkIGxvYWRlciBzb29uIHNvIGl0IGNhbiBz
dGFydCBtb3JlIG5ldHdvcmsgcmVxdWVzdHMuCi0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVJlbW92ZUxvYWRlcih0aGlz
KTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcigpLnJlbW92ZUxvYWRlcih0aGlzKTsKIAogICAgIGlmIChtX2hhbmRsZSkgewogICAgICAg
ICAvLyBFeHBsaWNpdCBkZXJlZigpIGJhbGFuY2VkIGJ5IGEgcmVmKCkgaW4gTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpzdGFydCgpCkBAIC0yNjksOCArMjY4LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNvbnRpbnVlV2lsbAogICAgIG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5k
UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcyhuZXdSZXF1
ZXN0KTsKICNlbmRpZgogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKGJpbmQoJk5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QsICZOZXR3b3JrUHJvY2Vz
czo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLCB0aGlzLCBtX3N1Z2dl
c3RlZFJlcXVlc3RGb3JXaWxsU2VuZFJlcXVlc3QudXJsKCkpKTsKLQogICAgIG1fcmVxdWVzdCA9
IG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVxdWVzdDsKICAgICBtX3N1Z2dlc3RlZFJl
cXVlc3RGb3JXaWxsU2VuZFJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmgJKHJldmlzaW9uIDE3Mjg5MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBA
CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCi0jaW5jbHVkZSAiSG9zdFJlY29yZC5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZGVyT3B0aW9ucy5oPgpAQCAtMTI5LDkgKzEyOSw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNTeW5jaHJvbm91cygpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nTWFpblJlc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7IH0KLSAgICAKLSAgICB2b2lk
IHNldEhvc3RSZWNvcmQoSG9zdFJlY29yZCogaG9zdFJlY29yZCkgeyBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOyBtX2hvc3RSZWNvcmQgPSBob3N0UmVjb3JkOyB9Ci0gICAgSG9zdFJlY29yZCog
aG9zdFJlY29yZCgpIGNvbnN0IHsgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsgcmV0dXJuIG1f
aG9zdFJlY29yZC5nZXQoKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBib29s
IHNlbmRBYm9ydGluZ09uRmFpbHVyZShUJiYgbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZVNlbmRG
bGFncyA9IDApCkBAIC0xOTcsNyArMTk0LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uOwogICAgIAotICAgIFJlZlB0
cjxIb3N0UmVjb3JkPiBtX2hvc3RSZWNvcmQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gbV9idWZmZXJlZERhdGE7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlck1hYy5tbQkocmV2aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEyICszNywxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKK3Zv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1NldHRpbmdzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZmVycmVkQ29ubmVj
dGlvbkNvdW50ID0gNjsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5saW1pdGVkUmVxdWVz
dENvdW50ID0gMTAwMDA7CiAKLSAgICB1bnNpZ25lZCBtYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QgPSBXS0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Qo
cHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKKyAgICBXS0luaXRpYWxpemVNYXhpbXVtSFRUUENv
bm5lY3Rpb25Db3VudFBlckhvc3QocHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKIAogICAgIEJv
b2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQgPSBmYWxzZTsKICAgICBCb29sZWFuIHBy
ZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFuVmFsdWUoQ0ZTVFIoIldlYktpdEVu
YWJsZUhUVFBQaXBlbGluaW5nIiksIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uLCAm
a2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQpOwpAQCAtNTIsMTAgKzUxLDYgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0ZgogICAgIGlmIChSZXNvdXJjZVJlcXVlc3Q6
OnJlc291cmNlUHJpb3JpdGllc0VuYWJsZWQoKSkgewogICAgICAgICBXS1NldEhUVFBSZXF1ZXN0
TWF4aW11bVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJp
b3JpdHlIaWdoZXN0KSk7CiAgICAgICAgIFdLU2V0SFRUUFJlcXVlc3RNaW5pbXVtRmFzdExhbmVQ
cmlvcml0eSh0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5TWVk
aXVtKSk7Ci0gICAgICAgIG1fbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSB1bmxpbWl0ZWRS
ZXF1ZXN0Q291bnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVXNlIFdlYktpdCBzY2hlZHVs
ZXIgd2hlbiB3ZSBjYW4ndCB1c2UgcmVxdWVzdCBwcmlvcml0aWVzIHdpdGggQ0ZOZXR3b3JrLgot
ICAgICAgICBtX21heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0ID0gbWF4aW11bUhUVFBDb25uZWN0
aW9uQ291bnRQZXJIb3N0OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyU291cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyU291cC5jcHAJKHJldmlzaW9uIDE3Mjg5MCkKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlclNvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxp
emVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQordm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrU2V0dGluZ3MoKQogewot
ICAgIC8vIFNvdXAgaGFzIGl0cyBvd24gcXVldWUgY29udHJvbDsgaXQgd2FudHMgdG8gaGF2ZSBh
bGwgcmVxdWVzdHMgZ2l2ZW4gdG8KLSAgICAvLyBpdCwgc28gdGhhdCBpdCBpcyBhYmxlIHRvIGxv
b2sgYWhlYWQsIGFuZCBzY2hlZHVsZSB0aGVtIGluIGEgZ29vZCB3YXkuCi0gICAgLy8gU2VlIHRo
ZSBjb21tZW50IGluIFJlc291cmNlUmVxdWVzdFNvdXAuY3BwCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHVubGltaXRlZENvbm5lY3Rpb25Db3VudCA9IDEwMDAwOwotCi0gICAgLy8gRklYTUU6
IFRha2UgYWR2YW50YWdlIG9mIFdlYi1wbGF0Zm9ybSBzcGVjaWZpYyBrbm93bGVkZ2UgdGhhdCBj
YW4gaGVscAotICAgIC8vIHByaW9yaXRpemF0aW9uIGJldHRlciB0aGFuIGxpYnNvdXAgYWxvbmUg
Y2FuIGRvLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEwMTE1I2MxMwotICAgIG1fbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSB1bmxpbWl0
ZWRDb25uZWN0aW9uQ291bnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsOCArODMyLDYgQEAKIAkJNTEyQTk3NjEx
ODBFMDMxRDAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJBOTc1RjE4MEUwMzE2MDAzOUEx
NDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTEyQTk3NjkxODBFMDlC
ODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkE5NzY3MTgwRTA5
QjgwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07CiAJCTUxMkE5NzZBMTgwRTA5QjgwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTJBOTc2ODE4MEUwOUI4MDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzUHJveHlNZXNzYWdlcy5o
ICovOyB9OwotCQk1MTJDMDY4ODE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDMDY4NjE2MzhG
NjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgKi87IH07Ci0JCTUxMkMwNjg5MTYzOEY2N0Uw
MEFCQjkxMSAvKiBIb3N0UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTJDMDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICov
OyB9OwogCQk1MTJDMDY5MDE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMkMwNjhGMTYzOTBFNjkwMEFCQjkxMSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyTWFjLm1tICovOyB9OwogCQk1MTJFMzRFNDEzMEI0RDA1MDBBQkQxOUEgLyogV0tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdBMzNCMzEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5jcHAgKi87IH07CiAJCTUxMkUzNEU1MTMwQjREMDUwMEFCRDE5QSAvKiBXS0FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yODYxLDggKzI4NTksNiBAQAogCQk1MTJBOTc2NjE4MEUwNUQyMDAzOUExNDkgLyogRGF0
YWJhc2VQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGF0YWJhc2VQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW47IHBhdGggPSBEYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkE5NzY3MTgwRTA5QjgwMDM5
QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkE5NzY4MTgwRTA5
QjgwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEyQzA2ODYxNjM4RjY3RTAwQUJCOTExIC8qIEhv
c3RSZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSG9zdFJl
Y29yZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEyQzA2ODcxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNv
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSG9zdFJlY29yZC5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMkUzNTIwMTMwQjU1MDEwMEFCRDE5QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
clByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTJFMzUyMTEzMEI1NTAxMDBBQkQxOUEgLyogV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MTgyLDgg
KzUxNzgsNiBAQAogCQkJCTUxMENDN0RDMTYxMzhFMjkwMEQwM0VEMyAvKiBtYWMgKi8sCiAJCQkJ
NTFGQ0IxODAxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGll
bnQuY3BwICovLAogCQkJCTUxRkNCMTgxMTdCQkZFMDMwMDM5NENEOCAvKiBBc3luY2hyb25vdXNO
ZXR3b3JrTG9hZGVyQ2xpZW50LmggKi8sCi0JCQkJNTEyQzA2ODYxNjM4RjY3RTAwQUJCOTExIC8q
IEhvc3RSZWNvcmQuY3BwICovLAotCQkJCTUxMkMwNjg3MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0
UmVjb3JkLmggKi8sCiAJCQkJNTEzQTE2NDkxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQk1MTNBMTY0QTE2MzBBOUJGMDA1RDdEMjIg
LyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKIAkJCQk1MTNBMTY0QjE2MzBB
OUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4g
Ki8sCkBAIC03MTc0LDcgKzcxNjgsNiBAQAogCQkJCUJDMDZGNDRBMTJEQkQxRjUwMDJENzhERSAv
KiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzA2RjQzQTEyREJDQ0ZCMDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBRDEyNDdFNzhEMDBCQzBF
QzQgLyogSGFuZGxlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyQzA2ODkxNjM4RjY3
RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RjkwREUzMTM3
NjU2MEUwMDUxQ0Y2OCAvKiBIVFRQQ29va2llQWNjZXB0UG9saWN5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0NGNkIyNTEyQzkzRTdBMDA4RjlDMzUgLyogSW1hZ2VPcHRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTFFMDkzNDE4ODYxRDM4MDBEMkRDNDkgLyogV2ViUHJvZ3Jlc3NUcmFja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTg4NDQsNyArODgzNyw2IEBACiAJCQkJQkMwNkY0
MzAxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZGNDRCMTJEQkQxRjUwMDJENzhERSAvKiBHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMDZGNDNCMTJEQkNDRkIwMDJENzhERSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEyQzA2ODgxNjM4RjY3RTAwQUJCOTEx
IC8qIEhvc3RSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY5NkYxMURCRTYwMzAw
NjQ1NUIwIC8qIEFQSUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQkNCMENEMTIxNUUz
M0EwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDMjA0RUUyMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgaW4gU291cmNl
cyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237047</attachid>
            <date>2014-08-24 11:21:51 -0700</date>
            <delta_ts>2014-08-24 21:50:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-host-record-3.patch</filename>
            <type>text/plain</type>
            <size>39875</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mjg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTA4LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbG9hZCBzY2hlZHVs
aW5nIGNvZGUgZnJvbSBuZXR3b3JrIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjE5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFsbCBwbGF0Zm9ybXMganVzdCBmbHVzaCByZXNvdXJjZSBs
b2FkcyBkaXJlY3RseSB0byB0aGUgbmV0d29ya2luZyBsYXllciBieQorICAgICAgICBtYWtpbmcg
dGhlIHBhcmFsbGVsIGxvYWQgY291bnQgbGFyZ2UuIFRoaXMgaXMgZWZmZWN0aXZlbHkgZGVhZCBj
b2RlLgorCisgICAgICAgIEtlZXAgYmFzaWMgc3VwcG9ydCBmb3Igc2VyaWFsaXppbmcgbG9hZHMu
IFRoaXMgaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvSG9zdFJlY29yZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSG9z
dFJlY29yZC5oOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpnZXROZXR3b3JrUHJvY2Vzc1N0YXRpc3RpY3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1
bGVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpyZW1vdmVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpsb2Fkc1BlbmRpbmdDb3VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRzQWN0aXZlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3Rz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVxdWVzdFRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNl
cnZlUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1bGVkTG9hZGVycyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUmVt
b3ZlTG9hZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6aG9zdHNQZW5kaW5nQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0c0FjdGl2ZUNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Lmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNl
TG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVhbnVw
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aXNMb2FkaW5n
TWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpz
ZXRIb3N0UmVjb3JkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjpob3N0UmVjb3JkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9t
YWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Nl
dHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1NldHRpbmdzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cGxhdGZvcm1Jbml0aWFsaXplTWF4
aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDgtMjMgIEJ5dW5nc2VvbiBT
aGluICA8c3VuLnNoaW5AbGdlLmNvbT4KICAKICAgICAgICAgVW5pZnkgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb01lZGlhIGFuZCBzZXRDb250ZW50c1RvQ2FudmFzCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNiBAQCBlbmRpZiAoKQogCiBzZXQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcAogICAgIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAogICAgIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAJKHJldmlzaW9uIDE3Mjg5MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ikhvc3RSZWNvcmQuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCi0j
aW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotSG9zdFJlY29yZDo6SG9zdFJlY29yZChjb25zdCBTdHJpbmcmIG5hbWUsIGludCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX21heFJlcXVlc3Rz
SW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKLXsKLX0KLQotSG9zdFJlY29yZDo6fkhvc3RS
ZWNvcmQoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQobV9sb2FkZXJzSW5Qcm9ncmVz
cy5pc0VtcHR5KCkpOwotICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlIaWdoZXN0OyBwKyspCi0gICAgICAgIEFTU0VSVChtX2xvYWRlcnNQZW5kaW5nW3Bd
LmlzRW1wdHkoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291
cmNlTG9hZGVyKFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGxvYWRlci0+c2V0SG9zdFJlY29y
ZCh0aGlzKTsKLSAgICAKLSAgICBpZiAobG9hZGVyLT5pc1N5bmNocm9ub3VzKCkpCi0gICAgICAg
IG1fc3luY0xvYWRlcnNQZW5kaW5nLmFwcGVuZChsb2FkZXIpOwotICAgIGVsc2UKLSAgICAgICAg
bV9sb2FkZXJzUGVuZGluZ1tsb2FkZXItPnByaW9yaXR5KCldLmFwcGVuZChsb2FkZXIpOwotfQot
Ci12b2lkIEhvc3RSZWNvcmQ6OmFkZExvYWRlckluUHJvZ3Jlc3MoTmV0d29ya1Jlc291cmNlTG9h
ZGVyKiBsb2FkZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1f
bG9hZGVyc0luUHJvZ3Jlc3MuYWRkKGxvYWRlcik7Ci0gICAgbG9hZGVyLT5zZXRIb3N0UmVjb3Jk
KHRoaXMpOwotfQotCi1pbmxpbmUgYm9vbCByZW1vdmVMb2FkZXJGcm9tUXVldWUoTmV0d29ya1Jl
c291cmNlTG9hZGVyKiBsb2FkZXIsIExvYWRlclF1ZXVlJiBxdWV1ZSkKLXsKLSAgICBMb2FkZXJR
dWV1ZTo6aXRlcmF0b3IgZW5kID0gcXVldWUuZW5kKCk7Ci0gICAgZm9yIChMb2FkZXJRdWV1ZTo6
aXRlcmF0b3IgaXQgPSBxdWV1ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKGl0LT5nZXQoKSA9PSBsb2FkZXIpIHsKLSAgICAgICAgICAgIGxvYWRlci0+c2V0SG9zdFJl
Y29yZCgwKTsKLSAgICAgICAgICAgIHF1ZXVlLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
SG9zdFJlY29yZDo6cmVtb3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBGSVhNRSAoTmV0d29y
a1Byb2Nlc3MpOiBEdWUgdG8gSVBDIHJhY2UgY29uZGl0aW9ucywgaXQncyBwb3NzaWJsZSB0aGlz
IEhvc3RSZWNvcmQgd2lsbCBiZSBhc2tlZCB0byByZW1vdmUgdGhlIHNhbWUgbG9hZGVyIHR3aWNl
LgotICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8ga25vdyB0aGUgbG9hZGVyIGhhcyBhbHJlYWR5
IGJlZW4gcmVtb3ZlZCBhbmQgdHJlYXQgaXQgYXMgYSBuby1vcC4KLQotICAgIE5ldHdvcmtSZXNv
dXJjZUxvYWRlclNldDo6aXRlcmF0b3IgaSA9IG1fbG9hZGVyc0luUHJvZ3Jlc3MuZmluZChsb2Fk
ZXIpOwotICAgIGlmIChpICE9IG1fbG9hZGVyc0luUHJvZ3Jlc3MuZW5kKCkpIHsKLSAgICAgICAg
aS0+Z2V0KCktPnNldEhvc3RSZWNvcmQoMCk7Ci0gICAgICAgIG1fbG9hZGVyc0luUHJvZ3Jlc3Mu
cmVtb3ZlKGkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlbW92ZUxvYWRl
ckZyb21RdWV1ZShsb2FkZXIsIG1fc3luY0xvYWRlcnNQZW5kaW5nKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGZvciAoaW50IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdo
ZXN0OyBwcmlvcml0eSA+PSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvd2VzdDsgLS1wcmlvcml0eSkg
ewotICAgICAgICBpZiAocmVtb3ZlTG9hZGVyRnJvbVF1ZXVlKGxvYWRlciwgbV9sb2FkZXJzUGVu
ZGluZ1twcmlvcml0eV0pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotYm9vbCBI
b3N0UmVjb3JkOjpoYXNSZXF1ZXN0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2xvYWRlcnNJblBy
b2dyZXNzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIHAgPSAwOyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKSB7Ci0gICAg
ICAgIGlmICghbV9sb2FkZXJzUGVuZGluZ1twXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVpbnQ2NF90IEhvc3RS
ZWNvcmQ6OnBlbmRpbmdSZXF1ZXN0Q291bnQoKSBjb25zdAotewotICAgIHVpbnQ2NF90IGNvdW50
ID0gMDsKLQotICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlIaWdoZXN0OyBwKyspCi0gICAgICAgIGNvdW50ICs9IG1fbG9hZGVyc1BlbmRpbmdbcF0uc2l6
ZSgpOwotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi11aW50NjRfdCBIb3N0UmVjb3JkOjphY3Rp
dmVMb2FkQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xvYWRlcnNJblByb2dyZXNzLnNp
emUoKTsKLX0KLQotdm9pZCBIb3N0UmVjb3JkOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVl
KExvYWRlclF1ZXVlJiBxdWV1ZSwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCi17Ci0g
ICAgLy8gV2Ugb25seSBlbmZvcmNlIHRoZSBjb25uZWN0aW9uIGxpbWl0IGZvciBodHRwKHMpIGhv
c3RzLCB3aGljaCBhcmUgdGhlIG9ubHkgb25lcyB3aXRoIG5hbWVzLgotICAgIGJvb2wgc2hvdWxk
TGltaXRSZXF1ZXN0cyA9ICFuYW1lKCkuaXNOdWxsKCk7Ci0KLSAgICAvLyBGb3Igbm9uLW5hbWVk
IGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2Ug
dGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudAotICAgIC8vIGlzbid0IGRvbmUgcGFyc2luZyBhbmQg
d2UgZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgotCi0gICAgLy8gRklYTUUgKE5ldHdv
cmtQcm9jZXNzKTogVGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgZG9jdW1lbnQgcGFyc2luZyBhbmQg
c3R5bGVzaGVldHMgaXMgYSBob2xkb3ZlcgotICAgIC8vIGZyb20gdGhlIFdlYkNvcmU6OlJlc291
cmNlTG9hZFNjaGVkdWxlci4KLSAgICAvLyBUaGUgYmVoYXZpb3IgZGVzY3JpYmVkIHdhcyBhdCBv
bmUgdGltZSBpbXBvcnRhbnQgZm9yIFdlYkNvcmUncyBzaW5nbGUgdGhyZWFkZWRuZXNzLgotICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBkb24ndCBjYXJlIGFib3V0IGl0IHdpdGggdGhlIE5l
dHdvcmtQcm9jZXNzLgotICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgZGVjaWRlIGl0J3Mgbm90IGlt
cG9ydGFudCBhbmQgY2hhbmdlIHRoZSBhYm92ZSBjb21tZW50LCBvciBkZWNpZGUgaXQgaXMKLSAg
ICAvLyBzdGlsbCBpbXBvcnRhbnQgYW5kIHNvbWVob3cgYWNjb3VudCBmb3IgaXQuCi0gICAgCi0g
ICAgLy8gVmVyeSBsb3cgcHJpb3JpdHkgbG9hZGVycyBhcmUgb25seSBoYW5kbGVkIHdoZW4gbm8g
b3RoZXIgbG9hZGVycyBhcmUgaW4gcHJvZ3Jlc3MuCi0gICAgaWYgKHNob3VsZExpbWl0UmVxdWVz
dHMgJiYgcHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX2xvYWRl
cnNJblByb2dyZXNzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdoaWxl
ICghcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+IGxvYWRlciA9IHF1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIEFTU0VSVChsb2FkZXItPmhvc3RS
ZWNvcmQoKSA9PSB0aGlzKTsKLQotICAgICAgICAvLyBUaGlzIHJlcXVlc3QgbWlnaHQgYmUgZnJv
bSBXZWJQcm9jZXNzIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rpb24gdG8uCi0gICAgICAgIC8vIElm
IHNvIHdlIHNob3VsZCBqdXN0IHNraXAgaXQuCi0gICAgICAgIGlmICghbG9hZGVyLT5jb25uZWN0
aW9uVG9XZWJQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHJlbW92ZUxvYWRlcihsb2FkZXIuZ2V0
KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hv
dWxkTGltaXRSZXF1ZXN0cyAmJiBsaW1pdHNSZXF1ZXN0cyhwcmlvcml0eSwgbG9hZGVyLmdldCgp
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2xvYWRlcnNJblByb2dyZXNzLmFk
ZChsb2FkZXIpOwotICAgICAgICBxdWV1ZS5yZW1vdmVGaXJzdCgpOwotCi0gICAgICAgIExPRyhO
ZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgSG9zdFJlY29yZDo6c2VydmVQZW5k
aW5nUmVxdWVzdHNGb3JRdWV1ZSAtIFN0YXJ0aW5nIGxvYWQgb2YgJXNcbiIsIGxvYWRlci0+cmVx
dWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBsb2FkZXItPnN0
YXJ0KCk7Ci0gICAgfQotfQotCi12b2lkIEhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1JlcXVlc3Rz
KFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAgICBMT0coTmV0d29y
a1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIEhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1Jl
cXVlc3RzIEhvc3QgbmFtZT0nJXMnIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8g
V2Ugc2VydmUgc3luY2hyb25vdXMgcmVxdWVzdHMgYmVmb3JlIGFueSBvdGhlciByZXF1ZXN0cyB0
byBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIGluIGFueQotICAgIC8vIFdlYlByb2Nlc3MgdGhhdCBp
cyB3YWl0aW5nIG9uIGEgc3luY2hyb25vdXMgbG9hZC4KLSAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
c0ZvclF1ZXVlKG1fc3luY0xvYWRlcnNQZW5kaW5nLCBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hl
c3QpOwotICAgIAotICAgIGZvciAoaW50IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlI
aWdoZXN0OyBwcmlvcml0eSA+PSBtaW5pbXVtUHJpb3JpdHk7IC0tcHJpb3JpdHkpCi0gICAgICAg
IHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUobV9sb2FkZXJzUGVuZGluZ1twcmlvcml0eV0s
IChSZXNvdXJjZUxvYWRQcmlvcml0eSlwcmlvcml0eSk7Ci19Ci0KLWJvb2wgSG9zdFJlY29yZDo6
bGltaXRzUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIE5ldHdvcmtSZXNv
dXJjZUxvYWRlciogbG9hZGVyKSBjb25zdAotewotICAgIEFTU0VSVChsb2FkZXIpOwotICAgIEFT
U0VSVChsb2FkZXItPmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSk7Ci0KLSAgICBpZiAocHJpb3Jp
dHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX2xvYWRlcnNJblByb2dyZXNz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobG9hZGVyLT5jb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSAmJiBtX2xvYWRl
cnNJblByb2dyZXNzLnNpemUoKSA+PSAxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IElmIHdlJ3JlIGV4YWN0bHkgYXQgdGhlIGxpbWl0IGZvciByZXF1ZXN0cyBpbiBmbGlnaHQsIGFu
ZCB0aGlzIGxvYWRlciBpcyBhc3luY2hyb25vdXMsIHRoZW4gd2UncmUgZG9uZSBzZXJ2aW5nIG5l
dyByZXF1ZXN0cy4KLSAgICAvLyBUaGUgc3luY2hyb25vdXMgbG9hZGVyIGV4Y2VwdGlvbiBoYW5k
bGVzIHRoZSBjYXNlIHdoZXJlIGEgc3luYyBYSFIgaXMgbWFkZSB3aGlsZSA2IG90aGVyIHJlcXVl
c3RzIGFyZSBhbHJlYWR5IGluIGZsaWdodC4KLSAgICBpZiAobV9sb2FkZXJzSW5Qcm9ncmVzcy5z
aXplKCkgPT0gbV9tYXhSZXF1ZXN0c0luRmxpZ2h0ICYmICFsb2FkZXItPmlzU3luY2hyb25vdXMo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHBhc3Qg
dGhlIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgbG9hZGVycyBpbiBmbGlnaHQsIHdlIHdvbid0IGV2
ZW4gc2VydmUgbmV3IHN5bmNocm9ub3VzIHJlcXVlc3RzIHJpZ2h0IG5vdy4KLSAgICBpZiAobV9s
b2FkZXJzSW5Qcm9ncmVzcy5zaXplKCkgPiBtX21heFJlcXVlc3RzSW5GbGlnaHQpIHsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgIC8vIElmIHdlIGhhdmUgbW9yZSBsb2FkZXJzIGluIHByb2dyZXNz
IHRoYW4gd2Ugc2hvdWxkLCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBoYWQgYmV0dGVyIGJlIHN5bmNo
cm9ub3VzLgotICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGkgPSBt
X2xvYWRlcnNJblByb2dyZXNzLmJlZ2luKCk7Ci0gICAgICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRl
clNldDo6aXRlcmF0b3IgZW5kID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5lbmQoKTsKLSAgICAgICAg
Zm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpLT5nZXQoKS0+aXNTeW5j
aHJvbm91cygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFT
U0VSVChpICE9IGVuZCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvSG9zdFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0hvc3RSZWNvcmQuaAkocmV2aXNpb24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEhvc3RSZWNvcmRfaAotI2RlZmluZSBIb3N0UmVjb3JkX2gK
LQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZFByaW9yaXR5Lmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1Jl
c291cmNlTG9hZGVyOwotCi10eXBlZGVmIERlcXVlPFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+PiBMb2FkZXJRdWV1ZTsKLXR5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmll
cjsKLQotY2xhc3MgSG9zdFJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPEhvc3RSZWNvcmQ+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIb3N0UmVjb3JkPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSG9zdFJlY29yZChuYW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0KSk7
Ci0gICAgfQotICAgIAotICAgIH5Ib3N0UmVjb3JkKCk7Ci0gICAgCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgCi0gICAgdm9pZCBzY2hlZHVs
ZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPik7Ci0gICAg
dm9pZCBhZGRMb2FkZXJJblByb2dyZXNzKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwotICAgIHZv
aWQgcmVtb3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwotICAgIGJvb2wgaGFzUmVx
dWVzdHMoKSBjb25zdDsKLSAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJl
c291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgIHVpbnQ2NF90IHBlbmRpbmdSZXF1ZXN0Q291bnQo
KSBjb25zdDsKLSAgICB1aW50NjRfdCBhY3RpdmVMb2FkQ291bnQoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBIb3N0UmVjb3JkKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IG1heFJlcXVlc3RzSW5G
bGlnaHQpOwotCi0gICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVlKExvYWRlclF1
ZXVlJiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkpOwotICAgIGJvb2wgbGltaXRzUmVx
dWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHksIE5ldHdvcmtSZXNvdXJjZUxvYWRl
ciopIGNvbnN0OwotCi0gICAgTG9hZGVyUXVldWUgbV9sb2FkZXJzUGVuZGluZ1tXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QgKyAxXTsKLSAgICBMb2FkZXJRdWV1ZSBtX3N5bmNM
b2FkZXJzUGVuZGluZzsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPj4gTmV0d29ya1Jlc291cmNlTG9hZGVyU2V0OwotICAgIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlclNldCBtX2xvYWRlcnNJblByb2dyZXNzOwotCi0gICAgY29uc3QgU3RyaW5nIG1fbmFt
ZTsKLSAgICBpbnQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0jZW5kaWYgLy8g
I2lmbmRlZiBIb3N0UmVjb3JkX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDE3Mjg5MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDkgKzE0
NSw4IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldEQKICAgICBsb2Fk
ZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAotdm9pZCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVxdWVzdHModWludDMyX3QgcmVzb3VyY2VMb2Fk
UHJpb3JpdHkpCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyh1aW50MzJfdCkKIHsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNlcnZlUGVuZGluZ1JlcXVlc3RzKHN0YXRpY19j
YXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihyZXNvdXJjZUxvYWRQcmlvcml0eSkpOwogfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAxNzI4OTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
OCw4ICsyNTgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXROZXR3b3JrUHJvY2Vzc1N0CiAK
ICAgICBTdGF0aXN0aWNzRGF0YSBkYXRhOwogCi0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5z
ZXQoIkhvc3RzUGVuZGluZ0NvdW50Iiwgc2NoZWR1bGVyLmhvc3RzUGVuZGluZ0NvdW50KCkpOwot
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJIb3N0c0FjdGl2ZUNvdW50Iiwgc2NoZWR1
bGVyLmhvc3RzQWN0aXZlQ291bnQoKSk7CiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQo
IkxvYWRzUGVuZGluZ0NvdW50Iiwgc2NoZWR1bGVyLmxvYWRzUGVuZGluZ0NvdW50KCkpOwogICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJMb2Fkc0FjdGl2ZUNvdW50Iiwgc2NoZWR1bGVy
LmxvYWRzQWN0aXZlQ291bnQoKSk7CiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkRv
d25sb2Fkc0FjdGl2ZUNvdW50Iiwgc2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuYWN0aXZlRG93
bmxvYWRDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lv
biAxNzI4OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CiAKLSNpbmNsdWRlICJIb3N0UmVjb3JkLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgpAQCAtMTUsMjExICsxNSw1MSBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scyA9IDIwOwot
CiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkKLSAgICA6IG1fbm9uSFRUUFByb3RvY29sSG9zdChIb3N0UmVjb3JkOjpjcmVhdGUoU3Ry
aW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzKSkKLSAgICAsIG1f
cmVxdWVzdFRpbWVyKHRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0
VGltZXJGaXJlZCkKLQotewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVj
dGlvbkNvdW50UGVySG9zdCgpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKQotewotICAgIGlmICghbV9yZXF1ZXN0
VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZp
cmVkKFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI+KikKIHsKLSAg
ICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtT
ZXR0aW5ncygpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlTG9hZGVyKFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIpCiB7Ci0g
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBsb2FkZXItPnByaW9yaXR5KCk7Ci0g
ICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QgPSBsb2FkZXItPnJlcXVl
c3QoKTsKLSAgICAgICAgCi0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9j
ZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWRlciByZXNvdXJj
ZSAnJXMnIiwgcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgSG9zdFJlY29yZCogaG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VSZXF1ZXN0LnVybCgp
LCBDcmVhdGVJZk5vdEZvdW5kKTsKLSAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+aGFzUmVx
dWVzdHMoKTsKLSAgICBob3N0LT5zY2hlZHVsZVJlc291cmNlTG9hZGVyKGxvYWRlcik7Ci0KLSAg
ICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3VyY2VSZXF1
ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgewotICAgICAgICAvLyBUcnkgdG8g
cmVxdWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5LgotICAgICAgICBob3N0LT5z
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhwcmlvcml0eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSBy
ZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5IG9u
ZXMuCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotfQotCi1Ib3N0UmVjb3Jk
KiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6
OlVSTCYgdXJsLCBDcmVhdGVIb3N0UG9saWN5IGNyZWF0ZUhvc3RQb2xpY3kpCi17Ci0gICAgaWYg
KCF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICByZXR1cm4gbV9ub25IVFRQ
UHJvdG9jb2xIb3N0LmdldCgpOwotCi0gICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3QoKTsKLSAgICBIb3N0UmVjb3JkKiBob3N0ID0g
bV9ob3N0cy5nZXQoaG9zdE5hbWUpOwotICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5
ID09IENyZWF0ZUlmTm90Rm91bmQpIHsKLSAgICAgICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG5ld0hv
c3QgPSBIb3N0UmVjb3JkOjpjcmVhdGUoaG9zdE5hbWUsIG1fbWF4UmVxdWVzdHNJbkZsaWdodFBl
ckhvc3QpOwotICAgICAgICBob3N0ID0gbmV3SG9zdC5nZXQoKTsKLSAgICAgICAgbV9ob3N0cy5h
ZGQoaG9zdE5hbWUsIG5ld0hvc3QucmVsZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGhvc3Q7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9h
ZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgQVNTRVJUKGxvYWRlcik7Ci0KLSAgICBMT0coTmV0d29ya1NjaGVk
dWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
bW92ZUxvYWRJZGVudGlmaWVyIHJlbW92aW5nIGxvYWRlciAlcyIsIGxvYWRlci0+cmVxdWVzdCgp
LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgSG9zdFJlY29yZCogaG9zdCA9
IGxvYWRlci0+aG9zdFJlY29yZCgpOwotICAgIAotICAgIC8vIER1ZSB0byBhIHJhY2UgY29uZGl0
aW9uIHRoZSBXZWJQcm9jZXNzIG1pZ2h0IGhhdmUgbWVzc2FnZWQgdGhlIE5ldHdvcmtQcm9jZXNz
IHRvIHJlbW92ZSB0aGlzIGlkZW50aWZpZXIKLSAgICAvLyBhZnRlciB0aGUgTmV0d29ya1Byb2Nl
c3MgaGFzIGFscmVhZHkgcmVtb3ZlZCBpdCBpbnRlcm5hbGx5LgotICAgIC8vIEluIHRoaXMgc2l0
dWF0aW9uIHdlIG1pZ2h0IG5vdCBoYXZlIGEgSG9zdFJlY29yZCB0byBjbGVhbiB1cC4KLSAgICBp
ZiAoaG9zdCkKLSAgICAgICAgaG9zdC0+cmVtb3ZlTG9hZGVyKGxvYWRlcik7Ci0KLSAgICBzY2hl
ZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgY29uc3QgV2ViQ29yZTo6VVJMJiByZWRpcmVjdFVSTCkKLXsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2Vz
cykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdCBsb2FkZXIg
b3JpZ2luYWxseSBmb3IgJyVzJyByZWRpcmVjdGVkIHRvICclcyciLCBsb2FkZXItPnJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRpcmVjdFVSTC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKIAotICAgIEhvc3RSZWNvcmQqIG9sZEhvc3QgPSBsb2FkZXItPmhvc3RSZWNv
cmQoKTsKKyAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZGVyIHJlc291cmNlICclcyciLCBs
b2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIC8v
IFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkIHdoaWxlIHRoZSBtZXNzYWdlIHdhcyBp
biBmbGlnaHQgZnJvbSBuZXR3b3JrIHRocmVhZCB0byBtYWluIHRocmVhZC4KLSAgICBpZiAoIW9s
ZEhvc3QpCisgICAgLy8gVGhpcyByZXF1ZXN0IG1pZ2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3ZSd2
ZSBsb3N0IG91ciBjb25uZWN0aW9uIHRvLgorICAgIC8vIElmIHNvIHdlIHNob3VsZCBqdXN0IHNr
aXAgaXQuCisgICAgaWYgKCFsb2FkZXItPmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSG9zdFJlY29yZCogbmV3SG9zdCA9IGhvc3RGb3JVUkwocmVkaXJl
Y3RVUkwsIENyZWF0ZUlmTm90Rm91bmQpOwotICAgIAotICAgIGlmIChvbGRIb3N0LT5uYW1lKCkg
PT0gbmV3SG9zdC0+bmFtZSgpKQorICAgIGlmIChsb2FkZXItPmNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpICYmICFtX2FjdGl2ZUxvYWRlcnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ1NlcmlhbExvYWRlcnMuYXBwZW5kKGxvYWRlcik7CiAg
ICAgICAgIHJldHVybjsKLQotICAgIG9sZEhvc3QtPnJlbW92ZUxvYWRlcihsb2FkZXIpOwotICAg
IG5ld0hvc3QtPmFkZExvYWRlckluUHJvZ3Jlc3MobG9hZGVyKTsKLX0KLQotdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQ
cmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCi17Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAi
KE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyBTZXJ2aW5nIHJlcXVlc3RzIGZvciB1cCB0byAlaSBob3N0cyB3aXRoIG1pbmlt
dW0gcHJpb3JpdHkgJWkiLCBtX2hvc3RzLnNpemUoKSwgbWluaW11bVByaW9yaXR5KTsKLQotICAg
IG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKLSAgICAKLSAgICBtX25vbkhUVFBQcm90b2NvbEhvc3Qt
PnNlcnZlUGVuZGluZ1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSk7Ci0KLSAgICBtX2hvc3RzLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBWZWN0b3I8UmVmUHRyPEhvc3RSZWNvcmQ+PiBob3N0c1Rv
U2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7Ci0K
LSAgICBzaXplX3Qgc2l6ZSA9IGhvc3RzVG9TZXJ2ZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgSG9zdFJlY29yZCogaG9zdCA9IGhvc3Rz
VG9TZXJ2ZVtpXS5nZXQoKTsKLSAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAg
ICAgICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2hvc3RzLnJlbW92ZShob3N0LT5uYW1lKCkpOwogICAg
IH0KLX0KLQotc3RhdGljIGJvb2wgcmVtb3ZlU2NoZWR1bGVkTG9hZGVyc0NhbGxlZCA9IGZhbHNl
OwotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExv
YWRlcnModm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIEFTU0VSVChyZW1vdmVTY2hlZHVsZWRMb2FkZXJzQ2FsbGVkKTsKKyAgICBtX2FjdGl2ZUxv
YWRlcnMuYWRkKGxvYWRlci5nZXQoKSk7CiAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKiBzY2hlZHVsZXIgPSBzdGF0aWNfY2FzdDxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Kj4oY29udGV4dCk7Ci0gICAgc2NoZWR1bGVyLT5yZW1vdmVTY2hlZHVsZWRMb2FkZXJzKCk7Cisg
ICAgbG9hZGVyLT5zdGFydCgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnMoKQotewotICAgIFZlY3RvcjxSZWZQdHI8TmV0d29y
a1Jlc291cmNlTG9hZGVyPj4gbG9hZGVyc1RvUmVtb3ZlOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9hZGVyc1RvUmVtb3ZlTXV0ZXgpOwotICAgICAgICBsb2FkZXJzVG9S
ZW1vdmUgPSBtX2xvYWRlcnNUb1JlbW92ZTsKLSAgICAgICAgbV9sb2FkZXJzVG9SZW1vdmUuY2xl
YXIoKTsKLSAgICAgICAgcmVtb3ZlU2NoZWR1bGVkTG9hZGVyc0NhbGxlZCA9IGZhbHNlOwotICAg
IH0KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvYWRlcnNUb1JlbW92ZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVtb3ZlTG9hZGVyKGxvYWRlcnNUb1JlbW92ZVtpXS5nZXQoKSk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVSZW1vdmVM
b2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCit2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRl
cikKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FkZXJzVG9SZW1vdmVNdXRleCk7Ci0g
ICAgCi0gICAgbV9sb2FkZXJzVG9SZW1vdmUuYXBwZW5kKGxvYWRlcik7Ci0gICAgCi0gICAgaWYg
KCFyZW1vdmVTY2hlZHVsZWRMb2FkZXJzQ2FsbGVkKSB7Ci0gICAgICAgIHJlbW92ZVNjaGVkdWxl
ZExvYWRlcnNDYWxsZWQgPSB0cnVlOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnMsIHRoaXMpOwotICAg
IH0KLX0KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi11aW50NjRfdCBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0c1BlbmRpbmdDb3VudCgpIGNvbnN0Ci17Ci0gICAg
dWludDY0X3QgY291bnQgPSBtX25vbkhUVFBQcm90b2NvbEhvc3QtPnBlbmRpbmdSZXF1ZXN0Q291
bnQoKSA/IDEgOiAwOworICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2Vz
cykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyIHJlc291cmNlICcl
cyciLCBsb2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgIEhvc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5kKCk7Ci0gICAgZm9y
IChIb3N0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9ob3N0cy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7Ci0gICAgICAgIGlmIChpLT52YWx1ZS0+cGVuZGluZ1JlcXVlc3RDb3VudCgpKQotICAg
ICAgICAgICAgKytjb3VudDsKLSAgICB9CisgICAgbV9hY3RpdmVMb2FkZXJzLnJlbW92ZShsb2Fk
ZXIpOwogCi0gICAgcmV0dXJuIGNvdW50OworICAgIHdoaWxlICghbV9wZW5kaW5nU2VyaWFsTG9h
ZGVycy5pc0VtcHR5KCkgJiYgbV9hY3RpdmVMb2FkZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgc2No
ZWR1bGVMb2FkZXIobV9wZW5kaW5nU2VyaWFsTG9hZGVycy50YWtlTGFzdCgpKTsKIH0KIAogdWlu
dDY0X3QgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZHNQZW5kaW5nQ291bnQoKSBj
b25zdAogewotICAgIHVpbnQ2NF90IGNvdW50ID0gbV9ub25IVFRQUHJvdG9jb2xIb3N0LT5wZW5k
aW5nUmVxdWVzdENvdW50KCk7Ci0KLSAgICBIb3N0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2hvc3RzLmVuZCgpOwotICAgIGZvciAoSG9zdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1faG9z
dHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgY291bnQgKz0gaS0+dmFsdWUtPnBl
bmRpbmdSZXF1ZXN0Q291bnQoKTsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdWludDY0X3Qg
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdHNBY3RpdmVDb3VudCgpIGNvbnN0Ci17
Ci0gICAgdWludDY0X3QgY291bnQgPSAwOwotCi0gICAgaWYgKG1fbm9uSFRUUFByb3RvY29sSG9z
dC0+YWN0aXZlTG9hZENvdW50KCkpCi0gICAgICAgIGNvdW50ID0gMTsKLQotICAgIEhvc3RNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5kKCk7Ci0gICAgZm9yIChIb3N0TWFwOjpj
b25zdF9pdGVyYXRvciBpID0gbV9ob3N0cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAg
ICAgIGlmIChpLT52YWx1ZS0+YWN0aXZlTG9hZENvdW50KCkpCi0gICAgICAgICAgICArK2NvdW50
OwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKKyAgICByZXR1cm4gbV9wZW5kaW5nU2VyaWFs
TG9hZGVycy5zaXplKCk7CiB9CiAKIHVpbnQ2NF90IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmxvYWRzQWN0aXZlQ291bnQoKSBjb25zdAogewotICAgIHVpbnQ2NF90IGNvdW50ID0gbV9u
b25IVFRQUHJvdG9jb2xIb3N0LT5hY3RpdmVMb2FkQ291bnQoKTsKLQotICAgIEhvc3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5kKCk7Ci0gICAgZm9yIChIb3N0TWFwOjpjb25z
dF9pdGVyYXRvciBpID0gbV9ob3N0cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBj
b3VudCArPSBpLT52YWx1ZS0+YWN0aXZlTG9hZENvdW50KCk7Ci0KLSAgICByZXR1cm4gY291bnQ7
CisgICAgcmV0dXJuIG1fYWN0aXZlTG9hZGVycy5zaXplKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTcyODkwKQor
KysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMSArMjYsMTQgQEAKICNpZm5kZWYgTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCiAjZGVmaW5lIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXJfaAogCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRQcmlvcml0eS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiAj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
VVJMOwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgSG9zdFJlY29yZDsKIGNsYXNz
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIAogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlciB7CkBAIC00OSw1NiArNDIsMTggQEAgY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlciB7CiBwdWJsaWM6CiAgICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAg
IAotICAgIC8vIEFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIGZvciBpdHMgaG9zdC4KICAg
ICB2b2lkIHNjaGVkdWxlTG9hZGVyKFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPik7
Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlByb2Nlc3Mgd2hlbiBhIFJlc291cmNlTG9hZGVy
IGlzIGJlaW5nIGNsZWFuZWQgdXAuCiAgICAgdm9pZCByZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291
cmNlTG9hZGVyKik7CiAKLSAgICAvLyBDYWxsZWQgd2l0aGluIHRoZSBOZXR3b3JrUHJvY2VzcyBv
biBhIGJhY2tncm91bmQgdGhyZWFkIHdoZW4gYSByZXNvdXJjZSBsb2FkIGhhcyBmaW5pc2hlZC4K
LSAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwot
Ci0gICAgdm9pZCByZWNlaXZlZFJlZGlyZWN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0
IFdlYkNvcmU6OlVSTCYgcmVkaXJlY3RVUkwpOwotICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVz
dHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlMb3cpOwotCiAgICAgLy8gRm9yIE5ldHdvcmtQcm9jZXNzIHN0YXRpc3RpY3Mg
cmVwb3J0aW5nLgotICAgIHVpbnQ2NF90IGhvc3RzUGVuZGluZ0NvdW50KCkgY29uc3Q7CiAgICAg
dWludDY0X3QgbG9hZHNQZW5kaW5nQ291bnQoKSBjb25zdDsKLSAgICB1aW50NjRfdCBob3N0c0Fj
dGl2ZUNvdW50KCkgY29uc3Q7CiAgICAgdWludDY0X3QgbG9hZHNBY3RpdmVDb3VudCgpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0
ZUlmTm90Rm91bmQsCi0gICAgICAgIEZpbmRPbmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0UmVj
b3JkKiBob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIENyZWF0ZUhvc3RQb2xpY3kgPSBG
aW5kT25seSk7Ci0gICAgCi0gICAgdm9pZCBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7
Ci0gICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyPiopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVt
SFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVNj
aGVkdWxlZExvYWRlcnModm9pZCogY29udGV4dCk7Ci0gICAgdm9pZCByZW1vdmVTY2hlZHVsZWRM
b2FkZXJzKCk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SG9zdFJlY29y
ZD4sIFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hvc3RzOwotCi0gICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+PiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXJTZXQ7Ci0gICAgTmV0d29ya1Jlc291cmNlTG9hZGVyU2V0IG1fbG9hZGVyczsKLQot
ICAgIFJlZlB0cjxIb3N0UmVjb3JkPiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7Ci0KLSAgICBib29s
IG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZDsKLQotICAgIFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI+IG1fcmVxdWVzdFRpbWVyOwotICAgIAotICAgIE11dGV4IG1f
bG9hZGVyc1RvUmVtb3ZlTXV0ZXg7Ci0gICAgVmVjdG9yPFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VM
b2FkZXI+PiBtX2xvYWRlcnNUb1JlbW92ZTsKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrU2V0dGluZ3MoKTsKIAotICAgIHVuc2lnbmVkIG1fbWF4UmVxdWVzdHNJbkZs
aWdodFBlckhvc3Q7CisgICAgSGFzaFNldDxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPj4g
bV9hY3RpdmVMb2FkZXJzOworICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVy
Pj4gbV9wZW5kaW5nU2VyaWFsTG9hZGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNzI4OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsNyArMTEzLDYgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNl
TAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKCFtX2hhbmRs
ZSk7Ci0gICAgQVNTRVJUKCFtX2hvc3RSZWNvcmQpOwogfQogCiBib29sIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6aXNTeW5jaHJvbm91cygpIGNvbnN0CkBAIC0xNjEsNyArMTYwLDcgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogICAgIGludmFsaWRhdGVTYW5kYm94RXh0
ZW5zaW9ucygpOwogCiAgICAgLy8gVGVsbCB0aGUgc2NoZWR1bGVyIGFib3V0IHRoaXMgZmluaXNo
ZWQgbG9hZGVyIHNvb24gc28gaXQgY2FuIHN0YXJ0IG1vcmUgbmV0d29yayByZXF1ZXN0cy4KLSAg
ICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigp
LnNjaGVkdWxlUmVtb3ZlTG9hZGVyKHRoaXMpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQo
KS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMpOwogCiAg
ICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmKCkgYmFsYW5jZWQg
YnkgYSByZWYoKSBpbiBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKQEAgLTI2OSw4ICsy
NjgsNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsCiAgICAgbV9z
dWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNl
cnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QpOwogI2VuZGlmCiAKLSAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goYmluZCgmTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2
ZWRSZWRpcmVjdCwgJk5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCksIHRoaXMsIG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVxdWVzdC51
cmwoKSkpOwotCiAgICAgbV9yZXF1ZXN0ID0gbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRS
ZXF1ZXN0OwogICAgIG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVxdWVzdCA9IFJlc291
cmNlUmVxdWVzdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTcyODkwKQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
CiAKLSNpbmNsdWRlICJIb3N0UmVjb3JkLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgog
I2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZVJlc291cmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CkBAIC0xMjksOSArMTI5
LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Q7CiAgICAgYm9v
bCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2lzTG9hZGluZ01haW5S
ZXNvdXJjZTsgfQotICAgIAotICAgIHZvaWQgc2V0SG9zdFJlY29yZChIb3N0UmVjb3JkKiBob3N0
UmVjb3JkKSB7IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7IG1faG9zdFJlY29yZCA9IGhvc3RS
ZWNvcmQ7IH0KLSAgICBIb3N0UmVjb3JkKiBob3N0UmVjb3JkKCkgY29uc3QgeyBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOyByZXR1cm4gbV9ob3N0UmVjb3JkLmdldCgpOyB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIGJvb2wgc2VuZEFib3J0aW5nT25GYWlsdXJlKFQmJiBtZXNz
YWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzID0gMCkKQEAgLTE5Nyw3ICsxOTQsNiBAQCBw
cml2YXRlOgogCiAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nv
bm5lY3Rpb247CiAgICAgCi0gICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1faG9zdFJlY29yZDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcmVkRGF0YTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tCShyZXZpc2lvbiAxNzI4
OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENv
bm5lY3Rpb25Db3VudFBlckhvc3QoKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrU2V0dGluZ3MoKQogewogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQgPSA2OwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB1bmxpbWl0ZWRSZXF1ZXN0Q291bnQgPSAxMDAwMDsKIAotICAgIHVuc2lnbmVk
IG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCA9IFdLSW5pdGlhbGl6ZU1heGltdW1I
VFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworICAg
IFdLSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRD
b25uZWN0aW9uQ291bnQpOwogCiAgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1h
dCA9IGZhbHNlOwogICAgIEJvb2xlYW4gcHJlZlZhbHVlID0gQ0ZQcmVmZXJlbmNlc0dldEFwcEJv
b2xlYW5WYWx1ZShDRlNUUigiV2ViS2l0RW5hYmxlSFRUUFBpcGVsaW5pbmciKSwga0NGUHJlZmVy
ZW5jZXNDdXJyZW50QXBwbGljYXRpb24sICZrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCk7CkBA
IC01MiwxMCArNTEsNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRm
CiAgICAgaWYgKFJlc291cmNlUmVxdWVzdDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpKSB7
CiAgICAgICAgIFdLU2V0SFRUUFJlcXVlc3RNYXhpbXVtUHJpb3JpdHkodG9QbGF0Zm9ybVJlcXVl
c3RQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QpKTsKICAgICAgICAgV0tTZXRI
VFRQUmVxdWVzdE1pbmltdW1GYXN0TGFuZVByaW9yaXR5KHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3Jp
dHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0pKTsKLSAgICAgICAgbV9tYXhSZXF1ZXN0c0lu
RmxpZ2h0UGVySG9zdCA9IHVubGltaXRlZFJlcXVlc3RDb3VudDsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBVc2UgV2ViS2l0IHNjaGVkdWxlciB3aGVuIHdlIGNhbid0IHVzZSByZXF1ZXN0IHBy
aW9yaXRpZXMgd2l0aCBDRk5ldHdvcmsuCi0gICAgICAgIG1fbWF4UmVxdWVzdHNJbkZsaWdodFBl
ckhvc3QgPSBtYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Q7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJTb3VwLmNwcAkocmV2aXNp
b24gMTcyODkwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICsz
MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdCgpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtTZXR0aW5ncygpCiB7Ci0gICAgLy8gU291cCBoYXMgaXRzIG93biBxdWV1ZSBj
b250cm9sOyBpdCB3YW50cyB0byBoYXZlIGFsbCByZXF1ZXN0cyBnaXZlbiB0bwotICAgIC8vIGl0
LCBzbyB0aGF0IGl0IGlzIGFibGUgdG8gbG9vayBhaGVhZCwgYW5kIHNjaGVkdWxlIHRoZW0gaW4g
YSBnb29kIHdheS4KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5saW1pdGVkQ29ubmVjdGlvbkNvdW50
ID0gMTAwMDA7Ci0KLSAgICAvLyBGSVhNRTogVGFrZSBhZHZhbnRhZ2Ugb2YgV2ViLXBsYXRmb3Jt
IHNwZWNpZmljIGtub3dsZWRnZSB0aGF0IGNhbiBoZWxwCi0gICAgLy8gcHJpb3JpdGl6YXRpb24g
YmV0dGVyIHRoYW4gbGlic291cCBhbG9uZSBjYW4gZG8uCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxMTUjYzEzCi0gICAgbV9tYXhSZXF1ZXN0
c0luRmxpZ2h0UGVySG9zdCA9IHVubGltaXRlZENvbm5lY3Rpb25Db3VudDsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzI4OTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgz
Miw4ICs4MzIsNiBAQAogCQk1MTJBOTc2MTE4MEUwMzFEMDAzOUExNDkgLyogRGF0YWJhc2VQcm9j
ZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMkE5NzVGMTgwRTAzMTYwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NNZXNzYWdlcy5o
ICovOyB9OwogCQk1MTJBOTc2OTE4MEUwOUI4MDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEyQTk3NjcxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1By
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTEyQTk3NkExODBFMDlCODAwMzlBMTQ5
IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkE5NzY4MTgwRTA5QjgwMDM5QTE0OSAvKiBEYXRh
YmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VzLmggKi87IH07Ci0JCTUxMkMwNjg4MTYzOEY2N0UwMEFC
QjkxMSAvKiBIb3N0UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMkMwNjg2MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0UmVjb3JkLmNwcCAq
LzsgfTsKLQkJNTEyQzA2ODkxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkMwNjg3MTYzOEY2N0Uw
MEFCQjkxMSAvKiBIb3N0UmVjb3JkLmggKi87IH07CiAJCTUxMkMwNjkwMTYzOTBFNjkwMEFCQjkx
MSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyQzA2OEYxNjM5MEU2OTAwQUJCOTExIC8q
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gKi87IH07CiAJCTUxMkUzNEU0MTMw
QjREMDUwMEFCRDE5QSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0IzMTMwQjMwOEMwMEY4
MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNTEyRTM0RTUx
MzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4
MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjEsOCArMjg1OSw2IEBACiAJCTUxMkE5
NzY2MTgwRTA1RDIwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBEYXRhYmFzZVByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjsgcGF0aCA9IERhdGFiYXNlcy9E
YXRhYmFzZVByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEyQTk3NjcxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTEyQTk3NjgxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1By
b3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VQ
cm9jZXNzUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTJD
MDY4NjE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBIb3N0UmVjb3JkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNz
L0hvc3RSZWNvcmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTJDMDY4NzE2
MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBIb3N0UmVjb3JkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkMwNjhGMTYzOTBFNjkwMEFCQjkxMSAv
KiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyRTM1MjAxMzBCNTUwMTAwQUJEMTlBIC8q
IFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkUzNTIxMTMwQjU1MDEwMEFCRDE5QSAvKiBX
ZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUxODIsOCArNTE3OCw2IEBACiAJCQkJNTEwQ0M3REMxNjEzOEUy
OTAwRDAzRUQzIC8qIG1hYyAqLywKIAkJCQk1MUZDQjE4MDE3QkJGRTAzMDAzOTRDRDggLyogQXN5
bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5jcHAgKi8sCiAJCQkJNTFGQ0IxODExN0JCRkUw
MzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCAqLywKLQkJCQk1
MTJDMDY4NjE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgKi8sCi0JCQkJNTEyQzA2
ODcxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuaCAqLywKIAkJCQk1MTNBMTY0OTE2MzBB
OUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJ
CTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oICovLAogCQkJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTcxNzQsNyArNzE2OCw2IEBACiAJCQkJ
QkMwNkY0NEExMkRCRDFGNTAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDNBMTJEQkNDRkIwMDJENzhE
RSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMwQ0U3MkFEMTI0N0U3OEQwMEJDMEVDNCAvKiBIYW5kbGVNZXNzYWdlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MTJDMDY4OTE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzdGOTBERTMxMzc2NTYwRTAwNTFDRjY4IC8qIEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QjI1MTJDOTNFN0EwMDhGOUMzNSAv
KiBJbWFnZU9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMUUwOTM0MTg4NjFEMzgwMEQy
REM0OSAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODg0
NCw3ICs4ODM3LDYgQEAKIAkJCQlCQzA2RjQzMDEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0
NEIxMkRCRDFGNTAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0M0IxMkRCQ0NGQjAwMkQ3OERFIC8q
IEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTJDMDY4ODE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzY0Njk2RjExREJFNjAzMDA2NDU1QjAgLyogQVBJQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNCQ0IwQ0QxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25h
cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRFRTIxMUM4M0U5ODAwOEYzMzc1IC8qIElu
amVjdGVkQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>