[Helix-client-dev] CR/CN: GMP Meta-editor fixes: Bug #18367, Issue #18358. [GMPMetaEditor branch]

Petar Basic <[email protected]> Fri, 28 Oct 2011 18:10:11 +0200
Newsgroups gmane.comp.multimedia.helix.devel
Message-ID <CANKM9vRiwhY8mhxcd4La=sS0EJG-+60gBs94oCiWRHZHcMbcDw@mail.gmail.com>
--14dae9cdc0d5b21b3704b05e1fbd
Content-Type: text/plain; charset="UTF-8"

Modified by: pbasic at real.com
Date: 2011/10/28
Project: GMPMetaEditor (meta3gp.exe)

Synopsis:
GMP Meta-editor fixes: Bug #18367, Issue #18358. [GMPMetaEditor branch]

Details:
1.) Fixed GMP Meta-editor (Redmine) Bug #18367: "meta3gp error with
artist/composer over 255 chars".

The code has been corrected to pass the value of meta-flavor parameter
to all the routines which check the length of meta-data string
parameters.

2.) Fixed GMP Meta-editor (Redmine) Issue #18358: "Metadata tool
increases filesize although no metadata is added".

The final output file contains a 'free' atom following the 'moov'
atom.  The space required for sample tables contained by the 'moov'
atom seems to be overestimated by the mp4-filewriter.  With this
strategy, the 'free' atom can sometimes account for more than 10% of
output file size which is not desirable.  Quick fix is to employ
already existing mp4-filewriter's "ForceMoovFirst" option.  In this
mode, mp4-filewriter uses a second temporary file to store the 'mdat'
samples while it builds the sample tables in the 'moov' atom.  The
filewriter then simply appends 'mdat' atom right after the 'moov' atom
without putting an extraneous 'free' atom between them.  Usage of a
second temporary file keeps the final output file size to the minimum,
but probably reduces Meta-editor tool's performance.  Some testing on
larger files is required to determine whether more elaborate fixes are
required at this moment.

Files Modified:
datatype/tools/dtdriver/apps/meta3gp/main.cpp
datatype/tools/dtdriver/engine/ffdriver.cpp
datatype/tools/dtdriver/engine/pub/ffdriver.h

Platforms and Profiles Affected:
All

Image Size and Heap Use impact:
None

Platforms and Profiles Build Verified:
system id: win32-i386-vc7
profile: helix-client-all-defines

Platforms and Profiles Functionality Verified:
x86 Windows XP SP2

Branch:
GMPMetaEditor

Copyright assignment:
I am a RealNetworks employee or contractor.

--14dae9cdc0d5b21b3704b05e1fbd
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Helix-client-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev

--14dae9cdc0d5b21b3704b05e1fbd
Content-Type: application/octet-stream;
	name="datatype_tools_dtdriver_apps_meta3gp.diff"
Content-Disposition: attachment;
	filename="datatype_tools_dtdriver_apps_meta3gp.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gubdnvgo0

