LyoKICogRGlyZWN0M0Qgc3RhdGUgbWFuYWdlbWVudAogKgogKiBDb3B5cmlnaHQgMjAwMiBMaW9uZWwgVWxtZXIKICogQ29weXJpZ2h0IDIwMDItMjAwNSBKYXNvbiBFZG1lYWRlcwogKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJhcGhhZWwgSnVucXVlaXJhCiAqIENvcHlyaWdodCAyMDA0IENocmlzdGlhbiBDb3N0YQogKiBDb3B5cmlnaHQgMjAwNSBPbGl2ZXIgU3RpZWJlcgogKiBDb3B5cmlnaHQgMjAwNiBIZW5yaSBWZXJiZWV0CiAqIENvcHlyaWdodCAyMDA2LTIwMDcgU3RlZmFuIET2c2luZ2VyIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiY29uZmlnLmgiCiNpbmNsdWRlIDxzdGRpby5oPgojaWZkZWYgSEFWRV9GTE9BVF9ICiMgaW5jbHVkZSA8ZmxvYXQuaD4KI2VuZGlmCiNpbmNsdWRlICJ3aW5lZDNkX3ByaXZhdGUuaCIKCldJTkVfREVGQVVMVF9ERUJVR19DSEFOTkVMKGQzZCk7CldJTkVfREVDTEFSRV9ERUJVR19DSEFOTkVMKGQzZF9zaGFkZXIpOwoKI2RlZmluZSBHTElORk9fTE9DQVRJT04gKChJV2luZUQzREltcGwgKikoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+d2luZUQzRCkpLT5nbF9pbmZvCgpzdGF0aWMgdm9pZCBzdGF0ZV9ub2dsKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogVXNlZCBmb3Igc3RhdGVzIHdoaWNoIGFyZSBub3QgbWFwcGVkIHRvIGEgZ2wgc3RhdGUgYXMtaXMsIGJ1dCB1c2VkIHNvbWVob3cgZGlmZmVyZW50LAogICAgICogZS5nIGFzIGEgcGFyYW1ldGVyIGZvciBkcmF3aW5nLCBvciB3aGljaCBhcmUgdW5pbXBsZW1lbnRlZCBpbiB3aW5kb3dzIGQzZAogICAgICovCiAgICBpZihTVEFURV9JU19SRU5ERVIoc3RhdGUpKSB7CiAgICAgICAgV0lORUQzRFJFTkRFUlNUQVRFVFlQRSBSZW5kZXJTdGF0ZSA9IHN0YXRlIC0gU1RBVEVfUkVOREVSKDApOwogICAgICAgIFRSQUNFKCIoJXMsJWQpIG5vIGRpcmVjdCBtYXBwaW5nIHRvIGdsXG4iLCBkZWJ1Z19kM2RyZW5kZXJzdGF0ZShSZW5kZXJTdGF0ZSksIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1JlbmRlclN0YXRlXSk7CiAgICB9IGVsc2UgewogICAgICAgIC8qIFNob3VsZG4ndCBoYXZlIGFuIHVua25vd24gdHlwZSBoZXJlICovCiAgICAgICAgRklYTUUoIiVkIG5vIGRpcmVjdCBtYXBwaW5nIHRvIGdsIG9mIHN0YXRlIHdpdGggdW5rbm93biB0eXBlXG4iLCBzdGF0ZSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3VuZGVmaW5lZChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qIFByaW50IGEgV0FSTiwgdGhpcyBhbGxvd3MgdGhlIHN0YXRlYmxvY2sgY29kZSB0byBsb29wIG92ZXIgYWxsIHN0YXRlcyB0byBnZW5lcmF0ZSBhIGRpc3BsYXkKICAgICAqIGxpc3Qgd2l0aG91dCBjYXVzaW5nIGNvbmZ1c2luZyB0ZXJtaW5hbCBvdXRwdXQuIERlbGliZXJhdGVseSBubyBzcGVjaWFsIGRlYnVnIG5hbWUgaGVyZQogICAgICogYmVjYXVzZSBpdHMgdW5kZWZpbmVkLgogICAgICovCiAgICBXQVJOKCJ1bmRlZmluZWQgc3RhdGUgJWRcbiIsIHN0YXRlKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfZmlsbG1vZGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBXSU5FRDNERklMTE1PREUgVmFsdWUgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRklMTE1PREVdOwoKICAgIHN3aXRjaChWYWx1ZSkgewogICAgICAgIGNhc2UgV0lORUQzREZJTExfUE9JTlQ6CiAgICAgICAgICAgIGdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1BPSU5UKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1BPSU5UKSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RGSUxMX1dJUkVGUkFNRToKICAgICAgICAgICAgZ2xQb2x5Z29uTW9kZShHTF9GUk9OVF9BTkRfQkFDSywgR0xfTElORSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvbHlnb25Nb2RlKEdMX0ZST05UX0FORF9CQUNLLCBHTF9MSU5FKSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RGSUxMX1NPTElEOgogICAgICAgICAgICBnbFBvbHlnb25Nb2RlKEdMX0ZST05UX0FORF9CQUNLLCBHTF9GSUxMKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9seWdvbk1vZGUoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0ZJTEwpIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIEZJWE1FKCJVbnJlY29nbml6ZWQgV0lORUQzRFJTX0ZJTExNT0RFIHZhbHVlICVkXG4iLCBWYWx1ZSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2xpZ2h0aW5nKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgQk9PTCB0cmFuc2Zvcm1lZDsKCiAgICAvKiBMaWdodGluZyBpcyBub3QgZW5hYmxlZCBpZiB0cmFuc2Zvcm1lZCB2ZXJ0aWNlcyBhcmUgZHJhd24KICAgICAqIGJ1dCBsaWdodGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0cmVhbSBzb3VyY2VzLCBzbyBpdCBpcyBub3QgZ3JvdXBlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICAgICAqIFRoaXMgc3RhdGUgcmVhZHMgdGhlIGRlY29kZWQgdmVydGV4IGRlY2wsIHNvIGlmIGl0IGlzIGRpcnR5IGRvbid0IGRvIGFueXRoaW5nLiBUaGUKICAgICAqIHZlcnRleCBkZWNsYXJhdGlvbiBhcHBwbHlpbmcgZnVuY3Rpb24gY2FsbHMgdGhpcyBmdW5jdGlvbiBmb3IgdXBkYXRpbmcKICAgICAqLwoKICAgIGlmKGlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WREVDTCkpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtZWQgPSAoKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0cmlkZWRfc3RyZWFtcy51LnMucG9zaXRpb24ubHBEYXRhICE9IE5VTEwgfHwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zdHJpZGVkX3N0cmVhbXMudS5zLnBvc2l0aW9uLlZCTyAhPSAwKSAmJgogICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0cmlkZWRfc3RyZWFtcy51LnMucG9zaXRpb25fdHJhbnNmb3JtZWQpID8gVFJVRSA6IEZBTFNFOwoKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTElHSFRJTkddICYmICF0cmFuc2Zvcm1lZCkgewogICAgICAgIGdsRW5hYmxlKEdMX0xJR0hUSU5HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfTElHSFRJTkciKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0xJR0hUSU5HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0xJR0hUSU5HIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3plbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBObyB6IHRlc3Qgd2l0aG91dCBkZXB0aCBzdGVuY2lsIGJ1ZmZlcnMgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN0ZW5jaWxCdWZmZXJUYXJnZXQgPT0gTlVMTCkgewogICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsgLyogVGhpcyBhbHNvIGRpc2FibGVzIHogd3JpdGluZyBpbiBnbCAqLwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfREVQVEhfVEVTVCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzd2l0Y2ggKChXSU5FRDNEWkJVRkZFUlRZUEUpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19aRU5BQkxFXSkgewogICAgICAgIGNhc2UgV0lORUQzRFpCX0ZBTFNFOgogICAgICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfREVQVEhfVEVTVCIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RaQl9UUlVFOgogICAgICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlIEdMX0RFUFRIX1RFU1QiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEWkJfVVNFVzoKICAgICAgICAgICAgZ2xFbmFibGUoR0xfREVQVEhfVEVTVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9ERVBUSF9URVNUIik7CiAgICAgICAgICAgIEZJWE1FKCJXIGJ1ZmZlciBpcyBub3Qgd2VsbCBoYW5kbGVkXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBEM0RaQlVGRkVSVFlQRSB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pFTkFCTEVdKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfY3VsbG1vZGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUT0RPOiBQdXQgdGhpcyBpbnRvIHRoZSBvZmZzY3JlZW4gLyBvbnNjcmVlbiByZW5kZXJpbmcgYmxvY2sgZHVlIHRvIGRldmljZS0+cmVuZGVyX29mZnNjcmVlbiAqLwoKICAgIC8qIElmIHdlIGFyZSBjdWxsaW5nICJiYWNrIGZhY2VzIHdpdGggY2xvY2t3aXNlIHZlcnRpY2VzIiB0aGVuCiAgICAgICBzZXQgZnJvbnQgZmFjZXMgdG8gYmUgY291bnRlciBjbG9ja3dpc2UgYW5kIGVuYWJsZSBjdWxsaW5nCiAgICAgICBvZiBiYWNrIGZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgc3dpdGNoICgoV0lORUQzRENVTEwpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DVUxMTU9ERV0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RDVUxMX05PTkU6CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0NVTExfRkFDRSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RDVUxMX0NXOgogICAgICAgICAgICBnbEVuYWJsZShHTF9DVUxMX0ZBQ0UpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfQ1VMTF9GQUNFIik7CiAgICAgICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgICAgICBnbEZyb250RmFjZShHTF9DVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ1ciKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdsRnJvbnRGYWNlKEdMX0NDVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ0NXIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ2xDdWxsRmFjZShHTF9CQUNLKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQ1VMTF9DQ1c6CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9DVUxMX0ZBQ0UiKTsKICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICAgICAgICAgIGdsRnJvbnRGYWNlKEdMX0NDVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ0NXIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBnbEZyb250RmFjZShHTF9DVyk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGcm9udEZhY2UgR0xfQ1ciKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBnbEN1bGxGYWNlKEdMX0JBQ0spOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBGSVhNRSgiVW5yZWNvZ25pemVkL1VuaGFuZGxlZCBXSU5FRDNEQ1VMTCB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NVTExNT0RFXSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3NoYWRlbW9kZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHN3aXRjaCAoKFdJTkVEM0RTSEFERU1PREUpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TSEFERU1PREVdKSB7CiAgICAgICAgY2FzZSBXSU5FRDNEU0hBREVfRkxBVDoKICAgICAgICAgICAgZ2xTaGFkZU1vZGVsKEdMX0ZMQVQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTaGFkZU1vZGVsKEdMX0ZMQVQpIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzRFNIQURFX0dPVVJBVUQ6CiAgICAgICAgICAgIGdsU2hhZGVNb2RlbChHTF9TTU9PVEgpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTaGFkZU1vZGVsKEdMX1NNT09USCkiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEU0hBREVfUEhPTkc6CiAgICAgICAgICAgIEZJWE1FKCJXSU5FRDNEU0hBREVfUEhPTkcgaXNuJ3Qgc3VwcG9ydGVkXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZC9VbmhhbmRsZWQgV0lORUQzRFNIQURFTU9ERSB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NIQURFTU9ERV0pOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9kaXRoZXJlbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RJVEhFUkVOQUJMRV0pIHsKICAgICAgICBnbEVuYWJsZShHTF9ESVRIRVIpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9ESVRIRVIiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0RJVEhFUik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZSBHTF9ESVRIRVIiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfendyaXRlbmFibGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUT0RPOiBUZXN0IGlmIGluIGQzZCB6IHdyaXRpbmcgaXMgZW5hYmxlZCBldmVuIGlmIFpFTkFCTEUgaXMgb2ZmLiBJZiB5ZXMsCiAgICAgKiB0aGlzIGhhcyB0byBiZSBtZXJnZWQgd2l0aCBaRU5BQkxFIGFuZCBaRlVOQwogICAgICovCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pXUklURUVOQUJMRV0pIHsKICAgICAgICBnbERlcHRoTWFzaygxKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEZXB0aE1hc2soMSkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEZXB0aE1hc2soMCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGVwdGhNYXNrKDApIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3pmdW5jKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaW50IGdsUGFybSA9IENvbXBhcmVGdW5jKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19aRlVOQ10pOwoKICAgIGlmKGdsUGFybSkgewogICAgICAgIGdsRGVwdGhGdW5jKGdsUGFybSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGVwdGhGdW5jIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2FtYmllbnQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBmbG9hdCBjb2xbNF07CiAgICBEM0RDT0xPUlRPR0xGTE9BVDQoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FNQklFTlRdLCBjb2wpOwoKICAgIFRSQUNFKCJTZXR0aW5nIGFtYmllbnQgdG8gKCVmLCVmLCVmLCVmKVxuIiwgY29sWzBdLCBjb2xbMV0sIGNvbFsyXSwgY29sWzNdKTsKICAgIGdsTGlnaHRNb2RlbGZ2KEdMX0xJR0hUX01PREVMX0FNQklFTlQsIGNvbCk7CiAgICBjaGVja0dMY2FsbCgiZ2xMaWdodE1vZGVsIGZvciBNT0RFTF9BTUJJRU5UIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JsZW5kKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaW50IHNyY0JsZW5kID0gR0xfWkVSTzsKICAgIGludCBkc3RCbGVuZCA9IEdMX1pFUk87CgogICAgLyogR0xfTElORV9TTU9PVEggbmVlZHMgR0xfQkxFTkQgdG8gd29yaywgYWNjb3JkaW5nIHRvIHRoZSByZWQgYm9vaywgYW5kIHNwZWNpYWwgYmxlbmRpbmcgcGFyYW1zICovCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEVdICAgICAgfHwKICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRURHRUFOVElBTElBU10gICAgICAgICB8fAogICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEVdKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZSBHTF9CTEVORCIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfQkxFTkQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfQkxFTkQiKTsKICAgICAgICAvKiBOb3RoaW5nIG1vcmUgdG8gZG8gLSBnZXQgb3V0ICovCiAgICAgICAgcmV0dXJuOwogICAgfTsKCiAgICBzd2l0Y2ggKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUkNCTEVORF0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9aRVJPICAgICAgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX1pFUk87ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9PTkUgICAgICAgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX09ORTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX1NSQ0NPTE9SICAgICAgICAgICA6IHNyY0JsZW5kID0gR0xfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WU1JDQ09MT1IgICAgICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEEgICAgICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9JTlZTUkNBTFBIQSAgICAgICAgOiBzcmNCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9ERVNUQUxQSEEgICAgICAgICAgOiBzcmNCbGVuZCA9IEdMX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkRFU1RBTFBIQSAgICAgICA6IHNyY0JsZW5kID0gR0xfT05FX01JTlVTX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0RFU1RDT0xPUiAgICAgICAgICA6IHNyY0JsZW5kID0gR0xfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WREVTVENPTE9SICAgICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEFTQVQgICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU7ICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USFNSQ0FMUEhBICAgICAgIDogc3JjQmxlbmQgPSBHTF9TUkNfQUxQSEE7CiAgICAgICAgICAgIGRzdEJsZW5kID0gR0xfU1JDX0FMUEhBOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USElOVlNSQ0FMUEhBICAgIDogc3JjQmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOwogICAgICAgICAgICBkc3RCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9CTEVOREZBQ1RPUiAgICAgICAgOiBzcmNCbGVuZCA9IEdMX0NPTlNUQU5UX0NPTE9SOyAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkJMRU5ERkFDVE9SICAgICA6IHNyY0JsZW5kID0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBzcmMgYmxlbmQgdmFsdWUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUkNCTEVORF0pOwogICAgfQoKICAgIHN3aXRjaCAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RFU1RCTEVORF0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9aRVJPICAgICAgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX1pFUk87ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9PTkUgICAgICAgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX09ORTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX1NSQ0NPTE9SICAgICAgICAgICA6IGRzdEJsZW5kID0gR0xfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WU1JDQ09MT1IgICAgICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEEgICAgICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9JTlZTUkNBTFBIQSAgICAgICAgOiBkc3RCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7ICBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9ERVNUQUxQSEEgICAgICAgICAgOiBkc3RCbGVuZCA9IEdMX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkRFU1RBTFBIQSAgICAgICA6IGRzdEJsZW5kID0gR0xfT05FX01JTlVTX0RTVF9BTFBIQTsgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0RFU1RDT0xPUiAgICAgICAgICA6IGRzdEJsZW5kID0gR0xfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfSU5WREVTVENPTE9SICAgICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfU1JDQUxQSEFTQVQgICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU7ICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USFNSQ0FMUEhBICAgICAgIDogZHN0QmxlbmQgPSBHTF9TUkNfQUxQSEE7CiAgICAgICAgICAgIHNyY0JsZW5kID0gR0xfU1JDX0FMUEhBOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRfQk9USElOVlNSQ0FMUEhBICAgIDogZHN0QmxlbmQgPSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOwogICAgICAgICAgICBzcmNCbGVuZCA9IEdMX09ORV9NSU5VU19TUkNfQUxQSEE7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORF9CTEVOREZBQ1RPUiAgICAgICAgOiBkc3RCbGVuZCA9IEdMX0NPTlNUQU5UX0NPTE9SOyAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5EX0lOVkJMRU5ERkFDVE9SICAgICA6IGRzdEJsZW5kID0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBkc3QgYmxlbmQgdmFsdWUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ERVNUQkxFTkRdKTsKICAgIH0KCiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRURHRUFOVElBTElBU10gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEVdKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfTElORV9TTU9PVEgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9MSU5FX1NNT09USCkiKTsKICAgICAgICBpZihzcmNCbGVuZCAhPSBHTF9TUkNfQUxQSEEpIHsKICAgICAgICAgICAgRklYTUUoIldJTkVEM0RSU19FREdFQU5USUFMSUFTIGVuYWJsZWQsIGJ1dCBpbmNvbXBhdGlibGUgc3JjIGJsZW5kaW5nIHBhcmFtIC0gd2hhdCB0byBkbz9cbiIpOwogICAgICAgICAgICBzcmNCbGVuZCA9IEdMX1NSQ19BTFBIQTsKICAgICAgICB9CiAgICAgICAgaWYoZHN0QmxlbmQgIT0gR0xfT05FX01JTlVTX1NSQ19BTFBIQSkgewogICAgICAgICAgICBGSVhNRSgiV0lORUQzRFJTX0VER0VBTlRJQUxJQVMgZW5hYmxlZCwgYnV0IGluY29tcGF0aWJsZSBkc3QgYmxlbmRpbmcgcGFyYW0gLSB3aGF0IHRvIGRvP1xuIik7CiAgICAgICAgICAgIGRzdEJsZW5kID0gR0xfT05FX01JTlVTX1NSQ19BTFBIQTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9MSU5FX1NNT09USCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9MSU5FX1NNT09USCkiKTsKICAgIH0KCiAgICBUUkFDRSgiZ2xCbGVuZEZ1bmMgc3JjPSV4LCBkc3Q9JXhcbiIsIHNyY0JsZW5kLCBkc3RCbGVuZCk7CiAgICBnbEJsZW5kRnVuYyhzcmNCbGVuZCwgZHN0QmxlbmQpOwogICAgY2hlY2tHTGNhbGwoImdsQmxlbmRGdW5jIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JsZW5kZmFjdG9yKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgZmxvYXQgY29sWzRdOwoKICAgIFRSQUNFKCJTZXR0aW5nIEJsZW5kRmFjdG9yIHRvICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRGQUNUT1JdKTsKICAgIEQzRENPTE9SVE9HTEZMT0FUNChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRGQUNUT1JdLCBjb2wpOwogICAgZ2xCbGVuZENvbG9yIChjb2xbMF0sY29sWzFdLGNvbFsyXSxjb2xbM10pOwogICAgY2hlY2tHTGNhbGwoImdsQmxlbmRDb2xvciIpOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9hbHBoYShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGludCBnbFBhcm0gPSAwOwogICAgZmxvYXQgcmVmOwogICAgQk9PTCBlbmFibGVfY2tleSA9IEZBTFNFOwoKICAgIElXaW5lRDNEU3VyZmFjZUltcGwgKnN1cmY7CgogICAgLyogRmluZCBvdXQgaWYgdGhlIHRleHR1cmUgb24gdGhlIGZpcnN0IHN0YWdlIGhhcyBhIGNrZXkgc2V0CiAgICAgKiBUaGUgYWxwaGEgc3RhdGUgZnVuYyByZWFkcyB0aGUgdGV4dHVyZSBzZXR0aW5ncywgZXZlbiB0aG91Z2ggYWxwaGEgYW5kIHRleHR1cmUgYXJlIG5vdCBncm91cGVkCiAgICAgKiB0b2dldGhlci4gVGhpcyBpcyB0byBhdm9pZCBtYWtpbmcgYSBodWdlIGFscGhhK3RleHR1cmUrdGV4dHVyZSBzdGFnZStja2V5IGJsb2NrIGR1ZSB0byB0aGUgaGFyZGx5CiAgICAgKiB1c2VkIFdJTkVEM0RSU19DT0xPUktFWUVOQUJMRSBzdGF0ZSh3aGljaCBpcyBkM2QgPD0gMyBvbmx5KS4gVGhlIHRleHR1cmUgZnVuY3Rpb24gd2lsbCBjYWxsIGFscGhhCiAgICAgKiBpbiBjYXNlIGl0IGZpbmRzIHNvbWUgdGV4dHVyZStjb2xvcmtleWVuYWJsZSBjb21iaW5hdGlvbiB3aGljaCBuZWVkcyBleHRyYSBjYXJlLgogICAgICovCiAgICBpZihzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSAmJiBzdGF0ZWJsb2NrLT50ZXh0dXJlRGltZW5zaW9uc1swXSA9PSBHTF9URVhUVVJFXzJEKSB7CiAgICAgICAgc3VyZiA9IChJV2luZUQzRFN1cmZhY2VJbXBsICopICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKXN0YXRlYmxvY2stPnRleHR1cmVzWzBdKS0+c3VyZmFjZXNbMF07CgogICAgICAgIGlmKHN1cmYtPkNLZXlGbGFncyAmIFdJTkVERFNEX0NLU1JDQkxUKSB7CiAgICAgICAgICAgIGNvbnN0IFBpeGVsRm9ybWF0RGVzYyAqZm10ID0gZ2V0Rm9ybWF0RGVzY0VudHJ5KHN1cmYtPnJlc291cmNlLmZvcm1hdCk7CiAgICAgICAgICAgIC8qIFRoZSBzdXJmYWNlIGNvbnZlcnNpb24gZG9lcyBub3QgZG8gY29sb3Iga2V5aW5nIGNvbnZlcnNpb24gZm9yIHN1cmZhY2VzIHRoYXQgaGF2ZSBhbiBhbHBoYQogICAgICAgICAgICAgKiBjaGFubmVsIG9uIHRoZWlyIG93bi4gTGlrZXdpc2UsIHRoZSBhbHBoYSB0ZXN0IHNob3VsZG4ndCBiZSBzZXQgdXAgZm9yIGNvbG9yIGtleWluZyBpZiB0aGUKICAgICAgICAgICAgICogc3VyZmFjZSBoYXMgYWxwaGEgYml0cwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYoZm10LT5hbHBoYU1hc2sgPT0gMHgwMDAwMDAwMCkgewogICAgICAgICAgICAgICAgZW5hYmxlX2NrZXkgPSBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmKGVuYWJsZV9ja2V5IHx8IGNvbnRleHQtPmxhc3Rfd2FzX2NrZXkpIHsKICAgICAgICBTdGF0ZVRhYmxlW1NUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApXS5hcHBseShTVEFURV9URVhUVVJFU1RBR0UoMCwgV0lORUQzRFRTU19BTFBIQU9QKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICB9CiAgICBjb250ZXh0LT5sYXN0X3dhc19ja2V5ID0gZW5hYmxlX2NrZXk7CgogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTFBIQVRFU1RFTkFCTEVdIHx8CiAgICAgICAgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUktFWUVOQUJMRV0gJiYgZW5hYmxlX2NrZXkpKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfQUxQSEFfVEVTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlIEdMX0FMUEhBX1RFU1QiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlKEdMX0FMUEhBX1RFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUgR0xfQUxQSEFfVEVTVCIpOwogICAgICAgIC8qIEFscGhhIHRlc3QgaXMgZGlzYWJsZWQsIGRvbid0IGJvdGhlciBzZXR0aW5nIHRoZSBwYXJhbXMgLSBpdCB3aWxsIGhhcHBlbiBvbiB0aGUgbmV4dAogICAgICAgICAqIGVuYWJsZSBjYWxsCiAgICAgICAgICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUktFWUVOQUJMRV0gJiYgZW5hYmxlX2NrZXkpIHsKICAgICAgICBnbFBhcm0gPSBHTF9OT1RFUVVBTDsKICAgICAgICByZWYgPSAwLjA7CiAgICB9IGVsc2UgewogICAgICAgIHJlZiA9ICgoZmxvYXQpIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTFBIQVJFRl0pIC8gMjU1LjBmOwogICAgICAgIGdsUGFybSA9IENvbXBhcmVGdW5jKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTFBIQUZVTkNdKTsKICAgIH0KICAgIGlmKGdsUGFybSkgewogICAgICAgIGdsQWxwaGFGdW5jKGdsUGFybSwgcmVmKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xBbHBoYUZ1bmMiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfY2xpcHBpbmcoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBlbmFibGUgID0gMHhGRkZGRkZGRjsKICAgIERXT1JEIGRpc2FibGUgPSAweDAwMDAwMDAwOwoKICAgIGlmICh1c2VfdnMoc3RhdGVibG9jay0+d2luZUQzRERldmljZSkpIHsKICAgICAgICAvKiBUaGUgc3BlYyBzYXlzIHRoYXQgb3BlbmdsIGNsaXBwaW5nIHBsYW5lcyBhcmUgZGlzYWJsZWQgd2hlbiB1c2luZyBzaGFkZXJzLiBEaXJlY3QzRCBwbGFuZXMgYXJlbid0LAogICAgICAgICAqIHNvIHRoYXQgaXMgYW4gaXNzdWUuIFRoZSBNYWNPUyBBVEkgZHJpdmVyIGtlZXBzIGNsaXBwaW5nIHBsYW5lcyBhY3RpdmF0ZWQgd2l0aCBzaGFkZXJzIGluIHNvbWUKICAgICAgICAgKiBjb250aXRpb25zIEkgZ290IHNpY2sgb2YgdHJhY2tpbmcgZG93bi4gVGhlIHNoYWRlciBzdGF0ZSBoYW5kbGVyIGRpc2FibGVzIGFsbCBjbGlwIHBsYW5lcyBiZWNhdXNlCiAgICAgICAgICogb2YgdGhhdCAtIGRvbid0IGRvIGFueXRoaW5nIGhlcmUgYW5kIGtlZXAgdGhlbSBkaXNhYmxlZAogICAgICAgICAqLwogICAgICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DTElQUExBTkVFTkFCTEVdKSB7CiAgICAgICAgICAgIHN0YXRpYyBCT09MIHdhcm5lZCA9IEZBTFNFOwogICAgICAgICAgICBpZighd2FybmVkKSB7CiAgICAgICAgICAgICAgICBGSVhNRSgiQ2xpcHBpbmcgbm90IHN1cHBvcnRlZCB3aXRoIHZlcnRleCBzaGFkZXJzXG4iKTsKICAgICAgICAgICAgICAgIHdhcm5lZCA9IFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qIFRPRE86IEtlZXAgdHJhY2sgb2YgcHJldmlvdXNseSBlbmFibGVkIGNsaXBwbGFuZXMgdG8gYXZvaWQgdW5uZWNjZXNzYXJ5IHJlc2V0dGluZwogICAgICogb2YgYWxyZWFkeSBzZXQgdmFsdWVzCiAgICAgKi8KCiAgICAvKiBJZiBlbmFibGluZyAvIGRpc2FibGluZyBhbGwKICAgICAqIFRPRE86IElzIHRoaXMgY29ycmVjdD8gRG9lc24ndCBEM0RSU19DTElQUElORyBkaXNhYmxlIGNsaXBwaW5nIG9uIHRoZSB2aWV3cG9ydCBmcnVzdHJ1bT8KICAgICAqLwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DTElQUElOR10pIHsKICAgICAgICBlbmFibGUgID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRV07CiAgICAgICAgZGlzYWJsZSA9IH5zdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0xJUFBMQU5FRU5BQkxFXTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGlzYWJsZSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgZW5hYmxlICA9IDB4MDA7CiAgICB9CgogICAgaWYgKGVuYWJsZSAmIFdJTkVEM0RDTElQUExBTkUwKSAgeyBnbEVuYWJsZShHTF9DTElQX1BMQU5FMCk7ICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoY2xpcCBwbGFuZSAwKSIpOyB9CiAgICBpZiAoZW5hYmxlICYgV0lORUQzRENMSVBQTEFORTEpICB7IGdsRW5hYmxlKEdMX0NMSVBfUExBTkUxKTsgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShjbGlwIHBsYW5lIDEpIik7IH0KICAgIGlmIChlbmFibGUgJiBXSU5FRDNEQ0xJUFBMQU5FMikgIHsgZ2xFbmFibGUoR0xfQ0xJUF9QTEFORTIpOyAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKGNsaXAgcGxhbmUgMikiKTsgfQogICAgaWYgKGVuYWJsZSAmIFdJTkVEM0RDTElQUExBTkUzKSAgeyBnbEVuYWJsZShHTF9DTElQX1BMQU5FMyk7ICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoY2xpcCBwbGFuZSAzKSIpOyB9CiAgICBpZiAoZW5hYmxlICYgV0lORUQzRENMSVBQTEFORTQpICB7IGdsRW5hYmxlKEdMX0NMSVBfUExBTkU0KTsgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShjbGlwIHBsYW5lIDQpIik7IH0KICAgIGlmIChlbmFibGUgJiBXSU5FRDNEQ0xJUFBMQU5FNSkgIHsgZ2xFbmFibGUoR0xfQ0xJUF9QTEFORTUpOyAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKGNsaXAgcGxhbmUgNSkiKTsgfQoKICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTApIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUwKTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDApIik7IH0KICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTEpIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUxKTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDEpIik7IH0KICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTIpIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUyKTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDIpIik7IH0KICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTMpIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUzKTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDMpIik7IH0KICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTQpIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkU0KTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDQpIik7IH0KICAgIGlmIChkaXNhYmxlICYgV0lORUQzRENMSVBQTEFORTUpIHsgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkU1KTsgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShjbGlwIHBsYW5lIDUpIik7IH0KCiAgICAvKiogdXBkYXRlIGNsaXBwaW5nIHN0YXR1cyAqLwogICAgaWYgKGVuYWJsZSkgewogICAgICAgIHN0YXRlYmxvY2stPmNsaXBfc3RhdHVzLkNsaXBVbmlvbiA9IDA7CiAgICAgICAgc3RhdGVibG9jay0+Y2xpcF9zdGF0dXMuQ2xpcEludGVyc2VjdGlvbiA9IDB4RkZGRkZGRkY7CiAgICB9IGVsc2UgewogICAgICAgIHN0YXRlYmxvY2stPmNsaXBfc3RhdHVzLkNsaXBVbmlvbiA9IDA7CiAgICAgICAgc3RhdGVibG9jay0+Y2xpcF9zdGF0dXMuQ2xpcEludGVyc2VjdGlvbiA9IDA7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2JsZW5kb3AoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpbnQgZ2xQYXJtID0gR0xfRlVOQ19BREQ7CgogICAgaWYoIUdMX1NVUFBPUlQoRVhUX0JMRU5EX01JTk1BWCkpIHsKICAgICAgICBXQVJOKCJVbnN1cHBvcnRlZCBpbiBsb2NhbCBPcGVuR0wgaW1wbGVtZW50YXRpb246IGdsQmxlbmRFcXVhdGlvblxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN3aXRjaCAoKFdJTkVEM0RCTEVORE9QKSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQkxFTkRPUF0pIHsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORE9QX0FERCAgICAgICAgICAgICAgOiBnbFBhcm0gPSBHTF9GVU5DX0FERDsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5ET1BfU1VCVFJBQ1QgICAgICAgICA6IGdsUGFybSA9IEdMX0ZVTkNfU1VCVFJBQ1Q7ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBXSU5FRDNEQkxFTkRPUF9SRVZTVUJUUkFDVCAgICAgIDogZ2xQYXJtID0gR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOyBicmVhazsKICAgICAgICBjYXNlIFdJTkVEM0RCTEVORE9QX01JTiAgICAgICAgICAgICAgOiBnbFBhcm0gPSBHTF9NSU47ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgV0lORUQzREJMRU5ET1BfTUFYICAgICAgICAgICAgICA6IGdsUGFybSA9IEdMX01BWDsgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZC9VbmhhbmRsZWQgRDNEQkxFTkRPUCB2YWx1ZSAlZFxuIiwgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0JMRU5ET1BdKTsKICAgIH0KCiAgICBUUkFDRSgiZ2xCbGVuZEVxdWF0aW9uKCV4KVxuIiwgZ2xQYXJtKTsKICAgIEdMX0VYVENBTEwoZ2xCbGVuZEVxdWF0aW9uKGdsUGFybSkpOwogICAgY2hlY2tHTGNhbGwoImdsQmxlbmRFcXVhdGlvbiIpOwp9CgpzdGF0aWMgdm9pZApzdGF0ZV9zcGVjdWxhcmVuYWJsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qIE9yaWdpbmFsbHkgdGhpcyB1c2VkIGdsTGlnaHRNb2RlbGkoR0xfTElHSFRfTU9ERUxfQ09MT1JfQ09OVFJPTCxHTF9TRVBBUkFURV9TUEVDVUxBUl9DT0xPUikKICAgICAqIGFuZCAoR0xfTElHSFRfTU9ERUxfQ09MT1JfQ09OVFJPTCxHTF9TSU5HTEVfQ09MT1IpIHRvIHN3YXAgYmV0d2VlbiBlbmFibGVkL2Rpc2FibGVkCiAgICAgKiBzcGVjdWxhciBjb2xvci4gVGhpcyBpcyB3cm9uZzoKICAgICAqIFNlcGFyYXRlIHNwZWN1bGFyIGNvbG9yIG1lYW5zIHRoZSBzcGVjdWxhciBjb2xvdXIgaXMgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LCB3aGVyZWFzCiAgICAgKiBzaW5nbGUgY29sb3IgbWVhbnMgaXQgaXMgbWVyZ2VkIGluLiBIb3dldmVyIGluIGJvdGggY2FzZXMgdGhleSBhcmUgYmVpbmcgdXNlZCB0bwogICAgICogc29tZSBleHRlbnQuCiAgICAgKiBUbyBkaXNhYmxlIHNwZWN1bGFyIGNvbG9yLCBzZXQgaXQgZXhwbGljaXRseSB0byBibGFjayBhbmQgdHVybiBvZmYgR0xfQ09MT1JfU1VNX0VYVAogICAgICogTk9URTogSWYgbm90IHN1cHBvcnRlZCBkb24ndCBnaXZlIEZJWE1FcyB0aGUgaW1wYWN0IGlzIHJlYWxseSBtaW5pbWFsIGFuZCB2ZXJ5IGZldyBwZW9wbGUgYXJlCiAgICAgKiBydW5uaW5nIDEuNCB5ZXQhCiAgICAgKgogICAgICoKICAgICAqIElmIHJlZ2lzdGVyIGNvbWJpbmVycyBhcmUgZW5hYmxlZCwgZW5hYmxpbmcgLyBkaXNhYmxpbmcgR0xfQ09MT1JfU1VNIGhhcyBubyBlZmZlY3QuCiAgICAgKiBJbnN0ZWFkLCB3ZSBuZWVkIHRvIHNldHVwIHRoZSBGaW5hbENvbWJpbmVyIHByb3Blcmx5LgogICAgICoKICAgICAqIFRoZSBkZWZhdWx0IHNldHVwIGZvciB0aGUgRmluYWxDb21iaW5lciBpczoKICAgICAqCiAgICAgKiA8dmFyaWFibGU+ICAgICAgIDxpbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXBwaW5nPiAgICAgICAgICAgICAgIDx1c2FnZT4KICAgICAqIEdMX1ZBUklBQkxFX0FfTlYgR0xfRk9HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSURFTlRJVFlfTlYgR0xfQUxQSEEKICAgICAqIEdMX1ZBUklBQkxFX0JfTlYgR0xfU1BBUkUwX1BMVVNfU0VDT05EQVJZX0NPTE9SX05WICAgR0xfVU5TSUdORURfSURFTlRJVFlfTlYgR0xfUkdCCiAgICAgKiBHTF9WQVJJQUJMRV9DX05WIEdMX0ZPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lERU5USVRZX05WIEdMX1JHQgogICAgICogR0xfVkFSSUFCTEVfRF9OViBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JREVOVElUWV9OViBHTF9SR0IKICAgICAqIEdMX1ZBUklBQkxFX0VfTlYgR0xfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSURFTlRJVFlfTlYgR0xfUkdCCiAgICAgKiBHTF9WQVJJQUJMRV9GX05WIEdMX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lERU5USVRZX05WIEdMX1JHQgogICAgICogR0xfVkFSSUFCTEVfR19OViBHTF9TUEFSRTBfTlYgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JREVOVElUWV9OViBHTF9BTFBIQQogICAgICoKICAgICAqIFRoYXQncyBwcmV0dHkgbXVjaCBmaW5lIGFzIGl0IGlzLCBleGNlcHQgZm9yIHZhcmlhYmxlIEIsIHdoaWNoIG5lZWRzIHRvIHRha2UKICAgICAqIGVpdGhlciBHTF9TUEFSRTBfUExVU19TRUNPTkRBUllfQ09MT1JfTlYgb3IgR0xfU1BBUkUwX05WLCBkZXBlbmRpbmcgb24KICAgICAqIHdoZXRoZXIgV0lORUQzRFJTX1NQRUNVTEFSRU5BQkxFIGlzIGVuYWJsZWQgb3Igbm90LgogICAgICovCgogICAgVFJBQ0UoIlNldHRpbmcgc3BlY3VsYXIgZW5hYmxlIHN0YXRlXG4iKTsKICAgIC8qIFRPRE86IEFkZCB0byB0aGUgbWF0ZXJpYWwgc2V0dGluZyBmdW5jdGlvbnMgKi8KICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1BFQ1VMQVJFTkFCTEVdKSB7CiAgICAgICAgZ2xNYXRlcmlhbGZ2KEdMX0ZST05UX0FORF9CQUNLLCBHTF9TUEVDVUxBUiwgKGZsb2F0KikgJnN0YXRlYmxvY2stPm1hdGVyaWFsLlNwZWN1bGFyKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xNYXRlcmlhbGZ2Iik7CiAgICAgICAgaWYgKEdMX1NVUFBPUlQoRVhUX1NFQ09OREFSWV9DT0xPUikpIHsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfQ09MT1JfU1VNX0VYVCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgVFJBQ0UoIlNwZWN1bGFyIGNvbG9ycyBjYW5ub3QgYmUgZW5hYmxlZCBpbiB0aGlzIHZlcnNpb24gb2Ygb3BlbmdsXG4iKTsKICAgICAgICB9CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX0NPTE9SX1NVTSkiKTsKCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsRmluYWxDb21iaW5lcklucHV0TlYoR0xfVkFSSUFCTEVfQl9OViwgR0xfU1BBUkUwX1BMVVNfU0VDT05EQVJZX0NPTE9SX05WLCBHTF9VTlNJR05FRF9JREVOVElUWV9OViwgR0xfUkdCKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZpbmFsQ29tYmluZXJJbnB1dE5WKCkiKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZsb2F0IGJsYWNrWzRdID0gezAuMGYsIDAuMGYsIDAuMGYsIDAuMGZ9OwoKICAgICAgICAvKiBmb3IgdGhlIGNhc2Ugb2YgZW5hYmxlZCBsaWdodGluZzogKi8KICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1NQRUNVTEFSLCAmYmxhY2tbMF0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKCiAgICAgICAgLyogZm9yIHRoZSBjYXNlIG9mIGRpc2FibGVkIGxpZ2h0aW5nOiAqLwogICAgICAgIGlmIChHTF9TVVBQT1JUKEVYVF9TRUNPTkRBUllfQ09MT1IpKSB7CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9DT0xPUl9TVU1fRVhUKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBUUkFDRSgiU3BlY3VsYXIgY29sb3JzIGNhbm5vdCBiZSBkaXNhYmxlZCBpbiB0aGlzIHZlcnNpb24gb2Ygb3BlbmdsXG4iKTsKICAgICAgICB9CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9DT0xPUl9TVU0pIik7CgogICAgICAgIGlmIChHTF9TVVBQT1JUKE5WX1JFR0lTVEVSX0NPTUJJTkVSUykpIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEZpbmFsQ29tYmluZXJJbnB1dE5WKEdMX1ZBUklBQkxFX0JfTlYsIEdMX1NQQVJFMF9OViwgR0xfVU5TSUdORURfSURFTlRJVFlfTlYsIEdMX1JHQikpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGaW5hbENvbWJpbmVySW5wdXROVigpIik7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV90ZXhmYWN0b3IoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bnNpZ25lZCBpbnQgaTsKCiAgICAvKiBOb3RlIHRoZSB0ZXh0dXJlIGNvbG9yIGFwcGxpZXMgdG8gYWxsIHRleHR1cmVzIHdoZXJlYXMKICAgICAqIEdMX1RFWFRVUkVfRU5WX0NPTE9SIGFwcGxpZXMgdG8gYWN0aXZlIG9ubHkKICAgICAqLwogICAgZmxvYXQgY29sWzRdOwogICAgRDNEQ09MT1JUT0dMRkxPQVQ0KHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19URVhUVVJFRkFDVE9SXSwgY29sKTsKCiAgICBpZiAoIUdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgIC8qIEFuZCBub3cgdGhlIGRlZmF1bHQgdGV4dHVyZSBjb2xvciBhcyB3ZWxsICovCiAgICAgICAgZm9yIChpID0gMDsgaSA8IEdMX0xJTUlUUyh0ZXh0dXJlX3N0YWdlcyk7IGkrKykgewogICAgICAgICAgICAvKiBOb3RlIHRoZSBXSU5FRDNEUlMgdmFsdWUgYXBwbGllcyB0byBhbGwgdGV4dHVyZXMsIGJ1dCBHTCBoYXMgb25lCiAgICAgICAgICAgICAqIHBlciB0ZXh0dXJlLCBzbyBhcHBseSBpdCBub3cgcmVhZHkgdG8gYmUgdXNlZCEKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9NVUxUSVRFWFRVUkUpKSB7CiAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBpKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaT4wKSB7CiAgICAgICAgICAgICAgICBGSVhNRSgiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdsVGV4RW52ZnYoR0xfVEVYVFVSRV9FTlYsIEdMX1RFWFRVUkVfRU5WX0NPTE9SLCAmY29sWzBdKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4RW52ZnYoR0xfVEVYVFVSRV9FTlYsIEdMX1RFWFRVUkVfRU5WX0NPTE9SLCBjb2xvcik7Iik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBHTF9FWFRDQUxMKGdsQ29tYmluZXJQYXJhbWV0ZXJmdk5WKEdMX0NPTlNUQU5UX0NPTE9SMF9OViwgJmNvbFswXSkpOwogICAgfQp9CgpzdGF0aWMgdm9pZApyZW5kZXJzdGF0ZV9zdGVuY2lsX3R3b3NpZGVkKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIEdMaW50IGZhY2UsIEdMaW50IGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2ssIEdMaW50IHN0ZW5jaWxGYWlsLCBHTGludCBkZXB0aEZhaWwsIEdMaW50IHN0ZW5jaWxQYXNzICkgewojaWYgMCAvKiBEb24ndCB1c2UgT3BlbkdMIDIuMCBjYWxscyBmb3Igbm93ICovCiAgICAgICAgICAgIGlmKEdMX0VYVENBTEwoZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKSAmJiBHTF9FWFRDQUxMKGdsU3RlbmNpbE9wU2VwYXJhdGUpKSB7CiAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoLi4uKSIpOwogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIHN0ZW5jaWxGYWlsLCBkZXB0aEZhaWwsIHN0ZW5jaWxQYXNzKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsT3BTZXBhcmF0ZSguLi4pIik7CiAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgaWYoR0xfU1VQUE9SVChFWFRfU1RFTkNJTF9UV09fU0lERSkpIHsKICAgICAgICBnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1RfVFdPX1NJREVfRVhUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUX1RXT19TSURFX0VYVCkiKTsKICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlU3RlbmNpbEZhY2VFWFQoZmFjZSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVN0ZW5jaWxGYWNlRVhUKC4uLikiKTsKICAgICAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbEZ1bmMoLi4uKSIpOwogICAgICAgIGdsU3RlbmNpbE9wKHN0ZW5jaWxGYWlsLCBkZXB0aEZhaWwsIHN0ZW5jaWxQYXNzKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsT3AoLi4uKSIpOwogICAgfSBlbHNlIGlmKEdMX1NVUFBPUlQoQVRJX1NFUEFSQVRFX1NURU5DSUwpKSB7CiAgICAgICAgR0xfRVhUQ0FMTChnbFN0ZW5jaWxGdW5jU2VwYXJhdGVBVEkoZmFjZSwgZnVuYywgcmVmLCBtYXNrKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbEZ1bmNTZXBhcmF0ZUFUSSguLi4pIik7CiAgICAgICAgR0xfRVhUQ0FMTChnbFN0ZW5jaWxPcFNlcGFyYXRlQVRJKGZhY2UsIHN0ZW5jaWxGYWlsLCBkZXB0aEZhaWwsIHN0ZW5jaWxQYXNzKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsU3RlbmNpbE9wU2VwYXJhdGVBVEkoLi4uKSIpOwogICAgfSBlbHNlIHsKICAgICAgICBFUlIoIlNlcGFyYXRlICh0d28gc2lkZWQpIHN0ZW5jaWwgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2Ygb3BlbmdsLiBDYXBzIHdlcmVuJ3QgaG9ub3JlZD9cbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZApzdGF0ZV9zdGVuY2lsKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgb25lc2lkZWRfZW5hYmxlID0gRkFMU0U7CiAgICBEV09SRCB0d29zaWRlZF9lbmFibGUgPSBGQUxTRTsKICAgIEdMaW50IGZ1bmMgPSBHTF9BTFdBWVM7CiAgICBHTGludCBmdW5jX2NjdyA9IEdMX0FMV0FZUzsKICAgIEdMaW50IHJlZiA9IDA7CiAgICBHTHVpbnQgbWFzayA9IDA7CiAgICBHTGludCBzdGVuY2lsRmFpbCA9IEdMX0tFRVA7CiAgICBHTGludCBkZXB0aEZhaWwgPSBHTF9LRUVQOwogICAgR0xpbnQgc3RlbmNpbFBhc3MgPSBHTF9LRUVQOwogICAgR0xpbnQgc3RlbmNpbEZhaWxfY2N3ID0gR0xfS0VFUDsKICAgIEdMaW50IGRlcHRoRmFpbF9jY3cgPSBHTF9LRUVQOwogICAgR0xpbnQgc3RlbmNpbFBhc3NfY2N3ID0gR0xfS0VFUDsKCiAgICAvKiBObyBzdGVuY2lsIHRlc3Qgd2l0aG91dCBhIHN0ZW5jaWwgYnVmZmVyICovCiAgICBpZihzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zdGVuY2lsQnVmZmVyVGFyZ2V0ID09IE5VTEwpIHsKICAgICAgICBnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX1NURU5DSUxfVEVTVCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMRU5BQkxFXSApCiAgICAgICAgb25lc2lkZWRfZW5hYmxlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxFTkFCTEVdOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERV0gKQogICAgICAgIHR3b3NpZGVkX2VuYWJsZSA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19UV09TSURFRFNURU5DSUxNT0RFXTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxGVU5DXSApCiAgICAgICAgaWYoICEoIGZ1bmMgPSBDb21wYXJlRnVuYyhzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTEZVTkNdKSApICkKICAgICAgICAgICAgZnVuYyA9IEdMX0FMV0FZUzsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMRlVOQ10gKQogICAgICAgIGlmKCAhKCBmdW5jX2NjdyA9IENvbXBhcmVGdW5jKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DQ1dfU1RFTkNJTEZVTkNdKSApICkKICAgICAgICAgICAgZnVuYyA9IEdMX0FMV0FZUzsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxSRUZdICkKICAgICAgICByZWYgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTFJFRl07CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMTUFTS10gKQogICAgICAgIG1hc2sgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTE1BU0tdOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTEZBSUxdICkKICAgICAgICBzdGVuY2lsRmFpbCA9IFN0ZW5jaWxPcChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTEZBSUxdKTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxaRkFJTF0gKQogICAgICAgIGRlcHRoRmFpbCA9IFN0ZW5jaWxPcChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1RFTkNJTFpGQUlMXSk7CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMUEFTU10gKQogICAgICAgIHN0ZW5jaWxQYXNzID0gU3RlbmNpbE9wKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVEVOQ0lMUEFTU10pOwogICAgaWYoIHN0YXRlYmxvY2stPnNldC5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0NXX1NURU5DSUxGQUlMXSApCiAgICAgICAgc3RlbmNpbEZhaWxfY2N3ID0gU3RlbmNpbE9wKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DQ1dfU1RFTkNJTEZBSUxdKTsKICAgIGlmKCBzdGF0ZWJsb2NrLT5zZXQucmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMWkZBSUxdICkKICAgICAgICBkZXB0aEZhaWxfY2N3ID0gU3RlbmNpbE9wKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DQ1dfU1RFTkNJTFpGQUlMXSk7CiAgICBpZiggc3RhdGVibG9jay0+c2V0LnJlbmRlclN0YXRlW1dJTkVEM0RSU19DQ1dfU1RFTkNJTFBBU1NdICkKICAgICAgICBzdGVuY2lsUGFzc19jY3cgPSBTdGVuY2lsT3Aoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NDV19TVEVOQ0lMUEFTU10pOwoKICAgIFRSQUNFKCIob25lc2lkZWQgJWQsIHR3b3NpZGVkICVkLCByZWYgJXgsIG1hc2sgJXgsICIKICAgICAgICAgICJHTF9GUk9OVDogZnVuYzogJXgsIGZhaWwgJXgsIHpmYWlsICV4LCB6cGFzcyAleCAiCiAgICAgICAgICAiR0xfQkFDSzogZnVuYzogJXgsIGZhaWwgJXgsIHpmYWlsICV4LCB6cGFzcyAleCApXG4iLAogICAgb25lc2lkZWRfZW5hYmxlLCB0d29zaWRlZF9lbmFibGUsIHJlZiwgbWFzaywKICAgIGZ1bmMsIHN0ZW5jaWxGYWlsLCBkZXB0aEZhaWwsIHN0ZW5jaWxQYXNzLAogICAgZnVuY19jY3csIHN0ZW5jaWxGYWlsX2NjdywgZGVwdGhGYWlsX2Njdywgc3RlbmNpbFBhc3NfY2N3KTsKCiAgICBpZiAodHdvc2lkZWRfZW5hYmxlKSB7CiAgICAgICAgcmVuZGVyc3RhdGVfc3RlbmNpbF90d29zaWRlZChzdGF0ZWJsb2NrLCBHTF9GUk9OVCwgZnVuYywgcmVmLCBtYXNrLCBzdGVuY2lsRmFpbCwgZGVwdGhGYWlsLCBzdGVuY2lsUGFzcyk7CiAgICAgICAgcmVuZGVyc3RhdGVfc3RlbmNpbF90d29zaWRlZChzdGF0ZWJsb2NrLCBHTF9CQUNLLCBmdW5jX2NjdywgcmVmLCBtYXNrLCBzdGVuY2lsRmFpbF9jY3csIGRlcHRoRmFpbF9jY3csIHN0ZW5jaWxQYXNzX2Njdyk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChvbmVzaWRlZF9lbmFibGUpIHsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlIEdMX1NURU5DSUxfVEVTVCIpOwogICAgICAgICAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxGdW5jKC4uLikiKTsKICAgICAgICAgICAgZ2xTdGVuY2lsT3Aoc3RlbmNpbEZhaWwsIGRlcHRoRmFpbCwgc3RlbmNpbFBhc3MpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xTdGVuY2lsT3AoLi4uKSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX1NURU5DSUxfVEVTVCIpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfc3RlbmNpbHdyaXRlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+c3RlbmNpbEJ1ZmZlclRhcmdldCkgewogICAgICAgIGdsU3RlbmNpbE1hc2soc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NURU5DSUxXUklURU1BU0tdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xTdGVuY2lsTWFzaygwKTsKICAgIH0KICAgIGNoZWNrR0xjYWxsKCJnbFN0ZW5jaWxNYXNrIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2ZvZyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIC8qIFRPRE86IFB1dCB0aGlzIGludG8gdGhlIHZlcnRleCB0eXBlIGJsb2NrIG9uY2UgdGhhdCBpcyBpbiB0aGUgc3RhdGUgdGFibGUgKi8KICAgIEJPT0wgZm9nZW5hYmxlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR0VOQUJMRV07CiAgICBCT09MIGlzX3BzMyA9IHVzZV9wcyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKQogICAgICAgICAgICAgICAgICAmJiAoKElXaW5lRDNEUGl4ZWxTaGFkZXJJbXBsICopc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5iYXNlU2hhZGVyLmhleF92ZXJzaW9uID49IFdJTkVEM0RQU19WRVJTSU9OKDMsMCk7CiAgICBmbG9hdCBmb2dzdGFydCwgZm9nZW5kOwoKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIGlmICghZm9nZW5hYmxlKSB7CiAgICAgICAgLyogTm8gZm9nPyBEaXNhYmxlIGl0LCBhbmQgd2UncmUgZG9uZSA6LSkgKi8KICAgICAgICBnbERpc2FibGUoR0xfRk9HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0ZPRyIpOwogICAgICAgIGlmKCB1c2VfcHMoc3RhdGVibG9jay0+d2luZUQzRERldmljZSkKICAgICAgICAgICAgICAgICYmICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciktPmJhc2VTaGFkZXIuaGV4X3ZlcnNpb24gPCBXSU5FRDNEUFNfVkVSU0lPTigzLDApICkgewogICAgICAgICAgICAvKiBkaXNhYmxlIGZvZyBpbiB0aGUgcGl4ZWwgc2hhZGVyCiAgICAgICAgICAgICAqIE5PVEU6IEZvciBwaXhlbCBzaGFkZXIsIEdMX0ZPR19TVEFSVCBhbmQgR0xfRk9HX0VORCBkb24ndCBob2xkIGZvZyBzdGFydCBzIGFuZCBlbmQgZSBidXQKICAgICAgICAgICAgICogLTEvKGUtcykgYW5kIGUvKGUtcykgcmVzcGVjdGl2ZWx5LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZ2xGb2dmKEdMX0ZPR19TVEFSVCwgMC4wZik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX1NUQVJULCBmb2dzdGFydCIpOwogICAgICAgICAgICBnbEZvZ2YoR0xfRk9HX0VORCwgMS4wZik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX0VORCwgZm9nZW5kIik7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1NUQVJUXTsKICAgIGZvZ3N0YXJ0ID0gdG1wdmFsdWUuZjsKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HRU5EXTsKICAgIGZvZ2VuZCA9IHRtcHZhbHVlLmY7CgogICAgLyogRm9nIFJ1bGVzOgogICAgICoKICAgICAqIFdpdGggZml4ZWQgZnVuY3Rpb24gdmVydGV4IHByb2Nlc3NpbmcsIERpcmVjdDNEIGtub3dzIDIgZGlmZmVyZW50IGZvZyBpbnB1dCBzb3VyY2VzLgogICAgICogSXQgY2FuIHVzZSB0aGUgWiB2YWx1ZSBvZiB0aGUgdmVydGV4LCBvciB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBzcGVjdWxhciBjb2xvci4KICAgICAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgZm9nIHZlcnRleCwgZm9nIHRhYmxlIGFuZCB0aGUgdmVydGV4IGRlY2xhcmF0aW9uLiBJZiB0aGUgWiB2YWx1ZQogICAgICogaXMgdXNlZCwgZm9nc3RhcnQsIGZvZ2VuZCBhbmQgdGhlIGVxdWF0aW9uIHR5cGUgYXJlIHVzZWQsIG90aGVyd2lzZSBsaW5lYXIgZm9nIHdpdGgKICAgICAqIHN0YXJ0ID0gMjU1LCBlbmQgPSAwIGlzIHVzZWQuIE9idmlvdXNseSB0aGUgbXNkbiBpcyBub3QgdmVyeSBjbGVhciBvbiB0aGF0LgogICAgICoKICAgICAqIEZPR1RBQkxFTU9ERSAhPSBOT05FOgogICAgICogIFRoZSBaIHZhbHVlIGlzIHVzZWQsIHdpdGggdGhlIGVxdWF0aW9uIHNwZWNpZmllZCwgbm8gbWF0dGVyIHdoYXQgdmVydGV4IHR5cGUuCiAgICAgKgogICAgICogRk9HVEFCTEVNT0RFID09IE5PTkUsIEZPR1ZFUlRFWE1PREUgIT0gTk9ORSwgdW50cmFuc2Zvcm1lZDoKICAgICAqICBQZXIgdmVydGV4IGZvZyBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9nIGVxdWF0aW9uIGFuZCB0aGUgcGFyYW1ldGVycwogICAgICoKICAgICAqIEZPR1RBQkxFTU9ERSA9PSBOT05FLCBGT0dWRVJURVhNT0RFICE9IE5PTkUsIHRyYW5zZm9ybWVkLCBPUgogICAgICogRk9HVEFCTEVNT0RFID09IE5PTkUsIEZPR1ZFUlRFWE1PREUgPT0gTk9ORSwgdW50cmFuc2Zvcm1lZDoKICAgICAqICBMaW5lYXIgZm9nIHdpdGggc3RhcnQgPSAyNTUuMCwgZW5kID0gMC4wLCBpbnB1dCBjb21lcyBmcm9tIHRoZSBzcGVjdWxhciBjb2xvcgogICAgICoKICAgICAqCiAgICAgKiBSdWxlcyBmb3IgdmVydGV4IGZvZyB3aXRoIHNoYWRlcnM6CiAgICAgKgogICAgICogV2hlbiBtaXhpbmcgZml4ZWQgZnVuY3Rpb24gZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSBwcm9ncmFtbWFibGUgcGlwZWxpbmUsIEQzRCBleHBlY3RzCiAgICAgKiB0aGUgZm9nIGNvbXB1dGF0aW9uIHRvIGhhcHBlbiBkdXJpbmcgdHJhbnNmb3JtYXRpb24gd2hpbGUgb3BlbkdMIGV4cGVjdHMgaXQgdG8gaGFwcGVuCiAgICAgKiBkdXJpbmcgcmFzdGVyaXphdGlvbi4gQWxzbywgcHJpb3IgdG8gcGl4ZWwgc2hhZGVyIDMuMCBEM0QgaGFuZGxlcyBmb2cgYmxlbmRpbmcgYWZ0ZXIKICAgICAqIHRoZSBwaXhlbCBzaGFkZXIgd2hpbGUgb3BlbkdMIGFsd2F5cyBleHBlY3RzIHRoZSBwaXhlbCBzaGFkZXIgdG8gaGFuZGxlIHRoZSBibGVuZGluZy4KICAgICAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgV2luZUQzRCBkb2VzOgogICAgICogMSkgaW1wbGVtZW50IGEgbGluZWFyIGZvZyBlcXVhdGlvbiBhbmQgZm9nIGJsZW5kaW5nIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJlIDMuMCBwaXhlbAogICAgICogc2hhZGVyLAogICAgICogYW5kIDIpIGRpc2FibGVzIHRoZSBmb2cgY29tcHV0YXRpb24gKGluIGVpdGhlciB0aGUgZml4ZWQgZnVuY3Rpb24gb3IgcHJvZ3JhbW1hYmxlCiAgICAgKiByYXN0ZXJpemVyKSBpZiB1c2luZyBhIHZlcnRleCBwcm9ncmFtLgogICAgICoKICAgICAqCiAgICAgKiBJZiBhIGZvZ3RhYmxlbW9kZSBhbmQgYSBmb2d2ZXJ0ZXhtb2RlIGFyZSBzcGVjaWZpZWQsIHRhYmxlIGZvZyBpcyBhcHBsaWVkICh3aXRoIG9yCiAgICAgKiB3aXRob3V0IHNoYWRlcnMpLgogICAgICovCgogICAgaWYoIGlzX3BzMyApIHsKICAgICAgICBpZiggIXVzZV92cyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKQogICAgICAgICAgICAgICAgJiYgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1RBQkxFTU9ERV0gPT0gV0lORUQzREZPR19OT05FICkgewogICAgICAgICAgICBGSVhNRSgiSW1wbGVtZW50IHZlcnRleCBmb2cgZm9yIHBpeGVsIHNoYWRlciA+PSAzLjAgYW5kIGZpeGVkIGZ1bmN0aW9uIHBpcGVsaW5lXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHVzZV92cyhzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlKQogICAgICAgICAgICAmJiAoKElXaW5lRDNEVmVydGV4U2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnZlcnRleFNoYWRlciktPmJhc2VTaGFkZXIucmVnX21hcHMuZm9nKSB7CiAgICAgICAgaWYoIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dUQUJMRU1PREVdICE9IFdJTkVEM0RGT0dfTk9ORSApIHsKICAgICAgICAgICAgaWYoIWlzX3BzMykgRklYTUUoIkltcGxlbWVudCB0YWJsZSBmb2cgZm9yIGZvZ2d5IHZlcnRleCBzaGFkZXJcbiIpOwogICAgICAgICAgICAvKiBEaXNhYmxlIGZvZyAqLwogICAgICAgICAgICBmb2dlbmFibGUgPSBGQUxTRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBTZXQgZm9nIGNvbXB1dGF0aW9uIGluIHRoZSByYXN0ZXJpemVyIHRvIHBhc3MgdGhyb3VnaCB0aGUgdmFsdWUgKGp1c3QgYmxlbmQgaXQpICovCiAgICAgICAgICAgIGdsRm9naShHTF9GT0dfTU9ERSwgR0xfTElORUFSKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfTElORUFSKSIpOwogICAgICAgICAgICBmb2dzdGFydCA9IDEuMDsKICAgICAgICAgICAgZm9nZW5kID0gMC4wOwogICAgICAgIH0KICAgICAgICBjb250ZXh0LT5sYXN0X3dhc19mb2dneV9zaGFkZXIgPSBUUlVFOwogICAgfQogICAgZWxzZSBpZiggdXNlX3BzKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UpICkgewogICAgICAgIC8qIE5PVEU6IEZvciBwaXhlbCBzaGFkZXIsIEdMX0ZPR19TVEFSVCBhbmQgR0xfRk9HX0VORCBkb24ndCBob2xkIGZvZyBzdGFydCBzIGFuZCBlbmQgZSBidXQKICAgICAgICAgKiAtMS8oZS1zKSBhbmQgZS8oZS1zKSByZXNwZWN0aXZlbHkgdG8gc2ltcGxpZnkgZm9nIGNvbXB1dGF0aW9uIGluIHRoZSBzaGFkZXIuCiAgICAgICAgICovCiAgICAgICAgV0lORUQzREZPR01PREUgbW9kZTsKICAgICAgICBjb250ZXh0LT5sYXN0X3dhc19mb2dneV9zaGFkZXIgPSBGQUxTRTsKCiAgICAgICAgLyogSWYgYm90aCBmb2dtb2RlcyBhcmUgc2V0IHVzZSB0aGUgdGFibGUgZm9nIG1vZGUgKi8KICAgICAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSA9PSBXSU5FRDNERk9HX05PTkUpCiAgICAgICAgICAgIG1vZGUgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVkVSVEVYTU9ERV07CiAgICAgICAgZWxzZQogICAgICAgICAgICBtb2RlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1RBQkxFTU9ERV07CgogICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfRVhQOgogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfRVhQMjoKICAgICAgICAgICAgICAgIGlmKCFpc19wczMpIEZJWE1FKCJJbXBsZW1lbnQgbm9uIGxpbmVhciBmb2cgZm9yIHBpeGVsIHNoYWRlciA8IDMuMFxuIik7CiAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGZvZyAqLwogICAgICAgICAgICAgICAgZm9nZW5hYmxlID0gRkFMU0U7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19MSU5FQVI6CiAgICAgICAgICAgICAgICBmb2dzdGFydCA9IC0xLjBmLyhmb2dlbmQtZm9nc3RhcnQpOwogICAgICAgICAgICAgICAgZm9nZW5kICo9IC1mb2dzdGFydDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX05PTkU6CiAgICAgICAgICAgICAgICBpZighaXNfcHMzKSBGSVhNRSgiSW1wbGVtZW50IHNvZnR3YXJlIHZlcnRleCBmb2cgZm9yIHBpeGVsIHNoYWRlciA8IDMuMFxuIik7CiAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGZvZyAqLwogICAgICAgICAgICAgICAgZm9nZW5hYmxlID0gRkFMU0U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogRklYTUUoIlVuZXhwZWN0ZWQgV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dWRVJURVhNT0RFXSk7CiAgICAgICAgfQogICAgfQogICAgLyogRFggNyBzZGs6ICJJZiBib3RoIHJlbmRlciBzdGF0ZXModmVydGV4IGFuZCB0YWJsZSBmb2cpIGFyZSBzZXQgdG8gdmFsaWQgbW9kZXMsCiAgICAgKiB0aGUgc3lzdGVtIHdpbGwgYXBwbHkgb25seSBwaXhlbCg9dGFibGUpIGZvZyBlZmZlY3RzLiIKICAgICAqLwogICAgZWxzZSBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSA9PSBXSU5FRDNERk9HX05PTkUpIHsKICAgICAgICBnbEhpbnQoR0xfRk9HX0hJTlQsIEdMX0ZBU1RFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEhpbnQoR0xfRk9HX0hJTlQsIEdMX0ZBU1RFU1QpIik7CiAgICAgICAgY29udGV4dC0+bGFzdF93YXNfZm9nZ3lfc2hhZGVyID0gRkFMU0U7CgogICAgICAgIHN3aXRjaCAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREVdKSB7CiAgICAgICAgICAgIC8qIElmIHByb2Nlc3NlZCB2ZXJ0aWNlcyBhcmUgdXNlZCwgZmFsbCB0aHJvdWdoIHRvIHRoZSBOT05FIGNhc2UgKi8KICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDogIHsKICAgICAgICAgICAgICAgIGlmKCFjb250ZXh0LT5sYXN0X3dhc19yaHcpIHsKICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfRVhQIik7CiAgICAgICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSkgewogICAgICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDI6IHsKICAgICAgICAgICAgICAgIGlmKCFjb250ZXh0LT5sYXN0X3dhc19yaHcpIHsKICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUDIpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUDIiKTsKICAgICAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEVYVF9GT0dfQ09PUkQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQpOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfTElORUFSOiB7CiAgICAgICAgICAgICAgICBpZighY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9MSU5FQVIpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUiIpOwogICAgICAgICAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoRVhUX0ZPR19DT09SRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19OT05FOiB7CiAgICAgICAgICAgICAgICAvKiBCb3RoIGFyZSBub25lPyBBY2NvcmRpbmcgdG8gbXNkbiB0aGUgYWxwaGEgY2hhbm5lbCBvZiB0aGUgc3BlY3VsYXIKICAgICAgICAgICAgICAgICAqIGNvbG9yIGNvbnRhaW5zIGEgZm9nIGZhY3Rvci4gU2V0IGl0IGluIGRyYXdTdHJpZGVkU2xvdy4KICAgICAgICAgICAgICAgICAqIFNhbWUgaGFwcGVucyB3aXRoIFZlcnRleGZvZyBvbiB0cmFuc2Zvcm1lZCB2ZXJ0aWNlcwogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEVYVF9GT0dfQ09PUkQpKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GT0dfQ09PUkRJTkFURV9FWFQpXG4iKTsKICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUik7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfTElORUFSKSIpOwogICAgICAgICAgICAgICAgICAgIGZvZ3N0YXJ0ID0gMHhmZjsKICAgICAgICAgICAgICAgICAgICBmb2dlbmQgPSAweDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgR0wgZm9nLCBoYW5kbGUgdGhpcyBpbiBzb2Z0d2FyZSBpbiBkcmF3U3RyaWRlZFNsb3cgKi8KICAgICAgICAgICAgICAgICAgICBmb2dlbmFibGUgPSBGQUxTRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQ6IEZJWE1FKCJVbmV4cGVjdGVkIFdJTkVEM0RSU19GT0dWRVJURVhNT0RFICVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVkVSVEVYTU9ERV0pOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZ2xIaW50KEdMX0ZPR19ISU5ULCBHTF9OSUNFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEhpbnQoR0xfRk9HX0hJTlQsIEdMX05JQ0VTVCkiKTsKICAgICAgICBjb250ZXh0LT5sYXN0X3dhc19mb2dneV9zaGFkZXIgPSBGQUxTRTsKCiAgICAgICAgc3dpdGNoIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRk9HVEFCTEVNT0RFXSkgewogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfRVhQOgogICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9FWFApOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfRVhQIik7CiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEVYVF9GT0dfQ09PUkQpKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBXSU5FRDNERk9HX0VYUDI6CiAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0VYUDIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9naShHTF9GT0dfTU9ERSwgR0xfRVhQMiIpOwogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSkgewogICAgICAgICAgICAgICAgICAgIGdsRm9naShHTF9GT0dfQ09PUkRJTkFURV9TT1VSQ0VfRVhULCBHTF9GUkFHTUVOVF9ERVBUSF9FWFQpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgV0lORUQzREZPR19MSU5FQVI6CiAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX01PREUsIEdMX0xJTkVBUik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19NT0RFLCBHTF9MSU5FQVIiKTsKICAgICAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoRVhUX0ZPR19DT09SRCkpIHsKICAgICAgICAgICAgICAgICAgICBnbEZvZ2koR0xfRk9HX0NPT1JESU5BVEVfU09VUkNFX0VYVCwgR0xfRlJBR01FTlRfREVQVEhfRVhUKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dpKEdMX0ZPR19DT09SRElOQVRFX1NPVVJDRV9FWFQsIEdMX0ZSQUdNRU5UX0RFUFRIX0VYVCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFdJTkVEM0RGT0dfTk9ORTogICAvKiBXb24ndCBoYXBwZW4gKi8KICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIEZJWE1FKCJVbmV4cGVjdGVkIFdJTkVEM0RSU19GT0dUQUJMRU1PREUgJWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dUQUJMRU1PREVdKTsKICAgICAgICB9CiAgICB9CgogICAgaWYoZm9nZW5hYmxlKSB7CiAgICAgICAgZ2xFbmFibGUoR0xfRk9HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUgR0xfRk9HIik7CgogICAgICAgIGdsRm9nZnYoR0xfRk9HX1NUQVJULCAmZm9nc3RhcnQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX1NUQVJULCBmb2dzdGFydCIpOwogICAgICAgIFRSQUNFKCJGb2cgU3RhcnQgPT0gJWZcbiIsIGZvZ3N0YXJ0KTsKCiAgICAgICAgZ2xGb2dmdihHTF9GT0dfRU5ELCAmZm9nZW5kKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xGb2dmKEdMX0ZPR19FTkQsIGZvZ2VuZCIpOwogICAgICAgIFRSQUNFKCJGb2cgRW5kID09ICVmXG4iLCBmb2dlbmQpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfRk9HKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlIEdMX0ZPRyIpOwogICAgICAgIGlmKCB1c2VfcHMoc3RhdGVibG9jay0+d2luZUQzRERldmljZSkgKSB7CiAgICAgICAgICAgIC8qIGRpc2FibGUgZm9nIGluIHRoZSBwaXhlbCBzaGFkZXIKICAgICAgICAgICAgICogTk9URTogRm9yIHBpeGVsIHNoYWRlciwgR0xfRk9HX1NUQVJUIGFuZCBHTF9GT0dfRU5EIGRvbid0IGhvbGQgZm9nIHN0YXJ0IHMgYW5kIGVuZCBlIGJ1dAogICAgICAgICAgICAgKiAtMS8oZS1zKSBhbmQgZS8oZS1zKSByZXNwZWN0aXZlbHkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBnbEZvZ2YoR0xfRk9HX1NUQVJULCAwLjBmKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9nZihHTF9GT0dfU1RBUlQsIGZvZ3N0YXJ0Iik7CiAgICAgICAgICAgIGdsRm9nZihHTF9GT0dfRU5ELCAxLjBmKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRm9nZihHTF9GT0dfRU5ELCBmb2dlbmQiKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKEdMX1NVUFBPUlQoTlZfRk9HX0RJU1RBTkNFKSkgewogICAgICAgIGdsRm9naShHTF9GT0dfRElTVEFOQ0VfTU9ERV9OViwgR0xfRVlFX1BMQU5FX0FCU09MVVRFX05WKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfZm9nY29sb3IoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBmbG9hdCBjb2xbNF07CiAgICBEM0RDT0xPUlRPR0xGTE9BVDQoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0ZPR0NPTE9SXSwgY29sKTsKICAgIGdsRm9nZnYoR0xfRk9HX0NPTE9SLCAmY29sWzBdKTsKICAgIGNoZWNrR0xjYWxsKCJnbEZvZyBHTF9GT0dfQ09MT1IiKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfZm9nZGVuc2l0eShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwogICAgdG1wdmFsdWUuZCA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GT0dERU5TSVRZXTsKICAgIGdsRm9nZnYoR0xfRk9HX0RFTlNJVFksICZ0bXB2YWx1ZS5mKTsKICAgIGNoZWNrR0xjYWxsKCJnbEZvZ2YoR0xfRk9HX0RFTlNJVFksIChmbG9hdCkgVmFsdWUpIik7Cn0KCi8qIFRPRE86IE1lcmdlIHdpdGggcHJpbWl0aXZlIHR5cGUgKyBpbml0X21hdGVyaWFscygpISEgKi8Kc3RhdGljIHZvaWQgc3RhdGVfY29sb3JtYXQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IChJV2luZUQzRERldmljZUltcGwgKilzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlOwogICAgR0xlbnVtIFBhcm0gPSAwOwogICAgV2luZURpcmVjdDNEU3RyaWRlZERhdGEgKmRpZmZ1c2UgPSAmZGV2aWNlLT5zdHJpZGVkX3N0cmVhbXMudS5zLmRpZmZ1c2U7CiAgICBCT09MIGlzRGlmZnVzZVN1cHBsaWVkOwoKICAgIC8qIERlcGVuZHMgb24gdGhlIGRlY29kZWQgdmVydGV4IGRlY2xhcmF0aW9uIHRvIHJlYWQgdGhlIGV4aXN0ZW5jZSBvZiBkaWZmdXNlIGRhdGEuCiAgICAgKiBUaGUgdmVydGV4IGRlY2xhcmF0aW9uIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHRoZSBmaXhlZCBmdW5jdGlvbiBwaXBlbGluZSBpcyB1c2VkLgogICAgICovCgogICAgaWYoaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1ZERUNMKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpc0RpZmZ1c2VTdXBwbGllZCA9IGRpZmZ1c2UtPmxwRGF0YSB8fCBkaWZmdXNlLT5WQk87CgogICAgaWYgKGlzRGlmZnVzZVN1cHBsaWVkICYmIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUlZFUlRFWF0pIHsKICAgICAgICBUUkFDRSgiZGlmZiAlZCwgYW1iICVkLCBlbWlzICVkLCBzcGVjICVkXG4iLAogICAgICAgICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ESUZGVVNFTUFURVJJQUxTT1VSQ0VdLAogICAgICAgICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTUJJRU5UTUFURVJJQUxTT1VSQ0VdLAogICAgICAgICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTUlTU0lWRU1BVEVSSUFMU09VUkNFXSwKICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1BFQ1VMQVJNQVRFUklBTFNPVVJDRV0pOwoKICAgICAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0RJRkZVU0VNQVRFUklBTFNPVVJDRV0gPT0gV0lORUQzRE1DU19DT0xPUjEpIHsKICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTUJJRU5UTUFURVJJQUxTT1VSQ0VdID09IFdJTkVEM0RNQ1NfQ09MT1IxKSB7CiAgICAgICAgICAgICAgICBQYXJtID0gR0xfQU1CSUVOVF9BTkRfRElGRlVTRTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFBhcm0gPSBHTF9ESUZGVVNFOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQU1CSUVOVE1BVEVSSUFMU09VUkNFXSA9PSBXSU5FRDNETUNTX0NPTE9SMSkgewogICAgICAgICAgICBQYXJtID0gR0xfQU1CSUVOVDsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTUlTU0lWRU1BVEVSSUFMU09VUkNFXSA9PSBXSU5FRDNETUNTX0NPTE9SMSkgewogICAgICAgICAgICBQYXJtID0gR0xfRU1JU1NJT047CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1BFQ1VMQVJNQVRFUklBTFNPVVJDRV0gPT0gV0lORUQzRE1DU19DT0xPUjEpIHsKICAgICAgICAgICAgUGFybSA9IEdMX1NQRUNVTEFSOwogICAgICAgIH0KICAgIH0KCiAgICAvKiBOb3RoaW5nIGNoYW5nZWQsIHJldHVybi4gKi8KICAgIGlmIChQYXJtID09IGNvbnRleHQtPnRyYWNraW5nX3Bhcm0pIHJldHVybjsKCiAgICBpZighUGFybSkgewogICAgICAgIGdsRGlzYWJsZShHTF9DT0xPUl9NQVRFUklBTCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZSBHTF9DT0xPUl9NQVRFUklBTCIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbENvbG9yTWF0ZXJpYWwoR0xfRlJPTlRfQU5EX0JBQ0ssIFBhcm0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbENvbG9yTWF0ZXJpYWwoR0xfRlJPTlRfQU5EX0JBQ0ssIFBhcm0pIik7CiAgICAgICAgZ2xFbmFibGUoR0xfQ09MT1JfTUFURVJJQUwpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9DT0xPUl9NQVRFUklBTCkiKTsKICAgIH0KCiAgICAvKiBBcHBhcmVudGx5IGNhbGxzIHRvIGdsTWF0ZXJpYWxmdiBhcmUgaWdub3JlZCBmb3IgcHJvcGVydGllcyB3ZSdyZQogICAgICogdHJhY2tpbmcgd2l0aCBnbENvbG9yTWF0ZXJpYWwsIHNvIGFwcGx5IHRob3NlIGhlcmUuICovCiAgICBzd2l0Y2ggKGNvbnRleHQtPnRyYWNraW5nX3Bhcm0pIHsKICAgICAgICBjYXNlIEdMX0FNQklFTlRfQU5EX0RJRkZVU0U6CiAgICAgICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfQU1CSUVOVCwgKGZsb2F0KikmZGV2aWNlLT51cGRhdGVTdGF0ZUJsb2NrLT5tYXRlcmlhbC5BbWJpZW50KTsKICAgICAgICAgICAgZ2xNYXRlcmlhbGZ2KEdMX0ZST05UX0FORF9CQUNLLCBHTF9ESUZGVVNFLCAoZmxvYXQqKSZkZXZpY2UtPnVwZGF0ZVN0YXRlQmxvY2stPm1hdGVyaWFsLkRpZmZ1c2UpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xNYXRlcmlhbGZ2Iik7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdMX0RJRkZVU0U6CiAgICAgICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfRElGRlVTRSwgKGZsb2F0KikmZGV2aWNlLT51cGRhdGVTdGF0ZUJsb2NrLT5tYXRlcmlhbC5EaWZmdXNlKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBHTF9BTUJJRU5UOgogICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX0FNQklFTlQsIChmbG9hdCopJmRldmljZS0+dXBkYXRlU3RhdGVCbG9jay0+bWF0ZXJpYWwuQW1iaWVudCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE1hdGVyaWFsZnYiKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR0xfRU1JU1NJT046CiAgICAgICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfRU1JU1NJT04sIChmbG9hdCopJmRldmljZS0+dXBkYXRlU3RhdGVCbG9jay0+bWF0ZXJpYWwuRW1pc3NpdmUpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xNYXRlcmlhbGZ2Iik7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdMX1NQRUNVTEFSOgogICAgICAgICAgICAvKiBPbmx5IGNoYW5nZSBtYXRlcmlhbCBjb2xvciBpZiBzcGVjdWxhciBpcyBlbmFibGVkLCBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIGJsYWNrICovCiAgICAgICAgICAgIGlmIChkZXZpY2UtPnN0YXRlQmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TUEVDVUxBUkVOQUJMRV0pIHsKICAgICAgICAgICAgICAgIGdsTWF0ZXJpYWxmdihHTF9GUk9OVF9BTkRfQkFDSywgR0xfU1BFQ1VMQVIsIChmbG9hdCopJmRldmljZS0+dXBkYXRlU3RhdGVCbG9jay0+bWF0ZXJpYWwuU3BlY3VsYXIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZmxvYXQgYmxhY2tbNF0gPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CiAgICAgICAgICAgICAgICBnbE1hdGVyaWFsZnYoR0xfRlJPTlRfQU5EX0JBQ0ssIEdMX1NQRUNVTEFSLCAmYmxhY2tbMF0pOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTWF0ZXJpYWxmdiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQoKICAgIGNvbnRleHQtPnRyYWNraW5nX3Bhcm0gPSBQYXJtOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9saW5lcGF0dGVybihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCAgICAgICAgICAgICAgICAgZDsKICAgICAgICBXSU5FRDNETElORVBBVFRFUk4gICAgbHA7CiAgICB9IHRtcHBhdHRlcm47CiAgICB0bXBwYXR0ZXJuLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTElORVBBVFRFUk5dOwoKICAgIFRSQUNFKCJMaW5lIHBhdHRlcm46IHJlcGVhdCAlZCBiaXRzICV4XG4iLCB0bXBwYXR0ZXJuLmxwLndSZXBlYXRGYWN0b3IsIHRtcHBhdHRlcm4ubHAud0xpbmVQYXR0ZXJuKTsKCiAgICBpZiAodG1wcGF0dGVybi5scC53UmVwZWF0RmFjdG9yKSB7CiAgICAgICAgZ2xMaW5lU3RpcHBsZSh0bXBwYXR0ZXJuLmxwLndSZXBlYXRGYWN0b3IsIHRtcHBhdHRlcm4ubHAud0xpbmVQYXR0ZXJuKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaW5lU3RpcHBsZShyZXBlYXQsIGxpbmVwYXR0ZXJuKSIpOwogICAgICAgIGdsRW5hYmxlKEdMX0xJTkVfU1RJUFBMRSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX0xJTkVfU1RJUFBMRSk7Iik7CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9MSU5FX1NUSVBQTEUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfTElORV9TVElQUExFKTsiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfemJpYXMoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1pCSUFTXSkgewogICAgICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfWkJJQVNdOwogICAgICAgIFRSQUNFKCJaQmlhcyB2YWx1ZSAlZlxuIiwgdG1wdmFsdWUuZik7CiAgICAgICAgZ2xQb2x5Z29uT2Zmc2V0KDAsIC10bXB2YWx1ZS5mKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xQb2x5Z29uT2Zmc2V0KDAsIC1WYWx1ZSkiKTsKICAgICAgICBnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCk7Iik7CiAgICAgICAgZ2xFbmFibGUoR0xfUE9MWUdPTl9PRkZTRVRfTElORSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0xJTkUpOyIpOwogICAgICAgIGdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX1BPSU5UKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfUE9MWUdPTl9PRkZTRVRfUE9JTlQpOyIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKTsiKTsKICAgICAgICBnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfTElORSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9QT0xZR09OX09GRlNFVF9MSU5FKTsiKTsKICAgICAgICBnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfUE9JTlQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfUE9JTlQpOyIpOwogICAgfQp9CgoKc3RhdGljIHZvaWQgc3RhdGVfbm9ybWFsaXplKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19OT1JNQUxJWkVOT1JNQUxTXSkgewogICAgICAgIGdsRW5hYmxlKEdMX05PUk1BTElaRSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX05PUk1BTElaRSk7Iik7CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9OT1JNQUxJWkUpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfTk9STUFMSVpFKTsiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfcHNpemUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICAvKiBGSVhNRTogY2hlY2sgdGhhdCBwb2ludFNpemUgaXNuJ3Qgb3V0c2lkZSBnbEdldEZsb2F0diggR0xfUE9JTlRfU0laRV9NQVhfQVJCLCAmbWF4U2l6ZSApOyBvciAtdmUgKi8KICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTSVpFXTsKICAgIFRSQUNFKCJTZXQgcG9pbnQgc2l6ZSB0byAlZlxuIiwgdG1wdmFsdWUuZik7CiAgICBnbFBvaW50U2l6ZSh0bXB2YWx1ZS5mKTsKICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50U2l6ZSguLi4pOyIpOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wc2l6ZW1pbihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTSVpFX01JTl07CiAgICBpZihHTF9TVVBQT1JUKEFSQl9QT0lOVF9QQVJBTUVURVJTKSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xQb2ludFBhcmFtZXRlcmZBUkIpKEdMX1BPSU5UX1NJWkVfTUlOX0FSQiwgdG1wdmFsdWUuZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9pbnRQYXJhbWV0ZXJmQVJCKC4uLiIpOwogICAgfQogICAgZWxzZSBpZihHTF9TVVBQT1JUKEVYVF9QT0lOVF9QQVJBTUVURVJTKSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xQb2ludFBhcmFtZXRlcmZFWFQpKEdMX1BPSU5UX1NJWkVfTUlOX0VYVCwgdG1wdmFsdWUuZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9pbnRQYXJhbWV0ZXJmRVhUKC4uLik7Iik7CiAgICB9IGVsc2UgaWYodG1wdmFsdWUuZiAhPSAxLjApIHsKICAgICAgICBGSVhNRSgiV0lORUQzRFJTX1BPSU5UU0laRV9NSU4gbm90IHN1cHBvcnRlZCBvbiB0aGlzIG9wZW5nbCwgdmFsdWUgaXMgJWZcbiIsIHRtcHZhbHVlLmYpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wc2l6ZW1heChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTSVpFX01BWF07CiAgICBpZihHTF9TVVBQT1JUKEFSQl9QT0lOVF9QQVJBTUVURVJTKSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xQb2ludFBhcmFtZXRlcmZBUkIpKEdMX1BPSU5UX1NJWkVfTUFYX0FSQiwgdG1wdmFsdWUuZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9pbnRQYXJhbWV0ZXJmQVJCKC4uLiIpOwogICAgfQogICAgZWxzZSBpZihHTF9TVVBQT1JUKEVYVF9QT0lOVF9QQVJBTUVURVJTKSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xQb2ludFBhcmFtZXRlcmZFWFQpKEdMX1BPSU5UX1NJWkVfTUFYX0VYVCwgdG1wdmFsdWUuZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsUG9pbnRQYXJhbWV0ZXJmRVhUKC4uLik7Iik7CiAgICB9IGVsc2UgaWYodG1wdmFsdWUuZiAhPSA2NC4wKSB7CiAgICAgICAgRklYTUUoIldJTkVEM0RSU19QT0lOVFNJWkVfTUFYIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBvcGVuZ2wsIHZhbHVlIGlzICVmXG4iLCB0bXB2YWx1ZS5mKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfcHNjYWxlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogVE9ETzogR3JvdXAgdGhpcyB3aXRoIHRoZSB2aWV3cG9ydCAqLwogICAgLyoKICAgICAqIFBPSU5UU0NBTEVFTkFCTEUgY29udHJvbHMgaG93IHBvaW50IHNpemUgdmFsdWUgaXMgdHJlYXRlZC4gSWYgc2V0IHRvCiAgICAgKiB0cnVlLCB0aGUgcG9pbnQgc2l6ZSBpcyBzY2FsZWQgd2l0aCByZXNwZWN0IHRvIGhlaWdodCBvZiB2aWV3cG9ydC4KICAgICAqIFdoZW4gc2V0IHRvIGZhbHNlIHBvaW50IHNpemUgaXMgaW4gcGl4ZWxzLgogICAgICoKICAgICAqIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy9kaXJlY3R4OV9jL3BvaW50X3Nwcml0ZXMuYXNwCiAgICAgKi8KCiAgICAvKiBEZWZhdWx0IHZhbHVlcyAqLwogICAgR0xmbG9hdCBhdHRbM10gPSB7MS4wZiwgMC4wZiwgMC4wZn07CgogICAgLyoKICAgICAqIE1pbmltdW0gdmFsaWQgcG9pbnQgc2l6ZSBmb3IgT3BlbkdMIGlzIDEuMGYuIEZvciBEaXJlY3QzRCBpdCBpcyAwLjBmLgogICAgICogVGhpcyBtZWFucyB0aGF0IE9wZW5HTCB3aWxsIGNsYW1wIHJlYWxseSBzbWFsbCBwb2ludCBzaXplcyB0byAxLjBmLgogICAgICogVG8gY29ycmVjdCBmb3IgdGhpcyB3ZSBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzY2FsZSBmYWN0b3Igd2hlbiBzaXplcwogICAgICogYXJlIGxlc3MgdGhhbiAxLjBmLiBzY2FsZV9mYWN0b3IgPSAgMS4wZiAvIHBvaW50X3NpemUuCiAgICAgKi8KICAgIEdMZmxvYXQgcG9pbnRTaXplID0gKigoZmxvYXQqKSZzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTSVpFXSk7CiAgICBpZihwb2ludFNpemUgPiAwLjBmKSB7CiAgICAgICAgR0xmbG9hdCBzY2FsZUZhY3RvcjsKCiAgICAgICAgaWYocG9pbnRTaXplIDwgMS4wZikgewogICAgICAgICAgICBzY2FsZUZhY3RvciA9IHBvaW50U2l6ZSAqIHBvaW50U2l6ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzY2FsZUZhY3RvciA9IDEuMGY7CiAgICAgICAgfQoKICAgICAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTQ0FMRUVOQUJMRV0pIHsKICAgICAgICAgICAgYXR0WzBdID0gKigoZmxvYXQqKSZzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9JTlRTQ0FMRV9BXSkgLwogICAgICAgICAgICAgICAgICAgIChzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQgKiBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQgKiBzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgIGF0dFsxXSA9ICooKGZsb2F0Kikmc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BPSU5UU0NBTEVfQl0pIC8KICAgICAgICAgICAgICAgICAgICAoc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0ICogc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0ICogc2NhbGVGYWN0b3IpOwogICAgICAgICAgICBhdHRbMl0gPSAqKChmbG9hdCopJnN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QT0lOVFNDQUxFX0NdKSAvCiAgICAgICAgICAgICAgICAgICAgKHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodCAqIHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodCAqIHNjYWxlRmFjdG9yKTsKICAgICAgICB9CiAgICB9CgogICAgaWYoR0xfU1VQUE9SVChBUkJfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmdkFSQikoR0xfUE9JTlRfRElTVEFOQ0VfQVRURU5VQVRJT05fQVJCLCBhdHQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZnZBUkIoR0xfRElTVEFOQ0VfQVRURU5VQVRJT05fQVJCLCAuLi4iKTsKICAgIH0KICAgIGVsc2UgaWYoR0xfU1VQUE9SVChFWFRfUE9JTlRfUEFSQU1FVEVSUykpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsUG9pbnRQYXJhbWV0ZXJmdkVYVCkoR0xfRElTVEFOQ0VfQVRURU5VQVRJT05fRVhULCBhdHQpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvaW50UGFyYW1ldGVyZnZFWFQoR0xfRElTVEFOQ0VfQVRURU5VQVRJT05fRVhULCAuLi4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgVFJBQ0UoIlBPSU5UX1BBUkFNRVRFUlMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2Ygb3BlbmdsXG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfY29sb3J3cml0ZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIFZhbHVlID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEVdOwoKICAgIFRSQUNFKCJDb2xvciBtYXNrOiByKCVkKSBnKCVkKSBiKCVkKSBhKCVkKVxuIiwKICAgICAgICBWYWx1ZSAmIFdJTkVEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgID8gMSA6IDAsCiAgICAgICAgVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA/IDEgOiAwLAogICAgICAgIFZhbHVlICYgV0lORUQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgPyAxIDogMCwKICAgICAgICBWYWx1ZSAmIFdJTkVEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBID8gMSA6IDApOwogICAgZ2xDb2xvck1hc2soVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA/IEdMX1RSVUUgOiBHTF9GQUxTRSwKICAgICAgICAgICAgICAgIFZhbHVlICYgV0lORUQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gPyBHTF9UUlVFIDogR0xfRkFMU0UsCiAgICAgICAgICAgICAgICBWYWx1ZSAmIFdJTkVEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgID8gR0xfVFJVRSA6IEdMX0ZBTFNFLAogICAgICAgICAgICAgICAgVmFsdWUgJiBXSU5FRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CiAgICBjaGVja0dMY2FsbCgiZ2xDb2xvck1hc2soLi4uKSIpOwoKICAgIC8qIGRlcGVuZHMgb24gV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUuICovCiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTFdICE9IDB4MDAwMDAwMEYgfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMl0gIT0gMHgwMDAwMDAwRiB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUzXSAhPSAweDAwMDAwMDBGICkgewogICAgICAgIEVSUigiKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMS8yLzMsJWQsJWQsJWQpIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIE1pc3Npbmcgb2YgY2FwIEQzRFBNSVNDQ0FQU19JTkRFUEVOREVOVFdSSVRFTUFTS1Mgd2Fzbid0IGhvbm9yZWQ/XG4iLAogICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTFdLAogICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTJdLAogICAgICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JXUklURUVOQUJMRTNdKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfbG9jYWx2aWV3ZXIoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTE9DQUxWSUVXRVJdKSB7CiAgICAgICAgZ2xMaWdodE1vZGVsaShHTF9MSUdIVF9NT0RFTF9MT0NBTF9WSUVXRVIsIDEpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0TW9kZWxpKEdMX0xJR0hUX01PREVMX0xPQ0FMX1ZJRVdFUiwgMSkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xMaWdodE1vZGVsaShHTF9MSUdIVF9NT0RFTF9MT0NBTF9WSUVXRVIsIDApOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0TW9kZWxpKEdMX0xJR0hUX01PREVMX0xPQ0FMX1ZJRVdFUiwgMCkiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfbGFzdHBpeGVsKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0xBU1RQSVhFTF0pIHsKICAgICAgICBUUkFDRSgiTGFzdCBQaXhlbCBEcmF3aW5nIEVuYWJsZWRcbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWMgQk9PTCBmaXJzdCA9IFRSVUU7CiAgICAgICAgaWYoZmlyc3QpIHsKICAgICAgICAgICAgRklYTUUoIkxhc3QgUGl4ZWwgRHJhd2luZyBEaXNhYmxlZCwgbm90IGhhbmRsZWQgeWV0XG4iKTsKICAgICAgICAgICAgZmlyc3QgPSBGQUxTRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBUUkFDRSgiTGFzdCBQaXhlbCBEcmF3aW5nIERpc2FibGVkLCBub3QgaGFuZGxlZCB5ZXRcbiIpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfcG9pbnRzcHJpdGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bnNpZ25lZCBpbnQgaTsKICAgIGludCB2YWw7CgogICAgLyogVE9ETzogTlZfUE9JTlRfU1BSSVRFICovCiAgICBpZiAoIUdMX1NVUFBPUlQoQVJCX1BPSU5UX1NQUklURSkpIHsKICAgICAgICBUUkFDRSgiUG9pbnQgc3ByaXRlcyBub3Qgc3VwcG9ydGVkXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QT0lOVFNQUklURUVOQUJMRV0pIHsKICAgICAgICB2YWwgPSBHTF9UUlVFOwogICAgfSBlbHNlIHsKICAgICAgICB2YWwgPSBHTF9GQUxTRTsKICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgR0xfTElNSVRTKHRleHR1cmVzKTsgaSsrKSB7CiAgICAgICAgLyogTm90ZSB0aGUgV0lORUQzRFJTIHZhbHVlIGFwcGxpZXMgdG8gYWxsIHRleHR1cmVzLCBidXQgR0wgaGFzIG9uZQogICAgICAgICAqIHBlciB0ZXh0dXJlLCBzbyBhcHBseSBpdCBub3cgcmVhZHkgdG8gYmUgdXNlZCEKICAgICAgICAgKi8KICAgICAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBpKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgICAgICB9IGVsc2UgaWYgKGk9PTEpIHsKICAgICAgICAgICAgRklYTUUoIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGdsVGV4RW52aShHTF9QT0lOVF9TUFJJVEVfQVJCLCBHTF9DT09SRF9SRVBMQUNFX0FSQiwgdmFsKTsKICAgICAgICBjaGVja0dMY2FsbCgodmFsPyJnbFRleEVudmkoR0xfUE9JTlRfU1BSSVRFLCBHTF9DT09SRF9SRVBMQUNFLCBHTF9UUlVFKSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xUZXhFbnZpKEdMX1BPSU5UX1NQUklURSwgR0xfQ09PUkRfUkVQTEFDRSwgR0xfRkFMU0UpIikpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV93cmFwKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyoqCiAgICAgaHR0cDovL3d3dy5jb3NjLmJyb2NrdS5jYS9PZmZlcmluZ3MvM1A5OC9jb3Vyc2UvbGVjdHVyZXMvdGV4dHVyZS8KICAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2FyY2hpdmUvZGVmYXVsdC5hc3A/dXJsPS9hcmNoaXZlL2VuLXVzL2RpcmVjdHg5X2MvZGlyZWN0eC9ncmFwaGljcy9wcm9ncmFtbWluZ2d1aWRlL0ZpeGVkRnVuY3Rpb24vVGV4dHVyZXMvdGV4dHVyZXdyYXBwaW5nLmFzcAogICAgIGh0dHA6Ly93d3cuZ2FtZWRldi5uZXQvcmVmZXJlbmNlL3Byb2dyYW1taW5nL2ZlYXR1cmVzL3JlbmRlcmVyZGxsMy9wYWdlMi5hc3AKICAgICBEZXNjdXNzaW9uIHRoYXQgd2F5cyB0byB0dXJuIG9uIFdSQVBpbmcgdG8gc29sdmUgYW4gb3BlbmdsIGNvbnZlcnNpb24gcHJvYmxlbS4KICAgICBodHRwOi8vd3d3LmZsaXBjb2RlLm9yZy9jZ2ktYmluL2ZjbXNnLmNnaT90aHJlYWRfc2hvdz0xMDI0OAoKICAgICBzbyBmYXIgYXMgSSBjYW4gdGVsbCwgd3JhcHBpbmcgYW5kIHRleHR1cmUtY29vcmRpbmF0ZSBnZW5lcmF0ZSBnbyBoYW5kIGluIGhhbmQsCiAgICAgKi8KICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMF0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMV0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMl0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQM10gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQNF0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQNV0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQNl0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQN10gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQOF0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQOV0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMTBdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDExXSB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1dSQVAxMl0gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQMTNdIHx8CiAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfV1JBUDE0XSB8fAogICAgICAgc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1dSQVAxNV0gKSB7CiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfV1JBUDApIFRleHR1cmUgd3JhcGluZyBub3QgeWV0IHN1cHBvcnRlZFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX211bHRpc2FtcGxlYWEoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZiggR0xfU1VQUE9SVChBUkJfTVVMVElTQU1QTEUpICkgewogICAgICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBU10pIHsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfTVVMVElTQU1QTEVfQVJCKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX01VTFRJU0FNUExFX0FSQikiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbERpc2FibGUoR0xfTVVMVElTQU1QTEVfQVJCKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9NVUxUSVNBTVBMRV9BUkIpIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVNdKSB7CiAgICAgICAgICAgIEVSUigiTXVsdGlzYW1wbGUgYW50aWFsaWFzaW5nIG5vdCBzdXBwb3J0ZWQgYnkgZ2xcbiIpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfc2Npc3NvcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TQ0lTU09SVEVTVEVOQUJMRV0pIHsKICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpIik7CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKSIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9kZXB0aGJpYXMoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bmlvbiB7CiAgICAgICAgRFdPUkQgZDsKICAgICAgICBmbG9hdCBmOwogICAgfSB0bXB2YWx1ZTsKCiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBU10gfHwKICAgICAgIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19ERVBUSEJJQVNdKSB7CiAgICAgICAgdG1wdmFsdWUuZCA9IHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTXTsKICAgICAgICBnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCkiKTsKICAgICAgICBnbFBvbHlnb25PZmZzZXQodG1wdmFsdWUuZiwgKigoZmxvYXQqKSZzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfREVQVEhCSUFTXSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFBvbHlnb25PZmZzZXQoLi4uKSIpOwogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGUoR0xfUE9MWUdPTl9PRkZTRVRfRklMTCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKSIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wZXJzcGVjdGl2ZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfVEVYVFVSRVBFUlNQRUNUSVZFXSkgewogICAgICAgIGdsSGludChHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQsIEdMX05JQ0VTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsSGludChHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQsIEdMX05JQ0VTVCkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwgR0xfRkFTVEVTVCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsSGludChHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQsIEdMX0ZBU1RFU1QpIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3N0aXBwbGVkYWxwaGEoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NUSVBQTEVEQUxQSEFdKQogICAgICAgIEZJWE1FKCIgU3RpcHBsZWQgQWxwaGEgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfYW50aWFsaWFzKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19BTlRJQUxJQVNdKQogICAgICAgIEZJWE1FKCIgQW50aWFsaWFzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIik7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX211bHRpc2FtcG1hc2soRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX01VTFRJU0FNUExFTUFTS10gIT0gMHhGRkZGRkZGRikKICAgICAgICBGSVhNRSgiKFdJTkVEM0RSU19NVUxUSVNBTVBMRU1BU0ssJWQpIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19NVUxUSVNBTVBMRU1BU0tdKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfcGF0Y2hlZGdlc3R5bGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BBVENIRURHRVNUWUxFXSAhPSBXSU5FRDNEUEFUQ0hFREdFX0RJU0NSRVRFKQogICAgICAgIEZJWE1FKCIoV0lORUQzRFJTX1BBVENIRURHRVNUWUxFLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUEFUQ0hFREdFU1RZTEVdKTsKfQoKc3RhdGljIHZvaWQgc3RhdGVfcGF0Y2hzZWdtZW50cyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwogICAgdG1wdmFsdWUuZiA9IDEuMGY7CgogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYgKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QQVRDSFNFR01FTlRTXSAhPSB0bXB2YWx1ZS5kKQogICAgewogICAgICAgIHN0YXRpYyBCT09MIGRpc3BsYXllZCA9IEZBTFNFOwoKICAgICAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1BBVENIU0VHTUVOVFNdOwogICAgICAgIGlmKCFkaXNwbGF5ZWQpCiAgICAgICAgICAgIEZJWE1FKCIoV0lORUQzRFJTX1BBVENIU0VHTUVOVFMsJWYpIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHRtcHZhbHVlLmYpOwoKICAgICAgICBkaXNwbGF5ZWQgPSBUUlVFOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wb3NpdGlvbmRlZ3JlZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmIChzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUE9TSVRJT05ERUdSRUVdICE9IFdJTkVEM0RERUdSRUVfQ1VCSUMpCiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfUE9TSVRJT05ERUdSRUUsJWQpIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19QT1NJVElPTkRFR1JFRV0pOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9ub3JtYWxkZWdyZWUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBUUkFDRSgiU3R1YlxuIik7CiAgICBpZiAoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX05PUk1BTERFR1JFRV0gIT0gV0lORUQzRERFR1JFRV9MSU5FQVIpCiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfTk9STUFMREVHUkVFLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTk9STUFMREVHUkVFXSk7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3Rlc3NlbGxhdGlvbihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIFRSQUNFKCJTdHViXG4iKTsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTl0pCiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfRU5BQkxFQURBUFRJVkVURVNTRUxMQVRJT04sJWQpIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTl0pOwp9CgoKc3RhdGljIHZvaWQgc3RhdGVfc3JnYndyaXRlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NSR0JXUklURUVOQUJMRV0pCiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfU1JHQldSSVRFRU5BQkxFIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOwp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9zZXBlcmF0ZWJsZW5kKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVFJBQ0UoIlN0dWJcbiIpOwogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRV0pCiAgICAgICAgRklYTUUoIihXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCVkKSBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFXSk7Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3dyYXB1KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1dSQVBVXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1dSQVBVIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV93cmFwdihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19XUkFQVl0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19XUkFQViBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfbW9ub2VuYWJsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19NT05PRU5BQkxFXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX01PTk9FTkFCTEUgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3JvcDIoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUk9QMl0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19ST1AyIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9wbGFuZW1hc2soRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfUExBTkVNQVNLXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX1BMQU5FTUFTSyBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfc3VicGl4ZWwoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfU1VCUElYRUxdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfU1VCUElYRUwgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3N1YnBpeGVseChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19TVUJQSVhFTFhdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfU1VCUElYRUxYIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9zdGlwcGxlZW5hYmxlKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1NUSVBQTEVFTkFCTEVdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfU1RJUFBMRUVOQUJMRSBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfYm9yZGVyY29sb3IoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQk9SREVSQ09MT1JdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfQk9SREVSQ09MT1Igbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX21pcG1hcGxvZGJpYXMoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfTUlQTUFQTE9EQklBU10pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19NSVBNQVBMT0RCSUFTIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9hbmlzb3Ryb3B5KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FOSVNPVFJPUFldKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfQU5JU09UUk9QWSBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfZmx1c2hiYXRjaChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GTFVTSEJBVENIXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX0ZMVVNIQkFUQ0ggbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3RyYW5zbHVjZW50c2koRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfVFJBTlNMVUNFTlRTT1JUSU5ERVBFTkRFTlRdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfVFJBTlNMVUNFTlRTT1JUSU5ERVBFTkRFTlQgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2V4dGVudHMoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRVhURU5UU10pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19FWFRFTlRTIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9ja2V5YmxlbmQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JLRVlCTEVOREVOQUJMRV0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19DT0xPUktFWUJMRU5ERU5BQkxFIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgovKiBBY3RpdmF0ZXMgdGhlIHRleHR1cmUgZGltZW5zaW9uIGFjY29yZGluZyB0byB0aGUgYm91bmQgRDNEIHRleHR1cmUuCiAqIERvZXMgbm90IGNhcmUgZm9yIHRoZSBjb2xvcm9wIG9yIGNvcnJlY3QgZ2wgdGV4dHVyZSB1bml0KHdoZW4gdXNpbmcgbnZyYykKICogUmVxdWlyZXMgdGhlIGNhbGxlciB0byBhY3RpdmF0ZSB0aGUgY29ycmVjdCB1bml0IGJlZm9yZQogKi8Kc3RhdGljIHZvaWQgYWN0aXZhdGVfZGltZW5zaW9ucyhEV09SRCBzdGFnZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIEJPT0wgYnVtcG1hcCA9IEZBTFNFOwoKICAgIGlmKHN0YWdlID4gMCAmJiAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlIC0gMV1bV0lORUQzRFRTU19DT0xPUk9QXSA9PSBXSU5FRDNEVE9QX0JVTVBFTlZNQVBMVU1JTkFOQ0UgfHwKICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlIC0gMV1bV0lORUQzRFRTU19DT0xPUk9QXSA9PSBXSU5FRDNEVE9QX0JVTVBFTlZNQVApKSB7CiAgICAgICAgYnVtcG1hcCA9IFRSVUU7CiAgICAgICAgY29udGV4dC0+dGV4U2hhZGVyQnVtcE1hcCB8PSAoMSA8PCBzdGFnZSk7CiAgICB9IGVsc2UgewogICAgICAgIGNvbnRleHQtPnRleFNoYWRlckJ1bXBNYXAgJj0gfigxIDw8IHN0YWdlKTsKICAgIH0KCiAgICBpZihzdGF0ZWJsb2NrLT50ZXh0dXJlc1tzdGFnZV0pIHsKICAgICAgICBzd2l0Y2goc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbc3RhZ2VdKSB7CiAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoTlZfVEVYVFVSRV9TSEFERVIyKSkgewogICAgICAgICAgICAgICAgICAgIGdsVGV4RW52aShHTF9URVhUVVJFX1NIQURFUl9OViwgR0xfU0hBREVSX09QRVJBVElPTl9OViwgYnVtcG1hcCA/IEdMX09GRlNFVF9URVhUVVJFXzJEX05WIDogR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzNEKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9DVUJFX01BUCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChOVl9URVhUVVJFX1NIQURFUjIpKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xUZXhFbnZpKEdMX1RFWFRVUkVfU0hBREVSX05WLCBHTF9TSEFERVJfT1BFUkFUSU9OX05WLCBHTF9URVhUVVJFXzNEKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9DVUJFX01BUCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8yRCkiKTsKICAgICAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzNEKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV8zRCkiKTsKICAgICAgICAgICAgICAgICAgICBnbFRleEVudmkoR0xfVEVYVFVSRV9TSEFERVJfTlYsIEdMX1NIQURFUl9PUEVSQVRJT05fTlYsIEdMX1RFWFRVUkVfM0QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9BUkI6CiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKE5WX1RFWFRVUkVfU0hBREVSMikpIHsKICAgICAgICAgICAgICAgICAgICBnbFRleEVudmkoR0xfVEVYVFVSRV9TSEFERVJfTlYsIEdMX1NIQURFUl9PUEVSQVRJT05fTlYsIEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8yRCkiKTsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFXzNEKSIpOwogICAgICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIik7CiAgICAgICAgICAgICAgICAgICAgZ2xUZXhFbnZpKEdMX1RFWFRVUkVfU0hBREVSX05WLCBHTF9TSEFERVJfT1BFUkFUSU9OX05WLCBHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZihHTF9TVVBQT1JUKE5WX1RFWFRVUkVfU0hBREVSMikpIHsKICAgICAgICAgICAgZ2xUZXhFbnZpKEdMX1RFWFRVUkVfU0hBREVSX05WLCBHTF9TSEFERVJfT1BFUkFUSU9OX05WLCBHTF9OT05FKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8yRCkiKTsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoQVJCX1RFWFRVUkVfQ1VCRV9NQVApKSB7CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBCaW5kaW5nIHRleHR1cmVzIGlzIGRvbmUgYnkgc2FtcGxlcnMuIEEgZHVtbXkgdGV4dHVyZSB3aWxsIGJlIGJvdW5kICovCiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCB0ZXhfY29sb3JvcChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwogICAgRFdPUkQgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFtzdGFnZV07CgogICAgVFJBQ0UoIlNldHRpbmcgY29sb3Igb3AgZm9yIHN0YWdlICVkXG4iLCBzdGFnZSk7CgogICAgaWYgKHN0YXRlYmxvY2stPnBpeGVsU2hhZGVyICYmIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYKICAgICAgICAoKElXaW5lRDNEUGl4ZWxTaGFkZXJJbXBsICopc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5iYXNlU2hhZGVyLmZ1bmN0aW9uKSB7CiAgICAgICAgLyogVXNpbmcgYSBwaXhlbCBzaGFkZXI/IERvbid0IGNhcmUgZm9yIGFueXRoaW5nIGhlcmUsIHRoZSBzaGFkZXIgYXBwbHlpbmcgZG9lcyBpdCAqLwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoc3RhZ2UgIT0gbWFwcGVkX3N0YWdlKSBXQVJOKCJVc2luZyBub24gMToxIG1hcHBpbmc6ICVkIC0+ICVkIVxuIiwgc3RhZ2UsIG1hcHBlZF9zdGFnZSk7CgogICAgaWYgKG1hcHBlZF9zdGFnZSAhPSAtMSkgewogICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9NVUxUSVRFWFRVUkUpKSB7CiAgICAgICAgICAgIGlmIChtYXBwZWRfc3RhZ2UgPj0gR0xfTElNSVRTKHRleHR1cmVzKSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSAhPSBXSU5FRDNEVE9QX0RJU0FCTEUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdICE9IDApIHsKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiQXR0ZW1wdCB0byBlbmFibGUgdW5zdXBwb3J0ZWQgc3RhZ2UhXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhZ2UgPiAwKSB7CiAgICAgICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmIChHTF9TVVBQT1JUKE5WX1JFR0lTVEVSX0NPTUJJTkVSUykpIHsKICAgICAgICBpZihzdGF0ZWJsb2NrLT5sb3dlc3RfZGlzYWJsZWRfc3RhZ2UgPiAwKSB7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1JFR0lTVEVSX0NPTUJJTkVSU19OVik7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xDb21iaW5lclBhcmFtZXRlcmlOVihHTF9OVU1fR0VORVJBTF9DT01CSU5FUlNfTlYsIHN0YXRlYmxvY2stPmxvd2VzdF9kaXNhYmxlZF9zdGFnZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9SRUdJU1RFUl9DT01CSU5FUlNfTlYpOwogICAgICAgIH0KICAgIH0KICAgIGlmKHN0YWdlID49IHN0YXRlYmxvY2stPmxvd2VzdF9kaXNhYmxlZF9zdGFnZSkgewogICAgICAgIFRSQUNFKCJTdGFnZSBkaXNhYmxlZFxuIik7CiAgICAgICAgaWYgKG1hcHBlZF9zdGFnZSAhPSAtMSkgewogICAgICAgICAgICAvKiBEaXNhYmxlIGV2ZXJ5dGhpbmcgaGVyZSAqLwogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8yRCkiKTsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoQVJCX1RFWFRVUkVfQ1VCRV9NQVApKSB7CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihHTF9TVVBQT1JUKE5WX1RFWFRVUkVfU0hBREVSMikpIHsKICAgICAgICAgICAgZ2xUZXhFbnZpKEdMX1RFWFRVUkVfU0hBREVSX05WLCBHTF9TSEFERVJfT1BFUkFUSU9OX05WLCBHTF9OT05FKTsKICAgICAgICB9CiAgICAgICAgLyogQWxsIGRvbmUgKi8KICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyogVGhlIHNhbXBsZXIgd2lsbCBhbHNvIGFjdGl2YXRlIHRoZSBjb3JyZWN0IHRleHR1cmUgZGltZW5zaW9ucywgc28gbm8gbmVlZCB0byBkbyBpdCBoZXJlCiAgICAgKiBpZiB0aGUgc2FtcGxlciBmb3IgdGhpcyBzdGFnZSBpcyBkaXJ0eQogICAgICovCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1NBTVBMRVIoc3RhZ2UpKSkgewogICAgICAgIGlmIChtYXBwZWRfc3RhZ2UgIT0gLTEpIGFjdGl2YXRlX2RpbWVuc2lvbnMoc3RhZ2UsIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQoKICAgIC8qIFNldCB0aGUgdGV4dHVyZSBjb21iaW5lcnMgKi8KICAgIGlmIChHTF9TVVBQT1JUKE5WX1JFR0lTVEVSX0NPTUJJTkVSUykpIHsKICAgICAgICBzZXRfdGV4X29wX252cmMoKElXaW5lRDNERGV2aWNlICopc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgRkFMU0UsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcyXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUkFSRzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3N0YWdlKTsKCiAgICAgICAgLyogSW4gcmVnaXN0ZXIgY29tYmluZXJzIGJ1bXAgbWFwcGluZyBpcyBkb25lIGluIHRoZSBzdGFnZSBBRlRFUiB0aGUgb25lIHRoYXQgaGFzIHRoZSBidW1wIG1hcCBvcGVyYXRpb24gc2V0LAogICAgICAgICAqIHRodXMgdGhlIHRleHR1cmUgc2hhZGVyIG1heSBoYXZlIHRvIGJlIHVwZGF0ZWQKICAgICAgICAgKi8KICAgICAgICBpZihHTF9TVVBQT1JUKE5WX1RFWFRVUkVfU0hBREVSMikpIHsKICAgICAgICAgICAgQk9PTCB1c2VzQnVtcCA9IChzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0gPT0gV0lORUQzRFRPUF9CVU1QRU5WTUFQTFVNSU5BTkNFIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdID09IFdJTkVEM0RUT1BfQlVNUEVOVk1BUCkgPyBUUlVFIDogRkFMU0U7CiAgICAgICAgICAgIEJPT0wgdXNlZEJ1bXAgPSAoY29udGV4dC0+dGV4U2hhZGVyQnVtcE1hcCAmIDEgPDwgKHN0YWdlICsgMSkpID8gVFJVRSA6IEZBTFNFOwogICAgICAgICAgICBpZih1c2VzQnVtcCAhPSB1c2VkQnVtcCkgewogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlICsgMSkpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgICAgICAgICAgICAgYWN0aXZhdGVfZGltZW5zaW9ucyhzdGFnZSArIDEsIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHNldF90ZXhfb3AoKElXaW5lRDNERGV2aWNlICopc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgRkFMU0UsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcxXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcyXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcwXSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9hbHBoYW9wKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3N0YWdlXTsKICAgIERXT1JEIG9wLCBhcmcxLCBhcmcyLCBhcmcwOwoKICAgIFRSQUNFKCJTZXR0aW5nIGFscGhhIG9wIGZvciBzdGFnZSAlZFxuIiwgc3RhZ2UpOwogICAgLyogRG8gbm90IGNhcmUgZm9yIGVuYWJsZWQgLyBkaXNhYmxlZCBzdGFnZXMsIGp1c3QgYXNzaWduIHRoZSBzZXR0aWducy4gY29sb3JvcCBkaXNhYmxlcyAvIGVuYWJsZXMgcmVxdWlyZWQgc3R1ZmYgKi8KICAgIGlmIChtYXBwZWRfc3RhZ2UgIT0gLTEpIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBpZiAoc3RhZ2UgPj0gR0xfTElNSVRTKHRleHR1cmVzKSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSAhPSBXSU5FRDNEVE9QX0RJU0FCTEUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdICE9IDApIHsKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiQXR0ZW1wdCB0byBlbmFibGUgdW5zdXBwb3J0ZWQgc3RhZ2UhXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhZ2UgPiAwKSB7CiAgICAgICAgICAgIC8qIFdlIGNhbid0IGRvIGFueXRoaW5nIGhlcmUgKi8KICAgICAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgb3AgPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQUxQSEFPUF07CiAgICBhcmcxID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMV07CiAgICBhcmcyID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMl07CiAgICBhcmcwID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMF07CgogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFXSAmJiBzdGFnZSA9PSAwICYmCiAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSAmJiBzdGF0ZWJsb2NrLT50ZXh0dXJlRGltZW5zaW9uc1swXSA9PSBHTF9URVhUVVJFXzJEKSB7CiAgICAgICAgSVdpbmVEM0RTdXJmYWNlSW1wbCAqc3VyZiA9IChJV2luZUQzRFN1cmZhY2VJbXBsICopICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSktPnN1cmZhY2VzWzBdOwoKICAgICAgICBpZihzdXJmLT5DS2V5RmxhZ3MgJiBXSU5FRERTRF9DS1NSQ0JMVCAmJgogICAgICAgICAgIGdldEZvcm1hdERlc2NFbnRyeShzdXJmLT5yZXNvdXJjZS5mb3JtYXQpLT5hbHBoYU1hc2sgPT0gMHgwMDAwMDAwMCkgewoKICAgICAgICAgICAgLyogQ29sb3Iga2V5aW5nIG5lZWRzIHRvIHBhc3MgYWxwaGEgdmFsdWVzIGZyb20gdGhlIHRleHR1cmUgdGhyb3VnaCB0byBoYXZlIHRoZSBhbHBoYSB0ZXN0IHdvcmsgcHJvcGVybHkuCiAgICAgICAgICAgICAqIE9uIHRoZSBvdGhlciBoYW5kIGFwcGxpY2F0aW9ucyBjYW4gc3RpbGwgdXNlIHRleHR1cmUgY29tYmluZXJzIGFwcGFyZW50bHkuIFRoaXMgY29kZSB0YWtlcyBjYXJlIHRoYXQgYXBwcwogICAgICAgICAgICAgKiBjYW5ub3QgcmVtb3ZlIHRoZSB0ZXh0dXJlJ3MgYWxwaGEgY2hhbm5lbCBlbnRpcmVseS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIGZpeHVwIGlzIHJlcXVpcmVkIGZvciBQcmluY2Ugb2YgUGVyc2lhIDNEKHByaXNvbiBiYXJzKSwgd2hpbGUgTW90byByYWNlciAyIHJlcXVpcmVzIEQzRFRPUF9NT0RVTEFURSB0byB3b3JrCiAgICAgICAgICAgICAqIG9uIGNvbG9yIGtleWVkIHN1cmZhY2VzLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBXaGF0IHRvIGRvIHdpdGggbXVsdGl0ZXh0dXJpbmc/IFNvIGZhciBubyBhcHAgaGFzIGJlZW4gZm91bmQgdGhhdCB1c2VzIGNvbG9yIGtleWluZyB3aXRoIG11bHRpdGV4dHVyaW5nCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX0RJU0FCTEUpIG9wID0gV0lORUQzRFRPUF9TRUxFQ1RBUkcxOwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzEpIGFyZzEgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICAgICAgZWxzZSBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzIpIGFyZzIgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICB9CiAgICB9CgogICAgVFJBQ0UoIlNldHRpbmcgYWxwaGEgb3AgZm9yIHN0YWdlICVkXG4iLCBzdGFnZSk7CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgc2V0X3RleF9vcF9udnJjKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgb3AsIGFyZzEsIGFyZzIsIGFyZzAsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfc3RhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBzZXRfdGV4X29wKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgIG9wLCBhcmcxLCBhcmcyLCBhcmcwKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3RleHR1cmUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCB0ZXhVbml0ID0gc3RhdGUgLSBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwKTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbdGV4VW5pdF07CgogICAgaWYgKG1hcHBlZF9zdGFnZSA8IDApIHJldHVybjsKCiAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgIGlmKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgfSBlbHNlIGlmIChtYXBwZWRfc3RhZ2UgPiAwKSB7CiAgICAgICAgLyogV2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZSAqLwogICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzZXRfdGV4dHVyZV9tYXRyaXgoKGZsb2F0ICopJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1RFWFRVUkUwICsgdGV4VW5pdF0udS5tWzBdWzBdLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbdGV4VW5pdF1bV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1NdLAogICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3RleFVuaXRdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0gJiAweEZGRkYwMDAwKSAhPSBXSU5FRDNEVFNTX1RDSV9QQVNTVEhSVSk7Cgp9CgpzdGF0aWMgdm9pZCB1bmxvYWRUZXhDb29yZHMoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgaW50IHRleHR1cmVfaWR4OwoKICAgIGZvciAodGV4dHVyZV9pZHggPSAwOyB0ZXh0dXJlX2lkeCA8IEdMX0xJTUlUUyh0ZXh0dXJlcyk7ICsrdGV4dHVyZV9pZHgpIHsKICAgICAgICBHTF9FWFRDQUxMKGdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyB0ZXh0dXJlX2lkeCkpOwogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBsb2FkVGV4Q29vcmRzKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzZCwgR0xpbnQgKmN1clZCTykgewogICAgVUlOVCAqb2Zmc2V0ID0gc3RhdGVibG9jay0+c3RyZWFtT2Zmc2V0OwogICAgdW5zaWduZWQgaW50IG1hcHBlZF9zdGFnZSA9IDA7CiAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZU5vID0gMDsKCiAgICAvKiBUaGUgY29kZSBiZWxvdyB1c2VzIGdsQ2xpZW50QWN0aXZlVGV4dHVyZSBhbmQgZ2xNdWx0aVRleENvb3JkKiB3aGljaCBhcmUgYWxsIHBhcnQgb2YgdGhlIEdMX0FSQl9tdWx0aXRleHR1cmUgZXh0ZW5zaW9uLiAqLwogICAgLyogQWJvcnQgaWYgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uLiAqLwogICAgaWYgKCFHTF9TVVBQT1JUKEFSQl9NVUxUSVRFWFRVUkUpKSB7CiAgICAgICAgRklYTUUoIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKHRleHR1cmVObyA9IDA7IHRleHR1cmVObyA8IEdMX0xJTUlUUyh0ZXh0dXJlX3N0YWdlcyk7ICsrdGV4dHVyZU5vKSB7CiAgICAgICAgaW50IGNvb3JkSWR4ID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3RleHR1cmVOb11bV0lORUQzRFRTU19URVhDT09SRElOREVYXTsKCiAgICAgICAgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFt0ZXh0dXJlTm9dOwogICAgICAgIGlmIChtYXBwZWRfc3RhZ2UgPT0gLTEpIGNvbnRpbnVlOwoKICAgICAgICBpZiAoY29vcmRJZHggPCBNQVhfVEVYVFVSRVMgJiYgKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5scERhdGEgfHwgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTykpIHsKICAgICAgICAgICAgVFJBQ0UoIlNldHRpbmcgdXAgdGV4dHVyZSAldSwgaWR4ICVkLCBjb3JkaW5keCAldSwgZGF0YSAlcFxuIiwKICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTm8sIG1hcHBlZF9zdGFnZSwgY29vcmRJZHgsIHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5scERhdGEpOwoKICAgICAgICAgICAgaWYgKCpjdXJWQk8gIT0gc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTykgewogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTykpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICAgICAgKmN1clZCTyA9IHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5WQk87CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCIik7CgogICAgICAgICAgICAvKiBUaGUgY29vcmRzIHRvIHN1cHBseSBkZXBlbmQgY29tcGxldGVseSBvbiB0aGUgZnZmIC8gdmVydGV4IHNoYWRlciAqLwogICAgICAgICAgICBnbFRleENvb3JkUG9pbnRlcigKICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLnN0cmVhbU5vXSk7CiAgICAgICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbE11bHRpVGV4Q29vcmQ0ZkFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UsIDAsIDAsIDAsIDEpKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgLyogVGhlIG51bWJlciBvZiB0aGUgbWFwcGVkIHN0YWdlcyBpbmNyZWFzZXMgbW9ub3RvbmljYWxseSwgc28gaXQncyBmaW5lIHRvIHVzZSB0aGUgbGFzdCB1c2VkIG9uZSAqLwogICAgICAgIGZvciAodGV4dHVyZU5vID0gbWFwcGVkX3N0YWdlICsgMTsgdGV4dHVyZU5vIDwgR0xfTElNSVRTKHRleHR1cmVzKTsgKyt0ZXh0dXJlTm8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbE11bHRpVGV4Q29vcmQ0ZkFSQihHTF9URVhUVVJFMF9BUkIgKyB0ZXh0dXJlTm8sIDAsIDAsIDAsIDEpKTsKICAgICAgICB9CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9jb29yZGluZGV4KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3N0YWdlXTsKCiAgICBpZiAobWFwcGVkX3N0YWdlID09IC0xKSB7CiAgICAgICAgVFJBQ0UoIk5vIHRleHR1cmUgdW5pdCBtYXBwZWQgdG8gc3RhZ2UgJWQuIFNraXBwaW5nIHRleHR1cmUgY29vcmRpbmF0ZXMuXG4iLCBzdGFnZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChHTF9TVVBQT1JUKEFSQl9NVUxUSVRFWFRVUkUpKSB7CiAgICAgICAgaWYobWFwcGVkX3N0YWdlID49IEdMX0xJTUlUUyhzYW1wbGVycykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICB9IGVsc2UgaWYgKHN0YWdlID4gMCkgewogICAgICAgIC8qIFdlIGNhbid0IGRvIGFueXRoaW5nIGhlcmUgKi8KICAgICAgICBXQVJOKCJQcm9ncmFtIHVzaW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgdGV4dHVyZXMgd2hpY2ggdGhpcyBvcGVuZ2wgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0XG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyogVmFsdWVzIDAtNyBhcmUgaW5kZXhlcyBpbnRvIHRoZSBGVkYgdGV4IGNvb3JkcyAtIFNlZSBjb21tZW50cyBpbiBEcmF3UHJpbWl0aXZlCiAgICAgKgogICAgICogRklYTUU6IEZyb20gTVNETjogVGhlIFdJTkVEM0RUU1NfVENJXyogZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSWYgeW91IGluY2x1ZGUKICAgICAqIG9uZSBmbGFnLCB5b3UgY2FuIHN0aWxsIHNwZWNpZnkgYW4gaW5kZXggdmFsdWUsIHdoaWNoIHRoZSBzeXN0ZW0gdXNlcyB0bwogICAgICogZGV0ZXJtaW5lIHRoZSB0ZXh0dXJlIHdyYXBwaW5nIG1vZGUuCiAgICAgKiBlZy4gU2V0VGV4dHVyZVN0YWdlU3RhdGUoIDAsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCwgV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VQT1NJVElPTiB8IDEgKTsKICAgICAqIG1lYW5zIHVzZSB0aGUgdmVydGV4IHBvc2l0aW9uIChjYW1lcmEtc3BhY2UpIGFzIHRoZSBpbnB1dCB0ZXh0dXJlIGNvb3JkaW5hdGVzCiAgICAgKiBmb3IgdGhpcyB0ZXh0dXJlIHN0YWdlLCBhbmQgdGhlIHdyYXAgbW9kZSBzZXQgaW4gdGhlIFdJTkVEM0RSU19XUkFQMSByZW5kZXIKICAgICAqIHN0YXRlLiBXZSBkbyBub3QgKHlldCkgc3VwcG9ydCB0aGUgV0lORUQzRFJFTkRFUlNUQVRFX1dSQVB4IHZhbHVlcywgbm9yIHRpZSB0aGVtIHVwCiAgICAgKiB0byB0aGUgVEVYQ09PUkRJTkRFWCB2YWx1ZQogICAgICovCgogICAgLyoKICAgICAqIEJlIGNhcmVmdWwgdGhlIHZhbHVlIG9mIHRoZSBtYXNrIDB4RjAwMDAgY29tZSBmcm9tIGQzZDh0eXBlcy5oIGluZm9zCiAgICAgKi8KICAgIHN3aXRjaCAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX1RFWENPT1JESU5ERVhdICYgMHhGRkZGMDAwMCkgewogICAgY2FzZSBXSU5FRDNEVFNTX1RDSV9QQVNTVEhSVToKICAgICAgICAvKlVzZSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgY29vcmRpbmF0ZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgdmVydGV4IGZvcm1hdC4gVGhpcyB2YWx1ZSByZXNvbHZlcyB0byB6ZXJvLiovCiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9UKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1EpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUyxULFIsUSkiKTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFUE9TSVRJT046CiAgICAgICAgLyogQ2FtZXJhU3BhY2VQb3NpdGlvbiBtZWFucyB1c2UgdGhlIHZlcnRleCBwb3NpdGlvbiwgdHJhbnNmb3JtZWQgdG8gY2FtZXJhIHNwYWNlLAogICAgICAgICAqIGFzIHRoZSBpbnB1dCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGlzIHN0YWdlJ3MgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbi4gVGhpcwogICAgICAgICAqIGVxdWF0ZXMgcm91Z2hseSB0byBFWUVfTElORUFSCiAgICAgICAgICovCiAgICAgICAgewogICAgICAgICAgICBmbG9hdCBzX3BsYW5lW10gPSB7IDEuMCwgMC4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCB0X3BsYW5lW10gPSB7IDAuMCwgMS4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCByX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAxLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCBxX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAwLjAsIDEuMCB9OwogICAgICAgICAgICBUUkFDRSgiV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VQT1NJVElPTiAtIFNldCBleWUgcGxhbmVcbiIpOwoKICAgICAgICAgICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgICAgICAgIGdsUHVzaE1hdHJpeCgpOwogICAgICAgICAgICBnbExvYWRJZGVudGl0eSgpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1MsIEdMX0VZRV9QTEFORSwgc19wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfVCwgR0xfRVlFX1BMQU5FLCB0X3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9SLCBHTF9FWUVfUExBTkUsIHJfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1EsIEdMX0VZRV9QTEFORSwgcV9wbGFuZSk7CiAgICAgICAgICAgIGdsUG9wTWF0cml4KCk7CgogICAgICAgICAgICBUUkFDRSgiV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VQT1NJVElPTiAtIFNldCBHTF9URVhUVVJFX0dFTl94IGFuZCBHTF94LCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSXG4iKTsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUyk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsiKTsKICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1MsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1MsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9ULCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9ULCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKSIpOwogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUikiKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRU5PUk1BTDoKICAgICAgICB7CiAgICAgICAgICAgIGlmIChHTF9TVVBQT1JUKE5WX1RFWEdFTl9SRUZMRUNUSU9OKSkgewogICAgICAgICAgICAgICAgZmxvYXQgc19wbGFuZVtdID0geyAxLjAsIDAuMCwgMC4wLCAwLjAgfTsKICAgICAgICAgICAgICAgIGZsb2F0IHRfcGxhbmVbXSA9IHsgMC4wLCAxLjAsIDAuMCwgMC4wIH07CiAgICAgICAgICAgICAgICBmbG9hdCByX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAxLjAsIDAuMCB9OwogICAgICAgICAgICAgICAgZmxvYXQgcV9wbGFuZVtdID0geyAwLjAsIDAuMCwgMC4wLCAxLjAgfTsKICAgICAgICAgICAgICAgIFRSQUNFKCJXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRU5PUk1BTCAtIFNldCBleWUgcGxhbmVcbiIpOwoKICAgICAgICAgICAgICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOwogICAgICAgICAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgICAgICAgICBnbExvYWRJZGVudGl0eSgpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9TLCBHTF9FWUVfUExBTkUsIHNfcGxhbmUpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9ULCBHTF9FWUVfUExBTkUsIHRfcGxhbmUpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9SLCBHTF9FWUVfUExBTkUsIHJfcGxhbmUpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9RLCBHTF9FWUVfUExBTkUsIHFfcGxhbmUpOwogICAgICAgICAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsiKTsKICAgICAgICAgICAgICAgIGdsVGV4R2VuaShHTF9TLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVikiKTsKICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOyIpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9ULCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKSIpOwogICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7Iik7CiAgICAgICAgICAgICAgICBnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1IsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVJFRkxFQ1RJT05WRUNUT1I6CiAgICAgICAgewogICAgICAgICAgICBpZiAoR0xfU1VQUE9SVChOVl9URVhHRU5fUkVGTEVDVElPTikpIHsKICAgICAgICAgICAgZmxvYXQgc19wbGFuZVtdID0geyAxLjAsIDAuMCwgMC4wLCAwLjAgfTsKICAgICAgICAgICAgZmxvYXQgdF9wbGFuZVtdID0geyAwLjAsIDEuMCwgMC4wLCAwLjAgfTsKICAgICAgICAgICAgZmxvYXQgcl9wbGFuZVtdID0geyAwLjAsIDAuMCwgMS4wLCAwLjAgfTsKICAgICAgICAgICAgZmxvYXQgcV9wbGFuZVtdID0geyAwLjAsIDAuMCwgMC4wLCAxLjAgfTsKICAgICAgICAgICAgVFJBQ0UoIldJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFUkVGTEVDVElPTlZFQ1RPUiAtIFNldCBleWUgcGxhbmVcbiIpOwoKICAgICAgICAgICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgICAgICAgIGdsUHVzaE1hdHJpeCgpOwogICAgICAgICAgICBnbExvYWRJZGVudGl0eSgpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1MsIEdMX0VZRV9QTEFORSwgc19wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfVCwgR0xfRVlFX1BMQU5FLCB0X3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9SLCBHTF9FWUVfUExBTkUsIHJfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1EsIEdMX0VZRV9QTEFORSwgcV9wbGFuZSk7CiAgICAgICAgICAgIGdsUG9wTWF0cml4KCk7CgogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1MsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX1JFRkxFQ1RJT05fTUFQX05WKSIpOwogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9UKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfVCwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX1JFRkxFQ1RJT05fTUFQX05WKSIpOwogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1IsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX1JFRkxFQ1RJT05fTUFQX05WKSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgIC8qIFVuaGFuZGxlZCB0eXBlczogKi8KICAgIGRlZmF1bHQ6CiAgICAgICAgLyogVG9kbzogKi8KICAgICAgICAvKiA/IGRpc2FibGUgR0xfVEVYVFVSRV9HRU5fbiA/ICovCiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9UKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1EpOwogICAgICAgIEZJWE1FKCJVbmhhbmRsZWQgV0lORUQzRFRTU19URVhDT09SRElOREVYICV4XG4iLCBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIC8qIFVwZGF0ZSB0aGUgdGV4dHVyZSBtYXRyaXggKi8KICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMCArIHN0YWdlKSkpIHsKICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZShTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwICsgc3RhZ2UpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgIH0KCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1ZERUNMKSAmJiBjb250ZXh0LT5uYW1lZEFycmF5c0xvYWRlZCkgewogICAgICAgIC8qIFJlbG9hZCB0aGUgYXJyYXlzIGlmIHdlIGFyZSB1c2luZyBmaXhlZCBmdW5jdGlvbiBhcnJheXMgdG8gcmVmbGVjdCB0aGUgc2VsZWN0ZWQgY29vcmQgaW5wdXQKICAgICAgICAgKiBzb3VyY2UuIENhbGwgbG9hZFRleENvb3JkcyBkaXJlY3RseSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYXJzZSB0aGUgdmVydGV4IGRlY2xhcmF0aW9uCiAgICAgICAgICogYW5kIGRvIGFsbCB0aGUgdGhpbmdzIGxpbmtlZCB0byBpdAogICAgICAgICAqIFRPRE86IFRpZHkgdGhhdCB1cCB0byByZWxvYWQgb25seSB0aGUgYXJyYXlzIG9mIHRoZSBjaGFuZ2VkIHVuaXQKICAgICAgICAgKi8KICAgICAgICBHTGludCBjdXJWQk8gPSBHTF9TVVBQT1JUKEFSQl9WRVJURVhfQlVGRkVSX09CSkVDVCkgPyAtMSA6IDA7CgogICAgICAgIHVubG9hZFRleENvb3JkcyhzdGF0ZWJsb2NrKTsKICAgICAgICBsb2FkVGV4Q29vcmRzKHN0YXRlYmxvY2ssICZzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5zdHJpZGVkX3N0cmVhbXMsICZjdXJWQk8pOwogICAgfQp9CgpzdGF0aWMgdm9pZCB0ZXhfYnVtcGVudmxzY2FsZShEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwogICAgdW5pb24gewogICAgICAgIERXT1JEIGQ7CiAgICAgICAgZmxvYXQgZjsKICAgIH0gdG1wdmFsdWU7CgogICAgdG1wdmFsdWUuZCA9IHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFXTsKICAgIGlmKHRtcHZhbHVlLmYgIT0gMC4wKSB7CiAgICAgICAgRklYTUUoIldJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9idW1wZW52bG9mZnNldChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwogICAgdW5pb24gewogICAgICAgIERXT1JEIGQ7CiAgICAgICAgZmxvYXQgZjsKICAgIH0gdG1wdmFsdWU7CgogICAgdG1wdmFsdWUuZCA9IHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVF07CiAgICBpZih0bXB2YWx1ZS5mICE9IDAuMCkgewogICAgICAgIEZJWE1FKCJXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdGV4X3Jlc3VsdGFyZyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwoKICAgIGlmKHN0YWdlID49IEdMX0xJTUlUUyh0ZXh0dXJlX3N0YWdlcykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX1JFU1VMVEFSR10gIT0gV0lORUQzRFRBX0NVUlJFTlQpIHsKICAgICAgICBGSVhNRSgiV0lORUQzRFRTU19SRVNVTFRBUkcgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzYW1wbGVyKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc2FtcGxlciA9IHN0YXRlIC0gU1RBVEVfU0FNUExFUigwKTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbc2FtcGxlcl07CiAgICB1bmlvbiB7CiAgICAgICAgZmxvYXQgZjsKICAgICAgICBEV09SRCBkOwogICAgfSB0bXB2YWx1ZTsKCiAgICBUUkFDRSgiU2FtcGxlcjogJWRcbiIsIHNhbXBsZXIpOwogICAgLyogRW5hYmxpbmcgYW5kIGRpc2FibGluZyB0ZXh0dXJlIGRpbWVuc2lvbnMgaXMgZG9uZSBieSB0ZXh0dXJlIHN0YWdlIHN0YXRlIC8gcGl4ZWwgc2hhZGVyIHNldHVwLCB0aGlzIGZ1bmN0aW9uCiAgICAgKiBvbmx5IGhhcyB0byBiaW5kIHRleHR1cmVzIGFuZCBzZXQgdGhlIHBlciB0ZXh0dXJlIHN0YXRlcwogICAgICovCgogICAgaWYgKG1hcHBlZF9zdGFnZSA9PSAtMSkgewogICAgICAgIFRSQUNFKCJObyBzYW1wbGVyIG1hcHBlZCB0byBzdGFnZSAlZC4gUmV0dXJuaW5nLlxuIiwgc2FtcGxlcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChHTF9TVVBQT1JUKEFSQl9NVUxUSVRFWFRVUkUpKSB7CiAgICAgICAgaWYgKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFMoc2FtcGxlcnMpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgfSBlbHNlIGlmIChzYW1wbGVyID4gMCkgewogICAgICAgIC8qIFdlIGNhbid0IGRvIGFueXRoaW5nIGhlcmUgKi8KICAgICAgICBXQVJOKCJQcm9ncmFtIHVzaW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgdGV4dHVyZXMgd2hpY2ggdGhpcyBvcGVuZ2wgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0XG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYoc3RhdGVibG9jay0+dGV4dHVyZXNbc2FtcGxlcl0pIHsKICAgICAgICBCT09MIHRleElzUG93MiA9IEZBTFNFOwoKICAgICAgICAvKiBUaGUgZml4ZWQgZnVuY3Rpb24gbnAyIHRleHR1cmUgZW11bGF0aW9uIHVzZXMgdGhlIHRleHR1cmUgbWF0cml4IHRvIGZpeCB1cCB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgKiBJV2luZUQzREJhc2VUZXh0dXJlOjpBcHBseVN0YXRlQ2hhbmdlcyBtdWx0aXBsaWVzIHRoZSBzZXQgbWF0cml4IHdpdGggYSBmaXh1cCBtYXRyaXguIEJlZm9yZSB0aGUKICAgICAgICAgKiBzY2FsaW5nIGlzIHJlYXBwbGllZCBvciByZW1vdmVkLCB0aGUgdGV4dHVyZSBtYXRyaXggaGFzIHRvIGJlIHJlYXBwbGllZAogICAgICAgICAqLwogICAgICAgIGlmKCFHTF9TVVBQT1JUKEFSQl9URVhUVVJFX05PTl9QT1dFUl9PRl9UV08pICYmIHNhbXBsZXIgPCBNQVhfVEVYVFVSRVMpIHsKICAgICAgICAgICAgaWYoc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbc2FtcGxlcl0gPT0gR0xfVEVYVFVSRV8yRCkgewogICAgICAgICAgICAgICAgaWYoKChJV2luZUQzRFRleHR1cmVJbXBsICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKS0+cG93MnNjYWxpbmdGYWN0b3JYICE9IDEuMCB8fAogICAgICAgICAgICAgICAgICAgKChJV2luZUQzRFRleHR1cmVJbXBsICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKS0+cG93MnNjYWxpbmdGYWN0b3JZICE9IDEuMCApIHsKICAgICAgICAgICAgICAgICAgICB0ZXhJc1BvdzIgPSBUUlVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYoc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbc2FtcGxlcl0gPT0gR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIHsKICAgICAgICAgICAgICAgIGlmKCgoSVdpbmVEM0RDdWJlVGV4dHVyZUltcGwgKikgc3RhdGVibG9jay0+dGV4dHVyZXNbc2FtcGxlcl0pLT5wb3cyc2NhbGluZ0ZhY3RvciAhPSAxLjApIHsKICAgICAgICAgICAgICAgICAgICB0ZXhJc1BvdzIgPSBUUlVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZih0ZXhJc1BvdzIgfHwgY29udGV4dC0+bGFzdFdhc1BvdzJUZXh0dXJlW3NhbXBsZXJdKSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZShTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwICsgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFtzYW1wbGVyXSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgICAgICAgICAgY29udGV4dC0+bGFzdFdhc1BvdzJUZXh0dXJlW3NhbXBsZXJdID0gdGV4SXNQb3cyOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBJV2luZUQzREJhc2VUZXh0dXJlX1ByZUxvYWQoKElXaW5lRDNEQmFzZVRleHR1cmUgKikgc3RhdGVibG9jay0+dGV4dHVyZXNbc2FtcGxlcl0pOwogICAgICAgIElXaW5lRDNEQmFzZVRleHR1cmVfQXBwbHlTdGF0ZUNoYW5nZXMoc3RhdGVibG9jay0+dGV4dHVyZXNbc2FtcGxlcl0sIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzYW1wbGVyXSwgc3RhdGVibG9jay0+c2FtcGxlclN0YXRlW3NhbXBsZXJdKTsKCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoRVhUX1RFWFRVUkVfTE9EX0JJQVMpKSB7CiAgICAgICAgICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT5zYW1wbGVyU3RhdGVbc2FtcGxlcl1bV0lORUQzRFNBTVBfTUlQTUFQTE9EQklBU107CiAgICAgICAgICAgIGdsVGV4RW52ZihHTF9URVhUVVJFX0ZJTFRFUl9DT05UUk9MX0VYVCwKICAgICAgICAgICAgICAgICAgICAgIEdMX1RFWFRVUkVfTE9EX0JJQVNfRVhULAogICAgICAgICAgICAgICAgICAgICAgdG1wdmFsdWUuZik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEVudmkgR0xfVEVYVFVSRV9MT0RfQklBU19FWFQgLi4uIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cHNfc2VsZWN0ZWRfbW9kZSAhPSBTSEFERVJfTk9ORSAmJiBzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciAmJgogICAgICAgICAgICAoKElXaW5lRDNEUGl4ZWxTaGFkZXJJbXBsICopc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5iYXNlU2hhZGVyLmZ1bmN0aW9uKSB7CiAgICAgICAgICAgIC8qIFVzaW5nIGEgcGl4ZWwgc2hhZGVyPyBWZXJpZnkgdGhlIHNhbXBsZXIgdHlwZXMgKi8KCiAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIGVuYWJsZWQuIEkgZG9uJ3QgaGF2ZSB0byBkaXNhYmxlIHRoZSBvdGhlcgogICAgICAgICAgICAgKiBkaW1lbnNpb25zIGJlY2F1c2UgdGhlIHNoYWRlciBrbm93cyBmcm9tIHdoaWNoIHRleHR1cmUgdHlwZSB0byBzYW1wbGUgZnJvbS4gRm9yIHRoZSBzYWtlIG9mCiAgICAgICAgICAgICAqIGRlYnVnZ2luZyBhbGwgZGltZW5zaW9ucyBjb3VsZCBiZSBlbmFibGVkIGFuZCBhIHRleHR1cmUgd2l0aCBzb21lIHVnbHkgcGluayBib3VuZCB0byB0aGUgdW51c2VkCiAgICAgICAgICAgICAqIGRpbWVuc2lvbnMuIFRoaXMgc2hvdWxkIG1ha2Ugd3Jvbmcgc2FtcGxpbmcgc291cmNlcyB2aXNpYmxlIDotKQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZ2xFbmFibGUoc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbc2FtcGxlcl0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoc3RhdGVibG9jay0+dGV4dHVyZURpbWVuc2lvbnNbc2FtcGxlcl0pIik7CiAgICAgICAgfSBlbHNlIGlmKHNhbXBsZXIgPCBzdGF0ZWJsb2NrLT5sb3dlc3RfZGlzYWJsZWRfc3RhZ2UpIHsKICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9URVhUVVJFU1RBR0Uoc2FtcGxlciwgV0lORUQzRFRTU19DT0xPUk9QKSkpIHsKICAgICAgICAgICAgICAgIGFjdGl2YXRlX2RpbWVuc2lvbnMoc2FtcGxlciwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19DT0xPUktFWUVOQUJMRV0gJiYgc2FtcGxlciA9PSAwKSB7CiAgICAgICAgICAgICAgICAvKiBJZiBjb2xvciBrZXlpbmcgaXMgZW5hYmxlZCB1cGRhdGUgdGhlIGFscGhhIHRlc3QsIGl0IGRlcGVuZHMgb24gdGhlIGV4aXN0ZW5jZQogICAgICAgICAgICAgICAgICogb2YgYSBjb2xvciBrZXkgaW4gc3RhZ2UgMAogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBzdGF0ZV9hbHBoYShXSU5FRDNEUlNfQ09MT1JLRVlFTkFCTEUsIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIGlmKHNhbXBsZXIgPCBHTF9MSU1JVFModGV4dHVyZV9zdGFnZXMpKSB7CiAgICAgICAgaWYoc2FtcGxlciA8IHN0YXRlYmxvY2stPmxvd2VzdF9kaXNhYmxlZF9zdGFnZSkgewogICAgICAgICAgICAvKiBUT0RPOiBXaGF0IHNob3VsZCBJIGRvIHdpdGggcGl4ZWwgc2hhZGVycyBoZXJlID8/PyAqLwogICAgICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RFWFRVUkVTVEFHRShzYW1wbGVyLCBXSU5FRDNEVFNTX0NPTE9ST1ApKSkgewogICAgICAgICAgICAgICAgYWN0aXZhdGVfZGltZW5zaW9ucyhzYW1wbGVyLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gLyogT3RoZXJ3aXNlIHRleF9jb2xvcm9wIGRpc2FibGVzIHRoZSBzdGFnZSAqLwogICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+ZHVtbXlUZXh0dXJlTmFtZVtzYW1wbGVyXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+ZHVtbXlUZXh0dXJlTmFtZVtzYW1wbGVyXSkiKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc2hhZGVyY29uc3RhbnQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CgogICAgLyogVmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgc3RhdGVzIHdpbGwgY2FsbCBhIHNoYWRlciB1cGxvYWQsIGRvbid0IGRvIGFueXRoaW5nIGFzIGxvbmcgb25lIG9mIHRoZW0KICAgICAqIGhhcyBhbiB1cGRhdGUgcGVuZGluZwogICAgICovCiAgICBpZihpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkRFQ0wpIHx8CiAgICAgICBpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfUElYRUxTSEFERVIpKSB7CiAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGRldmljZS0+c2hhZGVyX2JhY2tlbmQtPnNoYWRlcl9sb2FkX2NvbnN0YW50cygoSVdpbmVEM0REZXZpY2UgKikgZGV2aWNlLCB1c2VfcHMoZGV2aWNlKSwgdXNlX3ZzKGRldmljZSkpOwp9CgpzdGF0aWMgdm9pZCBwaXhlbHNoYWRlcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIElXaW5lRDNERGV2aWNlSW1wbCAqZGV2aWNlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZTsKICAgIEJPT0wgdXNlX3BzaGFkZXIgPSB1c2VfcHMoZGV2aWNlKTsKICAgIEJPT0wgdXNlX3ZzaGFkZXIgPSB1c2VfdnMoZGV2aWNlKTsKICAgIEJPT0wgdXBkYXRlX2ZvZyA9IEZBTFNFOwogICAgaW50IGk7CgogICAgaWYgKHVzZV9wc2hhZGVyKSB7CiAgICAgICAgaWYoIWNvbnRleHQtPmxhc3Rfd2FzX3BzaGFkZXIpIHsKICAgICAgICAgICAgLyogRm9ybWVyIGRyYXcgd2l0aG91dCBhIHBpeGVsIHNoYWRlciwgc29tZSBzYW1wbGVycwogICAgICAgICAgICAgKiBtYXkgYmUgZGlzYWJsZWQgYmVjYXVzZSBvZiBXSU5FRDNEVFNTX0NPTE9ST1AgPSBXSU5FRDNEVE9QX0RJU0FCTEUKICAgICAgICAgICAgICogbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGVtCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmb3IoaT0wOyBpIDwgTUFYX1NBTVBMRVJTOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfU0FNUExFUihpKSkpIHsKICAgICAgICAgICAgICAgICAgICBzYW1wbGVyKFNUQVRFX1NBTVBMRVIoaSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHVwZGF0ZV9mb2cgPSBUUlVFOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLyogT3RoZXJ3aXNlIGFsbCBzYW1wbGVycyB3ZXJlIGFjdGl2YXRlZCBieSB0aGUgY29kZSBhYm92ZSBpbiBlYXJsaWVyIGRyYXdzLCBvciBieSBzYW1wbGVyKCkKICAgICAgICAgICAgKiBpZiBhIGRpZmZlcmVudCB0ZXh0dXJlIHdhcyBib3VuZC4gSSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgogICAgICAgICAgICAqLwogICAgICAgIH0KCiAgICAgICAgLyogQ29tcGlsZSBhbmQgYmluZCB0aGUgc2hhZGVyICovCiAgICAgICAgSVdpbmVEM0RQaXhlbFNoYWRlcl9Db21waWxlU2hhZGVyKHN0YXRlYmxvY2stPnBpeGVsU2hhZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLyogRGlzYWJsZWQgdGhlIHBpeGVsIHNoYWRlciAtIGNvbG9yIG9wcyB3ZXJlbid0IGFwcGxpZWQKICAgICAgICAgKiB3aGlsZSBpdCB3YXMgZW5hYmxlZCwgc28gcmUtYXBwbHkgdGhlbS4KICAgICAgICAgKi8KICAgICAgICBmb3IoaT0wOyBpIDwgTUFYX1RFWFRVUkVTOyBpKyspIHsKICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9URVhUVVJFU1RBR0UoaSwgV0lORUQzRFRTU19DT0xPUk9QKSkpIHsKICAgICAgICAgICAgICAgIHRleF9jb2xvcm9wKFNUQVRFX1RFWFRVUkVTVEFHRShpLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihjb250ZXh0LT5sYXN0X3dhc19wc2hhZGVyKQogICAgICAgICAgICB1cGRhdGVfZm9nID0gVFJVRTsKICAgIH0KCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFN0YXRlVGFibGVbU1RBVEVfVlNIQURFUl0ucmVwcmVzZW50YXRpdmUpKSB7CiAgICAgICAgZGV2aWNlLT5zaGFkZXJfYmFja2VuZC0+c2hhZGVyX3NlbGVjdCgoSVdpbmVEM0REZXZpY2UgKilzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLCB1c2VfcHNoYWRlciwgdXNlX3ZzaGFkZXIpOwoKICAgICAgICBpZiAoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WRVJURVhTSEFERVJDT05TVEFOVCkgJiYgKHVzZV92c2hhZGVyIHx8IHVzZV9wc2hhZGVyKSkgewogICAgICAgICAgICBzaGFkZXJjb25zdGFudChTVEFURV9WRVJURVhTSEFERVJDT05TVEFOVCwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgfQoKICAgIGlmKHVwZGF0ZV9mb2cpCiAgICAgICAgc3RhdGVfZm9nKHN0YXRlLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKCiAgICBjb250ZXh0LT5sYXN0X3dhc19wc2hhZGVyID0gdXNlX3BzaGFkZXI7Cn0KCnN0YXRpYyB2b2lkIHRleF9idW1wZW52bWF0KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CgogICAgaWYoc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIgJiYgc3RhZ2UgIT0gMCAmJgogICAgICAgKChJV2luZUQzRFBpeGVsU2hhZGVySW1wbCAqKSBzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciktPm5lZWRzYnVtcG1hdCA9PSBzdGFnZSkgewogICAgICAgIC8qIFRoZSBwaXhlbCBzaGFkZXIgaGFzIHRvIGtub3cgdGhlIGJ1bXAgZW52IG1hdHJpeC4gRG8gYSBjb25zdGFudHMgdXBkYXRlIGlmIGl0IGlzbid0IHNjaGVkdWxlZAogICAgICAgICAqIGFueXdheQogICAgICAgICAqLwogICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfUElYRUxTSEFERVJDT05TVEFOVCkgJiYKICAgICAgICAgICAhaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1BJWEVMU0hBREVSKSkgewogICAgICAgICAgICBzaGFkZXJjb25zdGFudChTVEFURV9QSVhFTFNIQURFUkNPTlNUQU5ULCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICB9CiAgICB9CgogICAgaWYoR0xfU1VQUE9SVChBVElfRU5WTUFQX0JVTVBNQVApKSB7CiAgICAgICAgaWYoc3RhZ2UgPj0gR0xfTElNSVRTKHRleHR1cmVfc3RhZ2VzKSkgewogICAgICAgICAgICBXQVJOKCJCdW1wIGVudiBtYXRyaXggb2YgdW5zdXBwb3J0ZWQgc3RhZ2Ugc2V0XG4iKTsKICAgICAgICB9IGVsc2UgaWYoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBzdGFnZSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgc3RhZ2UpKSIpOwogICAgICAgIH0KICAgICAgICBHTF9FWFRDQUxMKGdsVGV4QnVtcFBhcmFtZXRlcmZ2QVRJKEdMX0JVTVBfUk9UX01BVFJJWF9BVEksCiAgICAgICAgICAgICAgICAgICAoZmxvYXQgKikgJihzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQlVNUEVOVk1BVDAwXSkpKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhCdW1wUGFyYW1ldGVyZnZBVEkiKTsKICAgIH0KICAgIGlmKEdMX1NVUFBPUlQoTlZfVEVYVFVSRV9TSEFERVIyKSkgewogICAgICAgIC8qIERpcmVjdDNEIHNldHMgdGhlIG1hdHJpeCBpbiB0aGUgc3RhZ2UgcmVhZGluZyB0aGUgcGVydHVyYmF0aW9uIG1hcC4gVGhlIHJlc3VsdCBpcyB1c2VkIHRvCiAgICAgICAgICogb2Zmc2V0IHRoZSBkZXN0aW5hdGlvbiBzdGFnZShhbHdheXMgc3RhZ2UgKyAxIGluIGQzZCkuIEluIEdMX05WX3RleHR1cmVfc2hhZGVyLCB0aGUgYnVtcAogICAgICAgICAqIG1hcCBvZmZzZXRpbmcgaXMgZG9uZSBpbiB0aGUgc3RhZ2UgcmVhZGluZyB0aGUgYnVtcCBtYXBwZWQgdGV4dHVyZSwgYW5kIHRoZSBwZXJ0dXJiYXRpb24KICAgICAgICAgKiBtYXAgaXMgcmVhZCBmcm9tIGEgc3BlY2lmaWVkIHNvdXJjZSBzdGFnZShhbHdheXMgc3RhZ2UgLSAxIGZvciBkM2QpLiBUaHVzIHNldCB0aGUgbWF0cml4CiAgICAgICAgICogZm9yIHN0YWdlICsgMS4gS2VlcCB0aGUgbnZyYyB0ZXggdW5pdCBtYXBwaW5nIGluIG1pbmQgdG9vCiAgICAgICAgICovCiAgICAgICAgRFdPUkQgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFtzdGFnZSArIDFdOwoKICAgICAgICBpZihtYXBwZWRfc3RhZ2UgPCBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSkiKTsKCiAgICAgICAgICAgIGdsVGV4RW52ZnYoR0xfVEVYVFVSRV9TSEFERVJfTlYsIEdMX09GRlNFVF9URVhUVVJFX01BVFJJWF9OViwKICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCAqKSAmKHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19CVU1QRU5WTUFUMDBdKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEVudmZ2KEdMX1RFWFRVUkVfU0hBREVSX05WLCBHTF9PRkZTRVRfVEVYVFVSRV9NQVRSSVhfTlYsIG1hdClcbiIpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3dvcmxkKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdHJhbnNmb3JtX3ZpZXcgYmVsb3cgaWYgdGhlIHZpZXcgbWF0cml4IHdhcyBjaGFuZ2VkIHRvbwogICAgICoKICAgICAqIERlbGliZXJhdGVseSBubyBjaGVjayBpZiB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGlzIGRpcnR5IGJlY2F1c2UgdGhlIHZkZWNsIHN0YXRlCiAgICAgKiBkb2VzIG5vdCBhbHdheXMgdXBkYXRlIHRoZSB3b3JsZCBtYXRyaXgsIG9ubHkgb24gYSBzd2l0Y2ggYmV0d2VlbiB0cmFuc2Zvcm1lZAogICAgICogYW5kIHVudHJhbm5zZm9ybWVkIGRyYXdzLiBJdCAqbWF5KiBoYXBwZW4gdGhhdCB0aGUgd29ybGQgbWF0cml4IGlzIHNldCAyIHRpbWVzIGR1cmluZyBvbmUKICAgICAqIGRyYXcsIGJ1dCB0aGF0IHNob3VsZCBiZSByYXRoZXIgcmFyZSBhbmQgY2hlYXBlciBpbiB0b3RhbC4KICAgICAqLwogICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICBjaGVja0dMY2FsbCgiZ2xNYXRyaXhNb2RlIik7CgogICAgaWYoY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgZ2xMb2FkSWRlbnRpdHkoKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkSWRlbnRpdHkoKSIpOwogICAgfSBlbHNlIHsKICAgICAgICAvKiBJbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdmlldyBtYXRyaXggaXMgdGhlIGlkZW50aXR5IG1hdHJpeCAqLwogICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT52aWV3X2lkZW50KSB7CiAgICAgICAgICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19XT1JMRE1BVFJJWCgwKV0udS5tWzBdWzBdKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbExvYWRNYXRyaXhmKChmbG9hdCAqKSAmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfVklFV10udS5tWzBdWzBdKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYiKTsKICAgICAgICAgICAgZ2xNdWx0TWF0cml4ZigoZmxvYXQgKikgJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1dPUkxETUFUUklYKDApXS51Lm1bMF1bMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xNdWx0TWF0cml4ZiIpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgY2xpcHBsYW5lKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVUlOVCBpbmRleCA9IHN0YXRlIC0gU1RBVEVfQ0xJUFBMQU5FKDApOwoKICAgIGlmKGlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1ZJRVcpKSB8fCBpbmRleCA+PSBHTF9MSU1JVFMoY2xpcHBsYW5lcykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyogQ2xpcCBQbGFuZSBzZXR0aW5ncyBhcmUgYWZmZWN0ZWQgYnkgdGhlIG1vZGVsIHZpZXcgaW4gT3BlbkdMLCB0aGUgVmlldyB0cmFuc2Zvcm0gaW4gZGlyZWN0M2QgKi8KICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOwogICAgZ2xQdXNoTWF0cml4KCk7CiAgICBnbExvYWRNYXRyaXhmKChmbG9hdCAqKSAmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfVklFV10udS5tWzBdWzBdKTsKCiAgICBUUkFDRSgiQ2xpcHBsYW5lIFslZiwlZiwlZiwlZl1cbiIsCiAgICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwcGxhbmVbaW5kZXhdWzBdLAogICAgICAgICAgc3RhdGVibG9jay0+Y2xpcHBsYW5lW2luZGV4XVsxXSwKICAgICAgICAgIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF1bMl0sCiAgICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwcGxhbmVbaW5kZXhdWzNdKTsKICAgIGdsQ2xpcFBsYW5lKEdMX0NMSVBfUExBTkUwICsgaW5kZXgsIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF0pOwogICAgY2hlY2tHTGNhbGwoImdsQ2xpcFBsYW5lIik7CgogICAgZ2xQb3BNYXRyaXgoKTsKfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3dvcmxkZXgoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBVSU5UIG1hdHJpeCA9IHN0YXRlIC0gU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19XT1JMRE1BVFJJWCgwKSk7CiAgICBHTGVudW0gZ2xNYXQ7CiAgICBUUkFDRSgiU2V0dGluZyB3b3JsZCBtYXRyaXggJWRcbiIsIG1hdHJpeCk7CgogICAgaWYobWF0cml4ID49IEdMX0xJTUlUUyhibGVuZHMpKSB7CiAgICAgICAgV0FSTigiVW5zdXBwb3J0ZWQgYmxlbmQgbWF0cml4IHNldFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKGlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1ZJRVcpKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBHTF9NT0RFTFZJRVcwX0FSQjogIDB4MTcwMAogICAgICogR0xfTU9ERUxWSUVXMV9BUkI6ICAweDB4ODUwYQogICAgICogR0xfTU9ERUxWSUVXMl9BUkI6ICAweDg3MjIKICAgICAqIEdMX01PREVMVklFVzNfQVJCOiAgMHg4NzIzCiAgICAgKiBldGMKICAgICAqIEdMX01PREVMVklFVzMxX0FSQjogMHg4NzNGCiAgICAgKi8KICAgIGlmKG1hdHJpeCA9PSAxKSBnbE1hdCA9IEdMX01PREVMVklFVzFfQVJCOwogICAgZWxzZSBnbE1hdCA9IEdMX01PREVMVklFVzJfQVJCIC0gMiArIG1hdHJpeDsKCiAgICBnbE1hdHJpeE1vZGUoZ2xNYXQpOwogICAgY2hlY2tHTGNhbGwoImdsTWF0cml4TW9kZShnbE1hdCkiKTsKCiAgICAvKiBXb3JsZCBtYXRyaXggMCBpcyBtdWx0aXBsaWVkIHdpdGggdGhlIHZpZXcgbWF0cml4IGJlY2F1c2UgZDNkIHVzZXMgMyBtYXRyaWNlcyB3aGlsZSBnbCB1c2VzIG9ubHkgMi4gVG8gYXZvaWQKICAgICAqIHdlaWdodGluZyB0aGUgdmlldyBtYXRyaXggaW5jb3JyZWN0bHkgaXQgaGFzIHRvIGJlIG11bHRpcGxpZWQgaW50byBldmVyeSBnbCBtb2RlbHZpZXcgbWF0cml4CiAgICAgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnZpZXdfaWRlbnQpIHsKICAgICAgICBnbExvYWRNYXRyaXhmKCZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19XT1JMRE1BVFJJWChtYXRyaXgpXS51Lm1bMF1bMF0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExvYWRNYXRyaXhmIikKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xMb2FkTWF0cml4Zigmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfVklFV10udS5tWzBdWzBdKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkTWF0cml4ZiIpCiAgICAgICAgZ2xNdWx0TWF0cml4Zigmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfV09STERNQVRSSVgobWF0cml4KV0udS5tWzBdWzBdKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xNdWx0TWF0cml4ZiIpCiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3ZlcnRleGJsZW5kKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgV0lORUQzRFZFUlRFWEJMRU5ERkxBR1MgdmFsID0gc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX1ZFUlRFWEJMRU5EXTsKCiAgICBzd2l0Y2godmFsKSB7CiAgICAgICAgY2FzZSBXSU5FRDNEVkJGXzFXRUlHSFRTOgogICAgICAgIGNhc2UgV0lORUQzRFZCRl8yV0VJR0hUUzoKICAgICAgICBjYXNlIFdJTkVEM0RWQkZfM1dFSUdIVFM6CiAgICAgICAgICAgIGlmKEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CTEVORCkpIHsKICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9CTEVORF9BUkIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1ZFUlRFWF9CTEVORF9BUkIpIik7CgogICAgICAgICAgICAgICAgLyogRDNEIGFkZHMgb25lIG1vcmUgbWF0cml4IHdoaWNoIGhhcyB3ZWlnaHQgKDEgLSBzdW0od2VpZ2h0cykpLiBUaGlzIGlzIGVuYWJsZWQgYXQgY29udGV4dAogICAgICAgICAgICAgICAgICogY3JlYXRpb24gd2l0aCBlbmFibGluZyBHTF9XRUlHSFRfU1VNX1VOSVRZX0FSQi4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEJsZW5kQVJCKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19WRVJURVhCTEVORF0gKyAxKSk7CgogICAgICAgICAgICAgICAgaWYoIXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnZlcnRleEJsZW5kVXNlZCkgewogICAgICAgICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgICAgICAgIGZvcihpID0gMTsgaSA8IEdMX0xJTUlUUyhibGVuZHMpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKGkpKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV93b3JsZGV4KFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoaSkpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT52ZXJ0ZXhCbGVuZFVzZWQgPSBUUlVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLyogVE9ETzogSW1wbGVtZW50IHZlcnRleCBibGVuZGluZyBpbiBkcmF3U3RyaWRlZFNsb3cgKi8KICAgICAgICAgICAgICAgIEZJWE1FKCJWZXJ0ZXggYmxlbmRpbmcgZW5hYmxlZCwgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmVcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFdJTkVEM0RWQkZfRElTQUJMRToKICAgICAgICBjYXNlIFdJTkVEM0RWQkZfMFdFSUdIVFM6IC8qIGZvciBJbmRleGVkIHZlcnRleCBibGVuZGluZyAtIG5vdCBzdXBwb3J0ZWQgKi8KICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVkVSVEVYX0JMRU5EKSkgewogICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1ZFUlRFWF9CTEVORF9BUkIpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9WRVJURVhfQkxFTkRfQVJCKSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVFJBQ0UoIlZlcnRleCBibGVuZGluZyBkaXNhYmxlZFxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgV0lORUQzRFZCRl9UV0VFTklORzoKICAgICAgICAgICAgLyogSnVzdCBzZXQgdGhlIHZlcnRleCB3ZWlnaHQgZm9yIHdlaWdodCAwLCBlbmFibGUgdmVydGV4IGJsZW5kaW5nIGFuZCBob3BlIHRoZSBhcHAgZG9lc24ndCBoYXZlCiAgICAgICAgICAgICAqIHZlcnRleCB3ZWlnaHRzIGluIHRoZSB2ZXJ0aWNlcz8KICAgICAgICAgICAgICogRm9yIG5vdyB3ZSBkb24ndCByZXBvcnQgdGhhdCBhcyBzdXBwb3J0ZWQsIHNvIGEgd2FybiBzaG91bGQgc3VmZmljZQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgV0FSTigiVHdlZW5pbmcgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwogICAgICAgICAgICBicmVhazsKICAgIH0KfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3ZpZXcoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICB1bnNpZ25lZCBpbnQgazsKCiAgICAvKiBJZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIFZpZXcgbWF0cml4LCByZXNldCB0aGUgbGlnaHQgYW5kIGNsaXBwaW5nIHBsYW5lcyB0byB0aGUgbmV3IHZpZXcKICAgICAqIE5PVEU6IFdlIGhhdmUgdG8gcmVzZXQgdGhlIHBvc2l0aW9ucyBldmVuIGlmIHRoZSBsaWdodC9wbGFuZSBpcyBub3QgY3VycmVudGx5CiAgICAgKiAgICAgICBlbmFibGVkLCBzaW5jZSB0aGUgY2FsbCB0byBlbmFibGUgaXQgd2lsbCBub3QgcmVzZXQgdGhlIHBvc2l0aW9uLgogICAgICogTk9URTI6IEFwcGFyZW50bHkgdGV4dHVyZSB0cmFuc2Zvcm1zIGRvIE5PVCBuZWVkIHJlYXBwbHlpbmcKICAgICAqLwoKICAgIFBMSUdIVElORk9FTCAqbGlnaHQgPSBOVUxMOwoKICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOwogICAgY2hlY2tHTGNhbGwoImdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpIik7CiAgICBnbExvYWRNYXRyaXhmKChmbG9hdCAqKShmbG9hdCAqKSAmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfVklFV10udS5tWzBdWzBdKTsKICAgIGNoZWNrR0xjYWxsKCJnbExvYWRNYXRyaXhmKC4uLikiKTsKCiAgICAvKiBSZXNldCBsaWdodHMuIFRPRE86IENhbGwgbGlnaHQgYXBwbHkgZnVuYyAqLwogICAgZm9yKGsgPSAwOyBrIDwgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+bWF4Q29uY3VycmVudExpZ2h0czsgaysrKSB7CiAgICAgICAgbGlnaHQgPSBzdGF0ZWJsb2NrLT5hY3RpdmVMaWdodHNba107CiAgICAgICAgaWYoIWxpZ2h0KSBjb250aW51ZTsKICAgICAgICBnbExpZ2h0ZnYoR0xfTElHSFQwICsgbGlnaHQtPmdsSW5kZXgsIEdMX1BPU0lUSU9OLCBsaWdodC0+bGlnaHRQb3NuKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2IHBvc24iKTsKICAgICAgICBnbExpZ2h0ZnYoR0xfTElHSFQwICsgbGlnaHQtPmdsSW5kZXgsIEdMX1NQT1RfRElSRUNUSU9OLCBsaWdodC0+bGlnaHREaXJuKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2IGRpcm4iKTsKICAgIH0KCiAgICAvKiBSZXNldCBDbGlwcGluZyBQbGFuZXMgICovCiAgICBmb3IgKGsgPSAwOyBrIDwgR0xfTElNSVRTKGNsaXBwbGFuZXMpOyBrKyspIHsKICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX0NMSVBQTEFORShrKSkpIHsKICAgICAgICAgICAgY2xpcHBsYW5lKFNUQVRFX0NMSVBQTEFORShrKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgfQoKICAgIGlmKGNvbnRleHQtPmxhc3Rfd2FzX3JodykgewogICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTG9hZElkZW50aXR5KCkiKTsKICAgICAgICAvKiBObyBuZWVkIHRvIHVwZGF0ZSB0aGUgd29ybGQgbWF0cml4LCB0aGUgaWRlbnRpdHkgaXMgZmluZSAqLwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBDYWxsIHRoZSB3b3JsZCBtYXRyaXggc3RhdGUsIHRoaXMgd2lsbCBhcHBseSB0aGUgY29tYmluZWQgV09STEQgKyBWSUVXIG1hdHJpeAogICAgICogTm8gbmVlZCB0byBkbyBpdCBoZXJlIGlmIHRoZSBzdGF0ZSBpcyBzY2hlZHVsZWQgZm9yIHVwZGF0ZS4KICAgICAqLwogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSkpIHsKICAgICAgICB0cmFuc2Zvcm1fd29ybGQoU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19XT1JMRE1BVFJJWCgwKSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQoKICAgIC8qIEF2b2lkIGxvb3Bpbmcgb3ZlciBhIG51bWJlciBvZiBtYXRyaWNlcyBpZiB0aGUgYXBwIG5ldmVyIHVzZWQgdGhlIGZ1bmN0aW9uYWxpdHkgKi8KICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnZlcnRleEJsZW5kVXNlZCkgewogICAgICAgIGZvcihrID0gMTsgayA8IEdMX0xJTUlUUyhibGVuZHMpOyBrKyspIHsKICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKGspKSkpIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybV93b3JsZGV4KFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoaykpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIGNvbnN0IEdMZmxvYXQgaW52eW1hdFsxNl0gPSB7CiAgICAxLjBmLCAwLjBmLCAwLjBmLCAwLjBmLAogICAgMC4wZiwgLTEuMGYsIDAuMGYsIDAuMGYsCiAgICAwLjBmLCAwLjBmLCAxLjBmLCAwLjBmLAogICAgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZn07CgpzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fcHJvamVjdGlvbihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGdsTWF0cml4TW9kZShHTF9QUk9KRUNUSU9OKTsKICAgIGNoZWNrR0xjYWxsKCJnbE1hdHJpeE1vZGUoR0xfUFJPSkVDVElPTikiKTsKICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICBjaGVja0dMY2FsbCgiZ2xMb2FkSWRlbnRpdHkiKTsKCiAgICBpZihjb250ZXh0LT5sYXN0X3dhc19yaHcpIHsKICAgICAgICBkb3VibGUgWCwgWSwgaGVpZ2h0LCB3aWR0aCwgbWluWiwgbWF4WjsKCiAgICAgICAgWCAgICAgID0gc3RhdGVibG9jay0+dmlld3BvcnQuWDsKICAgICAgICBZICAgICAgPSBzdGF0ZWJsb2NrLT52aWV3cG9ydC5ZOwogICAgICAgIGhlaWdodCA9IHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodDsKICAgICAgICB3aWR0aCAgPSBzdGF0ZWJsb2NrLT52aWV3cG9ydC5XaWR0aDsKICAgICAgICBtaW5aICAgPSBzdGF0ZWJsb2NrLT52aWV3cG9ydC5NaW5aOwogICAgICAgIG1heFogICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0Lk1heFo7CgogICAgICAgIGlmKCFzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT51bnRyYW5zZm9ybWVkKSB7CiAgICAgICAgICAgIC8qIFRyYW5zZm9ybWVkIHZlcnRpY2VzIGFyZSBzdXBwb3NlZCB0byBieXBhc3MgdGhlIHdob2xlIHRyYW5zZm9ybSBwaXBlbGluZSBpbmNsdWRpbmcKICAgICAgICAgICAgICogZnJ1c3R1bSBjbGlwcGluZy4gVGhpcyBjYW4ndCBiZSBkb25lIGluIG9wZW5nbCwgc28gdGhpcyBjb2RlIGFkanVzdHMgdGhlIFogcmFuZ2UgdG8KICAgICAgICAgICAgICogc3VwcHJlc3MgZGVwdGggY2xpcHBpbmcuIFRoaXMgY2FuIGJlIGRvbmUgYmVjYXVzZSBpdCBpcyBhbiBvcnRob2dvbmFsIHByb2plY3Rpb24gYW5kCiAgICAgICAgICAgICAqIHRoZSBaIGNvb3JkaW5hdGUgZG9lcyBub3QgYWZmZWN0IHRoZSBzaXplIG9mIHRoZSBwcmltaXRpdmVzCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBUUkFDRSgiQ2FsbGluZyBnbE9ydGhvIHdpdGggJWYsICVmLCAlZiwgJWZcbiIsIHdpZHRoLCBoZWlnaHQsIC1taW5aLCAtbWF4Wik7CiAgICAgICAgICAgIGlmKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICAgICAgICAgIGdsT3J0aG8oWCwgWCArIHdpZHRoLCAtWSwgLVkgLSBoZWlnaHQsIC1taW5aLCAtbWF4Wik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBnbE9ydGhvKFgsIFggKyB3aWR0aCwgWSArIGhlaWdodCwgWSwgLW1pblosIC1tYXhaKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qIElmIHRoZSBhcHAgbWl4ZXMgdHJhbnNmb3JtZWQgYW5kIHVudHJhbnNmb3JtZWQgcHJpbWl0aXZlcyB3ZSBjYW4ndCB1c2UgdGhlIGNvb3JkaW5hdGUgc3lzdGVtCiAgICAgICAgICAgICAqIHRyaWNrIGFib3ZlIGJlY2F1c2UgdGhpcyB3b3VsZCBtZXNzIHVwIHRyYW5zZm9ybWVkIGFuZCB1bnRyYW5zZm9ybWVkIFogb3JkZXIuIFBhc3MgdGhlIHogcG9zaXRpb24KICAgICAgICAgICAgICogdW5tb2RpZmllZCB0byBvcGVuZ2wuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIElmIHRoZSBhcHAgZGVwZW5kcyBvbiBtaXhlZCB0eXBlcyBhbmQgZGlzYWJsZWQgY2xpcHBpbmcgd2UncmUgb3V0IG9mIGx1Y2sgd2l0aG91dCBhIHBpcGVsaW5lCiAgICAgICAgICAgICAqIHJlcGxhY2VtZW50IHNoYWRlci4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIFRSQUNFKCJDYWxsaW5nIGdsT3J0aG8gd2l0aCAlZiwgJWYsICVmLCAlZlxuIiwgd2lkdGgsIGhlaWdodCwgMS4wLCAtMS4wKTsKICAgICAgICAgICAgaWYoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cmVuZGVyX29mZnNjcmVlbikgewogICAgICAgICAgICAgICAgZ2xPcnRobyhYLCBYICsgd2lkdGgsIC1ZLCAtWSAtIGhlaWdodCwgMS4wLCAtMS4wKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdsT3J0aG8oWCwgWCArIHdpZHRoLCBZICsgaGVpZ2h0LCBZLCAxLjAsIC0xLjApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNoZWNrR0xjYWxsKCJnbE9ydGhvIik7CgogICAgICAgIC8qIFdpbmRvdyBDb29yZCAwIGlzIHRoZSBtaWRkbGUgb2YgdGhlIGZpcnN0IHBpeGVsLCBzbyB0cmFuc2xhdGUgYnkgMy84IHBpeGVscyAqLwogICAgICAgIGdsVHJhbnNsYXRlZigwLjM3NSwgMC4zNzUsIDApOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFRyYW5zbGF0ZWYoMC4zNzUsIDAuMzc1LCAwKSIpOwogICAgICAgIC8qIEQzRCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFyZSBmbGlwcGVkIGNvbXBhcmVkIHRvIE9wZW5HTCBvbmVzLCBzbwogICAgICAgICAqIHJlbmRlciBldmVyeXRoaW5nIHVwc2lkZSBkb3duIHdoZW4gcmVuZGVyaW5nIG9mZnNjcmVlbi4gKi8KICAgICAgICBpZiAoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cmVuZGVyX29mZnNjcmVlbikgewogICAgICAgICAgICBnbE11bHRNYXRyaXhmKGludnltYXQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xNdWx0TWF0cml4ZihpbnZ5bWF0KSIpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgLyogVGhlIHJ1bGUgaXMgdGhhdCB0aGUgd2luZG93IGNvb3JkaW5hdGUgMCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZQogICAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHBpeGVsLCBidXQgdGhlIGNlbnRlciBvZiB0aGUgZmlyc3QgcGl4ZWwuCiAgICAgICAgICAgIEFzIGEgY29uc2VxdWVuY2UgaWYgeW91IHdhbnQgdG8gY29ycmVjdGx5IGRyYXcgb25lIGxpbmUgZXhhY3RseSBmcm9tCiAgICAgICAgICAgIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBlbmQgb2YgdGhlIHZpZXdwb3J0ICh3aXRoIGFsbCBtYXRyaWNlcyBzZXQgdG8KICAgICAgICAgICAgYmUgaWRlbnRpdHkpLCB0aGUgeCBjb29yZHMgb2YgYm90aCBlbmRzIG9mIHRoZSBsaW5lIHdvdWxkIGJlIG5vdAogICAgICAgICAgICAtMSBhbmQgMSByZXNwZWN0aXZlbHkgYnV0ICgtMS0xL3ZpZXdwb3J0X3dpZGgpIGFuZCAoMS0xL3ZpZXdwb3J0X3dpZHRoKQogICAgICAgICAgICBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgZ2xUcmFuc2xhdGVmKDAuOSAvIHN0YXRlYmxvY2stPnZpZXdwb3J0LldpZHRoLCAtMC45IC8gc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0LCAwKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xUcmFuc2xhdGVmICgwLjkgLyB3aWR0aCwgLTAuOSAvIGhlaWdodCwgMCkiKTsKCiAgICAgICAgLyogRDNEIHRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIGZsaXBwZWQgY29tcGFyZWQgdG8gT3BlbkdMIG9uZXMsIHNvCiAgICAgICAgICAgICogcmVuZGVyIGV2ZXJ5dGhpbmcgdXBzaWRlIGRvd24gd2hlbiByZW5kZXJpbmcgb2Zmc2NyZWVuLiAqLwogICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgIGdsTXVsdE1hdHJpeGYoaW52eW1hdCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE11bHRNYXRyaXhmKGludnltYXQpIik7CiAgICAgICAgfQogICAgICAgIGdsTXVsdE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19QUk9KRUNUSU9OXS51Lm1bMF1bMF0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExvYWRNYXRyaXhmIik7CiAgICB9Cn0KCi8qIFRoaXMgc2hvdWxkIG1hdGNoIGFueSBhcnJheXMgbG9hZGVkIGluIGxvYWRWZXJ0ZXhEYXRhLgogKiBzdGF0ZWJsb2NrIGltcGwgaXMgcmVxdWlyZWQgZm9yIEdMX1NVUFBPUlQKICogVE9ETzogT25seSBsb2FkIC8gdW5sb2FkIGFycmF5cyBpZiB3ZSBoYXZlIHRvLgogKi8Kc3RhdGljIGlubGluZSB2b2lkIHVubG9hZFZlcnRleERhdGEoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSk7CiAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSk7CiAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1NFQ09OREFSWV9DT0xPUl9BUlJBWV9FWFQpOwogICAgfQogICAgaWYgKEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CTEVORCkpIHsKICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9XRUlHSFRfQVJSQVlfQVJCKTsKICAgIH0gZWxzZSBpZiAoR0xfU1VQUE9SVChFWFRfVkVSVEVYX1dFSUdIVElORykpIHsKICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfV0VJR0hUX0FSUkFZX0VYVCk7CiAgICB9CiAgICB1bmxvYWRUZXhDb29yZHMoc3RhdGVibG9jayk7Cn0KCi8qIFRoaXMgc2hvdWxkIG1hdGNoIGFueSBhcnJheXMgbG9hZGVkIGluIGxvYWROdW1iZXJlZEFycmF5cwogKiBUT0RPOiBPbmx5IGxvYWQgLyB1bmxvYWQgYXJyYXlzIGlmIHdlIGhhdmUgdG8uCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2FkTnVtYmVyZWRBcnJheXMoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgLyogZGlzYWJsZSBhbnkgYXR0cmlicyAodGhpcyBpcyB0aGUgc2FtZSBmb3IgYm90aCBHTFNMIGFuZCBBUkIgbW9kZXMpICovCiAgICBHTGludCBtYXhBdHRyaWJzOwogICAgaW50IGk7CgogICAgLyogTGVhdmUgYWxsIHRoZSBhdHRyaWJzIGRpc2FibGVkICovCiAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfQVRUUklCU19BUkIsICZtYXhBdHRyaWJzKTsKICAgIC8qIE1FU0EgZG9lcyBub3Qgc3VwcG9ydCBpdCByaWdodCBub3QgKi8KICAgIGlmIChnbEdldEVycm9yKCkgIT0gR0xfTk9fRVJST1IpCiAgICAgICAgbWF4QXR0cmlicyA9IDE2OwogICAgZm9yIChpID0gMDsgaSA8IG1heEF0dHJpYnM7ICsraSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihyZWcpOyIpOwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbG9hZE51bWJlcmVkQXJyYXlzKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzdHJpZGVkKSB7CiAgICBHTGludCBjdXJWQk8gPSBHTF9TVVBQT1JUKEFSQl9WRVJURVhfQlVGRkVSX09CSkVDVCkgPyAtMSA6IDA7CiAgICBpbnQgaTsKICAgIFVJTlQgKm9mZnNldCA9IHN0YXRlYmxvY2stPnN0cmVhbU9mZnNldDsKCiAgICAvKiBEZWZhdWx0IHRvIG5vIGluc3RhbmNpbmcgKi8KICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmluc3RhbmNlZERyYXcgPSBGQUxTRTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0FUVFJJQlM7IGkrKykgewoKICAgICAgICBpZiAoIXN0cmlkZWQtPnUuaW5wdXRbaV0ubHBEYXRhICYmICFzdHJpZGVkLT51LmlucHV0W2ldLlZCTykKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgIC8qIERvIG5vdCBsb2FkIGluc3RhbmNlIGRhdGEuIEl0IHdpbGwgYmUgc3BlY2lmaWVkIHVzaW5nIGdsVGV4Q29vcmQgYnkgZHJhd3ByaW0gKi8KICAgICAgICBpZihzdGF0ZWJsb2NrLT5zdHJlYW1GbGFnc1tzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSAmIFdJTkVEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gVFJVRTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBUUkFDRV8oZDNkX3NoYWRlcikoIkxvYWRpbmcgYXJyYXkgJXUgW1ZCTz0ldV1cbiIsIGksIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKTsKCiAgICAgICAgaWYoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc3RyaWRlZC0+dS5pbnB1dFtpXS5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzdHJpZGVkLT51LmlucHV0W2ldLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliUG9pbnRlckFSQihpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfTk9STUFMSVpFRChzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVkLT51LmlucHV0W2ldLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSArIG9mZnNldFtzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSkgKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5QVJCKGkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBTdHJpZGUgPSAwIG1lYW5zIGFsd2F5cyB0aGUgc2FtZSB2YWx1ZXMuIGdsVmVydGV4QXR0cmliUG9pbnRlckFSQiBkb2Vzbid0IGRvIHRoYXQuIEluc3RlYWQgZGlzYWJsZSB0aGUgcG9pbnRlciBhbmQKICAgICAgICAgICAgICogc2V0IHVwIHRoZSBhdHRyaWJ1dGUgc3RhdGljYWxseS4gQnV0IHdlIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgc3lzdGVtIG1lbW9yeSBhZGRyZXNzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgQllURSAqcHRyID0gc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBvZmZzZXRbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgIGlmKHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSB7CiAgICAgICAgICAgICAgICBJV2luZUQzRFZlcnRleEJ1ZmZlckltcGwgKnZiID0gKElXaW5lRDNEVmVydGV4QnVmZmVySW1wbCAqKSBzdGF0ZWJsb2NrLT5zdHJlYW1Tb3VyY2Vbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgICAgICBwdHIgKz0gKGxvbmcpIHZiLT5yZXNvdXJjZS5hbGxvY2F0ZWRNZW1vcnk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgR0xfRVhUQ0FMTChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihpKSk7CgogICAgICAgICAgICBzd2l0Y2goc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMToKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMWZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMmZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMzoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliM2Z2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNGZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VQllURTQ6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjROdWJ2QVJCKGksIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVUJZVEU0TjoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0QzRENPTE9SOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVidkFSQihpLCBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9TSE9SVDI6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjRzdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNHN2QVJCKGksIChHTHNob3J0ICopIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUMk46CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0xzaG9ydCBzWzRdID0geygoc2hvcnQgKikgcHRyKVswXSwgKChzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCBzKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VU0hPUlQyTjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHTHVzaG9ydCBzWzRdID0geygodW5zaWduZWQgc2hvcnQgKikgcHRyKVswXSwgKCh1bnNpZ25lZCBzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE51c3ZBUkIoaSwgcykpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfU0hPUlQ0TjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1VTSE9SVDROOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVURFQzM6CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfVURFQzNcbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzdXN2QVJCKGksIChHTHVzaG9ydCAqKSBwdHIpOyBEb2VzIG5vdCBleGlzdCAqLwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfREVDM046CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfREVDM05cbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzTnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKTsgRG9lcyBub3QgZXhpc3QgKi8KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9GTE9BVDE2XzI6CiAgICAgICAgICAgICAgICAgICAgLyogQXJlIHRob3NlIDE2IGJpdCBmbG9hdHMuIEMgZG9lc24ndCBoYXZlIGEgMTYgYml0IGZsb2F0IHR5cGUuIEkgY291bGQgcmVhZCB0aGUgc2luZ2xlIGJpdHMgYW5kIGNhbGN1bGF0ZSBhIDQKICAgICAgICAgICAgICAgICAgICAgKiBieXRlIGZsb2F0IGFjY29yZGluZyB0byB0aGUgSUVFRSBzdGFuZGFyZAogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJVbnN1cHBvcnRlZCBXSU5FRDNEREVDTFRZUEVfRkxPQVQxNl8yXG4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNDoKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiVW5zdXBwb3J0ZWQgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNFxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVU5VU0VEOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24gaW4gc3RyaWRlIDAgYXR0cmlidXRlc1xuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovKiBVc2VkIGZyb20gMiBkaWZmZXJlbnQgZnVuY3Rpb25zLCBhbmQgdG9vIGJpZyB0byBqdXN0aWZ5IG1ha2luZyBpdCBpbmxpbmVkICovCnN0YXRpYyB2b2lkIGxvYWRWZXJ0ZXhEYXRhKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzZCkgewogICAgVUlOVCAqb2Zmc2V0ID0gc3RhdGVibG9jay0+c3RyZWFtT2Zmc2V0OwogICAgR0xpbnQgY3VyVkJPID0gR0xfU1VQUE9SVChBUkJfVkVSVEVYX0JVRkZFUl9PQkpFQ1QpID8gLTEgOiAwOwoKICAgIFRSQUNFKCJVc2luZyBmYXN0IHZlcnRleCBhcnJheSBjb2RlXG4iKTsKCiAgICAvKiBUaGlzIGlzIGZpeGVkIGZ1bmN0aW9uIHBpcGVsaW5lIG9ubHksIGFuZCB0aGUgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmUgZG9lc24ndCBkbyBpbnN0YW5jaW5nICovCiAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gRkFMU0U7CgogICAgLyogQmxlbmQgRGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBpZiggKHNkLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSkgfHwgKHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTykgfHwKICAgICAgICAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMubHBEYXRhKSB8fCAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMuVkJPKSApIHsKCiAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CTEVORCkpIHsKICAgICAgICAgICAgVFJBQ0UoIkJsZW5kICVkICVwICVkXG4iLCBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3VHlwZSksCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuYmxlbmRXZWlnaHRzLnN0cmVhbU5vXSk7CgogICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1dFSUdIVF9BUlJBWV9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9XRUlHSFRfQVJSQVlfQVJCKSIpOwoKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEJsZW5kQVJCKFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSArIDEpKTsKCiAgICAgICAgICAgIFZUUkFDRSgoImdsV2VpZ2h0UG9pbnRlckFSQiglZCwgR0xfRkxPQVQsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3VHlwZSkgLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy5ibGVuZFdlaWdodHMuc3RyZWFtTm9dKSk7CgogICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5ibGVuZFdlaWdodHMuVkJPKSB7CiAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsQmluZEJ1ZmZlckFSQihHTF9BUlJBWV9CVUZGRVJfQVJCLCBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5WQk8pKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRCdWZmZXJBUkIiKTsKICAgICAgICAgICAgICAgIGN1clZCTyA9IHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFdlaWdodFBvaW50ZXJBUkIpKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3VHlwZSksCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLmJsZW5kV2VpZ2h0cy5zdHJlYW1Ob10pOwoKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsV2VpZ2h0UG9pbnRlckFSQiIpOwoKICAgICAgICAgICAgaWYoKHNkLT51LnMuYmxlbmRNYXRyaXhJbmRpY2VzLmxwRGF0YSkgfHwgKHNkLT51LnMuYmxlbmRNYXRyaXhJbmRpY2VzLlZCTykpewogICAgICAgICAgICAgICAgc3RhdGljIEJPT0wgc2hvd2ZpeG1lID0gVFJVRTsKICAgICAgICAgICAgICAgIGlmKHNob3dmaXhtZSl7CiAgICAgICAgICAgICAgICAgICAgRklYTUUoImJsZW5kTWF0cml4SW5kaWNlcyBzdXBwb3J0XG4iKTsKICAgICAgICAgICAgICAgICAgICBzaG93Zml4bWUgPSBGQUxTRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoR0xfU1VQUE9SVChFWFRfVkVSVEVYX1dFSUdIVElORykpIHsKICAgICAgICAgICAgLyogRklYTUUoIlRPRE9cbiIpOyovCiNpZiAwCgogICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4V2VpZ2h0UG9pbnRlckVYVCkoCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3VHlwZSksCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSwKICAgICAgICAgICAgICAgIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVmVydGV4V2VpZ2h0UG9pbnRlckVYVChudW1CbGVuZHMsIC4uLikiKTsKICAgICAgICAgICAgZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfV0VJR0hUX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9XRUlHSFRfQVJSQVlfRVhUKSIpOwojZW5kaWYKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogVE9ETzogc3VwcG9ydCBibGVuZHMgaW4gZHJhd1N0cmlkZWRTbG93CiAgICAgICAgICAgICAqIE5vIG5lZWQgdG8gd3JpdGUgYSBGSVhNRSBoZXJlLCB0aGlzIGlzIGRvbmUgYWZ0ZXIgdGhlIGdlbmVyYWwgdmVydGV4IGRlY2wgZGVjb2RpbmcKICAgICAgICAgICAgICovCiAgICAgICAgICAgIFdBUk4oInVuc3VwcG9ydGVkIGJsZW5kaW5nIGluIG9wZW5HbFxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChBUkJfVkVSVEVYX0JMRU5EKSkgewogICAgICAgICAgICBzdGF0aWMgY29uc3QgR0xieXRlIG9uZSA9IDE7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xXZWlnaHRidkFSQigxLCAmb25lKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFdlaWdodGl2QVJCKEdMX0xJTUlUUyhibGVuZHMpLCB3ZWlnaHRzKSIpOwogICAgICAgIH0KICAgIH0KCiNpZiAwIC8qIEZPRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBpZiAoc2QtPnUucy5mb2cubHBEYXRhIHx8IHNkLT51LnMuZm9nLlZCTykgewogICAgICAgIC8qIFRPRE86IGZvZyovCiAgICBpZiAoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSB7CiAgICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgICAgIChHTF9FWFRDQUxMKShGb2dDb29yZFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuZm9nLmR3VHlwZSksCiAgICAgICAgICAgICAgICBzZC0+dS5zLmZvZy5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMuZm9nLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLmZvZy5kd1N0cmlkZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogZG9uJ3QgYm90aGVyIGZhbGxpbmcgYmFjayB0byAnc2xvdycgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBzb2Z0d2FyZSBGT0cgeWV0LiAqLwogICAgICAgICAgICAvKiBGSVhNRTogZml4bWUgb25jZSAqLwogICAgICAgICAgICBUUkFDRSgiSGFyZHdhcmUgc3VwcG9ydCBmb3IgRk9HIGlzIG5vdCBhdmFpYWJsZSwgRk9HIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUFJUKEVYVF9GT1JfQ09PUkQpIHsKICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBmb2cgaXMgZGlzYWJsZWQgKi8KICAgICAgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgfQogICAgfQojZW5kaWYKCiNpZiAwIC8qIHRhbmdlbnRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnRhbmdlbnQubHBEYXRhIHx8IHNkLT51LnMudGFuZ2VudC5WQk8gfHwKICAgICAgICBzZC0+dS5zLmJpbm9ybWFsLmxwRGF0YSB8fCBzZC0+dS5zLmJpbm9ybWFsLlZCTykgewogICAgICAgIC8qIFRPRE86IHRhbmdlbnRzKi8KICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICBpZiAoc2QtPnUucy50YW5nZW50LmxwRGF0YSB8fCBzZC0+dS5zLnRhbmdlbnQuVkJPKSB7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoVGFuZ2VudFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRhbmdlbnQuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50YW5nZW50LmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNkLT51LnMuYmlub3JtYWwubHBEYXRhIHx8IHNkLT51LnMuYmlub3JtYWwuVkJPKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoQmlub3JtYWxQb2ludGVyRVhUKSgKICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuYmlub3JtYWwuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSk7CiAgICAgICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBkb24ndCBib3RoZXIgZmFsbGluZyBiYWNrIHRvICdzbG93JyBhcyB3ZSBkb24ndCBzdXBwb3J0IHNvZnR3YXJlIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgeWV0IC4gKi8KICAgICAgICAgICAgLyogRklYTUU6IGZpeG1lIG9uY2UgKi8KICAgICAgICAgICAgVFJBQ0UoIkhhcmR3YXJlIHN1cHBvcnQgZm9yIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgaXMgbm90IGF2YWlhYmxlLCB0YW5nZW50cyBhbmQgYmlub3JtYWxzIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICAgLyogbWFrZSBzdXJlIGZvZyBpcyBkaXNhYmxlZCAqLwogICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RBTkdFTlRfQVJSQVlfRVhUKTsKICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CSU5PUk1BTF9BUlJBWV9FWFQpOwogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLyogUG9pbnQgU2l6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnBTaXplLmxwRGF0YSB8fCBzZC0+dS5zLnBTaXplLlZCTykgewoKICAgICAgICAvKiBubyBzdWNoIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpeGVkIGZ1bmN0aW9uIEdMIHBpcGVsaW5lICovCiAgICAgICAgVFJBQ0UoIkNhbm5vdCBjaGFuZ2UgcHRTaXplIGhlcmUgaW4gb3BlbkdsXG4iKTsKICAgICAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpbiB1c2luZyBzaGFkZXJzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSAqLwoKICAgIH0KCiAgICAvKiBWZXJ0ZXggUG9pbnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMucG9zaXRpb24ubHBEYXRhICE9IE5VTEwgfHwgc2QtPnUucy5wb3NpdGlvbi5WQk8gIT0gMCkgewogICAgICAgIC8qIE5vdGUgZHdUeXBlID09IGZsb2F0MyBvciBmbG9hdDQgPT0gMiBvciAzICovCiAgICAgICAgVlRSQUNFKCgiZ2xWZXJ0ZXhQb2ludGVyKCVkLCBHTF9GTE9BVCwgJWQsICVwKVxuIiwKICAgICAgICAgICAgICAgIHNkLT51LnMucG9zaXRpb24uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSArIDEsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmxwRGF0YSkpOwoKICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5wb3NpdGlvbi5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5wb3NpdGlvbi5WQk8pKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnBvc2l0aW9uLlZCTzsKICAgICAgICB9CgogICAgICAgIC8qIG1pbihXSU5FRDNEX0FUUl9TSVpFKHBvc2l0aW9uKSwzKSB0byBEaXNhYmxlIFJIVyBtb2RlIGFzICd3JyBjb29yZAogICAgICAgICAgIGhhbmRsaW5nIGZvciByaHcgbW9kZSBzaG91bGQgbm90IGltcGFjdCBzY3JlZW4gcG9zaXRpb24gd2hlcmVhcyBpbiBHTCBpdCBkb2VzLgogICAgICAgICAgIFRoaXMgbWF5ICByZXN1bHQgaW4gdmVyeSBzbGlnaHRseSBkaXN0b3JlZCB0ZXh0dXJlcyBpbiByaHcgbW9kZSwgYnV0CiAgICAgICAgICAgYSB2ZXJ5IG1pbmltYWwgZGlmZmVyZW50LiBUaGVyZSdzIGFsd2F5cyB0aGUgb3RoZXIgb3B0aW9uIG9mCiAgICAgICAgICAgZml4aW5nIHRoZSB2aWV3IG1hdHJpeCB0byBwcmV2ZW50IHcgZnJvbSBoYXZpbmcgYW55IGVmZmVjdAoKICAgICAgICAgICBUaGlzIG9ubHkgYXBwbGllcyB0byB1c2VyIHBvaW50ZXIgc291cmNlcywgaW4gVkJPcyB0aGUgdmVydGljZXMgYXJlIGZpeGVkIHVwCiAgICAgICAgICovCiAgICAgICAgaWYoc2QtPnUucy5wb3NpdGlvbi5WQk8gPT0gMCkgewogICAgICAgICAgICBnbFZlcnRleFBvaW50ZXIoMyAvKiBtaW4oV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksMykgKi8sCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xWZXJ0ZXhQb2ludGVyKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrR0xjYWxsKCJnbFZlcnRleFBvaW50ZXIoLi4uKSIpOwogICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpIik7CiAgICB9CgogICAgLyogTm9ybWFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLm5vcm1hbC5scERhdGEgfHwgc2QtPnUucy5ub3JtYWwuVkJPKSB7CiAgICAgICAgLyogTm90ZSBkd1R5cGUgPT0gZmxvYXQzIG9yIGZsb2F0NCA9PSAyIG9yIDMgKi8KICAgICAgICBWVFJBQ0UoKCJnbE5vcm1hbFBvaW50ZXIoR0xfRkxPQVQsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMubm9ybWFsLmxwRGF0YSkpOwogICAgICAgIGlmKGN1clZCTyAhPSBzZC0+dS5zLm5vcm1hbC5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5ub3JtYWwuVkJPKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRCdWZmZXJBUkIiKTsKICAgICAgICAgICAgY3VyVkJPID0gc2QtPnUucy5ub3JtYWwuVkJPOwogICAgICAgIH0KICAgICAgICBnbE5vcm1hbFBvaW50ZXIoCiAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLm5vcm1hbC5kd1R5cGUpLAogICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgc2QtPnUucy5ub3JtYWwubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMubm9ybWFsLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMubm9ybWFsLnN0cmVhbU5vXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTm9ybWFsUG9pbnRlciguLi4pIik7CiAgICAgICAgZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9OT1JNQUxfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSkiKTsKCiAgICB9IGVsc2UgewogICAgICAgIGdsTm9ybWFsM2YoMCwgMCwgMSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTm9ybWFsM2YoMCwgMCwgMSkiKTsKICAgIH0KCiAgICAvKiBEaWZmdXNlIENvbG91ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAvKiAgV0FSTklORzogRGF0YSBoZXJlIE1VU1QgYmUgaW4gUkdCQSBmb3JtYXQsIHNvIGNhbm5vdCAgICAgICovCiAgICAvKiAgICAgZ28gZGlyZWN0bHkgaW50byBmYXN0IG1vZGUgZnJvbSBhcHAgcGdtLCBiZWNhdXNlICAgICAgICovCiAgICAvKiAgICAgZGlyZWN0eCByZXF1aXJlcyBkYXRhIGluIEJHUkEgZm9ybWF0LiAgICAgICAgICAgICAgICAgICovCiAgICAvKiBjdXJyZW50bHkgZml4dXBWZXJ0aWNlcyBzd2l6ZWxzIHRoZSBmb3JtYXQsIGJ1dCB0aGlzIGlzbid0ICovCiAgICAvKiB2ZXJ5IHByYWN0aWNhbCB3aGVuIHVzaW5nIFZCT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAvKiBOT1RFOiBVbmxlc3Mgd2Ugd3JpdGUgYSB2ZXJ0ZXggc2hhZGVyIHRvIHN3aXplbCB0aGUgY29sb3VyICovCiAgICAvKiAsIG9yIHRoZSB1c2VyIGRvZXNuJ3QgY2FyZSBhbmQgd2FudHMgdGhlIHNwZWVkIGFkdmFudGFnZSAgICovCgogICAgaWYgKHNkLT51LnMuZGlmZnVzZS5scERhdGEgfHwgc2QtPnUucy5kaWZmdXNlLlZCTykgewogICAgICAgIC8qIE5vdGUgZHdUeXBlID09IGZsb2F0MyBvciBmbG9hdDQgPT0gMiBvciAzICovCiAgICAgICAgVlRSQUNFKCgiZ2xDb2xvclBvaW50ZXIoNCwgR0xfVU5TSUdORURfQllURSwgJWQsICVwKVxuIiwKICAgICAgICAgICAgICAgIHNkLT51LnMuZGlmZnVzZS5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMuZGlmZnVzZS5scERhdGEpKTsKCiAgICAgICAgaWYoY3VyVkJPICE9IHNkLT51LnMuZGlmZnVzZS5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5kaWZmdXNlLlZCTykpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgIGN1clZCTyA9IHNkLT51LnMuZGlmZnVzZS5WQk87CiAgICAgICAgfQogICAgICAgIGdsQ29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsCiAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5kaWZmdXNlLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgIHNkLT51LnMuZGlmZnVzZS5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5kaWZmdXNlLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuZGlmZnVzZS5zdHJlYW1Ob10pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbENvbG9yUG9pbnRlcig0LCBHTF9VTlNJR05FRF9CWVRFLCAuLi4pIik7CiAgICAgICAgZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfQ09MT1JfQVJSQVkpIik7CgogICAgfSBlbHNlIHsKICAgICAgICBnbENvbG9yNGYoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQ29sb3I0ZigxLCAxLCAxLCAxKSIpOwogICAgfQoKICAgIC8qIFNwZWN1bGFyIENvbG91ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMuc3BlY3VsYXIubHBEYXRhIHx8IHNkLT51LnMuc3BlY3VsYXIuVkJPKSB7CiAgICAgICAgVFJBQ0UoInNldHRpbmcgc3BlY3VsYXIgY29sb3VyXG4iKTsKICAgICAgICAvKiBOb3RlIGR3VHlwZSA9PSBmbG9hdDMgb3IgZmxvYXQ0ID09IDIgb3IgMyAqLwogICAgICAgIFZUUkFDRSgoImdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5zcGVjdWxhci5scERhdGEpKTsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5zcGVjdWxhci5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMuc3BlY3VsYXIuVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnNwZWN1bGFyLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyRVhUKSg0LCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuc3BlY3VsYXIuc3RyZWFtTm9dKTsKICAgICAgICAgICAgdmNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yUG9pbnRlckVYVCg0LCBHTF9VTlNJR05FRF9CWVRFLCAuLi4pIik7CiAgICAgICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIHZjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9TRUNPTkRBUllfQ09MT1JfQVJSQVlfRVhUKSIpOwogICAgICAgIH0gZWxzZSB7CgogICAgICAgIC8qIE1pc3Npbmcgc3BlY3VsYXIgY29sb3IgaXMgbm90IGNyaXRpY2FsLCBubyB3YXJuaW5ncyAqLwogICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3IzZkVYVCkoMCwgMCwgMCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yM2ZFWFQoMCwgMCwgMCkiKTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLyogTWlzc2luZyBzcGVjdWxhciBjb2xvciBpcyBub3QgY3JpdGljYWwsIG5vIHdhcm5pbmdzICovCiAgICAgICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CiAgICB9CgogICAgLyogVGV4dHVyZSBjb29yZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBsb2FkVGV4Q29vcmRzKHN0YXRlYmxvY2ssIHNkLCAmY3VyVkJPKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRyYXdQcmltaXRpdmVUcmFjZURhdGFMb2NhdGlvbnMoCiAgICBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqZGF0YUxvY2F0aW9ucykgewoKICAgIC8qIER1bXAgb3V0IHdoYXQgcGFydHMgd2UgaGF2ZSBzdXBwbGllZCAqLwogICAgVFJBQ0UoIlN0cmlkZWQgRGF0YTpcbiIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHBvc2l0aW9uKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBibGVuZFdlaWdodHMpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGJsZW5kTWF0cml4SW5kaWNlcyk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgbm9ybWFsKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBwU2l6ZSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgZGlmZnVzZSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgc3BlY3VsYXIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1swXSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzFdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbMl0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1szXSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzRdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbNV0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1s2XSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzddKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBwb3NpdGlvbjIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIG5vcm1hbDIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRhbmdlbnQpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGJpbm9ybWFsKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXNzRmFjdG9yKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBmb2cpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGRlcHRoKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBzYW1wbGUpOwoKICAgIHJldHVybjsKfQoKLyogSGVscGVyIGZvciB2ZXJ0ZXhkZWNsYXJhdGlvbigpICovCnN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVTdHJlYW1zKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIEJPT0wgdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24sIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CiAgICBCT09MIGZpeHVwID0gRkFMU0U7CiAgICBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqZGF0YUxvY2F0aW9ucyA9ICZkZXZpY2UtPnN0cmlkZWRfc3RyZWFtczsKCiAgICBpZihkZXZpY2UtPnVwX3N0cmlkZWQpIHsKICAgICAgICAvKiBOb3RlOiB0aGlzIGlzIGEgZGRyYXcgZml4ZWQtZnVuY3Rpb24gY29kZSBwYXRoICovCiAgICAgICAgVFJBQ0UoIj09PT09PT09PT09PT09PT0gU3RyaWRlZCBJbnB1dCA9PT09PT09PT09PT09PT09PT09XG4iKTsKICAgICAgICBtZW1jcHkoZGF0YUxvY2F0aW9ucywgZGV2aWNlLT51cF9zdHJpZGVkLCBzaXplb2YoKmRhdGFMb2NhdGlvbnMpKTsKCiAgICAgICAgaWYoVFJBQ0VfT04oZDNkKSkgewogICAgICAgICAgICBkcmF3UHJpbWl0aXZlVHJhY2VEYXRhTG9jYXRpb25zKGRhdGFMb2NhdGlvbnMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoc3RhdGVibG9jay0+dmVydGV4RGVjbCkgewogICAgICAgIC8qIE5vdGU6IFRoaXMgaXMgYSBmaXhlZCBmdW5jdGlvbiBvciBzaGFkZXIgY29kZXBhdGguCiAgICAgICAgICogVGhpcyBtZWFucyBpdCBtdXN0IGhhbmRsZSBib3RoIHR5cGVzIG9mIHN0cmlkZWQgZGF0YS4KICAgICAgICAgKiBTaGFkZXJzIG11c3QgZ28gdGhyb3VnaCBoZXJlIHRvIHplcm8gdGhlIHN0cmlkZWQgZGF0YSwgZXZlbiBpZiB0aGV5CiAgICAgICAgICogZG9uJ3Qgc2V0IGFueSBkZWNsYXJhdGlvbiBhdCBhbGwKICAgICAgICAgKi8KICAgICAgICBUUkFDRSgiPT09PT09PT09PT09PT09PSBWZXJ0ZXggRGVjbGFyYXRpb24gID09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgICAgIG1lbXNldChkYXRhTG9jYXRpb25zLCAwLCBzaXplb2YoKmRhdGFMb2NhdGlvbnMpKTsKICAgICAgICBwcmltaXRpdmVEZWNsYXJhdGlvbkNvbnZlcnRUb1N0cmlkZWREYXRhKChJV2luZUQzRERldmljZSAqKSBkZXZpY2UsCiAgICAgICAgICAgICAgICB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiwgZGF0YUxvY2F0aW9ucywgJmZpeHVwKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLyogTm90ZTogVGhpcyBjb2RlcGF0aCBpcyBub3QgcmVhY2hhYmxlIGZyb20gZDNkOSAoc2VlIGZ2Zi0+ZGVjbDkgY29udmVyc2lvbikKICAgICAgICAgKiBJdCBpcyByZWFjaGFibGUgdGhyb3VnaCBkM2Q4LCBidXQgb25seSBmb3IgZml4ZWQtZnVuY3Rpb24uCiAgICAgICAgICogSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBmb3Igc2hhZGVycy4KICAgICAgICAgKi8KICAgICAgICBUUkFDRSgiPT09PT09PT09PT09PT09PSBGVkYgPT09PT09PT09PT09PT09PT09PVxuIik7CiAgICAgICAgbWVtc2V0KGRhdGFMb2NhdGlvbnMsIDAsIHNpemVvZigqZGF0YUxvY2F0aW9ucykpOwogICAgICAgIHByaW1pdGl2ZUNvbnZlcnRUb1N0cmlkZWREYXRhKChJV2luZUQzRERldmljZSAqKSBkZXZpY2UsIGRhdGFMb2NhdGlvbnMsICZmaXh1cCk7CiAgICAgICAgaWYoVFJBQ0VfT04oZDNkKSkgewogICAgICAgICAgICBkcmF3UHJpbWl0aXZlVHJhY2VEYXRhTG9jYXRpb25zKGRhdGFMb2NhdGlvbnMpOwogICAgICAgIH0KICAgICB9CgogICAgaWYgKGRhdGFMb2NhdGlvbnMtPnUucy5wb3NpdGlvbl90cmFuc2Zvcm1lZCkgewogICAgICAgIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uID0gRkFMU0U7CiAgICB9CgogICAgLyogVW5sb2FkIHRoZSBvbGQgYXJyYXlzIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgb25lcyB0byBnZXQgb2xkIGp1bmsgb3V0ICovCiAgICBpZihjb250ZXh0LT5udW1iZXJlZEFycmF5c0xvYWRlZCkgewogICAgICAgIHVubG9hZE51bWJlcmVkQXJyYXlzKHN0YXRlYmxvY2spOwogICAgICAgIGNvbnRleHQtPm51bWJlcmVkQXJyYXlzTG9hZGVkID0gRkFMU0U7CiAgICB9CiAgICBpZihjb250ZXh0LT5uYW1lZEFycmF5c0xvYWRlZCkgewogICAgICAgIHVubG9hZFZlcnRleERhdGEoc3RhdGVibG9jayk7CiAgICAgICAgY29udGV4dC0+bmFtZWRBcnJheXNMb2FkZWQgPSBGQUxTRTsKICAgIH0KCiAgICBpZih1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbikgewogICAgICAgIFRSQUNFKCJMb2FkaW5nIG51bWJlcmVkIGFycmF5c1xuIik7CiAgICAgICAgbG9hZE51bWJlcmVkQXJyYXlzKHN0YXRlYmxvY2ssIGRhdGFMb2NhdGlvbnMpOwogICAgICAgIGRldmljZS0+dXNlRHJhd1N0cmlkZWRTbG93ID0gRkFMU0U7CiAgICAgICAgY29udGV4dC0+bnVtYmVyZWRBcnJheXNMb2FkZWQgPSBUUlVFOwogICAgfSBlbHNlIGlmIChmaXh1cCB8fAogICAgICAgICAgICAgICAoZGF0YUxvY2F0aW9ucy0+dS5zLnBTaXplLmxwRGF0YSA9PSBOVUxMICYmCiAgICAgICAgICAgICAgICBkYXRhTG9jYXRpb25zLT51LnMuZGlmZnVzZS5scERhdGEgPT0gTlVMTCAmJgogICAgICAgICAgICAgICAgZGF0YUxvY2F0aW9ucy0+dS5zLnNwZWN1bGFyLmxwRGF0YSA9PSBOVUxMKSkgewogICAgICAgIC8qIExvYWQgdGhlIHZlcnRleCBkYXRhIHVzaW5nIG5hbWVkIGFycmF5cyAqLwogICAgICAgIFRSQUNFKCJMb2FkaW5nIHZlcnRleCBkYXRhXG4iKTsKICAgICAgICBsb2FkVmVydGV4RGF0YShzdGF0ZWJsb2NrLCBkYXRhTG9jYXRpb25zKTsKICAgICAgICBkZXZpY2UtPnVzZURyYXdTdHJpZGVkU2xvdyA9IEZBTFNFOwogICAgICAgIGNvbnRleHQtPm5hbWVkQXJyYXlzTG9hZGVkID0gVFJVRTsKICAgIH0gZWxzZSB7CiAgICAgICAgVFJBQ0UoIk5vdCBsb2FkaW5nIHZlcnRleCBkYXRhXG4iKTsKICAgICAgICBkZXZpY2UtPnVzZURyYXdTdHJpZGVkU2xvdyA9IFRSVUU7CiAgICB9CgovKiBHZW5lcmF0ZSBzb21lIGZpeG1lJ3MgaWYgdW5zdXBwb3J0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1c2VkICovCiNkZWZpbmUgQlVGRkVSX09SX0RBVEEoX2F0dHJpYnV0ZSkgZGF0YUxvY2F0aW9ucy0+dS5zLl9hdHRyaWJ1dGUubHBEYXRhCiAgICAvKiBUT0RPOiBFaXRoZXIgc3VwcG9ydCBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgaW4gZml4dXBWZXJ0aWNlcyBvciBieSBjcmVhdGluZyBhIHNoYWRlciB0byByZXBsYWNlIHRoZSBwaXBlbGluZS4gKi8KICAgIGlmICghdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24gJiYgKEJVRkZFUl9PUl9EQVRBKHBvc2l0aW9uMikgfHwgQlVGRkVSX09SX0RBVEEobm9ybWFsMikpKSB7CiAgICAgICAgRklYTUUoIlR3ZWVuaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCB2ZXJ0ZXggc2hhZGVyc1xuIik7CiAgICB9CiAgICBpZiAoIXVzZVZlcnRleFNoYWRlckZ1bmN0aW9uICYmIChCVUZGRVJfT1JfREFUQSh0YW5nZW50KSB8fCBCVUZGRVJfT1JfREFUQShiaW5vcm1hbCkpKSB7CiAgICAgICAgRklYTUUoIlRhbmdlbnQgYW5kIGJpbm9ybWFsIGJ1bXAgbWFwcGluZyBpcyBvbmx5IHZhbGlkIHdpdGggdmVydGV4IHNoYWRlcnNcbiIpOwogICAgfQogICAgaWYgKCF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiAmJiAoQlVGRkVSX09SX0RBVEEodGVzc0ZhY3RvcikgfHwgQlVGRkVSX09SX0RBVEEoZm9nKSB8fCBCVUZGRVJfT1JfREFUQShkZXB0aCkgfHwgQlVGRkVSX09SX0RBVEEoc2FtcGxlKSkpIHsKICAgICAgICBGSVhNRSgiRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgb25seSB2YWxpZCB3aXRoIHZlcnRleCBzaGFkZXJzXG4iKTsKICAgIH0KI3VuZGVmIEJVRkZFUl9PUl9EQVRBCn0KCnN0YXRpYyB2b2lkIHZlcnRleGRlY2xhcmF0aW9uKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgQk9PTCB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IEZBTFNFLCB1cGRhdGVGb2cgPSBGQUxTRTsKICAgIEJPT0wgdXNlUGl4ZWxTaGFkZXJGdW5jdGlvbiA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYgc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIKICAgICAgICAgICAgJiYgKChJV2luZUQzRFBpeGVsU2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnBpeGVsU2hhZGVyKS0+YmFzZVNoYWRlci5mdW5jdGlvbjsKICAgIEJPT0wgdHJhbnNmb3JtZWQ7CiAgICAvKiBTb21lIHN0dWZmIGlzIGluIHRoZSBkZXZpY2UgdW50aWwgd2UgaGF2ZSBwZXIgY29udGV4dCB0cmFja2luZyAqLwogICAgSVdpbmVEM0REZXZpY2VJbXBsICpkZXZpY2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlOwogICAgQk9PTCB3YXNyaHcgPSBjb250ZXh0LT5sYXN0X3dhc19yaHc7CgogICAgLyogU2hhZGVycyBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgQVJCX1BST0dSQU0sIEdMU0wsIG9yIHNvZnR3YXJlIC0KICAgICAqIGhlcmUgc2ltcGx5IGNoZWNrIHdoZXRoZXIgYSBzaGFkZXIgd2FzIHNldCwgb3IgdGhlIHVzZXIgZGlzYWJsZWQgc2hhZGVycwogICAgICovCiAgICBpZiAoZGV2aWNlLT52c19zZWxlY3RlZF9tb2RlICE9IFNIQURFUl9OT05FICYmIHN0YXRlYmxvY2stPnZlcnRleFNoYWRlciAmJgogICAgICAgKChJV2luZUQzRFZlcnRleFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT52ZXJ0ZXhTaGFkZXIpLT5iYXNlU2hhZGVyLmZ1bmN0aW9uICE9IE5VTEwpIHsKICAgICAgICB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IFRSVUU7CgogICAgICAgIGlmKCgoSVdpbmVEM0RWZXJ0ZXhTaGFkZXJJbXBsICopc3RhdGVibG9jay0+dmVydGV4U2hhZGVyKS0+YmFzZVNoYWRlci5yZWdfbWFwcy5mb2cgIT0gY29udGV4dC0+bGFzdF93YXNfZm9nZ3lfc2hhZGVyKSB7CiAgICAgICAgICAgIHVwZGF0ZUZvZyA9IFRSVUU7CiAgICAgICAgfQogICAgfSBlbHNlIGlmKGNvbnRleHQtPmxhc3Rfd2FzX2ZvZ2d5X3NoYWRlcikgewogICAgICAgIHVwZGF0ZUZvZyA9IFRSVUU7CiAgICB9CgogICAgaGFuZGxlU3RyZWFtcyhzdGF0ZWJsb2NrLCB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiwgY29udGV4dCk7CgogICAgdHJhbnNmb3JtZWQgPSBkZXZpY2UtPnN0cmlkZWRfc3RyZWFtcy51LnMucG9zaXRpb25fdHJhbnNmb3JtZWQ7CiAgICBpZiAodHJhbnNmb3JtZWQpIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uID0gRkFMU0U7CgogICAgaWYodHJhbnNmb3JtZWQgIT0gY29udGV4dC0+bGFzdF93YXNfcmh3ICYmICF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbikgewogICAgICAgIHVwZGF0ZUZvZyA9IFRSVUU7CiAgICB9CgogICAgLyogUmVhcHBseSBsaWdodGluZyBpZiBpdCBpcyBub3Qgc2NoZWR1bGVkIGZvciByZWFwcGxpY2F0aW9uIGFscmVhZHkgKi8KICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MSUdIVElORykpKSB7CiAgICAgICAgc3RhdGVfbGlnaHRpbmcoU1RBVEVfUkVOREVSKFdJTkVEM0RSU19MSUdIVElORyksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQoKICAgIGlmICh0cmFuc2Zvcm1lZCkgewogICAgICAgIGNvbnRleHQtPmxhc3Rfd2FzX3JodyA9IFRSVUU7CiAgICB9IGVsc2UgewoKICAgICAgICAvKiBVbnRyYW5zZm9ybWVkLCBzbyByZWxpZXMgb24gdGhlIHZpZXcgYW5kIHByb2plY3Rpb24gbWF0cmljZXMgKi8KICAgICAgICBjb250ZXh0LT5sYXN0X3dhc19yaHcgPSBGQUxTRTsKICAgICAgICAvKiBUaGlzIHR1cm5zIG9mZiB0aGUgWiBzY2FsZSB0cmljayB0byAnZGlzYWJsZScgdmlld3BvcnQgZnJ1c3R1bSBjbGlwcGluZyBpbiByaHcgbW9kZSovCiAgICAgICAgZGV2aWNlLT51bnRyYW5zZm9ybWVkID0gVFJVRTsKCiAgICAgICAgLyogVG9kbyBmb3Igc3cgc2hhZGVyczogVmVydGV4IFNoYWRlciBvdXRwdXQgaXMgYWxyZWFkeSB0cmFuc2Zvcm1lZCwgc28gc2V0IHVwIGlkZW50aXR5IG1hdHJpY2VzCiAgICAgICAgICogTm90IG5lZWRlZCBhcyBsb25nIGFzIG9ubHkgaHcgc2hhZGVycyBhcmUgc3VwcG9ydGVkCiAgICAgICAgICovCgogICAgICAgIC8qIFRoaXMgc2V0cyB0aGUgc2hhZGVyIG91dHB1dCBwb3NpdGlvbiBjb3JyZWN0aW9uIGNvbnN0YW50cy4KICAgICAgICAgKiBUT0RPOiBNb3ZlIHRvIHRoZSB2aWV3cG9ydCBzdGF0ZQogICAgICAgICAqLwogICAgICAgIGlmICh1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbikgewogICAgICAgICAgICBkZXZpY2UtPnBvc0ZpeHVwWzFdID0gZGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuID8gLTEuMCA6IDEuMDsKICAgICAgICB9CiAgICB9CgogICAgLyogRG9uJ3QgaGF2ZSB0byBhcHBseSB0aGUgbWF0cmljZXMgd2hlbiB2ZXJ0ZXggc2hhZGVycyBhcmUgdXNlZC4gV2hlbiB2c2hhZGVycyBhcmUgdHVybmVkCiAgICAgKiBvZmYgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhbnl3YXkgdG8gbWFrZSBzdXJlIHRoZXkncmUgcHJvcGVybHkgc2V0CiAgICAgKi8KICAgIGlmKCF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbikgewogICAgICAgIC8qIFRPRE86IE1vdmUgdGhpcyBtYWlubHkgdG8gdGhlIHZpZXdwb3J0IHN0YXRlIGFuZCBvbmx5IGFwcGx5IHdoZW4gdGhlIHZwIGhhcyBjaGFuZ2VkCiAgICAgICAgICogb3IgdHJhbnNmb3JtZWQgLyB1bnRyYW5zZm9ybWVkIHdhcyBzd2l0Y2hlZAogICAgICAgICAqLwogICAgICAgaWYod2Fzcmh3ICE9IGNvbnRleHQtPmxhc3Rfd2FzX3JodyAmJgogICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1BST0pFQ1RJT04pKSAmJgogICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WSUVXUE9SVCkpIHsKICAgICAgICAgICAgdHJhbnNmb3JtX3Byb2plY3Rpb24oU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19QUk9KRUNUSU9OKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgICAgIC8qIFdvcmxkIG1hdHJpeCBuZWVkcyByZWFwcGxpY2F0aW9uIGhlcmUgb25seSBpZiB3ZSdyZSBzd2l0Y2hpbmcgYmV0d2VlbiByaHcgYW5kIG5vbi1yaHcKICAgICAgICAgKiBtb2RlLgogICAgICAgICAqCiAgICAgICAgICogSWYgYSB2ZXJ0ZXggc2hhZGVyIGlzIHVzZWQsIHRoZSB3b3JsZCBtYXRyaXggY2hhbmdlZCBhbmQgdGhlbiB2ZXJ0ZXggc2hhZGVyIHVuYm91bmQKICAgICAgICAgKiB0aGlzIGNoZWNrIHdpbGwgZmFpbCBhbmQgdGhlIG1hdHJpeCBub3QgYXBwbGllZCBhZ2Fpbi4gVGhpcyBpcyBPSyBiZWNhdXNlIGEgc2ltcGxlCiAgICAgICAgICogd29ybGQgbWF0cml4IGNoYW5nZSByZWFwcGxpZXMgdGhlIG1hdHJpeCAtIFRoZXNlIGNoZWNrcyBoZXJlIGFyZSBvbmx5IHRvIHNhdGlzZnkgdGhlCiAgICAgICAgICogbmVlZHMgb2YgdGhlIHZlcnRleCBkZWNsYXJhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIFdvcmxkIGFuZCB2aWV3IG1hdHJpeCBnbyBpbnRvIHRoZSBzYW1lIGdsIG1hdHJpeCwgc28gb25seSBhcHBseSB0aGVtIHdoZW4gbmVpdGhlciBpcwogICAgICAgICAqIGRpcnR5CiAgICAgICAgICovCiAgICAgICAgaWYodHJhbnNmb3JtZWQgIT0gd2Fzcmh3ICYmCiAgICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSkgJiYKICAgICAgICAgICAhaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVklFVykpKSB7CiAgICAgICAgICAgIHRyYW5zZm9ybV93b3JsZChTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQoKICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1JFTkRFUihXSU5FRDNEUlNfQ09MT1JWRVJURVgpKSkgewogICAgICAgICAgICBzdGF0ZV9jb2xvcm1hdChTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQoKICAgICAgICBpZihjb250ZXh0LT5sYXN0X3dhc192c2hhZGVyICYmICFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DTElQUExBTkVFTkFCTEUpKSkgewogICAgICAgICAgICBzdGF0ZV9jbGlwcGluZyhTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgLyogV2UgY29tcGlsZSB0aGUgc2hhZGVyIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24KICAgICAgICAgKiBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBkbyBhbnkgc3dpenpsaW5nIGZvciBEM0RDT0xPUgogICAgICAgICAqIHJlZ2lzdGVycy4gSWYgdGhlIHNoYWRlciBpcyBhbHJlYWR5IGNvbXBpbGVkIHRoaXMgY2FsbCB3aWxsIGRvIG5vdGhpbmcuICovCiAgICAgICAgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfQ29tcGlsZVNoYWRlcihzdGF0ZWJsb2NrLT52ZXJ0ZXhTaGFkZXIpOwoKICAgICAgICBpZighY29udGV4dC0+bGFzdF93YXNfdnNoYWRlcikgewogICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgc3RhdGljIEJPT0wgd2FybmVkID0gRkFMU0U7CiAgICAgICAgICAgIC8qIERpc2FibGUgYWxsIGNsaXAgcGxhbmVzIHRvIGdldCBkZWZpbmVkIHJlc3VsdHMgb24gYWxsIGRyaXZlcnMuIFNlZSBjb21tZW50IGluIHRoZQogICAgICAgICAgICAgKiBzdGF0ZV9jbGlwcGluZyBzdGF0ZSBoYW5kbGVyCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBHTF9MSU1JVFMoY2xpcHBsYW5lcyk7IGkrKykgewogICAgICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUwICsgaSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX0NMSVBfUExBTkUwICsgaSkiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoIXdhcm5lZCAmJiBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ0xJUFBMQU5FRU5BQkxFXSkgewogICAgICAgICAgICAgICAgRklYTUUoIkNsaXBwaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCB2ZXJ0ZXggc2hhZGVyc1xuIik7CiAgICAgICAgICAgICAgICB3YXJuZWQgPSBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qIFZlcnRleCBhbmQgcGl4ZWwgc2hhZGVycyBhcmUgYXBwbGllZCB0b2dldGhlciBmb3Igbm93LCBzbyBsZXQgdGhlIGxhc3QgZGlydHkgc3RhdGUgZG8gdGhlCiAgICAgKiBhcHBsaWNhdGlvbgogICAgICovCiAgICBpZiAoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9QSVhFTFNIQURFUikpIHsKICAgICAgICBkZXZpY2UtPnNoYWRlcl9iYWNrZW5kLT5zaGFkZXJfc2VsZWN0KChJV2luZUQzRERldmljZSAqKWRldmljZSwgdXNlUGl4ZWxTaGFkZXJGdW5jdGlvbiwgdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24pOwoKICAgICAgICBpZiAoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9WRVJURVhTSEFERVJDT05TVEFOVCkgJiYgKHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uIHx8IHVzZVBpeGVsU2hhZGVyRnVuY3Rpb24pKSB7CiAgICAgICAgICAgIHNoYWRlcmNvbnN0YW50KFNUQVRFX1ZFUlRFWFNIQURFUkNPTlNUQU5ULCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICB9CiAgICB9CgogICAgY29udGV4dC0+bGFzdF93YXNfdnNoYWRlciA9IHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uOwoKICAgIGlmKHVwZGF0ZUZvZykgewogICAgICAgIHN0YXRlX2ZvZyhTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQp9CgpzdGF0aWMgdm9pZCB2aWV3cG9ydChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGdsRGVwdGhSYW5nZShzdGF0ZWJsb2NrLT52aWV3cG9ydC5NaW5aLCBzdGF0ZWJsb2NrLT52aWV3cG9ydC5NYXhaKTsKICAgIGNoZWNrR0xjYWxsKCJnbERlcHRoUmFuZ2UiKTsKICAgIC8qIE5vdGU6IEdMIHJlcXVpcmVzIGxvd2VyIGxlZnQsIERpcmVjdFggc3VwcGxpZXMgdXBwZXIgbGVmdC4gVGhpcyBpcyByZXZlcnNlZCB3aGVuIHVzaW5nIG9mZnNjcmVlbiByZW5kZXJpbmcKICAgICAqLwogICAgaWYoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cmVuZGVyX29mZnNjcmVlbikgewogICAgICAgIGdsVmlld3BvcnQoc3RhdGVibG9jay0+dmlld3BvcnQuWCwKICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnZpZXdwb3J0LlksCiAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT52aWV3cG9ydC5XaWR0aCwgc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xWaWV3cG9ydChzdGF0ZWJsb2NrLT52aWV3cG9ydC5YLAogICAgICAgICAgICAgICAgICAgKCgoSVdpbmVEM0RTdXJmYWNlSW1wbCAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl90YXJnZXRzWzBdKS0+Y3VycmVudERlc2MuSGVpZ2h0IC0gKHN0YXRlYmxvY2stPnZpZXdwb3J0LlkgKyBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQpKSwKICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnZpZXdwb3J0LldpZHRoLCBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQpOwogICAgfQoKICAgIGNoZWNrR0xjYWxsKCJnbFZpZXdwb3J0Iik7CgogICAgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cG9zRml4dXBbMl0gPSAwLjkgLyBzdGF0ZWJsb2NrLT52aWV3cG9ydC5XaWR0aDsKICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBvc0ZpeHVwWzNdID0gLTAuOSAvIHN0YXRlYmxvY2stPnZpZXdwb3J0LkhlaWdodDsKICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19QUk9KRUNUSU9OKSkpIHsKICAgICAgICB0cmFuc2Zvcm1fcHJvamVjdGlvbihTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1BST0pFQ1RJT04pLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgIH0KCn0KCnN0YXRpYyB2b2lkIGxpZ2h0KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgVUlOVCBJbmRleCA9IHN0YXRlIC0gU1RBVEVfQUNUSVZFTElHSFQoMCk7CiAgICBQTElHSFRJTkZPRUwgKmxpZ2h0SW5mbyA9IHN0YXRlYmxvY2stPmFjdGl2ZUxpZ2h0c1tJbmRleF07CgogICAgaWYoIWxpZ2h0SW5mbykgewogICAgICAgIGdsRGlzYWJsZShHTF9MSUdIVDAgKyBJbmRleCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9MSUdIVDAgKyBJbmRleCkiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZmxvYXQgcXVhZF9hdHQ7CiAgICAgICAgZmxvYXQgY29sUkdCQVtdID0gezAuMCwgMC4wLCAwLjAsIDAuMH07CgogICAgICAgIC8qIExpZ2h0IHNldHRpbmdzIGFyZSBhZmZlY3RlZCBieSB0aGUgbW9kZWwgdmlldyBpbiBPcGVuR0wsIHRoZSBWaWV3IHRyYW5zZm9ybSBpbiBkaXJlY3QzZCovCiAgICAgICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgZ2xMb2FkTWF0cml4ZigoZmxvYXQgKikmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfVklFV10udS5tWzBdWzBdKTsKCiAgICAgICAgLyogRGlmZnVzZTogKi8KICAgICAgICBjb2xSR0JBWzBdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkRpZmZ1c2UucjsKICAgICAgICBjb2xSR0JBWzFdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkRpZmZ1c2UuZzsKICAgICAgICBjb2xSR0JBWzJdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkRpZmZ1c2UuYjsKICAgICAgICBjb2xSR0JBWzNdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkRpZmZ1c2UuYTsKICAgICAgICBnbExpZ2h0ZnYoR0xfTElHSFQwICsgSW5kZXgsIEdMX0RJRkZVU0UsIGNvbFJHQkEpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYiKTsKCiAgICAgICAgLyogU3BlY3VsYXIgKi8KICAgICAgICBjb2xSR0JBWzBdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlNwZWN1bGFyLnI7CiAgICAgICAgY29sUkdCQVsxXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5TcGVjdWxhci5nOwogICAgICAgIGNvbFJHQkFbMl0gPSBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuU3BlY3VsYXIuYjsKICAgICAgICBjb2xSR0JBWzNdID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlNwZWN1bGFyLmE7CiAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUEVDVUxBUiwgY29sUkdCQSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmdiIpOwoKICAgICAgICAvKiBBbWJpZW50ICovCiAgICAgICAgY29sUkdCQVswXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BbWJpZW50LnI7CiAgICAgICAgY29sUkdCQVsxXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BbWJpZW50Lmc7CiAgICAgICAgY29sUkdCQVsyXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BbWJpZW50LmI7CiAgICAgICAgY29sUkdCQVszXSA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BbWJpZW50LmE7CiAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9BTUJJRU5ULCBjb2xSR0JBKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2Iik7CgogICAgICAgIGlmICgobGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlJhbmdlICpsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuUmFuZ2UpID49IEZMVF9NSU4pIHsKICAgICAgICAgICAgcXVhZF9hdHQgPSAxLjQvKGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5SYW5nZSAqbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLlJhbmdlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxdWFkX2F0dCA9IDA7IC8qICAwIG9yICBNQVg/ICAoMCBzZWVtcyB0byBiZSBvaykgKi8KICAgICAgICB9CgogICAgICAgIC8qIERvIG5vdCBhc3NpZ24gYXR0ZW51YXRpb24gdmFsdWVzIGZvciBsaWdodHMgdGhhdCBkbyBub3QgdXNlIHRoZW0uIEQzRCBhcHBzIGFyZSBmcmVlIHRvIHBhc3MgYW55IGp1bmssCiAgICAgICAgICogYnV0IGdsIGRyaXZlcnMgdXNlIHRoZW0gYW5kIG1heSBjcmFzaCBkdWUgdG8gYmFkIEF0dGVudWF0aW9uIHZhbHVlcy4gTmVlZCBmb3IgU3BlZWQgbW9zdCB3YW50ZWQgc2V0cwogICAgICAgICAqIEF0dGVudWF0aW9uMCB0byBOYU4gYW5kIGNyYXNoZXMgaW4gdGhlIGdsIGxpYgogICAgICAgICAqLwoKICAgICAgICBzd2l0Y2ggKGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5UeXBlKSB7CiAgICAgICAgICAgIGNhc2UgV0lORUQzRExJR0hUX1BPSU5UOgogICAgICAgICAgICAgICAgLyogUG9zaXRpb24gKi8KICAgICAgICAgICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBJbmRleCwgR0xfUE9TSVRJT04sICZsaWdodEluZm8tPmxpZ2h0UG9zblswXSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGZ2Iik7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfU1BPVF9DVVRPRkYsIGxpZ2h0SW5mby0+Y3V0b2ZmKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgLyogQXR0ZW51YXRpb24gLSBBcmUgdGhlc2UgcmlnaHQ/IGd1ZXNzaW5nLi4uICovCiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfQ09OU1RBTlRfQVRURU5VQVRJT04sICBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQXR0ZW51YXRpb24wKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX0xJTkVBUl9BVFRFTlVBVElPTiwgICAgbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkF0dGVudWF0aW9uMSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGlmIChxdWFkX2F0dCA8IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjIpIHF1YWRfYXR0ID0gbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkF0dGVudWF0aW9uMjsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9RVUFEUkFUSUNfQVRURU5VQVRJT04sIHF1YWRfYXR0KTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgLyogRklYTUU6IFJhbmdlICovCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgV0lORUQzRExJR0hUX1NQT1Q6CiAgICAgICAgICAgICAgICAvKiBQb3NpdGlvbiAqLwogICAgICAgICAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9QT1NJVElPTiwgJmxpZ2h0SW5mby0+bGlnaHRQb3NuWzBdKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYiKTsKICAgICAgICAgICAgICAgIC8qIERpcmVjdGlvbiAqLwogICAgICAgICAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUE9UX0RJUkVDVElPTiwgJmxpZ2h0SW5mby0+bGlnaHREaXJuWzBdKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUE9UX0VYUE9ORU5ULCBsaWdodEluZm8tPmV4cG9uZW50KTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX1NQT1RfQ1VUT0ZGLCBsaWdodEluZm8tPmN1dG9mZik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIC8qIEF0dGVudWF0aW9uIC0gQXJlIHRoZXNlIHJpZ2h0PyBndWVzc2luZy4uLiAqLwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX0NPTlNUQU5UX0FUVEVOVUFUSU9OLCAgbGlnaHRJbmZvLT5PcmlnaW5hbFBhcm1zLkF0dGVudWF0aW9uMCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9MSU5FQVJfQVRURU5VQVRJT04sICAgIGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjEpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmIik7CiAgICAgICAgICAgICAgICBpZiAocXVhZF9hdHQgPCBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuQXR0ZW51YXRpb24yKSBxdWFkX2F0dCA9IGxpZ2h0SW5mby0+T3JpZ2luYWxQYXJtcy5BdHRlbnVhdGlvbjI7CiAgICAgICAgICAgICAgICBnbExpZ2h0ZihHTF9MSUdIVDAgKyBJbmRleCwgR0xfUVVBRFJBVElDX0FUVEVOVUFUSU9OLCBxdWFkX2F0dCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBSYW5nZSAqLwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFdJTkVEM0RMSUdIVF9ESVJFQ1RJT05BTDoKICAgICAgICAgICAgICAgIC8qIERpcmVjdGlvbiAqLwogICAgICAgICAgICAgICAgZ2xMaWdodGZ2KEdMX0xJR0hUMCArIEluZGV4LCBHTF9QT1NJVElPTiwgJmxpZ2h0SW5mby0+bGlnaHRQb3NuWzBdKTsgLyogTm90ZSBnbCB1c2VzIHcgcG9zaXRpb24gb2YgMCBmb3IgZGlyZWN0aW9uISAqLwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTGlnaHRmdiIpOwogICAgICAgICAgICAgICAgZ2xMaWdodGYoR0xfTElHSFQwICsgSW5kZXgsIEdMX1NQT1RfQ1VUT0ZGLCBsaWdodEluZm8tPmN1dG9mZik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMaWdodGYiKTsKICAgICAgICAgICAgICAgIGdsTGlnaHRmKEdMX0xJR0hUMCArIEluZGV4LCBHTF9TUE9UX0VYUE9ORU5ULCAwLjBmKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgRklYTUUoIlVucmVjb2duaXplZCBsaWdodCB0eXBlICVkXG4iLCBsaWdodEluZm8tPk9yaWdpbmFsUGFybXMuVHlwZSk7CiAgICAgICAgfQoKICAgICAgICAvKiBSZXN0b3JlIHRoZSBtb2RlbHZpZXcgbWF0cml4ICovCiAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgZ2xFbmFibGUoR0xfTElHSFQwICsgSW5kZXgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9MSUdIVDAgKyBJbmRleCkiKTsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN0YXRpYyB2b2lkIHNjaXNzb3JyZWN0KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgSVdpbmVEM0RTd2FwQ2hhaW5JbXBsICpzd2FwY2hhaW4gPSAoSVdpbmVEM0RTd2FwQ2hhaW5JbXBsICopIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnN3YXBjaGFpbnNbMF07CiAgICBSRUNUICpwUmVjdCA9ICZzdGF0ZWJsb2NrLT5zY2lzc29yUmVjdDsKICAgIFJFQ1Qgd2luZG93UmVjdDsKICAgIFVJTlQgd2luSGVpZ2h0OwoKICAgIEdldENsaWVudFJlY3Qoc3dhcGNoYWluLT53aW5faGFuZGxlLCAmd2luZG93UmVjdCk7CiAgICAvKiBXYXJuaW5nOiBnbFNjaXNzb3IgdXNlcyB3aW5kb3cgY29vcmRpbmF0ZXMsIG5vdCB2aWV3cG9ydCBjb29yZGluYXRlcywgc28gb3VyIHZpZXdwb3J0IGNvcnJlY3Rpb24gZG9lcyBub3QgYXBwbHkKICAgICAqIFdhcm5pbmcyOiBFdmVuIGluIHdpbmRvd2VkIG1vZGUgdGhlIGNvb3JkcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHdpbmRvdywgbm90IHRoZSBzY3JlZW4KICAgICAqLwogICAgd2luSGVpZ2h0ID0gd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcDsKICAgIFRSQUNFKCIoJXApIFNldHRpbmcgbmV3IFNjaXNzb3IgUmVjdCB0byAlZDolZC0lZDolZFxuIiwgc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgcFJlY3QtPmxlZnQsIHBSZWN0LT5ib3R0b20gLSB3aW5IZWlnaHQsCiAgICAgICAgICBwUmVjdC0+cmlnaHQgLSBwUmVjdC0+bGVmdCwgcFJlY3QtPmJvdHRvbSAtIHBSZWN0LT50b3ApOwogICAgZ2xTY2lzc29yKHBSZWN0LT5sZWZ0LCB3aW5IZWlnaHQgLSBwUmVjdC0+Ym90dG9tLCBwUmVjdC0+cmlnaHQgLSBwUmVjdC0+bGVmdCwgcFJlY3QtPmJvdHRvbSAtIHBSZWN0LT50b3ApOwogICAgY2hlY2tHTGNhbGwoImdsU2Npc3NvciIpOwp9CgpzdGF0aWMgdm9pZCBpbmRleGJ1ZmZlcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CVUZGRVJfT0JKRUNUKSkgewogICAgICAgIGlmKHN0YXRlYmxvY2stPnN0cmVhbUlzVVAgfHwgc3RhdGVibG9jay0+cEluZGV4RGF0YSA9PSBOVUxMICkgewogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQmluZEJ1ZmZlckFSQihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9BUkIsIDApKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBJV2luZUQzREluZGV4QnVmZmVySW1wbCAqaWIgPSAoSVdpbmVEM0RJbmRleEJ1ZmZlckltcGwgKikgc3RhdGVibG9jay0+cEluZGV4RGF0YTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQVJCLCBpYi0+dmJvKSk7CiAgICAgICAgfQogICAgfQp9Cgpjb25zdCBzdHJ1Y3QgU3RhdGVFbnRyeSBTdGF0ZVRhYmxlW10gPQp7CiAgICAgIC8qIFN0YXRlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aXZlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseSBmdW5jdGlvbiAqLwogICAgeyAvKiAwLCAgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxLCAgV0lORUQzRFJTX1RFWFRVUkVIQU5ETEUgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAyLCAgV0lORUQzRFJTX0FOVElBTElBUyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FOVElBTElBUyksICAgICAgICAgICAgICAgICAgc3RhdGVfYW50aWFsaWFzICAgICB9LAogICAgeyAvKiAzLCAgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0LCAgV0lORUQzRFJTX1RFWFRVUkVQRVJTUEVDVElWRSAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RFWFRVUkVQRVJTUEVDVElWRSksICAgICAgICAgc3RhdGVfcGVyc3BlY3RpdmUgICB9LAogICAgeyAvKiA1LCAgV0lORUQzRFJTX1dSQVBVICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVBVKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcHUgICAgICAgICB9LAogICAgeyAvKiA2LCAgV0lORUQzRFJTX1dSQVBWICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVBWKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcHYgICAgICAgICB9LAogICAgeyAvKiA3LCAgV0lORUQzRFJTX1pFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pFTkFCTEUpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfemVuYWJsZSAgICAgICB9LAogICAgeyAvKiA4LCAgV0lORUQzRFJTX0ZJTExNT0RFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZJTExNT0RFKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfZmlsbG1vZGUgICAgICB9LAogICAgeyAvKiA5LCAgV0lORUQzRFJTX1NIQURFTU9ERSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NIQURFTU9ERSksICAgICAgICAgICAgICAgICAgc3RhdGVfc2hhZGVtb2RlICAgICB9LAogICAgeyAvKiAxMCwgV0lORUQzRFJTX0xJTkVQQVRURVJOICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xJTkVQQVRURVJOKSwgICAgICAgICAgICAgICAgc3RhdGVfbGluZXBhdHRlcm4gICB9LAogICAgeyAvKiAxMSwgV0lORUQzRFJTX01PTk9FTkFCTEUgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01PTk9FTkFCTEUpLCAgICAgICAgICAgICAgICAgc3RhdGVfbW9ub2VuYWJsZSAgICB9LAogICAgeyAvKiAxMiwgV0lORUQzRFJTX1JPUDIgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1JPUDIpLCAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfcm9wMiAgICAgICAgICB9LAogICAgeyAvKiAxMywgV0lORUQzRFJTX1BMQU5FTUFTSyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BMQU5FTUFTSyksICAgICAgICAgICAgICAgICAgc3RhdGVfcGxhbmVtYXNrICAgICB9LAogICAgeyAvKiAxNCwgV0lORUQzRFJTX1pXUklURUVOQUJMRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pXUklURUVOQUJMRSksICAgICAgICAgICAgICAgc3RhdGVfendyaXRlbmFibGUgICB9LAogICAgeyAvKiAxNSwgV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAxNiwgV0lORUQzRFJTX0xBU1RQSVhFTCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xBU1RQSVhFTCksICAgICAgICAgICAgICAgICAgc3RhdGVfbGFzdHBpeGVsICAgICB9LAogICAgeyAvKiAxNywgV0lORUQzRFJTX1RFWFRVUkVNQUcgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxOCwgV0lORUQzRFJTX1RFWFRVUkVNSU4gICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxOSwgV0lORUQzRFJTX1NSQ0JMRU5EICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyMCwgV0lORUQzRFJTX0RFU1RCTEVORCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyMSwgV0lORUQzRFJTX1RFWFRVUkVNQVBCTEVORCAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAyMiwgV0lORUQzRFJTX0NVTExNT0RFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NVTExNT0RFKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY3VsbG1vZGUgICAgICB9LAogICAgeyAvKiAyMywgV0lORUQzRFJTX1pGVU5DICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pGVU5DKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfemZ1bmMgICAgICAgICB9LAogICAgeyAvKiAyNCwgV0lORUQzRFJTX0FMUEhBUkVGICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAyNSwgV0lORUQzRFJTX0FMUEhBRlVOQyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAyNiwgV0lORUQzRFJTX0RJVEhFUkVOQUJMRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0RJVEhFUkVOQUJMRSksICAgICAgICAgICAgICAgc3RhdGVfZGl0aGVyZW5hYmxlICB9LAogICAgeyAvKiAyNywgV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyOCwgV0lORUQzRFJTX0ZPR0VOQUJMRSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAyOSwgV0lORUQzRFJTX1NQRUNVTEFSRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NQRUNVTEFSRU5BQkxFKSwgICAgICAgICAgICAgc3RhdGVfc3BlY3VsYXJlbmFibGV9LAogICAgeyAvKiAzMCwgV0lORUQzRFJTX1pWSVNJQkxFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtc2RuICovLCAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKiAzMSwgV0lORUQzRFJTX1NVQlBJWEVMICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NVQlBJWEVMKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfc3VicGl4ZWwgICAgICB9LAogICAgeyAvKiAzMiwgV0lORUQzRFJTX1NVQlBJWEVMWCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NVQlBJWEVMWCksICAgICAgICAgICAgICAgICAgc3RhdGVfc3VicGl4ZWx4ICAgICB9LAogICAgeyAvKiAzMywgV0lORUQzRFJTX1NUSVBQTEVEQUxQSEEgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NUSVBQTEVEQUxQSEEpLCAgICAgICAgICAgICAgc3RhdGVfc3RpcHBsZWRhbHBoYSB9LAogICAgeyAvKiAzNCwgV0lORUQzRFJTX0ZPR0NPTE9SICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0NPTE9SKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nY29sb3IgICAgICB9LAogICAgeyAvKiAzNSwgV0lORUQzRFJTX0ZPR1RBQkxFTU9ERSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzNiwgV0lORUQzRFJTX0ZPR1NUQVJUICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzNywgV0lORUQzRFJTX0ZPR0VORCAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzOCwgV0lORUQzRFJTX0ZPR0RFTlNJVFkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0RFTlNJVFkpLCAgICAgICAgICAgICAgICAgc3RhdGVfZm9nZGVuc2l0eSAgICB9LAogICAgeyAvKiAzOSwgV0lORUQzRFJTX1NUSVBQTEVFTkFCTEUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NUSVBQTEVFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RpcHBsZWVuYWJsZSB9LAogICAgeyAvKiA0MCwgV0lORUQzRFJTX0VER0VBTlRJQUxJQVMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiA0MSwgV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiA0MiwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0MywgV0lORUQzRFJTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0JPUkRFUkNPTE9SKSwgICAgICAgICAgICAgICAgc3RhdGVfYm9yZGVyY29sb3IgICB9LAogICAgeyAvKiA0NCwgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTVSAgICAgICAgICAgICAgKi8gICAgICAwLCAvKiBIYW5kbGVkIGluIGRkcmF3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0NSwgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTViAgICAgICAgICAgICAgKi8gICAgICAwLCAvKiBIYW5kbGVkIGluIGRkcmF3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0NiwgV0lORUQzRFJTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01JUE1BUExPREJJQVMpLCAgICAgICAgICAgICAgc3RhdGVfbWlwbWFwbG9kYmlhcyB9LAogICAgeyAvKiA0NywgV0lORUQzRFJTX1pCSUFTICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pCSUFTKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfemJpYXMgICAgICAgICB9LAogICAgeyAvKiA0OCwgV0lORUQzRFJTX1JBTkdFRk9HRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKiA0OSwgV0lORUQzRFJTX0FOSVNPVFJPUFkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FOSVNPVFJPUFkpLCAgICAgICAgICAgICAgICAgc3RhdGVfYW5pc290cm9weSAgICB9LAogICAgeyAvKiA1MCwgV0lORUQzRFJTX0ZMVVNIQkFUQ0ggICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZMVVNIQkFUQ0gpLCAgICAgICAgICAgICAgICAgc3RhdGVfZmx1c2hiYXRjaCAgICB9LAogICAgeyAvKiA1MSwgV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UKSwgc3RhdGVfdHJhbnNsdWNlbnRzaSB9LAogICAgeyAvKiA1MiwgV0lORUQzRFJTX1NURU5DSUxFTkFCTEUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1MywgV0lORUQzRFJTX1NURU5DSUxGQUlMICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NCwgV0lORUQzRFJTX1NURU5DSUxaRkFJTCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NSwgV0lORUQzRFJTX1NURU5DSUxQQVNTICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NiwgV0lORUQzRFJTX1NURU5DSUxGVU5DICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NywgV0lORUQzRFJTX1NURU5DSUxSRUYgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1OCwgV0lORUQzRFJTX1NURU5DSUxNQVNLICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1OSwgV0lORUQzRFJTX1NURU5DSUxXUklURU1BU0sgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxXUklURU1BU0spLCAgICAgICAgICAgc3RhdGVfc3RlbmNpbHdyaXRlICB9LAogICAgeyAvKiA2MCwgV0lORUQzRFJTX1RFWFRVUkVGQUNUT1IgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RFWFRVUkVGQUNUT1IpLCAgICAgICAgICAgICAgc3RhdGVfdGV4ZmFjdG9yICAgICB9LAogICAgeyAvKiA2MSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2MiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2MywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgaGUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMzAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMzEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5OCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwOCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwOSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExOCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExOSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgLyogQmlnIGhvbGUgZW5kcyAqLwogICAgeyAvKjEyOCwgV0lORUQzRFJTX1dSQVAwICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEyOSwgV0lORUQzRFJTX1dSQVAxICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMCwgV0lORUQzRFJTX1dSQVAyICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMSwgV0lORUQzRFJTX1dSQVAzICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMiwgV0lORUQzRFJTX1dSQVA0ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMywgV0lORUQzRFJTX1dSQVA1ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNCwgV0lORUQzRFJTX1dSQVA2ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNSwgV0lORUQzRFJTX1dSQVA3ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNiwgV0lORUQzRFJTX0NMSVBQSU5HICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NMSVBQSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY2xpcHBpbmcgICAgICB9LAogICAgeyAvKjEzNywgV0lORUQzRFJTX0xJR0hUSU5HICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xJR0hUSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfbGlnaHRpbmcgICAgICB9LAogICAgeyAvKjEzOCwgV0lORUQzRFJTX0VYVEVOVFMgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0VYVEVOVFMpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfZXh0ZW50cyAgICAgICB9LAogICAgeyAvKjEzOSwgV0lORUQzRFJTX0FNQklFTlQgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FNQklFTlQpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfYW1iaWVudCAgICAgICB9LAogICAgeyAvKjE0MCwgV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKjE0MSwgV0lORUQzRFJTX0NPTE9SVkVSVEVYICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0MiwgV0lORUQzRFJTX0xPQ0FMVklFV0VSICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xPQ0FMVklFV0VSKSwgICAgICAgICAgICAgICAgc3RhdGVfbG9jYWx2aWV3ZXIgICB9LAogICAgeyAvKjE0MywgV0lORUQzRFJTX05PUk1BTElaRU5PUk1BTFMgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX05PUk1BTElaRU5PUk1BTFMpLCAgICAgICAgICAgc3RhdGVfbm9ybWFsaXplICAgICB9LAogICAgeyAvKjE0NCwgV0lORUQzRFJTX0NPTE9SS0VZQkxFTkRFTkFCTEUgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SS0VZQkxFTkRFTkFCTEUpLCAgICAgICAgc3RhdGVfY2tleWJsZW5kICAgICB9LAogICAgeyAvKjE0NSwgV0lORUQzRFJTX0RJRkZVU0VNQVRFUklBTFNPVVJDRSAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0NiwgV0lORUQzRFJTX1NQRUNVTEFSTUFURVJJQUxTT1VSQ0UgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0NywgV0lORUQzRFJTX0FNQklFTlRNQVRFUklBTFNPVVJDRSAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0OCwgV0lORUQzRFJTX0VNSVNTSVZFTUFURVJJQUxTT1VSQ0UgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE1MCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE1MSwgV0lORUQzRFJTX1ZFUlRFWEJMRU5EICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1ZFUlRFWEJMRU5EKSwgICAgICAgICAgICAgICAgc3RhdGVfdmVydGV4YmxlbmQgICB9LAogICAgeyAvKjE1MiwgV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NMSVBQSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY2xpcHBpbmcgICAgICB9LAogICAgeyAvKjE1MywgV0lORUQzRFJTX1NPRlRXQVJFVkVSVEVYUFJPQ0VTU0lORyAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE1NCwgV0lORUQzRFJTX1BPSU5UU0laRSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRSksICAgICAgICAgICAgICAgICAgc3RhdGVfcHNpemUgICAgICAgICB9LAogICAgeyAvKjE1NSwgV0lORUQzRFJTX1BPSU5UU0laRV9NSU4gICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRV9NSU4pLCAgICAgICAgICAgICAgc3RhdGVfcHNpemVtaW4gICAgICB9LAogICAgeyAvKjE1NiwgV0lORUQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFKSwgICAgICAgICAgc3RhdGVfcG9pbnRzcHJpdGUgICB9LAogICAgeyAvKjE1NywgV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE1OCwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE1OSwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE2MCwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE2MSwgV0lORUQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTKSwgICAgICAgc3RhdGVfbXVsdGlzYW1wbGVhYSB9LAogICAgeyAvKjE2MiwgV0lORUQzRFJTX01VTFRJU0FNUExFTUFTSyAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01VTFRJU0FNUExFTUFTSyksICAgICAgICAgICAgc3RhdGVfbXVsdGlzYW1wbWFzayB9LAogICAgeyAvKjE2MywgV0lORUQzRFJTX1BBVENIRURHRVNUWUxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BBVENIRURHRVNUWUxFKSwgICAgICAgICAgICAgc3RhdGVfcGF0Y2hlZGdlc3R5bGV9LAogICAgeyAvKjE2NCwgV0lORUQzRFJTX1BBVENIU0VHTUVOVFMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BBVENIU0VHTUVOVFMpLCAgICAgICAgICAgICAgc3RhdGVfcGF0Y2hzZWdtZW50cyB9LAogICAgeyAvKjE2NSwgV0lORUQzRFJTX0RFQlVHTU9OSVRPUlRPS0VOICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0RFQlVHTU9OSVRPUlRPS0VOKSwgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE2NiwgV0lORUQzRFJTX1BPSU5UU0laRV9NQVggICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRV9NQVgpLCAgICAgICAgICAgICAgc3RhdGVfcHNpemVtYXggICAgICB9LAogICAgeyAvKjE2NywgV0lORUQzRFJTX0lOREVYRURWRVJURVhCTEVOREVOQUJMRSAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE2OCwgV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfY29sb3J3cml0ZSAgICB9LAogICAgeyAvKjE2OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE3MCwgV0lORUQzRFJTX1RXRUVORkFDVE9SICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE3MSwgV0lORUQzRFJTX0JMRU5ET1AgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0JMRU5ET1ApLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfYmxlbmRvcCAgICAgICB9LAogICAgeyAvKjE3MiwgV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFKSwgICAgICAgICAgICAgc3RhdGVfcG9zaXRpb25kZWdyZWV9LAogICAgeyAvKjE3MywgV0lORUQzRFJTX05PUk1BTERFR1JFRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX05PUk1BTERFR1JFRSksICAgICAgICAgICAgICAgc3RhdGVfbm9ybWFsZGVncmVlICB9LAogICAgICAvKjE3MiwgV0lORUQzRFJTX1BPU0lUSU9OT1JERVIgICAgICAgICAgICAgICAgKi8gICAgICAvKiBWYWx1ZSBhc3NpZ25lZCB0byAyIHN0YXRlIG5hbWVzICovCiAgICAgIC8qMTczLCBXSU5FRDNEUlNfTk9STUFMT1JERVIgICAgICAgICAgICAgICAgICAqLyAgICAgIC8qIFZhbHVlIGFzc2lnbmVkIHRvIDIgc3RhdGUgbmFtZXMgKi8KICAgIHsgLyoxNzQsIFdJTkVEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSksICAgICAgICAgIHN0YXRlX3NjaXNzb3IgICAgICAgfSwKICAgIHsgLyoxNzUsIFdJTkVEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ERVBUSEJJQVMpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2RlcHRoYmlhcyAgICAgfSwKICAgIHsgLyoxNzYsIFdJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEUgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyoxNzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzgsIFdJTkVEM0RSU19NSU5URVNTRUxMQVRJT05MRVZFTCAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxNzksIFdJTkVEM0RSU19NQVhURVNTRUxMQVRJT05MRVZFTCAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODAsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWCAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODEsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODIsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWiAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODMsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfVyAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODQsIFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODUsIFdJTkVEM0RSU19UV09TSURFRFNURU5DSUxNT0RFICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODYsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTEZBSUwgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODcsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTFpGQUlMICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODgsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTFBBU1MgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODksIFdJTkVEM0RSU19DQ1dfU1RFTkNJTEZVTkMgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxOTAsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMSAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTEsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMiAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTIsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMyAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTMsIFdJTkVEM0RSU19CTEVOREZBQ1RPUiAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19CTEVOREZBQ1RPUiksICAgICAgICAgICAgICAgIHN0YXRlX2JsZW5kZmFjdG9yICAgfSwKICAgIHsgLyoxOTQsIFdJTkVEM0RSU19TUkdCV1JJVEVFTkFCTEUgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TUkdCV1JJVEVFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX3NyZ2J3cml0ZSAgICAgfSwKICAgIHsgLyoxOTUsIFdJTkVEM0RSU19ERVBUSEJJQVMgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ERVBUSEJJQVMpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2RlcHRoYmlhcyAgICAgfSwKICAgIHsgLyoxOTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTgsIFdJTkVEM0RSU19XUkFQOCAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxOTksIFdJTkVEM0RSU19XUkFQOSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDAsIFdJTkVEM0RSU19XUkFQMTAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDEsIFdJTkVEM0RSU19XUkFQMTEgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDIsIFdJTkVEM0RSU19XUkFQMTIgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDMsIFdJTkVEM0RSU19XUkFQMTMgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDQsIFdJTkVEM0RSU19XUkFQMTQgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDUsIFdJTkVEM0RSU19XUkFQMTUgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDYsIFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDcsIFdJTkVEM0RSU19TUkNCTEVOREFMUEhBICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDgsIFdJTkVEM0RSU19ERVNUQkxFTkRBTFBIQSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDksIFdJTkVEM0RSU19CTEVORE9QQUxQSEEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIC8qIFRleHR1cmUgc3RhZ2Ugc3RhdGVzICovCiAgICB7IC8qMCwgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qMCwgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qMCwgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qMCwgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTApLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qMCwgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qMCwgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjEsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjEsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjEsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjEsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUxKSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjEsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjEsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAoKICAgIHsgLyoyLCAwMSwgV0lORUQzRFRTU19DT0xPUk9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwMiwgV0lORUQzRFRTU19DT0xPUkFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwMywgV0lORUQzRFRTU19DT0xPUkFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwNCwgV0lORUQzRFRTU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwNSwgV0lORUQzRFRTU19BTFBIQUFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwNiwgV0lORUQzRFRTU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoyLCAwNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoyLCAwOCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoyLCAwOSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoyLCAxMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyoyLCAxMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCksICAgIHRleF9jb29yZGluZGV4ICAgICAgfSwKICAgIHsgLyoyLCAxMiwgV0lORUQzRFRTU19BRERSRVNTICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxMywgV0lORUQzRFRTU19BRERSRVNTVSAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxNCwgV0lORUQzRFRTU19BRERSRVNTViAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxNSwgV0lORUQzRFRTU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxNiwgV0lORUQzRFRTU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxNywgV0lORUQzRFRTU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxOCwgV0lORUQzRFRTU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAxOSwgV0lORUQzRFRTU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAyMCwgV0lORUQzRFRTU19NQVhNSVBMRVZFTCAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAyMSwgV0lORUQzRFRTU19NQVhBTklTT1RST1BZICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAyMiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSksICAgIHRleF9idW1wZW52bHNjYWxlICAgfSwKICAgIHsgLyoyLCAyMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQpLCAgIHRleF9idW1wZW52bG9mZnNldCAgfSwKICAgIHsgLyoyLCAyNCwgV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMiksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyoyLCAyNSwgV0lORUQzRFRTU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAyNiwgV0lORUQzRFRTU19DT0xPUkFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyoyLCAyNywgV0lORUQzRFRTU19BTFBIQUFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyoyLCAyOCwgV0lORUQzRFRTU19SRVNVTFRBUkcgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDIsIFdJTkVEM0RUU1NfUkVTVUxUQVJHKSwgICAgICAgIHRleF9yZXN1bHRhcmcgICAgICAgfSwKICAgIHsgLyoyLCAyOSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAzMCwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAzMSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyLCAzMiwgV0lORUQzRFRTU19DT05TVEFOVCAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBBcyBsb25nIGFzIHdlIGRvbid0IHN1cHBvcnQgRDNEVEFfQ09OU1RBTlQgKi8sIHN0YXRlX25vZ2wgICAgICAgICAgfSwKCiAgICB7IC8qMywgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMywgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMywgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMywgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMywgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qMywgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qMywgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qMywgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTMpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qMywgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMywgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgzLCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qMywgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMywgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjQsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjQsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjQsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjQsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjQsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjQsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjQsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjQsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjQsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjQsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjQsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjQsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjQsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjQsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkU0KSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjQsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjQsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjQsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNCwgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjQsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjQsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAoKICAgIHsgLyo1LCAwMSwgV0lORUQzRFRTU19DT0xPUk9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwMiwgV0lORUQzRFRTU19DT0xPUkFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwMywgV0lORUQzRFRTU19DT0xPUkFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwNCwgV0lORUQzRFRTU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwNSwgV0lORUQzRFRTU19BTFBIQUFSRzEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwNiwgV0lORUQzRFRTU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo1LCAwNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo1LCAwOCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo1LCAwOSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo1LCAxMCwgV0lORUQzRFRTU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwKSwgICAgIHRleF9idW1wZW52bWF0ICAgICAgfSwKICAgIHsgLyo1LCAxMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCksICAgIHRleF9jb29yZGluZGV4ICAgICAgfSwKICAgIHsgLyo1LCAxMiwgV0lORUQzRFRTU19BRERSRVNTICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxMywgV0lORUQzRFRTU19BRERSRVNTVSAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxNCwgV0lORUQzRFRTU19BRERSRVNTViAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxNSwgV0lORUQzRFRTU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxNiwgV0lORUQzRFRTU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxNywgV0lORUQzRFRTU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxOCwgV0lORUQzRFRTU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAxOSwgV0lORUQzRFRTU19NSVBNQVBMT0RCSUFTICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAyMCwgV0lORUQzRFRTU19NQVhNSVBMRVZFTCAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAyMSwgV0lORUQzRFRTU19NQVhBTklTT1RST1BZICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAyMiwgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSksICAgIHRleF9idW1wZW52bHNjYWxlICAgfSwKICAgIHsgLyo1LCAyMywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQpLCAgIHRleF9idW1wZW52bG9mZnNldCAgfSwKICAgIHsgLyo1LCAyNCwgV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNSksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyo1LCAyNSwgV0lORUQzRFRTU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAyNiwgV0lORUQzRFRTU19DT0xPUkFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQ09MT1JPUCksICAgICAgICAgIHRleF9jb2xvcm9wICAgICAgICAgfSwKICAgIHsgLyo1LCAyNywgV0lORUQzRFRTU19BTFBIQUFSRzAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfQUxQSEFPUCksICAgICAgICAgIHRleF9hbHBoYW9wICAgICAgICAgfSwKICAgIHsgLyo1LCAyOCwgV0lORUQzRFRTU19SRVNVTFRBUkcgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVEVYVFVSRVNUQUdFKDUsIFdJTkVEM0RUU1NfUkVTVUxUQVJHKSwgICAgICAgIHRleF9yZXN1bHRhcmcgICAgICAgfSwKICAgIHsgLyo1LCAyOSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAzMCwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAzMSwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiAtPiBzYW1wbGVyIHN0YXRlIGluIGRkcmF3IC8gZDNkOCAqLywgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyo1LCAzMiwgV0lORUQzRFRTU19DT05TVEFOVCAgICAgICAgICAgICAgICAgICovICAgICAgMCAvKiBBcyBsb25nIGFzIHdlIGRvbid0IHN1cHBvcnQgRDNEVEFfQ09OU1RBTlQgKi8sIHN0YXRlX25vZ2wgICAgICAgICAgfSwKCiAgICB7IC8qNiwgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNiwgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNiwgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNiwgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qNiwgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qNiwgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qNiwgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qNiwgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTYpLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qNiwgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qNiwgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSg2LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qNiwgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qNiwgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjcsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjcsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjcsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjcsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjcsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjcsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjcsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjcsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjcsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjcsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjcsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjcsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDEzLCBXSU5FRDNEVFNTX0FERFJFU1NVICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE0LCBXSU5FRDNEVFNTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE1LCBXSU5FRDNEVFNTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE2LCBXSU5FRDNEVFNTX01BR0ZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE3LCBXSU5FRDNEVFNTX01JTkZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE4LCBXSU5FRDNEVFNTX01JUEZJTFRFUiAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDE5LCBXSU5FRDNEVFNTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDIwLCBXSU5FRDNEVFNTX01BWE1JUExFVkVMICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDIxLCBXSU5FRDNEVFNTX01BWEFOSVNPVFJPUFkgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDIyLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTFNDQUxFKSwgICAgdGV4X2J1bXBlbnZsc2NhbGUgICB9LAogICAgeyAvKjcsIDIzLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCksICAgdGV4X2J1bXBlbnZsb2Zmc2V0ICB9LAogICAgeyAvKjcsIDI0LCBXSU5FRDNEVFNTX1RFWFRVUkVUUkFOU0ZPUk1GTEFHUyAgICAgKi8gICAgICBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkU3KSwgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUgICB9LAogICAgeyAvKjcsIDI1LCBXSU5FRDNEVFNTX0FERFJFU1NXICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDI2LCBXSU5FRDNEVFNTX0NPTE9SQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjcsIDI3LCBXSU5FRDNEVFNTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjcsIDI4LCBXSU5FRDNEVFNTX1JFU1VMVEFSRyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoNywgV0lORUQzRFRTU19SRVNVTFRBUkcpLCAgICAgICAgdGV4X3Jlc3VsdGFyZyAgICAgICB9LAogICAgeyAvKjcsIDI5LCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDMwLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDMxLCB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+IHNhbXBsZXIgc3RhdGUgaW4gZGRyYXcgLyBkM2Q4ICovLCAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjcsIDMyLCBXSU5FRDNEVFNTX0NPTlNUQU5UICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBEM0RUQV9DT05TVEFOVCAqLywgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgLyogU2FtcGxlciBzdGF0ZXMgKi8KICAgIHsgLyogMCwgU2FtcGxlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogMSwgU2FtcGxlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogMiwgU2FtcGxlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogMywgU2FtcGxlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigzKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogNCwgU2FtcGxlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogNSwgU2FtcGxlciA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig1KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogNiwgU2FtcGxlciA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogNywgU2FtcGxlciA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig3KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogOCwgU2FtcGxlciA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig4KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyogOSwgU2FtcGxlciA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUig5KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxMCwgU2FtcGxlciAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxMSwgU2FtcGxlciAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxMSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxMiwgU2FtcGxlciAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxMiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxMywgU2FtcGxlciAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxMyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxNCwgU2FtcGxlciAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxNCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIHsgLyoxNSwgU2FtcGxlciAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfU0FNUExFUigxNSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICAgICAgICAgfSwKICAgIC8qIFBpeGVsIHNoYWRlciAqLwogICAgeyAvKiAgLCBQaXhlbCBTaGFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9QSVhFTFNIQURFUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzaGFkZXIgICAgICAgICB9LAogICAgICAvKiBUcmFuc2Zvcm0gc3RhdGVzIGZvbGxvdyAgICAgICAgICAgICAgICAgICAgKi8KICAgIHsgLyogIDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDIsIFdJTkVEM0RUU19WSUVXICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19WSUVXKSwgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV92aWV3ICAgICAgfSwKICAgIHsgLyogIDMsIFdJTkVEM0RUU19QUk9KRUNUSU9OICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19QUk9KRUNUSU9OKSwgICAgICAgICAgICAgIHRyYW5zZm9ybV9wcm9qZWN0aW9ufSwKICAgIHsgLyogIDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogIDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMTYsIFdJTkVEM0RUU19URVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMCksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMTcsIFdJTkVEM0RUU19URVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMSksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMTgsIFdJTkVEM0RUU19URVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMiksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMTksIFdJTkVEM0RUU19URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMyksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMjAsIFdJTkVEM0RUU19URVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNCksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMjEsIFdJTkVEM0RUU19URVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNSksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMjIsIFdJTkVEM0RUU19URVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNiksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgIHsgLyogMjMsIFdJTkVEM0RUU19URVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFNyksICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlICAgfSwKICAgICAgLyogQSBodWdlIGdhcCBiZXR3ZWVuIFRFWFRVUkU3IGFuZCBXT1JMRE1BVFJJWCgwKSA6LSggQnV0IGVudHJpZXMgYXJlIG5lZWRlZCB0byBjYXRjaCB0aGVuIGlmIGEgYnJva2VuIGFwcCBzZXRzIHRoZW0gKi8KICAgIHsgLyogMjQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogMzksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogNzksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogODksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyogOTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxMzksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxODksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMTksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyMzksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDgsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNDksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTIsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTMsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTQsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoyNTUsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgICAgLyogRW5kIGh1Z2UgZ2FwICovCiAgICB7IC8qMjU2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMCkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMCkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGQgICAgIH0sCiAgICB7IC8qMjU3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMSkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMSkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjU4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMikgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMikpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjU5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMykgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMykpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjYwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNCkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNCkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjYxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNSkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNSkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjYyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNikgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNikpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjYzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNykgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNykpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOCkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOCkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOSkgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOSkpLCAgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjY5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjcwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjcxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjcyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjczLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjc5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjgwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjgxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjgyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjgzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjg5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjkwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjkxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjkyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjkzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMzkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMzkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMjk5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzAwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzAxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzAyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzAzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNDkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNDkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzA5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzEwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzExLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzEyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzEzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNTkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNTkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzE5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzIwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzIxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzIyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzIzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNjgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNjkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzI5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzMwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzMxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzMyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzMzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoNzkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoNzkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzM5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoODQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoODUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoODYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoODcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoODkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoODkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTApICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTApKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTEpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTEpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTIpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTIpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzQ5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTMpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTMpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzUwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTQpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTQpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzUxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTUpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTUpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzUyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTYpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTYpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzUzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTcpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTcpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTgpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTgpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoOTkpICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoOTkpKSwgICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTAwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTAwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTAxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTAxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTAyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTAyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTAzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTAzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzYwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzYxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzYyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzYzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTA5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTA5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTEwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTEwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTExKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTExKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTEyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTEyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzY5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTEzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTEzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzcwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzcxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzcyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzczLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTE5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTE5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTIwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTIwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTIxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTIxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTIyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTIyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzc5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTIzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTIzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzgwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzgxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzgyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzgzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTI5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTI5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTMwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTMwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTMxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTMxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTMyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTMyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzg5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTMzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTMzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzkwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzkxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzkyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzkzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTM5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTM5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzk5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDAwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDAxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDAyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDAzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTQ5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTUwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTUwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTUxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTUxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTUyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTUyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDA5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTUzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTUzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDEwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDExLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDEyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDEzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTU5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTU5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTYwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTYwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTYxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTYxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTYyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTYyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDE5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTYzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTYzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDIwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDIxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDIyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDIzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTY4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTY5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTcwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTcwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTcxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTcxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTcyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTcyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDI5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTczKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTczKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDMwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDMxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDMyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDMzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTc5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTc5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTgwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTgwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTgxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTgxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTgyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTgyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDM5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTgzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTgzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTg5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTg5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTkwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTkwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTkxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTkxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTkyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTkyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDQ5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTkzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTkzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDUwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDUxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDUyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDUzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDU0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDU1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMTk5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMTk5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qMzU2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjAwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjAwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDU3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjAxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjAxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDU4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjAyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjAyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDU5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjAzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjAzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDYwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDYxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDYyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDYzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjA5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjA5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjEwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjEwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjExKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjExKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjEyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjEyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDY5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjEzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjEzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDcwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDcxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDcyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDczLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjE5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjE5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjIwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjIwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjIxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjIxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjIyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjIyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDc5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjIzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjIzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDgwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDgxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDgyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDgzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjI5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjI5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjMwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjMwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjMxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjMxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjMyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjMyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDg5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjMzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjMzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDkwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDkxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDkyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDkzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjM5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjM5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNDk5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTAwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTAxLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTAyLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ2KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ2KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTAzLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ3KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ3KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA0LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ4KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ4KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA1LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ5KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjQ5KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA2LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjUwKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjUwKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA3LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjUxKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjUxKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA4LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjUyKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjUyKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTA5LCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjUzKSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjUzKSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTEwLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjU0KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjU0KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICB7IC8qNTExLCBXSU5FRDNEVFNfV09STERNQVRSSVgoMjU1KSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMjU1KSksICAgICAgICB0cmFuc2Zvcm1fd29ybGRleCAgIH0sCiAgICAgIC8qIFZhcmlvdXMgVmVydGV4IHN0YXRlcyBmb2xsb3cgKi8KICAgIHsgLyogICAsIFNUQVRFX1NUUkVBTVNSQyAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVkRFQ0wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleGRlY2xhcmF0aW9uICAgfSwKICAgIHsgLyogICAsIFNUQVRFX0lOREVYQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfSU5ERVhCVUZGRVIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4YnVmZmVyICAgICAgICAgfSwKICAgIHsgLyogICAsIFNUQVRFX1ZERUNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVkRFQ0wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleGRlY2xhcmF0aW9uICAgfSwKICAgIHsgLyogICAsIFNUQVRFX1ZTSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVkRFQ0wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleGRlY2xhcmF0aW9uICAgfSwKICAgIHsgLyogICAsIFNUQVRFX1ZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVklFV1BPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0ICAgICAgICAgICAgfSwKICAgIHsgLyogICAsIFNUQVRFX1ZFUlRFWFNIQURFUkNPTlNUQU5UICAgICAgICAgICAgICovICAgICAgU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQsICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlcmNvbnN0YW50ICAgICAgfSwKICAgIHsgLyogICAsIFNUQVRFX1BJWEVMU0hBREVSQ09OU1RBTlQgICAgICAgICAgICAgICovICAgICAgU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQsICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlcmNvbnN0YW50ICAgICAgfSwKICAgICAgLyogTGlnaHRzICovCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCgwKSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCgxKSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCgyKSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCgzKSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCg0KSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCg1KSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCg2KSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCiAgICB7IC8qICAgLCBTVEFURV9BQ1RJVkVMSUdIVCg3KSAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX0FDVElWRUxJR0hUKDcpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCAgICAgICAgICAgICAgIH0sCgogICAgeyAvKiBTY2lzc29yIHJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9TQ0lTU09SUkVDVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3NvcnJlY3QgICAgICAgICB9LAogICAgICAvKiBDbGlwIHBsYW5lcyAqLwogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMikgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMykgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoNCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoNSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoNSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoNikgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoNiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoNyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoOCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoOSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoOSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTApICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTMpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTQpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTUpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTYpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTcpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTcpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTgpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMTkpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMTkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjApICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjEpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjIpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjMpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjQpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjUpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjYpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjYpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjcpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjcpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjgpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMjkpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMjkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMzApICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMzApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAogICAgeyAvKiBTVEFURV9DTElQUExBTkUoMzEpICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9DTElQUExBTkUoMzEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBsYW5lICAgICAgICAgICB9LAp9Owo=