<?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>43135</bug_id>
          
          <creation_ts>2010-07-28 12:19:42 -0700</creation_ts>
          <short_desc>Decouple FileThread from FileStream to support generic file-related async tasks</short_desc>
          <delta_ts>2010-07-30 22:04:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>42903</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jianli</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257286</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 12:19:42 -0700</bug_when>
    <thetext>Decouple FileThread from FileStream to support generic file-related async tasks.
This is needed for FileSystem API implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257289</commentid>
    <comment_count>1</comment_count>
      <attachid>62860</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 12:23:24 -0700</bug_when>
    <thetext>Created attachment 62860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257378</commentid>
    <comment_count>2</comment_count>
      <attachid>62860</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-28 15:01:16 -0700</bug_when>
    <thetext>Comment on attachment 62860
Patch

It is a good idea to support generic file related async tasks. However, I am thinking if it is possible to make current FileThreadTask support calling any class methods asynchronously. How about something like the following:

// FileThread.h
    ...

    class Task : public Noncopyable {
    public:
        virtual ~Task() { }
        virtual void performTask() = 0;
        void* instance() const { return m_instance; }
    protected:
        Task(void* instance) : m_instance(instance) { }
        void* m_instance;
    };

    void postTask(PassOwnPtr&lt;Task&gt; task);
    void unscheduleTasks(const void* instance);

// FileThreadTask.h

...

template&lt;typename R, typename T&gt;
class FileThreadTask0 : public FileThread::Task {
public:
    typedef R (T::*Method)();
    typedef FileThreadTask0&lt;R, T&gt; FileThreadTask;

    static PassOwnPtr&lt;FileThreadTask&gt; create(T* instance, Method method)
    {
        return new FileThreadTask(instance, method);
    }

private:
    FileThreadTask0(T* instance, Method method)
        : FileThread::Task(instance)
        , m_method(method)
    {
    }

    virtual void performTask()
    {
        (*reinterpret_cast&lt;T*&gt;(instance()).*m_method)();
    }

private:
    Method m_method;
};

...

template&lt;typename R, typename T&gt;
PassOwnPtr&lt;FileThread::Task&gt; createFileThreadTask(
    T* const callee,
    R (T::*method)())
{
    return FileThreadTask0&lt;R, T&gt;::create(
        callee,
        method);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257494</commentid>
    <comment_count>3</comment_count>
      <attachid>62903</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 18:03:53 -0700</bug_when>
    <thetext>Created attachment 62903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257499</commentid>
    <comment_count>4</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 18:07:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 62860 [details])
&gt; It is a good idea to support generic file related async tasks. However, I am thinking if it is possible to make current FileThreadTask support calling any class methods asynchronously. How about something like the following:
&gt; 
&gt; // FileThread.h
&gt;     ...

Sounds good, and it would require less changes.   Updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258399</commentid>
    <comment_count>5</comment_count>
      <attachid>62903</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-30 14:44:26 -0700</bug_when>
    <thetext>Comment on attachment 62903
Patch

Looks good. Please address the following issue before you land.

WebCore/html/FileThreadTask.h: 
 +      R (FileStream::*method)());
Why removing this? I think this forward declaration is needed to get rid of the warning treater as error in snow leopard. See http://trac.webkit.org/changeset/59166 for detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258534</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-30 22:04:29 -0700</bug_when>
    <thetext>Committed r64406: &lt;http://trac.webkit.org/changeset/64406&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62860</attachid>
            <date>2010-07-28 12:23:24 -0700</date>
            <delta_ts>2010-07-28 18:03:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43135-20100728122322.patch</filename>
            <type>text/plain</type>
            <size>23644</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2RmMDRkODk0ZDFjZmJhMzBkNTI5MTkyYTNiNDliMzExNzAwNGFhYy4uOTM0MDdmODU5NTI0NDZh