SW5kZXg6IG1haW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZGF0YXR5cGUv
dG9vbHMvZHRkcml2ZXIvYXBwcy9tZXRhM2dwL21haW4uY3BwLHYNCnJldHJpZXZpbmcgcmV2aXNp
b24gMS43LjIuOQ0KZGlmZiAtVSAzMCAtdyAtZCAtSCAtcjEuNy4yLjkgbWFpbi5jcHANCi0tLSBt
YWluLmNwcAk0IE5vdiAyMDEwIDEzOjI3OjA5IC0wMDAwCTEuNy4yLjkNCisrKyBtYWluLmNwcAky
OCBPY3QgMjAxMSAxNToxMjo0OSAtMDAwMA0KQEAgLTY4LDgyICs2OCw4MyBAQA0KICNlbmRpZiAv
L0hFTElYX0ZFQVRVUkVfTUVUQUVESVRfQVVESU9fSEFTSA0KIA0KIA0KIC8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQogICogIE1ldGEtZGF0YSBjb21tYW5kIGxpbmUgZWRpdG9yLg0KICAqICBCdWlsZC10
aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4NCiAgKi8NCiANCiAvLyBlbnZpcm9ubWVudCB2YXJp
YWJsZSBuYW1lDQogI2RlZmluZSBQTFVHSU5fUEFUSF9FTlZfVkFSX05BTUUgIk1FVEEzR1BfUExV
R0lOX1BBVEgiDQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiAgQ29tcG9uZW50IG9w
ZXJhdGlvbmFsIG1vZGVzDQogICovDQogSFhCT09MIGdfYlVzZURlZmF1bHRNZXRhRWRpdG9yUHJv
Y2Vzc29yID0gRkFMU0U7DQogSFhCT09MIGdfYlVzZURURHJpdmVyU3luY2hyb25vdXNNb2RlID0g
VFJVRTsNCiANCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqICBETExBY2Nlc3NQYXRoIFZh
cmlhYmxlDQogICovDQogRU5BQkxFX0RMTEFDQ0VTU19QQVRIUyhnX01ldGEzR1BBY2Nlc3NQYXRo
KTsNCiANCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqICBEZWZpbmVzDQogICovDQogI2Rl
ZmluZSBQUk9HUkFNX1ZFTkRPUl9TVFJJTkcgICAgICAgIlJlYWxOZXR3b3JrcyINCiAjZGVmaW5l
IFBST0dSQU1fTkFNRV9TVFJJTkcgICAgICAgICBQUk9HUkFNX1ZFTkRPUl9TVFJJTkciIG1ldGEt
ZGF0YSBlZGl0b3IiDQotI2RlZmluZSBQUk9HUkFNX0NPUFlSSUdIVF9TVFJJTkcgICAgIkNvcHly
aWdodCAoYykgIlBST0dSQU1fVkVORE9SX1NUUklORyIgMjAxMCINCisjZGVmaW5lIFBST0dSQU1f
Q09QWVJJR0hUX1NUUklORyAgICAiQ29weXJpZ2h0IChjKSAiUFJPR1JBTV9WRU5ET1JfU1RSSU5H
IiAyMDExIg0KIA0KIC8vIGlucHV0L291dHB1dCBjb250cm9sDQogI2lmZGVmIF9XSU5ET1dTDQog
I2RlZmluZSBPUFRJT05fU1RSSU5HX0FTWU5DTU9ERSAgICAgICJkZXYtYXN5bmNtb2RlIg0KICNl
bmRpZiAvL19XSU5ET1dTDQogDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0RFRk1FVEFQUk9DICAg
ICJkZXYtZGVmbWV0YXByb2MiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0lOUFVURklMRSAgICAg
ICJpZiINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfT1VUUFVURklMRSAgICAgIm9mIg0KICNkZWZp
bmUgT1BUSU9OX1NUUklOR19YTUxJTlBVVEZJTEUgICAieG1saW4iDQogI2RlZmluZSBPUFRJT05f
U1RSSU5HX1hNTE9VVFBVVEZJTEUgICJ4bWxvdXQiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0NM
RUFSTUVUQURBVEEgICJtZXRhY2xlYXIiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX01FVEFTVFlM
RSAgICAgICJtZXRhc3R5bGUiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1VURjE2T1VUUFVUICAg
ICJ1dGYxNm91dCINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfVVRGOElOUFVUICAgICAgInV0Zjhp
biINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfSUQzVjI0ME9VVFBVVCAgImlkM3YyNDAiDQogI2Rl
ZmluZSBPUFRJT05fU1RSSU5HX0lEM1YyMzBPVVRQVVQgICJpZDN2MjMwIg0KICNkZWZpbmUgT1BU
SU9OX1NUUklOR19JRDNWMk5PT1VUUFVUICAiaWQzdjJubyINCiAjZGVmaW5lIE9QVElPTl9TVFJJ
TkdfVUlUU0xPQ0FUSU9OSUQzMiAidWl0c2xvY2lkMzIiDQogI2RlZmluZSBPUFRJT05fU1RSSU5H
X09WRVJXUklURUZJTEUgICJvdmVyd3JpdGUiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0RJU0FC
TEVQUk9HUkVTU0lWRURPV05MT0FEICJkaXNhYmxlcHJvZ3Jlc3NpdmVkb3dubG9hZCINCisjZGVm
aW5lIE9QVElPTl9TVFJJTkdfTUlORklMRVNJWkUgICAgIm1pbmZpbGVzaXplIg0KICNkZWZpbmUg
T1BUSU9OX1NUUklOR19QUklOVE1FVEFEQVRBICAicHJpbnQiDQogI2RlZmluZSBPUFRJT05fU1RS
SU5HX0hFTFAgICAgICAgICAgICJoZWxwIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19HRU5FUkFU
RUhBU0ggICAiYXVkaW9oYXNoIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19MT0dGSUxFICAgICAg
ICAibG9nIg0KIA0KIC8vIGNvbW1vbiBtZXRhZGF0YQ0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19U
SVRMRSAgICAgICAgICAgICJ0aXRsZSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfQVJUSVNUICAg
ICAgICAgICAiYXJ0aXN0Ig0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19BTEJVTSAgICAgICAgICAg
ICJhbGJ1bSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfR0VOUkUgICAgICAgICAgICAiZ2VucmUi
DQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0NPTVBPU0VSICAgICAgICAgImNvbXBvc2VyIg0KICNk
ZWZpbmUgT1BUSU9OX1NUUklOR19DT01NRU5UICAgICAgICAgICJjb21tZW50Ig0KICNkZWZpbmUg
T1BUSU9OX1NUUklOR19UUkFDS05VTUJFUiAgICAgICJ0cmFjayINCiAjZGVmaW5lIE9QVElPTl9T
VFJJTkdfWUVBUiAgICAgICAgICAgICAieWVhciINCiANCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdf
UElDVFVSRV9BREQgICAgICAiYWRkcGljIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19QSUNUVVJF
X1JFTU9WRSAgICJyZW1waWMiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1BJQ1RVUkVfQ0xFQVIg
ICAgImNscnBpYyINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfUElDVFVSRV9FWFRSQUNUICAic2F2
ZXBpYyINCiANCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfVUlUU19JTlNFUlQgICAgICAiaW5zZXJ0
c2lnbmF0dXJlIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19VSVRTX0VYVFJBQ1QgICAgICJleHRy
YWN0c2lnbmF0dXJlIg0KIA0KIC8vIGlUdW5lcyBzcGVjaWZpYyBtZXRhZGF0YQ0KICNkZWZpbmUg
T1BUSU9OX1NUUklOR19TT0ZUV0FSRSAgICAgInNvZnR3YXJlIg0KICNkZWZpbmUgT1BUSU9OX1NU
UklOR19FTkNPREVEQlkgICAgImVuY29kZWRieSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfR1JP
VVBJTkcgICAgICJncm91cGluZyINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfQUxCVU1BUlRJU1Qg
ICJhbGJ1bWFydGlzdCINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfTFlSSUNTICAgICAgICJseXJp
Y3MiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1NVQlRJVExFICAgICAic3VidGl0bGUiDQpAQCAt
ODU3LDE2NCArODU4LDE2NCBAQA0KIH0NCiANCiB2b2lkIFJlcG9ydEludmFsaWRWYWx1ZUZvck9w
dGlvbihjb25zdCBjaGFyKiBvcHRpb25OYW1lLCBjb25zdCBFbmNvZGVkU3RyaW5nJiBvcHRpb25W
YWx1ZVVURjgpDQogew0KICAgICBwcmludGYoIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAtJXM6
ICIsIG9wdGlvbk5hbWUpOw0KICAgICBFbmNTdHJVdGlsczo6UHJpbnRUZXh0VVRGOChvcHRpb25W
YWx1ZVVURjguR2V0RGF0YSgpKTsNCiAgICAgcHJpbnRmKCJcbiIpOw0KIH0NCiANCiBIWF9SRVNV
TFQgUHJvY2Vzc1N0cmluZ09wdGlvbihib29sIGJTa2lwQXJnT25seSwgSW5wdXRPcHRpb24qIG9w
dGlvbiwgTWV0YUluZm8mIG1ldGFpbmZvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWV0YUluZm86OmVTdHJpbmdNZXRhSXRlbSBpdGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFn
cykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSAmJiBvcHRp
b24tPlhtbE9wdGlvblZhbHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsNCiAgICAgICAgIHJldHVy
biBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNraXBBcmdPbmx5KQ0KICAg
ICB7DQogICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICB9DQogDQogICAgIGlmKG9wdGlvbi0+
WG1sT3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgaWYoTWV0YUlu
Zm86OklzSXRlbVN1cHBvcnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3Mp
KQ0KICAgICAgICAgew0KICAgICAgICAgICAgIC8vIG9wdGlvbnMgYXJlIGJlaW5nIHJlYWQgZnJv
bSB0aGUgY29tbWFuZCBsaW5lDQogICAgICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0
aW9uLT5PcHRpb25WYWx1ZVVURjg7DQogDQogICAgICAgICAgICAgaWYoTWV0YUluZm86OklzSXRl
bVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzVmFsLCBtZXRhRmxhdm9yRmxhZ3MpICYm
DQotICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJpbmdJdGVtKGl0ZW1O
YW1lLCBzVmFsKSkpDQorICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJp
bmdJdGVtKGl0ZW1OYW1lLCBzVmFsLCBtZXRhRmxhdm9yRmxhZ3MpKSkNCiAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgIHJldHVybiBIWFJfT0s7DQogICAgICAgICAgICAgfQ0KIA0KICAg
ICAgICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihvcHRpb24tPk9wdGlvbk5hbWUs
IG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgICAgICByZXR1cm4gSFhSX1BBUlNF
X0VSUk9SOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgUmVwb3J0VW5zdXBwb3J0ZWRNZXRhU3R5
bGVPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lKTsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0Vf
RVJST1I7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICAgICAvLyB4bWwgb3B0aW9u
cyBvdmVycmlkZSB0aGUgY29tbWFuZCBsaW5lLCBob3dldmVyLCB4bWwgb3B0aW9ucyBjYW4gbm90
IGJlIHNldCB1c2luZyB0aGUgZmxhdm9yLA0KICAgICAgICAgLy8gc28gaW4gdGhpcyBjYXNlLCBp
ZiB0aGUgeG1sIG9wdGlvbiBoYXMgdmFsdWUgd2hpY2ggaXMgbm90IHZhbGlkIGZvciBmbGF2b3Is
IHdlJ2xsIGp1c3QgaWdub3JlIGl0Lg0KICAgICAgICAgaWYoIU1ldGFJbmZvOjpJc0l0ZW1TdXBw
b3J0ZWRCeUFueUZsYXZvcihpdGVtTmFtZSwgbWV0YUZsYXZvckZsYWdzKSkNCiAgICAgICAgIHsN
CiAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgRW5j
b2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5YbWxPcHRpb25WYWx1ZVVURjg7DQogDQogICAgICAg
ICBpZighTWV0YUluZm86OklzSXRlbVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzVmFs
LCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldHVybiBIWFJf
T0s7DQogICAgICAgICB9DQogICAgICAgICBlbHNlIA0KICAgICAgICAgew0KLSAgICAgICAgICAg
IGlmKFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJpbmdJdGVtKGl0ZW1OYW1lLCBzVmFsKSkpDQor
ICAgICAgICAgICAgaWYoU1VDQ0VFREVEKG1ldGFpbmZvLlNldFN0cmluZ0l0ZW0oaXRlbU5hbWUs
IHNWYWwsIG1ldGFGbGF2b3JGbGFncykpKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEhYUl9PSzsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQogICAgICAg
ICBSZXBvcnRJbnZhbGlkVmFsdWVGb3JPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lLCBvcHRpb24t
PlhtbE9wdGlvblZhbHVlVVRGOCk7DQogICAgICAgICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0K
ICAgICB9DQogfQ0KIA0KIGlubGluZSBIWF9SRVNVTFQgUHJvY2Vzc0RlcGVuZGVudFN0cmluZ09w
dGlvbihlQ29tbWFuZExpbmVQcm9jZXNzb3JQaGFzZSBwaGFzZSwgSW5wdXRPcHRpb24qIG9wdGlv
biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFQcm9jZXNzb3JWYXJzJiBtcFZh
cnMsIE1ldGFJbmZvOjplU3RyaW5nTWV0YUl0ZW0gaXRlbU5hbWUpDQogew0KICAgICByZXR1cm4g
UHJvY2Vzc1N0cmluZ09wdGlvbigocGhhc2UgIT0gQ0xQUF9EZXBlbmRlbnRPcHRpb25zKSwNCiAg
ICAgICAgICAgICAgICAgb3B0aW9uLCBtcFZhcnMuSW5qZWN0ZWRNZXRhSW5mbywgaXRlbU5hbWUs
IG1wVmFycy5JbmplY3RlZE1ldGFGbGF2b3JzKTsNCiB9DQogDQogSFhfUkVTVUxUIFByb2Nlc3NV
SW50T3B0aW9uKGJvb2wgYlNraXBBcmdPbmx5LCBJbnB1dE9wdGlvbiogb3B0aW9uLCBNZXRhSW5m
byYgbWV0YWluZm8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRhSW5mbzo6ZVVJ
bnRNZXRhSXRlbSBpdGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlm
KG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSAmJiBvcHRpb24tPlhtbE9wdGlvblZh
bHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJS
T1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNraXBBcmdPbmx5KQ0KICAgICB7DQogICAgICAgICBy
ZXR1cm4gSFhSX09LOw0KICAgICB9DQogDQogICAgIGlmKG9wdGlvbi0+WG1sT3B0aW9uVmFsdWVV
VEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgaWYoTWV0YUluZm86OklzSXRlbVN1cHBv
cnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICAgICAgew0K
ICAgICAgICAgICAgIC8vIG9wdGlvbnMgYXJlIGJlaW5nIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBs
aW5lDQogICAgICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5PcHRpb25WYWx1
ZVVURjg7DQogDQogICAgICAgICAgICAgVUlOVDMyIHVWYWwgPSAwOw0KICAgICAgICAgICAgIGlm
KFByb3BUb29sczo6RXh0cmFjdFVJbnQzMih1VmFsLCBzVmFsKSkNCiAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgIGlmKE1ldGFJbmZvOjpJc0l0ZW1WYWx1ZVZhbGlkRm9yRmxhdm9ycyhp
dGVtTmFtZSwgdVZhbCwgbWV0YUZsYXZvckZsYWdzKSAmJg0KLSAgICAgICAgICAgICAgICAgICAg
U1VDQ0VFREVEKG1ldGFpbmZvLlNldFVJbnRJdGVtKGl0ZW1OYW1lLCB1VmFsLCBUUlVFKSkpDQor
ICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobWV0YWluZm8uU2V0VUludEl0ZW0oaXRlbU5h
bWUsIHVWYWwsIFRSVUUsIG1ldGFGbGF2b3JGbGFncykpKQ0KICAgICAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihv
cHRpb24tPk9wdGlvbk5hbWUsIG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgICAg
ICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgUmVwb3J0
VW5zdXBwb3J0ZWRNZXRhU3R5bGVPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lKTsNCiAgICAgICAg
IHJldHVybiBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAg
ICAgICAvLyB4bWwgb3B0aW9ucyBvdmVycmlkZSB0aGUgY29tbWFuZCBsaW5lLCBob3dldmVyLCB4
bWwgb3B0aW9ucyBjYW4gbm90IGJlIHNldCB1c2luZyB0aGUgZmxhdm9yLA0KICAgICAgICAgLy8g
c28gaW4gdGhpcyBjYXNlLCBpZiB0aGUgeG1sIG9wdGlvbiBoYXMgdmFsdWUgd2hpY2ggaXMgbm90
IHZhbGlkIGZvciBmbGF2b3IsIHdlJ2xsIGp1c3QgaWdub3JlIGl0Lg0KICAgICAgICAgaWYoIU1l
dGFJbmZvOjpJc0l0ZW1TdXBwb3J0ZWRCeUFueUZsYXZvcihpdGVtTmFtZSwgbWV0YUZsYXZvckZs
YWdzKSkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAg
fQ0KIA0KICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5YbWxPcHRpb25WYWx1
ZVVURjg7DQogDQogICAgICAgICBVSU5UMzIgdVZhbCA9IDA7DQogICAgICAgICBpZihQcm9wVG9v
bHM6OkV4dHJhY3RVSW50MzIodVZhbCwgc1ZhbCkpDQogICAgICAgICB7DQogICAgICAgICAgICAg
aWYoIU1ldGFJbmZvOjpJc0l0ZW1WYWx1ZVZhbGlkRm9yRmxhdm9ycyhpdGVtTmFtZSwgdVZhbCwg
bWV0YUZsYXZvckZsYWdzKSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHJldHVy
biBIWFJfT0s7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgDQogICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICBpZihTVUNDRUVERUQobWV0YWluZm8uU2V0VUludEl0ZW0o
aXRlbU5hbWUsIHVWYWwsIFRSVUUpKSkNCisgICAgICAgICAgICAgICAgaWYoU1VDQ0VFREVEKG1l
dGFpbmZvLlNldFVJbnRJdGVtKGl0ZW1OYW1lLCB1VmFsLCBUUlVFLCBtZXRhRmxhdm9yRmxhZ3Mp
KSkNCiAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhYUl9P
SzsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiANCiAg
ICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihvcHRpb24tPk9wdGlvbk5hbWUsIG9w
dGlvbi0+WG1sT3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJS
T1I7DQogICAgIH0NCiB9DQogDQogaW5saW5lIEhYX1JFU1VMVCBQcm9jZXNzRGVwZW5kZW50VUlu
dE9wdGlvbihlQ29tbWFuZExpbmVQcm9jZXNzb3JQaGFzZSBwaGFzZSwgSW5wdXRPcHRpb24qIG9w
dGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFQcm9jZXNzb3JWYXJzJiBt
cFZhcnMsIE1ldGFJbmZvOjplVUludE1ldGFJdGVtIGl0ZW1OYW1lKQ0KIHsNCiAgICAgcmV0dXJu
IFByb2Nlc3NVSW50T3B0aW9uKChwaGFzZSAhPSBDTFBQX0RlcGVuZGVudE9wdGlvbnMpLA0KICAg
ICAgICAgICAgICAgICBvcHRpb24sIG1wVmFycy5JbmplY3RlZE1ldGFJbmZvLCBpdGVtTmFtZSwg
bXBWYXJzLkluamVjdGVkTWV0YUZsYXZvcnMpOw0KIH0NCiANCiBIWF9SRVNVTFQgUHJvY2Vzc0tl
eXdvcmRTdHJpbmdPcHRpb24oYm9vbCBiU2tpcEFyZ09ubHksIElucHV0T3B0aW9uKiBvcHRpb24s
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hYUHRyQXJyYXkmIGFLZXl3
b3JkcywgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0aW9u
VmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJTRV9F
UlJPUjsNCiAgICAgfQ0KIA0KICAgICBpZihiU2tpcEFyZ09ubHkpDQogICAgIHsNCiAgICAgICAg
IHJldHVybiBIWFJfT0s7DQogICAgIH0NCkBAIC0xMDUwLDYxICsxMDUxLDYxIEBADQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YUluZm86OmVTdHJpbmdNZXRhSXRlbSBp
dGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0
aW9uVmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJT
RV9FUlJPUjsNCiAgICAgfQ0KIA0KICAgICBpZihiU2tpcEFyZ09ubHkpDQogICAgIHsNCiAgICAg
ICAgIHJldHVybiBIWFJfT0s7DQogICAgIH0NCiANCiAgICAgaWYoTWV0YUluZm86OklzSXRlbVN1
cHBvcnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICB7DQog
ICAgICAgICAvLyByZWFkLWluIHRoZSBmaWxlIGNvbnRlbnRzDQogICAgICAgICBDSFhTdHJpbmcg
c0ZpbGVOYW1lID0gb3B0aW9uLT5HZXRFZmZlY3RpdmVPcHRpb25WYWx1ZUNDUCgpOw0KICAgICAg
ICAgaWYoIXNGaWxlTmFtZS5Jc0VtcHR5KCkgJiYgQ0hYRmlsZVNwZWNVdGlsczo6RmlsZUV4aXN0
cyhDSFhGaWxlU3BlY2lmaWVyKHNGaWxlTmFtZSkpKQ0KICAgICAgICAgew0KICAgICAgICAgICAg
IEVuY29kZWRTdHJpbmcgc1hNTDsNCiAgICAgICAgICAgICBIWF9SRVNVTFQgcmV0VmFsID0gTWV0
YUluZm86OkxvYWRYTUxTdHJpbmdGcm9tRmlsZSgoY29uc3QgY2hhciopc0ZpbGVOYW1lLCBzWE1M
KTsNCiANCiAgICAgICAgICAgICBpZihGQUlMRUQocmV0VmFsKSkNCiAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgIHByaW50ZigiVW5zdXBwb3J0ZWQgZW5jb2RpbmcgaW4gVUlUUyBmaWxl
OiAlc1xuIiwgKGNvbnN0IGNoYXIqKXNGaWxlTmFtZSk7DQogICAgICAgICAgICAgICAgIHByb2dS
ZXRDb2RlID0gUkNfRVJST1JfVU5TVVBQT1JURURfSU5QVVRfVUlUU19FTkNPRElORzsNCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEhYUl9GQUlMRUQ7DQogICAgICAgICAgICAgfQ0KIA0KICAgICAg
ICAgICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpICYmDQogICAgICAgICAgICAgICAgTWV0YUluZm86
OklzSXRlbVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzWE1MLCBtZXRhRmxhdm9yRmxh
Z3MpICYmDQotICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1ldGFpbmZvLlNldFN0cmluZ0l0ZW0o
aXRlbU5hbWUsIHNYTUwpKSkNCisgICAgICAgICAgICAgICBTVUNDRUVERUQobWV0YWluZm8uU2V0
U3RyaW5nSXRlbShpdGVtTmFtZSwgc1hNTCwgbWV0YUZsYXZvckZsYWdzKSkpDQogICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgICAgIH0NCiAg
ICAgICAgIH0NCiAgICAgICAgIGVsc2UNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBwcmludGYo
IkZhaWxlZCB0byBvcGVuIFVJVFMgZmlsZTogJXNcbiIsIChjb25zdCBjaGFyKilzRmlsZU5hbWUp
Ow0KICAgICAgICAgICAgIHByb2dSZXRDb2RlID0gUkNfRVJST1JfQ0FOTk9UX09QRU5fSU5QVVRf
VUlUU19GSUxFOw0KICAgICAgICAgICAgIHJldHVybiBIWFJfRkFJTEVEOw0KICAgICAgICAgfQ0K
IA0KICAgICAgICAgUmVwb3J0SW52YWxpZFZhbHVlRm9yT3B0aW9uKG9wdGlvbi0+T3B0aW9uTmFt
ZSwgb3B0aW9uLT5PcHRpb25WYWx1ZVVURjgpOw0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJTRV9F
UlJPUjsNCiAgICAgfQ0KIA0KICAgICBSZXBvcnRVbnN1cHBvcnRlZE1ldGFTdHlsZU9wdGlvbihv
cHRpb24tPk9wdGlvbk5hbWUpOw0KICAgICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0KIH0NCiAN
CiBIWF9SRVNVTFQgUHJvY2Vzc1JlbW92ZVBpY3R1cmVPcHRpb24oYm9vbCBiU2tpcEFyZ09ubHks
IElucHV0T3B0aW9uKiBvcHRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
SFhQdHJBcnJheSYgYVJlbW92ZWRQaWN0dXJlVHlwZXMsIFVJTlQzMiBtZXRhRmxhdm9yRmxhZ3Mp
DQogew0KICAgICBpZihvcHRpb24tPk9wdGlvblZhbHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsN
CiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNr
aXBBcmdPbmx5KQ0KICAgICB7DQogICAgICAgICByZXR1cm4gSFhSX09LOw0KQEAgLTE3NTMsNzkg
KzE3NTQsODEgQEANCiAgICAgVUlOVDMyIHN0YXJ0VGltZSA9IDA7DQogICAgIENIWEZpbGVTcGVj
aWZpZXIgZXhlRmlsZVNwZWM7DQogICAgIEhYQk9PTCBiVXNpbmdMb2cgPSBGQUxTRTsNCiANCiAg
ICAgRExMQWNjZXNzKiBwRExMQWNjZXNzID0gMDsNCiAgICAgRlBIWE1FRElBUExBVEZPUk1PUEVO
IGZwSFhNZWRpYVBsYXRmb3JtT3BlbiA9IDA7DQogICAgIEZQSFhDUkVBVEVNRURJQVBMQVRGT1JN
IGZwSFhDcmVhdGVNZWRpYVBsYXRmb3JtID0gMDsNCiAgICAgRlBIWE1FRElBUExBVEZPUk1DTE9T
RSBmcEhYTWVkaWFQbGF0Zm9ybUNsb3NlID0gMDsNCiANCiAgICAgSUhYTWVkaWFQbGF0Zm9ybSog
cE1lZGlhUGxhdGZvcm0gPSAwOw0KICAgICBJSFhDb21tb25DbGFzc0ZhY3RvcnkqIHBDb21tb25D
bGFzc0ZhY3RvcnkgPSAwOw0KICAgICBDSFhYbWxJbnB1dFBhcnNlciogcElucHV0UGFyc2VyID0g
MDsNCiAgICAgSUhYTWV0YURhdGFFZGl0b3IqIHBFZGl0b3IgPSAwOw0KICAgICBDUmVzcG9uc2Uq
IHBSZXNwb25zZSA9IDA7DQogICAgIENQcm9jZXNzb3IqIHBQcm9jZXNzb3IgPSAwOw0KICAgICBJ
SFhWYWx1ZXMqIHBPcHRpb25zID0gMDsNCiANCiAgICAgY2hhciBwRGxsUGF0aFtfTUFYX1BBVEhd
ID0gezB9Ow0KICAgICBjaGFyIHBEbGxGaWxlW19NQVhfUEFUSF0gPSB7MH07DQogICAgIGNvbnN0
IGNoYXIqIHBzekhlbGl4UGx1Z2luUGF0aCA9IDA7DQogDQogICAgIENIWFN0cmluZyBzdHJJbnB1
dEZpbGVOYW1lOw0KICAgICBDSFhTdHJpbmcgc3RyT3V0cHV0RmlsZU5hbWU7DQogICAgIENIWFN0
cmluZyBzdHJPdXRwdXRYTUxGaWxlTmFtZTsNCiAgICAgQ0hYU3RyaW5nIHN0clBpY3R1cmVGaWxl
TmFtZVByZWZpeDsNCiAgICAgQ0hYU3RyaW5nIHN0clVJVFNEYXRhT3V0cHV0RmlsZU5hbWU7DQog
ICAgIENIWFN0cmluZyBzdHJNZXRhU3R5bGVOYW1lOw0KIA0KICAgICBIWEJPT0wgYkRpc3BsYXlI
ZWxwID0gRkFMU0U7DQogICAgIEhYQk9PTCBiT3ZlcndyaXRlRmlsZSA9IEZBTFNFOw0KKyAgICBI
WEJPT0wgYk1pbkZpbGVTaXplID0gRkFMU0U7DQogICAgIEhYQk9PTCBiRGlzYWJsZVByb2dyZXNz
aXZlRG93bmxvYWQgPSBGQUxTRTsNCiAgICAgSFhCT09MIGJQcmludE1ldGFEYXRhID0gRkFMU0U7
DQogICAgIEhYQk9PTCBiRXh0cmFjdFBpY3R1cmVzVG9GaWxlcyA9IEZBTFNFOw0KICAgICBIWEJP
T0wgYlVURjE2T3V0cHV0ID0gRkFMU0U7DQogICAgIEhYQk9PTCBiVVRGOElucHV0ID0gRkFMU0U7
DQogICAgIFVJTlQzMiB1bE1ldGFEYXRhVUlUU0xvY2F0aW9uID0gTUVUQURBVEFVSVRTTE9DQVRJ
T05fVUlUU0FUT007DQogICAgIFVJTlQzMiB1bE1ldGFEYXRhSUQzVmVyc2lvbk91dHB1dCA9IE1F
VEFEQVRBSUQzVkVSU0lPTl8yNDA7DQogDQogICAgIE1ldGFQcm9jZXNzb3JWYXJzIG1ldGFQcm9j
ZXNzb3JWYXJzOw0KIA0KICAgICAvLyBjb25zdHJ1Y3Qgb3B0aW9uIHJlZ2lzdHJ5DQogICAgIE9w
dGlvblJlZ2lzdHJ5IG9wdGlvblJlZzsNCiANCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9u
RGVzYyhPUFRJT05fU1RSSU5HX0xPR0ZJTEUsICI8ZmlsZW5hbWU+IiwgInJlZGlyZWN0IGNvbnNv
bGUgb3V0cHV0IHRvIGxvZyBmaWxlIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRp
b25EZXNjKE9QVElPTl9TVFJJTkdfSU5QVVRGSUxFLCAiPGZpbGVuYW1lPiIsICJpbnB1dCBmaWxl
IiwgMSwgIi9hbGJ1bXMvYWxidW0vdHJhY2svbWVkaWFGaWxlL2ZpbGVOYW1lIikpOw0KICAgICBv
cHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfT1VUUFVURklMRSwgIjxm
aWxlbmFtZT4iLCAib3V0cHV0IGZpbGUiLCAxLCAiL2FsYnVtcy9hbGJ1bS90cmFjay9vdXRwdXRG
aWxlTmFtZSIpKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RS
SU5HX1hNTElOUFVURklMRSwgIjxmaWxlbmFtZT4iLCAiWE1MIGZpbGUgd2l0aCBpbnB1dCBwYXJh
bWV0ZXJzIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9T
VFJJTkdfWE1MT1VUUFVURklMRSwgIjxmaWxlbmFtZT4iLCAibWV0YWRhdGEgb3V0cHV0IFhNTCBm
aWxlIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJ
TkdfT1ZFUldSSVRFRklMRSwgMCwgIm92ZXJ3cml0ZSBvdXRwdXQgZmlsZSBpZiBpdCBleGlzdHMi
LCAwKSk7DQorICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19N
SU5GSUxFU0laRSwgMCwgImtlZXAgb3V0cHV0IGZpbGUgc2l6ZSBhcyBzbWFsbCBhcyBwb3NzaWJs
ZSAobm8gZnJlZSBhdG9tcykiLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRl
c2MoT1BUSU9OX1NUUklOR19ESVNBQkxFUFJPR1JFU1NJVkVET1dOTE9BRCwgMCwgImRpc2FibGUg
cHJvZ3Jlc3NpdmUgZG93bmxvYWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIG5vdCB1c2lu
ZyBodHRwIG9yIGZ0cCBwcm90b2NvbCIsIDApKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0
aW9uRGVzYyhPUFRJT05fU1RSSU5HX0NMRUFSTUVUQURBVEEsIDAsICJjbGVhciBhbGwgZXh0cmFj
dGVkIG1ldGFkYXRhIGJlZm9yZSBpbmplY3Rpb24iLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQo
bmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19NRVRBU1RZTEUsICI8M0dQUCB8IGlUdW5lcz4i
LCAiZmxhdm9yIG9mIGluamVjdGVkIG1ldGFkYXRhIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRk
KG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVVRGMTZPVVRQVVQsIDAsICJ1c2UgVVRGMTYg
Zm9ybWF0IHRvIHN0b3JlIHN0cmluZ3MgaW4gb3V0cHV0IGZpbGUiLCAwKSk7DQogICAgIG9wdGlv
blJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19VVEY4SU5QVVQsIDAsICJwYXJz
ZSBjb21tYW5kIGxpbmUgYXMgVVRGOCBzdHJpbmdzIiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRk
KG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfSUQzVjI0ME9VVFBVVCwgMCwgImluamVjdCBJ
RDN2MiB2ZXJzaW9uIDIuNC4wLCBkZWZhdWx0IiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5l
dyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfSUQzVjIzME9VVFBVVCwgMCwgImluamVjdCBJRDN2
MiB2ZXJzaW9uIDIuMy4wIiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNj
KE9QVElPTl9TVFJJTkdfSUQzVjJOT09VVFBVVCwgMCwgInNraXAgaW5qZWN0aW5nIElEM3YyIHRh
ZyIsIDApKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RSSU5H
X1VJVFNMT0NBVElPTklEMzIsIDAsICJpbmplY3QgVUlUUyBkYXRhIGludG8gSUQzMiBhdG9tIChs
ZWdhY3kgbW9kZSkiLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BU
SU9OX1NUUklOR19QUklOVE1FVEFEQVRBLCAwLCAicHJpbnQgdXBkYXRlZCBtZXRhZGF0YSIsIDAp
KTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RSSU5HX1BJQ1RV
UkVfRVhUUkFDVCwgIltmaWxlbmFtZSBwcmVmaXhdIiwgInNhdmUgZXh0cmFjdGVkIHBpY3R1cmVz
IiwgLTEpKTsNCiANCiAjaWZkZWYgSEVMSVhfRkVBVFVSRV9NRVRBRURJVF9BVURJT19IQVNIDQog
ICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19HRU5FUkFURUhB
U0gsIDAsICJnZW5lcmF0ZSBoYXNoIiwgMCkpOw0KICNlbmRpZiAvL0hFTElYX0ZFQVRVUkVfTUVU
QUVESVRfQVVESU9fSEFTSA0KIA0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKCkp
Ow0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVElUTEUs
ICI8c3RyaW5nPiIsICJ1cGRhdGUgdGl0bGUiLCAxLCAiL2FsYnVtcy9hbGJ1bS90cmFjay9uYW1l
IikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfQVJU
SVNULCAiPHN0cmluZz4iLCAidXBkYXRlIDNHUFAgcGVyZm9ybWVyLCBpVHVuZXMgYXJ0aXN0Iiwg
MSwgIi9hbGJ1bXMvYWxidW0vdHJhY2svYXJ0aXN0L25hbWUiKSk7DQogICAgIG9wdGlvblJlZy5B
ZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19BTEJVTSwgIjxzdHJpbmc+IiwgInVwZGF0
ZSBhbGJ1bSIsIDEsICIvYWxidW1zL2FsYnVtL25hbWUiKSk7DQogICAgIG9wdGlvblJlZy5BZGQo
bmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19HRU5SRSwgIjxzdHJpbmc+IiwgInVwZGF0ZSBn
ZW5yZSIsIDEsICIvYWxidW1zL2FsYnVtL3RyYWNrL3N0eWxlL25hbWUiKSk7DQogICAgIG9wdGlv
blJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19DT01QT1NFUiwgIjxzdHJpbmc+
IiwgInVwZGF0ZSAzR1BQIGF1dGhvciwgaVR1bmVzIGNvbXBvc2VyIiwgMSwgIi9hbGJ1bXMvYWxi
dW0vdHJhY2svYXJ0aXN0L2NvbXBvc2VyIikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRp
b25EZXNjKE9QVElPTl9TVFJJTkdfQ09NTUVOVCwgIjxzdHJpbmc+IiwgInVwZGF0ZSAzR1BQIGRl
c2NyaXB0aW9uLCBpVHVuZXMgY29tbWVudCIsIDEsICIvYWxidW1zL2FsYnVtL3BsaW5lIikpOw0K
ICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfQ09QWVJJR0hU
LCAiPHN0cmluZz4iLCAidXBkYXRlIGNvcHlyaWdodCIsIDEsICIvYWxidW1zL2FsYnVtL2NsaW5l
IikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVFJB
Q0tOVU1CRVIsICI8aW50ZWdlciAwLi4yNTU+IiwgInVwZGF0ZSB0cmFjayBudW1iZXIiLCAxLCAi
L2FsYnVtcy9hbGJ1bS90cmFjay9zZXF1ZW5jZSIpKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcg
T3B0aW9uRGVzYyhPUFRJT05fU1RSSU5HX1lFQVIsICI8aW50ZWdlciAwLi42NTUzNj4iLCAidXBk
YXRlIDNHUFAgcmVjb3JkaW5nIHllYXIsIGlUdW5lcyByZWxlYXNlIGRhdGUiLCAxLCAiL2FsYnVt
cy9hbGJ1bS9PcmlnUmVsZWFzZVllYXIiKSk7DQogICAgIHsNCiAgICAgICAgIC8vIEFkZCBwaWN0
dXJlDQogICAgICAgICBDSFhQdHJBcnJheSogcFBpY3R1cmVBZGRYUGF0aHMgPSBuZXcgQ0hYUHRy
QXJyYXk7DQogICAgICAgICBwUGljdHVyZUFkZFhQYXRocy0+QWRkKG5ldyBDSFhTdHJpbmcoIi9h
bGJ1bXMvYWxidW0vaW1hZ2UvZmlsZU5hbWUiKSk7DQpAQCAtMjIxOSw2MCArMjIyMiw2NCBAQA0K
ICAgICAgICAgICAgICAgICBiRGlzcGxheUhlbHAgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCiAN
CiAjaWZkZWYgX1dJTkRPV1MNCiAgICAgICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJ
T05fU1RSSU5HX0FTWU5DTU9ERSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIGdf
YlVzZURURHJpdmVyU3luY2hyb25vdXNNb2RlID0gRkFMU0U7DQogICAgICAgICAgICAgfQ0KICNl
bmRpZiAvL19XSU5ET1dTDQogDQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BU
SU9OX1NUUklOR19ERUZNRVRBUFJPQykNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
IGdfYlVzZURlZmF1bHRNZXRhRWRpdG9yUHJvY2Vzc29yID0gVFJVRTsNCiAgICAgICAgICAgICB9
DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19MT0dGSUxF
KQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZywgYWxyZWFk
eSBwcm9jZXNzZWQNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRp
b24gPT0gT1BUSU9OX1NUUklOR19JTlBVVEZJTEUpDQogICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICAgICBzdHJJbnB1dEZpbGVOYW1lID0gb3B0aW9uLT5HZXRFZmZlY3RpdmVPcHRpb25WYWx1
ZUNDUCgpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9
PSBPUFRJT05fU1RSSU5HX09VVFBVVEZJTEUpDQogICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgICBzdHJPdXRwdXRGaWxlTmFtZSA9IG9wdGlvbi0+R2V0RWZmZWN0aXZlT3B0aW9uVmFsdWVD
Q1AoKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0g
T1BUSU9OX1NUUklOR19PVkVSV1JJVEVGSUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgYk92ZXJ3cml0ZUZpbGUgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX01JTkZJTEVTSVpFKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgYk1pbkZpbGVTaXplID0gVFJVRTsNCisgICAgICAg
ICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19E
SVNBQkxFUFJPR1JFU1NJVkVET1dOTE9BRCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgIGJEaXNhYmxlUHJvZ3Jlc3NpdmVEb3dubG9hZCA9IFRSVUU7DQogICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09IE9QVElPTl9TVFJJTkdfQ0xFQVJNRVRB
REFUQSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIG1ldGFQcm9jZXNzb3JWYXJz
LkNsZWFyTWV0YURhdGEgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNl
IGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX1BSSU5UTUVUQURBVEEpDQogICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgICBiUHJpbnRNZXRhRGF0YSA9IFRSVUU7DQogICAgICAgICAg
ICAgfQ0KIA0KICNpZmRlZiBIRUxJWF9GRUFUVVJFX01FVEFFRElUX0FVRElPX0hBU0gNCiAgICAg
ICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX0dFTkVSQVRFSEFTSCkN
CiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIG1ldGFQcm9jZXNzb3JWYXJzLkdlbmVy
YXRlSGFzaCA9IFRSVUU7DQogICAgICAgICAgICAgfQ0KICNlbmRpZiAvL0hFTElYX0ZFQVRVUkVf
TUVUQUVESVRfQVVESU9fSEFTSA0KIA0KICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09
IE9QVElPTl9TVFJJTkdfWE1MSU5QVVRGSUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgLy8gZG8gbm90aGluZywgYWxyZWFkeSBwcm9jZXNzZWQNCiAgICAgICAgICAgICB9DQog
ICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19YTUxPVVRQVVRG
SUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgc3RyT3V0cHV0WE1MRmlsZU5h
bWUgPSBvcHRpb24tPkdldEVmZmVjdGl2ZU9wdGlvblZhbHVlQ0NQKCk7DQogICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09IE9QVElPTl9TVFJJTkdfTUVUQVNU
WUxFKQ0KICAgICAgICAgICAgIHsNCkBAIC0yNjYwLDYwICsyNjY3LDY1IEBADQogDQogICAgIC8v
IGluaXRpYWxpemUgb3B0aW9ucw0KICAgICByZXRWYWwgPSBDcmVhdGVJbnN0YW5jZUNDRl9RSShD
TFNJRF9JSFhWYWx1ZXMsIElJRF9JSFhWYWx1ZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHZvaWQqKikmcE9wdGlvbnMsIHBDb21tb25DbGFzc0ZhY3RvcnkpOw0KICAg
ICBpZihTVUNDRUVERUQocmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlv
bnMtPlNldFByb3BlcnR5VUxPTkczMihTWU5DSFJPTk9VU19PUFRJT05fTkFNRSwgZ19iVXNlRFRE
cml2ZXJTeW5jaHJvbm91c01vZGUgPyAxIDogMCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VF
REVEKHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIC8vIHN1cHByZXNzIHBhY2tldCBwcm9jZXNz
aW5nIGluIHB1cmUgZXh0cmFjdGlvbiBtb2RlDQogICAgICAgICBpZihzdHJPdXRwdXRGaWxlTmFt
ZS5Jc0VtcHR5KCkgJiYgIW1ldGFQcm9jZXNzb3JWYXJzLkdlbmVyYXRlSGFzaCkNCiAgICAgICAg
IHsNCiAgICAgICAgICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKFRJ
TUVSX09QVElPTl9OQU1FLCAwKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZihTVUND
RUVERUQocmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMtPlNldFBy
b3BlcnR5VUxPTkczMihCTEFTVEZJTEVfT1BUSU9OX05BTUUsIGJPdmVyd3JpdGVGaWxlID8gMSA6
IDApOw0KICAgICB9DQogDQogICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAg
ICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKERJU0FCTEVQUk9HUkVT
U0lWRURPV05MT0FEX09QVElPTl9OQU1FLCBiRGlzYWJsZVByb2dyZXNzaXZlRG93bmxvYWQgPyAx
IDogMCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVEKHJldFZhbCkpDQogICAgIHsNCisg
ICAgICAgIHJldFZhbCA9IHBPcHRpb25zLT5TZXRQcm9wZXJ0eVVMT05HMzIoRk9SQ0VNT09WRklS
U1RfT1BUSU9OX05BTUUsIGJNaW5GaWxlU2l6ZSA/IDEgOiAwKTsNCisgICAgfQ0KKw0KKyAgICBp
ZihTVUNDRUVERUQocmV0VmFsKSkNCisgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMt
PlNldFByb3BlcnR5VUxPTkczMihVVEYxNk9VVFBVVF9PUFRJT05fTkFNRSwgYlVURjE2T3V0cHV0
ID8gMSA6IDApOw0KICAgICB9DQogDQogICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7
DQogICAgICAgICAvLyBOb3RpZnkgd3JpdGVyIGFib3V0IHRoZSB2ZXJzaW9uIG9mIElEMyB0YWcg
aXQgc2hvdWxkIG91dHB1dC4NCiAgICAgICAgIHJldFZhbCA9IHBPcHRpb25zLT5TZXRQcm9wZXJ0
eVVMT05HMzIoTUVUQURBVEFJRDNWRVJTSU9OX09QVElPTl9OQU1FLCB1bE1ldGFEYXRhSUQzVmVy
c2lvbk91dHB1dCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVEKHJldFZhbCkpDQogICAg
IHsNCiAgICAgICAgIC8vIE5vdGlmeSB3cml0ZXIgd2hldGhlciB0byB1c2UgbGVnYWN5IGxvY2F0
aW9uIGZvciBVSVRTIGRhdGEuDQogICAgICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVy
dHlVTE9ORzMyKE1FVEFEQVRBVUlUU0xPQ0FUSU9OX09QVElPTl9OQU1FLCB1bE1ldGFEYXRhVUlU
U0xvY2F0aW9uKTsNCiAgICAgfQ0KIA0KICAgICBpZihTVUNDRUVERUQocmV0VmFsKSkNCiAgICAg
ew0KICAgICAgICAgLy8gTm90aWZ5IG1ldGEtZWRpdG9yIGFib3V0IHRoZSBmbGF2b3Igb2YgbWV0
YS1kYXRhIGl0IHNob3VsZCBwcm9jZXNzLg0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMtPlNl
dFByb3BlcnR5VUxPTkczMihNRVRBREFUQUZMQVZPUl9PUFRJT05fTkFNRSwgbWV0YVByb2Nlc3Nv
clZhcnMuSW5qZWN0ZWRNZXRhRmxhdm9ycyk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVE
KHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIC8vIExlZ2FjeSBJRDMyX0JMT0IgcHJvcGVydHkg
bXVzdCBub3QgZ2V0IGluIHRoZSB3YXkgb2YgbmV3bHkgZGVmaW5lZCBwcm9wZXJ0aWVzLg0KICAg
ICAgICAgLy8gVGVsbCBmaWxlLXdyaXRlciB0byBpZ25vcmUgaXQuDQogICAgICAgICByZXRWYWwg
PSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFEQVRBSUdOT1JFX09QVElPTl9OQU1F
LCBNRVRBREFUQUlHTk9SRV9JRDMyQkxPQik7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVE
KHJldFZhbCkpDQogICAgIHsNCg==
--14dae9cdc0d5b21b3704b05e1fbd
Content-Type: application/octet-stream;
	name="datatype_tools_dtdriver_engine.diff"
