LyoKICogRGlyZWN0M0Qgc3RhdGUgbWFuYWdlbWVudAogKgogKiBDb3B5cmlnaHQgMjAwMiBMaW9uZWwgVWxtZXIKICogQ29weXJpZ2h0IDIwMDItMjAwNSBKYXNvbiBFZG1lYWRlcwogKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJhcGhhZWwgSnVucXVlaXJhCiAqIENvcHlyaWdodCAyMDA0IENocmlzdGlhbiBDb3N0YQogKiBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgU3RpZWJlcgogKiBDb3B5cmlnaHQgMjAwNiBIZW5yaSBWZXJiZWV0CiAqIENvcHlyaWdodCAyMDA2LTIwMDcgU3RlZmFuIET2c2luZ2VyIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiY29uZmlnLmgiCiNpbmNsdWRlIDxzdGRpby5oPgojaWZkZWYgSEFWRV9GTE9BVF9ICiMgaW5jbHVkZSA8ZmxvYXQuaD4KI2VuZGlmCiNpbmNsdWRlICJ3aW5lZDNkX3ByaXZhdGUuaCIKCldJTkVfREVGQVVMVF9ERUJVR19DSEFOTkVMKGQzZCk7CldJTkVfREVDTEFSRV9ERUJVR19DSEFOTkVMKGQzZF9zaGFkZXIpOwoKI2RlZmluZSBHTElORk9fTE9DQVRJT04gKChJV2luZUQzREltcGwgKikoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+d2luZUQzRCkpLT5nbF9pbmZvCgpzdGF0aWMgdm9pZCBzdGF0ZV9ub2dsKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogVXNlZCBmb3Igc3RhdGVzIHdoaWNoIGFyZSBub3QgbWFwcGVkIHRvIGEgZ2wgc3RhdGUgYXMtaXMsIGJ1dCB1c2VkIHNvbWVob3cgZGlmZmVyZW50LAogICAgICogZS5nIGFzIGEgcGFyYW1ldGVyIGZvciBkcmF3aW5nLCBvciB3aGljaCBhcmUgdW5pbXBsZW1lbnRlZCBpbiB3aW5kb3dzIGQzZAogICAgICovCiAgICBpZihTVEFURV9JU19SRU5ERVIoc3RhdGUpKSB7CiAgICAgICAgV0lORUQzRFJFTkRFUlNUQVRFVFlQRSBSZW5kZXJTdGF0ZSA9IHN0YXRlIC0gU1RBVEVfUkVOREVSKDApOwogICAgICAgIFRSQUNFKCIoJXMsJWQpIG5vIGRpcmVjdCBtYXBwaW5nIHRvIGdsXG4iLCBkZWJ1Z19kM2RyZW5kZXJzdGF0ZShSZW5kZXJTdGF0ZSksIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1JlbmRlclN0YXRlXSk7CiAgICB9IGVsc2UgewogICAgICAgIC8qIFNob3VsZG4ndCBoYXZlIGFuIHVua25vd24gdHlwZSBoZXJlICovCiAgICAgICAgRklYTUUoIiVkIG5vIGRpcmVjdCBtYXBwaW5nIHRvIGdsIG9mIHN0YXRlIHdpdGggdW5rbm93biB0eXBlXG4iLCBzdGF0ZSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3VuZGVmaW5lZChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qIFByaW50IGEgV0FSTiwgdGhpcyBhbGxvd3MgdGhlIHN0YXRlYmxvY2sgY29kZSB0byBsb29wIG92ZXIgYWxsIHN0YXRlcyB0byBnZW5lcmF0ZSBhIGRpc3BsYXkKICAgICAqIGxpc3Qgd2l0aG91dCBjYXVzaW5nIGNvbmZ1c2luZyB0ZXJtaW5hbCBvdXRwdXQuIERlbGliZXJhdGVseSBubyBzcGVjaWFsIGRlYnVnIG5hbWUgaGVyZQogICAgICogYmVjYXVzZSBpdHMgdW5kZWZpbmVkLgogICAgICovCiAgICBXQVJOKCJ1bmRlZmluZWQgc3RhdGUgJWRcbiIsIHN0YXRlKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfZmlsbG1vZGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBXSU5FRDNERklMTE1PREUgVmFsdWUgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRklMTE1PREVdOwoKICAgIHN3aXRjaChWYWx1ZSkgewogICAgICAgIGNhc2UgV0lORUQzREZJTExfUE9JTlQ6CiAgICAgICAgICAgIGdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1BPSU5UKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1BPSU5UKSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RGSUxMX1dJUkVGUkFNRToKICAgICAgICAgICAgZ2xQb2x5Z29uTW9kZShHTF9GUk9OVF9BTkRfQkFDSywgR0xfTElORSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvbHlnb25Nb2RlKEdMX0ZST05UX0FORF9CQUNLLCBHTF9MSU5FKSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RGSUxMX1NPTElEOgogICAgICAgICAgICBnbFBvbHlnb25Nb2RlKEdMX0ZST05UX0FORF9CQUNLLCBHTF9GSUxMKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0ZJTEwpIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIEZJWE1FKCJVbnJlY29nbml6ZWQgV0lORUQzRFJTX0ZJTExNT0RFIHZhbHVlICVkXG4iLCBWYWx1ZSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2xpZ2h0aW5nKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgQk9PTCB0cmFuc2Zvcm1lZDsKCiAgICAvKiBMaWdodGluZyBpcyBub3QgZW5hYmxlZCBpZiB0cmFuc2Zvcm1lZCB2ZXJ0aWNlcyBhcmUgZHJhd24KICAgICAqIGJ1dCBsaWdodGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0cmVhbSBzb3VyY2VzLCBzbyBpdCBpcyBub3QgZ3JvdXBlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICAgICAqIFRoaXMgc3RhdGUgcmVhZHMgdGhlIGRlY29kZWQgdmVydGV4IGRlY2wsIHNvIGlmIGl0IGlzIGRpcnR5IGRvbid0IGRvIGFueXRoaW5nLiBUaGUKICAgICAqIHZlcnRleCBkZWNsYXJhdGlvbiBhcHBwbHlpbmcgZnVuY3Rpb24gY2FsbHMgdGhpcyBmdW5jdGlvbiBmb3IgdXBkYXRpbmcKICAgICAqLwoKICAgIGlmKGlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WREVDTCkpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtZWQgPSAoKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0cmlkZWRfc3RyZWFtcy51LnMucG9zaXRpb24ubHBEYXRhICE9IE5VTEwgfHwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zdHJpZGVkX3N0cmVhbXMudS5zLnBvc2l0aW9uLlZCTyAhPSAwKSAmJgogICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0cmlkZWRfc3RyZWFtcy51LnMucG9zaXRpb25fdHJhbnNmb3JtZWQpID8gVFJVRSA6IEZBTFNFOwoKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTElHSFRJTkddICYmICF0cmFuc2Zvcm1lZCkgewogICAgICAgIGdsRW5hYmxlKEdMX0xJR0hUSU5HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfTElHSFRJTkciKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0xJR0hUSU5HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0xJR0hUSU5HIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3plbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBObyB6IHRlc3Qgd2l0aG91dCBkZXB0aCBzdGVuY2lsIGJ1ZmZlcnMgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0ZW5jaWxCdWZmZXJUYXJnZXQgPT0gTlVMTCkgewogICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsgLyogVGhpcyBhbHNvIGRpc2FibGVzIHogd3JpdGluZyBpbiBnbCAqLwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfREVQVEhfVEVTVCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzd2l0Y2ggKChXSU5FRDNEWkJVRkZFUlRZUEUpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19aRU5BQkxFXSkgewogICAgICAgIGNhc2UgV0lORUQzRFpCX0ZBTFNFOgogICAgICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfREVQVEhfVEVTVCIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RaQl9UUlVFOgogICAgICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlIEdMX0RFUFRIX1RFU1QiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEWkJfVVNFVzoKICAgICAgICAgICAgZ2xFbmFibGUoR0xfREVQVEhfVEVTVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9ERVBUSF9URVNUIik7CiAgICAgICAgICAgIEZJWE1FKCJXIGJ1ZmZlciBpcyBub3Qgd2VsbCBoYW5kbGVkXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBEM0RaQlVGRkVSVFlQRSB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pFTkFCTEVdKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfY3VsbG1vZGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUT0RPOiBQdXQgdGhpcyBpbnRvIHRoZSBvZmZzY3JlZW4gLyBvbnNjcmVlbiByZW5kZXJpbmcgYmxvY2sgZHVlIHRvIGRldmljZS0+cmVuZGVyX29mZnNjcmVlbiAqLwoKICAgIC8qIElmIHdlIGFyZSBjdWxsaW5nICJiYWNrIGZhY2VzIHdpdGggY2xvY2t3aXNlIHZlcnRpY2VzIiB0aGVuCiAgICAgICBzZXQgZnJvbnQgZmFjZXMgdG8gYmUgY291bnRlciBjbG9ja3dpc2UgYW5kIGVuYWJsZSBjdWxsaW5nCiAgICAgICBvZiBiYWNrIGZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgc3dpdGNoICgoV0lORUQzRENVTEwpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DVUxMTU9ERV0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RDVUxMX05PTkU6CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0NVTExfRkFDRSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RDVUxMX0NXOgogICAgICAgICAgICBnbEVuYWJsZShHTF9DVUxMX0ZBQ0UpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfQ1VMTF9GQUNFIik7CiAgICAgICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgICAgICBnbEZyb250RmFjZShHTF9DVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ1ciKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdsRnJvbnRGYWNlKEdMX0NDVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ0NXIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ2xDdWxsRmFjZShHTF9CQUNLKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQ1VMTF9DQ1c6CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9DVUxMX0ZBQ0UiKTsKICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICAgICAgICAgIGdsRnJvbnRGYWNlKEdMX0NDVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ0NXIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBnbEZyb250RmFjZShHTF9DVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ1ciKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBnbEN1bGxGYWNlKEdMX0JBQ0spOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBGSVhNRSgiVW5yZWNvZ25pemVkL1VuaGFuZGxlZCBXSU5FRDNEQ1VMTCB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NVTExNT0RFXSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3NoYWRlbW9kZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHN3aXRjaCAoKFdJTkVEM0RTSEFERU1PREUpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TSEFERU1PREVdKSB7CiAgICAgICAgY2FzZSBXSU5FRDNEU0hBREVfRkxBVDoKICAgICAgICAgICAgZ2xTaGFkZU1vZGVsKEdMX0ZMQVQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTaGFkZU1vZGVsKEdMX0ZMQVQpIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzRFNIQURFX0dPVVJBVUQ6CiAgICAgICAgICAgIGdsU2hhZGVNb2RlbChHTF9TTU9PVEgpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTaGFkZU1vZGVsKEdMX1NNT09USCkiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEU0hBREVfUEhPTkc6CiAgICAgICAgICAgIEZJWE1FKCJXSU5FRDNEU0hBREVfUEhPTkcgaXNuJ3Qgc3VwcG9ydGVkXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZC9VbmhhbmRsZWQgV0lORUQzRFNIQURFTU9ERSB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NIQURFTU9ERV0pOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9kaXRoZXJlbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RJVEhFUkVOQUJMRV0pIHsKICAgICAgICBnbEVuYWJsZShHTF9ESVRIRVIpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9ESVRIRVIiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0RJVEhFUik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZSBHTF9ESVRIRVIiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfendyaXRlbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUT0RPOiBUZXN0IGlmIGluIGQzZCB6IHdyaXRpbmcgaXMgZW5hYmxlZCBldmVuIGlmIFpFTkFCTEUgaXMgb2ZmLiBJZiB5ZXMsCiAgICAgKiB0aGlzIGhhcyB0byBiZSBtZXJnZWQgd2l0aCBaRU5BQkxFIGFuZCBaRlVOQwogICAgICovCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pXUklURUVOQUJMRV0pIHsKICAgICAgICBnbERlcHRoTWFzaygxKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEZXB0aE1hc2soMSkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEZXB0aE1hc2soMCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGVwdGhNYXNrKDApIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3pmdW5jKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaW50IGdsUGFybSA9IENvbXBhcmVGdW5jKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19aRlVOQ10pOwoKICAgIGlmKGdsUGFybSkgewogICAgICAgIGdsRGVwdGhGdW5jKGdsUGFybSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGVwdGhGdW5jIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2FtYmllbnQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBmbG9hdCBjb2xbNF07CiAgICBEM0RDT0xPUlRPR0xGTE9BVDQoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FNQklFTlRdLCBjb2wpOwoKICAgIFRSQUNFKCJTZXR0aW5nIGFtYmllbnQgdG8gKCVmLCVmLCVmLCVmKVxuIiwgY29sWzBdLCBjb2xbMV0sIGNvbFsyXSwgY29sWzNdKTsKICAgIGdsTGlnaHRNb2RlbGZ2KEdMX0xJR0hUX01PREVMX0FNQklFTlQsIGNvbCk7CiAgICBjaGVja0dMY2FsbCgiZ2xMaWdodE1vZGVsIGZvciBNT0RFTF9BTUJJRU5UIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JsZW5kKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaW50IHNyY0JsZW5kID0gR0xfWkVSTzsKICAgIGludCBkc3RCbGVuZCA9IEdMX1pFUk87CgogICAgLyogR0xfTElORV9TTU9PVEggbmVlZHMgR0xfQkxFTkQgdG8gd29yaywgYWNjb3JkaW5nIHRvIHRoZSByZWQgYm9vaywgYW5kIHNwZWNpYWwgYmxlbmRpbmcgcGFyYW1zICovCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEVdICAgICAgfHwKICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRURHRUFOVElBTElBU10gICAgICAgICB8fAogICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEVdKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9CTEVORCIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfQkxFTkQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfQkxFTkQiKTsKICAgICAgICAvKiBOb3RoaW5nIG1vcmUgdG8gZG8gLSBnZXQgb3V0ICovCiAgICAgICAgcmV0dXJuOwogICAgfTsKCiAgICBzd2l0Y2ggKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUkNCTEVORF0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9aRVJPICAgICAgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX1pFUk87ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9PTkUgICAgICAgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX09ORTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX1NSQ0NPTE9SICAgICAgICAgICA6IHNyY0JsZW5kID0gR0xfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WU1JDQ09MT1IgICAgICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEEgICAgICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9JTlZTUkNBTFBIQSAgICAgICAgOiBzcmNCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9ERVNUQUxQSEEgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkRFU1RBTFBIQSAgICAgICA6IHNyY0JsZW5kID0gR0xfT05FX01JTlVTX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0RFU1RDT0xPUiAgICAgICAgICA6IHNyY0JsZW5kID0gR0xfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WREVTVENPTE9SICAgICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEFTQVQgICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU7ICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USFNSQ0FMUEhBICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEE7CiAgICAgICAgICAgIGRzdEJsZW5kID0gR0xfU1JDX0FMUEhBOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USElOVlNSQ0FMUEhBICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOwogICAgICAgICAgICBkc3RCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9CTEVOREZBQ1RPUiAgICAgICAgOiBzcmNCbGVuZCA9IEdMX0NPTlNUQU5UX0NPTE9SOyAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkJMRU5ERkFDVE9SICAgICA6IHNyY0JsZW5kID0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBzcmMgYmxlbmQgdmFsdWUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUkNCTEVORF0pOwogICAgfQoKICAgIHN3aXRjaCAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RFU1RCTEVORF0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9aRVJPICAgICAgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX1pFUk87ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9PTkUgICAgICAgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX09ORTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX1NSQ0NPTE9SICAgICAgICAgICA6IGRzdEJsZW5kID0gR0xfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WU1JDQ09MT1IgICAgICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEEgICAgICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9JTlZTUkNBTFBIQSAgICAgICAgOiBkc3RCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9ERVNUQUxQSEEgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkRFU1RBTFBIQSAgICAgICA6IGRzdEJsZW5kID0gR0xfT05FX01JTlVTX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0RFU1RDT0xPUiAgICAgICAgICA6IGRzdEJsZW5kID0gR0xfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WREVTVENPTE9SICAgICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEFTQVQgICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU7ICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USFNSQ0FMUEhBICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEE7CiAgICAgICAgICAgIHNyY0JsZW5kID0gR0xfU1JDX0FMUEhBOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USElOVlNSQ0FMUEhBICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOwogICAgICAgICAgICBzcmNCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9CTEVOREZBQ1RPUiAgICAgICAgOiBkc3RCbGVuZCA9IEdMX0NPTlNUQU5UX0NPTE9SOyAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkJMRU5ERkFDVE9SICAgICA6IGRzdEJsZW5kID0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBkc3QgYmxlbmQgdmFsdWUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ERVNUQkxFTkRdKTsKICAgIH0KCiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRURHRUFOVElBTElBU10gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEVdKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfTElORV9TTU9PVEgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9MSU5FX1NNT09USCkiKTsKICAgICAgICBpZihzcmNCbGVuZCAhPSBHTF9TUkNfQUxQSEEpIHsKICAgICAgICAgICAgRklYTUUoIldJTkVEM0RSU19FREdFQU5USUFMSUFTIGVuYWJsZWQsIGJ1dCBpbmNvbXBhdGlibGUgc3JjIGJsZW5kaW5nIHBhcmFtIC0gd2hhdCB0byBkbz9cbiIpOwogICAgICAgICAgICBzcmNCbGVuZCA9IEdMX1NSQ19BTFBIQTsKICAgICAgICB9CiAgICAgICAgaWYoZHN0QmxlbmQgIT0gR0xfT05FX01JTlVTX1NSQ19BTFBIQSkgewogICAgICAgICAgICBGSVhNRSgiV0lORUQzRFJTX0VER0VBTlRJQUxJQVMgZW5hYmxlZCwgYnV0IGluY29tcGF0aWJsZSBkc3QgYmxlbmRpbmcgcGFyYW0gLSB3aGF0IHRvIGRvP1xuIik7CiAgICAgICAgICAgIGRzdEJsZW5kID0gR0xfT05FX01JTlVTX1NSQ19BTFBIQTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9MSU5FX1NNT09USCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9MSU5FX1NNT09USCkiKTsKICAgIH0KCiAgICBUUkFDRSgiZ2xCbGVuZEZ1bmMgc3JjPSV4LCBkc3Q9JXhcbiIsIHNyY0JsZW5kLCBkc3RCbGVuZCk7CiAgICBnbEJsZW5kRnVuYyhzcmNCbGVuZCwgZHN0QmxlbmQpOwogICAgY2hlY2tHTGNhbGwoImdsQmxlbmRGdW5jIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JsZW5kZmFjdG9yKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgZmxvYXQgY29sWzRdOwoKICAgIFRSQUNFKCJTZXR0aW5nIEJsZW5kRmFjdG9yIHRvICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRGQUNUT1JdKTsKICAgIEQzRENPTE9SVE9HTEZMT0FUNChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRGQUNUT1JdLCBjb2wpOwogICAgZ2xCbGVuZENvbG9yIChjb2xbMF0sY29sWzFdLGNvbFsyXSxjb2xbM10pOwogICAgY2hlY2tHTGNhbGwoImdsQmxlbmRDb2xvciIpOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9hbHBoYShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGludCBnbFBhcm0gPSAwOwogICAgZmxvYXQgcmVmOwogICAgQk9PTCBlbmFibGVfY2tleSA9IEZBTFNFOwoKICAgIElXaW5lRDNEU3VyZmFjZUltcGwgKnN1cmY7CgogICAgLyogRmluZCBvdXQgaWYgdGhlIHRleHR1cmUgb24gdGhlIGZpcnN0IHN0YWdlIGhhcyBhIGNrZXkgc2V0CiAgICAgKiBUaGUgYWxwaGEgc3RhdGUgZnVuYyByZWFkcyB0aGUgdGV4dHVyZSBzZXR0aW5ncywgZXZlbiB0aG91Z2ggYWxwaGEgYW5kIHRleHR1cmUgYXJlIG5vdCBncm91cGVkCiAgICAgKiB0b2dldGhlci4gVGhpcyBpcyB0byBhdm9pZCBtYWtpbmcgYSBodWdlIGFscGhhK3RleHR1cmUrdGV4dHVyZSBzdGFnZStja2V5IGJsb2NrIGR1ZSB0byB0aGUgaGFyZGx5CiAgICAgKiB1c2VkIFdJTkVEM0RSU19DT0xPUktFWUVOQUJMRSBzdGF0ZSh3aGljaCBpcyBkM2QgPD0gMyBvbmx5KS4gVGhlIHRleHR1cmUgZnVuY3Rpb24gd2lsbCBjYWxsIGFscGhhCiAgICAgKiBpbiBjYXNlIGl0IGZpbmRzIHNvbWUgdGV4dHVyZStjb2xvcmtleWVuYWJsZSBjb21iaW5hdGlvbiB3aGljaCBuZWVkcyBleHRyYSBjYXJlLgogICAgICovCiAgICBpZihzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSAmJiBzdGF0ZWJsb2NrLT50ZXh0dXJlRGltZW5zaW9uc1swXSA9PSBHTF9URVhUVVJFXzJEKSB7CiAgICAgICAgc3VyZiA9IChJV2luZUQzRFN1cmZhY2VJbXBsICopICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKXN0YXRlYmxvY2stPnRleHR1cmVzWzBdKS0+c3VyZmFjZXNbMF07CgogICAgICAgIGlmKHN1cmYtPkNLZXlGbGFncyAmIEREU0RfQ0tTUkNCTFQpIHsKICAgICAgICAgICAgY29uc3QgUGl4ZWxGb3JtYXREZXNjICpmbXQgPSBnZXRGb3JtYXREZXNjRW50cnkoc3VyZi0+cmVzb3VyY2UuZm9ybWF0KTsKICAgICAgICAgICAgLyogVGhlIHN1cmZhY2UgY29udmVyc2lvbiBkb2VzIG5vdCBkbyBjb2xvciBrZXlpbmcgY29udmVyc2lvbiBmb3Igc3VyZmFjZXMgdGhhdCBoYXZlIGFuIGFscGhhCiAgICAgICAgICAgICAqIGNoYW5uZWwgb24gdGhlaXIgb3duLiBMaWtld2lzZSwgdGhlIGFscGhhIHRlc3Qgc2hvdWxkbid0IGJlIHNldCB1cCBmb3IgY29sb3Iga2V5aW5nIGlmIHRoZQogICAgICAgICAgICAgKiBzdXJmYWNlIGhhcyBhbHBoYSBiaXRzCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZihmbXQtPmFscGhhTWFzayA9PSAweDAwMDAwMDAwKSB7CiAgICAgICAgICAgICAgICBlbmFibGVfY2tleSA9IFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYoZW5hYmxlX2NrZXkgfHwgY29udGV4dC0+bGFzdF93YXNfY2tleSkgewogICAgICAgIFN0YXRlVGFibGVbU1RBVEVfVEVYVFVSRVNUQUdFKDAsIFdJTkVEM0RUU1NfQUxQSEFPUCldLmFwcGx5KFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgIH0KICAgIGNvbnRleHQtPmxhc3Rfd2FzX2NrZXkgPSBlbmFibGVfY2tleTsKCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRV0gfHwKICAgICAgICAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFXSAmJiBlbmFibGVfY2tleSkpIHsKICAgICAgICBnbEVuYWJsZShHTF9BTFBIQV9URVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfQUxQSEFfVEVTVCIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfQUxQSEFfVEVTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZSBHTF9BTFBIQV9URVNUIik7CiAgICAgICAgLyogQWxwaGEgdGVzdCBpcyBkaXNhYmxlZCwgZG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlIHBhcmFtcyAtIGl0IHdpbGwgaGFwcGVuIG9uIHRoZSBuZXh0CiAgICAgICAgICogZW5hYmxlIGNhbGwKICAgICAgICAgKi8KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFXSAmJiBlbmFibGVfY2tleSkgewogICAgICAgIGdsUGFybSA9IEdMX05PVEVRVUFMOwogICAgICAgIHJlZiA9IDAuMDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVmID0gKChmbG9hdCkgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FMUEhBUkVGXSkgLyAyNTUuMGY7CiAgICAgICAgZ2xQYXJtID0gQ29tcGFyZUZ1bmMoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FMUEhBRlVOQ10pOwogICAgfQogICAgaWYoZ2xQYXJtKSB7CiAgICAgICAgZ2xBbHBoYUZ1bmMoZ2xQYXJtLCByZWYpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFscGhhRnVuYyIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9jbGlwcGluZyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIGVuYWJsZSAgPSAweEZGRkZGRkZGOwogICAgRFdPUkQgZGlzYWJsZSA9IDB4MDAwMDAwMDA7CgogICAgaWYgKHVzZV92cyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKSkgewogICAgICAgIC8qIFRoZSBzcGVjIHNheXMgdGhhdCBvcGVuZ2wgY2xpcHBpbmcgcGxhbmVzIGFyZSBkaXNhYmxlZCB3aGVuIHVzaW5nIHNoYWRlcnMuIERpcmVjdDNEIHBsYW5lcyBhcmVuJ3QsCiAgICAgICAgICogc28gdGhhdCBpcyBhbiBpc3N1ZS4gVGhlIE1hY09TIEFUSSBkcml2ZXIga2VlcHMgY2xpcHBpbmcgcGxhbmVzIGFjdGl2YXRlZCB3aXRoIHNoYWRlcnMgaW4gc29tZQogICAgICAgICAqIGNvbnRpdGlvbnMgSSBnb3Qgc2ljayBvZiB0cmFja2luZyBkb3duLiBUaGUgc2hhZGVyIHN0YXRlIGhhbmRsZXIgZGlzYWJsZXMgYWxsIGNsaXAgcGxhbmVzIGJlY2F1c2UKICAgICAgICAgKiBvZiB0aGF0IC0gZG9uJ3QgZG8gYW55dGhpbmcgaGVyZSBhbmQga2VlcCB0aGVtIGRpc2FibGVkCiAgICAgICAgICovCiAgICAgICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRV0pIHsKICAgICAgICAgICAgc3RhdGljIEJPT0wgd2FybmVkID0gRkFMU0U7CiAgICAgICAgICAgIGlmKCF3YXJuZWQpIHsKICAgICAgICAgICAgICAgIEZJWE1FKCJDbGlwcGluZyBub3Qgc3VwcG9ydGVkIHdpdGggdmVydGV4IHNoYWRlcnNcbiIpOwogICAgICAgICAgICAgICAgd2FybmVkID0gVFJVRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyogVE9ETzogS2VlcCB0cmFjayBvZiBwcmV2aW91c2x5IGVuYWJsZWQgY2xpcHBsYW5lcyB0byBhdm9pZCB1bm5lY2Nlc3NhcnkgcmVzZXR0aW5nCiAgICAgKiBvZiBhbHJlYWR5IHNldCB2YWx1ZXMKICAgICAqLwoKICAgIC8qIElmIGVuYWJsaW5nIC8gZGlzYWJsaW5nIGFsbAogICAgICogVE9ETzogSXMgdGhpcyBjb3JyZWN0PyBEb2Vzbid0IEQzRFJTX0NMSVBQSU5HIGRpc2FibGUgY2xpcHBpbmcgb24gdGhlIHZpZXdwb3J0IGZydXN0cnVtPwogICAgICovCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NMSVBQSU5HXSkgewogICAgICAgIGVuYWJsZSAgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0xJUFBMQU5FRU5BQkxFXTsKICAgICAgICBkaXNhYmxlID0gfnN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DTElQUExBTkVFTkFCTEVdOwogICAgfSBlbHNlIHsKICAgICAgICBkaXNhYmxlID0gMHhmZmZmZmZmZjsKICAgICAgICBlbmFibGUgID0gMHgwMDsKICAgIH0KCiAgICBpZiAoZW5hYmxlICYgV0lORUQzRENMSVBQTEFORTApICB7IGdsRW5hYmxlKEdMX0NMSVBfUExBTkUwKTsgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShjbGlwIHBsYW5lIDApIik7IH0KICAgIGlmIChlbmFibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMSkgIHsgZ2xFbmFibGUoR0xfQ0xJUF9QTEFORTEpOyAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKGNsaXAgcGxhbmUgMSkiKTsgfQogICAgaWYgKGVuYWJsZSAmIFdJTkVEM0RDTElQUExBTkUyKSAgeyBnbEVuYWJsZShHTF9DTElQX1BMQU5FMik7ICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoY2xpcCBwbGFuZSAyKSIpOyB9CiAgICBpZiAoZW5hYmxlICYgV0lORUQzRENMSVBQTEFORTMpICB7IGdsRW5hYmxlKEdMX0NMSVBfUExBTkUzKTsgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShjbGlwIHBsYW5lIDMpIik7IH0KICAgIGlmIChlbmFibGUgJiBXSU5FRDNEQ0xJUFBMQU5FNCkgIHsgZ2xFbmFibGUoR0xfQ0xJUF9QTEFORTQpOyAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKGNsaXAgcGxhbmUgNCkiKTsgfQogICAgaWYgKGVuYWJsZSAmIFdJTkVEM0RDTElQUExBTkU1KSAgeyBnbEVuYWJsZShHTF9DTElQX1BMQU5FNSk7ICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoY2xpcCBwbGFuZSA1KSIpOyB9CgogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMCkgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTApOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgMCkiKTsgfQogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMSkgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTEpOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgMSkiKTsgfQogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMikgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTIpOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgMikiKTsgfQogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMykgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTMpOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgMykiKTsgfQogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FNCkgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTQpOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgNCkiKTsgfQogICAgaWYgKGRpc2FibGUgJiBXSU5FRDNEQ0xJUFBMQU5FNSkgeyBnbERpc2FibGUoR0xfQ0xJUF9QTEFORTUpOyBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKGNsaXAgcGxhbmUgNSkiKTsgfQoKICAgIC8qKiB1cGRhdGUgY2xpcHBpbmcgc3RhdHVzICovCiAgICBpZiAoZW5hYmxlKSB7CiAgICAgICAgc3RhdGVibG9jay0+Y2xpcF9zdGF0dXMuQ2xpcFVuaW9uID0gMDsKICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwX3N0YXR1cy5DbGlwSW50ZXJzZWN0aW9uID0gMHhGRkZGRkZGRjsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGVibG9jay0+Y2xpcF9zdGF0dXMuQ2xpcFVuaW9uID0gMDsKICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwX3N0YXR1cy5DbGlwSW50ZXJzZWN0aW9uID0gMDsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfYmxlbmRvcChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGludCBnbFBhcm0gPSBHTF9GVU5DX0FERDsKCiAgICBpZighR0xfU1VQUE9SVChFWFRfQkxFTkRfTUlOTUFYKSkgewogICAgICAgIFdBUk4oIlVuc3VwcG9ydGVkIGluIGxvY2FsIE9wZW5HTCBpbXBsZW1lbnRhdGlvbjogZ2xCbGVuZEVxdWF0aW9uXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3dpdGNoICgoV0lORUQzREJMRU5ET1ApIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19CTEVORE9QXSkgewogICAgICAgIGNhc2UgV0lORUQzREJMRU5ET1BfQUREICAgICAgICAgICAgICA6IGdsUGFybSA9IEdMX0ZVTkNfQUREOyAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRPUF9TVUJUUkFDVCAgICAgICAgIDogZ2xQYXJtID0gR0xfRlVOQ19TVUJUUkFDVDsgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORE9QX1JFVlNVQlRSQUNUICAgICAgOiBnbFBhcm0gPSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q7IGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5ET1BfTUlOICAgICAgICAgICAgICA6IGdsUGFybSA9IEdMX01JTjsgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRPUF9NQVggICAgICAgICAgICAgIDogZ2xQYXJtID0gR0xfTUFYOyAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBGSVhNRSgiVW5yZWNvZ25pemVkL1VuaGFuZGxlZCBEM0RCTEVORE9QIHZhbHVlICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRPUF0pOwogICAgfQoKICAgIFRSQUNFKCJnbEJsZW5kRXF1YXRpb24oJXgpXG4iLCBnbFBhcm0pOwogICAgR0xfRVhUQ0FMTChnbEJsZW5kRXF1YXRpb24oZ2xQYXJtKSk7CiAgICBjaGVja0dMY2FsbCgiZ2xCbGVuZEVxdWF0aW9uIik7Cn0KCnN0YXRpYyB2b2lkCnN0YXRlX3NwZWN1bGFyZW5hYmxlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogT3JpZ2luYWxseSB0aGlzIHVzZWQgZ2xMaWdodE1vZGVsaShHTF9MSUdIVF9NT0RFTF9DT0xPUl9DT05UUk9MLEdMX1NFUEFSQVRFX1NQRUNVTEFSX0NPTE9SKQogICAgICogYW5kIChHTF9MSUdIVF9NT0RFTF9DT0xPUl9DT05UUk9MLEdMX1NJTkdMRV9DT0xPUikgdG8gc3dhcCBiZXR3ZWVuIGVuYWJsZWQvZGlzYWJsZWQKICAgICAqIHNwZWN1bGFyIGNvbG9yLiBUaGlzIGlzIHdyb25nOgogICAgICogU2VwYXJhdGUgc3BlY3VsYXIgY29sb3IgbWVhbnMgdGhlIHNwZWN1bGFyIGNvbG91ciBpcyBtYWludGFpbmVkIHNlcGFyYXRlbHksIHdoZXJlYXMKICAgICAqIHNpbmdsZSBjb2xvciBtZWFucyBpdCBpcyBtZXJnZWQgaW4uIEhvd2V2ZXIgaW4gYm90aCBjYXNlcyB0aGV5IGFyZSBiZWluZyB1c2VkIHRvCiAgICAgKiBzb21lIGV4dGVudC4KICAgICAqIFRvIGRpc2FibGUgc3BlY3VsYXIgY29sb3IsIHNldCBpdCBleHBsaWNpdGx5IHRvIGJsYWNrIGFuZCB0dXJuIG9mZiBHTF9DT0xPUl9TVU1fRVhUCiAgICAgKiBOT1RFOiBJZiBub3Qgc3VwcG9ydGVkIGRvbid0IGdpdmUgRklYTUVzIHRoZSBpbXBhY3QgaXMgcmVhbGx5IG1pbmltYWwgYW5kIHZlcnkgZmV3IHBlb3BsZSBhcmUKICAgICAqIHJ1bm5pbmcgMS40IHlldCEKICAgICAqCiAgICAgKgogICAgICogSWYgcmVnaXN0ZXIgY29tYmluZXJzIGFyZSBlbmFibGVkLCBlbmFibGluZyAvIGRpc2FibGluZyBHTF9DT0xPUl9TVU0gaGFzIG5vIGVmZmVjdC4KICAgICAqIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0dXAgdGhlIEZpbmFsQ29tYmluZXIgcHJvcGVybHkuCiAgICAgKgogICAgICogVGhlIGRlZmF1bHQgc2V0dXAgZm9yIHRoZSBGaW5hbENvbWJpbmVyIGlzOgogICAgICoKICAgICAqIDx2YXJpYWJsZT4gICAgICAgPGlucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hcHBpbmc+ICAgICAgICAgICAgICAgPHVzYWdlPgogICAgICogR0xfVkFSSUFCTEVfQV9OViBHTF9GT0csICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JREVOVElUWV9OViBHTF9BTFBIQQogICAgICogR0xfVkFSSUFCTEVfQl9OViBHTF9TUEFSRTBfUExVU19TRUNPTkRBUllfQ09MT1JfTlYgICBHTF9VTlNJR05FRF9JREVOVElUWV9OViBHTF9SR0IKICAgICAqIEdMX1ZBUklBQkxFX0NfTlYgR0xfRk9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSURFTlRJVFlfTlYgR0xfUkdCCiAgICAgKiBHTF9WQVJJQUJMRV9EX05WIEdMX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lERU5USVRZX05WIEdMX1JHQgogICAgICogR0xfVkFSSUFCTEVfRV9OViBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JREVOVElUWV9OViBHTF9SR0IKICAgICAqIEdMX1ZBUklBQkxFX0ZfTlYgR0xfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSURFTlRJVFlfTlYgR0xfUkdCCiAgICAgKiBHTF9WQVJJQUJMRV9HX05WIEdMX1NQQVJFMF9OViAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lERU5USVRZX05WIEdMX0FMUEhBCiAgICAgKgogICAgICogVGhhdCdzIHByZXR0eSBtdWNoIGZpbmUgYXMgaXQgaXMsIGV4Y2VwdCBmb3IgdmFyaWFibGUgQiwgd2hpY2ggbmVlZHMgdG8gdGFrZQogICAgICogZWl0aGVyIEdMX1NQQVJFMF9QTFVTX1NFQ09OREFSWV9DT0xPUl9OViBvciBHTF9TUEFSRTBfTlYsIGRlcGVuZGluZyBvbgogICAgICogd2hldGhlciBXSU5FRDNEUlNfU1BFQ1VMQVJFTkFCTEUgaXMgZW5hYmxlZCBvciBub3QuCiAgICAgKi8KCiAgICBUUkFDRSgiU2V0dGluZyBzcGVjdWxhciBlbmFibGUgc3RhdGVcbiIpOwogICAgLyogVE9ETzogQWRkIHRvIHRoZSBtYXRlcmlhbCBzZXR0aW5nIGZ1bmN0aW9ucyAqLwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUEVDVUxBUkVOQUJMRV0pIHsKICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1NQRUNVTEFSLCAoZmxvYXQqKSAmc3RhdGVibG9jay0+bWF0ZXJpYWwuU3BlY3VsYXIpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgICAgICBnbEVuYWJsZShHTF9DT0xPUl9TVU1fRVhUKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBUUkFDRSgiU3BlY3VsYXIgY29sb3JzIGNhbm5vdCBiZSBlbmFibGVkIGluIHRoaXMgdmVyc2lvbiBvZiBvcGVuZ2xcbiIpOwogICAgICAgIH0KICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfQ09MT1JfU1VNKSIpOwoKICAgICAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xGaW5hbENvbWJpbmVySW5wdXROVihHTF9WQVJJQUJMRV9CX05WLCBHTF9TUEFSRTBfUExVU19TRUNPTkRBUllfQ09MT1JfTlYsIEdMX1VOU0lHTkVEX0lERU5USVRZX05WLCBHTF9SR0IpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRmluYWxDb21iaW5lcklucHV0TlYoKSIpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZmxvYXQgYmxhY2tbNF0gPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CgogICAgICAgIC8qIGZvciB0aGUgY2FzZSBvZiBlbmFibGVkIGxpZ2h0aW5nOiAqLwogICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfU1BFQ1VMQVIsICZibGFja1swXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwoKICAgICAgICAvKiBmb3IgdGhlIGNhc2Ugb2YgZGlzYWJsZWQgbGlnaHRpbmc6ICovCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoRVhUX1NFQ09OREFSWV9DT0xPUikpIHsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX0NPTE9SX1NVTV9FWFQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFRSQUNFKCJTcGVjdWxhciBjb2xvcnMgY2Fubm90IGJlIGRpc2FibGVkIGluIHRoaXMgdmVyc2lvbiBvZiBvcGVuZ2xcbiIpOwogICAgICAgIH0KICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX0NPTE9SX1NVTSkiKTsKCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsRmluYWxDb21iaW5lcklucHV0TlYoR0xfVkFSSUFCTEVfQl9OViwgR0xfU1BBUkUwX05WLCBHTF9VTlNJR05FRF9JREVOVElUWV9OViwgR0xfUkdCKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZpbmFsQ29tYmluZXJJbnB1dE5WKCkiKTsKICAgICAgICB9CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3RleGZhY3RvcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuc2lnbmVkIGludCBpOwoKICAgIC8qIE5vdGUgdGhlIHRleHR1cmUgY29sb3IgYXBwbGllcyB0byBhbGwgdGV4dHVyZXMgd2hlcmVhcwogICAgICogR0xfVEVYVFVSRV9FTlZfQ09MT1IgYXBwbGllcyB0byBhY3RpdmUgb25seQogICAgICovCiAgICBmbG9hdCBjb2xbNF07CiAgICBEM0RDT0xPUlRPR0xGTE9BVDQoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1RFWFRVUkVGQUNUT1JdLCBjb2wpOwoKICAgIGlmICghR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgLyogQW5kIG5vdyB0aGUgZGVmYXVsdCB0ZXh0dXJlIGNvbG9yIGFzIHdlbGwgKi8KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR0xfTElNSVRTKHRleHR1cmVfc3RhZ2VzKTsgaSsrKSB7CiAgICAgICAgICAgIC8qIE5vdGUgdGhlIFdJTkVEM0RSUyB2YWx1ZSBhcHBsaWVzIHRvIGFsbCB0ZXh0dXJlcywgYnV0IEdMIGhhcyBvbmUKICAgICAgICAgICAgICogcGVyIHRleHR1cmUsIHNvIGFwcGx5IGl0IG5vdyByZWFkeSB0byBiZSB1c2VkIQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIGkpKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpPjApIHsKICAgICAgICAgICAgICAgIEZJWE1FKCJQcm9ncmFtIHVzaW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgdGV4dHVyZXMgd2hpY2ggdGhpcyBvcGVuZ2wgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0XG4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZ2xUZXhFbnZmdihHTF9URVhUVVJFX0VOViwgR0xfVEVYVFVSRV9FTlZfQ09MT1IsICZjb2xbMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhFbnZmdihHTF9URVhUVVJFX0VOViwgR0xfVEVYVFVSRV9FTlZfQ09MT1IsIGNvbG9yKTsiKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIEdMX0VYVENBTEwoZ2xDb21iaW5lclBhcmFtZXRlcmZ2TlYoR0xfQ09OU1RBTlRfQ09MT1IwX05WLCAmY29sWzBdKSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCnJlbmRlcnN0YXRlX3N0ZW5jaWxfdHdvc2lkZWQoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgR0xpbnQgZmFjZSwgR0xpbnQgZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaywgR0xpbnQgc3RlbmNpbEZhaWwsIEdMaW50IGRlcHRoRmFpbCwgR0xpbnQgc3RlbmNpbFBhc3MgKSB7CiNpZiAwIC8qIERvbid0IHVzZSBPcGVuR0wgMi4wIGNhbGxzIGZvciBub3cgKi8KICAgICAgICAgICAgaWYoR0xfRVhUQ0FMTChnbFN0ZW5jaWxGdW5jU2VwYXJhdGUpICYmIEdMX0VYVENBTEwoZ2xTdGVuY2lsT3BTZXBhcmF0ZSkpIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzaykpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSguLi4pIik7CiAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgc3RlbmNpbEZhaWwsIGRlcHRoRmFpbCwgc3RlbmNpbFBhc3MpKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxPcFNlcGFyYXRlKC4uLikiKTsKICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICBpZihHTF9TVVBQT1JUKEVYVF9TVEVOQ0lMX1RXT19TSURFKSkgewogICAgICAgIGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVF9UV09fU0lERV9FWFQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1RfVFdPX1NJREVfRVhUKSIpOwogICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVTdGVuY2lsRmFjZUVYVChmYWNlKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlU3RlbmNpbEZhY2VFWFQoLi4uKSIpOwogICAgICAgIGdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsRnVuYyguLi4pIik7CiAgICAgICAgZ2xTdGVuY2lsT3Aoc3RlbmNpbEZhaWwsIGRlcHRoRmFpbCwgc3RlbmNpbFBhc3MpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxPcCguLi4pIik7CiAgICB9IGVsc2UgaWYoR0xfU1VQUE9SVChBVElfU0VQQVJBVEVfU1RFTkNJTCkpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZUFUSShmYWNlLCBmdW5jLCByZWYsIG1hc2spKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsRnVuY1NlcGFyYXRlQVRJKC4uLikiKTsKICAgICAgICBHTF9FWFRDQUxMKGdsU3RlbmNpbE9wU2VwYXJhdGVBVEkoZmFjZSwgc3RlbmNpbEZhaWwsIGRlcHRoRmFpbCwgc3RlbmNpbFBhc3MpKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsT3BTZXBhcmF0ZUFUSSguLi4pIik7CiAgICB9IGVsc2UgewogICAgICAgIEVSUigiU2VwYXJhdGUgKHR3byBzaWRlZCkgc3RlbmNpbCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBvcGVuZ2wuIENhcHMgd2VyZW4ndCBob25vcmVkP1xuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCnN0YXRlX3N0ZW5jaWwoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBvbmVzaWRlZF9lbmFibGUgPSBGQUxTRTsKICAgIERXT1JEIHR3b3NpZGVkX2VuYWJsZSA9IEZBTFNFOwogICAgR0xpbnQgZnVuYyA9IEdMX0FMV0FZUzsKICAgIEdMaW50IGZ1bmNfY2N3ID0gR0xfQUxXQVlTOwogICAgR0xpbnQgcmVmID0gMDsKICAgIEdMdWludCBtYXNrID0gMDsKICAgIEdMaW50IHN0ZW5jaWxGYWlsID0gR0xfS0VFUDsKICAgIEdMaW50IGRlcHRoRmFpbCA9IEdMX0tFRVA7CiAgICBHTGludCBzdGVuY2lsUGFzcyA9IEdMX0tFRVA7CiAgICBHTGludCBzdGVuY2lsRmFpbF9jY3cgPSBHTF9LRUVQOwogICAgR0xpbnQgZGVwdGhGYWlsX2NjdyA9IEdMX0tFRVA7CiAgICBHTGludCBzdGVuY2lsUGFzc19jY3cgPSBHTF9LRUVQOwoKICAgIC8qIE5vIHN0ZW5jaWwgdGVzdCB3aXRob3V0IGEgc3RlbmNpbCBidWZmZXIgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0ZW5jaWxCdWZmZXJUYXJnZXQgPT0gTlVMTCkgewogICAgICAgIGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfU1RFTkNJTF9URVNUIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxFTkFCTEVdICkKICAgICAgICBvbmVzaWRlZF9lbmFibGUgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRV07CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19UV09TSURFRFNURU5DSUxNT0RFXSApCiAgICAgICAgdHdvc2lkZWRfZW5hYmxlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREVdOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTEZVTkNdICkKICAgICAgICBpZiggISggZnVuYyA9IENvbXBhcmVGdW5jKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMRlVOQ10pICkgKQogICAgICAgICAgICBmdW5jID0gR0xfQUxXQVlTOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0NXX1NURU5DSUxGVU5DXSApCiAgICAgICAgaWYoICEoIGZ1bmNfY2N3ID0gQ29tcGFyZUZ1bmMoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMRlVOQ10pICkgKQogICAgICAgICAgICBmdW5jID0gR0xfQUxXQVlTOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTFJFRl0gKQogICAgICAgIHJlZiA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMUkVGXTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxNQVNLXSApCiAgICAgICAgbWFzayA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMTUFTS107CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMRkFJTF0gKQogICAgICAgIHN0ZW5jaWxGYWlsID0gU3RlbmNpbE9wKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMRkFJTF0pOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTFpGQUlMXSApCiAgICAgICAgZGVwdGhGYWlsID0gU3RlbmNpbE9wKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMWkZBSUxdKTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxQQVNTXSApCiAgICAgICAgc3RlbmNpbFBhc3MgPSBTdGVuY2lsT3Aoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxQQVNTXSk7CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19DQ1dfU1RFTkNJTEZBSUxdICkKICAgICAgICBzdGVuY2lsRmFpbF9jY3cgPSBTdGVuY2lsT3Aoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMRkFJTF0pOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0NXX1NURU5DSUxaRkFJTF0gKQogICAgICAgIGRlcHRoRmFpbF9jY3cgPSBTdGVuY2lsT3Aoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMWkZBSUxdKTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMUEFTU10gKQogICAgICAgIHN0ZW5jaWxQYXNzX2NjdyA9IFN0ZW5jaWxPcChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0NXX1NURU5DSUxQQVNTXSk7CgogICAgVFJBQ0UoIihvbmVzaWRlZCAlZCwgdHdvc2lkZWQgJWQsIHJlZiAleCwgbWFzayAleCwgIgogICAgICAgICAgIkdMX0ZST05UOiBmdW5jOiAleCwgZmFpbCAleCwgemZhaWwgJXgsIHpwYXNzICV4ICIKICAgICAgICAgICJHTF9CQUNLOiBmdW5jOiAleCwgZmFpbCAleCwgemZhaWwgJXgsIHpwYXNzICV4IClcbiIsCiAgICBvbmVzaWRlZF9lbmFibGUsIHR3b3NpZGVkX2VuYWJsZSwgcmVmLCBtYXNrLAogICAgZnVuYywgc3RlbmNpbEZhaWwsIGRlcHRoRmFpbCwgc3RlbmNpbFBhc3MsCiAgICBmdW5jX2Njdywgc3RlbmNpbEZhaWxfY2N3LCBkZXB0aEZhaWxfY2N3LCBzdGVuY2lsUGFzc19jY3cpOwoKICAgIGlmICh0d29zaWRlZF9lbmFibGUpIHsKICAgICAgICByZW5kZXJzdGF0ZV9zdGVuY2lsX3R3b3NpZGVkKHN0YXRlYmxvY2ssIEdMX0ZST05ULCBmdW5jLCByZWYsIG1hc2ssIHN0ZW5jaWxGYWlsLCBkZXB0aEZhaWwsIHN0ZW5jaWxQYXNzKTsKICAgICAgICByZW5kZXJzdGF0ZV9zdGVuY2lsX3R3b3NpZGVkKHN0YXRlYmxvY2ssIEdMX0JBQ0ssIGZ1bmNfY2N3LCByZWYsIG1hc2ssIHN0ZW5jaWxGYWlsX2NjdywgZGVwdGhGYWlsX2Njdywgc3RlbmNpbFBhc3NfY2N3KTsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG9uZXNpZGVkX2VuYWJsZSkgewogICAgICAgICAgICBnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfU1RFTkNJTF9URVNUIik7CiAgICAgICAgICAgIGdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbEZ1bmMoLi4uKSIpOwogICAgICAgICAgICBnbFN0ZW5jaWxPcChzdGVuY2lsRmFpbCwgZGVwdGhGYWlsLCBzdGVuY2lsUGFzcyk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxPcCguLi4pIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfU1RFTkNJTF9URVNUIik7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9zdGVuY2lsd3JpdGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zdGVuY2lsQnVmZmVyVGFyZ2V0KSB7CiAgICAgICAgZ2xTdGVuY2lsTWFzayhzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTFdSSVRFTUFTS10pOwogICAgfSBlbHNlIHsKICAgICAgICBnbFN0ZW5jaWxNYXNrKDApOwogICAgfQogICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbE1hc2siKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfZm9nKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogVE9ETzogUHV0IHRoaXMgaW50byB0aGUgdmVydGV4IHR5cGUgYmxvY2sgb25jZSB0aGF0IGlzIGluIHRoZSBzdGF0ZSB0YWJsZSAqLwogICAgQk9PTCBmb2dlbmFibGUgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HRU5BQkxFXTsKICAgIEJPT0wgaXNfcHMzID0gdXNlX3BzKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UpCiAgICAgICAgICAgICAgICAgICYmICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciktPmJhc2VTaGFkZXIuaGV4X3ZlcnNpb24gPj0gV0lORUQzRFBTX1ZFUlNJT04oMywwKTsKICAgIGZsb2F0IGZvZ3N0YXJ0LCBmb2dlbmQ7CgogICAgdW5pb24gewogICAgICAgIERXT1JEIGQ7CiAgICAgICAgZmxvYXQgZjsKICAgIH0gdG1wdmFsdWU7CgogICAgaWYgKCFmb2dlbmFibGUpIHsKICAgICAgICAvKiBObyBmb2c/IERpc2FibGUgaXQsIGFuZCB3ZSdyZSBkb25lIDotKSAqLwogICAgICAgIGdsRGlzYWJsZShHTF9GT0cpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfRk9HIik7CiAgICAgICAgaWYoIHVzZV9wcyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKQogICAgICAgICAgICAgICAgJiYgKChJV2luZUQzRFBpeGVsU2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnBpeGVsU2hhZGVyKS0+YmFzZVNoYWRlci5oZXhfdmVyc2lvbiA8IFdJTkVEM0RQU19WRVJTSU9OKDMsMCkgKSB7CiAgICAgICAgICAgIC8qIGRpc2FibGUgZm9nIGluIHRoZSBwaXhlbCBzaGFkZXIKICAgICAgICAgICAgICogTk9URTogRm9yIHBpeGVsIHNoYWRlciwgR0xfRk9HX1NUQVJUIGFuZCBHTF9GT0dfRU5EIGRvbid0IGhvbGQgZm9nIHN0YXJ0IHMgYW5kIGVuZCBlIGJ1dAogICAgICAgICAgICAgKiAtMS8oZS1zKSBhbmQgZS8oZS1zKSByZXNwZWN0aXZlbHkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBnbEZvZ2YoR0xfRk9HX1NUQVJULCAwLjBmKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9nZihHTF9GT0dfU1RBUlQsIGZvZ3N0YXJ0Iik7CiAgICAgICAgICAgIGdsRm9nZihHTF9GT0dfRU5ELCAxLjBmKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9nZihHTF9GT0dfRU5ELCBmb2dlbmQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HU1RBUlRdOwogICAgZm9nc3RhcnQgPSB0bXB2YWx1ZS5mOwogICAgdG1wdmFsdWUuZCA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dFTkRdOwogICAgZm9nZW5kID0gdG1wdmFsdWUuZjsKCiAgICAvKiBGb2cgUnVsZXM6CiAgICAgKgogICAgICogV2l0aCBmaXhlZCBmdW5jdGlvbiB2ZXJ0ZXggcHJvY2Vzc2luZywgRGlyZWN0M0Qga25vd3MgMiBkaWZmZXJlbnQgZm9nIGlucHV0IHNvdXJjZXMuCiAgICAgKiBJdCBjYW4gdXNlIHRoZSBaIHZhbHVlIG9mIHRoZSB2ZXJ0ZXgsIG9yIHRoZSBhbHBoYSBjb21wb25lbnQgb2YgdGhlIHNwZWN1bGFyIGNvbG9yLgogICAgICogVGhpcyBkZXBlbmRzIG9uIHRoZSBmb2cgdmVydGV4LCBmb2cgdGFibGUgYW5kIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24uIElmIHRoZSBaIHZhbHVlCiAgICAgKiBpcyB1c2VkLCBmb2dzdGFydCwgZm9nZW5kIGFuZCB0aGUgZXF1YXRpb24gdHlwZSBhcmUgdXNlZCwgb3RoZXJ3aXNlIGxpbmVhciBmb2cgd2l0aAogICAgICogc3RhcnQgPSAyNTUsIGVuZCA9IDAgaXMgdXNlZC4gT2J2aW91c2x5IHRoZSBtc2RuIGlzIG5vdCB2ZXJ5IGNsZWFyIG9uIHRoYXQuCiAgICAgKgogICAgICogRk9HVEFCTEVNT0RFICE9IE5PTkU6CiAgICAgKiAgVGhlIFogdmFsdWUgaXMgdXNlZCwgd2l0aCB0aGUgZXF1YXRpb24gc3BlY2lmaWVkLCBubyBtYXR0ZXIgd2hhdCB2ZXJ0ZXggdHlwZS4KICAgICAqCiAgICAgKiBGT0dUQUJMRU1PREUgPT0gTk9ORSwgRk9HVkVSVEVYTU9ERSAhPSBOT05FLCB1bnRyYW5zZm9ybWVkOgogICAgICogIFBlciB2ZXJ0ZXggZm9nIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBmb2cgZXF1YXRpb24gYW5kIHRoZSBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogRk9HVEFCTEVNT0RFID09IE5PTkUsIEZPR1ZFUlRFWE1PREUgIT0gTk9ORSwgdHJhbnNmb3JtZWQsIE9SCiAgICAgKiBGT0dUQUJMRU1PREUgPT0gTk9ORSwgRk9HVkVSVEVYTU9ERSA9PSBOT05FLCB1bnRyYW5zZm9ybWVkOgogICAgICogIExpbmVhciBmb2cgd2l0aCBzdGFydCA9IDI1NS4wLCBlbmQgPSAwLjAsIGlucHV0IGNvbWVzIGZyb20gdGhlIHNwZWN1bGFyIGNvbG9yCiAgICAgKgogICAgICoKICAgICAqIFJ1bGVzIGZvciB2ZXJ0ZXggZm9nIHdpdGggc2hhZGVyczoKICAgICAqCiAgICAgKiBXaGVuIG1peGluZyBmaXhlZCBmdW5jdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIHByb2dyYW1tYWJsZSBwaXBlbGluZSwgRDNEIGV4cGVjdHMKICAgICAqIHRoZSBmb2cgY29tcHV0YXRpb24gdG8gaGFwcGVuIGR1cmluZyB0cmFuc2Zvcm1hdGlvbiB3aGlsZSBvcGVuR0wgZXhwZWN0cyBpdCB0byBoYXBwZW4KICAgICAqIGR1cmluZyByYXN0ZXJpemF0aW9uLiBBbHNvLCBwcmlvciB0byBwaXhlbCBzaGFkZXIgMy4wIEQzRCBoYW5kbGVzIGZvZyBibGVuZGluZyBhZnRlcgogICAgICogdGhlIHBpeGVsIHNoYWRlciB3aGlsZSBvcGVuR0wgYWx3YXlzIGV4cGVjdHMgdGhlIHBpeGVsIHNoYWRlciB0byBoYW5kbGUgdGhlIGJsZW5kaW5nLgogICAgICogVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBXaW5lRDNEIGRvZXM6CiAgICAgKiAxKSBpbXBsZW1lbnQgYSBsaW5lYXIgZm9nIGVxdWF0aW9uIGFuZCBmb2cgYmxlbmRpbmcgYXQgdGhlIGVuZCBvZiBldmVyeSBwcmUgMy4wIHBpeGVsCiAgICAgKiBzaGFkZXIsCiAgICAgKiBhbmQgMikgZGlzYWJsZXMgdGhlIGZvZyBjb21wdXRhdGlvbiAoaW4gZWl0aGVyIHRoZSBmaXhlZCBmdW5jdGlvbiBvciBwcm9ncmFtbWFibGUKICAgICAqIHJhc3Rlcml6ZXIpIGlmIHVzaW5nIGEgdmVydGV4IHByb2dyYW0uCiAgICAgKgogICAgICoKICAgICAqIElmIGEgZm9ndGFibGVtb2RlIGFuZCBhIGZvZ3ZlcnRleG1vZGUgYXJlIHNwZWNpZmllZCwgdGFibGUgZm9nIGlzIGFwcGxpZWQgKHdpdGggb3IKICAgICAqIHdpdGhvdXQgc2hhZGVycykuCiAgICAgKi8KCiAgICBpZiggaXNfcHMzICkgewogICAgICAgIGlmKCAhdXNlX3ZzKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UpCiAgICAgICAgICAgICAgICAmJiBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSA9PSBXSU5FRDNERk9HX05PTkUgKSB7CiAgICAgICAgICAgIEZJWE1FKCJJbXBsZW1lbnQgdmVydGV4IGZvZyBmb3IgcGl4ZWwgc2hhZGVyID49IDMuMCBhbmQgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmVcbiIpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAodXNlX3ZzKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UpCiAgICAgICAgICAgICYmICgoSVdpbmVEM0RWZXJ0ZXhTaGFkZXJJbXBsICopc3RhdGVibG9jay0+dmVydGV4U2hhZGVyKS0+dXNlc0ZvZykgewogICAgICAgIGlmKCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSAhPSBXSU5FRDNERk9HX05PTkUgKSB7CiAgICAgICAgICAgIGlmKCFpc19wczMpIEZJWE1FKCJJbXBsZW1lbnQgdGFibGUgZm9nIGZvciBmb2dneSB2ZXJ0ZXggc2hhZGVyXG4iKTsKICAgICAgICAgICAgLyogRGlzYWJsZSBmb2cgKi8KICAgICAgICAgICAgZm9nZW5hYmxlID0gRkFMU0U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogU2V0IGZvZyBjb21wdXRhdGlvbiBpbiB0aGUgcmFzdGVyaXplciB0byBwYXNzIHRocm91Z2ggdGhlIHZhbHVlIChqdXN0IGJsZW5kIGl0KSAqLwogICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUikiKTsKICAgICAgICAgICAgZm9nc3RhcnQgPSAxLjA7CiAgICAgICAgICAgIGZvZ2VuZCA9IDAuMDsKICAgICAgICB9CiAgICAgICAgY29udGV4dC0+bGFzdF93YXNfZm9nZ3lfc2hhZGVyID0gVFJVRTsKICAgIH0KICAgIGVsc2UgaWYoIHVzZV9wcyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKSApIHsKICAgICAgICAvKiBOT1RFOiBGb3IgcGl4ZWwgc2hhZGVyLCBHTF9GT0dfU1RBUlQgYW5kIEdMX0ZPR19FTkQgZG9uJ3QgaG9sZCBmb2cgc3RhcnQgcyBhbmQgZW5kIGUgYnV0CiAgICAgICAgICogLTEvKGUtcykgYW5kIGUvKGUtcykgcmVzcGVjdGl2ZWx5IHRvIHNpbXBsaWZ5IGZvZyBjb21wdXRhdGlvbiBpbiB0aGUgc2hhZGVyLgogICAgICAgICAqLwogICAgICAgIFdJTkVEM0RGT0dNT0RFIG1vZGU7CiAgICAgICAgY29udGV4dC0+bGFzdF93YXNfZm9nZ3lfc2hhZGVyID0gRkFMU0U7CgogICAgICAgIC8qIElmIGJvdGggZm9nbW9kZXMgYXJlIHNldCB1c2UgdGhlIHRhYmxlIGZvZyBtb2RlICovCiAgICAgICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1RBQkxFTU9ERV0gPT0gV0lORUQzREZPR19OT05FKQogICAgICAgICAgICBtb2RlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREVdOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbW9kZSA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dUQUJMRU1PREVdOwoKICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDoKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDI6CiAgICAgICAgICAgICAgICBpZighaXNfcHMzKSBGSVhNRSgiSW1wbGVtZW50IG5vbiBsaW5lYXIgZm9nIGZvciBwaXhlbCBzaGFkZXIgPCAzLjBcbiIpOwogICAgICAgICAgICAgICAgLyogRGlzYWJsZSBmb2cgKi8KICAgICAgICAgICAgICAgIGZvZ2VuYWJsZSA9IEZBTFNFOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfTElORUFSOgogICAgICAgICAgICAgICAgZm9nc3RhcnQgPSAtMS4wZi8oZm9nZW5kLWZvZ3N0YXJ0KTsKICAgICAgICAgICAgICAgIGZvZ2VuZCAqPSAtZm9nc3RhcnQ7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19OT05FOgogICAgICAgICAgICAgICAgaWYoIWlzX3BzMykgRklYTUUoIkltcGxlbWVudCBzb2Z0d2FyZSB2ZXJ0ZXggZm9nIGZvciBwaXhlbCBzaGFkZXIgPCAzLjBcbiIpOwogICAgICAgICAgICAgICAgLyogRGlzYWJsZSBmb2cgKi8KICAgICAgICAgICAgICAgIGZvZ2VuYWJsZSA9IEZBTFNFOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IEZJWE1FKCJVbmV4cGVjdGVkIFdJTkVEM0RSU19GT0dWRVJURVhNT0RFICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVkVSVEVYTU9ERV0pOwogICAgICAgIH0KICAgIH0KICAgIC8qIERYIDcgc2RrOiAiSWYgYm90aCByZW5kZXIgc3RhdGVzKHZlcnRleCBhbmQgdGFibGUgZm9nKSBhcmUgc2V0IHRvIHZhbGlkIG1vZGVzLAogICAgICogdGhlIHN5c3RlbSB3aWxsIGFwcGx5IG9ubHkgcGl4ZWwoPXRhYmxlKSBmb2cgZWZmZWN0cy4iCiAgICAgKi8KICAgIGVsc2UgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1RBQkxFTU9ERV0gPT0gV0lORUQzREZPR19OT05FKSB7CiAgICAgICAgZ2xIaW50KEdMX0ZPR19ISU5ULCBHTF9GQVNURVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xIaW50KEdMX0ZPR19ISU5ULCBHTF9GQVNURVNUKSIpOwogICAgICAgIGNvbnRleHQtPmxhc3Rfd2FzX2ZvZ2d5X3NoYWRlciA9IEZBTFNFOwoKICAgICAgICBzd2l0Y2ggKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dWRVJURVhNT0RFXSkgewogICAgICAgICAgICAvKiBJZiBwcm9jZXNzZWQgdmVydGljZXMgYXJlIHVzZWQsIGZhbGwgdGhyb3VnaCB0byB0aGUgTk9ORSBjYXNlICovCiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19FWFA6ICB7CiAgICAgICAgICAgICAgICBpZighY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9FWFApOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUCIpOwogICAgICAgICAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoRVhUX0ZPR19DT09SRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19FWFAyOiB7CiAgICAgICAgICAgICAgICBpZighY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9FWFAyKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9FWFAyIik7CiAgICAgICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSkgewogICAgICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0xJTkVBUjogewogICAgICAgICAgICAgICAgaWYoIWNvbnRleHQtPmxhc3Rfd2FzX3JodykgewogICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfTU9ERSwgR0xfTElORUFSKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9MSU5FQVIiKTsKICAgICAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEVYVF9GT0dfQ09PUkQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQpOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfTk9ORTogewogICAgICAgICAgICAgICAgLyogQm90aCBhcmUgbm9uZT8gQWNjb3JkaW5nIHRvIG1zZG4gdGhlIGFscGhhIGNoYW5uZWwgb2YgdGhlIHNwZWN1bGFyCiAgICAgICAgICAgICAgICAgKiBjb2xvciBjb250YWlucyBhIGZvZyBmYWN0b3IuIFNldCBpdCBpbiBkcmF3U3RyaWRlZFNsb3cuCiAgICAgICAgICAgICAgICAgKiBTYW1lIGhhcHBlbnMgd2l0aCBWZXJ0ZXhmb2cgb24gdHJhbnNmb3JtZWQgdmVydGljZXMKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSkgewogICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GT0dfQ09PUkRJTkFURV9FWFQpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRk9HX0NPT1JESU5BVEVfRVhUKVxuIik7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9MSU5FQVIpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUikiKTsKICAgICAgICAgICAgICAgICAgICBmb2dzdGFydCA9IDB4ZmY7CiAgICAgICAgICAgICAgICAgICAgZm9nZW5kID0gMHgwOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIEdMIGZvZywgaGFuZGxlIHRoaXMgaW4gc29mdHdhcmUgaW4gZHJhd1N0cmlkZWRTbG93ICovCiAgICAgICAgICAgICAgICAgICAgZm9nZW5hYmxlID0gRkFMU0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZWZhdWx0OiBGSVhNRSgiVW5leHBlY3RlZCBXSU5FRDNEUlNfRk9HVkVSVEVYTU9ERSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREVdKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGdsSGludChHTF9GT0dfSElOVCwgR0xfTklDRVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xIaW50KEdMX0ZPR19ISU5ULCBHTF9OSUNFU1QpIik7CiAgICAgICAgY29udGV4dC0+bGFzdF93YXNfZm9nZ3lfc2hhZGVyID0gRkFMU0U7CgogICAgICAgIHN3aXRjaCAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1RBQkxFTU9ERV0pIHsKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDoKICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfTU9ERSwgR0xfRVhQKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUCIpOwogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSkgewogICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19FWFAyOgogICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9FWFAyKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUDIiKTsKICAgICAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoRVhUX0ZPR19DT09SRCkpIHsKICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfTElORUFSOgogICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9MSU5FQVIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfTElORUFSIik7CiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEVYVF9GT0dfQ09PUkQpKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX05PTkU6ICAgLyogV29uJ3QgaGFwcGVuICovCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBGSVhNRSgiVW5leHBlY3RlZCBXSU5FRDNEUlNfRk9HVEFCTEVNT0RFICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSk7CiAgICAgICAgfQogICAgfQoKICAgIGlmKGZvZ2VuYWJsZSkgewogICAgICAgIGdsRW5hYmxlKEdMX0ZPRyk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlIEdMX0ZPRyIpOwoKICAgICAgICBnbEZvZ2Z2KEdMX0ZPR19TVEFSVCwgJmZvZ3N0YXJ0KTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dmKEdMX0ZPR19TVEFSVCwgZm9nc3RhcnQiKTsKICAgICAgICBUUkFDRSgiRm9nIFN0YXJ0ID09ICVmXG4iLCBmb2dzdGFydCk7CgogICAgICAgIGdsRm9nZnYoR0xfRk9HX0VORCwgJmZvZ2VuZCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9nZihHTF9GT0dfRU5ELCBmb2dlbmQiKTsKICAgICAgICBUUkFDRSgiRm9nIEVuZCA9PSAlZlxuIiwgZm9nZW5kKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0ZPRyk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZSBHTF9GT0ciKTsKICAgICAgICBpZiggdXNlX3BzKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UpICkgewogICAgICAgICAgICAvKiBkaXNhYmxlIGZvZyBpbiB0aGUgcGl4ZWwgc2hhZGVyCiAgICAgICAgICAgICAqIE5PVEU6IEZvciBwaXhlbCBzaGFkZXIsIEdMX0ZPR19TVEFSVCBhbmQgR0xfRk9HX0VORCBkb24ndCBob2xkIGZvZyBzdGFydCBzIGFuZCBlbmQgZSBidXQKICAgICAgICAgICAgICogLTEvKGUtcykgYW5kIGUvKGUtcykgcmVzcGVjdGl2ZWx5LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZ2xGb2dmKEdMX0ZPR19TVEFSVCwgMC4wZik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX1NUQVJULCBmb2dzdGFydCIpOwogICAgICAgICAgICBnbEZvZ2YoR0xfRk9HX0VORCwgMS4wZik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX0VORCwgZm9nZW5kIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChHTF9TVVBQT1JUKE5WX0ZPR19ESVNUQU5DRSkpIHsKICAgICAgICBnbEZvZ2koR0xfRk9HX0RJU1RBTkNFX01PREVfTlYsIEdMX0VZRV9QTEFORV9BQlNPTFVURV9OVik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2ZvZ2NvbG9yKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgZmxvYXQgY29sWzRdOwogICAgRDNEQ09MT1JUT0dMRkxPQVQ0KHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dDT0xPUl0sIGNvbCk7CiAgICBnbEZvZ2Z2KEdMX0ZPR19DT0xPUiwgJmNvbFswXSk7CiAgICBjaGVja0dMY2FsbCgiZ2xGb2cgR0xfRk9HX0NPTE9SIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2ZvZ2RlbnNpdHkoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HREVOU0lUWV07CiAgICBnbEZvZ2Z2KEdMX0ZPR19ERU5TSVRZLCAmdG1wdmFsdWUuZik7CiAgICBjaGVja0dMY2FsbCgiZ2xGb2dmKEdMX0ZPR19ERU5TSVRZLCAoZmxvYXQpIFZhbHVlKSIpOwp9CgovKiBUT0RPOiBNZXJnZSB3aXRoIHByaW1pdGl2ZSB0eXBlICsgaW5pdF9tYXRlcmlhbHMoKSEhICovCnN0YXRpYyB2b2lkIHN0YXRlX2NvbG9ybWF0KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgSVdpbmVEM0REZXZpY2VJbXBsICpkZXZpY2UgPSAoSVdpbmVEM0REZXZpY2VJbXBsICopc3RhdGVibG9jay0+d2luZUQzRERldmljZTsKICAgIEdMZW51bSBQYXJtID0gMDsKICAgIFdpbmVEaXJlY3QzRFN0cmlkZWREYXRhICpkaWZmdXNlID0gJmRldmljZS0+c3RyaWRlZF9zdHJlYW1zLnUucy5kaWZmdXNlOwogICAgQk9PTCBpc0RpZmZ1c2VTdXBwbGllZDsKCiAgICAvKiBEZXBlbmRzIG9uIHRoZSBkZWNvZGVkIHZlcnRleCBkZWNsYXJhdGlvbiB0byByZWFkIHRoZSBleGlzdGVuY2Ugb2YgZGlmZnVzZSBkYXRhLgogICAgICogVGhlIHZlcnRleCBkZWNsYXJhdGlvbiB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB0aGUgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmUgaXMgdXNlZC4KICAgICAqLwoKICAgIGlmKGlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WREVDTCkpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaXNEaWZmdXNlU3VwcGxpZWQgPSBkaWZmdXNlLT5scERhdGEgfHwgZGlmZnVzZS0+VkJPOwoKICAgIGlmIChpc0RpZmZ1c2VTdXBwbGllZCAmJiBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JWRVJURVhdKSB7CiAgICAgICAgVFJBQ0UoImRpZmYgJWQsIGFtYiAlZCwgZW1pcyAlZCwgc3BlYyAlZFxuIiwKICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRElGRlVTRU1BVEVSSUFMU09VUkNFXSwKICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQU1CSUVOVE1BVEVSSUFMU09VUkNFXSwKICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRU1JU1NJVkVNQVRFUklBTFNPVVJDRV0sCiAgICAgICAgICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NQRUNVTEFSTUFURVJJQUxTT1VSQ0VdKTsKCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ESUZGVVNFTUFURVJJQUxTT1VSQ0VdID09IFdJTkVEM0RNQ1NfQ09MT1IxKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQU1CSUVOVE1BVEVSSUFMU09VUkNFXSA9PSBXSU5FRDNETUNTX0NPTE9SMSkgewogICAgICAgICAgICAgICAgUGFybSA9IEdMX0FNQklFTlRfQU5EX0RJRkZVU0U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBQYXJtID0gR0xfRElGRlVTRTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FNQklFTlRNQVRFUklBTFNPVVJDRV0gPT0gV0lORUQzRE1DU19DT0xPUjEpIHsKICAgICAgICAgICAgUGFybSA9IEdMX0FNQklFTlQ7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRU1JU1NJVkVNQVRFUklBTFNPVVJDRV0gPT0gV0lORUQzRE1DU19DT0xPUjEpIHsKICAgICAgICAgICAgUGFybSA9IEdMX0VNSVNTSU9OOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NQRUNVTEFSTUFURVJJQUxTT1VSQ0VdID09IFdJTkVEM0RNQ1NfQ09MT1IxKSB7CiAgICAgICAgICAgIFBhcm0gPSBHTF9TUEVDVUxBUjsKICAgICAgICB9CiAgICB9CgogICAgLyogTm90aGluZyBjaGFuZ2VkLCByZXR1cm4uICovCiAgICBpZiAoUGFybSA9PSBjb250ZXh0LT50cmFja2luZ19wYXJtKSByZXR1cm47CgogICAgaWYoIVBhcm0pIHsKICAgICAgICBnbERpc2FibGUoR0xfQ09MT1JfTUFURVJJQUwpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfQ09MT1JfTUFURVJJQUwiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xDb2xvck1hdGVyaWFsKEdMX0ZST05UX0FORF9CQUNLLCBQYXJtKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xDb2xvck1hdGVyaWFsKEdMX0ZST05UX0FORF9CQUNLLCBQYXJtKSIpOwogICAgICAgIGdsRW5hYmxlKEdMX0NPTE9SX01BVEVSSUFMKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfQ09MT1JfTUFURVJJQUwpIik7CiAgICB9CgogICAgLyogQXBwYXJlbnRseSBjYWxscyB0byBnbE1hdGVyaWFsZnYgYXJlIGlnbm9yZWQgZm9yIHByb3BlcnRpZXMgd2UncmUKICAgICAqIHRyYWNraW5nIHdpdGggZ2xDb2xvck1hdGVyaWFsLCBzbyBhcHBseSB0aG9zZSBoZXJlLiAqLwogICAgc3dpdGNoIChjb250ZXh0LT50cmFja2luZ19wYXJtKSB7CiAgICAgICAgY2FzZSBHTF9BTUJJRU5UX0FORF9ESUZGVVNFOgogICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0FNQklFTlQsIChmbG9hdCopJmRldmljZS0+dXBkYXRlU3RhdGVCbG9jay0+bWF0ZXJpYWwuQW1iaWVudCk7CiAgICAgICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfRElGRlVTRSwgKGZsb2F0KikmZGV2aWNlLT51cGRhdGVTdGF0ZUJsb2NrLT5tYXRlcmlhbC5EaWZmdXNlKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBHTF9ESUZGVVNFOgogICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0RJRkZVU0UsIChmbG9hdCopJmRldmljZS0+dXBkYXRlU3RhdGVCbG9jay0+bWF0ZXJpYWwuRGlmZnVzZSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR0xfQU1CSUVOVDoKICAgICAgICAgICAgZ2xNYXRlcmlhbGZ2KEdMX0ZST05UX0FORF9CQUNLLCBHTF9BTUJJRU5ULCAoZmxvYXQqKSZkZXZpY2UtPnVwZGF0ZVN0YXRlQmxvY2stPm1hdGVyaWFsLkFtYmllbnQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xNYXRlcmlhbGZ2Iik7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdMX0VNSVNTSU9OOgogICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0VNSVNTSU9OLCAoZmxvYXQqKSZkZXZpY2UtPnVwZGF0ZVN0YXRlQmxvY2stPm1hdGVyaWFsLkVtaXNzaXZlKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBHTF9TUEVDVUxBUjoKICAgICAgICAgICAgLyogT25seSBjaGFuZ2UgbWF0ZXJpYWwgY29sb3IgaWYgc3BlY3VsYXIgaXMgZW5hYmxlZCwgb3RoZXJ3aXNlIGl0IGlzIHNldCB0byBibGFjayAqLwogICAgICAgICAgICBpZiAoZGV2aWNlLT5zdGF0ZUJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1BFQ1VMQVJFTkFCTEVdKSB7CiAgICAgICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1NQRUNVTEFSLCAoZmxvYXQqKSZkZXZpY2UtPnVwZGF0ZVN0YXRlQmxvY2stPm1hdGVyaWFsLlNwZWN1bGFyKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZsb2F0IGJsYWNrWzRdID0gezAuMGYsIDAuMGYsIDAuMGYsIDAuMGZ9OwogICAgICAgICAgICAgICAgZ2xNYXRlcmlhbGZ2KEdMX0ZST05UX0FORF9CQUNLLCBHTF9TUEVDVUxBUiwgJmJsYWNrWzBdKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICBjb250ZXh0LT50cmFja2luZ19wYXJtID0gUGFybTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfbGluZXBhdHRlcm4oRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgICAgICAgICAgICAgICAgIGQ7CiAgICAgICAgV0lORUQzRExJTkVQQVRURVJOICAgIGxwOwogICAgfSB0bXBwYXR0ZXJuOwogICAgdG1wcGF0dGVybi5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0xJTkVQQVRURVJOXTsKCiAgICBUUkFDRSgiTGluZSBwYXR0ZXJuOiByZXBlYXQgJWQgYml0cyAleFxuIiwgdG1wcGF0dGVybi5scC53UmVwZWF0RmFjdG9yLCB0bXBwYXR0ZXJuLmxwLndMaW5lUGF0dGVybik7CgogICAgaWYgKHRtcHBhdHRlcm4ubHAud1JlcGVhdEZhY3RvcikgewogICAgICAgIGdsTGluZVN0aXBwbGUodG1wcGF0dGVybi5scC53UmVwZWF0RmFjdG9yLCB0bXBwYXR0ZXJuLmxwLndMaW5lUGF0dGVybik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTGluZVN0aXBwbGUocmVwZWF0LCBsaW5lcGF0dGVybikiKTsKICAgICAgICBnbEVuYWJsZShHTF9MSU5FX1NUSVBQTEUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9MSU5FX1NUSVBQTEUpOyIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfTElORV9TVElQUExFKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX0xJTkVfU1RJUFBMRSk7Iik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3piaWFzKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgdW5pb24gewogICAgICAgIERXT1JEIGQ7CiAgICAgICAgZmxvYXQgZjsKICAgIH0gdG1wdmFsdWU7CgogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19aQklBU10pIHsKICAgICAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pCSUFTXTsKICAgICAgICBUUkFDRSgiWkJpYXMgdmFsdWUgJWZcbiIsIHRtcHZhbHVlLmYpOwogICAgICAgIGdsUG9seWdvbk9mZnNldCgwLCAtdG1wdmFsdWUuZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk9mZnNldCgwLCAtVmFsdWUpIik7CiAgICAgICAgZ2xFbmFibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpOyIpOwogICAgICAgIGdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0xJTkUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9MSU5FKTsiKTsKICAgICAgICBnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9QT0lOVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX1BPSU5UKTsiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCk7Iik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0xJTkUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfTElORSk7Iik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1BPTFlHT05fT0ZGU0VUX1BPSU5UKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1BPTFlHT05fT0ZGU0VUX1BPSU5UKTsiKTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkIHN0YXRlX25vcm1hbGl6ZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTk9STUFMSVpFTk9STUFMU10pIHsKICAgICAgICBnbEVuYWJsZShHTF9OT1JNQUxJWkUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9OT1JNQUxJWkUpOyIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfTk9STUFMSVpFKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX05PUk1BTElaRSk7Iik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3BzaXplKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgdW5pb24gewogICAgICAgIERXT1JEIGQ7CiAgICAgICAgZmxvYXQgZjsKICAgIH0gdG1wdmFsdWU7CgogICAgLyogRklYTUU6IGNoZWNrIHRoYXQgcG9pbnRTaXplIGlzbid0IG91dHNpZGUgZ2xHZXRGbG9hdHYoIEdMX1BPSU5UX1NJWkVfTUFYX0FSQiwgJm1heFNpemUgKTsgb3IgLXZlICovCiAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0laRV07CiAgICBUUkFDRSgiU2V0IHBvaW50IHNpemUgdG8gJWZcbiIsIHRtcHZhbHVlLmYpOwogICAgZ2xQb2ludFNpemUodG1wdmFsdWUuZik7CiAgICBjaGVja0dMY2FsbCgiZ2xQb2ludFNpemUoLi4uKTsiKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfcHNpemVtaW4oRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0laRV9NSU5dOwogICAgaWYoR0xfU1VQUE9SVChBUkJfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmQVJCKShHTF9QT0lOVF9TSVpFX01JTl9BUkIsIHRtcHZhbHVlLmYpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZkFSQiguLi4iKTsKICAgIH0KICAgIGVsc2UgaWYoR0xfU1VQUE9SVChFWFRfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmRVhUKShHTF9QT0lOVF9TSVpFX01JTl9FWFQsIHRtcHZhbHVlLmYpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZkVYVCguLi4pOyIpOwogICAgfSBlbHNlIGlmKHRtcHZhbHVlLmYgIT0gMS4wKSB7CiAgICAgICAgRklYTUUoIldJTkVEM0RSU19QT0lOVFNJWkVfTUlOIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBvcGVuZ2wsIHZhbHVlIGlzICVmXG4iLCB0bXB2YWx1ZS5mKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfcHNpemVtYXgoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0laRV9NQVhdOwogICAgaWYoR0xfU1VQUE9SVChBUkJfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmQVJCKShHTF9QT0lOVF9TSVpFX01BWF9BUkIsIHRtcHZhbHVlLmYpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZkFSQiguLi4iKTsKICAgIH0KICAgIGVsc2UgaWYoR0xfU1VQUE9SVChFWFRfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmRVhUKShHTF9QT0lOVF9TSVpFX01BWF9FWFQsIHRtcHZhbHVlLmYpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZkVYVCguLi4pOyIpOwogICAgfSBlbHNlIGlmKHRtcHZhbHVlLmYgIT0gNjQuMCkgewogICAgICAgIEZJWE1FKCJXSU5FRDNEUlNfUE9JTlRTSVpFX01BWCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgb3BlbmdsLCB2YWx1ZSBpcyAlZlxuIiwgdG1wdmFsdWUuZik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3BzY2FsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qIFRPRE86IEdyb3VwIHRoaXMgd2l0aCB0aGUgdmlld3BvcnQgKi8KICAgIC8qCiAgICAgKiBQT0lOVFNDQUxFRU5BQkxFIGNvbnRyb2xzIGhvdyBwb2ludCBzaXplIHZhbHVlIGlzIHRyZWF0ZWQuIElmIHNldCB0bwogICAgICogdHJ1ZSwgdGhlIHBvaW50IHNpemUgaXMgc2NhbGVkIHdpdGggcmVzcGVjdCB0byBoZWlnaHQgb2Ygdmlld3BvcnQuCiAgICAgKiBXaGVuIHNldCB0byBmYWxzZSBwb2ludCBzaXplIGlzIGluIHBpeGVscy4KICAgICAqCiAgICAgKiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvZGlyZWN0eDlfYy9wb2ludF9zcHJpdGVzLmFzcAogICAgICovCgogICAgLyogRGVmYXVsdCB2YWx1ZXMgKi8KICAgIEdMZmxvYXQgYXR0WzNdID0gezEuMGYsIDAuMGYsIDAuMGZ9OwoKICAgIC8qCiAgICAgKiBNaW5pbXVtIHZhbGlkIHBvaW50IHNpemUgZm9yIE9wZW5HTCBpcyAxLjBmLiBGb3IgRGlyZWN0M0QgaXQgaXMgMC4wZi4KICAgICAqIFRoaXMgbWVhbnMgdGhhdCBPcGVuR0wgd2lsbCBjbGFtcCByZWFsbHkgc21hbGwgcG9pbnQgc2l6ZXMgdG8gMS4wZi4KICAgICAqIFRvIGNvcnJlY3QgZm9yIHRoaXMgd2UgbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc2NhbGUgZmFjdG9yIHdoZW4gc2l6ZXMKICAgICAqIGFyZSBsZXNzIHRoYW4gMS4wZi4gc2NhbGVfZmFjdG9yID0gIDEuMGYgLyBwb2ludF9zaXplLgogICAgICovCiAgICBHTGZsb2F0IHBvaW50U2l6ZSA9ICooKGZsb2F0Kikmc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0laRV0pOwogICAgaWYocG9pbnRTaXplID4gMC4wZikgewogICAgICAgIEdMZmxvYXQgc2NhbGVGYWN0b3I7CgogICAgICAgIGlmKHBvaW50U2l6ZSA8IDEuMGYpIHsKICAgICAgICAgICAgc2NhbGVGYWN0b3IgPSBwb2ludFNpemUgKiBwb2ludFNpemU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2NhbGVGYWN0b3IgPSAxLjBmOwogICAgICAgIH0KCiAgICAgICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEVdKSB7CiAgICAgICAgICAgIGF0dFswXSA9ICooKGZsb2F0Kikmc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0NBTEVfQV0pIC8KICAgICAgICAgICAgICAgICAgICAoc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0ICogc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0ICogc2NhbGVGYWN0b3IpOwogICAgICAgICAgICBhdHRbMV0gPSAqKChmbG9hdCopJnN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QT0lOVFNDQUxFX0JdKSAvCiAgICAgICAgICAgICAgICAgICAgKHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodCAqIHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodCAqIHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgYXR0WzJdID0gKigoZmxvYXQqKSZzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTQ0FMRV9DXSkgLwogICAgICAgICAgICAgICAgICAgIChzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQgKiBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQgKiBzY2FsZUZhY3Rvcik7CiAgICAgICAgfQogICAgfQoKICAgIGlmKEdMX1NVUFBPUlQoQVJCX1BPSU5UX1BBUkFNRVRFUlMpKSB7CiAgICAgICAgR0xfRVhUQ0FMTChnbFBvaW50UGFyYW1ldGVyZnZBUkIpKEdMX1BPSU5UX0RJU1RBTkNFX0FUVEVOVUFUSU9OX0FSQiwgYXR0KTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xQb2ludFBhcmFtZXRlcmZ2QVJCKEdMX0RJU1RBTkNFX0FUVEVOVUFUSU9OX0FSQiwgLi4uIik7CiAgICB9CiAgICBlbHNlIGlmKEdMX1NVUFBPUlQoRVhUX1BPSU5UX1BBUkFNRVRFUlMpKSB7CiAgICAgICAgR0xfRVhUQ0FMTChnbFBvaW50UGFyYW1ldGVyZnZFWFQpKEdMX0RJU1RBTkNFX0FUVEVOVUFUSU9OX0VYVCwgYXR0KTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xQb2ludFBhcmFtZXRlcmZ2RVhUKEdMX0RJU1RBTkNFX0FUVEVOVUFUSU9OX0VYVCwgLi4uIik7CiAgICB9IGVsc2UgewogICAgICAgIFRSQUNFKCJQT0lOVF9QQVJBTUVURVJTIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIG9wZW5nbFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2NvbG9yd3JpdGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBWYWx1ZSA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFXTsKCiAgICBUUkFDRSgiQ29sb3IgbWFzazogciglZCkgZyglZCkgYiglZCkgYSglZClcbiIsCiAgICAgICAgVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA/IDEgOiAwLAogICAgICAgIFZhbHVlICYgV0lORUQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gPyAxIDogMCwKICAgICAgICBWYWx1ZSAmIFdJTkVEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgID8gMSA6IDAsCiAgICAgICAgVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA/IDEgOiAwKTsKICAgIGdsQ29sb3JNYXNrKFZhbHVlICYgV0lORUQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgPyBHTF9UUlVFIDogR0xfRkFMU0UsCiAgICAgICAgICAgICAgICBWYWx1ZSAmIFdJTkVEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOID8gR0xfVFJVRSA6IEdMX0ZBTFNFLAogICAgICAgICAgICAgICAgVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA/IEdMX1RSVUUgOiBHTF9GQUxTRSwKICAgICAgICAgICAgICAgIFZhbHVlICYgV0lORUQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAgY2hlY2tHTGNhbGwoImdsQ29sb3JNYXNrKC4uLikiKTsKCiAgICAvKiBkZXBlbmRzIG9uIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFLiAqLwogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUxXSAhPSAweDAwMDAwMDBGIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTJdICE9IDB4MDAwMDAwMEYgfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFM10gIT0gMHgwMDAwMDAwRiApIHsKICAgICAgICBFUlIoIihXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTEvMi8zLCVkLCVkLCVkKSBub3QgeWV0IGltcGxlbWVudGVkLiBNaXNzaW5nIG9mIGNhcCBEM0RQTUlTQ0NBUFNfSU5ERVBFTkRFTlRXUklURU1BU0tTIHdhc24ndCBob25vcmVkP1xuIiwKICAgICAgICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUxXSwKICAgICAgICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUyXSwKICAgICAgICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUzXSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2xvY2Fsdmlld2VyKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0xPQ0FMVklFV0VSXSkgewogICAgICAgIGdsTGlnaHRNb2RlbGkoR0xfTElHSFRfTU9ERUxfTE9DQUxfVklFV0VSLCAxKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodE1vZGVsaShHTF9MSUdIVF9NT0RFTF9MT0NBTF9WSUVXRVIsIDEpIik7CiAgICB9IGVsc2UgewogICAgICAgIGdsTGlnaHRNb2RlbGkoR0xfTElHSFRfTU9ERUxfTE9DQUxfVklFV0VSLCAwKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodE1vZGVsaShHTF9MSUdIVF9NT0RFTF9MT0NBTF9WSUVXRVIsIDApIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2xhc3RwaXhlbChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19MQVNUUElYRUxdKSB7CiAgICAgICAgVFJBQ0UoIkxhc3QgUGl4ZWwgRHJhd2luZyBFbmFibGVkXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGljIEJPT0wgZmlyc3QgPSBUUlVFOwogICAgICAgIGlmKGZpcnN0KSB7CiAgICAgICAgICAgIEZJWE1FKCJMYXN0IFBpeGVsIERyYXdpbmcgRGlzYWJsZWQsIG5vdCBoYW5kbGVkIHlldFxuIik7CiAgICAgICAgICAgIGZpcnN0ID0gRkFMU0U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgVFJBQ0UoIkxhc3QgUGl4ZWwgRHJhd2luZyBEaXNhYmxlZCwgbm90IGhhbmRsZWQgeWV0XG4iKTsKICAgICAgICB9CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3BvaW50c3ByaXRlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgdW5zaWduZWQgaW50IGk7CiAgICBpbnQgdmFsOwoKICAgIC8qIFRPRE86IE5WX1BPSU5UX1NQUklURSAqLwogICAgaWYgKCFHTF9TVVBQT1JUKEFSQl9QT0lOVF9TUFJJVEUpKSB7CiAgICAgICAgVFJBQ0UoIlBvaW50IHNwcml0ZXMgbm90IHN1cHBvcnRlZFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTUFJJVEVFTkFCTEVdKSB7CiAgICAgICAgdmFsID0gR0xfVFJVRTsKICAgIH0gZWxzZSB7CiAgICAgICAgdmFsID0gR0xfRkFMU0U7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IEdMX0xJTUlUUyh0ZXh0dXJlcyk7IGkrKykgewogICAgICAgIC8qIE5vdGUgdGhlIFdJTkVEM0RSUyB2YWx1ZSBhcHBsaWVzIHRvIGFsbCB0ZXh0dXJlcywgYnV0IEdMIGhhcyBvbmUKICAgICAgICAgKiBwZXIgdGV4dHVyZSwgc28gYXBwbHkgaXQgbm93IHJlYWR5IHRvIGJlIHVzZWQhCiAgICAgICAgICovCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgaSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICAgICAgfSBlbHNlIGlmIChpPT0xKSB7CiAgICAgICAgICAgIEZJWE1FKCJQcm9ncmFtIHVzaW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgdGV4dHVyZXMgd2hpY2ggdGhpcyBvcGVuZ2wgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0XG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBnbFRleEVudmkoR0xfUE9JTlRfU1BSSVRFX0FSQiwgR0xfQ09PUkRfUkVQTEFDRV9BUkIsIHZhbCk7CiAgICAgICAgY2hlY2tHTGNhbGwoKHZhbD8iZ2xUZXhFbnZpKEdMX1BPSU5UX1NQUklURSwgR0xfQ09PUkRfUkVQTEFDRSwgR0xfVFJVRSkiOgogICAgICAgICAgICAgICAgICAgICAgICAgImdsVGV4RW52aShHTF9QT0lOVF9TUFJJVEUsIEdMX0NPT1JEX1JFUExBQ0UsIEdMX0ZBTFNFKSIpKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfd3JhcChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qKgogICAgIGh0dHA6Ly93d3cuY29zYy5icm9ja3UuY2EvT2ZmZXJpbmdzLzNQOTgvY291cnNlL2xlY3R1cmVzL3RleHR1cmUvCiAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9hcmNoaXZlL2RlZmF1bHQuYXNwP3VybD0vYXJjaGl2ZS9lbi11cy9kaXJlY3R4OV9jL2RpcmVjdHgvZ3JhcGhpY3MvcHJvZ3JhbW1pbmdndWlkZS9GaXhlZEZ1bmN0aW9uL1RleHR1cmVzL3RleHR1cmV3cmFwcGluZy5hc3AKICAgICBodHRwOi8vd3d3LmdhbWVkZXYubmV0L3JlZmVyZW5jZS9wcm9ncmFtbWluZy9mZWF0dXJlcy9yZW5kZXJlcmRsbDMvcGFnZTIuYXNwCiAgICAgRGVzY3Vzc2lvbiB0aGF0IHdheXMgdG8gdHVybiBvbiBXUkFQaW5nIHRvIHNvbHZlIGFuIG9wZW5nbCBjb252ZXJzaW9uIHByb2JsZW0uCiAgICAgaHR0cDovL3d3dy5mbGlwY29kZS5vcmcvY2dpLWJpbi9mY21zZy5jZ2k/dGhyZWFkX3Nob3c9MTAyNDgKCiAgICAgc28gZmFyIGFzIEkgY2FuIHRlbGwsIHdyYXBwaW5nIGFuZCB0ZXh0dXJlLWNvb3JkaW5hdGUgZ2VuZXJhdGUgZ28gaGFuZCBpbiBoYW5kLAogICAgICovCiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDBdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDFdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDJdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDNdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDRdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDVdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDZdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDddIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDhdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDldIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDEwXSB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1dSQVAxMV0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMTJdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDEzXSB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1dSQVAxNF0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMTVdICkgewogICAgICAgIEVSUigiKFdJTkVEM0RSU19XUkFQMCkgVGV4dHVyZSB3cmFwaW5nIG5vdCB5ZXQgc3VwcG9ydGVkXG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfbXVsdGlzYW1wbGVhYShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKCBHTF9TVVBQT1JUKEFSQl9NVUxUSVNBTVBMRSkgKSB7CiAgICAgICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTXSkgewogICAgICAgICAgICBnbEVuYWJsZShHTF9NVUxUSVNBTVBMRV9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfTVVMVElTQU1QTEVfQVJCKSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9NVUxUSVNBTVBMRV9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX01VTFRJU0FNUExFX0FSQikiKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBU10pIHsKICAgICAgICAgICAgRVJSKCJNdWx0aXNhbXBsZSBhbnRpYWxpYXNpbmcgbm90IHN1cHBvcnRlZCBieSBnbFxuIik7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9zY2lzc29yKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NDSVNTT1JURVNURU5BQkxFXSkgewogICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2RlcHRoYmlhcyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTXSB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RFUFRIQklBU10pIHsKICAgICAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVNdOwogICAgICAgIGdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKSIpOwogICAgICAgIGdsUG9seWdvbk9mZnNldCh0bXB2YWx1ZS5mLCAqKChmbG9hdCopJnN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ERVBUSEJJQVNdKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk9mZnNldCguLi4pIik7CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3BlcnNwZWN0aXZlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19URVhUVVJFUEVSU1BFQ1RJVkVdKSB7CiAgICAgICAgZ2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwgR0xfTklDRVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwgR0xfTklDRVNUKSIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbEhpbnQoR0xfUEVSU1BFQ1RJVkVfQ09SUkVDVElPTl9ISU5ULCBHTF9GQVNURVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwgR0xfRkFTVEVTVCkiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfc3RpcHBsZWRhbHBoYShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RJUFBMRURBTFBIQV0pCiAgICAgICAgRVJSKCIgU3RpcHBsZWQgQWxwaGEgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfYW50aWFsaWFzKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNdKQogICAgICAgIEVSUigiIEFudGlhbGlhcyBub3Qgc3VwcG9ydGVkIHlldC5cbiIpOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9tdWx0aXNhbXBtYXNrKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19NVUxUSVNBTVBMRU1BU0tdICE9IDB4RkZGRkZGRkYpCiAgICAgICAgRVJSKCIoV0lORUQzRFJTX01VTFRJU0FNUExFTUFTSywlZCkgbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX01VTFRJU0FNUExFTUFTS10pOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wYXRjaGVkZ2VzdHlsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUEFUQ0hFREdFU1RZTEVdICE9IFdJTkVEM0RQQVRDSEVER0VfRElTQ1JFVEUpCiAgICAgICAgRVJSKCIoV0lORUQzRFJTX1BBVENIRURHRVNUWUxFLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUEFUQ0hFREdFU1RZTEVdKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfcGF0Y2hzZWdtZW50cyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwogICAgdG1wdmFsdWUuZiA9IDEuMGY7CgogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QQVRDSFNFR01FTlRTXSAhPSB0bXB2YWx1ZS5kKQogICAgICAgIEVSUigiKFdJTkVEM0RSU19QQVRDSFNFR01FTlRTLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCB0bXB2YWx1ZS5kKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfcG9zaXRpb25kZWdyZWUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFXSAhPSBXSU5FRDNEREVHUkVFX0NVQklDKQogICAgICAgIEVSUigiKFdJTkVEM0RSU19QT1NJVElPTkRFR1JFRSwlZCkgbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFXSk7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX25vcm1hbGRlZ3JlZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTk9STUFMREVHUkVFXSAhPSBXSU5FRDNEREVHUkVFX0xJTkVBUikKICAgICAgICBFUlIoIihXSU5FRDNEUlNfTk9STUFMREVHUkVFLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTk9STUFMREVHUkVFXSk7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3Rlc3NlbGxhdGlvbihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTl0pCiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04sJWQpIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTl0pOwp9CgoKc3RhdGljIHZvaWQgc3RhdGVfc3JnYndyaXRlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NSR0JXUklURUVOQUJMRV0pCiAgICAgICAgRVJSKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1NSR0JXUklURUVOQUJMRSBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfc2VwZXJhdGVibGVuZChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEVdKQogICAgICAgIEZJWE1FKCIoV0lORUQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwlZCkgbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRV0pOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV93cmFwdShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQVV0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19XUkFQVSBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfd3JhcHYoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUFZdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfV1JBUFYgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX21vbm9lbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTU9OT0VOQUJMRV0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19NT05PRU5BQkxFIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9yb3AyKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1JPUDJdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfUk9QMiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfcGxhbmVtYXNrKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BMQU5FTUFTS10pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19QTEFORU1BU0sgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3N1YnBpeGVsKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NVQlBJWEVMXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1NVQlBJWEVMIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9zdWJwaXhlbHgoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1VCUElYRUxYXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1NVQlBJWEVMWCBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfc3RpcHBsZWVuYWJsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVElQUExFRU5BQkxFXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1NUSVBQTEVFTkFCTEUgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JvcmRlcmNvbG9yKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0JPUkRFUkNPTE9SXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX0JPUkRFUkNPTE9SIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9taXBtYXBsb2RiaWFzKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX01JUE1BUExPREJJQVNdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfTUlQTUFQTE9EQklBUyBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfYW5pc290cm9weShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTklTT1RST1BZXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX0FOSVNPVFJPUFkgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2ZsdXNoYmF0Y2goRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRkxVU0hCQVRDSF0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19GTFVTSEJBVENIIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV90cmFuc2x1Y2VudHNpKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9leHRlbnRzKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0VYVEVOVFNdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfRVhURU5UUyBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfY2tleWJsZW5kKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SS0VZQkxFTkRFTkFCTEVdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfQ09MT1JLRVlCTEVOREVOQUJMRSBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKLyogQWN0aXZhdGVzIHRoZSB0ZXh0dXJlIGRpbWVuc2lvbiBhY2NvcmRpbmcgdG8gdGhlIGJvdW5kIEQzRCB0ZXh0dXJlLgogKiBEb2VzIG5vdCBjYXJlIGZvciB0aGUgY29sb3JvcCBvciBjb3JyZWN0IGdsIHRleHR1cmUgdW5pdCh3aGVuIHVzaW5nIG52cmMpCiAqIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYWN0aXZhdGUgdGhlIGNvcnJlY3QgdW5pdCBiZWZvcmUKICovCnN0YXRpYyB2b2lkIGFjdGl2YXRlX2RpbWVuc2lvbnMoRFdPUkQgc3RhZ2UsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2spIHsKICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVzW3N0YWdlXSkgewogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzFEKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMUQpIik7CiAgICAgICAgc3dpdGNoKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3N0YWdlXSkgewogICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEFSQl9URVhUVVJFX0NVQkVfTUFQKSkgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9DVUJFX01BUCkpIHsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzNEKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFXzNEKSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9BUkI6CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8zRCkiKTsKICAgICAgICBpZihHTF9TVVBQT1JUKEFSQl9URVhUVVJFX0NVQkVfTUFQKSkgewogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKSIpOwogICAgICAgIH0KICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzFEKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV8xRCkiKTsKICAgICAgICAvKiBCaW5kaW5nIHRleHR1cmVzIGlzIGRvbmUgYnkgc2FtcGxlcnMuIEEgZHVtbXkgdGV4dHVyZSB3aWxsIGJlIGJvdW5kICovCiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9jb2xvcm9wKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3N0YWdlXTsKCiAgICBUUkFDRSgiU2V0dGluZyBjb2xvciBvcCBmb3Igc3RhZ2UgJWRcbiIsIHN0YWdlKTsKCiAgICBpZiAoc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIgJiYgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cHNfc2VsZWN0ZWRfbW9kZSAhPSBTSEFERVJfTk9ORSAmJgogICAgICAgICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciktPmJhc2VTaGFkZXIuZnVuY3Rpb24pIHsKICAgICAgICAvKiBVc2luZyBhIHBpeGVsIHNoYWRlcj8gRG9uJ3QgY2FyZSBmb3IgYW55dGhpbmcgaGVyZSwgdGhlIHNoYWRlciBhcHBseWluZyBkb2VzIGl0ICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChzdGFnZSAhPSBtYXBwZWRfc3RhZ2UpIFdBUk4oIlVzaW5nIG5vbiAxOjEgbWFwcGluZzogJWQgLT4gJWQhXG4iLCBzdGFnZSwgbWFwcGVkX3N0YWdlKTsKCiAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSB7CiAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICAgICAgaWYgKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdICE9IFdJTkVEM0RUT1BfRElTQUJMRSAmJgogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0gIT0gMCkgewogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJBdHRlbXB0IHRvIGVuYWJsZSB1bnN1cHBvcnRlZCBzdGFnZSFcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICAgICAgfSBlbHNlIGlmIChzdGFnZSA+IDApIHsKICAgICAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKEdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgIGlmKHN0YXRlYmxvY2stPmxvd2VzdF9kaXNhYmxlZF9zdGFnZSA+IDApIHsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfUkVHSVNURVJfQ09NQklORVJTX05WKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbENvbWJpbmVyUGFyYW1ldGVyaU5WKEdMX05VTV9HRU5FUkFMX0NPTUJJTkVSU19OViwgc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1JFR0lTVEVSX0NPTUJJTkVSU19OVik7CiAgICAgICAgfQogICAgfQogICAgaWYoc3RhZ2UgPj0gc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSB7CiAgICAgICAgVFJBQ0UoIlN0YWdlIGRpc2FibGVkXG4iKTsKICAgICAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSB7CiAgICAgICAgICAgIC8qIERpc2FibGUgZXZlcnl0aGluZyBoZXJlICovCiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzFEKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFXzFEKSIpOwogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8yRCkiKTsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoQVJCX1RFWFRVUkVfQ1VCRV9NQVApKSB7CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiBBbGwgZG9uZSAqLwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBUaGUgc2FtcGxlciB3aWxsIGFsc28gYWN0aXZhdGUgdGhlIGNvcnJlY3QgdGV4dHVyZSBkaW1lbnNpb25zLCBzbyBubyBuZWVkIHRvIGRvIGl0IGhlcmUKICAgICAqIGlmIHRoZSBzYW1wbGVyIGZvciB0aGlzIHN0YWdlIGlzIGRpcnR5CiAgICAgKi8KICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfU0FNUExFUihzdGFnZSkpKSB7CiAgICAgICAgaWYgKG1hcHBlZF9zdGFnZSAhPSAtMSkgYWN0aXZhdGVfZGltZW5zaW9ucyhzdGFnZSwgc3RhdGVibG9jayk7CiAgICB9CgogICAgLyogU2V0IHRoZSB0ZXh0dXJlIGNvbWJpbmVycyAqLwogICAgaWYgKEdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgIHNldF90ZXhfb3BfbnZyYygoSVdpbmVEM0REZXZpY2UgKilzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLCBGQUxTRSwgc3RhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcxXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUkFSRzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfc3RhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBzZXRfdGV4X29wKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIEZBTFNFLCBzdGFnZSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMV0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMl0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMF0pOwogICAgfQp9CgpzdGF0aWMgdm9pZCB0ZXhfYWxwaGFvcChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwogICAgRFdPUkQgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFtzdGFnZV07CiAgICBEV09SRCBvcCwgYXJnMSwgYXJnMiwgYXJnMDsKCiAgICBUUkFDRSgiU2V0dGluZyBhbHBoYSBvcCBmb3Igc3RhZ2UgJWRcbiIsIHN0YWdlKTsKICAgIC8qIERvIG5vdCBjYXJlIGZvciBlbmFibGVkIC8gZGlzYWJsZWQgc3RhZ2VzLCBqdXN0IGFzc2lnbiB0aGUgc2V0dGlnbnMuIGNvbG9yb3AgZGlzYWJsZXMgLyBlbmFibGVzIHJlcXVpcmVkIHN0dWZmICovCiAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSB7CiAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICAgICAgaWYgKHN0YWdlID49IEdMX0xJTUlUUyh0ZXh0dXJlcykpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0gIT0gV0lORUQzRFRPUF9ESVNBQkxFICYmCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIkF0dGVtcHQgdG8gZW5hYmxlIHVuc3VwcG9ydGVkIHN0YWdlIVxuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0YWdlID4gMCkgewogICAgICAgICAgICAvKiBXZSBjYW4ndCBkbyBhbnl0aGluZyBoZXJlICovCiAgICAgICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG9wID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBT1BdOwogICAgYXJnMSA9IHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19BTFBIQUFSRzFdOwogICAgYXJnMiA9IHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19BTFBIQUFSRzJdOwogICAgYXJnMCA9IHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19BTFBIQUFSRzBdOwoKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUktFWUVOQUJMRV0gJiYgc3RhZ2UgPT0gMCAmJgogICAgICAgc3RhdGVibG9jay0+dGV4dHVyZXNbMF0gJiYgc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbMF0gPT0gR0xfVEVYVFVSRV8yRCkgewogICAgICAgIElXaW5lRDNEU3VyZmFjZUltcGwgKnN1cmYgPSAoSVdpbmVEM0RTdXJmYWNlSW1wbCAqKSAoKElXaW5lRDNEVGV4dHVyZUltcGwgKikgc3RhdGVibG9jay0+dGV4dHVyZXNbMF0pLT5zdXJmYWNlc1swXTsKCiAgICAgICAgaWYoc3VyZi0+Q0tleUZsYWdzICYgRERTRF9DS1NSQ0JMVCAmJgogICAgICAgICAgIGdldEZvcm1hdERlc2NFbnRyeShzdXJmLT5yZXNvdXJjZS5mb3JtYXQpLT5hbHBoYU1hc2sgPT0gMHgwMDAwMDAwMCkgewoKICAgICAgICAgICAgLyogQ29sb3Iga2V5aW5nIG5lZWRzIHRvIHBhc3MgYWxwaGEgdmFsdWVzIGZyb20gdGhlIHRleHR1cmUgdGhyb3VnaCB0byBoYXZlIHRoZSBhbHBoYSB0ZXN0IHdvcmsgcHJvcGVybHkuCiAgICAgICAgICAgICAqIE9uIHRoZSBvdGhlciBoYW5kIGFwcGxpY2F0aW9ucyBjYW4gc3RpbGwgdXNlIHRleHR1cmUgY29tYmluZXJzIGFwcGFyZW50bHkuIFRoaXMgY29kZSB0YWtlcyBjYXJlIHRoYXQgYXBwcwogICAgICAgICAgICAgKiBjYW5ub3QgcmVtb3ZlIHRoZSB0ZXh0dXJlJ3MgYWxwaGEgY2hhbm5lbCBlbnRpcmVseS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIGZpeHVwIGlzIHJlcXVpcmVkIGZvciBQcmluY2Ugb2YgUGVyc2lhIDNEKHByaXNvbiBiYXJzKSwgd2hpbGUgTW90byByYWNlciAyIHJlcXVpcmVzIEQzRFRPUF9NT0RVTEFURSB0byB3b3JrCiAgICAgICAgICAgICAqIG9uIGNvbG9yIGtleWVkIHN1cmZhY2VzLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBXaGF0IHRvIGRvIHdpdGggbXVsdGl0ZXh0dXJpbmc/IFNvIGZhciBubyBhcHAgaGFzIGJlZW4gZm91bmQgdGhhdCB1c2VzIGNvbG9yIGtleWluZyB3aXRoIG11bHRpdGV4dHVyaW5nCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX0RJU0FCTEUpIG9wID0gV0lORUQzRFRPUF9TRUxFQ1RBUkcxOwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzEpIGFyZzEgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICAgICAgZWxzZSBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzIpIGFyZzIgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICB9CiAgICB9CgogICAgVFJBQ0UoIlNldHRpbmcgYWxwaGEgb3AgZm9yIHN0YWdlICVkXG4iLCBzdGFnZSk7CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgc2V0X3RleF9vcF9udnJjKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgb3AsIGFyZzEsIGFyZzIsIGFyZzAsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfc3RhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBzZXRfdGV4X29wKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgIG9wLCBhcmcxLCBhcmcyLCBhcmcwKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3RleHR1cmUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCB0ZXhVbml0ID0gc3RhdGUgLSBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwKTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbdGV4VW5pdF07CgogICAgaWYgKG1hcHBlZF9zdGFnZSA8IDApIHJldHVybjsKCiAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgIGlmKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgfSBlbHNlIGlmIChtYXBwZWRfc3RhZ2UgPiAwKSB7CiAgICAgICAgLyogV2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZSAqLwogICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzZXRfdGV4dHVyZV9tYXRyaXgoKGZsb2F0ICopJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1RFWFRVUkUwICsgdGV4VW5pdF0udS5tWzBdWzBdLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbdGV4VW5pdF1bV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1NdLAogICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3RleFVuaXRdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0gJiAweEZGRkYwMDAwKSAhPSBXSU5FRDNEVFNTX1RDSV9QQVNTVEhSVSk7Cgp9CgpzdGF0aWMgdm9pZCBsb2FkVmVydGV4RGF0YShJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqc2QpOwoKc3RhdGljIHZvaWQgdGV4X2Nvb3JkaW5kZXgoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbc3RhZ2VdOwoKICAgIGlmIChtYXBwZWRfc3RhZ2UgPT0gLTEpIHsKICAgICAgICBUUkFDRSgiTm8gdGV4dHVyZSB1bml0IG1hcHBlZCB0byBzdGFnZSAlZC4gU2tpcHBpbmcgdGV4dHVyZSBjb29yZGluYXRlcy5cbiIsIHN0YWdlKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICBpZihtYXBwZWRfc3RhZ2UgPj0gR0xfTElNSVRTKHNhbXBsZXJzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgIH0gZWxzZSBpZiAoc3RhZ2UgPiAwKSB7CiAgICAgICAgLyogV2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZSAqLwogICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBWYWx1ZXMgMC03IGFyZSBpbmRleGVzIGludG8gdGhlIEZWRiB0ZXggY29vcmRzIC0gU2VlIGNvbW1lbnRzIGluIERyYXdQcmltaXRpdmUKICAgICAqCiAgICAgKiBGSVhNRTogRnJvbSBNU0ROOiBUaGUgV0lORUQzRFRTU19UQ0lfKiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBJZiB5b3UgaW5jbHVkZQogICAgICogb25lIGZsYWcsIHlvdSBjYW4gc3RpbGwgc3BlY2lmeSBhbiBpbmRleCB2YWx1ZSwgd2hpY2ggdGhlIHN5c3RlbSB1c2VzIHRvCiAgICAgKiBkZXRlcm1pbmUgdGhlIHRleHR1cmUgd3JhcHBpbmcgbW9kZS4KICAgICAqIGVnLiBTZXRUZXh0dXJlU3RhZ2VTdGF0ZSggMCwgV0lORUQzRFRTU19URVhDT09SRElOREVYLCBXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIHwgMSApOwogICAgICogbWVhbnMgdXNlIHRoZSB2ZXJ0ZXggcG9zaXRpb24gKGNhbWVyYS1zcGFjZSkgYXMgdGhlIGlucHV0IHRleHR1cmUgY29vcmRpbmF0ZXMKICAgICAqIGZvciB0aGlzIHRleHR1cmUgc3RhZ2UsIGFuZCB0aGUgd3JhcCBtb2RlIHNldCBpbiB0aGUgV0lORUQzRFJTX1dSQVAxIHJlbmRlcgogICAgICogc3RhdGUuIFdlIGRvIG5vdCAoeWV0KSBzdXBwb3J0IHRoZSBXSU5FRDNEUkVOREVSU1RBVEVfV1JBUHggdmFsdWVzLCBub3IgdGllIHRoZW0gdXAKICAgICAqIHRvIHRoZSBURVhDT09SRElOREVYIHZhbHVlCiAgICAgKi8KCiAgICAvKgogICAgICogQmUgY2FyZWZ1bCB0aGUgdmFsdWUgb2YgdGhlIG1hc2sgMHhGMDAwMCBjb21lIGZyb20gZDNkOHR5cGVzLmggaW5mb3MKICAgICAqLwogICAgc3dpdGNoIChzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0gJiAweEZGRkYwMDAwKSB7CiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX1BBU1NUSFJVOgogICAgICAgIC8qVXNlIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSBjb29yZGluYXRlcyBjb250YWluZWQgd2l0aGluIHRoZSB2ZXJ0ZXggZm9ybWF0LiBUaGlzIHZhbHVlIHJlc29sdmVzIHRvIHplcm8uKi8KICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUyk7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9TLFQsUixRKSIpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VQT1NJVElPTjoKICAgICAgICAvKiBDYW1lcmFTcGFjZVBvc2l0aW9uIG1lYW5zIHVzZSB0aGUgdmVydGV4IHBvc2l0aW9uLCB0cmFuc2Zvcm1lZCB0byBjYW1lcmEgc3BhY2UsCiAgICAgICAgICogYXMgdGhlIGlucHV0IHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgc3RhZ2UncyB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uLiBUaGlzCiAgICAgICAgICogZXF1YXRlcyByb3VnaGx5IHRvIEVZRV9MSU5FQVIKICAgICAgICAgKi8KICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHNfcGxhbmVbXSA9IHsgMS4wLCAwLjAsIDAuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHRfcGxhbmVbXSA9IHsgMC4wLCAxLjAsIDAuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHJfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDEuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHFfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDAuMCwgMS4wIH07CiAgICAgICAgICAgIFRSQUNFKCJXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgICAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUywgR0xfRVlFX1BMQU5FLCBzX3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9ULCBHTF9FWUVfUExBTkUsIHRfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUSwgR0xfRVlFX1BMQU5FLCBxX3BsYW5lKTsKICAgICAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgICAgIFRSQUNFKCJXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIC0gU2V0IEdMX1RFWFRVUkVfR0VOX3ggYW5kIEdMX3gsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVJcbiIpOwogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUikiKTsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9UKTsiKTsKICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKSIpOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFTk9STUFMOgogICAgICAgIHsKICAgICAgICAgICAgaWYgKEdMX1NVUFBPUlQoTlZfVEVYR0VOX1JFRkxFQ1RJT04pKSB7CiAgICAgICAgICAgICAgICBmbG9hdCBzX3BsYW5lW10gPSB7IDEuMCwgMC4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICAgICAgZmxvYXQgdF9wbGFuZVtdID0geyAwLjAsIDEuMCwgMC4wLCAwLjAgfTsKICAgICAgICAgICAgICAgIGZsb2F0IHJfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDEuMCwgMC4wIH07CiAgICAgICAgICAgICAgICBmbG9hdCBxX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAwLjAsIDEuMCB9OwogICAgICAgICAgICAgICAgVFJBQ0UoIldJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFTk9STUFMIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICAgICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgICAgICAgICAgICBnbFB1c2hNYXRyaXgoKTsKICAgICAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1MsIEdMX0VZRV9QTEFORSwgc19wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1QsIEdMX0VZRV9QTEFORSwgdF9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1EsIEdMX0VZRV9QTEFORSwgcV9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFBvcE1hdHJpeCgpOwoKICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOyIpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1MsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9TLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKSIpOwogICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7Iik7CiAgICAgICAgICAgICAgICBnbFRleEdlbmkoR0xfVCwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsiKTsKICAgICAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVikiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFUkVGTEVDVElPTlZFQ1RPUjoKICAgICAgICB7CiAgICAgICAgICAgIGlmIChHTF9TVVBQT1JUKE5WX1RFWEdFTl9SRUZMRUNUSU9OKSkgewogICAgICAgICAgICBmbG9hdCBzX3BsYW5lW10gPSB7IDEuMCwgMC4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCB0X3BsYW5lW10gPSB7IDAuMCwgMS4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCByX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAxLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCBxX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAwLjAsIDEuMCB9OwogICAgICAgICAgICBUUkFDRSgiV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VSRUZMRUNUSU9OVkVDVE9SIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgICAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUywgR0xfRVlFX1BMQU5FLCBzX3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9ULCBHTF9FWUVfUExBTkUsIHRfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUSwgR0xfRVlFX1BMQU5FLCBxX3BsYW5lKTsKICAgICAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUyk7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9TLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9ULCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfVCwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgLyogVW5oYW5kbGVkIHR5cGVzOiAqLwogICAgZGVmYXVsdDoKICAgICAgICAvKiBUb2RvOiAqLwogICAgICAgIC8qID8gZGlzYWJsZSBHTF9URVhUVVJFX0dFTl9uID8gKi8KICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUyk7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUSk7CiAgICAgICAgRklYTUUoIlVuaGFuZGxlZCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggJXhcbiIsIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19URVhDT09SRElOREVYXSk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgLyogVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeCAqLwogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwICsgc3RhZ2UpKSkgewogICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlKFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTAgKyBzdGFnZSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQoKICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkRFQ0wpICYmIGNvbnRleHQtPm5hbWVkQXJyYXlzTG9hZGVkKSB7CiAgICAgICAgLyogUmVsb2FkIHRoZSBhcnJheXMgaWYgd2UgYXJlIHVzaW5nIGZpeGVkIGZ1bmN0aW9uIGFycmF5cyB0byByZWZsZWN0IHRoZSBzZWxlY3RlZCBjb29yZCBpbnB1dAogICAgICAgICAqIHNvdXJjZS4gQ2FsbCBsb2FkVmVydGV4RGF0YSBkaXJlY3RseSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYXJzZSB0aGUgdmVydGV4IGRlY2xhcmF0aW9uCiAgICAgICAgICogYW5kIGRvIGFsbCB0aGUgdGhpbmdzIGxpbmtlZCB0byBpdAogICAgICAgICAqIFRPRE86IFRpZHkgdGhhdCB1cCB0byByZWxvYWQgb25seSB0aGUgYXJyYXlzIG9mIHRoZSBjaGFuZ2VkIHVuaXQKICAgICAgICAgKi8KICAgICAgICBsb2FkVmVydGV4RGF0YShzdGF0ZWJsb2NrLCAmc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+c3RyaWRlZF9zdHJlYW1zKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdGV4X2J1bXBlbnZsc2NhbGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRV07CiAgICBpZih0bXB2YWx1ZS5mICE9IDAuMCkgewogICAgICAgIEVSUigiV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdGV4X2J1bXBlbnZsb2Zmc2V0KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUXTsKICAgIGlmKHRtcHZhbHVlLmYgIT0gMC4wKSB7CiAgICAgICAgRVJSKCJXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdGV4X3Jlc3VsdGFyZyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwoKICAgIGlmKHN0YWdlID49IEdMX0xJTUlUUyh0ZXh0dXJlX3N0YWdlcykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX1JFU1VMVEFSR10gIT0gV0lORUQzRFRBX0NVUlJFTlQpIHsKICAgICAgICBFUlIoIldJTkVEM0RUU1NfUkVTVUxUQVJHIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc2FtcGxlcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHNhbXBsZXIgPSBzdGF0ZSAtIFNUQVRFX1NBTVBMRVIoMCk7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3NhbXBsZXJdOwogICAgdW5pb24gewogICAgICAgIGZsb2F0IGY7CiAgICAgICAgRFdPUkQgZDsKICAgIH0gdG1wdmFsdWU7CgogICAgVFJBQ0UoIlNhbXBsZXI6ICVkXG4iLCBzYW1wbGVyKTsKICAgIC8qIEVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGV4dHVyZSBkaW1lbnNpb25zIGlzIGRvbmUgYnkgdGV4dHVyZSBzdGFnZSBzdGF0ZSAvIHBpeGVsIHNoYWRlciBzZXR1cCwgdGhpcyBmdW5jdGlvbgogICAgICogb25seSBoYXMgdG8gYmluZCB0ZXh0dXJlcyBhbmQgc2V0IHRoZSBwZXIgdGV4dHVyZSBzdGF0ZXMKICAgICAqLwoKICAgIGlmIChtYXBwZWRfc3RhZ2UgPT0gLTEpIHsKICAgICAgICBUUkFDRSgiTm8gc2FtcGxlciBtYXBwZWQgdG8gc3RhZ2UgJWQuIFJldHVybmluZy5cbiIsIHNhbXBsZXIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgIGlmIChtYXBwZWRfc3RhZ2UgPj0gR0xfTElNSVRTKHNhbXBsZXJzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgIH0gZWxzZSBpZiAoc2FtcGxlciA+IDApIHsKICAgICAgICAvKiBXZSBjYW4ndCBkbyBhbnl0aGluZyBoZXJlICovCiAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKSB7CiAgICAgICAgQk9PTCB0ZXhJc1BvdzIgPSBGQUxTRTsKCiAgICAgICAgLyogVGhlIGZpeGVkIGZ1bmN0aW9uIG5wMiB0ZXh0dXJlIGVtdWxhdGlvbiB1c2VzIHRoZSB0ZXh0dXJlIG1hdHJpeCB0byBmaXggdXAgdGhlIGNvb3JkaW5hdGVzCiAgICAgICAgICogSVdpbmVEM0RCYXNlVGV4dHVyZTo6QXBwbHlTdGF0ZUNoYW5nZXMgbXVsdGlwbGllcyB0aGUgc2V0IG1hdHJpeCB3aXRoIGEgZml4dXAgbWF0cml4LiBCZWZvcmUgdGhlCiAgICAgICAgICogc2NhbGluZyBpcyByZWFwcGxpZWQgb3IgcmVtb3ZlZCwgdGhlIHRleHR1cmUgbWF0cml4IGhhcyB0byBiZSByZWFwcGxpZWQKICAgICAgICAgKi8KICAgICAgICBpZighR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9OT05fUE9XRVJfT0ZfVFdPKSAmJiBzYW1wbGVyIDwgTUFYX1RFWFRVUkVTKSB7CiAgICAgICAgICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdID09IEdMX1RFWFRVUkVfMkQpIHsKICAgICAgICAgICAgICAgIGlmKCgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1tzYW1wbGVyXSktPnBvdzJzY2FsaW5nRmFjdG9yWCAhPSAxLjAgfHwKICAgICAgICAgICAgICAgICAgICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1tzYW1wbGVyXSktPnBvdzJzY2FsaW5nRmFjdG9yWSAhPSAxLjAgKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4SXNQb3cyID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdID09IEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKSB7CiAgICAgICAgICAgICAgICBpZigoKElXaW5lRDNEQ3ViZVRleHR1cmVJbXBsICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKS0+cG93MnNjYWxpbmdGYWN0b3IgIT0gMS4wKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4SXNQb3cyID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYodGV4SXNQb3cyIHx8IGNvbnRleHQtPmxhc3RXYXNQb3cyVGV4dHVyZVtzYW1wbGVyXSkgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUoU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMCArIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbc2FtcGxlcl0pLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgIGNvbnRleHQtPmxhc3RXYXNQb3cyVGV4dHVyZVtzYW1wbGVyXSA9IHRleElzUG93MjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSVdpbmVEM0RCYXNlVGV4dHVyZV9QcmVMb2FkKChJV2luZUQzREJhc2VUZXh0dXJlICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKTsKICAgICAgICBJV2luZUQzREJhc2VUZXh0dXJlX0FwcGx5U3RhdGVDaGFuZ2VzKHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdLCBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc2FtcGxlcl0sIHN0YXRlYmxvY2stPnNhbXBsZXJTdGF0ZVtzYW1wbGVyXSk7CgogICAgICAgIGlmIChHTF9TVVBQT1JUKEVYVF9URVhUVVJFX0xPRF9CSUFTKSkgewogICAgICAgICAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+c2FtcGxlclN0YXRlW3NhbXBsZXJdW1dJTkVEM0RTQU1QX01JUE1BUExPREJJQVNdOwogICAgICAgICAgICBnbFRleEVudmYoR0xfVEVYVFVSRV9GSUxURVJfQ09OVFJPTF9FWFQsCiAgICAgICAgICAgICAgICAgICAgICBHTF9URVhUVVJFX0xPRF9CSUFTX0VYVCwKICAgICAgICAgICAgICAgICAgICAgIHRtcHZhbHVlLmYpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhFbnZpIEdMX1RFWFRVUkVfTE9EX0JJQVNfRVhUIC4uLiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYgc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIgJiYKICAgICAgICAgICAgKChJV2luZUQzRFBpeGVsU2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnBpeGVsU2hhZGVyKS0+YmFzZVNoYWRlci5mdW5jdGlvbikgewogICAgICAgICAgICAvKiBVc2luZyBhIHBpeGVsIHNoYWRlcj8gVmVyaWZ5IHRoZSBzYW1wbGVyIHR5cGVzICovCgogICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSBlbmFibGVkLiBJIGRvbid0IGhhdmUgdG8gZGlzYWJsZSB0aGUgb3RoZXIKICAgICAgICAgICAgICogZGltZW5zaW9ucyBiZWNhdXNlIHRoZSBzaGFkZXIga25vd3MgZnJvbSB3aGljaCB0ZXh0dXJlIHR5cGUgdG8gc2FtcGxlIGZyb20uIEZvciB0aGUgc2FrZSBvZgogICAgICAgICAgICAgKiBkZWJ1Z2dpbmcgYWxsIGRpbWVuc2lvbnMgY291bGQgYmUgZW5hYmxlZCBhbmQgYSB0ZXh0dXJlIHdpdGggc29tZSB1Z2x5IHBpbmsgYm91bmQgdG8gdGhlIHVudXNlZAogICAgICAgICAgICAgKiBkaW1lbnNpb25zLiBUaGlzIHNob3VsZCBtYWtlIHdyb25nIHNhbXBsaW5nIHNvdXJjZXMgdmlzaWJsZSA6LSkKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGdsRW5hYmxlKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdKSIpOwogICAgICAgIH0gZWxzZSBpZihzYW1wbGVyIDwgc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSB7CiAgICAgICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVEVYVFVSRVNUQUdFKHNhbXBsZXIsIFdJTkVEM0RUU1NfQ09MT1JPUCkpKSB7CiAgICAgICAgICAgICAgICBhY3RpdmF0ZV9kaW1lbnNpb25zKHNhbXBsZXIsIHN0YXRlYmxvY2spOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JLRVlFTkFCTEVdICYmIHNhbXBsZXIgPT0gMCkgewogICAgICAgICAgICAgICAgLyogSWYgY29sb3Iga2V5aW5nIGlzIGVuYWJsZWQgdXBkYXRlIHRoZSBhbHBoYSB0ZXN0LCBpdCBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2UKICAgICAgICAgICAgICAgICAqIG9mIGEgY29sb3Iga2V5IGluIHN0YWdlIDAKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgc3RhdGVfYWxwaGEoV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZihzYW1wbGVyIDwgR0xfTElNSVRTKHRleHR1cmVfc3RhZ2VzKSkgewogICAgICAgIGlmKHNhbXBsZXIgPCBzdGF0ZWJsb2NrLT5sb3dlc3RfZGlzYWJsZWRfc3RhZ2UpIHsKICAgICAgICAgICAgLyogVE9ETzogV2hhdCBzaG91bGQgSSBkbyB3aXRoIHBpeGVsIHNoYWRlcnMgaGVyZSA/Pz8gKi8KICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9URVhUVVJFU1RBR0Uoc2FtcGxlciwgV0lORUQzRFRTU19DT0xPUk9QKSkpIHsKICAgICAgICAgICAgICAgIGFjdGl2YXRlX2RpbWVuc2lvbnMoc2FtcGxlciwgc3RhdGVibG9jayk7CiAgICAgICAgICAgIH0KICAgICAgICB9IC8qIE90aGVyd2lzZSB0ZXhfY29sb3JvcCBkaXNhYmxlcyB0aGUgc3RhZ2UgKi8KICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMUQsIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmR1bW15VGV4dHVyZU5hbWVbc2FtcGxlcl0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMUQsIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmR1bW15VGV4dHVyZU5hbWVbc2FtcGxlcl0pIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHNoYWRlcmNvbnN0YW50KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgSVdpbmVEM0REZXZpY2VJbXBsICpkZXZpY2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlOwoKICAgIC8qIFZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIHN0YXRlcyB3aWxsIGNhbGwgYSBzaGFkZXIgdXBsb2FkLCBkb24ndCBkbyBhbnl0aGluZyBhcyBsb25nIG9uZSBvZiB0aGVtCiAgICAgKiBoYXMgYW4gdXBkYXRlIHBlbmRpbmcKICAgICAqLwogICAgaWYoaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1ZERUNMKSB8fAogICAgICAgaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1BJWEVMU0hBREVSKSkgewogICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBkZXZpY2UtPnNoYWRlcl9iYWNrZW5kLT5zaGFkZXJfbG9hZF9jb25zdGFudHMoKElXaW5lRDNERGV2aWNlICopIGRldmljZSwgdXNlX3BzKGRldmljZSksIHVzZV92cyhkZXZpY2UpKTsKfQoKc3RhdGljIHZvaWQgcGl4ZWxzaGFkZXIoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CiAgICBCT09MIHVzZV9wc2hhZGVyID0gdXNlX3BzKGRldmljZSk7CiAgICBCT09MIHVzZV92c2hhZGVyID0gdXNlX3ZzKGRldmljZSk7CiAgICBCT09MIHVwZGF0ZV9mb2cgPSBGQUxTRTsKICAgIGludCBpOwoKICAgIGlmICh1c2VfcHNoYWRlcikgewogICAgICAgIGlmKCFjb250ZXh0LT5sYXN0X3dhc19wc2hhZGVyKSB7CiAgICAgICAgICAgIC8qIEZvcm1lciBkcmF3IHdpdGhvdXQgYSBwaXhlbCBzaGFkZXIsIHNvbWUgc2FtcGxlcnMKICAgICAgICAgICAgICogbWF5IGJlIGRpc2FibGVkIGJlY2F1c2Ugb2YgV0lORUQzRFRTU19DT0xPUk9QID0gV0lORUQzRFRPUF9ESVNBQkxFCiAgICAgICAgICAgICAqIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhlbQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZm9yKGk9MDsgaSA8IE1BWF9TQU1QTEVSUzsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1NBTVBMRVIoaSkpKSB7CiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcihTVEFURV9TQU1QTEVSKGkpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVfZm9nID0gVFJVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgIC8qIE90aGVyd2lzZSBhbGwgc2FtcGxlcnMgd2VyZSBhY3RpdmF0ZWQgYnkgdGhlIGNvZGUgYWJvdmUgaW4gZWFybGllciBkcmF3cywgb3IgYnkgc2FtcGxlcigpCiAgICAgICAgICAgICogaWYgYSBkaWZmZXJlbnQgdGV4dHVyZSB3YXMgYm91bmQuIEkgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICAgICAgICAgKi8KICAgICAgICB9CgogICAgICAgIC8qIENvbXBpbGUgYW5kIGJpbmQgdGhlIHNoYWRlciAqLwogICAgICAgIElXaW5lRDNEUGl4ZWxTaGFkZXJfQ29tcGlsZVNoYWRlcihzdGF0ZWJsb2NrLT5waXhlbFNoYWRlcik7CiAgICB9IGVsc2UgewogICAgICAgIC8qIERpc2FibGVkIHRoZSBwaXhlbCBzaGFkZXIgLSBjb2xvciBvcHMgd2VyZW4ndCBhcHBsaWVkCiAgICAgICAgICogd2hpbGUgaXQgd2FzIGVuYWJsZWQsIHNvIHJlLWFwcGx5IHRoZW0uCiAgICAgICAgICovCiAgICAgICAgZm9yKGk9MDsgaSA8IE1BWF9URVhUVVJFUzsgaSsrKSB7CiAgICAgICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVEVYVFVSRVNUQUdFKGksIFdJTkVEM0RUU1NfQ09MT1JPUCkpKSB7CiAgICAgICAgICAgICAgICB0ZXhfY29sb3JvcChTVEFURV9URVhUVVJFU1RBR0UoaSwgV0lORUQzRFRTU19DT0xPUk9QKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoY29udGV4dC0+bGFzdF93YXNfcHNoYWRlcikKICAgICAgICAgICAgdXBkYXRlX2ZvZyA9IFRSVUU7CiAgICB9CgogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTdGF0ZVRhYmxlW1NUQVRFX1ZTSEFERVJdLnJlcHJlc2VudGF0aXZlKSkgewogICAgICAgIGRldmljZS0+c2hhZGVyX2JhY2tlbmQtPnNoYWRlcl9zZWxlY3QoKElXaW5lRDNERGV2aWNlICopc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgdXNlX3BzaGFkZXIsIHVzZV92c2hhZGVyKTsKCiAgICAgICAgaWYgKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQpICYmICh1c2VfdnNoYWRlciB8fCB1c2VfcHNoYWRlcikpIHsKICAgICAgICAgICAgc2hhZGVyY29uc3RhbnQoU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQsIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KICAgIH0KCiAgICBpZih1cGRhdGVfZm9nKQogICAgICAgIHN0YXRlX2ZvZyhzdGF0ZSwgc3RhdGVibG9jaywgY29udGV4dCk7CgogICAgY29udGV4dC0+bGFzdF93YXNfcHNoYWRlciA9IHVzZV9wc2hhZGVyOwp9CgpzdGF0aWMgdm9pZCB0ZXhfYnVtcGVudm1hdChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwoKICAgIGlmKHN0YXRlYmxvY2stPnBpeGVsU2hhZGVyICYmIHN0YWdlICE9IDAgJiYKICAgICAgICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKikgc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5uZWVkc2J1bXBtYXQgPT0gc3RhZ2UpIHsKICAgICAgICAvKiBUaGUgcGl4ZWwgc2hhZGVyIGhhcyB0byBrbm93IHRoZSBidW1wIGVudiBtYXRyaXguIERvIGEgY29uc3RhbnRzIHVwZGF0ZSBpZiBpdCBpc24ndCBzY2hlZHVsZWQKICAgICAgICAgKiBhbnl3YXkKICAgICAgICAgKi8KICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1BJWEVMU0hBREVSQ09OU1RBTlQpICYmCiAgICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9QSVhFTFNIQURFUikpIHsKICAgICAgICAgICAgc2hhZGVyY29uc3RhbnQoU1RBVEVfUElYRUxTSEFERVJDT05TVEFOVCwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fd29ybGQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0cmFuc2Zvcm1fdmlldyBiZWxvdyBpZiB0aGUgdmlldyBtYXRyaXggd2FzIGNoYW5nZWQgdG9vCiAgICAgKgogICAgICogRGVsaWJlcmF0ZWx5IG5vIGNoZWNrIGlmIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaXMgZGlydHkgYmVjYXVzZSB0aGUgdmRlY2wgc3RhdGUKICAgICAqIGRvZXMgbm90IGFsd2F5cyB1cGRhdGUgdGhlIHdvcmxkIG1hdHJpeCwgb25seSBvbiBhIHN3aXRjaCBiZXR3ZWVuIHRyYW5zZm9ybWVkCiAgICAgKiBhbmQgdW50cmFubnNmb3JtZWQgZHJhd3MuIEl0ICptYXkqIGhhcHBlbiB0aGF0IHRoZSB3b3JsZCBtYXRyaXggaXMgc2V0IDIgdGltZXMgZHVyaW5nIG9uZQogICAgICogZHJhdywgYnV0IHRoYXQgc2hvdWxkIGJlIHJhdGhlciByYXJlIGFuZCBjaGVhcGVyIGluIHRvdGFsLgogICAgICovCiAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgIGNoZWNrR0xjYWxsKCJnbE1hdHJpeE1vZGUiKTsKCiAgICBpZihjb250ZXh0LT5sYXN0X3dhc19yaHcpIHsKICAgICAgICBnbExvYWRJZGVudGl0eSgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExvYWRJZGVudGl0eSgpIik7CiAgICB9IGVsc2UgewogICAgICAgIC8qIEluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB2aWV3IG1hdHJpeCBpcyB0aGUgaWRlbnRpdHkgbWF0cml4ICovCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnZpZXdfaWRlbnQpIHsKICAgICAgICAgICAgZ2xMb2FkTWF0cml4ZigoZmxvYXQgKikgJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1dPUkxETUFUUklYKDApXS51Lm1bMF1bMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkTWF0cml4ZiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkTWF0cml4ZiIpOwogICAgICAgICAgICBnbE11bHRNYXRyaXhmKChmbG9hdCAqKSAmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfV09STERNQVRSSVgoMCldLnUubVswXVswXSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE11bHRNYXRyaXhmIik7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCBjbGlwcGxhbmUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBVSU5UIGluZGV4ID0gc3RhdGUgLSBTVEFURV9DTElQUExBTkUoMCk7CgogICAgaWYoaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVklFVykpIHx8IGluZGV4ID49IEdMX0xJTUlUUyhjbGlwcGxhbmVzKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBDbGlwIFBsYW5lIHNldHRpbmdzIGFyZSBhZmZlY3RlZCBieSB0aGUgbW9kZWwgdmlldyBpbiBPcGVuR0wsIHRoZSBWaWV3IHRyYW5zZm9ybSBpbiBkaXJlY3QzZCAqLwogICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICBnbFB1c2hNYXRyaXgoKTsKICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwoKICAgIFRSQUNFKCJDbGlwcGxhbmUgWyVmLCVmLCVmLCVmXVxuIiwKICAgICAgICAgIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF1bMF0sCiAgICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwcGxhbmVbaW5kZXhdWzFdLAogICAgICAgICAgc3RhdGVibG9jay0+Y2xpcHBsYW5lW2luZGV4XVsyXSwKICAgICAgICAgIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF1bM10pOwogICAgZ2xDbGlwUGxhbmUoR0xfQ0xJUF9QTEFORTAgKyBpbmRleCwgc3RhdGVibG9jay0+Y2xpcHBsYW5lW2luZGV4XSk7CiAgICBjaGVja0dMY2FsbCgiZ2xDbGlwUGxhbmUiKTsKCiAgICBnbFBvcE1hdHJpeCgpOwp9CgpzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fdmlldyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuc2lnbmVkIGludCBrOwoKICAgIC8qIElmIHdlIGFyZSBjaGFuZ2luZyB0aGUgVmlldyBtYXRyaXgsIHJlc2V0IHRoZSBsaWdodCBhbmQgY2xpcHBpbmcgcGxhbmVzIHRvIHRoZSBuZXcgdmlldwogICAgICogTk9URTogV2UgaGF2ZSB0byByZXNldCB0aGUgcG9zaXRpb25zIGV2ZW4gaWYgdGhlIGxpZ2h0L3BsYW5lIGlzIG5vdCBjdXJyZW50bHkKICAgICAqICAgICAgIGVuYWJsZWQsIHNpbmNlIHRoZSBjYWxsIHRvIGVuYWJsZSBpdCB3aWxsIG5vdCByZXNldCB0aGUgcG9zaXRpb24uCiAgICAgKiBOT1RFMjogQXBwYXJlbnRseSB0ZXh0dXJlIHRyYW5zZm9ybXMgZG8gTk9UIG5lZWQgcmVhcHBseWluZwogICAgICovCgogICAgUExJR0hUSU5GT0VMICpsaWdodCA9IE5VTEw7CgogICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICBjaGVja0dMY2FsbCgiZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVykiKTsKICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwogICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYoLi4uKSIpOwoKICAgIC8qIFJlc2V0IGxpZ2h0cy4gVE9ETzogQ2FsbCBsaWdodCBhcHBseSBmdW5jICovCiAgICBmb3IoayA9IDA7IGsgPCBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5tYXhDb25jdXJyZW50TGlnaHRzOyBrKyspIHsKICAgICAgICBsaWdodCA9IHN0YXRlYmxvY2stPmFjdGl2ZUxpZ2h0c1trXTsKICAgICAgICBpZighbGlnaHQpIGNvbnRpbnVlOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBsaWdodC0+Z2xJbmRleCwgR0xfUE9TSVRJT04sIGxpZ2h0LT5saWdodFBvc24pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYgcG9zbiIpOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBsaWdodC0+Z2xJbmRleCwgR0xfU1BPVF9ESVJFQ1RJT04sIGxpZ2h0LT5saWdodERpcm4pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYgZGlybiIpOwogICAgfQoKICAgIC8qIFJlc2V0IENsaXBwaW5nIFBsYW5lcyAgKi8KICAgIGZvciAoayA9IDA7IGsgPCBHTF9MSU1JVFMoY2xpcHBsYW5lcyk7IGsrKykgewogICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfQ0xJUFBMQU5FKGspKSkgewogICAgICAgICAgICBjbGlwcGxhbmUoU1RBVEVfQ0xJUFBMQU5FKGspLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICB9CiAgICB9CgogICAgaWYoY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgZ2xMb2FkSWRlbnRpdHkoKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkSWRlbnRpdHkoKSIpOwogICAgICAgIC8qIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSB3b3JsZCBtYXRyaXgsIHRoZSBpZGVudGl0eSBpcyBmaW5lICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qIENhbGwgdGhlIHdvcmxkIG1hdHJpeCBzdGF0ZSwgdGhpcyB3aWxsIGFwcGx5IHRoZSBjb21iaW5lZCBXT1JMRCArIFZJRVcgbWF0cml4CiAgICAgKiBObyBuZWVkIHRvIGRvIGl0IGhlcmUgaWYgdGhlIHN0YXRlIGlzIHNjaGVkdWxlZCBmb3IgdXBkYXRlLgogICAgICovCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMCkpKSkgewogICAgICAgIHRyYW5zZm9ybV93b3JsZChTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRyYW5zZm9ybV93b3JsZGV4KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgV0FSTigiV29ybGQgbWF0cml4IDEgLSAyNTUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwp9CgpzdGF0aWMgY29uc3QgR0xmbG9hdCBpbnZ5bWF0WzE2XSA9IHsKICAgIDEuMGYsIDAuMGYsIDAuMGYsIDAuMGYsCiAgICAwLjBmLCAtMS4wZiwgMC4wZiwgMC4wZiwKICAgIDAuMGYsIDAuMGYsIDEuMGYsIDAuMGYsCiAgICAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmfTsKCnN0YXRpYyB2b2lkIHRyYW5zZm9ybV9wcm9qZWN0aW9uKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwogICAgY2hlY2tHTGNhbGwoImdsTWF0cml4TW9kZShHTF9QUk9KRUNUSU9OKSIpOwogICAgZ2xMb2FkSWRlbnRpdHkoKTsKICAgIGNoZWNrR0xjYWxsKCJnbExvYWRJZGVudGl0eSIpOwoKICAgIGlmKGNvbnRleHQtPmxhc3Rfd2FzX3JodykgewogICAgICAgIGRvdWJsZSBYLCBZLCBoZWlnaHQsIHdpZHRoLCBtaW5aLCBtYXhaOwoKICAgICAgICBYICAgICAgPSBzdGF0ZWJsb2NrLT52aWV3cG9ydC5YOwogICAgICAgIFkgICAgICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0Llk7CiAgICAgICAgaGVpZ2h0ID0gc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0OwogICAgICAgIHdpZHRoICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0LldpZHRoOwogICAgICAgIG1pblogICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0Lk1pblo7CiAgICAgICAgbWF4WiAgID0gc3RhdGVibG9jay0+dmlld3BvcnQuTWF4WjsKCiAgICAgICAgaWYoIXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnVudHJhbnNmb3JtZWQpIHsKICAgICAgICAgICAgLyogVHJhbnNmb3JtZWQgdmVydGljZXMgYXJlIHN1cHBvc2VkIHRvIGJ5cGFzcyB0aGUgd2hvbGUgdHJhbnNmb3JtIHBpcGVsaW5lIGluY2x1ZGluZwogICAgICAgICAgICAgKiBmcnVzdHVtIGNsaXBwaW5nLiBUaGlzIGNhbid0IGJlIGRvbmUgaW4gb3BlbmdsLCBzbyB0aGlzIGNvZGUgYWRqdXN0cyB0aGUgWiByYW5nZSB0bwogICAgICAgICAgICAgKiBzdXBwcmVzcyBkZXB0aCBjbGlwcGluZy4gVGhpcyBjYW4gYmUgZG9uZSBiZWNhdXNlIGl0IGlzIGFuIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBhbmQKICAgICAgICAgICAgICogdGhlIFogY29vcmRpbmF0ZSBkb2VzIG5vdCBhZmZlY3QgdGhlIHNpemUgb2YgdGhlIHByaW1pdGl2ZXMKICAgICAgICAgICAgICovCiAgICAgICAgICAgIFRSQUNFKCJDYWxsaW5nIGdsT3J0aG8gd2l0aCAlZiwgJWYsICVmLCAlZlxuIiwgd2lkdGgsIGhlaWdodCwgLW1pblosIC1tYXhaKTsKICAgICAgICAgICAgaWYoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cmVuZGVyX29mZnNjcmVlbikgewogICAgICAgICAgICAgICAgZ2xPcnRobyhYLCBYICsgd2lkdGgsIC1ZLCAtWSAtIGhlaWdodCwgLW1pblosIC1tYXhaKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdsT3J0aG8oWCwgWCArIHdpZHRoLCBZICsgaGVpZ2h0LCBZLCAtbWluWiwgLW1heFopOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogSWYgdGhlIGFwcCBtaXhlcyB0cmFuc2Zvcm1lZCBhbmQgdW50cmFuc2Zvcm1lZCBwcmltaXRpdmVzIHdlIGNhbid0IHVzZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0KICAgICAgICAgICAgICogdHJpY2sgYWJvdmUgYmVjYXVzZSB0aGlzIHdvdWxkIG1lc3MgdXAgdHJhbnNmb3JtZWQgYW5kIHVudHJhbnNmb3JtZWQgWiBvcmRlci4gUGFzcyB0aGUgeiBwb3NpdGlvbgogICAgICAgICAgICAgKiB1bm1vZGlmaWVkIHRvIG9wZW5nbC4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogSWYgdGhlIGFwcCBkZXBlbmRzIG9uIG1peGVkIHR5cGVzIGFuZCBkaXNhYmxlZCBjbGlwcGluZyB3ZSdyZSBvdXQgb2YgbHVjayB3aXRob3V0IGEgcGlwZWxpbmUKICAgICAgICAgICAgICogcmVwbGFjZW1lbnQgc2hhZGVyLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgVFJBQ0UoIkNhbGxpbmcgZ2xPcnRobyB3aXRoICVmLCAlZiwgJWYsICVmXG4iLCB3aWR0aCwgaGVpZ2h0LCAxLjAsIC0xLjApOwogICAgICAgICAgICBpZihzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgICAgICBnbE9ydGhvKFgsIFggKyB3aWR0aCwgLVksIC1ZIC0gaGVpZ2h0LCAxLjAsIC0xLjApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZ2xPcnRobyhYLCBYICsgd2lkdGgsIFkgKyBoZWlnaHQsIFksIDEuMCwgLTEuMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2hlY2tHTGNhbGwoImdsT3J0aG8iKTsKCiAgICAgICAgLyogV2luZG93IENvb3JkIDAgaXMgdGhlIG1pZGRsZSBvZiB0aGUgZmlyc3QgcGl4ZWwsIHNvIHRyYW5zbGF0ZSBieSAzLzggcGl4ZWxzICovCiAgICAgICAgZ2xUcmFuc2xhdGVmKDAuMzc1LCAwLjM3NSwgMCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsVHJhbnNsYXRlZigwLjM3NSwgMC4zNzUsIDApIik7CiAgICAgICAgLyogRDNEIHRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIGZsaXBwZWQgY29tcGFyZWQgdG8gT3BlbkdMIG9uZXMsIHNvCiAgICAgICAgICogcmVuZGVyIGV2ZXJ5dGhpbmcgdXBzaWRlIGRvd24gd2hlbiByZW5kZXJpbmcgb2Zmc2NyZWVuLiAqLwogICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgIGdsTXVsdE1hdHJpeGYoaW52eW1hdCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE11bHRNYXRyaXhmKGludnltYXQpIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvKiBUaGUgcnVsZSBpcyB0aGF0IHRoZSB3aW5kb3cgY29vcmRpbmF0ZSAwIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlCiAgICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcGl4ZWwsIGJ1dCB0aGUgY2VudGVyIG9mIHRoZSBmaXJzdCBwaXhlbC4KICAgICAgICAgICAgQXMgYSBjb25zZXF1ZW5jZSBpZiB5b3Ugd2FudCB0byBjb3JyZWN0bHkgZHJhdyBvbmUgbGluZSBleGFjdGx5IGZyb20KICAgICAgICAgICAgdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGVuZCBvZiB0aGUgdmlld3BvcnQgKHdpdGggYWxsIG1hdHJpY2VzIHNldCB0bwogICAgICAgICAgICBiZSBpZGVudGl0eSksIHRoZSB4IGNvb3JkcyBvZiBib3RoIGVuZHMgb2YgdGhlIGxpbmUgd291bGQgYmUgbm90CiAgICAgICAgICAgIC0xIGFuZCAxIHJlc3BlY3RpdmVseSBidXQgKC0xLTEvdmlld3BvcnRfd2lkaCkgYW5kICgxLTEvdmlld3BvcnRfd2lkdGgpCiAgICAgICAgICAgIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBnbFRyYW5zbGF0ZWYoMC45IC8gc3RhdGVibG9jay0+dmlld3BvcnQuV2lkdGgsIC0wLjkgLyBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQsIDApOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFRyYW5zbGF0ZWYgKDAuOSAvIHdpZHRoLCAtMC45IC8gaGVpZ2h0LCAwKSIpOwoKICAgICAgICAvKiBEM0QgdGV4dHVyZSBjb29yZGluYXRlcyBhcmUgZmxpcHBlZCBjb21wYXJlZCB0byBPcGVuR0wgb25lcywgc28KICAgICAgICAgICAgKiByZW5kZXIgZXZlcnl0aGluZyB1cHNpZGUgZG93biB3aGVuIHJlbmRlcmluZyBvZmZzY3JlZW4uICovCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICAgICAgZ2xNdWx0TWF0cml4ZihpbnZ5bWF0KTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTXVsdE1hdHJpeGYoaW52eW1hdCkiKTsKICAgICAgICB9CiAgICAgICAgZ2xNdWx0TWF0cml4ZigoZmxvYXQgKikgJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1BST0pFQ1RJT05dLnUubVswXVswXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYiKTsKICAgIH0KfQoKLyogVGhpcyBzaG91bGQgbWF0Y2ggYW55IGFycmF5cyBsb2FkZWQgaW4gbG9hZFZlcnRleERhdGEuCiAqIHN0YXRlYmxvY2sgaW1wbCBpcyByZXF1aXJlZCBmb3IgR0xfU1VQUE9SVAogKiBUT0RPOiBPbmx5IGxvYWQgLyB1bmxvYWQgYXJyYXlzIGlmIHdlIGhhdmUgdG8uCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2FkVmVydGV4RGF0YShJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrKSB7CiAgICBpbnQgdGV4dHVyZV9pZHg7CgogICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSk7CiAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSk7CiAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1NFQ09OREFSWV9DT0xPUl9BUlJBWV9FWFQpOwogICAgfQogICAgZm9yICh0ZXh0dXJlX2lkeCA9IDA7IHRleHR1cmVfaWR4IDwgR0xfTElNSVRTKHRleHR1cmVzKTsgKyt0ZXh0dXJlX2lkeCkgewogICAgICAgIEdMX0VYVENBTEwoZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIHRleHR1cmVfaWR4KSk7CiAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CiAgICB9Cn0KCi8qIFRoaXMgc2hvdWxkIG1hdGNoIGFueSBhcnJheXMgbG9hZGVkIGluIGxvYWROdW1iZXJlZEFycmF5cwogKiBUT0RPOiBPbmx5IGxvYWQgLyB1bmxvYWQgYXJyYXlzIGlmIHdlIGhhdmUgdG8uCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2FkTnVtYmVyZWRBcnJheXMoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgLyogZGlzYWJsZSBhbnkgYXR0cmlicyAodGhpcyBpcyB0aGUgc2FtZSBmb3IgYm90aCBHTFNMIGFuZCBBUkIgbW9kZXMpICovCiAgICBHTGludCBtYXhBdHRyaWJzOwogICAgaW50IGk7CgogICAgLyogTGVhdmUgYWxsIHRoZSBhdHRyaWJzIGRpc2FibGVkICovCiAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfQVRUUklCU19BUkIsICZtYXhBdHRyaWJzKTsKICAgIC8qIE1FU0EgZG9lcyBub3Qgc3VwcG9ydCBpdCByaWdodCBub3QgKi8KICAgIGlmIChnbEdldEVycm9yKCkgIT0gR0xfTk9fRVJST1IpCiAgICAgICAgbWF4QXR0cmlicyA9IDE2OwogICAgZm9yIChpID0gMDsgaSA8IG1heEF0dHJpYnM7ICsraSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihyZWcpOyIpOwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbG9hZE51bWJlcmVkQXJyYXlzKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzdHJpZGVkKSB7CiAgICBHTGludCBjdXJWQk8gPSBHTF9TVVBQT1JUKEFSQl9WRVJURVhfQlVGRkVSX09CSkVDVCkgPyAtMSA6IDA7CiAgICBpbnQgaTsKICAgIFVJTlQgKm9mZnNldCA9IHN0YXRlYmxvY2stPnN0cmVhbU9mZnNldDsKCiAgICAvKiBEZWZhdWx0IHRvIG5vIGluc3RhbmNpbmcgKi8KICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmluc3RhbmNlZERyYXcgPSBGQUxTRTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0FUVFJJQlM7IGkrKykgewoKICAgICAgICBpZiAoIXN0cmlkZWQtPnUuaW5wdXRbaV0ubHBEYXRhICYmICFzdHJpZGVkLT51LmlucHV0W2ldLlZCTykKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgIC8qIERvIG5vdCBsb2FkIGluc3RhbmNlIGRhdGEuIEl0IHdpbGwgYmUgc3BlY2lmaWVkIHVzaW5nIGdsVGV4Q29vcmQgYnkgZHJhd3ByaW0gKi8KICAgICAgICBpZihzdGF0ZWJsb2NrLT5zdHJlYW1GbGFnc1tzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSAmIFdJTkVEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gVFJVRTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBUUkFDRV8oZDNkX3NoYWRlcikoIkxvYWRpbmcgYXJyYXkgJXUgW1ZCTz0ldV1cbiIsIGksIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKTsKCiAgICAgICAgaWYoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc3RyaWRlZC0+dS5pbnB1dFtpXS5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzdHJpZGVkLT51LmlucHV0W2ldLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliUG9pbnRlckFSQihpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfTk9STUFMSVpFRChzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVkLT51LmlucHV0W2ldLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSArIG9mZnNldFtzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSkgKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5QVJCKGkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBTdHJpZGUgPSAwIG1lYW5zIGFsd2F5cyB0aGUgc2FtZSB2YWx1ZXMuIGdsVmVydGV4QXR0cmliUG9pbnRlckFSQiBkb2Vzbid0IGRvIHRoYXQuIEluc3RlYWQgZGlzYWJsZSB0aGUgcG9pbnRlciBhbmQKICAgICAgICAgICAgICogc2V0IHVwIHRoZSBhdHRyaWJ1dGUgc3RhdGljYWxseS4gQnV0IHdlIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgc3lzdGVtIG1lbW9yeSBhZGRyZXNzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgQllURSAqcHRyID0gc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBvZmZzZXRbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgIGlmKHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSB7CiAgICAgICAgICAgICAgICBJV2luZUQzRFZlcnRleEJ1ZmZlckltcGwgKnZiID0gKElXaW5lRDNEVmVydGV4QnVmZmVySW1wbCAqKSBzdGF0ZWJsb2NrLT5zdHJlYW1Tb3VyY2Vbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgICAgICBwdHIgKz0gKGxvbmcpIHZiLT5yZXNvdXJjZS5hbGxvY2F0ZWRNZW1vcnk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgR0xfRVhUQ0FMTChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihpKSk7CgogICAgICAgICAgICBzd2l0Y2goc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMToKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMWZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMmZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMzoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliM2Z2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNGZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VQllURTQ6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjROdWJ2QVJCKGksIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVUJZVEU0TjoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0QzRENPTE9SOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVidkFSQihpLCBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9TSE9SVDI6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjRzdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNHN2QVJCKGksIChHTHNob3J0ICopIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUMk46CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0xzaG9ydCBzWzRdID0geygoc2hvcnQgKikgcHRyKVswXSwgKChzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCBzKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VU0hPUlQyTjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHTHVzaG9ydCBzWzRdID0geygodW5zaWduZWQgc2hvcnQgKikgcHRyKVswXSwgKCh1bnNpZ25lZCBzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE51c3ZBUkIoaSwgcykpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfU0hPUlQ0TjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1VTSE9SVDROOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVURFQzM6CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfVURFQzNcbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzdXN2QVJCKGksIChHTHVzaG9ydCAqKSBwdHIpOyBEb2VzIG5vdCBleGlzdCAqLwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfREVDM046CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfREVDM05cbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzTnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKTsgRG9lcyBub3QgZXhpc3QgKi8KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9GTE9BVDE2XzI6CiAgICAgICAgICAgICAgICAgICAgLyogQXJlIHRob3NlIDE2IGJpdCBmbG9hdHMuIEMgZG9lc24ndCBoYXZlIGEgMTYgYml0IGZsb2F0IHR5cGUuIEkgY291bGQgcmVhZCB0aGUgc2luZ2xlIGJpdHMgYW5kIGNhbGN1bGF0ZSBhIDQKICAgICAgICAgICAgICAgICAgICAgKiBieXRlIGZsb2F0IGFjY29yZGluZyB0byB0aGUgSUVFRSBzdGFuZGFyZAogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJVbnN1cHBvcnRlZCBXSU5FRDNEREVDTFRZUEVfRkxPQVQxNl8yXG4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNDoKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiVW5zdXBwb3J0ZWQgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNFxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVU5VU0VEOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24gaW4gc3RyaWRlIDAgYXR0cmlidXRlc1xuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovKiBVc2VkIGZyb20gMiBkaWZmZXJlbnQgZnVuY3Rpb25zLCBhbmQgdG9vIGJpZyB0byBqdXN0aWZ5IG1ha2luZyBpdCBpbmxpbmVkICovCnN0YXRpYyB2b2lkIGxvYWRWZXJ0ZXhEYXRhKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzZCkgewogICAgdW5zaWduZWQgaW50IHRleHR1cmVObyAgID0gMDsKICAgIFVJTlQgKm9mZnNldCA9IHN0YXRlYmxvY2stPnN0cmVhbU9mZnNldDsKICAgIEdMaW50IGN1clZCTyA9IEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CVUZGRVJfT0JKRUNUKSA/IC0xIDogMDsKICAgIHVuc2lnbmVkIGludCBtYXBwZWRfc3RhZ2UgPSAwOwoKICAgIFRSQUNFKCJVc2luZyBmYXN0IHZlcnRleCBhcnJheSBjb2RlXG4iKTsKCiAgICAvKiBUaGlzIGlzIGZpeGVkIGZ1bmN0aW9uIHBpcGVsaW5lIG9ubHksIGFuZCB0aGUgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmUgZG9lc24ndCBkbyBpbnN0YW5jaW5nICovCiAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gRkFMU0U7CgogICAgLyogQmxlbmQgRGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBpZiggKHNkLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSkgfHwgKHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTykgfHwKICAgICAgICAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMubHBEYXRhKSB8fCAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMuVkJPKSApIHsKCgogICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9WRVJURVhfQkxFTkQpKSB7CgojaWYgMQogICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1dFSUdIVF9BUlJBWV9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9XRUlHSFRfQVJSQVlfQVJCKSIpOwojZW5kaWYKCiAgICAgICAgICAgIFRSQUNFKCJCbGVuZCAlZCAlcCAlZFxuIiwgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlLCBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLmJsZW5kV2VpZ2h0cy5zdHJlYW1Ob10pOwogICAgICAgICAgICAvKiBGSVhNRSgiVE9ET1xuIik7Ki8KICAgICAgICAgICAgLyogTm90ZSBkd1R5cGUgPT0gZmxvYXQzIG9yIGZsb2F0NCA9PSAyIG9yIDMgKi8KCiNpZiAwCiAgICAgICAgICAgIC8qIHdpdGggdGhpcyBvbiwgdGhlIG5vcm1hbHMgYXBwZWFyIHRvIGJlIGJlaW5nIG1vZGlmaWVkLAogICAgICAgICAgICAgICBidXQgdGhlIHZlcnRpY2VzIGFyZW4ndCBiZWluZyB0cmFuc2xhdGVkIGFzIHRoZXkgc2hvdWxkIGJlCiAgICAgICAgICAgICAgIE1heWJlIHRoZSB3b3JsZCBtYXRyaXggYXJlbid0IGJlaW5nIHNldHVwIHByb3Blcmx5PyAqLwogICAgICAgICAgICBnbFZlcnRleEJsZW5kQVJCKFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSArIDEpOwojZW5kaWYKCgogICAgICAgICAgICBWVFJBQ0UoKCJnbFdlaWdodFBvaW50ZXJBUkIoJWQsIEdMX0ZMT0FULCAlZCwgJXApXG4iLAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpICwKICAgICAgICAgICAgICAgIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuYmxlbmRXZWlnaHRzLnN0cmVhbU5vXSkpOwoKICAgICAgICAgICAgaWYoY3VyVkJPICE9IHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTykgewogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5ibGVuZFdlaWdodHMuVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5WQk87CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xXZWlnaHRQb2ludGVyQVJCKSgKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSwKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy5ibGVuZFdlaWdodHMuc3RyZWFtTm9dKTsKCiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFdlaWdodFBvaW50ZXJBUkIiKTsKCiAgICAgICAgICAgIGlmKChzZC0+dS5zLmJsZW5kTWF0cml4SW5kaWNlcy5scERhdGEpIHx8IChzZC0+dS5zLmJsZW5kTWF0cml4SW5kaWNlcy5WQk8pKXsKICAgICAgICAgICAgICAgIHN0YXRpYyBCT09MIHNob3dmaXhtZSA9IFRSVUU7CiAgICAgICAgICAgICAgICBpZihzaG93Zml4bWUpewogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJibGVuZE1hdHJpeEluZGljZXMgc3VwcG9ydFxuIik7CiAgICAgICAgICAgICAgICAgICAgc2hvd2ZpeG1lID0gRkFMU0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIGlmIChHTF9TVVBQT1JUKEVYVF9WRVJURVhfV0VJR0hUSU5HKSkgewogICAgICAgICAgICAvKiBGSVhNRSgiVE9ET1xuIik7Ki8KI2lmIDAKCiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhXZWlnaHRQb2ludGVyRVhUKSgKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSwKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xWZXJ0ZXhXZWlnaHRQb2ludGVyRVhUKG51bUJsZW5kcywgLi4uKSIpOwogICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9XRUlHSFRfQVJSQVlfRVhUKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpIik7CiNlbmRpZgoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBUT0RPOiBzdXBwb3J0IGJsZW5kcyBpbiBkcmF3U3RyaWRlZFNsb3cKICAgICAgICAgICAgICogTm8gbmVlZCB0byB3cml0ZSBhIEZJWE1FIGhlcmUsIHRoaXMgaXMgZG9uZSBhZnRlciB0aGUgZ2VuZXJhbCB2ZXJ0ZXggZGVjbCBkZWNvZGluZwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgV0FSTigidW5zdXBwb3J0ZWQgYmxlbmRpbmcgaW4gb3BlbkdsXG4iKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9WRVJURVhfQkxFTkQpKSB7CiNpZiAwICAgIC8qIFRPRE86IFZlcnRleCBibGVuZGluZyAqLwogICAgICAgICAgICBnbERpc2FibGUoR0xfVkVSVEVYX0JMRU5EX0FSQik7CiNlbmRpZgogICAgICAgICAgICBUUkFDRSgiQVJCX1ZFUlRFWF9CTEVORFxuIik7CiAgICAgICAgfSBlbHNlIGlmIChHTF9TVVBQT1JUKEVYVF9WRVJURVhfV0VJR0hUSU5HKSkgewogICAgICAgICAgICBUUkFDRSgiIEVYVF9WRVJURVhfV0VJR0hUSU5HXG4iKTsKICAgICAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpIik7CgogICAgICAgIH0KICAgIH0KCiNpZiAwIC8qIEZPRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBpZiAoc2QtPnUucy5mb2cubHBEYXRhIHx8IHNkLT51LnMuZm9nLlZCTykgewogICAgICAgIC8qIFRPRE86IGZvZyovCiAgICBpZiAoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSB7CiAgICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgICAgIChHTF9FWFRDQUxMKShGb2dDb29yZFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuZm9nLmR3VHlwZSksCiAgICAgICAgICAgICAgICBzZC0+dS5zLmZvZy5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMuZm9nLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLmZvZy5kd1N0cmlkZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogZG9uJ3QgYm90aGVyIGZhbGxpbmcgYmFjayB0byAnc2xvdycgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBzb2Z0d2FyZSBGT0cgeWV0LiAqLwogICAgICAgICAgICAvKiBGSVhNRTogZml4bWUgb25jZSAqLwogICAgICAgICAgICBUUkFDRSgiSGFyZHdhcmUgc3VwcG9ydCBmb3IgRk9HIGlzIG5vdCBhdmFpYWJsZSwgRk9HIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUFJUKEVYVF9GT1JfQ09PUkQpIHsKICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBmb2cgaXMgZGlzYWJsZWQgKi8KICAgICAgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgfQogICAgfQojZW5kaWYKCiNpZiAwIC8qIHRhbmdlbnRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnRhbmdlbnQubHBEYXRhIHx8IHNkLT51LnMudGFuZ2VudC5WQk8gfHwKICAgICAgICBzZC0+dS5zLmJpbm9ybWFsLmxwRGF0YSB8fCBzZC0+dS5zLmJpbm9ybWFsLlZCTykgewogICAgICAgIC8qIFRPRE86IHRhbmdlbnRzKi8KICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICBpZiAoc2QtPnUucy50YW5nZW50LmxwRGF0YSB8fCBzZC0+dS5zLnRhbmdlbnQuVkJPKSB7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoVGFuZ2VudFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRhbmdlbnQuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50YW5nZW50LmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNkLT51LnMuYmlub3JtYWwubHBEYXRhIHx8IHNkLT51LnMuYmlub3JtYWwuVkJPKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoQmlub3JtYWxQb2ludGVyRVhUKSgKICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuYmlub3JtYWwuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSk7CiAgICAgICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBkb24ndCBib3RoZXIgZmFsbGluZyBiYWNrIHRvICdzbG93JyBhcyB3ZSBkb24ndCBzdXBwb3J0IHNvZnR3YXJlIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgeWV0IC4gKi8KICAgICAgICAgICAgLyogRklYTUU6IGZpeG1lIG9uY2UgKi8KICAgICAgICAgICAgVFJBQ0UoIkhhcmR3YXJlIHN1cHBvcnQgZm9yIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgaXMgbm90IGF2YWlhYmxlLCB0YW5nZW50cyBhbmQgYmlub3JtYWxzIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICAgLyogbWFrZSBzdXJlIGZvZyBpcyBkaXNhYmxlZCAqLwogICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RBTkdFTlRfQVJSQVlfRVhUKTsKICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CSU5PUk1BTF9BUlJBWV9FWFQpOwogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLyogUG9pbnQgU2l6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnBTaXplLmxwRGF0YSB8fCBzZC0+dS5zLnBTaXplLlZCTykgewoKICAgICAgICAvKiBubyBzdWNoIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpeGVkIGZ1bmN0aW9uIEdMIHBpcGVsaW5lICovCiAgICAgICAgVFJBQ0UoIkNhbm5vdCBjaGFuZ2UgcHRTaXplIGhlcmUgaW4gb3BlbkdsXG4iKTsKICAgICAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpbiB1c2luZyBzaGFkZXJzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSAqLwoKICAgIH0KCiAgICAvKiBWZXJ0ZXggUG9pbnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMucG9zaXRpb24ubHBEYXRhICE9IE5VTEwgfHwgc2QtPnUucy5wb3NpdGlvbi5WQk8gIT0gMCkgewogICAgICAgIC8qIE5vdGUgZHdUeXBlID09IGZsb2F0MyBvciBmbG9hdDQgPT0gMiBvciAzICovCiAgICAgICAgVlRSQUNFKCgiZ2xWZXJ0ZXhQb2ludGVyKCVkLCBHTF9GTE9BVCwgJWQsICVwKVxuIiwKICAgICAgICAgICAgICAgIHNkLT51LnMucG9zaXRpb24uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSArIDEsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmxwRGF0YSkpOwoKICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5wb3NpdGlvbi5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5wb3NpdGlvbi5WQk8pKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnBvc2l0aW9uLlZCTzsKICAgICAgICB9CgogICAgICAgIC8qIG1pbihXSU5FRDNEX0FUUl9TSVpFKHBvc2l0aW9uKSwzKSB0byBEaXNhYmxlIFJIVyBtb2RlIGFzICd3JyBjb29yZAogICAgICAgICAgIGhhbmRsaW5nIGZvciByaHcgbW9kZSBzaG91bGQgbm90IGltcGFjdCBzY3JlZW4gcG9zaXRpb24gd2hlcmVhcyBpbiBHTCBpdCBkb2VzLgogICAgICAgICAgIFRoaXMgbWF5ICByZXN1bHQgaW4gdmVyeSBzbGlnaHRseSBkaXN0b3JlZCB0ZXh0dXJlcyBpbiByaHcgbW9kZSwgYnV0CiAgICAgICAgICAgYSB2ZXJ5IG1pbmltYWwgZGlmZmVyZW50LiBUaGVyZSdzIGFsd2F5cyB0aGUgb3RoZXIgb3B0aW9uIG9mCiAgICAgICAgICAgZml4aW5nIHRoZSB2aWV3IG1hdHJpeCB0byBwcmV2ZW50IHcgZnJvbSBoYXZpbmcgYW55IGVmZmVjdAoKICAgICAgICAgICBUaGlzIG9ubHkgYXBwbGllcyB0byB1c2VyIHBvaW50ZXIgc291cmNlcywgaW4gVkJPcyB0aGUgdmVydGljZXMgYXJlIGZpeGVkIHVwCiAgICAgICAgICovCiAgICAgICAgaWYoc2QtPnUucy5wb3NpdGlvbi5WQk8gPT0gMCkgewogICAgICAgICAgICBnbFZlcnRleFBvaW50ZXIoMyAvKiBtaW4oV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksMykgKi8sCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xWZXJ0ZXhQb2ludGVyKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrR0xjYWxsKCJnbFZlcnRleFBvaW50ZXIoLi4uKSIpOwogICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpIik7CgogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpIik7CiAgICB9CgogICAgLyogTm9ybWFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLm5vcm1hbC5scERhdGEgfHwgc2QtPnUucy5ub3JtYWwuVkJPKSB7CiAgICAgICAgLyogTm90ZSBkd1R5cGUgPT0gZmxvYXQzIG9yIGZsb2F0NCA9PSAyIG9yIDMgKi8KICAgICAgICBWVFJBQ0UoKCJnbE5vcm1hbFBvaW50ZXIoR0xfRkxPQVQsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMubm9ybWFsLmxwRGF0YSkpOwogICAgICAgIGlmKGN1clZCTyAhPSBzZC0+dS5zLm5vcm1hbC5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5ub3JtYWwuVkJPKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRCdWZmZXJBUkIiKTsKICAgICAgICAgICAgY3VyVkJPID0gc2QtPnUucy5ub3JtYWwuVkJPOwogICAgICAgIH0KICAgICAgICBnbE5vcm1hbFBvaW50ZXIoCiAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLm5vcm1hbC5kd1R5cGUpLAogICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgc2QtPnUucy5ub3JtYWwubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMubm9ybWFsLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMubm9ybWFsLnN0cmVhbU5vXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTm9ybWFsUG9pbnRlciguLi4pIik7CiAgICAgICAgZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9OT1JNQUxfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSkiKTsKCiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSkiKTsKICAgICAgICBnbE5vcm1hbDNmKDAsIDAsIDEpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbE5vcm1hbDNmKDAsIDAsIDEpIik7CiAgICB9CgogICAgLyogRGlmZnVzZSBDb2xvdXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgLyogIFdBUk5JTkc6IERhdGEgaGVyZSBNVVNUIGJlIGluIFJHQkEgZm9ybWF0LCBzbyBjYW5ub3QgICAgICAqLwogICAgLyogICAgIGdvIGRpcmVjdGx5IGludG8gZmFzdCBtb2RlIGZyb20gYXBwIHBnbSwgYmVjYXVzZSAgICAgICAqLwogICAgLyogICAgIGRpcmVjdHggcmVxdWlyZXMgZGF0YSBpbiBCR1JBIGZvcm1hdC4gICAgICAgICAgICAgICAgICAqLwogICAgLyogY3VycmVudGx5IGZpeHVwVmVydGljZXMgc3dpemVscyB0aGUgZm9ybWF0LCBidXQgdGhpcyBpc24ndCAqLwogICAgLyogdmVyeSBwcmFjdGljYWwgd2hlbiB1c2luZyBWQk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgLyogTk9URTogVW5sZXNzIHdlIHdyaXRlIGEgdmVydGV4IHNoYWRlciB0byBzd2l6ZWwgdGhlIGNvbG91ciAqLwogICAgLyogLCBvciB0aGUgdXNlciBkb2Vzbid0IGNhcmUgYW5kIHdhbnRzIHRoZSBzcGVlZCBhZHZhbnRhZ2UgICAqLwoKICAgIGlmIChzZC0+dS5zLmRpZmZ1c2UubHBEYXRhIHx8IHNkLT51LnMuZGlmZnVzZS5WQk8pIHsKICAgICAgICAvKiBOb3RlIGR3VHlwZSA9PSBmbG9hdDMgb3IgZmxvYXQ0ID09IDIgb3IgMyAqLwogICAgICAgIFZUUkFDRSgoImdsQ29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UubHBEYXRhKSk7CgogICAgICAgIGlmKGN1clZCTyAhPSBzZC0+dS5zLmRpZmZ1c2UuVkJPKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMuZGlmZnVzZS5WQk8pKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLmRpZmZ1c2UuVkJPOwogICAgICAgIH0KICAgICAgICBnbENvbG9yUG9pbnRlcig0LCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICAgIHNkLT51LnMuZGlmZnVzZS5kd1N0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuZGlmZnVzZS5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLmRpZmZ1c2Uuc3RyZWFtTm9dKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xDb2xvclBvaW50ZXIoNCwgR0xfVU5TSUdORURfQllURSwgLi4uKSIpOwogICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfQ09MT1JfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX0NPTE9SX0FSUkFZKSIpOwoKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfQ09MT1JfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSkiKTsKICAgICAgICBnbENvbG9yNGYoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQ29sb3I0ZigxLCAxLCAxLCAxKSIpOwogICAgfQoKICAgIC8qIFNwZWN1bGFyIENvbG91ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMuc3BlY3VsYXIubHBEYXRhIHx8IHNkLT51LnMuc3BlY3VsYXIuVkJPKSB7CiAgICAgICAgVFJBQ0UoInNldHRpbmcgc3BlY3VsYXIgY29sb3VyXG4iKTsKICAgICAgICAvKiBOb3RlIGR3VHlwZSA9PSBmbG9hdDMgb3IgZmxvYXQ0ID09IDIgb3IgMyAqLwogICAgICAgIFZUUkFDRSgoImdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5zcGVjdWxhci5scERhdGEpKTsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5zcGVjdWxhci5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMuc3BlY3VsYXIuVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnNwZWN1bGFyLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyRVhUKSg0LCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuc3BlY3VsYXIuc3RyZWFtTm9dKTsKICAgICAgICAgICAgdmNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yUG9pbnRlckVYVCg0LCBHTF9VTlNJR05FRF9CWVRFLCAuLi4pIik7CiAgICAgICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIHZjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9TRUNPTkRBUllfQ09MT1JfQVJSQVlfRVhUKSIpOwogICAgICAgIH0gZWxzZSB7CgogICAgICAgIC8qIE1pc3Npbmcgc3BlY3VsYXIgY29sb3IgaXMgbm90IGNyaXRpY2FsLCBubyB3YXJuaW5ncyAqLwogICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewoKICAgICAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9TRUNPTkRBUllfQ09MT1JfQVJSQVlfRVhUKSIpOwogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3IzZkVYVCkoMCwgMCwgMCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yM2ZFWFQoMCwgMCwgMCkiKTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLyogTWlzc2luZyBzcGVjdWxhciBjb2xvciBpcyBub3QgY3JpdGljYWwsIG5vIHdhcm5pbmdzICovCiAgICAgICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CiAgICB9CgogICAgLyogVGV4dHVyZSBjb29yZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgZm9yICh0ZXh0dXJlTm8gPSAwOyB0ZXh0dXJlTm8gPCBHTF9MSU1JVFModGV4dHVyZV9zdGFnZXMpOyArK3RleHR1cmVObykgewogICAgICAgIC8qIFRoZSBjb2RlIGJlbG93IHVzZXMgZ2xDbGllbnRBY3RpdmVUZXh0dXJlIGFuZCBnbE11bHRpVGV4Q29vcmQqIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGUgR0xfQVJCX211bHRpdGV4dHVyZSBleHRlbnNpb24uICovCiAgICAgICAgLyogQWJvcnQgaWYgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uLiAqLwogICAgICAgIGlmICghR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBGSVhNRSgiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPnRleHR1cmVzW3RleHR1cmVOb10gIT0gTlVMTCkgewogICAgICAgICAgICBpbnQgY29vcmRJZHggPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbdGV4dHVyZU5vXVtXSU5FRDNEVFNTX1RFWENPT1JESU5ERVhdOwoKICAgICAgICAgICAgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFt0ZXh0dXJlTm9dOwogICAgICAgICAgICAvKiBUaGUgZ2wgdGV4dHVyZSB1bml0IHdpbGwgbmV2ZXIgYmUgLTEgZm9yIGEgYm91bmQgdGV4dHVyZSAqLwogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQiIpOwoKICAgICAgICAgICAgaWYgKGNvb3JkSWR4ID49IE1BWF9URVhUVVJFUykgewogICAgICAgICAgICAgICAgVlRSQUNFKCgidGV4OiAlZCAtIFNraXAgdGV4IGNvb3JkcywgYXMgYmVpbmcgc3lzdGVtIGdlbmVyYXRlZFxuIiwgdGV4dHVyZU5vKSk7CiAgICAgICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xNdWx0aVRleENvb3JkNGZBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlLCAwLCAwLCAwLCAxKSk7CgogICAgICAgICAgICB9IGVsc2UgaWYgKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5scERhdGEgPT0gTlVMTCAmJiBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uVkJPID09IDApIHsKICAgICAgICAgICAgICAgIFZUUkFDRSgoIkJvdW5kIHRleHR1cmUgYnV0IG5vIHRleHR1cmUgY29vcmRpbmF0ZXMgc3VwcGxpZWQsIHNvIHNraXBwaW5nXG4iKSk7CiAgICAgICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xNdWx0aVRleENvb3JkNGZBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlLCAwLCAwLCAwLCAxKSk7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVFJBQ0UoIlNldHRpbmcgdXAgdGV4dHVyZSAldSwgaWR4ICVkLCBjb3JkaW5keCAldSwgZGF0YSAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVObywgbWFwcGVkX3N0YWdlLCBjb29yZElkeCwgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLmxwRGF0YSk7CiAgICAgICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTykgewogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5WQk8pKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICAgICAgY3VyVkJPID0gc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8qIFRoZSBjb29yZHMgdG8gc3VwcGx5IGRlcGVuZCBjb21wbGV0ZWx5IG9uIHRoZSBmdmYgLyB2ZXJ0ZXggc2hhZGVyICovCiAgICAgICAgICAgICAgICBnbFRleENvb3JkUG9pbnRlcigKICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLnN0cmVhbU5vXSk7CiAgICAgICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIHRleHR1cmVObykpOwogICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbE11bHRpVGV4Q29vcmQ0ZkFSQihHTF9URVhUVVJFMF9BUkIgKyB0ZXh0dXJlTm8sIDAsIDAsIDAsIDEpKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgLyogVGhlIG51bWJlciBvZiB0aGUgbWFwcGVkIHN0YWdlcyBpbmNyZXNlcyBtb25vdG9uaWMsIHNvIHdlJ3JlIGZpbmUgdG8gdXNlIHRoZSBsYXN0IHVzZWQgb25lICovCiAgICAgICAgZm9yICh0ZXh0dXJlTm8gPSBtYXBwZWRfc3RhZ2UgKyAxOyB0ZXh0dXJlTm8gPCBHTF9MSU1JVFModGV4dHVyZXMpOyArK3RleHR1cmVObykgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyB0ZXh0dXJlTm8pKTsKICAgICAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xNdWx0aVRleENvb3JkNGZBUkIoR0xfVEVYVFVSRTBfQVJCICsgdGV4dHVyZU5vLCAwLCAwLCAwLCAxKSk7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1ByaW1pdGl2ZVRyYWNlRGF0YUxvY2F0aW9ucygKICAgIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpkYXRhTG9jYXRpb25zKSB7CgogICAgLyogRHVtcCBvdXQgd2hhdCBwYXJ0cyB3ZSBoYXZlIHN1cHBsaWVkICovCiAgICBUUkFDRSgiU3RyaWRlZCBEYXRhOlxuIik7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgcG9zaXRpb24pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGJsZW5kV2VpZ2h0cyk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgYmxlbmRNYXRyaXhJbmRpY2VzKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBub3JtYWwpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHBTaXplKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBkaWZmdXNlKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBzcGVjdWxhcik7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzBdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbMV0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1syXSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzNdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbNF0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1s1XSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzZdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbN10pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHBvc2l0aW9uMik7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgbm9ybWFsMik7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGFuZ2VudCk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgYmlub3JtYWwpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRlc3NGYWN0b3IpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGZvZyk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgZGVwdGgpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHNhbXBsZSk7CgogICAgcmV0dXJuOwp9CgovKiBIZWxwZXIgZm9yIHZlcnRleGRlY2xhcmF0aW9uKCkgKi8Kc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZVN0cmVhbXMoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgQk9PTCB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiwgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIElXaW5lRDNERGV2aWNlSW1wbCAqZGV2aWNlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZTsKICAgIEJPT0wgZml4dXAgPSBGQUxTRTsKICAgIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpkYXRhTG9jYXRpb25zID0gJmRldmljZS0+c3RyaWRlZF9zdHJlYW1zOwoKICAgIGlmKGRldmljZS0+dXBfc3RyaWRlZCkgewogICAgICAgIC8qIE5vdGU6IHRoaXMgaXMgYSBkZHJhdyBmaXhlZC1mdW5jdGlvbiBjb2RlIHBhdGggKi8KICAgICAgICBUUkFDRSgiPT09PT09PT09PT09PT09PSBTdHJpZGVkIElucHV0ID09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgICAgIG1lbWNweShkYXRhTG9jYXRpb25zLCBkZXZpY2UtPnVwX3N0cmlkZWQsIHNpemVvZigqZGF0YUxvY2F0aW9ucykpOwoKICAgICAgICBpZihUUkFDRV9PTihkM2QpKSB7CiAgICAgICAgICAgIGRyYXdQcmltaXRpdmVUcmFjZURhdGFMb2NhdGlvbnMoZGF0YUxvY2F0aW9ucyk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChzdGF0ZWJsb2NrLT52ZXJ0ZXhEZWNsKSB7CiAgICAgICAgLyogTm90ZTogVGhpcyBpcyBhIGZpeGVkIGZ1bmN0aW9uIG9yIHNoYWRlciBjb2RlcGF0aC4KICAgICAgICAgKiBUaGlzIG1lYW5zIGl0IG11c3QgaGFuZGxlIGJvdGggdHlwZXMgb2Ygc3RyaWRlZCBkYXRhLgogICAgICAgICAqIFNoYWRlcnMgbXVzdCBnbyB0aHJvdWdoIGhlcmUgdG8gemVybyB0aGUgc3RyaWRlZCBkYXRhLCBldmVuIGlmIHRoZXkKICAgICAgICAgKiBkb24ndCBzZXQgYW55IGRlY2xhcmF0aW9uIGF0IGFsbAogICAgICAgICAqLwogICAgICAgIFRSQUNFKCI9PT09PT09PT09PT09PT09IFZlcnRleCBEZWNsYXJhdGlvbiAgPT09PT09PT09PT09PT09PT09PVxuIik7CiAgICAgICAgbWVtc2V0KGRhdGFMb2NhdGlvbnMsIDAsIHNpemVvZigqZGF0YUxvY2F0aW9ucykpOwogICAgICAgIHByaW1pdGl2ZURlY2xhcmF0aW9uQ29udmVydFRvU3RyaWRlZERhdGEoKElXaW5lRDNERGV2aWNlICopIGRldmljZSwKICAgICAgICAgICAgICAgIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uLCBkYXRhTG9jYXRpb25zLCAmZml4dXApOwogICAgfSBlbHNlIHsKICAgICAgICAvKiBOb3RlOiBUaGlzIGNvZGVwYXRoIGlzIG5vdCByZWFjaGFibGUgZnJvbSBkM2Q5IChzZWUgZnZmLT5kZWNsOSBjb252ZXJzaW9uKQogICAgICAgICAqIEl0IGlzIHJlYWNoYWJsZSB0aHJvdWdoIGQzZDgsIGJ1dCBvbmx5IGZvciBmaXhlZC1mdW5jdGlvbi4KICAgICAgICAgKiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGZvciBzaGFkZXJzLgogICAgICAgICAqLwogICAgICAgIFRSQUNFKCI9PT09PT09PT09PT09PT09IEZWRiA9PT09PT09PT09PT09PT09PT09XG4iKTsKICAgICAgICBtZW1zZXQoZGF0YUxvY2F0aW9ucywgMCwgc2l6ZW9mKCpkYXRhTG9jYXRpb25zKSk7CiAgICAgICAgcHJpbWl0aXZlQ29udmVydFRvU3RyaWRlZERhdGEoKElXaW5lRDNERGV2aWNlICopIGRldmljZSwgZGF0YUxvY2F0aW9ucywgJmZpeHVwKTsKICAgICAgICBpZihUUkFDRV9PTihkM2QpKSB7CiAgICAgICAgICAgIGRyYXdQcmltaXRpdmVUcmFjZURhdGFMb2NhdGlvbnMoZGF0YUxvY2F0aW9ucyk7CiAgICAgICAgfQogICAgIH0KCiAgICBpZiAoZGF0YUxvY2F0aW9ucy0+dS5zLnBvc2l0aW9uX3RyYW5zZm9ybWVkKSB7CiAgICAgICAgdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24gPSBGQUxTRTsKICAgIH0KCiAgICAvKiBVbmxvYWQgdGhlIG9sZCBhcnJheXMgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBvbmVzIHRvIGdldCBvbGQganVuayBvdXQgKi8KICAgIGlmKGNvbnRleHQtPm51bWJlcmVkQXJyYXlzTG9hZGVkKSB7CiAgICAgICAgdW5sb2FkTnVtYmVyZWRBcnJheXMoc3RhdGVibG9jayk7CiAgICAgICAgY29udGV4dC0+bnVtYmVyZWRBcnJheXNMb2FkZWQgPSBGQUxTRTsKICAgIH0KICAgIGlmKGNvbnRleHQtPm5hbWVkQXJyYXlzTG9hZGVkKSB7CiAgICAgICAgdW5sb2FkVmVydGV4RGF0YShzdGF0ZWJsb2NrKTsKICAgICAgICBjb250ZXh0LT5uYW1lZEFycmF5c0xvYWRlZCA9IEZBTFNFOwogICAgfQoKICAgIGlmKHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uKSB7CiAgICAgICAgVFJBQ0UoIkxvYWRpbmcgbnVtYmVyZWQgYXJyYXlzXG4iKTsKICAgICAgICBsb2FkTnVtYmVyZWRBcnJheXMoc3RhdGVibG9jaywgZGF0YUxvY2F0aW9ucyk7CiAgICAgICAgZGV2aWNlLT51c2VEcmF3U3RyaWRlZFNsb3cgPSBGQUxTRTsKICAgICAgICBjb250ZXh0LT5udW1iZXJlZEFycmF5c0xvYWRlZCA9IFRSVUU7CiAgICB9IGVsc2UgaWYgKGZpeHVwIHx8CiAgICAgICAgICAgICAgIChkYXRhTG9jYXRpb25zLT51LnMucFNpemUubHBEYXRhID09IE5VTEwgJiYKICAgICAgICAgICAgICAgIGRhdGFMb2NhdGlvbnMtPnUucy5kaWZmdXNlLmxwRGF0YSA9PSBOVUxMICYmCiAgICAgICAgICAgICAgICBkYXRhTG9jYXRpb25zLT51LnMuc3BlY3VsYXIubHBEYXRhID09IE5VTEwpKSB7CiAgICAgICAgLyogTG9hZCB0aGUgdmVydGV4IGRhdGEgdXNpbmcgbmFtZWQgYXJyYXlzICovCiAgICAgICAgVFJBQ0UoIkxvYWRpbmcgdmVydGV4IGRhdGFcbiIpOwogICAgICAgIGxvYWRWZXJ0ZXhEYXRhKHN0YXRlYmxvY2ssIGRhdGFMb2NhdGlvbnMpOwogICAgICAgIGRldmljZS0+dXNlRHJhd1N0cmlkZWRTbG93ID0gRkFMU0U7CiAgICAgICAgY29udGV4dC0+bmFtZWRBcnJheXNMb2FkZWQgPSBUUlVFOwogICAgfSBlbHNlIHsKICAgICAgICBUUkFDRSgiTm90IGxvYWRpbmcgdmVydGV4IGRhdGFcbiIpOwogICAgICAgIGRldmljZS0+dXNlRHJhd1N0cmlkZWRTbG93ID0gVFJVRTsKICAgIH0KCi8qIEdlbmVyYXRlIHNvbWUgZml4bWUncyBpZiB1bnN1cHBvcnRlZCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHVzZWQgKi8KI2RlZmluZSBCVUZGRVJfT1JfREFUQShfYXR0cmlidXRlKSBkYXRhTG9jYXRpb25zLT51LnMuX2F0dHJpYnV0ZS5scERhdGEKICAgIC8qIFRPRE86IEVpdGhlciBzdXBwb3J0IG1pc3NpbmcgZnVuY3Rpb25hbGl0eSBpbiBmaXh1cFZlcnRpY2VzIG9yIGJ5IGNyZWF0aW5nIGEgc2hhZGVyIHRvIHJlcGxhY2UgdGhlIHBpcGVsaW5lLiAqLwogICAgaWYgKCF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiAmJgogICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19WRVJURVhCTEVORF0gJiYKICAgICAgICAoQlVGRkVSX09SX0RBVEEoYmxlbmRNYXRyaXhJbmRpY2VzKSB8fCBCVUZGRVJfT1JfREFUQShibGVuZFdlaWdodHMpKSkgewogICAgICAgIEZJWE1FKCJWZXJ0ZXggQmxlbmRpbmcgaXMgbm90IGltcGxlbWVudGVkIHlldCAlcCAlcFxuIixkYXRhTG9jYXRpb25zLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSxkYXRhTG9jYXRpb25zLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSk7CiAgICAgICAgLyogVE9ETzogSW1wbGVtZW50IGl0IHVzaW5nIEdMX0FSQl92ZXJ0ZXhfYmxlbmQgb3Igc29mdHdhcmUgZW11bGF0aW9uIGluIGRyYXdTdHJpZGVkU2xvdyAqLwogICAgfQogICAgaWYgKCF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiAmJiAoQlVGRkVSX09SX0RBVEEocG9zaXRpb24yKSB8fCBCVUZGRVJfT1JfREFUQShub3JtYWwyKSkpIHsKICAgICAgICBGSVhNRSgiVHdlZW5pbmcgaXMgb25seSB2YWxpZCB3aXRoIHZlcnRleCBzaGFkZXJzXG4iKTsKICAgIH0KICAgIGlmICghdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24gJiYgKEJVRkZFUl9PUl9EQVRBKHRhbmdlbnQpIHx8IEJVRkZFUl9PUl9EQVRBKGJpbm9ybWFsKSkpIHsKICAgICAgICBGSVhNRSgiVGFuZ2VudCBhbmQgYmlub3JtYWwgYnVtcCBtYXBwaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCB2ZXJ0ZXggc2hhZGVyc1xuIik7CiAgICB9CiAgICBpZiAoIXVzZVZlcnRleFNoYWRlckZ1bmN0aW9uICYmIChCVUZGRVJfT1JfREFUQSh0ZXNzRmFjdG9yKSB8fCBCVUZGRVJfT1JfREFUQShmb2cpIHx8IEJVRkZFUl9PUl9EQVRBKGRlcHRoKSB8fCBCVUZGRVJfT1JfREFUQShzYW1wbGUpKSkgewogICAgICAgIEZJWE1FKCJFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHZhbGlkIHdpdGggdmVydGV4IHNoYWRlcnNcbiIpOwogICAgfQojdW5kZWYgQlVGRkVSX09SX0RBVEEKfQoKc3RhdGljIHZvaWQgdmVydGV4ZGVjbGFyYXRpb24oRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBCT09MIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uID0gRkFMU0UsIHVwZGF0ZUZvZyA9IEZBTFNFOwogICAgQk9PTCB1c2VQaXhlbFNoYWRlckZ1bmN0aW9uID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cHNfc2VsZWN0ZWRfbW9kZSAhPSBTSEFERVJfTk9ORSAmJiBzdGF0ZWJsb2NrLT5waXhlbFNoYWRlcgogICAgICAgICAgICAmJiAoKElXaW5lRDNEUGl4ZWxTaGFkZXJJbXBsICopc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5iYXNlU2hhZGVyLmZ1bmN0aW9uOwogICAgQk9PTCB0cmFuc2Zvcm1lZDsKICAgIC8qIFNvbWUgc3R1ZmYgaXMgaW4gdGhlIGRldmljZSB1bnRpbCB3ZSBoYXZlIHBlciBjb250ZXh0IHRyYWNraW5nICovCiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CiAgICBCT09MIHdhc3JodyA9IGNvbnRleHQtPmxhc3Rfd2FzX3JodzsKCiAgICAvKiBTaGFkZXJzIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBBUkJfUFJPR1JBTSwgR0xTTCwgb3Igc29mdHdhcmUgLQogICAgICogaGVyZSBzaW1wbHkgY2hlY2sgd2hldGhlciBhIHNoYWRlciB3YXMgc2V0LCBvciB0aGUgdXNlciBkaXNhYmxlZCBzaGFkZXJzCiAgICAgKi8KICAgIGlmIChkZXZpY2UtPnZzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYgc3RhdGVibG9jay0+dmVydGV4U2hhZGVyICYmCiAgICAgICAoKElXaW5lRDNEVmVydGV4U2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnZlcnRleFNoYWRlciktPmJhc2VTaGFkZXIuZnVuY3Rpb24gIT0gTlVMTCkgewogICAgICAgIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uID0gVFJVRTsKCiAgICAgICAgaWYoKChJV2luZUQzRFZlcnRleFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT52ZXJ0ZXhTaGFkZXIpLT51c2VzRm9nICE9IGNvbnRleHQtPmxhc3Rfd2FzX2ZvZ2d5X3NoYWRlcikgewogICAgICAgICAgICB1cGRhdGVGb2cgPSBUUlVFOwogICAgICAgIH0KICAgIH0gZWxzZSBpZihjb250ZXh0LT5sYXN0X3dhc19mb2dneV9zaGFkZXIpIHsKICAgICAgICB1cGRhdGVGb2cgPSBUUlVFOwogICAgfQoKICAgIGhhbmRsZVN0cmVhbXMoc3RhdGVibG9jaywgdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24sIGNvbnRleHQpOwoKICAgIHRyYW5zZm9ybWVkID0gZGV2aWNlLT5zdHJpZGVkX3N0cmVhbXMudS5zLnBvc2l0aW9uX3RyYW5zZm9ybWVkOwogICAgaWYgKHRyYW5zZm9ybWVkKSB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IEZBTFNFOwoKICAgIGlmKHRyYW5zZm9ybWVkICE9IGNvbnRleHQtPmxhc3Rfd2FzX3JodyAmJiAhdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24pIHsKICAgICAgICB1cGRhdGVGb2cgPSBUUlVFOwogICAgfQoKICAgIC8qIFJlYXBwbHkgbGlnaHRpbmcgaWYgaXQgaXMgbm90IHNjaGVkdWxlZCBmb3IgcmVhcHBsaWNhdGlvbiBhbHJlYWR5ICovCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfTElHSFRJTkcpKSkgewogICAgICAgIHN0YXRlX2xpZ2h0aW5nKFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfTElHSFRJTkcpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgIH0KCiAgICBpZiAodHJhbnNmb3JtZWQpIHsKICAgICAgICBjb250ZXh0LT5sYXN0X3dhc19yaHcgPSBUUlVFOwogICAgfSBlbHNlIHsKCiAgICAgICAgLyogVW50cmFuc2Zvcm1lZCwgc28gcmVsaWVzIG9uIHRoZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzICovCiAgICAgICAgY29udGV4dC0+bGFzdF93YXNfcmh3ID0gRkFMU0U7CiAgICAgICAgLyogVGhpcyB0dXJucyBvZmYgdGhlIFogc2NhbGUgdHJpY2sgdG8gJ2Rpc2FibGUnIHZpZXdwb3J0IGZydXN0dW0gY2xpcHBpbmcgaW4gcmh3IG1vZGUqLwogICAgICAgIGRldmljZS0+dW50cmFuc2Zvcm1lZCA9IFRSVUU7CgogICAgICAgIC8qIFRvZG8gZm9yIHN3IHNoYWRlcnM6IFZlcnRleCBTaGFkZXIgb3V0cHV0IGlzIGFscmVhZHkgdHJhbnNmb3JtZWQsIHNvIHNldCB1cCBpZGVudGl0eSBtYXRyaWNlcwogICAgICAgICAqIE5vdCBuZWVkZWQgYXMgbG9uZyBhcyBvbmx5IGh3IHNoYWRlcnMgYXJlIHN1cHBvcnRlZAogICAgICAgICAqLwoKICAgICAgICAvKiBUaGlzIHNldHMgdGhlIHNoYWRlciBvdXRwdXQgcG9zaXRpb24gY29ycmVjdGlvbiBjb25zdGFudHMuCiAgICAgICAgICogVE9ETzogTW92ZSB0byB0aGUgdmlld3BvcnQgc3RhdGUKICAgICAgICAgKi8KICAgICAgICBpZiAodXNlVmVydGV4U2hhZGVyRnVuY3Rpb24pIHsKICAgICAgICAgICAgZGV2aWNlLT5wb3NGaXh1cFsxXSA9IGRldmljZS0+cmVuZGVyX29mZnNjcmVlbiA/IC0xLjAgOiAxLjA7CiAgICAgICAgfQogICAgfQoKICAgIC8qIERvbid0IGhhdmUgdG8gYXBwbHkgdGhlIG1hdHJpY2VzIHdoZW4gdmVydGV4IHNoYWRlcnMgYXJlIHVzZWQuIFdoZW4gdnNoYWRlcnMgYXJlIHR1cm5lZAogICAgICogb2ZmIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWdhaW4gYW55d2F5IHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHByb3Blcmx5IHNldAogICAgICovCiAgICBpZighdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24pIHsKICAgICAgICAvKiBUT0RPOiBNb3ZlIHRoaXMgbWFpbmx5IHRvIHRoZSB2aWV3cG9ydCBzdGF0ZSBhbmQgb25seSBhcHBseSB3aGVuIHRoZSB2cCBoYXMgY2hhbmdlZAogICAgICAgICAqIG9yIHRyYW5zZm9ybWVkIC8gdW50cmFuc2Zvcm1lZCB3YXMgc3dpdGNoZWQKICAgICAgICAgKi8KICAgICAgIGlmKHdhc3JodyAhPSBjb250ZXh0LT5sYXN0X3dhc19yaHcgJiYKICAgICAgICAgICFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19QUk9KRUNUSU9OKSkgJiYKICAgICAgICAgICFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVklFV1BPUlQpKSB7CiAgICAgICAgICAgIHRyYW5zZm9ybV9wcm9qZWN0aW9uKFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfUFJPSkVDVElPTiksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KICAgICAgICAvKiBXb3JsZCBtYXRyaXggbmVlZHMgcmVhcHBsaWNhdGlvbiBoZXJlIG9ubHkgaWYgd2UncmUgc3dpdGNoaW5nIGJldHdlZW4gcmh3IGFuZCBub24tcmh3CiAgICAgICAgICogbW9kZS4KICAgICAgICAgKgogICAgICAgICAqIElmIGEgdmVydGV4IHNoYWRlciBpcyB1c2VkLCB0aGUgd29ybGQgbWF0cml4IGNoYW5nZWQgYW5kIHRoZW4gdmVydGV4IHNoYWRlciB1bmJvdW5kCiAgICAgICAgICogdGhpcyBjaGVjayB3aWxsIGZhaWwgYW5kIHRoZSBtYXRyaXggbm90IGFwcGxpZWQgYWdhaW4uIFRoaXMgaXMgT0sgYmVjYXVzZSBhIHNpbXBsZQogICAgICAgICAqIHdvcmxkIG1hdHJpeCBjaGFuZ2UgcmVhcHBsaWVzIHRoZSBtYXRyaXggLSBUaGVzZSBjaGVja3MgaGVyZSBhcmUgb25seSB0byBzYXRpc2Z5IHRoZQogICAgICAgICAqIG5lZWRzIG9mIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBXb3JsZCBhbmQgdmlldyBtYXRyaXggZ28gaW50byB0aGUgc2FtZSBnbCBtYXRyaXgsIHNvIG9ubHkgYXBwbHkgdGhlbSB3aGVuIG5laXRoZXIgaXMKICAgICAgICAgKiBkaXJ0eQogICAgICAgICAqLwogICAgICAgIGlmKHRyYW5zZm9ybWVkICE9IHdhc3JodyAmJgogICAgICAgICAgICFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19XT1JMRE1BVFJJWCgwKSkpICYmCiAgICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1ZJRVcpKSkgewogICAgICAgICAgICB0cmFuc2Zvcm1fd29ybGQoU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19XT1JMRE1BVFJJWCgwKSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KCiAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSkpIHsKICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQoU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KCiAgICAgICAgaWYoY29udGV4dC0+bGFzdF93YXNfdnNoYWRlciAmJiAhaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQ0xJUFBMQU5FRU5BQkxFKSkpIHsKICAgICAgICAgICAgc3RhdGVfY2xpcHBpbmcoU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DTElQUExBTkVFTkFCTEUpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIC8qIFdlIGNvbXBpbGUgdGhlIHNoYWRlciBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgdmVydGV4IGRlY2xhcmF0aW9uCiAgICAgICAgICogaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZG8gYW55IHN3aXp6bGluZyBmb3IgRDNEQ09MT1IKICAgICAgICAgKiByZWdpc3RlcnMuIElmIHRoZSBzaGFkZXIgaXMgYWxyZWFkeSBjb21waWxlZCB0aGlzIGNhbGwgd2lsbCBkbyBub3RoaW5nLiAqLwogICAgICAgIElXaW5lRDNEVmVydGV4U2hhZGVyX0NvbXBpbGVTaGFkZXIoc3RhdGVibG9jay0+dmVydGV4U2hhZGVyKTsKCiAgICAgICAgaWYoIWNvbnRleHQtPmxhc3Rfd2FzX3ZzaGFkZXIpIHsKICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgIHN0YXRpYyBCT09MIHdhcm5lZCA9IEZBTFNFOwogICAgICAgICAgICAvKiBEaXNhYmxlIGFsbCBjbGlwIHBsYW5lcyB0byBnZXQgZGVmaW5lZCByZXN1bHRzIG9uIGFsbCBkcml2ZXJzLiBTZWUgY29tbWVudCBpbiB0aGUKICAgICAgICAgICAgICogc3RhdGVfY2xpcHBpbmcgc3RhdGUgaGFuZGxlcgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgR0xfTElNSVRTKGNsaXBwbGFuZXMpOyBpKyspIHsKICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9DTElQX1BMQU5FMCArIGkpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9DTElQX1BMQU5FMCArIGkpIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCF3YXJuZWQgJiYgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRV0pIHsKICAgICAgICAgICAgICAgIEZJWE1FKCJDbGlwcGluZyBub3Qgc3VwcG9ydGVkIHdpdGggdmVydGV4IHNoYWRlcnNcbiIpOwogICAgICAgICAgICAgICAgd2FybmVkID0gVFJVRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKiBWZXJ0ZXggYW5kIHBpeGVsIHNoYWRlcnMgYXJlIGFwcGxpZWQgdG9nZXRoZXIgZm9yIG5vdywgc28gbGV0IHRoZSBsYXN0IGRpcnR5IHN0YXRlIGRvIHRoZQogICAgICogYXBwbGljYXRpb24KICAgICAqLwogICAgaWYgKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfUElYRUxTSEFERVIpKSB7CiAgICAgICAgZGV2aWNlLT5zaGFkZXJfYmFja2VuZC0+c2hhZGVyX3NlbGVjdCgoSVdpbmVEM0REZXZpY2UgKilkZXZpY2UsIHVzZVBpeGVsU2hhZGVyRnVuY3Rpb24sIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uKTsKCiAgICAgICAgaWYgKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQpICYmICh1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiB8fCB1c2VQaXhlbFNoYWRlckZ1bmN0aW9uKSkgewogICAgICAgICAgICBzaGFkZXJjb25zdGFudChTVEFURV9WRVJURVhTSEFERVJDT05TVEFOVCwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgfQoKICAgIGNvbnRleHQtPmxhc3Rfd2FzX3ZzaGFkZXIgPSB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbjsKCiAgICBpZih1cGRhdGVGb2cpIHsKICAgICAgICBzdGF0ZV9mb2coU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdmlld3BvcnQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBnbERlcHRoUmFuZ2Uoc3RhdGVibG9jay0+dmlld3BvcnQuTWluWiwgc3RhdGVibG9jay0+dmlld3BvcnQuTWF4Wik7CiAgICBjaGVja0dMY2FsbCgiZ2xEZXB0aFJhbmdlIik7CiAgICAvKiBOb3RlOiBHTCByZXF1aXJlcyBsb3dlciBsZWZ0LCBEaXJlY3RYIHN1cHBsaWVzIHVwcGVyIGxlZnQuIFRoaXMgaXMgcmV2ZXJzZWQgd2hlbiB1c2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nCiAgICAgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICBnbFZpZXdwb3J0KHN0YXRlYmxvY2stPnZpZXdwb3J0LlgsCiAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT52aWV3cG9ydC5ZLAogICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dmlld3BvcnQuV2lkdGgsIHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodCk7CiAgICB9IGVsc2UgewogICAgICAgIGdsVmlld3BvcnQoc3RhdGVibG9jay0+dmlld3BvcnQuWCwKICAgICAgICAgICAgICAgICAgICgoKElXaW5lRDNEU3VyZmFjZUltcGwgKilzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfdGFyZ2V0c1swXSktPmN1cnJlbnREZXNjLkhlaWdodCAtIChzdGF0ZWJsb2NrLT52aWV3cG9ydC5ZICsgc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0KSksCiAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT52aWV3cG9ydC5XaWR0aCwgc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0KTsKICAgIH0KCiAgICBjaGVja0dMY2FsbCgiZ2xWaWV3cG9ydCIpOwoKICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBvc0ZpeHVwWzJdID0gMC45IC8gc3RhdGVibG9jay0+dmlld3BvcnQuV2lkdGg7CiAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5wb3NGaXh1cFszXSA9IC0wLjkgLyBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQ7CiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfUFJPSkVDVElPTikpKSB7CiAgICAgICAgdHJhbnNmb3JtX3Byb2plY3Rpb24oU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19QUk9KRUNUSU9OKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICB9Cgp9CgpzdGF0aWMgdm9pZCBsaWdodChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFVJTlQgSW5kZXggPSBzdGF0ZSAtIFNUQVRFX0FDVElWRUxJR0hUKDApOwogICAgUExJR0hUSU5GT0VMICpsaWdodEluZm8gPSBzdGF0ZWJsb2NrLT5hY3RpdmVMaWdodHNbSW5kZXhdOwoKICAgIGlmKCFsaWdodEluZm8pIHsKICAgICAgICBnbERpc2FibGUoR0xfTElHSFQwICsgSW5kZXgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfTElHSFQwICsgSW5kZXgpIik7CiAgICB9IGVsc2UgewogICAgICAgIGZsb2F0IHF1YWRfYXR0OwogICAgICAgIGZsb2F0IGNvbFJHQkFbXSA9IHswLjAsIDAuMCwgMC4wLCAwLjB9OwoKICAgICAgICAvKiBMaWdodCBzZXR0aW5ncyBhcmUgYWZmZWN0ZWQgYnkgdGhlIG1vZGVsIHZpZXcgaW4gT3BlbkdMLCB0aGUgVmlldyB0cmFuc2Zvcm0gaW4gZGlyZWN0M2QqLwogICAgICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOwogICAgICAgIGdsUHVzaE1hdHJpeCgpOwogICAgICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1ZJRVddLnUubVswXVswXSk7CgogICAgICAgIC8qIERpZmZ1c2U6ICovCiAgICAgICAgY29sUkdCQVswXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5EaWZmdXNlLnI7CiAgICAgICAgY29sUkdCQVsxXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5EaWZmdXNlLmc7CiAgICAgICAgY29sUkdCQVsyXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5EaWZmdXNlLmI7CiAgICAgICAgY29sUkdCQVszXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5EaWZmdXNlLmE7CiAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9ESUZGVVNFLCBjb2xSR0JBKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2Iik7CgogICAgICAgIC8qIFNwZWN1bGFyICovCiAgICAgICAgY29sUkdCQVswXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5TcGVjdWxhci5yOwogICAgICAgIGNvbFJHQkFbMV0gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuU3BlY3VsYXIuZzsKICAgICAgICBjb2xSR0JBWzJdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlNwZWN1bGFyLmI7CiAgICAgICAgY29sUkdCQVszXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5TcGVjdWxhci5hOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfU1BFQ1VMQVIsIGNvbFJHQkEpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYiKTsKCiAgICAgICAgLyogQW1iaWVudCAqLwogICAgICAgIGNvbFJHQkFbMF0gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQW1iaWVudC5yOwogICAgICAgIGNvbFJHQkFbMV0gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQW1iaWVudC5nOwogICAgICAgIGNvbFJHQkFbMl0gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQW1iaWVudC5iOwogICAgICAgIGNvbFJHQkFbM10gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQW1iaWVudC5hOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfQU1CSUVOVCwgY29sUkdCQSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmdiIpOwoKICAgICAgICBpZiAoKGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5SYW5nZSAqbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlJhbmdlKSA+PSBGTFRfTUlOKSB7CiAgICAgICAgICAgIHF1YWRfYXR0ID0gMS40LyhsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuUmFuZ2UgKmxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5SYW5nZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcXVhZF9hdHQgPSAwOyAvKiAgMCBvciAgTUFYPyAgKDAgc2VlbXMgdG8gYmUgb2spICovCiAgICAgICAgfQoKICAgICAgICAvKiBEbyBub3QgYXNzaWduIGF0dGVudWF0aW9uIHZhbHVlcyBmb3IgbGlnaHRzIHRoYXQgZG8gbm90IHVzZSB0aGVtLiBEM0QgYXBwcyBhcmUgZnJlZSB0byBwYXNzIGFueSBqdW5rLAogICAgICAgICAqIGJ1dCBnbCBkcml2ZXJzIHVzZSB0aGVtIGFuZCBtYXkgY3Jhc2ggZHVlIHRvIGJhZCBBdHRlbnVhdGlvbiB2YWx1ZXMuIE5lZWQgZm9yIFNwZWVkIG1vc3Qgd2FudGVkIHNldHMKICAgICAgICAgKiBBdHRlbnVhdGlvbjAgdG8gTmFOIGFuZCBjcmFzaGVzIGluIHRoZSBnbCBsaWIKICAgICAgICAgKi8KCiAgICAgICAgc3dpdGNoIChsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuVHlwZSkgewogICAgICAgICAgICBjYXNlIFdJTkVEM0RMSUdIVF9QT0lOVDoKICAgICAgICAgICAgICAgIC8qIFBvc2l0aW9uICovCiAgICAgICAgICAgICAgICBnbExpZ2h0ZnYoR0xfTElHSFQwICsgSW5kZXgsIEdMX1BPU0lUSU9OLCAmbGlnaHRJbmZvLT5saWdodFBvc25bMF0pOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmdiIpOwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX1NQT1RfQ1VUT0ZGLCBsaWdodEluZm8tPmN1dG9mZik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIC8qIEF0dGVudWF0aW9uIC0gQXJlIHRoZXNlIHJpZ2h0PyBndWVzc2luZy4uLiAqLwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX0NPTlNUQU5UX0FUVEVOVUFUSU9OLCAgbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkF0dGVudWF0aW9uMCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9MSU5FQVJfQVRURU5VQVRJT04sICAgIGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjEpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICBpZiAocXVhZF9hdHQgPCBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQXR0ZW51YXRpb24yKSBxdWFkX2F0dCA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjI7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfUVVBRFJBVElDX0FUVEVOVUFUSU9OLCBxdWFkX2F0dCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBSYW5nZSAqLwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFdJTkVEM0RMSUdIVF9TUE9UOgogICAgICAgICAgICAgICAgLyogUG9zaXRpb24gKi8KICAgICAgICAgICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfUE9TSVRJT04sICZsaWdodEluZm8tPmxpZ2h0UG9zblswXSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2Iik7CiAgICAgICAgICAgICAgICAvKiBEaXJlY3Rpb24gKi8KICAgICAgICAgICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfU1BPVF9ESVJFQ1RJT04sICZsaWdodEluZm8tPmxpZ2h0RGlyblswXSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2Iik7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfU1BPVF9FWFBPTkVOVCwgbGlnaHRJbmZvLT5leHBvbmVudCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUE9UX0NVVE9GRiwgbGlnaHRJbmZvLT5jdXRvZmYpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICAvKiBBdHRlbnVhdGlvbiAtIEFyZSB0aGVzZSByaWdodD8gZ3Vlc3NpbmcuLi4gKi8KICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9DT05TVEFOVF9BVFRFTlVBVElPTiwgIGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjApOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfTElORUFSX0FUVEVOVUFUSU9OLCAgICBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQXR0ZW51YXRpb24xKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgaWYgKHF1YWRfYXR0IDwgbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkF0dGVudWF0aW9uMikgcXVhZF9hdHQgPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQXR0ZW51YXRpb24yOwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX1FVQURSQVRJQ19BVFRFTlVBVElPTiwgcXVhZF9hdHQpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICAvKiBGSVhNRTogUmFuZ2UgKi8KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBXSU5FRDNETElHSFRfRElSRUNUSU9OQUw6CiAgICAgICAgICAgICAgICAvKiBEaXJlY3Rpb24gKi8KICAgICAgICAgICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfUE9TSVRJT04sICZsaWdodEluZm8tPmxpZ2h0UG9zblswXSk7IC8qIE5vdGUgZ2wgdXNlcyB3IHBvc2l0aW9uIG9mIDAgZm9yIGRpcmVjdGlvbiEgKi8KICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUE9UX0NVVE9GRiwgbGlnaHRJbmZvLT5jdXRvZmYpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfU1BPVF9FWFBPTkVOVCwgMC4wZik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIEZJWE1FKCJVbnJlY29nbml6ZWQgbGlnaHQgdHlwZSAlZFxuIiwgbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlR5cGUpOwogICAgICAgIH0KCiAgICAgICAgLyogUmVzdG9yZSB0aGUgbW9kZWx2aWV3IG1hdHJpeCAqLwogICAgICAgIGdsUG9wTWF0cml4KCk7CgogICAgICAgIGdsRW5hYmxlKEdMX0xJR0hUMCArIEluZGV4KTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfTElHSFQwICsgSW5kZXgpIik7CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdGF0aWMgdm9pZCBzY2lzc29ycmVjdChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIElXaW5lRDNEU3dhcENoYWluSW1wbCAqc3dhcGNoYWluID0gKElXaW5lRDNEU3dhcENoYWluSW1wbCAqKSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zd2FwY2hhaW5zWzBdOwogICAgUkVDVCAqcFJlY3QgPSAmc3RhdGVibG9jay0+c2Npc3NvclJlY3Q7CiAgICBSRUNUIHdpbmRvd1JlY3Q7CiAgICBVSU5UIHdpbkhlaWdodDsKCiAgICBHZXRDbGllbnRSZWN0KHN3YXBjaGFpbi0+d2luX2hhbmRsZSwgJndpbmRvd1JlY3QpOwogICAgLyogV2FybmluZzogZ2xTY2lzc29yIHVzZXMgd2luZG93IGNvb3JkaW5hdGVzLCBub3Qgdmlld3BvcnQgY29vcmRpbmF0ZXMsIHNvIG91ciB2aWV3cG9ydCBjb3JyZWN0aW9uIGRvZXMgbm90IGFwcGx5CiAgICAgKiBXYXJuaW5nMjogRXZlbiBpbiB3aW5kb3dlZCBtb2RlIHRoZSBjb29yZHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB3aW5kb3csIG5vdCB0aGUgc2NyZWVuCiAgICAgKi8KICAgIHdpbkhlaWdodCA9IHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3A7CiAgICBUUkFDRSgiKCVwKSBTZXR0aW5nIG5ldyBTY2lzc29yIFJlY3QgdG8gJWQ6JWQtJWQ6JWRcbiIsIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIHBSZWN0LT5sZWZ0LCBwUmVjdC0+Ym90dG9tIC0gd2luSGVpZ2h0LAogICAgICAgICAgcFJlY3QtPnJpZ2h0IC0gcFJlY3QtPmxlZnQsIHBSZWN0LT5ib3R0b20gLSBwUmVjdC0+dG9wKTsKICAgIGdsU2Npc3NvcihwUmVjdC0+bGVmdCwgd2luSGVpZ2h0IC0gcFJlY3QtPmJvdHRvbSwgcFJlY3QtPnJpZ2h0IC0gcFJlY3QtPmxlZnQsIHBSZWN0LT5ib3R0b20gLSBwUmVjdC0+dG9wKTsKICAgIGNoZWNrR0xjYWxsKCJnbFNjaXNzb3IiKTsKfQoKc3RhdGljIHZvaWQgaW5kZXhidWZmZXIoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihHTF9TVVBQT1JUKEFSQl9WRVJURVhfQlVGRkVSX09CSkVDVCkpIHsKICAgICAgICBpZihzdGF0ZWJsb2NrLT5zdHJlYW1Jc1VQIHx8IHN0YXRlYmxvY2stPnBJbmRleERhdGEgPT0gTlVMTCApIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQVJCLCAwKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgSVdpbmVEM0RJbmRleEJ1ZmZlckltcGwgKmliID0gKElXaW5lRDNESW5kZXhCdWZmZXJJbXBsICopIHN0YXRlYmxvY2stPnBJbmRleERhdGE7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0FSQiwgaWItPnZibykpOwogICAgICAgIH0KICAgIH0KfQoKY29uc3Qgc3RydWN0IFN0YXRlRW50cnkgU3RhdGVUYWJsZVtdID0KewogICAgICAvKiBTdGF0ZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRhdGl2ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHkgZnVuY3Rpb24gKi8KICAgIHsgLyogMCwgIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMSwgIFdJTkVEM0RSU19URVhUVVJFSEFORExFICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBIYW5kbGVkIGluIGRkcmF3ICovLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMiwgIFdJTkVEM0RSU19BTlRJQUxJQVMgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTlRJQUxJQVMpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2FudGlhbGlhcyAgICAgfSwKICAgIHsgLyogMywgIFdJTkVEM0RSU19URVhUVVJFQUREUkVTUyAgICAgICAgICAgICAgICovICAgICAgMCAvKiBIYW5kbGVkIGluIGRkcmF3ICovLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNCwgIFdJTkVEM0RSU19URVhUVVJFUEVSU1BFQ1RJVkUgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19URVhUVVJFUEVSU1BFQ1RJVkUpLCAgICAgICAgIHN0YXRlX3BlcnNwZWN0aXZlICAgfSwKICAgIHsgLyogNSwgIFdJTkVEM0RSU19XUkFQVSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQVSksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXB1ICAgICAgICAgfSwKICAgIHsgLyogNiwgIFdJTkVEM0RSU19XUkFQViAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQViksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXB2ICAgICAgICAgfSwKICAgIHsgLyogNywgIFdJTkVEM0RSU19aRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19aRU5BQkxFKSwgICAgICAgICAgICAgICAgICAgIHN0YXRlX3plbmFibGUgICAgICAgfSwKICAgIHsgLyogOCwgIFdJTkVEM0RSU19GSUxMTU9ERSAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GSUxMTU9ERSksICAgICAgICAgICAgICAgICAgIHN0YXRlX2ZpbGxtb2RlICAgICAgfSwKICAgIHsgLyogOSwgIFdJTkVEM0RSU19TSEFERU1PREUgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TSEFERU1PREUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX3NoYWRlbW9kZSAgICAgfSwKICAgIHsgLyogMTAsIFdJTkVEM0RSU19MSU5FUEFUVEVSTiAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MSU5FUEFUVEVSTiksICAgICAgICAgICAgICAgIHN0YXRlX2xpbmVwYXR0ZXJuICAgfSwKICAgIHsgLyogMTEsIFdJTkVEM0RSU19NT05PRU5BQkxFICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19NT05PRU5BQkxFKSwgICAgICAgICAgICAgICAgIHN0YXRlX21vbm9lbmFibGUgICAgfSwKICAgIHsgLyogMTIsIFdJTkVEM0RSU19ST1AyICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ST1AyKSwgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3JvcDIgICAgICAgICAgfSwKICAgIHsgLyogMTMsIFdJTkVEM0RSU19QTEFORU1BU0sgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QTEFORU1BU0spLCAgICAgICAgICAgICAgICAgIHN0YXRlX3BsYW5lbWFzayAgICAgfSwKICAgIHsgLyogMTQsIFdJTkVEM0RSU19aV1JJVEVFTkFCTEUgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19aV1JJVEVFTkFCTEUpLCAgICAgICAgICAgICAgIHN0YXRlX3p3cml0ZW5hYmxlICAgfSwKICAgIHsgLyogMTUsIFdJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEUgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX2FscGhhICAgICAgICAgfSwKICAgIHsgLyogMTYsIFdJTkVEM0RSU19MQVNUUElYRUwgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MQVNUUElYRUwpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2xhc3RwaXhlbCAgICAgfSwKICAgIHsgLyogMTcsIFdJTkVEM0RSU19URVhUVVJFTUFHICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBIYW5kbGVkIGluIGRkcmF3ICovLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTgsIFdJTkVEM0RSU19URVhUVVJFTUlOICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBIYW5kbGVkIGluIGRkcmF3ICovLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTksIFdJTkVEM0RSU19TUkNCTEVORCAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyogMjAsIFdJTkVEM0RSU19ERVNUQkxFTkQgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyogMjEsIFdJTkVEM0RSU19URVhUVVJFTUFQQkxFTkQgICAgICAgICAgICAgICovICAgICAgMCAvKiBIYW5kbGVkIGluIGRkcmF3ICovLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjIsIFdJTkVEM0RSU19DVUxMTU9ERSAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DVUxMTU9ERSksICAgICAgICAgICAgICAgICAgIHN0YXRlX2N1bGxtb2RlICAgICAgfSwKICAgIHsgLyogMjMsIFdJTkVEM0RSU19aRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19aRlVOQyksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3pmdW5jICAgICAgICAgfSwKICAgIHsgLyogMjQsIFdJTkVEM0RSU19BTFBIQVJFRiAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX2FscGhhICAgICAgICAgfSwKICAgIHsgLyogMjUsIFdJTkVEM0RSU19BTFBIQUZVTkMgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX2FscGhhICAgICAgICAgfSwKICAgIHsgLyogMjYsIFdJTkVEM0RSU19ESVRIRVJFTkFCTEUgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ESVRIRVJFTkFCTEUpLCAgICAgICAgICAgICAgIHN0YXRlX2RpdGhlcmVuYWJsZSAgfSwKICAgIHsgLyogMjcsIFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyogMjgsIFdJTkVEM0RSU19GT0dFTkFCTEUgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZyAgICAgICAgICAgfSwKICAgIHsgLyogMjksIFdJTkVEM0RSU19TUEVDVUxBUkVOQUJMRSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TUEVDVUxBUkVOQUJMRSksICAgICAgICAgICAgIHN0YXRlX3NwZWN1bGFyZW5hYmxlfSwKICAgIHsgLyogMzAsIFdJTkVEM0RSU19aVklTSUJMRSAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBOb3Qgc3VwcG9ydGVkIGFjY29yZGluZyB0byB0aGUgbXNkbiAqLywgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyogMzEsIFdJTkVEM0RSU19TVUJQSVhFTCAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVUJQSVhFTCksICAgICAgICAgICAgICAgICAgIHN0YXRlX3N1YnBpeGVsICAgICAgfSwKICAgIHsgLyogMzIsIFdJTkVEM0RSU19TVUJQSVhFTFggICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVUJQSVhFTFgpLCAgICAgICAgICAgICAgICAgIHN0YXRlX3N1YnBpeGVseCAgICAgfSwKICAgIHsgLyogMzMsIFdJTkVEM0RSU19TVElQUExFREFMUEhBICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVElQUExFREFMUEhBKSwgICAgICAgICAgICAgIHN0YXRlX3N0aXBwbGVkYWxwaGEgfSwKICAgIHsgLyogMzQsIFdJTkVEM0RSU19GT0dDT0xPUiAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dDT0xPUiksICAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZ2NvbG9yICAgICAgfSwKICAgIHsgLyogMzUsIFdJTkVEM0RSU19GT0dUQUJMRU1PREUgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZyAgICAgICAgICAgfSwKICAgIHsgLyogMzYsIFdJTkVEM0RSU19GT0dTVEFSVCAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZyAgICAgICAgICAgfSwKICAgIHsgLyogMzcsIFdJTkVEM0RSU19GT0dFTkQgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZyAgICAgICAgICAgfSwKICAgIHsgLyogMzgsIFdJTkVEM0RSU19GT0dERU5TSVRZICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dERU5TSVRZKSwgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZ2RlbnNpdHkgICAgfSwKICAgIHsgLyogMzksIFdJTkVEM0RSU19TVElQUExFRU5BQkxFICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVElQUExFRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0aXBwbGVlbmFibGUgfSwKICAgIHsgLyogNDAsIFdJTkVEM0RSU19FREdFQU5USUFMSUFTICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyogNDEsIFdJTkVEM0RSU19DT0xPUktFWUVOQUJMRSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX2FscGhhICAgICAgICAgfSwKICAgIHsgLyogNDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDMsIFdJTkVEM0RSU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19CT1JERVJDT0xPUiksICAgICAgICAgICAgICAgIHN0YXRlX2JvcmRlcmNvbG9yICAgfSwKICAgIHsgLyogNDQsIFdJTkVEM0RSU19URVhUVVJFQUREUkVTU1UgICAgICAgICAgICAgICovICAgICAgMCwgLyogSGFuZGxlZCBpbiBkZHJhdyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDUsIFdJTkVEM0RSU19URVhUVVJFQUREUkVTU1YgICAgICAgICAgICAgICovICAgICAgMCwgLyogSGFuZGxlZCBpbiBkZHJhdyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDYsIFdJTkVEM0RSU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19NSVBNQVBMT0RCSUFTKSwgICAgICAgICAgICAgIHN0YXRlX21pcG1hcGxvZGJpYXMgfSwKICAgIHsgLyogNDcsIFdJTkVEM0RSU19aQklBUyAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19aQklBUyksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3piaWFzICAgICAgICAgfSwKICAgIHsgLyogNDgsIFdJTkVEM0RSU19SQU5HRUZPR0VOQUJMRSAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyogNDksIFdJTkVEM0RSU19BTklTT1RST1BZICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTklTT1RST1BZKSwgICAgICAgICAgICAgICAgIHN0YXRlX2FuaXNvdHJvcHkgICAgfSwKICAgIHsgLyogNTAsIFdJTkVEM0RSU19GTFVTSEJBVENIICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GTFVTSEJBVENIKSwgICAgICAgICAgICAgICAgIHN0YXRlX2ZsdXNoYmF0Y2ggICAgfSwKICAgIHsgLyogNTEsIFdJTkVEM0RSU19UUkFOU0xVQ0VOVFNPUlRJTkRFUEVOREVOVCAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19UUkFOU0xVQ0VOVFNPUlRJTkRFUEVOREVOVCksIHN0YXRlX3RyYW5zbHVjZW50c2kgfSwKICAgIHsgLyogNTIsIFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTMsIFdJTkVEM0RSU19TVEVOQ0lMRkFJTCAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTQsIFdJTkVEM0RSU19TVEVOQ0lMWkZBSUwgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTUsIFdJTkVEM0RSU19TVEVOQ0lMUEFTUyAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTYsIFdJTkVEM0RSU19TVEVOQ0lMRlVOQyAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTcsIFdJTkVEM0RSU19TVEVOQ0lMUkVGICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTgsIFdJTkVEM0RSU19TVEVOQ0lMTUFTSyAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyogNTksIFdJTkVEM0RSU19TVEVOQ0lMV1JJVEVNQVNLICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMV1JJVEVNQVNLKSwgICAgICAgICAgIHN0YXRlX3N0ZW5jaWx3cml0ZSAgfSwKICAgIHsgLyogNjAsIFdJTkVEM0RSU19URVhUVVJFRkFDVE9SICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19URVhUVVJFRkFDVE9SKSwgICAgICAgICAgICAgIHN0YXRlX3RleGZhY3RvciAgICAgfSwKICAgIHsgLyogNjEsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjIsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjMsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjQsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjAwICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjUsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjAxICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGhlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjYsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjAyICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjcsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjAzICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjgsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA0ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjksIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA1ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzAsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA2ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzEsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA3ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzIsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA4ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzMsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjA5ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzQsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjEwICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzUsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjExICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzYsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjEyICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzcsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjEzICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzgsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE0ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzksIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE1ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODAsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE2ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODEsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE3ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODIsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE4ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODMsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjE5ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODQsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjIwICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODUsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjIxICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODYsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjIyICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODcsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjIzICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODgsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI0ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODksIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI1ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTAsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI2ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTEsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI3ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTIsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI4ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTMsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjI5ICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTQsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjMwICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTUsIFdJTkVEM0RSU19TVElQUExFUEFUVEVSTjMxICAgICAgICAgICAgICovICAgICAgMCAvKiBPYnNvbGV0ZSwgc2hvdWxkIGJlIGhhbmRsZWQgYnkgZGRyYXcgKi8sICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTYsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTcsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTgsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTksIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDAsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDEsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDIsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDMsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDQsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDUsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDYsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDcsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDgsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDksIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTAsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTEsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTIsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTMsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTQsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTUsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTYsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTcsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTgsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTksIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjAsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjEsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjIsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjMsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjQsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjUsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjYsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjcsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIC8qIEJpZyBob2xlIGVuZHMgKi8KICAgIHsgLyoxMjgsIFdJTkVEM0RSU19XUkFQMCAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMjksIFdJTkVEM0RSU19XUkFQMSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzAsIFdJTkVEM0RSU19XUkFQMiAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzEsIFdJTkVEM0RSU19XUkFQMyAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzIsIFdJTkVEM0RSU19XUkFQNCAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzMsIFdJTkVEM0RSU19XUkFQNSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzQsIFdJTkVEM0RSU19XUkFQNiAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzUsIFdJTkVEM0RSU19XUkFQNyAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxMzYsIFdJTkVEM0RSU19DTElQUElORyAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DTElQUElORyksICAgICAgICAgICAgICAgICAgIHN0YXRlX2NsaXBwaW5nICAgICAgfSwKICAgIHsgLyoxMzcsIFdJTkVEM0RSU19MSUdIVElORyAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MSUdIVElORyksICAgICAgICAgICAgICAgICAgIHN0YXRlX2xpZ2h0aW5nICAgICAgfSwKICAgIHsgLyoxMzgsIFdJTkVEM0RSU19FWFRFTlRTICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FWFRFTlRTKSwgICAgICAgICAgICAgICAgICAgIHN0YXRlX2V4dGVudHMgICAgICAgfSwKICAgIHsgLyoxMzksIFdJTkVEM0RSU19BTUJJRU5UICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTUJJRU5UKSwgICAgICAgICAgICAgICAgICAgIHN0YXRlX2FtYmllbnQgICAgICAgfSwKICAgIHsgLyoxNDAsIFdJTkVEM0RSU19GT0dWRVJURVhNT0RFICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19GT0dFTkFCTEUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2ZvZyAgICAgICAgICAgfSwKICAgIHsgLyoxNDEsIFdJTkVEM0RSU19DT0xPUlZFUlRFWCAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksICAgICAgICAgICAgICAgIHN0YXRlX2NvbG9ybWF0ICAgICAgfSwKICAgIHsgLyoxNDIsIFdJTkVEM0RSU19MT0NBTFZJRVdFUiAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MT0NBTFZJRVdFUiksICAgICAgICAgICAgICAgIHN0YXRlX2xvY2Fsdmlld2VyICAgfSwKICAgIHsgLyoxNDMsIFdJTkVEM0RSU19OT1JNQUxJWkVOT1JNQUxTICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19OT1JNQUxJWkVOT1JNQUxTKSwgICAgICAgICAgIHN0YXRlX25vcm1hbGl6ZSAgICAgfSwKICAgIHsgLyoxNDQsIFdJTkVEM0RSU19DT0xPUktFWUJMRU5ERU5BQkxFICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUktFWUJMRU5ERU5BQkxFKSwgICAgICAgIHN0YXRlX2NrZXlibGVuZCAgICAgfSwKICAgIHsgLyoxNDUsIFdJTkVEM0RSU19ESUZGVVNFTUFURVJJQUxTT1VSQ0UgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksICAgICAgICAgICAgICAgIHN0YXRlX2NvbG9ybWF0ICAgICAgfSwKICAgIHsgLyoxNDYsIFdJTkVEM0RSU19TUEVDVUxBUk1BVEVSSUFMU09VUkNFICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksICAgICAgICAgICAgICAgIHN0YXRlX2NvbG9ybWF0ICAgICAgfSwKICAgIHsgLyoxNDcsIFdJTkVEM0RSU19BTUJJRU5UTUFURVJJQUxTT1VSQ0UgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksICAgICAgICAgICAgICAgIHN0YXRlX2NvbG9ybWF0ICAgICAgfSwKICAgIHsgLyoxNDgsIFdJTkVEM0RSU19FTUlTU0lWRU1BVEVSSUFMU09VUkNFICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUlZFUlRFWCksICAgICAgICAgICAgICAgIHN0YXRlX2NvbG9ybWF0ICAgICAgfSwKICAgIHsgLyoxNDksIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTAsIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTEsIFdJTkVEM0RSU19WRVJURVhCTEVORCAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyoxNTIsIFdJTkVEM0RSU19DTElQUExBTkVFTkFCTEUgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DTElQUElORyksICAgICAgICAgICAgICAgICAgIHN0YXRlX2NsaXBwaW5nICAgICAgfSwKICAgIHsgLyoxNTMsIFdJTkVEM0RSU19TT0ZUV0FSRVZFUlRFWFBST0NFU1NJTkcgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyoxNTQsIFdJTkVEM0RSU19QT0lOVFNJWkUgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNJWkUpLCAgICAgICAgICAgICAgICAgIHN0YXRlX3BzaXplICAgICAgICAgfSwKICAgIHsgLyoxNTUsIFdJTkVEM0RSU19QT0lOVFNJWkVfTUlOICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNJWkVfTUlOKSwgICAgICAgICAgICAgIHN0YXRlX3BzaXplbWluICAgICAgfSwKICAgIHsgLyoxNTYsIFdJTkVEM0RSU19QT0lOVFNQUklURUVOQUJMRSAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNQUklURUVOQUJMRSksICAgICAgICAgIHN0YXRlX3BvaW50c3ByaXRlICAgfSwKICAgIHsgLyoxNTcsIFdJTkVEM0RSU19QT0lOVFNDQUxFRU5BQkxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNDQUxFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX3BzY2FsZSAgICAgICAgfSwKICAgIHsgLyoxNTgsIFdJTkVEM0RSU19QT0lOVFNDQUxFX0EgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNDQUxFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX3BzY2FsZSAgICAgICAgfSwKICAgIHsgLyoxNTksIFdJTkVEM0RSU19QT0lOVFNDQUxFX0IgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNDQUxFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX3BzY2FsZSAgICAgICAgfSwKICAgIHsgLyoxNjAsIFdJTkVEM0RSU19QT0lOVFNDQUxFX0MgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNDQUxFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX3BzY2FsZSAgICAgICAgfSwKICAgIHsgLyoxNjEsIFdJTkVEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUyAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUyksICAgICAgIHN0YXRlX211bHRpc2FtcGxlYWEgfSwKICAgIHsgLyoxNjIsIFdJTkVEM0RSU19NVUxUSVNBTVBMRU1BU0sgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19NVUxUSVNBTVBMRU1BU0spLCAgICAgICAgICAgIHN0YXRlX211bHRpc2FtcG1hc2sgfSwKICAgIHsgLyoxNjMsIFdJTkVEM0RSU19QQVRDSEVER0VTVFlMRSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QQVRDSEVER0VTVFlMRSksICAgICAgICAgICAgIHN0YXRlX3BhdGNoZWRnZXN0eWxlfSwKICAgIHsgLyoxNjQsIFdJTkVEM0RSU19QQVRDSFNFR01FTlRTICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QQVRDSFNFR01FTlRTKSwgICAgICAgICAgICAgIHN0YXRlX3BhdGNoc2VnbWVudHMgfSwKICAgIHsgLyoxNjUsIFdJTkVEM0RSU19ERUJVR01PTklUT1JUT0tFTiAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ERUJVR01PTklUT1JUT0tFTiksICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyoxNjYsIFdJTkVEM0RSU19QT0lOVFNJWkVfTUFYICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT0lOVFNJWkVfTUFYKSwgICAgICAgICAgICAgIHN0YXRlX3BzaXplbWF4ICAgICAgfSwKICAgIHsgLyoxNjcsIFdJTkVEM0RSU19JTkRFWEVEVkVSVEVYQkxFTkRFTkFCTEUgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyoxNjgsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxNjksIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzAsIFdJTkVEM0RSU19UV0VFTkZBQ1RPUiAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIHsgLyoxNzEsIFdJTkVEM0RSU19CTEVORE9QICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19CTEVORE9QKSwgICAgICAgICAgICAgICAgICAgIHN0YXRlX2JsZW5kb3AgICAgICAgfSwKICAgIHsgLyoxNzIsIFdJTkVEM0RSU19QT1NJVElPTkRFR1JFRSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19QT1NJVElPTkRFR1JFRSksICAgICAgICAgICAgIHN0YXRlX3Bvc2l0aW9uZGVncmVlfSwKICAgIHsgLyoxNzMsIFdJTkVEM0RSU19OT1JNQUxERUdSRUUgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19OT1JNQUxERUdSRUUpLCAgICAgICAgICAgICAgIHN0YXRlX25vcm1hbGRlZ3JlZSAgfSwKICAgICAgLyoxNzIsIFdJTkVEM0RSU19QT1NJVElPTk9SREVSICAgICAgICAgICAgICAgICovICAgICAgLyogVmFsdWUgYXNzaWduZWQgdG8gMiBzdGF0ZSBuYW1lcyAqLwogICAgICAvKjE3MywgV0lORUQzRFJTX05PUk1BTE9SREVSICAgICAgICAgICAgICAgICAgKi8gICAgICAvKiBWYWx1ZSBhc3NpZ25lZCB0byAyIHN0YXRlIG5hbWVzICovCiAgICB7IC8qMTc0LCBXSU5FRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUpLCAgICAgICAgICBzdGF0ZV9zY2lzc29yICAgICAgIH0sCiAgICB7IC8qMTc1LCBXSU5FRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUyAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfREVQVEhCSUFTKSwgICAgICAgICAgICAgICAgICBzdGF0ZV9kZXB0aGJpYXMgICAgIH0sCiAgICB7IC8qMTc2LCBXSU5FRDNEUlNfQU5USUFMSUFTRURMSU5FRU5BQkxFICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQUxQSEFCTEVOREVOQUJMRSksICAgICAgICAgICBzdGF0ZV9ibGVuZCAgICAgICAgIH0sCiAgICB7IC8qMTc3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc4LCBXSU5FRDNEUlNfTUlOVEVTU0VMTEFUSU9OTEVWRUwgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTc5LCBXSU5FRDNEUlNfTUFYVEVTU0VMTEFUSU9OTEVWRUwgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTgwLCBXSU5FRDNEUlNfQURBUFRJVkVURVNTX1ggICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTgxLCBXSU5FRDNEUlNfQURBUFRJVkVURVNTX1kgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTgyLCBXSU5FRDNEUlNfQURBUFRJVkVURVNTX1ogICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTgzLCBXSU5FRDNEUlNfQURBUFRJVkVURVNTX1cgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTg0LCBXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04gICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04pLCBzdGF0ZV90ZXNzZWxsYXRpb24gIH0sCiAgICB7IC8qMTg1LCBXSU5FRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRSksICAgICAgICAgICAgICBzdGF0ZV9zdGVuY2lsICAgICAgIH0sCiAgICB7IC8qMTg2LCBXSU5FRDNEUlNfQ0NXX1NURU5DSUxGQUlMICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRSksICAgICAgICAgICAgICBzdGF0ZV9zdGVuY2lsICAgICAgIH0sCiAgICB7IC8qMTg3LCBXSU5FRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRSksICAgICAgICAgICAgICBzdGF0ZV9zdGVuY2lsICAgICAgIH0sCiAgICB7IC8qMTg4LCBXSU5FRDNEUlNfQ0NXX1NURU5DSUxQQVNTICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRSksICAgICAgICAgICAgICBzdGF0ZV9zdGVuY2lsICAgICAgIH0sCiAgICB7IC8qMTg5LCBXSU5FRDNEUlNfQ0NXX1NURU5DSUxGVU5DICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1RFTkNJTEVOQUJMRSksICAgICAgICAgICAgICBzdGF0ZV9zdGVuY2lsICAgICAgIH0sCiAgICB7IC8qMTkwLCBXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTEgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRSksICAgICAgICAgICBzdGF0ZV9jb2xvcndyaXRlICAgIH0sCiAgICB7IC8qMTkxLCBXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTIgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRSksICAgICAgICAgICBzdGF0ZV9jb2xvcndyaXRlICAgIH0sCiAgICB7IC8qMTkyLCBXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTMgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRSksICAgICAgICAgICBzdGF0ZV9jb2xvcndyaXRlICAgIH0sCiAgICB7IC8qMTkzLCBXSU5FRDNEUlNfQkxFTkRGQUNUT1IgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQkxFTkRGQUNUT1IpLCAgICAgICAgICAgICAgICBzdGF0ZV9ibGVuZGZhY3RvciAgIH0sCiAgICB7IC8qMTk0LCBXSU5FRDNEUlNfU1JHQldSSVRFRU5BQkxFICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU1JHQldSSVRFRU5BQkxFKSwgICAgICAgICAgICBzdGF0ZV9zcmdid3JpdGUgICAgIH0sCiAgICB7IC8qMTk1LCBXSU5FRDNEUlNfREVQVEhCSUFTICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfREVQVEhCSUFTKSwgICAgICAgICAgICAgICAgICBzdGF0ZV9kZXB0aGJpYXMgICAgIH0sCiAgICB7IC8qMTk2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk4LCBXSU5FRDNEUlNfV1JBUDggICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMTk5LCBXSU5FRDNEUlNfV1JBUDkgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjAwLCBXSU5FRDNEUlNfV1JBUDEwICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjAxLCBXSU5FRDNEUlNfV1JBUDExICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjAyLCBXSU5FRDNEUlNfV1JBUDEyICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjAzLCBXSU5FRDNEUlNfV1JBUDEzICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjA0LCBXSU5FRDNEUlNfV1JBUDE0ICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjA1LCBXSU5FRDNEUlNfV1JBUDE1ICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfV1JBUDApLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV93cmFwICAgICAgICAgIH0sCiAgICB7IC8qMjA2LCBXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFKSwgICBzdGF0ZV9zZXBlcmF0ZWJsZW5kIH0sCiAgICB7IC8qMjA3LCBXSU5FRDNEUlNfU1JDQkxFTkRBTFBIQSAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFKSwgICBzdGF0ZV9zZXBlcmF0ZWJsZW5kIH0sCiAgICB7IC8qMjA4LCBXSU5FRDNEUlNfREVTVEJMRU5EQUxQSEEgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFKSwgICBzdGF0ZV9zZXBlcmF0ZWJsZW5kIH0sCiAgICB7IC8qMjA5LCBXSU5FRDNEUlNfQkxFTkRPUEFMUEhBICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFKSwgICBzdGF0ZV9zZXBlcmF0ZWJsZW5kIH0sCiAgICAvKiBUZXh0dXJlIHN0YWdlIHN0YXRlcyAqLwogICAgeyAvKjAsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjAsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjAsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjAsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjAsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjAsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjAsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjAsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjAsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjAsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjAsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjAsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjAsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjAsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwKSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjAsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjAsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjAsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjAsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjAsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAoKICAgIHsgLyoxLCAwMSwgV0lORUQzRFRTU19DT0xPUk9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwMiwgV0lORUQzRFRTU19DT0xPUkFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwMywgV0lORUQzRFRTU19DT0xPUkFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwNCwgV0lORUQzRFRTU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwNSwgV0lORUQzRFRTU19BTFBIQUFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwNiwgV0lORUQzRFRTU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoxLCAwNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoxLCAwOCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoxLCAwOSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoxLCAxMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoxLCAxMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCksICAgIHRleF9jb29yZGluZGV4ICAgICAgfSwKICAgIHsgLyoxLCAxMiwgV0lORUQzRFRTU19BRERSRVNTICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxMywgV0lORUQzRFRTU19BRERSRVNTVSAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxNCwgV0lORUQzRFRTU19BRERSRVNTViAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxNSwgV0lORUQzRFRTU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxNiwgV0lORUQzRFRTU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxNywgV0lORUQzRFRTU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxOCwgV0lORUQzRFRTU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAxOSwgV0lORUQzRFRTU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAyMCwgV0lORUQzRFRTU19NQVhNSVBMRVZFTCAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAyMSwgV0lORUQzRFRTU19NQVhBTklTT1RST1BZICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAyMiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSksICAgIHRleF9idW1wZW52bHNjYWxlICAgfSwKICAgIHsgLyoxLCAyMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQpLCAgIHRleF9idW1wZW52bG9mZnNldCAgfSwKICAgIHsgLyoxLCAyNCwgV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMSksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyoxLCAyNSwgV0lORUQzRFRTU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAyNiwgV0lORUQzRFRTU19DT0xPUkFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoxLCAyNywgV0lORUQzRFRTU19BTFBIQUFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoxLCAyOCwgV0lORUQzRFRTU19SRVNVTFRBUkcgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDEsIFdJTkVEM0RUU1NfUkVTVUxUQVJHKSwgICAgICAgIHRleF9yZXN1bHRhcmcgICAgICAgfSwKICAgIHsgLyoxLCAyOSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAzMCwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAzMSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxLCAzMiwgV0lORUQzRFRTU19DT05TVEFOVCAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBBcyBsb25nIGFzIHdlIGRvbid0IHN1cHBvcnQgRDNEVEFfQ09OU1RBTlQgKi8sIHN0YXRlX25vZ2wgICAgICAgICAgfSwKCiAgICB7IC8qMiwgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMiwgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMiwgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMiwgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMiwgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qMiwgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qMiwgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qMiwgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTIpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qMiwgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMiwgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgyLCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qMiwgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMiwgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjMsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjMsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjMsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjMsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjMsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjMsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjMsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjMsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjMsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjMsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjMsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjMsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjMsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjMsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUzKSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjMsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjMsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjMsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMywgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjMsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjMsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAoKICAgIHsgLyo0LCAwMSwgV0lORUQzRFRTU19DT0xPUk9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwMiwgV0lORUQzRFRTU19DT0xPUkFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwMywgV0lORUQzRFRTU19DT0xPUkFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwNCwgV0lORUQzRFRTU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwNSwgV0lORUQzRFRTU19BTFBIQUFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwNiwgV0lORUQzRFRTU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo0LCAwNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo0LCAwOCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo0LCAwOSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo0LCAxMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo0LCAxMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCksICAgIHRleF9jb29yZGluZGV4ICAgICAgfSwKICAgIHsgLyo0LCAxMiwgV0lORUQzRFRTU19BRERSRVNTICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxMywgV0lORUQzRFRTU19BRERSRVNTVSAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxNCwgV0lORUQzRFRTU19BRERSRVNTViAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxNSwgV0lORUQzRFRTU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxNiwgV0lORUQzRFRTU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxNywgV0lORUQzRFRTU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxOCwgV0lORUQzRFRTU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAxOSwgV0lORUQzRFRTU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAyMCwgV0lORUQzRFRTU19NQVhNSVBMRVZFTCAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAyMSwgV0lORUQzRFRTU19NQVhBTklTT1RST1BZICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAyMiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSksICAgIHRleF9idW1wZW52bHNjYWxlICAgfSwKICAgIHsgLyo0LCAyMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQpLCAgIHRleF9idW1wZW52bG9mZnNldCAgfSwKICAgIHsgLyo0LCAyNCwgV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNCksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyo0LCAyNSwgV0lORUQzRFRTU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAyNiwgV0lORUQzRFRTU19DT0xPUkFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo0LCAyNywgV0lORUQzRFRTU19BTFBIQUFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo0LCAyOCwgV0lORUQzRFRTU19SRVNVTFRBUkcgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDQsIFdJTkVEM0RUU1NfUkVTVUxUQVJHKSwgICAgICAgIHRleF9yZXN1bHRhcmcgICAgICAgfSwKICAgIHsgLyo0LCAyOSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAzMCwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAzMSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo0LCAzMiwgV0lORUQzRFRTU19DT05TVEFOVCAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBBcyBsb25nIGFzIHdlIGRvbid0IHN1cHBvcnQgRDNEVEFfQ09OU1RBTlQgKi8sIHN0YXRlX25vZ2wgICAgICAgICAgfSwKCiAgICB7IC8qNSwgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNSwgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNSwgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNSwgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNSwgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qNSwgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qNSwgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qNSwgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTUpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qNSwgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNSwgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg1LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qNSwgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNSwgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjYsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjYsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjYsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjYsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjYsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjYsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjYsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjYsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjYsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjYsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjYsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjYsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjYsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjYsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkU2KSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjYsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjYsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjYsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNiwgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjYsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjYsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAoKICAgIHsgLyo3LCAwMSwgV0lORUQzRFRTU19DT0xPUk9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwMiwgV0lORUQzRFRTU19DT0xPUkFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwMywgV0lORUQzRFRTU19DT0xPUkFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwNCwgV0lORUQzRFRTU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwNSwgV0lORUQzRFRTU19BTFBIQUFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwNiwgV0lORUQzRFRTU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo3LCAwNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo3LCAwOCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo3LCAwOSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo3LCAxMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo3LCAxMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCksICAgIHRleF9jb29yZGluZGV4ICAgICAgfSwKICAgIHsgLyo3LCAxMiwgV0lORUQzRFRTU19BRERSRVNTICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxMywgV0lORUQzRFRTU19BRERSRVNTVSAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxNCwgV0lORUQzRFRTU19BRERSRVNTViAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxNSwgV0lORUQzRFRTU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxNiwgV0lORUQzRFRTU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxNywgV0lORUQzRFRTU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxOCwgV0lORUQzRFRTU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAxOSwgV0lORUQzRFRTU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAyMCwgV0lORUQzRFRTU19NQVhNSVBMRVZFTCAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAyMSwgV0lORUQzRFRTU19NQVhBTklTT1RST1BZICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAyMiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSksICAgIHRleF9idW1wZW52bHNjYWxlICAgfSwKICAgIHsgLyo3LCAyMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQpLCAgIHRleF9idW1wZW52bG9mZnNldCAgfSwKICAgIHsgLyo3LCAyNCwgV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNyksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyo3LCAyNSwgV0lORUQzRFRTU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAyNiwgV0lORUQzRFRTU19DT0xPUkFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo3LCAyNywgV0lORUQzRFRTU19BTFBIQUFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo3LCAyOCwgV0lORUQzRFRTU19SRVNVTFRBUkcgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDcsIFdJTkVEM0RUU1NfUkVTVUxUQVJHKSwgICAgICAgIHRleF9yZXN1bHRhcmcgICAgICAgfSwKICAgIHsgLyo3LCAyOSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAzMCwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAzMSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo3LCAzMiwgV0lORUQzRFRTU19DT05TVEFOVCAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBBcyBsb25nIGFzIHdlIGRvbid0IHN1cHBvcnQgRDNEVEFfQ09OU1RBTlQgKi8sIHN0YXRlX25vZ2wgICAgICAgICAgfSwKICAgIC8qIFNhbXBsZXIgc3RhdGVzICovCiAgICB7IC8qIDAsIFNhbXBsZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDEsIFNhbXBsZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDIsIFNhbXBsZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDMsIFNhbXBsZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDQsIFNhbXBsZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoNCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDUsIFNhbXBsZXIgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoNSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDYsIFNhbXBsZXIgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoNiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDcsIFNhbXBsZXIgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoNyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDgsIFNhbXBsZXIgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoOCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qIDksIFNhbXBsZXIgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoOSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTAsIFNhbXBsZXIgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTEsIFNhbXBsZXIgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTIsIFNhbXBsZXIgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTMsIFNhbXBsZXIgMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTQsIFNhbXBsZXIgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICB7IC8qMTUsIFNhbXBsZXIgMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1NBTVBMRVIoMTUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgICAgICAgIH0sCiAgICAvKiBQaXhlbCBzaGFkZXIgKi8KICAgIHsgLyogICwgUGl4ZWwgU2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUElYRUxTSEFERVIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc2hhZGVyICAgICAgICAgfSwKICAgICAgLyogVHJhbnNmb3JtIHN0YXRlcyBmb2xsb3cgICAgICAgICAgICAgICAgICAgICovCiAgICB7IC8qICAxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICAyLCBXSU5FRDNEVFNfVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVklFVyksICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdmlldyAgICAgIH0sCiAgICB7IC8qICAzLCBXSU5FRDNEVFNfUFJPSkVDVElPTiAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfUFJPSkVDVElPTiksICAgICAgICAgICAgICB0cmFuc2Zvcm1fcHJvamVjdGlvbn0sCiAgICB7IC8qICA0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICA1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICA2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICA3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICA4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qICA5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDEwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDExLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDEyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDEzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDE0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDE1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDE2LCBXSU5FRDNEVFNfVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTApLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDE3LCBXSU5FRDNEVFNfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTEpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDE4LCBXSU5FRDNEVFNfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTIpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDE5LCBXSU5FRDNEVFNfVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTMpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDIwLCBXSU5FRDNEVFNfVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTQpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDIxLCBXSU5FRDNEVFNfVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTUpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDIyLCBXSU5FRDNEVFNfVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTYpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qIDIzLCBXSU5FRDNEVFNfVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTcpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICAgIC8qIEEgaHVnZSBnYXAgYmV0d2VlbiBURVhUVVJFNyBhbmQgV09STERNQVRSSVgoMCkgOi0oIEJ1dCBlbnRyaWVzIGFyZSBuZWVkZWQgdG8gY2F0Y2ggdGhlbiBpZiBhIGJyb2tlbiBhcHAgc2V0cyB0aGVtICovCiAgICB7IC8qIDI0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDI1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDI2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDI3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDI4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDMyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDMzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDM5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDQ5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDUwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDUxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDUyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDUzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDU5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDYwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDYxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDYyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDYzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDY5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDcwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDcxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDcyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDczLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDc5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDgwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDgxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDgyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDgzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDg5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDkwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDkxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDkyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDkzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qIDk5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTAwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTAxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTAyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTAzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTA5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTEwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTExLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTEyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTEzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTE5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTIwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTIxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTIyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTIzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTMyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTMzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTM5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTQ5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTUwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTUxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTUyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTUzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTU5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTYwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTYxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTYyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTYzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTY5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTcwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTcxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTcyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTczLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTc5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTgwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTgxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTgyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTgzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTg5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTkwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTkxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTkyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTkzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMTk5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjAwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjAxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjAyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjAzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjA5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjEwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjExLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjEyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjEzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjE5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjIwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjIxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjIyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjIzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjMyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjMzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjM5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ2LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ3LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ4LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjQ5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjUwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjUxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjUyLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjUzLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjU0LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMjU1LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICAgIC8qIEVuZCBodWdlIGdhcCAqLwogICAgeyAvKjI1NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDApICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkICAgICB9LAogICAgeyAvKjI1NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI1OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI1OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDMpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDMpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDUpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDUpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDYpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDYpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDcpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDcpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDgpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDgpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDkpICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDkpKSwgICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDExKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI2OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI3OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDI3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDMwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDMwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDMxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDMxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDMyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDMyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI4OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDMzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDMzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDM0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDM1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDM2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDM3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDM4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDM5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDM5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDQxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjI5OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDQ5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDQ5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDUwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDUwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDUxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDUxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDUyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDUyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMwOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDUzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDUzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDU0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDU1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDU2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDU3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDU4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDU5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDU5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDYwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDYwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDYxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDYxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDYyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDYyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMxOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDYzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDYzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDY0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDY1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDY2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDY3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDY4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDY4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDY5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDcwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDcwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDcxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDcxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDcyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDcyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMyOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDczKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDczKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDc0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDc1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDc2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDc3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDc4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDc5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDc5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDgwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDgwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDgxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDgxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDgyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDgyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjMzOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDgzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDgzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDg0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDg1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDg2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDg3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDg4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDg5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDg5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDkwKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDkwKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDkxKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDkxKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDkyKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDkyKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM0OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDkzKSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDkzKSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDk0KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk0KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDk1KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk1KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDk2KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk2KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDk3KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk3KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDk4KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk4KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDk5KSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDk5KSksICAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEwOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEwOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDExMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM2OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDExNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDExOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDExOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM3OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEyOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEyOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM4OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDEzOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDEzOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM5OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE0OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE0OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQwOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE1OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE1OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQxOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE2OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE2OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQyOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE3OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE3OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQzOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE4OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE4OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ0OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDE5OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDE5OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjM1NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ1OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIwOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIwOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ2OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIxOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIxOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ3OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIyOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIyOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ4OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzMykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5MCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5MSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5MiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5MywgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzNykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5NCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzOCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzOCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5NSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDIzOSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDIzOSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5NiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5NywgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5OCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjQ5OSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwMiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwMywgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0NykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwNCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0OCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0OCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwNSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI0OSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI0OSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwNiwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwNywgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwOCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MikgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MikpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUwOSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MykgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1MykpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUxMCwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1NCkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1NCkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgeyAvKjUxMSwgV0lORUQzRFRTX1dPUkxETUFUUklYKDI1NSkgICAgICAgICAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDI1NSkpLCAgICAgICAgdHJhbnNmb3JtX3dvcmxkZXggICB9LAogICAgICAvKiBWYXJpb3VzIFZlcnRleCBzdGF0ZXMgZm9sbG93ICovCiAgICB7IC8qICAgLCBTVEFURV9TVFJFQU1TUkMgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZERUNMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhkZWNsYXJhdGlvbiAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9JTkRFWEJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0lOREVYQlVGRkVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGJ1ZmZlciAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9WREVDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZERUNMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhkZWNsYXJhdGlvbiAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9WU0hBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZERUNMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhkZWNsYXJhdGlvbiAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZJRVdQT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9WRVJURVhTSEFERVJDT05TVEFOVCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZFUlRFWFNIQURFUkNPTlNUQU5ULCAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJjb25zdGFudCAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9QSVhFTFNIQURFUkNPTlNUQU5UICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1ZFUlRFWFNIQURFUkNPTlNUQU5ULCAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJjb25zdGFudCAgICAgIH0sCiAgICAgIC8qIExpZ2h0cyAqLwogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoMCkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCgwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoMSkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCgxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoMikgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCgyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoMykgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCgzKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoNCkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCg0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoNSkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCg1KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoNikgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCg2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAogICAgeyAvKiAgICwgU1RBVEVfQUNUSVZFTElHSFQoNykgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9BQ1RJVkVMSUdIVCg3KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgICAgICAgICAgICAgICB9LAoKICAgIHsgLyogU2Npc3NvciByZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0NJU1NPUlJFQ1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3JyZWN0ICAgICAgICAgfSwKICAgICAgLyogQ2xpcCBwbGFuZXMgKi8KICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDApICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDEpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDIpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDMpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDQpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDUpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDYpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDcpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDcpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDgpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDkpICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDEwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDExKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDExKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDEyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDEzKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDEzKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE0KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE1KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE1KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE2KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE3KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE3KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE4KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE4KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDE5KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDE5KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDIwKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDIwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDIxKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDIxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDIyKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDIyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDIzKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDIzKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI0KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI1KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI1KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI2KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI3KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI3KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI4KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI4KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDI5KSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDI5KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDMwKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDMwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKICAgIHsgLyogU1RBVEVfQ0xJUFBMQU5FKDMxKSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfQ0xJUFBMQU5FKDMxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwbGFuZSAgICAgICAgICAgfSwKfTsK