Y2Q0YTRhYmI4ZGVhNTM5ZjZlYTM4MjRiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxMC0wNy0yOCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVjb3VwbGUgRmlsZVRocmVhZCBmcm9tIEZpbGVT
dHJlYW0gdG8gc3VwcG9ydCBnZW5lcmljIGZpbGUtcmVsYXRlZCBhc3luYyB0YXNrcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzUKKworICAgICAg
ICBSZW5hbWUgRmlsZVRocmVhZFRhc2sgdG8gRmlsZVN0cmVhbVRhc2suCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIGFzIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcy4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9GaWxlU3Ry
ZWFtUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbVByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlU3RyZWFtUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVT
dHJlYW1Qcm94eTo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtUHJveHk6Ondy
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2FtZUZpbGVTdHJlYW1QcmVkaWNhdGU6OlNhbWVGaWxlU3RyZWFtUHJl
ZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhbWVGaWxlU3RyZWFtUHJlZGljYXRlOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6c3RvcCk6CisgICAg
ICAgICogaHRtbC9GaWxlU3RyZWFtVGFzay5oOiBSZW5hbWVkIGZyb20gRmlsZVRocmVhZFRhc2su
CisgICAgICAgICogaHRtbC9GaWxlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVU
aHJlYWQ6OnN0b3ApOgorICAgICAgICAqIGh0bWwvRmlsZVRocmVhZC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVUaHJlYWQ6
OlRhc2s6Oik6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFkOjpUYXNrOjp0eXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGVUaHJlYWQ6OnVuc2NoZWR1bGVUYXNrcyk6CisgICAgICAgICog
aHRtbC9GaWxlVGhyZWFkVGFzay5oOiBSZW1vdmVkLgorCiAyMDEwLTA3LTI3ICBLaW51a28gWWFz
dWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZh
ZmFpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggNDkzODhjY2YyNjdkNzJjMDBkMGQ0ODhmMmJkYTBlMjdhYjI1OTg2Yi4u
MGJmNTkxZjM3NTc5MTVmM2ZiNTkwZTE4YjM5ZTM2MjIyZDI0MmE3NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMzM5
LDkgKzEzMzksOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtQ2xpZW50LmggXAogCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmggXAorCVdlYkNvcmUvaHRtbC9GaWxlU3RyZWFtVGFz
ay5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5jcHAgXAogCVdlYkNvcmUvaHRtbC9GaWxl
VGhyZWFkLmggXAotCVdlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwKIAlXZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlX
ZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhYWZiMjIyZWEyZDZkMmM1
MjkzOTdhNTQ0YWI5YTBkZTJkMDg0ODNmLi4wZjVmNGE4ZWE4ZDU5NjVkMGM4NGQ3Y2U1Y2Y2MDA0
OGY2ZGJjMDhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMTQ5OCw5ICsxNDk4LDkgQEAKICAgICAgICAgICAgICdodG1sL0Zp
bGVTdHJlYW1DbGllbnQuaCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlU3RyZWFtUHJveHkuY3Bw
JywKICAgICAgICAgICAgICdodG1sL0ZpbGVTdHJlYW1Qcm94eS5oJywKKyAgICAgICAgICAgICdo
dG1sL0ZpbGVTdHJlYW1UYXNrLmgnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZC5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvRmlsZVRocmVhZC5oJywKLSAgICAgICAgICAgICdodG1sL0Zp
bGVUaHJlYWRUYXNrLmgnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmNwcCcsCiAg
ICAgICAgICAgICAnaHRtbC9Gb3JtRGF0YUxpc3QuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1M
RW50aXR5UGFyc2VyLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCAwNzUxODA5YWJjNjEzZjFhZGE2MmQxNmU3YTViYWU1ZWQw
ODFlZDM5Li44MmU5YWZlZjg1OTIxNjVkMzQyNDNjM2Y3MTVlMzY0YzAxN2E4NmNiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEz
OTAsOCArMTM5MCw4IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvRmlsZVN0cmVhbS5oIFwKICAg
ICBodG1sL0ZpbGVTdHJlYW1DbGllbnQuaCBcCiAgICAgaHRtbC9GaWxlU3RyZWFtUHJveHkuaCBc
CisgICAgaHRtbC9GaWxlU3RyZWFtVGFzay5oIFwKICAgICBodG1sL0ZpbGVUaHJlYWQuaCBcCi0g
ICAgaHRtbC9GaWxlVGhyZWFkVGFzay5oIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAg
ICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXAogICAgIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQu
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA4OWMwN2Q1ODAzYmIz
NWM1MmNlNjliNjdkNTk1MjkwN2RlMmM5OWExLi41OTI1Yjg2MTdmZmQ5YjFhNWIzZmNiNTAxYzZj
ODhiZmJhNzU1YjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTM2
MDQ1LDE1ICszNjA0NSwxNSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWQuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcRmlsZVN0cmVhbVRhc2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcRmlsZVRocmVhZC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZpbGVUaHJlYWRUYXNrLmgiDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGaWxlVGhyZWFkLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDk0NWFhNWRhMDJiZmQ3MjE3YmIwNTVlY2MxYmJjMzA0ODI2MWE5MTYuLmMxNmFjMTBiZDM4
ZWY5NTFlOTVlZmNhY2NlYzQ3ZjdjYjRlNjFiMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzE1LDcgKzIzMTUsNyBAQAogCQk4OTUyNTNEOTExNkM0
QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzRDYxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVT
dHJlYW1DbGllbnQuaCAqLzsgfTsKIAkJODk1MjUzREMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVT
dHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLzsg
fTsKIAkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIxMTZDNEVG
NTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovOyB9OwotCQk4OTUyNTNERjExNkM0RjA2
MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFk
VGFzay5oICovOyB9OworCQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVN0cmVhbVRh
c2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1
M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlU3RyZWFtVGFzay5oICovOyB9OwogCQk4OTg4RTEw
RTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJ
dGVtLmNwcCAqLzsgfTsKIAkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwRDEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk4OUI1RUFBMTExRTgwMDNEMDBGMjM2N0UgLyogTGluZUVu
ZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
OUI1RUE5RjExRTgwMDNEMDBGMjM2N0UgLyogTGluZUVuZGluZy5jcHAgKi87IH07CkBAIC04MDQx
LDcgKzgwNDEsNyBAQAogCQk4OTUyNTNENjExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1M0RBMTE2QzRFRjUwMENBQkYw
MCAvKiBGaWxlU3RyZWFtUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmlsZVN0cmVhbVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBG
aWxlU3RyZWFtVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3Ry
ZWFtVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg4RTEwQzExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg4RTEw
RDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODlCNUVB
OUYxMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGluZUVuZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzY5Miw5ICsxMzY5Miw5IEBACiAJCQkJODk1MjUzRDYxMTZDNEM2ODAwQ0FCRjAw
IC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLywKIAkJCQk4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAg
LyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLywKIAkJCQk4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAg
LyogRmlsZVN0cmVhbVByb3h5LmggKi8sCisJCQkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1UYXNrLmggKi8sCiAJCQkJODk1MjUzNTAxMTY0MUIzNDAwQ0FCRjAwIC8qIEZp
bGVUaHJlYWQuY3BwICovLAogCQkJCTg5NTI1MzUxMTE2NDFCMzQwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkLmggKi8sCi0JCQkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNr
LmggKi8sCiAJCQkJQTgxMzZEMzcwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAg
Ki8sCiAJCQkJQTgxMzZEMzYwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovLAog
CQkJCUJDOTdFMjM5MTA5MTQ0OTUwMDEwRDM2MSAvKiBIVE1MQWxsQ29sbGVjdGlvbi5jcHAgKi8s
CkBAIC0xODI2NCw3ICsxODI2NCw3IEBACiAJCQkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAwIC8q
IEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0QjNGNzMwQzcyMjA0NzAw
MDUzMERGIC8qIEZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg5NTI1MzUzMTE2NDFC
MzQwMENBQkYwMCAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKLQkJCQk4OTUyNTNERjEx
NkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTg5
NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlU3RyZWFtVGFzay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM1RUI2OUYwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVByb3h5LmNwcCBi
L1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCmluZGV4IGUyNTE2ZGY5OTFiNWE1NDQz
NGJkNTBmMTRhNzA5MzkyYjY4MWYyZmIuLmM0NTZlZDgxNjI3MjMyYjJhMDJjYTBmMTE3NTBhNzVh
NDlmOWQwN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtUHJveHkuY3BwCkBAIC0zNiw5ICszNiw5IEBACiAK
ICNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSAiRmlsZVN0cmVhbVRhc2suaCIKICNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAi
RmlsZVRocmVhZC5oIgotI2luY2x1ZGUgIkZpbGVUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKQEAg
LTU5LDcgKzU5LDcgQEAgUGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IEZpbGVTdHJlYW1Qcm94
eTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAvLyBUaGlzIGlzIGJh
bGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiBkZXJlZlByb3h5T25Db250ZXh0IGJlbG93LgogICAgIHBy
b3h5LT5yZWYoKTsKIAotICAgIHByb3h5LT5maWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZp
bGVUaHJlYWRUYXNrKHByb3h5LT5tX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OnN0YXJ0KSk7
CisgICAgcHJveHktPmZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVN0cmVhbVRhc2so
cHJveHktPm1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RhcnQpKTsKIAogICAgIHJldHVy
biBwcm94eS5yZWxlYXNlKCk7CiB9CkBAIC03MCwzMiArNzAsMzIgQEAgRmlsZVN0cmVhbVByb3h5
Ojp+RmlsZVN0cmVhbVByb3h5KCkKIAogdm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFk
KEJsb2IqIGJsb2IpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhy
ZWFkVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7
CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlU3RyZWFtVGFzayhtX3N0cmVh
bS5nZXQoKSwgJkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkLCBibG9iKSk7CiB9CiAKIHZvaWQgRmls
ZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sobV9zdHJlYW0uZ2V0KCks
ICZGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUsIHBhdGgpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUZpbGVTdHJlYW1UYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6
b3BlbkZvcldyaXRlLCBwYXRoKSk7CiB9CiAKIHZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZSgp
CiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayhtX3N0
cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OmNsb3NlKSk7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0
VGFzayhjcmVhdGVGaWxlU3RyZWFtVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06OmNs
b3NlKSk7CiB9CiAKIHZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50
IGxlbmd0aCkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6cmVhZCwgYnVmZmVyLCBsZW5ndGgpKTsK
KyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVTdHJlYW1UYXNrKG1fc3RyZWFt
LmdldCgpLCAmRmlsZVN0cmVhbTo6cmVhZCwgYnVmZmVyLCBsZW5ndGgpKTsKIH0KIAogdm9pZCBG
aWxlU3RyZWFtUHJveHk6OndyaXRlKEJsb2IqIGJsb2IsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50
IGxlbmd0aCkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6d3JpdGUsIGJsb2IsIHBvc2l0aW9uLCBs
ZW5ndGgpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVTdHJlYW1UYXNr
KG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6d3JpdGUsIGJsb2IsIHBvc2l0aW9uLCBsZW5n
dGgpKTsKIH0KIAogdm9pZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3Np
dGlvbikKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNr
KG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6dHJ1bmNhdGUsIHBvc2l0aW9uKSk7CisgICAg
ZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlU3RyZWFtVGFzayhtX3N0cmVhbS5nZXQo
KSwgJkZpbGVTdHJlYW06OnRydW5jYXRlLCBwb3NpdGlvbikpOwogfQogCiBGaWxlVGhyZWFkKiBG
aWxlU3RyZWFtUHJveHk6OmZpbGVUaHJlYWQoKQpAQCAtMTA1LDEzICsxMDUsMjkgQEAgRmlsZVRo
cmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKICAgICByZXR1cm4gbV9jb250ZXh0
LT5maWxlVGhyZWFkKCk7CiB9CiAKK2NsYXNzIFNhbWVGaWxlU3RyZWFtUHJlZGljYXRlIHsKK3B1
YmxpYzoKKyAgICBTYW1lRmlsZVN0cmVhbVByZWRpY2F0ZShGaWxlU3RyZWFtKiBzdHJlYW0pIDog
bV9zdHJlYW0oc3RyZWFtKSB7IH0KKyAgICBib29sIG9wZXJhdG9yKCkoRmlsZVRocmVhZDo6VGFz
ayogdGFzaykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICh0YXNrLT50eXBlKCkgIT0gRmlsZVRo
cmVhZDo6VGFzazo6RmlsZVN0cmVhbVRhc2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGaWxlU3RyZWFtVGFzayo+KHRhc2spLT5zdHJlYW0o
KSA9PSBtX3N0cmVhbTsKKyAgICB9Citwcml2YXRlOgorICAgIGNvbnN0IEZpbGVTdHJlYW0qIG1f
c3RyZWFtOworfTsKKwogdm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0b3AoKQogewogICAgIC8vIENs
ZWFyIHRoZSBjbGllbnQgc28gdGhhdCB3ZSB3b24ndCBiZSBjYWxsaW5nIGNhbGxiYWNrcyBvbiB0
aGUgY2xpZW50LgogICAgIG1fY2xpZW50ID0gMDsKIAotICAgIGZpbGVUaHJlYWQoKS0+dW5zY2hl
ZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNy
ZWF0ZUZpbGVUaHJlYWRUYXNrKG1fc3RyZWFtLmdldCgpLCAmRmlsZVN0cmVhbTo6c3RvcCkpOwor
ICAgIC8vIFVuc2NoZWR1bGUgdGFza3MgZm9yIHRoaXMgZmlsZSBzdHJlYW0uCisgICAgU2FtZUZp
bGVTdHJlYW1QcmVkaWNhdGUgcHJlZGljYXRlKG1fc3RyZWFtLmdldCgpKTsKKyAgICBmaWxlVGhy
ZWFkKCktPnVuc2NoZWR1bGVUYXNrcyhwcmVkaWNhdGUpOworCisgICAgZmlsZVRocmVhZCgpLT5w
b3N0VGFzayhjcmVhdGVGaWxlU3RyZWFtVGFzayhtX3N0cmVhbS5nZXQoKSwgJkZpbGVTdHJlYW06
OnN0b3ApKTsKIH0KIAogc3RhdGljIHZvaWQgbm90aWZ5R2V0U2l6ZU9uQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgbG9uZyBsb25nIHNpemUp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaCBiL1dlYkNvcmUvaHRt
bC9GaWxlU3RyZWFtVGFzay5oCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIFdlYkNv
cmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oCnJlbmFtZSB0byBXZWJDb3JlL2h0bWwvRmlsZVN0cmVh
bVRhc2suaAppbmRleCBkZTExNzk4NzM2MTJiMGNiZjFhYWUzNzlmNzU4ZDY5ZTM0MmRhM2MxLi40
OTEyZjI4MWZiYjgzYmFjMDc3Y2YyYTYzMmFiZDYyYjU2Y2VjNmM3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvRmlsZVRocmVhZFRhc2suaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbVRh
c2suaApAQCAtMjgsNDkgKzI4LDQ0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
RmlsZVRocmVhZFRhc2tfaAotI2RlZmluZSBGaWxlVGhyZWFkVGFza19oCisjaWZuZGVmIEZpbGVT
dHJlYW1UYXNrX2gKKyNkZWZpbmUgRmlsZVN0cmVhbVRhc2tfaAogCiAjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJG
aWxlVGhyZWFkLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRyYWl0cyBmb3IgdGhlIFRhc2suCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHMgewotICAgIHR5
cGVkZWYgY29uc3QgVCYgUGFyYW1UeXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFQqPiB7Ci0gICAgdHlwZWRlZiBUKiBQYXJhbVR5cGU7
Ci19OworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIEZpbGVTdHJlYW1Qcm94eTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFBhc3NSZWZQdHI8VD4g
PiB7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBhcmFtVHlwZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFkVGFza1RyYWl0czxQYXNzT3duUHRyPFQ+ID4g
ewotICAgIHR5cGVkZWYgUGFzc093blB0cjxUPiBQYXJhbVR5cGU7CitjbGFzcyBGaWxlU3RyZWFt
VGFzayA6IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5G
aWxlU3RyZWFtVGFzaygpIHsgfQorICAgIEZpbGVTdHJlYW0qIHN0cmVhbSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyZWFtOyB9CisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgeyByZXR1cm4gRmls
ZVRocmVhZDo6VGFzazo6RmlsZVN0cmVhbVRhc2s7IH0KK3Byb3RlY3RlZDoKKyAgICBGaWxlU3Ry
ZWFtVGFzayhGaWxlU3RyZWFtKiBzdHJlYW0pIDogbV9zdHJlYW0oc3RyZWFtKSB7IH0KKyAgICBG
aWxlU3RyZWFtKiBtX3N0cmVhbTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFI+Ci1jbGFzcyBG
aWxlVGhyZWFkVGFzazAgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFzayB7CitjbGFzcyBGaWxlU3Ry
ZWFtVGFzazAgOiBwdWJsaWMgRmlsZVN0cmVhbVRhc2sgewogcHVibGljOgogICAgIHR5cGVkZWYg
UiAoRmlsZVN0cmVhbTo6Kk1ldGhvZCkoKTsKLSAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMDxS
PiBGaWxlVGhyZWFkVGFzazsKKyAgICB0eXBlZGVmIEZpbGVTdHJlYW1UYXNrMDxSPiBGaWxlU3Ry
ZWFtVGFza0ltcGw7CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3Jl
YXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxGaWxlU3RyZWFtVGFza0ltcGw+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhv
ZCBtZXRob2QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVh
bSwgbWV0aG9kKTsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtVGFza0ltcGwoc3RyZWFt
LCBtZXRob2QpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBGaWxlVGhyZWFkVGFzazAoRmlsZVN0
cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2so
c3RyZWFtKQorICAgIEZpbGVTdHJlYW1UYXNrMChGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBt
ZXRob2QpCisgICAgICAgIDogRmlsZVN0cmVhbVRhc2soc3RyZWFtKQogICAgICAgICAsIG1fbWV0
aG9kKG1ldGhvZCkKICAgICB7CiAgICAgfQpAQCAtODUsMjAgKzgwLDIwIEBAIHByaXZhdGU6CiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgotY2xh
c3MgRmlsZVRocmVhZFRhc2sxIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworY2xhc3MgRmls
ZVN0cmVhbVRhc2sxIDogcHVibGljIEZpbGVTdHJlYW1UYXNrIHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFIgKEZpbGVTdHJlYW06OipNZXRob2QpKE1QMSk7Ci0gICAgdHlwZWRlZiBGaWxlVGhyZWFk
VGFzazE8UiwgUDEsIE1QMT4gRmlsZVRocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBG
aWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiBG
aWxlU3RyZWFtVGFzazE8UiwgUDEsIE1QMT4gRmlsZVN0cmVhbVRhc2tJbXBsOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsK
IAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVh
bSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICBzdGF0aWMg
UGFzc093blB0cjxGaWxlU3RyZWFtVGFza0ltcGw+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0s
IE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVyMSk7CisgICAgICAg
IHJldHVybiBuZXcgRmlsZVN0cmVhbVRhc2tJbXBsKHN0cmVhbSwgbWV0aG9kLCBwYXJhbWV0ZXIx
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRmlsZVRocmVhZFRhc2sxKEZpbGVTdHJlYW0qIHN0
cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCi0gICAgICAgIDogRmlsZVRo
cmVhZDo6VGFzayhzdHJlYW0pCisgICAgRmlsZVN0cmVhbVRhc2sxKEZpbGVTdHJlYW0qIHN0cmVh
bSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgICAgIDogRmlsZVN0cmVh
bVRhc2soc3RyZWFtKQogICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKICAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKICAgICB7CkBAIC0xMTUsMjEgKzExMCwyMSBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KLWNsYXNzIEZpbGVUaHJlYWRUYXNrMiA6IHB1Ymxp
YyBGaWxlVGhyZWFkOjpUYXNrIHsKK2NsYXNzIEZpbGVTdHJlYW1UYXNrMiA6IHB1YmxpYyBGaWxl
U3RyZWFtVGFzayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBSIChGaWxlU3RyZWFtOjoqTWV0aG9k
KShNUDEsIE1QMik7Ci0gICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UiwgUDEsIE1QMSwgUDIs
IE1QMj4gRmlsZVRocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxl
VGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiBGaWxl
U3RyZWFtVGFzazI8UiwgUDEsIE1QMSwgUDIsIE1QMj4gRmlsZVN0cmVhbVRhc2tJbXBsOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBh
cmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBh
cmFtVHlwZSBQYXJhbTI7CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4g
Y3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRl
cjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVTdHJlYW1U
YXNrSW1wbD4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7
CisgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVRhc2tJbXBsKHN0cmVhbSwgbWV0aG9kLCBw
YXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRmlsZVRocmVh
ZFRhc2syKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRl
cjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFt
KQorICAgIEZpbGVTdHJlYW1UYXNrMihGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKKyAgICAgICAgOiBGaWxlU3Ry
ZWFtVGFzayhzdHJlYW0pCiAgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQogICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQogICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIy
KQpAQCAtMTQ4LDIyICsxNDMsMjIgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFIsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIs
IHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+Ci1jbGFzcyBGaWxlVGhyZWFkVGFzazMgOiBwdWJs
aWMgRmlsZVRocmVhZDo6VGFzayB7CitjbGFzcyBGaWxlU3RyZWFtVGFzazMgOiBwdWJsaWMgRmls
ZVN0cmVhbVRhc2sgewogcHVibGljOgotICAgIHR5cGVkZWYgUiAoRmlsZVN0cmVhbTo6Kk1ldGhv
ZCkoTVAxLCBNUDIsIE1QMyk7Ci0gICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazM8UiwgUDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMz4gRmlsZVRocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQ
YXJhbTM7CisgICAgdHlwZWRlZiB2b2lkIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1QMiwg
TVAzKTsKKyAgICB0eXBlZGVmIEZpbGVTdHJlYW1UYXNrMzxSLCBQMSwgTVAxLCBQMiwgTVAyLCBQ
MywgTVAzPiBGaWxlU3RyZWFtVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1Ro
cmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7
CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJl
YW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlU3Ry
ZWFtVGFza0ltcGw+IGNyZWF0ZShGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9kLCBw
YXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBG
aWxlU3RyZWFtVGFza0ltcGwoc3RyZWFtLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIs
IHBhcmFtZXRlcjMpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBGaWxlVGhyZWFkVGFzazMoRmls
ZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRh
c2soc3RyZWFtKQorICAgIEZpbGVTdHJlYW1UYXNrMyhGaWxlU3RyZWFtKiBzdHJlYW0sIE1ldGhv
ZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBh
cmFtZXRlcjMpCisgICAgICAgIDogRmlsZVN0cmVhbVRhc2soc3RyZWFtKQogICAgICAgICAsIG1f
bWV0aG9kKG1ldGhvZCkKICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKICAgICAg
ICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKQEAgLTE4NCw0MCArMTc5LDQwIEBAIHByaXZh
dGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSPgotUGFzc093blB0cjxGaWxlVGhyZWFkOjpU
YXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKK1Bhc3NPd25QdHI8RmlsZVN0cmVhbVRhc2s+IGNy
ZWF0ZUZpbGVTdHJlYW1UYXNrKAogICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKICAgICBS
IChGaWxlU3RyZWFtOjoqbWV0aG9kKSgpKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUj4KLVBhc3NP
d25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCitQYXNzT3duUHRy
PEZpbGVTdHJlYW1UYXNrPiBjcmVhdGVGaWxlU3RyZWFtVGFzaygKICAgICBGaWxlU3RyZWFtKiBj
b25zdCBjYWxsZWUsCiAgICAgUiAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoKSkKIHsKLSAgICByZXR1
cm4gRmlsZVRocmVhZFRhc2swPFI+OjpjcmVhdGUoCisgICAgcmV0dXJuIEZpbGVTdHJlYW1UYXNr
MDxSPjo6Y3JlYXRlKAogICAgICAgICBjYWxsZWUsCiAgICAgICAgIG1ldGhvZCk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+Ci1QYXNzT3duUHRy
PEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorUGFzc093blB0cjxGaWxl
U3RyZWFtVGFzaz4gY3JlYXRlRmlsZVN0cmVhbVRhc2soCiAgICAgRmlsZVN0cmVhbSogY29uc3Qg
Y2FsbGVlLAogICAgIFIgKEZpbGVTdHJlYW06OiptZXRob2QpKE1QMSksCiAgICAgY29uc3QgUDEm
IHBhcmFtZXRlcjEpCiB7Ci0gICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMTxSLCB0eXBlbmFtZSBD
cm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMT46OmNyZWF0ZSgKKyAgICByZXR1cm4gRmls
ZVN0cmVhbVRhc2sxPFIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAx
Pjo6Y3JlYXRlKAogICAgICAgICBjYWxsZWUsCiAgICAgICAgIG1ldGhvZCwKICAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IE1QMj4KLVBhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2so
CitQYXNzT3duUHRyPEZpbGVTdHJlYW1UYXNrPiBjcmVhdGVGaWxlU3RyZWFtVGFzaygKICAgICBG
aWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCiAgICAgUiAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAx
LCBNUDIpLAogICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAogICAgIGNvbnN0IFAyJiBwYXJhbWV0
ZXIyKQogewotICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazI8UiwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgIHJldHVybiBGaWxlU3RyZWFtVGFzazI8UiwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAogICAgICAgICBjYWxsZWUsCiAgICAgICAg
IG1ldGhvZCwKICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
LApAQCAtMjI1LDE0ICsyMjAsMTQgQEAgUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVh
dGVGaWxlVGhyZWFkVGFzaygKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMz4KLVBhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVh
ZFRhc2soCitQYXNzT3duUHRyPEZpbGVTdHJlYW1UYXNrPiBjcmVhdGVGaWxlU3RyZWFtVGFzaygK
ICAgICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCiAgICAgUiAoRmlsZVN0cmVhbTo6Km1ldGhv
ZCkoTVAxLCBNUDIsIE1QMyksCiAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCiAgICAgY29uc3Qg
UDImIHBhcmFtZXRlcjIsCiAgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCiB7Ci0gICAgcmV0dXJu
IEZpbGVUaHJlYWRUYXNrMzxSLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUs
IE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgIHJldHVybiBG
aWxlU3RyZWFtVGFzazM8UiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBN
UDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBD
cm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKICAgICAgICAgY2FsbGVl
LAogICAgICAgICBtZXRob2QsCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShw
YXJhbWV0ZXIxKSwKQEAgLTI0Miw0ICsyMzcsNCBAQCBQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRh
c2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBGaWxlVGhyZWFkVGFza19oCisjZW5kaWYgLy8gRmlsZVN0cmVhbVRhc2tfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVU
aHJlYWQuY3BwCmluZGV4IDAyYjE3MTgwOGVlYmY0MDQxZGZiN2U3NmMyNjI4NDEzNmMwNzQ5YzQu
LmU1Y2I1NDRkZWFhYjAxNTJmMGY5MTc4NzMyN2ZiMmUxMTMyOTQzMjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9GaWxlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5j
cHAKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBGaWxlVGhyZWFkOjpzdGFydCgpCiAKIHZvaWQgRmls
ZVRocmVhZDo6c3RvcCgpCiB7Ci0gICAgcmV0dXJuIG1fcXVldWUua2lsbCgpOworICAgIG1fcXVl
dWUua2lsbCgpOwogfQogCiB2b2lkIEZpbGVUaHJlYWQ6OnBvc3RUYXNrKFBhc3NPd25QdHI8VGFz
az4gdGFzaykKQEAgLTY5LDIwICs2OSw2IEBAIHZvaWQgRmlsZVRocmVhZDo6cG9zdFRhc2soUGFz
c093blB0cjxUYXNrPiB0YXNrKQogICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOwogfQogCi1jbGFz
cyBTYW1lRmlsZVByZWRpY2F0ZSB7Ci1wdWJsaWM6Ci0gICAgU2FtZUZpbGVQcmVkaWNhdGUoY29u
c3QgRmlsZVN0cmVhbSogc3RyZWFtKSA6IG1fc3RyZWFtKHN0cmVhbSkgeyB9Ci0gICAgYm9vbCBv
cGVyYXRvcigpKEZpbGVUaHJlYWQ6OlRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPnN0
cmVhbSgpID09IG1fc3RyZWFtOyB9Ci1wcml2YXRlOgotICAgIGNvbnN0IEZpbGVTdHJlYW0qIG1f
c3RyZWFtOwotfTsKLQotdm9pZCBGaWxlVGhyZWFkOjp1bnNjaGVkdWxlVGFza3MoY29uc3QgRmls
ZVN0cmVhbSogc3RyZWFtKQotewotICAgIFNhbWVGaWxlUHJlZGljYXRlIHByZWRpY2F0ZShzdHJl
YW0pOwotICAgIG1fcXVldWUucmVtb3ZlSWYocHJlZGljYXRlKTsKLX0KLQogdm9pZCogRmlsZVRo
cmVhZDo6ZmlsZVRocmVhZFN0YXJ0KHZvaWQqIGFyZykKIHsKICAgICBGaWxlVGhyZWFkKiBmaWxl
VGhyZWFkID0gc3RhdGljX2Nhc3Q8RmlsZVRocmVhZCo+KGFyZyk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvRmlsZVRocmVhZC5oIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWQuaAppbmRleCBk
MjcyNzNhZmQ0YThkYThkNWIzZDAxZGRkMWVlNDg0ZGM0NzA0ODUxLi4xYjBlYzg4MTg5NmYzNzRl
YmUyOTg0MzczYWMxYjQ5MjA1NDY1ZDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVRo
cmVhZC5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmgKQEAgLTQ0LDcgKzQ0LDExIEBA
IGNsYXNzIEZpbGVTdHJlYW07CiAKIGNsYXNzIEZpbGVUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxGaWxlVGhyZWFkPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rmls
ZVRocmVhZD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVUaHJlYWQoKSk7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlVGhyZWFkPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlVGhyZWFkKCkpOworICAgIH0KKwogICAgIH5GaWxl
VGhyZWFkKCk7CiAKICAgICBib29sIHN0YXJ0KCk7CkBAIC01NCwxNCArNTgsMjEgQEAgcHVibGlj
OgogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+VGFzaygpIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7Ci0gICAgICAgIEZpbGVTdHJlYW0qIHN0cmVhbSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtOyB9Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBUYXNr
KEZpbGVTdHJlYW0qIHN0cmVhbSkgOiBtX3N0cmVhbShzdHJlYW0pIHsgfQotICAgICAgICBGaWxl
U3RyZWFtKiBtX3N0cmVhbTsKKworICAgICAgICBlbnVtIFRhc2tUeXBlIHsKKyAgICAgICAgICAg
IEZpbGVUaHJlYWRUYXNrID0gMCwKKyAgICAgICAgICAgIEZpbGVTdHJlYW1UYXNrLAorICAgICAg
ICB9OworICAgICAgICB2aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSB7IHJldHVybiBGaWxlVGhyZWFk
VGFzazsgfQogICAgIH07CiAKICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFz
ayk7Ci0gICAgdm9pZCB1bnNjaGVkdWxlVGFza3MoY29uc3QgRmlsZVN0cmVhbSopOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgorICAgIHZvaWQgdW5zY2hlZHVsZVRhc2tzKFBy
ZWRpY2F0ZSYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgbV9xdWV1ZS5yZW1vdmVJZihwcmVk
aWNhdGUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBGaWxlVGhyZWFkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62903</attachid>
            <date>2010-07-28 18:03:53 -0700</date>
            <delta_ts>2010-07-30 14:44:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43135-20100728180352.patch</filename>
            <type>text/plain</type>
            <size>13513</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTIzMzZjZWJiZTdjOGQ1NDhiMzFiNjA1YzM1YTJiNzgyMDY1YTUwNy4uMGM4OTVhMWNlNTJkZWFh