Content-Disposition: attachment; filename="datatype_tools_dtdriver_engine.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gubdnxgf1

SW5kZXg6IGZmZHJpdmVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2RhdGF0
eXBlL3Rvb2xzL2R0ZHJpdmVyL2VuZ2luZS9mZmRyaXZlci5jcHAsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjY0LjIuMg0KZGlmZiAtVSAzMCAtdyAtZCAtSCAtcjEuNjQuMi4yIGZmZHJpdmVyLmNw
cA0KLS0tIGZmZHJpdmVyLmNwcAk0IE5vdiAyMDEwIDEzOjI1OjMxIC0wMDAwCTEuNjQuMi4yDQor
KysgZmZkcml2ZXIuY3BwCTI4IE9jdCAyMDExIDE1OjExOjEwIC0wMDAwDQpAQCAtNTI3LDYwICs1
MjcsNjQgQEANCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBMRUFLREVUQUlMU19PUFRJT047
DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwg
TUVNT1JZREVUQUlMU19PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgIHVPcHRGbGFnID0gTUVNT1JZREVUQUlMU19PUFRJT047DQogICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgRVZFTlRfT1BUSU9OX05B
TUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0RmxhZyA9IEVW
RU5UX09QVElPTjsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21w
KHBPcHROYW1lLCBEVVJBVElPTl9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gRFVSQVRJT05fT1BUSU9OOw0KICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUsIFBSRVJPTExfT1BUSU9O
X05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0RmxhZyA9
IFBSRVJPTExfT1BUSU9OOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChz
dHJjbXAocE9wdE5hbWUsIEJMQVNURklMRV9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gQkxBU1RGSUxFX09QVElPTjsNCiAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKHBPcHROYW1lLCBESVNBQkxF
UFJPR1JFU1NJVkVET1dOTE9BRF9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gUERPV05MT0FERF9PUFRJT047DQogICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgVVRGMTZPVVRQVVRf
T1BUSU9OX05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0
RmxhZyA9IFVURjE2T1VUUFVUX09QVElPTjsNCiAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
ZWxzZSBpZiAoc3RyY21wKHBPcHROYW1lLCBGT1JDRU1PT1ZGSVJTVF9PUFRJT05fTkFNRSkgPT0g
MCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gRk9SQ0VNT09W
RklSU1RfT1BUSU9OOw0KKyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJj
bXAocE9wdE5hbWUsIFNZTkNIUk9OT1VTX09QVElPTl9OQU1FKSA9PSAwKQ0KICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBTWU5DSFJPTk9VU19PUFRJT047DQogICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgUkVMQVRJ
VkVUU19PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
IHVPcHRGbGFnID0gUkVMQVRJVkVUU19PUFRJT047DQogICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgVElNSU5HX09QVElPTl9OQU1FKSA9PSAwKQ0K
ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBUSU1JTkdfT1BUSU9O
Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUs
IFBBU1NTV09GRlBLVFNfT1BUSU9OX05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICB1T3B0RmxhZyA9IFBBU1NTV09GRlBLVFNfT1BUSU9OOw0KICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUsIFFVSUVUX09QVElPTl9O
QU1FKSA9PSAwKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBR
VUlFVF9PUFRJT047DQogICAgICAgICAgICAgfSAgICAgICAgICANCiAgICAgICAgICAgICBlbHNl
DQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICBiSXNGbGFnT3B0aW9uID0gRkFMU0U7
DQogICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgIGlmIChiSXNGbGFnT3B0aW9uKQ0KICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgaWYgKHVPcHRWYWx1ZSA9PSBUUlVFKQ0KICAg
ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICBtX3VPcHRpb25GbGFncyB8PSB1
T3B0RmxhZzsNCkBAIC0yMDYyLDYwICsyMDY2LDY4IEBADQogICAgICAgICAgICAgcmV0VmFsID0g
cE5ld1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIoIlRydXN0R2l2ZW5NZWRpYVByb3BlcnRpZXMi
LCAwKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZiAoU1VDQ0VFREVEKHJldFZhbCkp
DQogICAgIHsNCiAgICAgICAgIGlmIChtX3VPcHRpb25GbGFncyAmIFBSRVJPTExfT1BUSU9OKQ0K
ICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlV
TE9ORzMyKCJSZWNvbXB1dGVQcmVyb2xsIiwgMSk7DQogICAgICAgICB9DQogICAgIH0NCiANCiAg
ICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAgICAgICBpZiAobV91T3B0aW9u
RmxhZ3MgJiBCTEFTVEZJTEVfT1BUSU9OKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZh
bCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKCJCbGFzdEZpbGVzIiwgMSk7DQogICAg
ICAgICB9DQogICAgIH0NCiANCiAgICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQog
ICAgICAgICBpZiAobV91T3B0aW9uRmxhZ3MgJiBVVEYxNk9VVFBVVF9PUFRJT04pDQogICAgICAg
ICB7DQogICAgICAgICAgICAgcmV0VmFsID0gcE5ld1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIo
IlVURjE2T3V0cHV0IiwgMSk7DQogICAgICAgICB9DQogICAgIH0NCiANCiAgICAgaWYgKFNVQ0NF
RURFRChyZXRWYWwpKQ0KICAgICB7DQorICAgICAgICBpZiAobV91T3B0aW9uRmxhZ3MgJiBGT1JD
RU1PT1ZGSVJTVF9PUFRJT04pDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0VmFsID0gcE5l
d1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIoRk9SQ0VNT09WRklSU1RfT1BUSU9OX05BTUUsIDEp
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChTVUNDRUVERUQocmV0VmFsKSkNCisg
ICAgew0KICAgICAgICAgaWYgKG1fdWxNZXRhRGF0YUZsYXZvciAhPSAwKQ0KICAgICAgICAgew0K
ICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFE
QVRBRkxBVk9SX09QVElPTl9OQU1FLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bE1ldGFEYXRhRmxhdm9yKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZiAoU1VD
Q0VFREVEKHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIGlmIChtX3VsTWV0YURhdGFJZ25vcmUg
IT0gMCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICByZXRWYWwgPSBwTmV3UHJvcHMtPlNldFBy
b3BlcnR5VUxPTkczMihNRVRBREFUQUlHTk9SRV9PUFRJT05fTkFNRSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdWxNZXRhRGF0YUlnbm9yZSk7DQogICAgICAgICB9DQogICAg
IH0NCiANCiAgICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAgICAgICBpZiAo
bV91bE1ldGFEYXRhSUQzVmVyc2lvbiAhPSAwKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJl
dFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFEQVRBSUQzVkVSU0lPTl9P
UFRJT05fTkFNRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdWxNZXRhRGF0
YUlEM1ZlcnNpb24pOw0KICAgICAgICAgfQ0KICAgICB9DQogDQogICAgIGlmIChTVUNDRUVERUQo
cmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgaWYgKG1fdWxNZXRhRGF0YVVJVFNMb2NhdGlvbiAh
PSAwKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJv
cGVydHlVTE9ORzMyKE1FVEFEQVRBVUlUU0xPQ0FUSU9OX09QVElPTl9OQU1FLA0KSW5kZXg6IHB1
Yi9mZmRyaXZlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZGF0YXR5cGUvdG9v
bHMvZHRkcml2ZXIvZW5naW5lL3B1Yi9mZmRyaXZlci5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS40Ny4yLjINCmRpZmYgLVUgMzAgLXcgLWQgLUggLXIxLjQ3LjIuMiBmZmRyaXZlci5oDQotLS0g
cHViL2ZmZHJpdmVyLmgJNCBOb3YgMjAxMCAxMzoyNTozMSAtMDAwMAkxLjQ3LjIuMg0KKysrIHB1
Yi9mZmRyaXZlci5oCTI4IE9jdCAyMDExIDE1OjExOjExIC0wMDAwDQpAQCAtOTAsNjAgKzkwLDYx
IEBADQogI2RlZmluZSBLRVlGUkFNRVNPTkxZX09QVElPTl9OQU1FICAgIktleUZyYW1lc09ubHki
DQogI2RlZmluZSBNQVhGUkFNRVJBVEVfT1BUSU9OX05BTUUgICAgIk1heEZyYW1lUmF0ZSINCiAj
ZGVmaW5lIE1JTkZSQU1FUkFURV9PUFRJT05fTkFNRSAgICAiTWluRnJhbWVSYXRlIg0KICNkZWZp
bmUgTE9PS0FIRUFEX09QVElPTl9OQU1FICAgICAgICJMb29rQWhlYWQiDQogI2RlZmluZSBSRUxB
VElWRVRTX09QVElPTl9OQU1FCSAgICAiUmVsYXRpdmVUUyINCiAjZGVmaW5lIERFQ1JZUFRfT1BU
SU9OX05BTUUJICAgICJEZWNyeXB0U291cmNlIg0KICNkZWZpbmUgREVDT0RFX09QVElPTl9OQU1F
CSAgICAiRGVjb2RlU291cmNlIg0KICNkZWZpbmUgREVDT0RFQVVESU9fT1BUSU9OX05BTUUJICAg
ICJEZWNvZGVBdWRpbyINCiAjZGVmaW5lIERFQ09ERVZJREVPX09QVElPTl9OQU1FCSAgICAiRGVj
b2RlVmlkZW8iDQogI2RlZmluZSBERUNPREVOT05BVl9PUFRJT05fTkFNRQkgICAgIkRlY29kZU5v
bkFWIg0KICNkZWZpbmUgREVDT0RFU1RSRUFNX09QVElPTl9OQU1FICAgICJEZWNvZGVTdHJlYW0i
DQogI2RlZmluZSBERUNPREVTVFJFQU1NT0RFX09QVElPTl9OQU1FCSJEZWNvZGVTdHJlYW1Nb2Rl
Ig0KICNkZWZpbmUgT1VUUFVUU0FNUExFU1BFUlNFQ09ORF9PUFRJT05fTkFNRSAgIk91dHB1dFNh
bXBsZXNQZXJTZWNvbmQiDQogI2RlZmluZSBPVVRQVVRDSEFOTkVMU19PUFRJT05fTkFNRQkgICAg
Ik91dHB1dENoYW5uZWxzIg0KICNkZWZpbmUgT1VUUFVUQklUU1BFUlNBTVBMRV9PUFRJT05fTkFN
RQkgICAgIk91dHB1dEJpdHNQZXJTYW1wbGUiCQ0KICNkZWZpbmUgTUlOT1VUUFVUQklUU1BFUlNB
TVBMRV9PUFRJT05fTkFNRSAgIk1pbk91dHB1dEJpdHNQZXJTYW1wbGUiCQ0KICNkZWZpbmUgTUFY
T1VUUFVUQklUU1BFUlNBTVBMRV9PUFRJT05fTkFNRSAgIk1heE91dHB1dEJpdHNQZXJTYW1wbGUi
CQ0KICNkZWZpbmUgRU5DT0RFX09QVElPTl9OQU1FCSAgICAiRW5jb2RlU291cmNlIg0KICNkZWZp
bmUgRU5DT0RFQVVESU9fT1BUSU9OX05BTUUJICAgICJFbmNvZGVBdWRpb0Zvcm1hdCINCiAjZGVm
aW5lIEVOQ09ERVZJREVPX09QVElPTl9OQU1FCSAgICAiRW5jb2RlVmlkZW9Gb3JtYXQiDQogI2Rl
ZmluZSBFTkNPREVBVURJT1JBVEVfT1BUSU9OX05BTUUgIkVuY29kZUF1ZGlvUmF0ZSINCiAjZGVm
aW5lIEVOQ09ERUFVRElPUkFURVRPTF9PUFRJT05fTkFNRSAiRW5jb2RlQXVkaW9SYXRlVG9sIg0K
ICNkZWZpbmUgRU5DT0RFQVVESU9SQVRFTUFYX09QVElPTl9OQU1FICJFbmNvZGVBdWRpb1JhdGVN
YXgiDQogI2RlZmluZSBFTkNPREVBVURJT1JBVEVDT01QRk1UU19PUFRJT05fTkFNRSAiRW5jb2Rl
QXVkaW9Db21wRm9ybWF0cyINCiAjZGVmaW5lIEVOQ09ERUFVRElPUkFURUlMRUFWRUZNVF9PUFRJ
T05fTkFNRSAiRW5jb2RlQXVkaW9JbGVhdmVGb3JtYXQiDQogI2RlZmluZSBFTkNPREVBVURJT1JB
VEVJTEVBVkVDT01QRk1UU19PUFRJT05fTkFNRSAiRW5jb2RlQXVkaW9JTGVhdmVDb21wRm9ybWF0
cyINCiAjZGVmaW5lIE1VWF9PUFRJT05fTkFNRSAgICJNdXhBdWRpb1ZpZGVvIg0KICNkZWZpbmUg
RU5DT0RFRlJPTVVSTF9PUFRJT05fTkFNRSAgICJFbmNvZGVGcm9tVVJMIg0KICNkZWZpbmUgRU5D
T0RFTEVHQUNZQVBJX09QVElPTl9OQU1FICAgIkVuY29kZUxlZ2FjeUFQSSINCiAjZGVmaW5lIERJ
U0FCTEVQUk9HUkVTU0lWRURPV05MT0FEX09QVElPTl9OQU1FICJEaXNhYmxlUHJvZ3Jlc3NpdmVE
b3dubG9hZCINCisjZGVmaW5lIEZPUkNFTU9PVkZJUlNUX09QVElPTl9OQU1FICJGb3JjZU1vb3ZG
aXJzdCINCiANCiAjZGVmaW5lIEVOQ09ERVZJREVPUkFURV9PUFRJT05fTkFNRSAiRW5jb2RlVmlk
ZW9SYXRlIg0KICNkZWZpbmUgRU5DT0RFVklERU9SQVRFTUFYX09QVElPTl9OQU1FICJFbmNvZGVW
aWRlb1JhdGVNYXgiDQogI2RlZmluZSBFTkNPREVWSURFT0ZSQU1FUkFURU1FVEhPRF9PUFRJT05f
TkFNRSAiRW5jb2RlVmlkZW9GcmFtZVJhdGUiDQogI2RlZmluZSBFTkNPREVWSURFT1dJRFRIX09Q
VElPTl9OQU1FICJFbmNvZGVWaWRlb1dpZHRoIg0KICNkZWZpbmUgRU5DT0RFVklERU9IRUlHSFRf
T1BUSU9OX05BTUUgIkVuY29kZVZpZGVvSGVpZ2h0Ig0KICNkZWZpbmUgRU5DT0RFVklERU9BU1BF
Q1RSQVRJT19PUFRJT05fTkFNRSAiRW5jb2RlVmlkZW9QcmVzZXJ2ZUFzcGVjdFJhdGlvIg0KICNk
ZWZpbmUgRU5DT0RFVklERU9BU1BFQ1RSQVRJT01FVEhPRF9PUFRJT05fTkFNRSAiRW5jb2RlVmlk
ZW9QcmVzZXJ2ZUFzcGVjdFJhdGlvTWV0aG9kIg0KICNkZWZpbmUgQkxPQ0tfT1BUSU9OX05BTUUJ
ICAgICJCbG9ja0ZpbHRlciINCiAjZGVmaW5lIEJMT0NLVklERU9fT1BUSU9OX05BTUUJICAgICJC
bG9ja1ZpZGVvIg0KICNkZWZpbmUgQkxPQ0tBVURJT19PUFRJT05fTkFNRQkgICAgIkJsb2NrQXVk
aW8iDQogI2RlZmluZSBCTE9DS05PTkFWX09QVElPTl9OQU1FCSAgICAiQmxvY2tOb25BViINCiAj
ZGVmaW5lIFBBU1NUSFJPVUdIREVDX09QVElPTl9OQU1FICAiUGFzc1Rocm91Z2hEZWNvZGUiDQog
I2RlZmluZSBNQVhTUEVFRF9PUFRJT05fTkFNRQkgICAgIk1heFNwZWVkIg0KICNkZWZpbmUgUFJP
Q0VTU0hFQURFUlNfT1BUSU9OX05BTUUgICJQcm9jZXNzSGVhZGVyc09ubHkiDQogI2RlZmluZSBT
RVRTUkNQUk9QX09QVElPTl9OQU1FICAgICAgIlNldFNyY1Byb3BlcnRpZXMiDQogI2RlZmluZSBP
UFRJTUlaRURUUkFOU0NPREVfT1BUSU9OX05BTUUgICAgICAiT3B0aW1pemVkVHJhbnNjb2RlIg0K
ICNkZWZpbmUgRklMRVJFQ09HTklUSU9OX09QVElPTl9OQU1FICAiVXNlRmlsZVJlY29nbml0aW9u
Ig0KICNkZWZpbmUgQ09MT1JDT05WRVJUX09QVElPTl9OQU1FCSJDb2xvckNvbnZlcnQiDQogI2Rl
ZmluZSBNQVhOVU1JTUFHRU9VVFBVVEZJTEVTX09QVElPTl9OQU1FCSJNYXhpbXVtTnVtSW1hZ2VP
dXRwdXRGaWxlcyINCiAjZGVmaW5lIERFQ09ERURfVklERU9fUkVTSVpFX1dJRFRIX09QVElPTl9O
QU1FCSJEZWNvZGVkVmlkZW9SZXNpemVXaWR0aCINCiAjZGVmaW5lIERFQ09ERURfVklERU9fUkVT
SVpFX0hFSUdIVF9PUFRJT05fTkFNRQkiRGVjb2RlZFZpZGVvUmVzaXplSGVpZ2h0Ig0KICNkZWZp
bmUgREVDT0RFRF9WSURFT19SRVNJWkVfUFJFU0VSVkVfQVNQRUNUX09QVElPTl9OQU1FICJEZWNv
ZGVkVmlkZW9SZXNpemVQcmVzZXJ2ZUFzcGVjdCINCiAjZGVmaW5lIENPTVBBVElCSUxJVFlfT1BU
SU9OX05BTUUgICAiQ29tcGF0aWJpbGl0eSINCiANCiAvLyBNZXJnZSBzb3J0ZXIgcmVsYXRlZCBv
cHRpb25zDQogI2RlZmluZSBNRVJHRVNPUlRGRl9PUFRJT05fTkFNRSAgICAgICAiTWVyZ2VTb3J0
RmlsZUZvcm1hdCINCiAjZGVmaW5lIE1FUkdFU09SVERFQ19PUFRJT05fTkFNRSAgICAgICJNZXJn
ZVNvcnREZWNvZGUiDQogI2RlZmluZSBNRVJHRVNPUlRFTkNfT1BUSU9OX05BTUUgICAgICAiTWVy
Z2VTb3J0RW5jb2RlIg0KICNkZWZpbmUgTUVSR0VTT1JURkZERVBUSF9PUFRJT05fTkFNRSAgIk1l
cmdlU29ydE1heFF1ZXVlRGVwdGhQb3N0RmlsZUZvcm1hdCINCkBAIC00MTMsNjEgKzQxNCw2MiBA
QA0KIAl7DQogCSAgICA7DQogCX0NCiANCiAJVUlOVDMyIG1fZUlEOw0KIAlVSU5UMzIgbV91bFRp
bWU7DQogICAgIH07DQogDQogcHJpdmF0ZToNCiANCiAgICAgZW51bSBEcml2ZXJPcHRpb25GbGFn
DQogICAgIHsNCiAJTk9fT1BUSU9OICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwLA0KIAlNRU1P
UllfT1BUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMDEsDQogCUhFQURFUl9PUFRJT04gICAgICAg
ICAgID0gMHgwMDAwMDAwMiwNCiAJUEFDS0VUX09QVElPTiAgICAgICAgICAgPSAweDAwMDAwMDA0
LA0KIAlWRVJCT1NFX09QVElPTiAgICAgICAgICA9IDB4MDAwMDAwMDgsDQogCUxFQUtBTkFMWVNJ
U19PUFRJT04gICAgID0gMHgwMDAwMDAxMCwNCiAJTEVBS0RFVEFJTFNfT1BUSU9OICAgICAgPSAw
eDAwMDAwMDIwLA0KIAlNRU1PUllERVRBSUxTX09QVElPTiAgICA9IDB4MDAwMDAwNDAsDQogCUVW
RU5UX09QVElPTiAgICAgICAgICAgID0gMHgwMDAwMDA4MCwNCiAJRFVSQVRJT05fT1BUSU9OICAg
ICAgICAgPSAweDAwMDAwMTAwLA0KIAlCTEFTVEZJTEVfT1BUSU9OICAgICAgICA9IDB4MDAwMDAy
MDAsDQogCVBSRVJPTExfT1BUSU9OICAgICAgICAgID0gMHgwMDAwMDQwMCwNCiAJUkVMQVRJVkVU
U19PUFRJT04gICAgICAgPSAweDAwMDAwODAwLA0KIAlUSU1JTkdfT1BUSU9OICAgICAgICAgICA9
IDB4MDAwMDEwMDAsDQogCVBBU1NTV09GRlBLVFNfT1BUSU9OICAgID0gMHgwMDAwMjAwMCwNCiAJ
UVVJRVRfT1BUSU9OICAgICAgICAgICAgPSAweDAwMDA0MDAwLA0KIAlVVEYxNk9VVFBVVF9PUFRJ
T04gICAgICA9IDB4MDAwMDgwMDAsDQogCVNZTkNIUk9OT1VTX09QVElPTiAgICAgID0gMHgwMDAx
MDAwMCwNCi0JUERPV05MT0FERF9PUFRJT04gICAgICAgPSAweDAwMDIwMDAwDQorCVBET1dOTE9B
RERfT1BUSU9OICAgICAgID0gMHgwMDAyMDAwMCwNCisJRk9SQ0VNT09WRklSU1RfT1BUSU9OICAg
PSAweDAwMDQwMDAwDQogICAgIH07DQogDQogICAgIGNsYXNzIEdldFBhY2tldENhbGxiYWNrIDog
cHVibGljIElIWENhbGxiYWNrDQogICAgIHsNCiAgICAgcHVibGljOg0KIAlHZXRQYWNrZXRDYWxs
YmFjayhGRkRyaXZlciAqcEZGRHJpdmVyID0gTlVMTCwgSUhYRmlsZUZvcm1hdE9iamVjdCAqcEZp
bGVGb3JtYXQgPSBOVUxMLCBVSU5UMTYgdVN0cmVhbSA9IDApOw0KIAl+R2V0UGFja2V0Q2FsbGJh
Y2soKTsNCiANCiAJLyoNCiAJICogIElIWENhbGxiYWNrIG1ldGhvZHMNCiAJICovDQogCVNURE1F
VEhPRChGdW5jKQkJKFRISVMpOw0KIAkgICAgDQogICAgICAgICAvKg0KIAkgKiAgSVVua25vd24g
bWV0aG9kcw0KIAkgKi8NCiAJU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKQkoVEhJU18gUkVGSUlE
IHJpaWQsIHZvaWQqKiBwcHZPYmopOw0KIAlTVERNRVRIT0RfKFVMT05HMzIsQWRkUmVmKQkoVEhJ
Uyk7DQogCVNURE1FVEhPRF8oVUxPTkczMixSZWxlYXNlKQkoVEhJUyk7DQogDQogCS8qDQogCSAq
ICBQdWJsaWMgbWV0aG9kcw0KIAkgKi8NCiAJdm9pZCBDbG9zZSh2b2lkKTsNCiAJdm9pZCBTZXRG
aWxlRm9ybWF0KElIWEZpbGVGb3JtYXRPYmplY3QqIHBGaWxlRm9ybWF0KTsNCiANCiAJSUhYRmls
ZUZvcm1hdE9iamVjdCogICBtX3BGaWxlRm9ybWF0Ow0KIAlDYWxsYmFja0hhbmRsZQkJbV9oQ0I7
DQogDQogICAgIHByaXZhdGU6DQo=
--14dae9cdc0d5b21b3704b05e1fbd--