LyoKICogQ29weXJpZ2h0IDIwMDMgT3ZlIEvldmVuLCBUcmFuc0dhbWluZyBUZWNobm9sb2dpZXMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogc2VlIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2ovMDM5OC9kY29tLmh0bSAqLwovKiBhbmQgdGhlIG9mZmljaWFsIERDT00gc3BlY2lmaWNhdGlvbgogKiAodGhlcmUncyBhIGNvcHkgYXQgaHR0cDovL3d3dy5ncmltZXMuZGVtb24uY28udWsvRENPTS9EQ09NU3BlYy5odG0pICovCgppbXBvcnQgInVua253bi5pZGwiOwoKWwogIHV1aWQoOTlmY2ZlNjAtNTI2MC0xMDFiLWJiY2ItMDBhYTAwMjEzNDdhKSwKICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQpdCmludGVyZmFjZSBPYmplY3RScGNCYXNlVHlwZXMKewogIHR5cGVkZWYgdW5zaWduZWQgaHlwZXIgSUQ7CiAgdHlwZWRlZiBJRCBNSUQ7CiAgdHlwZWRlZiBJRCBPWElEOwogIHR5cGVkZWYgSUQgT0lEOwogIHR5cGVkZWYgSUQgU0VUSUQ7CiAgdHlwZWRlZiBHVUlEIElQSUQ7CiAgdHlwZWRlZiBHVUlEIENJRDsKICB0eXBlZGVmIFJFRkdVSUQgUkVGSVBJRDsKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09NX01JTk9SX1ZFUlNJT05fMSA9IDE7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09NX01JTk9SX1ZFUlNJT05fMiA9IDI7CgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTV9NQUpPUl9WRVJTSU9OID0gNTsKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT01fTUlOT1JfVkVSU0lPTiA9IDM7CgogIHR5cGVkZWYgc3RydWN0IHRhZ0NPTVZFUlNJT04gewogICAgdW5zaWduZWQgc2hvcnQgTWFqb3JWZXJzaW9uOwogICAgdW5zaWduZWQgc2hvcnQgTWlub3JWZXJzaW9uOwogIH0gQ09NVkVSU0lPTjsKCiAgY29uc3QgdW5zaWduZWQgbG9uZyBPUlBDRl9OVUxMID0gMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX0xPQ0FMID0gMTsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX1JFU0VSVkVEMSA9IDI7CiAgY29uc3QgdW5zaWduZWQgbG9uZyBPUlBDRl9SRVNFUlZFRDIgPSA0OwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgT1JQQ0ZfUkVTRVJWRUQzID0gODsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX1JFU0VSVkVENCA9IDE2OwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDX0VYVEVOVCB7CiAgICBHVUlEIGlkOwogICAgdW5zaWduZWQgbG9uZyBzaXplOwogICAgW3NpemVfaXMoKHNpemUrNykmfjcpXSBieXRlIGRhdGFbXTsKICB9IE9SUENfRVhURU5UOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDX0VYVEVOVF9BUlJBWSB7CiAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICB1bnNpZ25lZCBsb25nIHJlc2VydmVkOwogICAgW3NpemVfaXMoKHNpemUrMSkmfjEsKSwgdW5pcXVlXSBPUlBDX0VYVEVOVCAqKmV4dGVudDsKICB9IE9SUENfRVhURU5UX0FSUkFZOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDVEhJUyB7CiAgICBDT01WRVJTSU9OIHZlcnNpb247CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDE7CiAgICBDSUQgY2lkOwogICAgW3VuaXF1ZV0gT1JQQ19FWFRFTlRfQVJSQVkgKmV4dGVuc2lvbnM7CiAgfSBPUlBDVEhJUzsKCiAgdHlwZWRlZiBzdHJ1Y3QgdGFnT1JQQ1RIQVQgewogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgIFt1bmlxdWVdIE9SUENfRVhURU5UX0FSUkFZICpleHRlbnNpb25zOwogIH0gT1JQQ1RIQVQ7CgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQURHX0lQX1VEUCA9IDB4MDg7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fSVBfVENQID0gMHgwNzsKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOQ0FER19JUFggPSAweDBFOwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX1NQWCA9IDB4MEM7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fTkJfTkIgPSAweDEyOwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX05CX0lQWCA9IDB4MEQ7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fRE5FVF9OU1AgPSAweDA0OwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX0hUVFAgPSAweDFGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTVFJJTkdCSU5ESU5HIHsKICAgIHVuc2lnbmVkIHNob3J0IHdUb3dlcklkOwogICAgW3N0cmluZ10gV0NIQVIgYU5ldHdvcmtBZGRyW107CiAgfSBTVFJJTkdCSU5ESU5HOwoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT01fQ19BVVRIWl9OT05FID0gMHhmZmZmOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTRUNVUklUWUJJTkRJTkcgewogICAgdW5zaWduZWQgc2hvcnQgd0F1dGhuU3ZjOwogICAgdW5zaWduZWQgc2hvcnQgd0F1dGh6U3ZjOwogICAgW3N0cmluZ10gV0NIQVIgYVByaW5jTmFtZVtdOwogIH0gU0VDVVJJVFlCSU5ESU5HOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdEVUFMU1RSSU5HQVJSQVkgewogICAgdW5zaWduZWQgc2hvcnQgd051bUVudHJpZXM7CiAgICB1bnNpZ25lZCBzaG9ydCB3U2VjdXJpdHlPZmZzZXQ7CiAgICBbc2l6ZV9pcyh3TnVtRW50cmllcyldIHVuc2lnbmVkIHNob3J0IGFTdHJpbmdBcnJheVtdOwogIH0gRFVBTFNUUklOR0FSUkFZOwoKICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9TSUdOQVRVUkUgPSAweDU3NGY0NTRkOyAvKiAiTUVPVyIgKi8KICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9TVEFOREFSRCA9IDB4MTsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9IQU5ETEVSID0gMHgyOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgT0JKUkVGX0NVU1RPTSA9IDB4NDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfT1hSRVMxID0gMHgxOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzIgPSAweDIwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzMgPSAweDQwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzQgPSAweDgwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzUgPSAweDEwMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfT1hSRVM2ID0gMHgyMDA7CiAgY29uc3QgdW5zaWduZWQgbG9uZyBTT1JGX09YUkVTNyA9IDB4NDAwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzggPSAweDgwMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfTlVMTCA9IDB4MDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfTk9QSU5HID0gMHgxMDAwOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTVERPQkpSRUYgewogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgIHVuc2lnbmVkIGxvbmcgY1B1YmxpY1JlZnM7CiAgICBPWElEIG94aWQ7CiAgICBPSUQgb2lkOwogICAgSVBJRCBpcGlkOwogIH0gU1RET0JKUkVGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPQkpSRUYgewogICAgdW5zaWduZWQgbG9uZyBzaWduYXR1cmU7CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgR1VJRCBpaWQ7CiAgICBbc3dpdGNoX2lzKGZsYWdzKV0gdW5pb24gewogICAgW2Nhc2UoT0JKUkVGX1NUQU5EQVJEKV0gc3RydWN0IE9SX1NUQU5EQVJEIHsKICAgICAgICBTVERPQkpSRUYgc3RkOwogICAgICAgIERVQUxTVFJJTkdBUlJBWSBzYVJlc0FkZHI7CiAgICAgIH0gdV9zdGFuZGFyZDsKICAgIFtjYXNlKE9CSlJFRl9IQU5ETEVSKV0gc3RydWN0IE9SX0hBTkRMRVIgewogICAgICAgIFNURE9CSlJFRiBzdGQ7CiAgICAgICAgQ0xTSUQgY2xzaWQ7CiAgICAgICAgRFVBTFNUUklOR0FSUkFZIHNhUmVzQWRkcjsKICAgICAgfSB1X2hhbmRsZXI7CiAgICBbY2FzZShPQkpSRUZfQ1VTVE9NKV0gc3RydWN0IE9SX0NVU1RPTSB7CiAgICAgICAgQ0xTSUQgY2xzaWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjYkV4dGVuc2lvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAgICAgW3NpemVfaXMoc2l6ZSksIHJlZl0gYnl0ZSAqcERhdGE7CiAgICAgIH0gdV9jdXN0b207CiAgICB9IHVfb2JqcmVmOwogIH0gT0JKUkVGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdNSW50ZXJmYWNlUG9pbnRlciB7CiAgICBVTE9ORyB1bENudERhdGE7CiAgICBbc2l6ZV9pcyh1bENudERhdGEpXSBCWVRFIGFiRGF0YVtdOwogIH0gTUludGVyZmFjZVBvaW50ZXI7CgogIHR5cGVkZWYgW3VuaXF1ZV0gTUludGVyZmFjZVBvaW50ZXIgKlBNSW50ZXJmYWNlUG9pbnRlcjsKCn0gLyogaW50ZXJmYWNlIE9iamVjdFJwY0Jhc2VUeXBlcyAqLwoKWwogIG9iamVjdCwKICB1dWlkKDAwMDAwMTMxLTAwMDAtMDAwMC1DMDAwLTAwMDAwMDAwMDA0NikKXQppbnRlcmZhY2UgSVJlbVVua25vd24gOiBJVW5rbm93bgp7CiAgdHlwZWRlZiBbdW5pcXVlXSBJUmVtVW5rbm93biAqTFBSRU1VTktOT1dOOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdSRU1RSVJFU1VMVCB7CiAgICBIUkVTVUxUIGhSZXN1bHQ7CiAgICBTVERPQkpSRUYgc3RkOwogIH0gUkVNUUlSRVNVTFQ7CgogIHR5cGVkZWYgc3RydWN0IHRhZ1JFTUlOVEVSRkFDRVJFRiB7CiAgICBJUElEIGlwaWQ7CiAgICB1bnNpZ25lZCBsb25nIGNQdWJsaWNSZWZzOwogICAgdW5zaWduZWQgbG9uZyBjUHJpdmF0ZVJlZnM7CiAgfSBSRU1JTlRFUkZBQ0VSRUY7IAoKICBIUkVTVUxUIFJlbVF1ZXJ5SW50ZXJmYWNlKAogICAgW2luXSBSRUZJUElEIHJpcGlkLAogICAgW2luXSB1bnNpZ25lZCBsb25nIGNSZWZzLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSWlkcywKICAgIFtpbiwgc2l6ZV9pcyhjSWlkcyldIElJRCAqaWlkcywKICAgIFtvdXQsIHNpemVfaXMoLGNJaWRzKV0gUkVNUUlSRVNVTFQgKipwcFFJUmVzdWx0cyk7CgogIEhSRVNVTFQgUmVtQWRkUmVmKAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSW50ZXJmYWNlUmVmcywKICAgIFtpbiwgc2l6ZV9pcyhjSW50ZXJmYWNlUmVmcyldIFJFTUlOVEVSRkFDRVJFRiogSW50ZXJmYWNlUmVmcywKICAgIFtvdXQsIHNpemVfaXMoY0ludGVyZmFjZVJlZnMpXSBIUkVTVUxUICpwUmVzdWx0cyk7CgogIEhSRVNVTFQgUmVtUmVsZWFzZSgKICAgIFtpbl0gdW5zaWduZWQgc2hvcnQgY0ludGVyZmFjZVJlZnMsCiAgICBbaW4sIHNpemVfaXMoY0ludGVyZmFjZVJlZnMpXSBSRU1JTlRFUkZBQ0VSRUYqIEludGVyZmFjZVJlZnMpOwp9CgpbCiAgb2JqZWN0LAogIHV1aWQoMDAwMDAxNDItMDAwMC0wMDAwLUMwMDAtMDAwMDAwMDAwMDQ2KQpdCmludGVyZmFjZSBJUmVtVW5rbm93bjIgOiBJUmVtVW5rbm93bgp7CiAgdHlwZWRlZiBbdW5pcXVlXSBJUmVtVW5rbm93bjIgKkxQUkVNVU5LTk9XTjI7CgogIEhSRVNVTFQgUmVtUXVlcnlJbnRlcmZhY2UyKAogICAgW2luXSBSRUZJUElEIHJpcGlkLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSWlkcywKICAgIFtpbiwgc2l6ZV9pcyhjSWlkcyldIElJRCAqaWlkcywKICAgIFtvdXQsIHNpemVfaXMoY0lpZHMpXSBIUkVTVUxUICpwaHIsCiAgICBbb3V0LCBzaXplX2lzKGNJaWRzKV0gTUludGVyZmFjZVBvaW50ZXIgKipwcE1JRik7Cn0KClsKICB1dWlkKDk5ZmNmZWM0LTUyNjAtMTAxYi1iYmNiLTAwYWEwMDIxMzQ3YSksCiAgcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSkKXQppbnRlcmZhY2UgSU9YSURSZXNvbHZlcgp7CiAgW2lkZW1wb3RlbnRdIGVycm9yX3N0YXR1c190IFJlc29sdmVPeGlkKAogICAgW2luXSBoYW5kbGVfdCBoUnBjLAogICAgW2luXSBPWElEICpwT3hpZCwKICAgIFtpbl0gdW5zaWduZWQgc2hvcnQgY1JlcXVlc3RlZFByb3RzZXFzLAogICAgW2luLCByZWYsIHNpemVfaXMoY1JlcXVlc3RlZFByb3RzZXFzKV0gdW5zaWduZWQgc2hvcnQgYXJSZXF1ZXN0ZWRQcm90c2Vxc1tdLAogICAgW291dCwgcmVmXSBEVUFMU1RSSU5HQVJSQVkgKipwcGRzYU94aWRCaW5kaW5ncywKICAgIFtvdXQsIHJlZl0gSVBJRCAqcGlwaWRSZW1Vbmtub3duLAogICAgW291dCwgcmVmXSBEV09SRCAqcEF1dGhuSGludCk7CgogIFtpZGVtcG90ZW50XSBlcnJvcl9zdGF0dXNfdCBTaW1wbGVQaW5nKAogICAgW2luXSBoYW5kbGVfdCBoUnBjLAogICAgW2luXSBTRVRJRCAqcFNldElkKTsKCiAgW2lkZW1wb3RlbnRdIGVycm9yX3N0YXR1c190IENvbXBsZXhQaW5nKAogICAgW2luXSBoYW5kbGVfdCBoUnBjLAogICAgW2luLCBvdXRdIFNFVElEICpwU2V0SWQsCiAgICBbaW5dIHVuc2lnbmVkIHNob3J0IFNlcXVlbmNlTnVtLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjQWRkVG9TZXQsCiAgICBbaW5dIHVuc2lnbmVkIHNob3J0IGNEZWxGcm9tU2V0LAogICAgW2luLCB1bmlxdWUsIHNpemVfaXMoY0FkZFRvU2V0KV0gT0lEIEFkZFRvU2V0W10sCiAgICBbaW4sIHVuaXF1ZSwgc2l6ZV9pcyhjRGVsRnJvbVNldCldIE9JRCBEZWxGcm9tU2V0W10sCiAgICBbb3V0XSB1bnNpZ25lZCBzaG9ydCAqcFBpbmdCYWNrb2ZmRmFjdG9yKTsKCiAgW2lkZW1wb3RlbnRdIGVycm9yX3N0YXR1c190IFNlcnZlckFsaXZlKAogICAgW2luXSBoYW5kbGVfdCBoUnBjKTsKCiAgW2lkZW1wb3RlbnRdIGVycm9yX3N0YXR1c190IFJlc29sdmVPeGlkMigKICAgIFtpbl0gaGFuZGxlX3QgaFJwYywKICAgIFtpbl0gT1hJRCAqcE94aWQsCiAgICBbaW5dIHVuc2lnbmVkIHNob3J0IGNSZXF1ZXN0ZWRQcm90c2VxcywKICAgIFtpbiwgcmVmLCBzaXplX2lzKGNSZXF1ZXN0ZWRQcm90c2VxcyldIHVuc2lnbmVkIHNob3J0IGFyUmVxdWVzdGVkUHJvdHNlcXNbXSwKICAgIFtvdXQsIHJlZl0gRFVBTFNUUklOR0FSUkFZICoqcHBkc2FPeGlkQmluZGluZ3MsCiAgICBbb3V0LCByZWZdIElQSUQgKnBpcGlkUmVtVW5rbm93biwKICAgIFtvdXQsIHJlZl0gRFdPUkQgKnBBdXRobkhpbnQsCiAgICBbb3V0LCByZWZdIENPTVZFUlNJT04gKnBDb21WZXJzaW9uKTsgCn0KClsKICB1dWlkKDRkOWY0YWI4LTdkMWMtMTFjZi04NjFlLTAwMjBhZjZlN2M1NyksCiAgcG9pbnRlcl9kZWZhdWx0KHVuaXF1ZSkKXQppbnRlcmZhY2UgSVJlbW90ZUFjdGl2YXRpb24KewogIGNvbnN0IHVuc2lnbmVkIGxvbmcgTU9ERV9HRVRfQ0xBU1NfT0JKRUNUID0gMHhmZmZmZmZmZjsKCiAgSFJFU1VMVCBSZW1vdGVBY3RpdmF0aW9uKAogICAgW2luXSBoYW5kbGVfdCBoUnBjLAogICAgW2luXSBPUlBDVEhJUyAqT1JQQ3RoaXMsCiAgICBbb3V0XSBPUlBDVEhBVCAqT1JQQ3RoYXQsCiAgICBbaW5dIEdVSUQgKkNsc2lkLAogICAgW2luLCBzdHJpbmcsIHVuaXF1ZV0gV0NIQVIgKnB3c3pPYmplY3ROYW1lLAogICAgW2luLCB1bmlxdWVdIE1JbnRlcmZhY2VQb2ludGVyICpwT2JqZWN0U3RvcmFnZSwKICAgIFtpbl0gRFdPUkQgQ2xpZW50SW1wTGV2ZWwsCiAgICBbaW5dIERXT1JEIE1vZGUsCiAgICBbaW5dIERXT1JEIEludGVyZmFjZXMsCiAgICBbaW4sIHVuaXF1ZSwgc2l6ZV9pcyhJbnRlcmZhY2VzKV0gSUlEICpwSUlEcywKICAgIFtpbl0gdW5zaWduZWQgc2hvcnQgY1JlcXVlc3RlZFByb3RzZXFzLAogICAgW2luLCBzaXplX2lzKGNSZXF1ZXN0ZWRQcm90c2VxcyldIHVuc2lnbmVkIHNob3J0IFJlcXVlc3RlZFByb3RzZXFzW10sCiAgICBbb3V0XSBPWElEICpwT3hpZCwKICAgIFtvdXRdIERVQUxTVFJJTkdBUlJBWSAqKnBwZHNhT3hpZEJpbmRpbmdzLAogICAgW291dF0gSVBJRCAqcGlwaWRSZW1Vbmtub3duLAogICAgW291dF0gRFdPUkQgKnBBdXRobkhpbnQsCiAgICBbb3V0XSBDT01WRVJTSU9OICpwU2VydmVyVmVyc2lvbiwKICAgIFtvdXRdIEhSRVNVTFQgKnBociwKICAgIFtvdXQsc2l6ZV9pcyhJbnRlcmZhY2VzKV0gTUludGVyZmFjZVBvaW50ZXIgKipwcEludGVyZmFjZURhdGEsCiAgICBbb3V0LHNpemVfaXMoSW50ZXJmYWNlcyldIEhSRVNVTFQgKnBSZXN1bHRzKTsKfQo=