N2VkYTk0ZDhjN2ZhNmQ3OGRkOTAwNTdhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0wNy0yOCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVjb3VwbGUgRmlsZVRocmVhZCBmcm9tIEZpbGVT
dHJlYW0gdG8gc3VwcG9ydCBnZW5lcmljIGZpbGUtcmVsYXRlZCBhc3luYyB0YXNrcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzUKKworICAgICAg
ICBObyBuZXcgdGVzdHMgYXMgdGhpcyBkb2Vzbid0IGNoYW5nZSBhbnkgZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIGh0bWwvRmlsZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
VGhyZWFkOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNhbWVJbnN0YW5jZVByZWRpY2F0ZTo6
U2FtZUZpbGVQcmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2FtZUluc3RhbmNlUHJlZGlj
YXRlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVUaHJlYWQ6OnVuc2NoZWR1
bGVUYXNrc0ludGVybmFsKToKKyAgICAgICAgKiBodG1sL0ZpbGVUaHJlYWQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhy
ZWFkOjpUYXNrOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFkOjpUYXNr
OjpUYXNrKToKKyAgICAgICAgKiBodG1sL0ZpbGVUaHJlYWRUYXNrLmg6IENoYW5nZWQgYWxsIHRl
bXBsYXRlcyB0byB0YWtlIGFueSB0eXBlIGFzIGEgY2FsbGVlIGluc3RhbmNlLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlRmlsZVRocmVhZFRhc2spOgorCiAyMDEwLTA3LTI4ICBUb255IENoYW5n
ICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmNwcCBiL1dlYkNvcmUvaHRtbC9G
aWxlVGhyZWFkLmNwcAppbmRleCAwMmIxNzE4MDhlZWJmNDA0MWRmYjdlNzZjMjYyODQxMzZjMDc0
OWM0Li4zYTM0MTNjMDgwMGY4OGNkOGExMWM2OGMwOGU0NmFkMjgxMmZlNzcxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVUaHJl
YWQuY3BwCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgRmlsZVRocmVhZDo6c3RhcnQoKQogCiB2b2lk
IEZpbGVUaHJlYWQ6OnN0b3AoKQogewotICAgIHJldHVybiBtX3F1ZXVlLmtpbGwoKTsKKyAgICBt
X3F1ZXVlLmtpbGwoKTsKIH0KIAogdm9pZCBGaWxlVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRy
PFRhc2s+IHRhc2spCkBAIC02OSwxNyArNjksMTcgQEAgdm9pZCBGaWxlVGhyZWFkOjpwb3N0VGFz
ayhQYXNzT3duUHRyPFRhc2s+IHRhc2spCiAgICAgbV9xdWV1ZS5hcHBlbmQodGFzayk7CiB9CiAK
LWNsYXNzIFNhbWVGaWxlUHJlZGljYXRlIHsKK2NsYXNzIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSB7
CiBwdWJsaWM6Ci0gICAgU2FtZUZpbGVQcmVkaWNhdGUoY29uc3QgRmlsZVN0cmVhbSogc3RyZWFt
KSA6IG1fc3RyZWFtKHN0cmVhbSkgeyB9Ci0gICAgYm9vbCBvcGVyYXRvcigpKEZpbGVUaHJlYWQ6
OlRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPnN0cmVhbSgpID09IG1fc3RyZWFtOyB9
CisgICAgU2FtZUluc3RhbmNlUHJlZGljYXRlKGNvbnN0IHZvaWQqIGluc3RhbmNlKSA6IG1faW5z
dGFuY2UoaW5zdGFuY2UpIHsgfQorICAgIGJvb2wgb3BlcmF0b3IoKShGaWxlVGhyZWFkOjpUYXNr
KiB0YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLT5pbnN0YW5jZSgpID09IG1faW5zdGFuY2U7IH0K
IHByaXZhdGU6Ci0gICAgY29uc3QgRmlsZVN0cmVhbSogbV9zdHJlYW07CisgICAgY29uc3Qgdm9p
ZCogbV9pbnN0YW5jZTsKIH07CiAKLXZvaWQgRmlsZVRocmVhZDo6dW5zY2hlZHVsZVRhc2tzKGNv
bnN0IEZpbGVTdHJlYW0qIHN0cmVhbSkKK3ZvaWQgRmlsZVRocmVhZDo6dW5zY2hlZHVsZVRhc2tz
KGNvbnN0IHZvaWQqIGluc3RhbmNlKQogewotICAgIFNhbWVGaWxlUHJlZGljYXRlIHByZWRpY2F0
ZShzdHJlYW0pOworICAgIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSBwcmVkaWNhdGUoaW5zdGFuY2Up
OwogICAgIG1fcXVldWUucmVtb3ZlSWYocHJlZGljYXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0ZpbGVUaHJlYWQuaCBiL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkLmgKaW5kZXgg
ZDI3MjczYWZkNGE4ZGE4ZDViM2QwMWRkZDFlZTQ4NGRjNDcwNDg1MS4uMmViYTk4ZTAwMGE1NDM0
Y2FlOGY0YWU1Y2VkYzhkMGFkYTJlNWM3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVU
aHJlYWQuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVRocmVhZC5oCkBAIC00NCw3ICs0NCwxMSBA
QCBjbGFzcyBGaWxlU3RyZWFtOwogCiBjbGFzcyBGaWxlVGhyZWFkIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8RmlsZVRocmVhZD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZp
bGVUaHJlYWQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlVGhyZWFkKCkpOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVRocmVhZD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVRocmVhZCgpKTsKKyAgICB9CisKICAgICB+Rmls
ZVRocmVhZCgpOwogCiAgICAgYm9vbCBzdGFydCgpOwpAQCAtNTQsMTQgKzU4LDE1IEBAIHB1Ymxp
YzoKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KICAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkgPSAwOwotICAgICAgICBGaWxlU3RyZWFtKiBzdHJlYW0o
KSBjb25zdCB7IHJldHVybiBtX3N0cmVhbTsgfQorICAgICAgICB2b2lkKiBpbnN0YW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRhc2so
RmlsZVN0cmVhbSogc3RyZWFtKSA6IG1fc3RyZWFtKHN0cmVhbSkgeyB9Ci0gICAgICAgIEZpbGVT
dHJlYW0qIG1fc3RyZWFtOworICAgICAgICBUYXNrKHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFu
Y2UoaW5zdGFuY2UpIHsgfQorICAgICAgICB2b2lkKiBtX2luc3RhbmNlOwogICAgIH07CiAKICAg
ICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFzayk7Ci0gICAgdm9pZCB1bnNjaGVk
dWxlVGFza3MoY29uc3QgRmlsZVN0cmVhbSopOworCisgICAgdm9pZCB1bnNjaGVkdWxlVGFza3Mo
Y29uc3Qgdm9pZCogaW5zdGFuY2UpOwogCiBwcml2YXRlOgogICAgIEZpbGVUaHJlYWQoKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlVGhyZWFkVGFzay5oIGIvV2ViQ29yZS9odG1sL0Zp
bGVUaHJlYWRUYXNrLmgKaW5kZXggZGUxMTc5ODczNjEyYjBjYmYxYWFlMzc5Zjc1OGQ2OWUzNDJk
YTNjMS4uZDEwNjk5NmQ4YWM1MmZkYjZiNTZiMjk2MjA0MGQwNmRiMWQ5ZjI4ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0ZpbGVUaHJlYWRUYXNrLmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVU
aHJlYWRUYXNrLmgKQEAgLTMyLDczICszMiw1NSBAQAogI2RlZmluZSBGaWxlVGhyZWFkVGFza19o
CiAKICNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgogI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKLSNpbmNsdWRlIDxtZW1vcnk+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVHJh
aXRzIGZvciB0aGUgVGFzay4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGaWxlVGhyZWFk
VGFza1RyYWl0cyB7Ci0gICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmlsZVRocmVhZFRhc2tUcmFpdHM8VCo+IHsKLSAgICB0
eXBlZGVmIFQqIFBhcmFtVHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBG
aWxlVGhyZWFkVGFza1RyYWl0czxQYXNzUmVmUHRyPFQ+ID4gewotICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxUPiBQYXJhbVR5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRmls
ZVRocmVhZFRhc2tUcmFpdHM8UGFzc093blB0cjxUPiA+IHsKLSAgICB0eXBlZGVmIFBhc3NPd25Q
dHI8VD4gUGFyYW1UeXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUj4KK3RlbXBsYXRlPHR5
cGVuYW1lIFIsIHR5cGVuYW1lIFQ+CiBjbGFzcyBGaWxlVGhyZWFkVGFzazAgOiBwdWJsaWMgRmls
ZVRocmVhZDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBSIChGaWxlU3RyZWFtOjoqTWV0
aG9kKSgpOwotICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2swPFI+IEZpbGVUaHJlYWRUYXNrOwor
ICAgIHR5cGVkZWYgUiAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNr
MDxSLCBUPiBGaWxlVGhyZWFkVGFza0ltcGw7CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxGaWxl
VGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5j
ZSwgTWV0aG9kIG1ldGhvZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRh
c2soc3RyZWFtLCBtZXRob2QpOworICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrSW1w
bChpbnN0YW5jZSwgbWV0aG9kKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRmlsZVRocmVhZFRh
c2swKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCkKLSAgICAgICAgOiBGaWxlVGhy
ZWFkOjpUYXNrKHN0cmVhbSkKKyAgICBGaWxlVGhyZWFkVGFzazAoVCogaW5zdGFuY2UsIE1ldGhv
ZCBtZXRob2QpCisgICAgICAgIDogRmlsZVRocmVhZDo6VGFzayhpbnN0YW5jZSkKICAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzaygpCiAgICAgewotICAgICAgICAoKnN0cmVhbSgpLiptX21ldGhvZCkoKTsKKyAgICAg
ICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKSgpOwogICAgIH0KIAog
cHJpdmF0ZToKICAgICBNZXRob2QgbV9tZXRob2Q7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
LCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgordGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5h
bWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KIGNsYXNzIEZpbGVUaHJlYWRUYXNrMSA6
IHB1YmxpYyBGaWxlVGhyZWFkOjpUYXNrIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFIgKEZpbGVT
dHJlYW06OipNZXRob2QpKE1QMSk7Ci0gICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazE8UiwgUDEs
IE1QMT4gRmlsZVRocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiBSIChUOjoqTWV0aG9k
KShNUDEpOworICAgIHR5cGVkZWYgRmlsZVRocmVhZFRhc2sxPFIsIFQsIFAxLCBNUDE+IEZpbGVU
aHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlVGhy
ZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVhbSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVRocmVhZFRhc2tJbXBsPiBj
cmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFy
YW1ldGVyMSk7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2tJbXBsKGluc3RhbmNl
LCBtZXRob2QsIHBhcmFtZXRlcjEpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBGaWxlVGhyZWFk
VGFzazEoRmlsZVN0cmVhbSogc3RyZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSkKLSAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICBGaWxlVGhyZWFkVGFz
azEoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAg
ICA6IEZpbGVUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCiAgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQogICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQogICAgIHsKQEAgLTEwNiw3ICs4
OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQogICAgIHsK
LSAgICAgICAgKCpzdHJlYW0oKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSk7CisgICAgICAgICgq
c3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0xMTQsMjIgKzk2LDIyIEBAIHByaXZhdGU6CiAgICAgUDEgbV9w
YXJhbWV0ZXIxOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMj4KK3RlbXBsYXRlPHR5cGVuYW1lIFIs
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBl
bmFtZSBNUDI+CiBjbGFzcyBGaWxlVGhyZWFkVGFzazIgOiBwdWJsaWMgRmlsZVRocmVhZDo6VGFz
ayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBSIChGaWxlU3RyZWFtOjoqTWV0aG9kKShNUDEsIE1Q
Mik7Ci0gICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UiwgUDEsIE1QMSwgUDIsIE1QMj4gRmls
ZVRocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFza1RyYWl0czxQ
MT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBGaWxlVGhyZWFkVGFz
a1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiBSIChUOjoqTWV0aG9k
KShNUDEsIE1QMik7CisgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazI8UiwgVCwgUDEsIE1QMSwg
UDIsIE1QMj4gRmlsZVRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CiAKLSAgICBz
dGF0aWMgUGFzc093blB0cjxGaWxlVGhyZWFkVGFzaz4gY3JlYXRlKEZpbGVTdHJlYW0qIHN0cmVh
bSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3Rh
bmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIp
CiAgICAgewotICAgICAgICByZXR1cm4gbmV3IEZpbGVUaHJlYWRUYXNrKHN0cmVhbSwgbWV0aG9k
LCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlVGhyZWFk
VGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEZpbGVUaHJlYWRUYXNrMihGaWxlU3RyZWFtKiBzdHJlYW0sIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKLSAgICAg
ICAgOiBGaWxlVGhyZWFkOjpUYXNrKHN0cmVhbSkKKyAgICBGaWxlVGhyZWFkVGFzazIoVCogaW5z
dGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVy
MikKKyAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKGluc3RhbmNlKQogICAgICAgICAsIG1fbWV0
aG9kKG1ldGhvZCkKICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKICAgICAgICAg
LCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKQEAgLTEzOCw3ICsxMjAsNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKICAgICB7Ci0gICAgICAgICgqc3RyZWFt
KCkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7CisgICAgICAgICgqc3Rh
dGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFt
ZXRlcjIpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE0NywyMyArMTI5LDIzIEBAIHByaXZhdGU6
CiAgICAgUDIgbV9wYXJhbWV0ZXIyOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
UDMsIHR5cGVuYW1lIE1QMz4KK3RlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDM+CiBjbGFzcyBGaWxlVGhyZWFkVGFzazMgOiBwdWJsaWMgRmlsZVRo
cmVhZDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBSIChGaWxlU3RyZWFtOjoqTWV0aG9k
KShNUDEsIE1QMiwgTVAzKTsKLSAgICB0eXBlZGVmIEZpbGVUaHJlYWRUYXNrMzxSLCBQMSwgTVAx
LCBQMiwgTVAyLCBQMywgTVAzPiBGaWxlVGhyZWFkVGFzazsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIEZpbGVUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBh
cmFtMzsKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOworICAg
IHR5cGVkZWYgRmlsZVRocmVhZFRhc2szPFIsIFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDM+
IEZpbGVUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKIAotICAg
IHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNrPiBjcmVhdGUoRmlsZVN0cmVhbSogc3Ry
ZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIs
IFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVUaHJlYWRUYXNr
SW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBGaWxlVGhyZWFkVGFzayhzdHJlYW0sIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFy
YW1ldGVyMiwgcGFyYW1ldGVyMyk7CisgICAgICAgIHJldHVybiBuZXcgRmlsZVRocmVhZFRhc2tJ
bXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBGaWxlVGhyZWFkVGFzazMoRmlsZVN0cmVhbSogc3Ry
ZWFtLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIs
IFBhcmFtMyBwYXJhbWV0ZXIzKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soc3RyZWFtKQor
ICAgIEZpbGVUaHJlYWRUYXNrMyhUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBh
cmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAg
OiBGaWxlVGhyZWFkOjpUYXNrKGluc3RhbmNlKQogICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
ICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKICAgICAgICAgLCBtX3BhcmFtZXRl
cjIocGFyYW1ldGVyMikKQEAgLTE3Myw3ICsxNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKCkKICAgICB7Ci0gICAgICAgICgqc3RyZWFtKCkuKm1fbWV0aG9k
KShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsKKyAgICAgICAgKCpz
dGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFy
YW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xODMsNTYgKzE2
NSw1MSBAQCBwcml2YXRlOgogICAgIFAzIG1fcGFyYW1ldGVyMzsKIH07CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFI+Ci1QYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKAotICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKLSAgICBSIChGaWxlU3RyZWFtOjoq
bWV0aG9kKSgpKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUj4KK3RlbXBsYXRlPHR5cGVuYW1lIFIs
IHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKAotICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKLSAgICBSIChGaWxlU3RyZWFt
OjoqbWV0aG9kKSgpKQorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICBSIChUOjoqbWV0aG9kKSgp
KQogewotICAgIHJldHVybiBGaWxlVGhyZWFkVGFzazA8Uj46OmNyZWF0ZSgKKyAgICByZXR1cm4g
RmlsZVRocmVhZFRhc2swPFIsIFQ+OjpjcmVhdGUoCiAgICAgICAgIGNhbGxlZSwKICAgICAgICAg
bWV0aG9kKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMT4KK3RlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDE+CiBQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRU
YXNrKAotICAgIEZpbGVTdHJlYW0qIGNvbnN0IGNhbGxlZSwKLSAgICBSIChGaWxlU3RyZWFtOjoq
bWV0aG9kKShNUDEpLAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICBSIChUOjoqbWV0aG9kKShN
UDEpLAogICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQogewotICAgIHJldHVybiBGaWxlVGhyZWFk
VGFzazE8UiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVh
dGUoCisgICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMTxSLCBULCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMT46OlR5cGUsIE1QMT46OmNyZWF0ZSgKICAgICAgICAgY2FsbGVlLAogICAgICAg
ICBtZXRob2QsCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIx
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEs
IHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAy
PgogUGFzc093blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKLSAg
ICBGaWxlU3RyZWFtKiBjb25zdCBjYWxsZWUsCi0gICAgUiAoRmlsZVN0cmVhbTo6Km1ldGhvZCko
TVAxLCBNUDIpLAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICBSIChUOjoqbWV0aG9kKShNUDEs
IE1QMiksCiAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCiAgICAgY29uc3QgUDImIHBhcmFtZXRl
cjIpCiB7Ci0gICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMjxSLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpU
eXBlLCBNUDI+OjpjcmVhdGUoCisgICAgcmV0dXJuIEZpbGVUaHJlYWRUYXNrMjxSLCBULCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVhdGUoCiAgICAgICAgIGNhbGxlZSwKICAgICAg
ICAgbWV0aG9kLAogICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgogUGFzc093
blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKLSAgICBGaWxlU3Ry
ZWFtKiBjb25zdCBjYWxsZWUsCi0gICAgUiAoRmlsZVN0cmVhbTo6Km1ldGhvZCkoTVAxLCBNUDIs
IE1QMyksCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIFIgKFQ6OiptZXRob2QpKE1QMSwgTVAy
LCBNUDMpLAogICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAogICAgIGNvbnN0IFAyJiBwYXJhbWV0
ZXIyLAogICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQogewotICAgIHJldHVybiBGaWxlVGhyZWFk
VGFzazM8UiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKKyAgICByZXR1cm4gRmlsZVRocmVhZFRh
c2szPFIsIFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCiAgICAgICAgIGNhbGxlZSwKICAgICAg
ICAgbWV0aG9kLAogICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCg==
</data>
<flag name="review"
          id="51159"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>