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+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0FOSVNPVFJPUFldKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfQU5JU09UUk9QWSBub3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc3RhdGVfZmx1c2hiYXRjaChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIGlmKHN0YXRlYmxvY2stPnJlbmRlclN0YXRlW1dJTkVEM0RSU19GTFVTSEJBVENIXSkgewogICAgICAgIEZJWE1FKCJSZW5kZXIgc3RhdGUgV0lORUQzRFJTX0ZMVVNIQkFUQ0ggbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX3RyYW5zbHVjZW50c2koRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfVFJBTlNMVUNFTlRTT1JUSU5ERVBFTkRFTlRdKSB7CiAgICAgICAgRklYTUUoIlJlbmRlciBzdGF0ZSBXSU5FRDNEUlNfVFJBTlNMVUNFTlRTT1JUSU5ERVBFTkRFTlQgbm90IGltcGxlbWVudGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHN0YXRlX2V4dGVudHMoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfRVhURU5UU10pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19FWFRFTlRTIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCBzdGF0ZV9ja2V5YmxlbmQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JLRVlCTEVOREVOQUJMRV0pIHsKICAgICAgICBGSVhNRSgiUmVuZGVyIHN0YXRlIFdJTkVEM0RSU19DT0xPUktFWUJMRU5ERU5BQkxFIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwogICAgfQp9CgovKiBBY3RpdmF0ZXMgdGhlIHRleHR1cmUgZGltZW5zaW9uIGFjY29yZGluZyB0byB0aGUgYm91bmQgRDNEIHRleHR1cmUuCiAqIERvZXMgbm90IGNhcmUgZm9yIHRoZSBjb2xvcm9wIG9yIGNvcnJlY3QgZ2wgdGV4dHVyZSB1bml0KHdoZW4gdXNpbmcgbnZyYykKICogUmVxdWlyZXMgdGhlIGNhbGxlciB0byBhY3RpdmF0ZSB0aGUgY29ycmVjdCB1bml0IGJlZm9yZQogKi8Kc3RhdGljIHZvaWQgYWN0aXZhdGVfZGltZW5zaW9ucyhEV09SRCBzdGFnZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgaWYoc3RhdGVibG9jay0+dGV4dHVyZXNbc3RhZ2VdKSB7CiAgICAgICAgc3dpdGNoKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3N0YWdlXSkgewogICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgICAgICBpZihHTF9TVVBQT1JUKEFSQl9URVhUVVJFX0NVQkVfTUFQKSkgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQikiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgogICAgICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9DVUJFX01BUCkpIHsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzNEKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFXzNEKSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9BUkI6CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpIik7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfM0QpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8zRCkiKTsKICAgICAgICBpZihHTF9TVVBQT1JUKEFSQl9URVhUVVJFX0NVQkVfTUFQKSkgewogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9DVUJFX01BUF9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKSIpOwogICAgICAgIH0KICAgICAgICAvKiBCaW5kaW5nIHRleHR1cmVzIGlzIGRvbmUgYnkgc2FtcGxlcnMuIEEgZHVtbXkgdGV4dHVyZSB3aWxsIGJlIGJvdW5kICovCiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9jb2xvcm9wKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3N0YWdlXTsKCiAgICBUUkFDRSgiU2V0dGluZyBjb2xvciBvcCBmb3Igc3RhZ2UgJWRcbiIsIHN0YWdlKTsKCiAgICBpZiAoc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIgJiYgc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cHNfc2VsZWN0ZWRfbW9kZSAhPSBTSEFERVJfTk9ORSAmJgogICAgICAgICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKilzdGF0ZWJsb2NrLT5waXhlbFNoYWRlciktPmJhc2VTaGFkZXIuZnVuY3Rpb24pIHsKICAgICAgICAvKiBVc2luZyBhIHBpeGVsIHNoYWRlcj8gRG9uJ3QgY2FyZSBmb3IgYW55dGhpbmcgaGVyZSwgdGhlIHNoYWRlciBhcHBseWluZyBkb2VzIGl0ICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChzdGFnZSAhPSBtYXBwZWRfc3RhZ2UpIFdBUk4oIlVzaW5nIG5vbiAxOjEgbWFwcGluZzogJWQgLT4gJWQhXG4iLCBzdGFnZSwgbWFwcGVkX3N0YWdlKTsKCiAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSB7CiAgICAgICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICAgICAgaWYgKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdICE9IFdJTkVEM0RUT1BfRElTQUJMRSAmJgogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JPUF0gIT0gMCkgewogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJBdHRlbXB0IHRvIGVuYWJsZSB1bnN1cHBvcnRlZCBzdGFnZSFcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xBY3RpdmVUZXh0dXJlQVJCIik7CiAgICAgICAgfSBlbHNlIGlmIChzdGFnZSA+IDApIHsKICAgICAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKEdMX1NVUFBPUlQoTlZfUkVHSVNURVJfQ09NQklORVJTKSkgewogICAgICAgIGlmKHN0YXRlYmxvY2stPmxvd2VzdF9kaXNhYmxlZF9zdGFnZSA+IDApIHsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfUkVHSVNURVJfQ09NQklORVJTX05WKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbENvbWJpbmVyUGFyYW1ldGVyaU5WKEdMX05VTV9HRU5FUkFMX0NPTUJJTkVSU19OViwgc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1JFR0lTVEVSX0NPTUJJTkVSU19OVik7CiAgICAgICAgfQogICAgfQogICAgaWYoc3RhZ2UgPj0gc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSB7CiAgICAgICAgVFJBQ0UoIlN0YWdlIGRpc2FibGVkXG4iKTsKICAgICAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSB7CiAgICAgICAgICAgIC8qIERpc2FibGUgZXZlcnl0aGluZyBoZXJlICovCiAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFXzJEKSIpOwogICAgICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV8zRCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGUoR0xfVEVYVFVSRV8zRCkiKTsKICAgICAgICAgICAgaWYoR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9DVUJFX01BUCkpIHsKICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0NVQkVfTUFQX0FSQik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qIEFsbCBkb25lICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qIFRoZSBzYW1wbGVyIHdpbGwgYWxzbyBhY3RpdmF0ZSB0aGUgY29ycmVjdCB0ZXh0dXJlIGRpbWVuc2lvbnMsIHNvIG5vIG5lZWQgdG8gZG8gaXQgaGVyZQogICAgICogaWYgdGhlIHNhbXBsZXIgZm9yIHRoaXMgc3RhZ2UgaXMgZGlydHkKICAgICAqLwogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9TQU1QTEVSKHN0YWdlKSkpIHsKICAgICAgICBpZiAobWFwcGVkX3N0YWdlICE9IC0xKSBhY3RpdmF0ZV9kaW1lbnNpb25zKHN0YWdlLCBzdGF0ZWJsb2NrKTsKICAgIH0KCiAgICAvKiBTZXQgdGhlIHRleHR1cmUgY29tYmluZXJzICovCiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgc2V0X3RleF9vcF9udnJjKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIEZBTFNFLCBzdGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUkFSRzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9SQVJHMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcwXSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZF9zdGFnZSk7CiAgICB9IGVsc2UgewogICAgICAgIHNldF90ZXhfb3AoKElXaW5lRDNERGV2aWNlICopc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgRkFMU0UsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcxXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcyXSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQ09MT1JBUkcwXSk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9hbHBoYW9wKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgRFdPUkQgc3RhZ2UgPSAoc3RhdGUgLSBTVEFURV9URVhUVVJFU1RBR0UoMCwgMCkpIC8gV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEU7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3N0YWdlXTsKICAgIERXT1JEIG9wLCBhcmcxLCBhcmcyLCBhcmcwOwoKICAgIFRSQUNFKCJTZXR0aW5nIGFscGhhIG9wIGZvciBzdGFnZSAlZFxuIiwgc3RhZ2UpOwogICAgLyogRG8gbm90IGNhcmUgZm9yIGVuYWJsZWQgLyBkaXNhYmxlZCBzdGFnZXMsIGp1c3QgYXNzaWduIHRoZSBzZXR0aWducy4gY29sb3JvcCBkaXNhYmxlcyAvIGVuYWJsZXMgcmVxdWlyZWQgc3R1ZmYgKi8KICAgIGlmIChtYXBwZWRfc3RhZ2UgIT0gLTEpIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBpZiAoc3RhZ2UgPj0gR0xfTElNSVRTKHRleHR1cmVzKSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19DT0xPUk9QXSAhPSBXSU5FRDNEVE9QX0RJU0FCTEUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0NPTE9ST1BdICE9IDApIHsKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiQXR0ZW1wdCB0byBlbmFibGUgdW5zdXBwb3J0ZWQgc3RhZ2UhXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhZ2UgPiAwKSB7CiAgICAgICAgICAgIC8qIFdlIGNhbid0IGRvIGFueXRoaW5nIGhlcmUgKi8KICAgICAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgb3AgPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQUxQSEFPUF07CiAgICBhcmcxID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMV07CiAgICBhcmcyID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMl07CiAgICBhcmcwID0gc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3N0YWdlXVtXSU5FRDNEVFNTX0FMUEhBQVJHMF07CgogICAgaWYoc3RhdGVibG9jay0+cmVuZGVyU3RhdGVbV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFXSAmJiBzdGFnZSA9PSAwICYmCiAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSAmJiBzdGF0ZWJsb2NrLT50ZXh0dXJlRGltZW5zaW9uc1swXSA9PSBHTF9URVhUVVJFXzJEKSB7CiAgICAgICAgSVdpbmVEM0RTdXJmYWNlSW1wbCAqc3VyZiA9IChJV2luZUQzRFN1cmZhY2VJbXBsICopICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1swXSktPnN1cmZhY2VzWzBdOwoKICAgICAgICBpZihzdXJmLT5DS2V5RmxhZ3MgJiBXSU5FRERTRF9DS1NSQ0JMVCAmJgogICAgICAgICAgIGdldEZvcm1hdERlc2NFbnRyeShzdXJmLT5yZXNvdXJjZS5mb3JtYXQpLT5hbHBoYU1hc2sgPT0gMHgwMDAwMDAwMCkgewoKICAgICAgICAgICAgLyogQ29sb3Iga2V5aW5nIG5lZWRzIHRvIHBhc3MgYWxwaGEgdmFsdWVzIGZyb20gdGhlIHRleHR1cmUgdGhyb3VnaCB0byBoYXZlIHRoZSBhbHBoYSB0ZXN0IHdvcmsgcHJvcGVybHkuCiAgICAgICAgICAgICAqIE9uIHRoZSBvdGhlciBoYW5kIGFwcGxpY2F0aW9ucyBjYW4gc3RpbGwgdXNlIHRleHR1cmUgY29tYmluZXJzIGFwcGFyZW50bHkuIFRoaXMgY29kZSB0YWtlcyBjYXJlIHRoYXQgYXBwcwogICAgICAgICAgICAgKiBjYW5ub3QgcmVtb3ZlIHRoZSB0ZXh0dXJlJ3MgYWxwaGEgY2hhbm5lbCBlbnRpcmVseS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIGZpeHVwIGlzIHJlcXVpcmVkIGZvciBQcmluY2Ugb2YgUGVyc2lhIDNEKHByaXNvbiBiYXJzKSwgd2hpbGUgTW90byByYWNlciAyIHJlcXVpcmVzIEQzRFRPUF9NT0RVTEFURSB0byB3b3JrCiAgICAgICAgICAgICAqIG9uIGNvbG9yIGtleWVkIHN1cmZhY2VzLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBXaGF0IHRvIGRvIHdpdGggbXVsdGl0ZXh0dXJpbmc/IFNvIGZhciBubyBhcHAgaGFzIGJlZW4gZm91bmQgdGhhdCB1c2VzIGNvbG9yIGtleWluZyB3aXRoIG11bHRpdGV4dHVyaW5nCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX0RJU0FCTEUpIG9wID0gV0lORUQzRFRPUF9TRUxFQ1RBUkcxOwogICAgICAgICAgICBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzEpIGFyZzEgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICAgICAgZWxzZSBpZihvcCA9PSBXSU5FRDNEVE9QX1NFTEVDVEFSRzIpIGFyZzIgPSBXSU5FRDNEVEFfVEVYVFVSRTsKICAgICAgICB9CiAgICB9CgogICAgVFJBQ0UoIlNldHRpbmcgYWxwaGEgb3AgZm9yIHN0YWdlICVkXG4iLCBzdGFnZSk7CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgc2V0X3RleF9vcF9udnJjKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgb3AsIGFyZzEsIGFyZzIsIGFyZzAsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfc3RhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBzZXRfdGV4X29wKChJV2luZUQzRERldmljZSAqKXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UsIFRSVUUsIHN0YWdlLAogICAgICAgICAgICAgICAgICAgIG9wLCBhcmcxLCBhcmcyLCBhcmcwKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdHJhbnNmb3JtX3RleHR1cmUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCB0ZXhVbml0ID0gc3RhdGUgLSBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwKTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbdGV4VW5pdF07CgogICAgaWYgKG1hcHBlZF9zdGFnZSA8IDApIHJldHVybjsKCiAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgIGlmKG1hcHBlZF9zdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZXMpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgR0xfRVhUQ0FMTChnbEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlKSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQWN0aXZlVGV4dHVyZUFSQiIpOwogICAgfSBlbHNlIGlmIChtYXBwZWRfc3RhZ2UgPiAwKSB7CiAgICAgICAgLyogV2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZSAqLwogICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzZXRfdGV4dHVyZV9tYXRyaXgoKGZsb2F0ICopJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1RFWFRVUkUwICsgdGV4VW5pdF0udS5tWzBdWzBdLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbdGV4VW5pdF1bV0lORUQzRFRTU19URVhUVVJFVFJBTlNGT1JNRkxBR1NdLAogICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGVibG9jay0+dGV4dHVyZVN0YXRlW3RleFVuaXRdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0gJiAweEZGRkYwMDAwKSAhPSBXSU5FRDNEVFNTX1RDSV9QQVNTVEhSVSk7Cgp9CgpzdGF0aWMgdm9pZCBsb2FkVmVydGV4RGF0YShJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqc2QpOwoKc3RhdGljIHZvaWQgdGV4X2Nvb3JkaW5kZXgoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKICAgIERXT1JEIG1hcHBlZF9zdGFnZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbc3RhZ2VdOwoKICAgIGlmIChtYXBwZWRfc3RhZ2UgPT0gLTEpIHsKICAgICAgICBUUkFDRSgiTm8gdGV4dHVyZSB1bml0IG1hcHBlZCB0byBzdGFnZSAlZC4gU2tpcHBpbmcgdGV4dHVyZSBjb29yZGluYXRlcy5cbiIsIHN0YWdlKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKEdMX1NVUFBPUlQoQVJCX01VTFRJVEVYVFVSRSkpIHsKICAgICAgICBpZihtYXBwZWRfc3RhZ2UgPj0gR0xfTElNSVRTKHNhbXBsZXJzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgIH0gZWxzZSBpZiAoc3RhZ2UgPiAwKSB7CiAgICAgICAgLyogV2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZSAqLwogICAgICAgIFdBUk4oIlByb2dyYW0gdXNpbmcgbXVsdGlwbGUgY29uY3VycmVudCB0ZXh0dXJlcyB3aGljaCB0aGlzIG9wZW5nbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnRcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBWYWx1ZXMgMC03IGFyZSBpbmRleGVzIGludG8gdGhlIEZWRiB0ZXggY29vcmRzIC0gU2VlIGNvbW1lbnRzIGluIERyYXdQcmltaXRpdmUKICAgICAqCiAgICAgKiBGSVhNRTogRnJvbSBNU0ROOiBUaGUgV0lORUQzRFRTU19UQ0lfKiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBJZiB5b3UgaW5jbHVkZQogICAgICogb25lIGZsYWcsIHlvdSBjYW4gc3RpbGwgc3BlY2lmeSBhbiBpbmRleCB2YWx1ZSwgd2hpY2ggdGhlIHN5c3RlbSB1c2VzIHRvCiAgICAgKiBkZXRlcm1pbmUgdGhlIHRleHR1cmUgd3JhcHBpbmcgbW9kZS4KICAgICAqIGVnLiBTZXRUZXh0dXJlU3RhZ2VTdGF0ZSggMCwgV0lORUQzRFRTU19URVhDT09SRElOREVYLCBXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIHwgMSApOwogICAgICogbWVhbnMgdXNlIHRoZSB2ZXJ0ZXggcG9zaXRpb24gKGNhbWVyYS1zcGFjZSkgYXMgdGhlIGlucHV0IHRleHR1cmUgY29vcmRpbmF0ZXMKICAgICAqIGZvciB0aGlzIHRleHR1cmUgc3RhZ2UsIGFuZCB0aGUgd3JhcCBtb2RlIHNldCBpbiB0aGUgV0lORUQzRFJTX1dSQVAxIHJlbmRlcgogICAgICogc3RhdGUuIFdlIGRvIG5vdCAoeWV0KSBzdXBwb3J0IHRoZSBXSU5FRDNEUkVOREVSU1RBVEVfV1JBUHggdmFsdWVzLCBub3IgdGllIHRoZW0gdXAKICAgICAqIHRvIHRoZSBURVhDT09SRElOREVYIHZhbHVlCiAgICAgKi8KCiAgICAvKgogICAgICogQmUgY2FyZWZ1bCB0aGUgdmFsdWUgb2YgdGhlIG1hc2sgMHhGMDAwMCBjb21lIGZyb20gZDNkOHR5cGVzLmggaW5mb3MKICAgICAqLwogICAgc3dpdGNoIChzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWF0gJiAweEZGRkYwMDAwKSB7CiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX1BBU1NUSFJVOgogICAgICAgIC8qVXNlIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSBjb29yZGluYXRlcyBjb250YWluZWQgd2l0aGluIHRoZSB2ZXJ0ZXggZm9ybWF0LiBUaGlzIHZhbHVlIHJlc29sdmVzIHRvIHplcm8uKi8KICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUyk7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9TLFQsUixRKSIpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VQT1NJVElPTjoKICAgICAgICAvKiBDYW1lcmFTcGFjZVBvc2l0aW9uIG1lYW5zIHVzZSB0aGUgdmVydGV4IHBvc2l0aW9uLCB0cmFuc2Zvcm1lZCB0byBjYW1lcmEgc3BhY2UsCiAgICAgICAgICogYXMgdGhlIGlucHV0IHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgc3RhZ2UncyB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uLiBUaGlzCiAgICAgICAgICogZXF1YXRlcyByb3VnaGx5IHRvIEVZRV9MSU5FQVIKICAgICAgICAgKi8KICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHNfcGxhbmVbXSA9IHsgMS4wLCAwLjAsIDAuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHRfcGxhbmVbXSA9IHsgMC4wLCAxLjAsIDAuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHJfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDEuMCwgMC4wIH07CiAgICAgICAgICAgIGZsb2F0IHFfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDAuMCwgMS4wIH07CiAgICAgICAgICAgIFRSQUNFKCJXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgICAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUywgR0xfRVlFX1BMQU5FLCBzX3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9ULCBHTF9FWUVfUExBTkUsIHRfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUSwgR0xfRVlFX1BMQU5FLCBxX3BsYW5lKTsKICAgICAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgICAgIFRSQUNFKCJXSU5FRDNEVFNTX1RDSV9DQU1FUkFTUEFDRVBPU0lUSU9OIC0gU2V0IEdMX1RFWFRVUkVfR0VOX3ggYW5kIEdMX3gsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVJcbiIpOwogICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9TKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOyIpOwogICAgICAgICAgICBnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfRVlFX0xJTkVBUikiKTsKICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9UKTsiKTsKICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX0VZRV9MSU5FQVIpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9FWUVfTElORUFSKSIpOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFTk9STUFMOgogICAgICAgIHsKICAgICAgICAgICAgaWYgKEdMX1NVUFBPUlQoTlZfVEVYR0VOX1JFRkxFQ1RJT04pKSB7CiAgICAgICAgICAgICAgICBmbG9hdCBzX3BsYW5lW10gPSB7IDEuMCwgMC4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICAgICAgZmxvYXQgdF9wbGFuZVtdID0geyAwLjAsIDEuMCwgMC4wLCAwLjAgfTsKICAgICAgICAgICAgICAgIGZsb2F0IHJfcGxhbmVbXSA9IHsgMC4wLCAwLjAsIDEuMCwgMC4wIH07CiAgICAgICAgICAgICAgICBmbG9hdCBxX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAwLjAsIDEuMCB9OwogICAgICAgICAgICAgICAgVFJBQ0UoIldJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFTk9STUFMIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICAgICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgICAgICAgICAgICBnbFB1c2hNYXRyaXgoKTsKICAgICAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1MsIEdMX0VZRV9QTEFORSwgc19wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1QsIEdMX0VZRV9QTEFORSwgdF9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1EsIEdMX0VZRV9QTEFORSwgcV9wbGFuZSk7CiAgICAgICAgICAgICAgICBnbFBvcE1hdHJpeCgpOwoKICAgICAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOyIpOwogICAgICAgICAgICAgICAgZ2xUZXhHZW5pKEdMX1MsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpOwogICAgICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsVGV4R2VuaShHTF9TLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKSIpOwogICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7Iik7CiAgICAgICAgICAgICAgICBnbFRleEdlbmkoR0xfVCwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVik7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhHZW5pKEdMX1QsIEdMX1RFWFRVUkVfR0VOX01PREUsIEdMX05PUk1BTF9NQVBfTlYpIik7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZShHTF9URVhUVVJFX0dFTl9SKTsiKTsKICAgICAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9OT1JNQUxfTUFQX05WKTsKICAgICAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfTk9STUFMX01BUF9OVikiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICBjYXNlIFdJTkVEM0RUU1NfVENJX0NBTUVSQVNQQUNFUkVGTEVDVElPTlZFQ1RPUjoKICAgICAgICB7CiAgICAgICAgICAgIGlmIChHTF9TVVBQT1JUKE5WX1RFWEdFTl9SRUZMRUNUSU9OKSkgewogICAgICAgICAgICBmbG9hdCBzX3BsYW5lW10gPSB7IDEuMCwgMC4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCB0X3BsYW5lW10gPSB7IDAuMCwgMS4wLCAwLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCByX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAxLjAsIDAuMCB9OwogICAgICAgICAgICBmbG9hdCBxX3BsYW5lW10gPSB7IDAuMCwgMC4wLCAwLjAsIDEuMCB9OwogICAgICAgICAgICBUUkFDRSgiV0lORUQzRFRTU19UQ0lfQ0FNRVJBU1BBQ0VSRUZMRUNUSU9OVkVDVE9SIC0gU2V0IGV5ZSBwbGFuZVxuIik7CgogICAgICAgICAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgICAgICAgICAgZ2xQdXNoTWF0cml4KCk7CiAgICAgICAgICAgIGdsTG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUywgR0xfRVlFX1BMQU5FLCBzX3BsYW5lKTsKICAgICAgICAgICAgZ2xUZXhHZW5mdihHTF9ULCBHTF9FWUVfUExBTkUsIHRfcGxhbmUpOwogICAgICAgICAgICBnbFRleEdlbmZ2KEdMX1IsIEdMX0VZRV9QTEFORSwgcl9wbGFuZSk7CiAgICAgICAgICAgIGdsVGV4R2VuZnYoR0xfUSwgR0xfRVlFX1BMQU5FLCBxX3BsYW5lKTsKICAgICAgICAgICAgZ2xQb3BNYXRyaXgoKTsKCiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1MpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUyk7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9TLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUywgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fVCk7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9ULCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfVCwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfR0VOX1IpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGUoR0xfVEVYVFVSRV9HRU5fUik7Iik7CiAgICAgICAgICAgIGdsVGV4R2VuaShHTF9SLCBHTF9URVhUVVJFX0dFTl9NT0RFLCBHTF9SRUZMRUNUSU9OX01BUF9OVik7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFRleEdlbmkoR0xfUiwgR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0xfUkVGTEVDVElPTl9NQVBfTlYpIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgLyogVW5oYW5kbGVkIHR5cGVzOiAqLwogICAgZGVmYXVsdDoKICAgICAgICAvKiBUb2RvOiAqLwogICAgICAgIC8qID8gZGlzYWJsZSBHTF9URVhUVVJFX0dFTl9uID8gKi8KICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUyk7CiAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfR0VOX1QpOwogICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX0dFTl9SKTsKICAgICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9HRU5fUSk7CiAgICAgICAgRklYTUUoIlVuaGFuZGxlZCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggJXhcbiIsIHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19URVhDT09SRElOREVYXSk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgLyogVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeCAqLwogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1RFWFRVUkUwICsgc3RhZ2UpKSkgewogICAgICAgIHRyYW5zZm9ybV90ZXh0dXJlKFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTAgKyBzdGFnZSksIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgfQoKICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkRFQ0wpICYmIGNvbnRleHQtPm5hbWVkQXJyYXlzTG9hZGVkKSB7CiAgICAgICAgLyogUmVsb2FkIHRoZSBhcnJheXMgaWYgd2UgYXJlIHVzaW5nIGZpeGVkIGZ1bmN0aW9uIGFycmF5cyB0byByZWZsZWN0IHRoZSBzZWxlY3RlZCBjb29yZCBpbnB1dAogICAgICAgICAqIHNvdXJjZS4gQ2FsbCBsb2FkVmVydGV4RGF0YSBkaXJlY3RseSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYXJzZSB0aGUgdmVydGV4IGRlY2xhcmF0aW9uCiAgICAgICAgICogYW5kIGRvIGFsbCB0aGUgdGhpbmdzIGxpbmtlZCB0byBpdAogICAgICAgICAqIFRPRE86IFRpZHkgdGhhdCB1cCB0byByZWxvYWQgb25seSB0aGUgYXJyYXlzIG9mIHRoZSBjaGFuZ2VkIHVuaXQKICAgICAgICAgKi8KICAgICAgICBsb2FkVmVydGV4RGF0YShzdGF0ZWJsb2NrLCAmc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+c3RyaWRlZF9zdHJlYW1zKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgdGV4X2J1bXBlbnZsc2NhbGUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRV07CiAgICBpZih0bXB2YWx1ZS5mICE9IDAuMCkgewogICAgICAgIEZJWE1FKCJXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwogICAgfQp9CgpzdGF0aWMgdm9pZCB0ZXhfYnVtcGVudmxvZmZzZXQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKICAgIHVuaW9uIHsKICAgICAgICBEV09SRCBkOwogICAgICAgIGZsb2F0IGY7CiAgICB9IHRtcHZhbHVlOwoKICAgIHRtcHZhbHVlLmQgPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc3RhZ2VdW1dJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVRdOwogICAgaWYodG1wdmFsdWUuZiAhPSAwLjApIHsKICAgICAgICBGSVhNRSgiV0lORUQzRFRTU19CVU1QRU5WTE9GRlNFVCBub3Qgc3VwcG9ydGVkIHlldFxuIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRleF9yZXN1bHRhcmcoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBEV09SRCBzdGFnZSA9IChzdGF0ZSAtIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCAwKSkgLyBXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURTsKCiAgICBpZihzdGFnZSA+PSBHTF9MSU1JVFModGV4dHVyZV9zdGFnZXMpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVTdGF0ZVtzdGFnZV1bV0lORUQzRFRTU19SRVNVTFRBUkddICE9IFdJTkVEM0RUQV9DVVJSRU5UKSB7CiAgICAgICAgRklYTUUoIldJTkVEM0RUU1NfUkVTVUxUQVJHIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgc2FtcGxlcihEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHNhbXBsZXIgPSBzdGF0ZSAtIFNUQVRFX1NBTVBMRVIoMCk7CiAgICBEV09SRCBtYXBwZWRfc3RhZ2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT50ZXhVbml0TWFwW3NhbXBsZXJdOwogICAgdW5pb24gewogICAgICAgIGZsb2F0IGY7CiAgICAgICAgRFdPUkQgZDsKICAgIH0gdG1wdmFsdWU7CgogICAgVFJBQ0UoIlNhbXBsZXI6ICVkXG4iLCBzYW1wbGVyKTsKICAgIC8qIEVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGV4dHVyZSBkaW1lbnNpb25zIGlzIGRvbmUgYnkgdGV4dHVyZSBzdGFnZSBzdGF0ZSAvIHBpeGVsIHNoYWRlciBzZXR1cCwgdGhpcyBmdW5jdGlvbgogICAgICogb25seSBoYXMgdG8gYmluZCB0ZXh0dXJlcyBhbmQgc2V0IHRoZSBwZXIgdGV4dHVyZSBzdGF0ZXMKICAgICAqLwoKICAgIGlmIChtYXBwZWRfc3RhZ2UgPT0gLTEpIHsKICAgICAgICBUUkFDRSgiTm8gc2FtcGxlciBtYXBwZWQgdG8gc3RhZ2UgJWQuIFJldHVybmluZy5cbiIsIHNhbXBsZXIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgIGlmIChtYXBwZWRfc3RhZ2UgPj0gR0xfTElNSVRTKHNhbXBsZXJzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIEdMX0VYVENBTEwoZ2xBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIG1hcHBlZF9zdGFnZSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEFjdGl2ZVRleHR1cmVBUkIiKTsKICAgIH0gZWxzZSBpZiAoc2FtcGxlciA+IDApIHsKICAgICAgICAvKiBXZSBjYW4ndCBkbyBhbnl0aGluZyBoZXJlICovCiAgICAgICAgV0FSTigiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKSB7CiAgICAgICAgQk9PTCB0ZXhJc1BvdzIgPSBGQUxTRTsKCiAgICAgICAgLyogVGhlIGZpeGVkIGZ1bmN0aW9uIG5wMiB0ZXh0dXJlIGVtdWxhdGlvbiB1c2VzIHRoZSB0ZXh0dXJlIG1hdHJpeCB0byBmaXggdXAgdGhlIGNvb3JkaW5hdGVzCiAgICAgICAgICogSVdpbmVEM0RCYXNlVGV4dHVyZTo6QXBwbHlTdGF0ZUNoYW5nZXMgbXVsdGlwbGllcyB0aGUgc2V0IG1hdHJpeCB3aXRoIGEgZml4dXAgbWF0cml4LiBCZWZvcmUgdGhlCiAgICAgICAgICogc2NhbGluZyBpcyByZWFwcGxpZWQgb3IgcmVtb3ZlZCwgdGhlIHRleHR1cmUgbWF0cml4IGhhcyB0byBiZSByZWFwcGxpZWQKICAgICAgICAgKi8KICAgICAgICBpZighR0xfU1VQUE9SVChBUkJfVEVYVFVSRV9OT05fUE9XRVJfT0ZfVFdPKSAmJiBzYW1wbGVyIDwgTUFYX1RFWFRVUkVTKSB7CiAgICAgICAgICAgIGlmKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdID09IEdMX1RFWFRVUkVfMkQpIHsKICAgICAgICAgICAgICAgIGlmKCgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1tzYW1wbGVyXSktPnBvdzJzY2FsaW5nRmFjdG9yWCAhPSAxLjAgfHwKICAgICAgICAgICAgICAgICAgICgoSVdpbmVEM0RUZXh0dXJlSW1wbCAqKSBzdGF0ZWJsb2NrLT50ZXh0dXJlc1tzYW1wbGVyXSktPnBvdzJzY2FsaW5nRmFjdG9yWSAhPSAxLjAgKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4SXNQb3cyID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdID09IEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJCKSB7CiAgICAgICAgICAgICAgICBpZigoKElXaW5lRDNEQ3ViZVRleHR1cmVJbXBsICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKS0+cG93MnNjYWxpbmdGYWN0b3IgIT0gMS4wKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4SXNQb3cyID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYodGV4SXNQb3cyIHx8IGNvbnRleHQtPmxhc3RXYXNQb3cyVGV4dHVyZVtzYW1wbGVyXSkgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RleHR1cmUoU1RBVEVfVFJBTlNGT1JNKFdJTkVEM0RUU19URVhUVVJFMCArIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnRleFVuaXRNYXBbc2FtcGxlcl0pLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgIGNvbnRleHQtPmxhc3RXYXNQb3cyVGV4dHVyZVtzYW1wbGVyXSA9IHRleElzUG93MjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgSVdpbmVEM0RCYXNlVGV4dHVyZV9QcmVMb2FkKChJV2luZUQzREJhc2VUZXh0dXJlICopIHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdKTsKICAgICAgICBJV2luZUQzREJhc2VUZXh0dXJlX0FwcGx5U3RhdGVDaGFuZ2VzKHN0YXRlYmxvY2stPnRleHR1cmVzW3NhbXBsZXJdLCBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbc2FtcGxlcl0sIHN0YXRlYmxvY2stPnNhbXBsZXJTdGF0ZVtzYW1wbGVyXSk7CgogICAgICAgIGlmIChHTF9TVVBQT1JUKEVYVF9URVhUVVJFX0xPRF9CSUFTKSkgewogICAgICAgICAgICB0bXB2YWx1ZS5kID0gc3RhdGVibG9jay0+c2FtcGxlclN0YXRlW3NhbXBsZXJdW1dJTkVEM0RTQU1QX01JUE1BUExPREJJQVNdOwogICAgICAgICAgICBnbFRleEVudmYoR0xfVEVYVFVSRV9GSUxURVJfQ09OVFJPTF9FWFQsCiAgICAgICAgICAgICAgICAgICAgICBHTF9URVhUVVJFX0xPRF9CSUFTX0VYVCwKICAgICAgICAgICAgICAgICAgICAgIHRtcHZhbHVlLmYpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xUZXhFbnZpIEdMX1RFWFRVUkVfTE9EX0JJQVNfRVhUIC4uLiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYgc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIgJiYKICAgICAgICAgICAgKChJV2luZUQzRFBpeGVsU2hhZGVySW1wbCAqKXN0YXRlYmxvY2stPnBpeGVsU2hhZGVyKS0+YmFzZVNoYWRlci5mdW5jdGlvbikgewogICAgICAgICAgICAvKiBVc2luZyBhIHBpeGVsIHNoYWRlcj8gVmVyaWZ5IHRoZSBzYW1wbGVyIHR5cGVzICovCgogICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSBlbmFibGVkLiBJIGRvbid0IGhhdmUgdG8gZGlzYWJsZSB0aGUgb3RoZXIKICAgICAgICAgICAgICogZGltZW5zaW9ucyBiZWNhdXNlIHRoZSBzaGFkZXIga25vd3MgZnJvbSB3aGljaCB0ZXh0dXJlIHR5cGUgdG8gc2FtcGxlIGZyb20uIEZvciB0aGUgc2FrZSBvZgogICAgICAgICAgICAgKiBkZWJ1Z2dpbmcgYWxsIGRpbWVuc2lvbnMgY291bGQgYmUgZW5hYmxlZCBhbmQgYSB0ZXh0dXJlIHdpdGggc29tZSB1Z2x5IHBpbmsgYm91bmQgdG8gdGhlIHVudXNlZAogICAgICAgICAgICAgKiBkaW1lbnNpb25zLiBUaGlzIHNob3VsZCBtYWtlIHdyb25nIHNhbXBsaW5nIHNvdXJjZXMgdmlzaWJsZSA6LSkKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGdsRW5hYmxlKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlKHN0YXRlYmxvY2stPnRleHR1cmVEaW1lbnNpb25zW3NhbXBsZXJdKSIpOwogICAgICAgIH0gZWxzZSBpZihzYW1wbGVyIDwgc3RhdGVibG9jay0+bG93ZXN0X2Rpc2FibGVkX3N0YWdlKSB7CiAgICAgICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVEVYVFVSRVNUQUdFKHNhbXBsZXIsIFdJTkVEM0RUU1NfQ09MT1JPUCkpKSB7CiAgICAgICAgICAgICAgICBhY3RpdmF0ZV9kaW1lbnNpb25zKHNhbXBsZXIsIHN0YXRlYmxvY2spOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZihzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfQ09MT1JLRVlFTkFCTEVdICYmIHNhbXBsZXIgPT0gMCkgewogICAgICAgICAgICAgICAgLyogSWYgY29sb3Iga2V5aW5nIGlzIGVuYWJsZWQgdXBkYXRlIHRoZSBhbHBoYSB0ZXN0LCBpdCBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2UKICAgICAgICAgICAgICAgICAqIG9mIGEgY29sb3Iga2V5IGluIHN0YWdlIDAKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgc3RhdGVfYWxwaGEoV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZihzYW1wbGVyIDwgR0xfTElNSVRTKHRleHR1cmVfc3RhZ2VzKSkgewogICAgICAgIGlmKHNhbXBsZXIgPCBzdGF0ZWJsb2NrLT5sb3dlc3RfZGlzYWJsZWRfc3RhZ2UpIHsKICAgICAgICAgICAgLyogVE9ETzogV2hhdCBzaG91bGQgSSBkbyB3aXRoIHBpeGVsIHNoYWRlcnMgaGVyZSA/Pz8gKi8KICAgICAgICAgICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9URVhUVVJFU1RBR0Uoc2FtcGxlciwgV0lORUQzRFRTU19DT0xPUk9QKSkpIHsKICAgICAgICAgICAgICAgIGFjdGl2YXRlX2RpbWVuc2lvbnMoc2FtcGxlciwgc3RhdGVibG9jayk7CiAgICAgICAgICAgIH0KICAgICAgICB9IC8qIE90aGVyd2lzZSB0ZXhfY29sb3JvcCBkaXNhYmxlcyB0aGUgc3RhZ2UgKi8KICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmR1bW15VGV4dHVyZU5hbWVbc2FtcGxlcl0pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmR1bW15VGV4dHVyZU5hbWVbc2FtcGxlcl0pIik7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHNoYWRlcmNvbnN0YW50KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgSVdpbmVEM0REZXZpY2VJbXBsICpkZXZpY2UgPSBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlOwoKICAgIC8qIFZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIHN0YXRlcyB3aWxsIGNhbGwgYSBzaGFkZXIgdXBsb2FkLCBkb24ndCBkbyBhbnl0aGluZyBhcyBsb25nIG9uZSBvZiB0aGVtCiAgICAgKiBoYXMgYW4gdXBkYXRlIHBlbmRpbmcKICAgICAqLwogICAgaWYoaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1ZERUNMKSB8fAogICAgICAgaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1BJWEVMU0hBREVSKSkgewogICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBkZXZpY2UtPnNoYWRlcl9iYWNrZW5kLT5zaGFkZXJfbG9hZF9jb25zdGFudHMoKElXaW5lRDNERGV2aWNlICopIGRldmljZSwgdXNlX3BzKGRldmljZSksIHVzZV92cyhkZXZpY2UpKTsKfQoKc3RhdGljIHZvaWQgcGl4ZWxzaGFkZXIoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CiAgICBCT09MIHVzZV9wc2hhZGVyID0gdXNlX3BzKGRldmljZSk7CiAgICBCT09MIHVzZV92c2hhZGVyID0gdXNlX3ZzKGRldmljZSk7CiAgICBCT09MIHVwZGF0ZV9mb2cgPSBGQUxTRTsKICAgIGludCBpOwoKICAgIGlmICh1c2VfcHNoYWRlcikgewogICAgICAgIGlmKCFjb250ZXh0LT5sYXN0X3dhc19wc2hhZGVyKSB7CiAgICAgICAgICAgIC8qIEZvcm1lciBkcmF3IHdpdGhvdXQgYSBwaXhlbCBzaGFkZXIsIHNvbWUgc2FtcGxlcnMKICAgICAgICAgICAgICogbWF5IGJlIGRpc2FibGVkIGJlY2F1c2Ugb2YgV0lORUQzRFRTU19DT0xPUk9QID0gV0lORUQzRFRPUF9ESVNBQkxFCiAgICAgICAgICAgICAqIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhlbQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZm9yKGk9MDsgaSA8IE1BWF9TQU1QTEVSUzsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1NBTVBMRVIoaSkpKSB7CiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcihTVEFURV9TQU1QTEVSKGkpLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVfZm9nID0gVFJVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgIC8qIE90aGVyd2lzZSBhbGwgc2FtcGxlcnMgd2VyZSBhY3RpdmF0ZWQgYnkgdGhlIGNvZGUgYWJvdmUgaW4gZWFybGllciBkcmF3cywgb3IgYnkgc2FtcGxlcigpCiAgICAgICAgICAgICogaWYgYSBkaWZmZXJlbnQgdGV4dHVyZSB3YXMgYm91bmQuIEkgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICAgICAgICAgKi8KICAgICAgICB9CgogICAgICAgIC8qIENvbXBpbGUgYW5kIGJpbmQgdGhlIHNoYWRlciAqLwogICAgICAgIElXaW5lRDNEUGl4ZWxTaGFkZXJfQ29tcGlsZVNoYWRlcihzdGF0ZWJsb2NrLT5waXhlbFNoYWRlcik7CiAgICB9IGVsc2UgewogICAgICAgIC8qIERpc2FibGVkIHRoZSBwaXhlbCBzaGFkZXIgLSBjb2xvciBvcHMgd2VyZW4ndCBhcHBsaWVkCiAgICAgICAgICogd2hpbGUgaXQgd2FzIGVuYWJsZWQsIHNvIHJlLWFwcGx5IHRoZW0uCiAgICAgICAgICovCiAgICAgICAgZm9yKGk9MDsgaSA8IE1BWF9URVhUVVJFUzsgaSsrKSB7CiAgICAgICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVEVYVFVSRVNUQUdFKGksIFdJTkVEM0RUU1NfQ09MT1JPUCkpKSB7CiAgICAgICAgICAgICAgICB0ZXhfY29sb3JvcChTVEFURV9URVhUVVJFU1RBR0UoaSwgV0lORUQzRFRTU19DT0xPUk9QKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoY29udGV4dC0+bGFzdF93YXNfcHNoYWRlcikKICAgICAgICAgICAgdXBkYXRlX2ZvZyA9IFRSVUU7CiAgICB9CgogICAgaWYoIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTdGF0ZVRhYmxlW1NUQVRFX1ZTSEFERVJdLnJlcHJlc2VudGF0aXZlKSkgewogICAgICAgIGRldmljZS0+c2hhZGVyX2JhY2tlbmQtPnNoYWRlcl9zZWxlY3QoKElXaW5lRDNERGV2aWNlICopc3RhdGVibG9jay0+d2luZUQzRERldmljZSwgdXNlX3BzaGFkZXIsIHVzZV92c2hhZGVyKTsKCiAgICAgICAgaWYgKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQpICYmICh1c2VfdnNoYWRlciB8fCB1c2VfcHNoYWRlcikpIHsKICAgICAgICAgICAgc2hhZGVyY29uc3RhbnQoU1RBVEVfVkVSVEVYU0hBREVSQ09OU1RBTlQsIHN0YXRlYmxvY2ssIGNvbnRleHQpOwogICAgICAgIH0KICAgIH0KCiAgICBpZih1cGRhdGVfZm9nKQogICAgICAgIHN0YXRlX2ZvZyhzdGF0ZSwgc3RhdGVibG9jaywgY29udGV4dCk7CgogICAgY29udGV4dC0+bGFzdF93YXNfcHNoYWRlciA9IHVzZV9wc2hhZGVyOwp9CgpzdGF0aWMgdm9pZCB0ZXhfYnVtcGVudm1hdChEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIERXT1JEIHN0YWdlID0gKHN0YXRlIC0gU1RBVEVfVEVYVFVSRVNUQUdFKDAsIDApKSAvIFdJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFOwoKICAgIGlmKHN0YXRlYmxvY2stPnBpeGVsU2hhZGVyICYmIHN0YWdlICE9IDAgJiYKICAgICAgICgoSVdpbmVEM0RQaXhlbFNoYWRlckltcGwgKikgc3RhdGVibG9jay0+cGl4ZWxTaGFkZXIpLT5uZWVkc2J1bXBtYXQgPT0gc3RhZ2UpIHsKICAgICAgICAvKiBUaGUgcGl4ZWwgc2hhZGVyIGhhcyB0byBrbm93IHRoZSBidW1wIGVudiBtYXRyaXguIERvIGEgY29uc3RhbnRzIHVwZGF0ZSBpZiBpdCBpc24ndCBzY2hlZHVsZWQKICAgICAgICAgKiBhbnl3YXkKICAgICAgICAgKi8KICAgICAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1BJWEVMU0hBREVSQ09OU1RBTlQpICYmCiAgICAgICAgICAgIWlzU3RhdGVEaXJ0eShjb250ZXh0LCBTVEFURV9QSVhFTFNIQURFUikpIHsKICAgICAgICAgICAgc2hhZGVyY29uc3RhbnQoU1RBVEVfUElYRUxTSEFERVJDT05TVEFOVCwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fd29ybGQoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0cmFuc2Zvcm1fdmlldyBiZWxvdyBpZiB0aGUgdmlldyBtYXRyaXggd2FzIGNoYW5nZWQgdG9vCiAgICAgKgogICAgICogRGVsaWJlcmF0ZWx5IG5vIGNoZWNrIGlmIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaXMgZGlydHkgYmVjYXVzZSB0aGUgdmRlY2wgc3RhdGUKICAgICAqIGRvZXMgbm90IGFsd2F5cyB1cGRhdGUgdGhlIHdvcmxkIG1hdHJpeCwgb25seSBvbiBhIHN3aXRjaCBiZXR3ZWVuIHRyYW5zZm9ybWVkCiAgICAgKiBhbmQgdW50cmFubnNmb3JtZWQgZHJhd3MuIEl0ICptYXkqIGhhcHBlbiB0aGF0IHRoZSB3b3JsZCBtYXRyaXggaXMgc2V0IDIgdGltZXMgZHVyaW5nIG9uZQogICAgICogZHJhdywgYnV0IHRoYXQgc2hvdWxkIGJlIHJhdGhlciByYXJlIGFuZCBjaGVhcGVyIGluIHRvdGFsLgogICAgICovCiAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsKICAgIGNoZWNrR0xjYWxsKCJnbE1hdHJpeE1vZGUiKTsKCiAgICBpZihjb250ZXh0LT5sYXN0X3dhc19yaHcpIHsKICAgICAgICBnbExvYWRJZGVudGl0eSgpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExvYWRJZGVudGl0eSgpIik7CiAgICB9IGVsc2UgewogICAgICAgIC8qIEluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB2aWV3IG1hdHJpeCBpcyB0aGUgaWRlbnRpdHkgbWF0cml4ICovCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnZpZXdfaWRlbnQpIHsKICAgICAgICAgICAgZ2xMb2FkTWF0cml4ZigoZmxvYXQgKikgJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1dPUkxETUFUUklYKDApXS51Lm1bMF1bMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkTWF0cml4ZiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkTWF0cml4ZiIpOwogICAgICAgICAgICBnbE11bHRNYXRyaXhmKChmbG9hdCAqKSAmc3RhdGVibG9jay0+dHJhbnNmb3Jtc1tXSU5FRDNEVFNfV09STERNQVRSSVgoMCldLnUubVswXVswXSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE11bHRNYXRyaXhmIik7CiAgICAgICAgfQogICAgfQp9CgpzdGF0aWMgdm9pZCBjbGlwcGxhbmUoRFdPUkQgc3RhdGUsIElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBVSU5UIGluZGV4ID0gc3RhdGUgLSBTVEFURV9DTElQUExBTkUoMCk7CgogICAgaWYoaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVklFVykpIHx8IGluZGV4ID49IEdMX0xJTUlUUyhjbGlwcGxhbmVzKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiBDbGlwIFBsYW5lIHNldHRpbmdzIGFyZSBhZmZlY3RlZCBieSB0aGUgbW9kZWwgdmlldyBpbiBPcGVuR0wsIHRoZSBWaWV3IHRyYW5zZm9ybSBpbiBkaXJlY3QzZCAqLwogICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICBnbFB1c2hNYXRyaXgoKTsKICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwoKICAgIFRSQUNFKCJDbGlwcGxhbmUgWyVmLCVmLCVmLCVmXVxuIiwKICAgICAgICAgIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF1bMF0sCiAgICAgICAgICBzdGF0ZWJsb2NrLT5jbGlwcGxhbmVbaW5kZXhdWzFdLAogICAgICAgICAgc3RhdGVibG9jay0+Y2xpcHBsYW5lW2luZGV4XVsyXSwKICAgICAgICAgIHN0YXRlYmxvY2stPmNsaXBwbGFuZVtpbmRleF1bM10pOwogICAgZ2xDbGlwUGxhbmUoR0xfQ0xJUF9QTEFORTAgKyBpbmRleCwgc3RhdGVibG9jay0+Y2xpcHBsYW5lW2luZGV4XSk7CiAgICBjaGVja0dMY2FsbCgiZ2xDbGlwUGxhbmUiKTsKCiAgICBnbFBvcE1hdHJpeCgpOwp9CgpzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fdmlldyhEV09SRCBzdGF0ZSwgSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaywgV2luZUQzRENvbnRleHQgKmNvbnRleHQpIHsKICAgIHVuc2lnbmVkIGludCBrOwoKICAgIC8qIElmIHdlIGFyZSBjaGFuZ2luZyB0aGUgVmlldyBtYXRyaXgsIHJlc2V0IHRoZSBsaWdodCBhbmQgY2xpcHBpbmcgcGxhbmVzIHRvIHRoZSBuZXcgdmlldwogICAgICogTk9URTogV2UgaGF2ZSB0byByZXNldCB0aGUgcG9zaXRpb25zIGV2ZW4gaWYgdGhlIGxpZ2h0L3BsYW5lIGlzIG5vdCBjdXJyZW50bHkKICAgICAqICAgICAgIGVuYWJsZWQsIHNpbmNlIHRoZSBjYWxsIHRvIGVuYWJsZSBpdCB3aWxsIG5vdCByZXNldCB0aGUgcG9zaXRpb24uCiAgICAgKiBOT1RFMjogQXBwYXJlbnRseSB0ZXh0dXJlIHRyYW5zZm9ybXMgZG8gTk9UIG5lZWQgcmVhcHBseWluZwogICAgICovCgogICAgUExJR0hUSU5GT0VMICpsaWdodCA9IE5VTEw7CgogICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICBjaGVja0dMY2FsbCgiZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVykiKTsKICAgIGdsTG9hZE1hdHJpeGYoKGZsb2F0ICopKGZsb2F0ICopICZzdGF0ZWJsb2NrLT50cmFuc2Zvcm1zW1dJTkVEM0RUU19WSUVXXS51Lm1bMF1bMF0pOwogICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYoLi4uKSIpOwoKICAgIC8qIFJlc2V0IGxpZ2h0cy4gVE9ETzogQ2FsbCBsaWdodCBhcHBseSBmdW5jICovCiAgICBmb3IoayA9IDA7IGsgPCBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5tYXhDb25jdXJyZW50TGlnaHRzOyBrKyspIHsKICAgICAgICBsaWdodCA9IHN0YXRlYmxvY2stPmFjdGl2ZUxpZ2h0c1trXTsKICAgICAgICBpZighbGlnaHQpIGNvbnRpbnVlOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBsaWdodC0+Z2xJbmRleCwgR0xfUE9TSVRJT04sIGxpZ2h0LT5saWdodFBvc24pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYgcG9zbiIpOwogICAgICAgIGdsTGlnaHRmdihHTF9MSUdIVDAgKyBsaWdodC0+Z2xJbmRleCwgR0xfU1BPVF9ESVJFQ1RJT04sIGxpZ2h0LT5saWdodERpcm4pOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbExpZ2h0ZnYgZGlybiIpOwogICAgfQoKICAgIC8qIFJlc2V0IENsaXBwaW5nIFBsYW5lcyAgKi8KICAgIGZvciAoayA9IDA7IGsgPCBHTF9MSU1JVFMoY2xpcHBsYW5lcyk7IGsrKykgewogICAgICAgIGlmKCFpc1N0YXRlRGlydHkoY29udGV4dCwgU1RBVEVfQ0xJUFBMQU5FKGspKSkgewogICAgICAgICAgICBjbGlwcGxhbmUoU1RBVEVfQ0xJUFBMQU5FKGspLCBzdGF0ZWJsb2NrLCBjb250ZXh0KTsKICAgICAgICB9CiAgICB9CgogICAgaWYoY29udGV4dC0+bGFzdF93YXNfcmh3KSB7CiAgICAgICAgZ2xMb2FkSWRlbnRpdHkoKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xMb2FkSWRlbnRpdHkoKSIpOwogICAgICAgIC8qIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSB3b3JsZCBtYXRyaXgsIHRoZSBpZGVudGl0eSBpcyBmaW5lICovCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qIENhbGwgdGhlIHdvcmxkIG1hdHJpeCBzdGF0ZSwgdGhpcyB3aWxsIGFwcGx5IHRoZSBjb21iaW5lZCBXT1JMRCArIFZJRVcgbWF0cml4CiAgICAgKiBObyBuZWVkIHRvIGRvIGl0IGhlcmUgaWYgdGhlIHN0YXRlIGlzIHNjaGVkdWxlZCBmb3IgdXBkYXRlLgogICAgICovCiAgICBpZighaXNTdGF0ZURpcnR5KGNvbnRleHQsIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfV09STERNQVRSSVgoMCkpKSkgewogICAgICAgIHRyYW5zZm9ybV93b3JsZChTVEFURV9UUkFOU0ZPUk0oV0lORUQzRFRTX1dPUkxETUFUUklYKDApKSwgc3RhdGVibG9jaywgY29udGV4dCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIHRyYW5zZm9ybV93b3JsZGV4KERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgV0FSTigiV29ybGQgbWF0cml4IDEgLSAyNTUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwp9CgpzdGF0aWMgY29uc3QgR0xmbG9hdCBpbnZ5bWF0WzE2XSA9IHsKICAgIDEuMGYsIDAuMGYsIDAuMGYsIDAuMGYsCiAgICAwLjBmLCAtMS4wZiwgMC4wZiwgMC4wZiwKICAgIDAuMGYsIDAuMGYsIDEuMGYsIDAuMGYsCiAgICAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmfTsKCnN0YXRpYyB2b2lkIHRyYW5zZm9ybV9wcm9qZWN0aW9uKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwogICAgY2hlY2tHTGNhbGwoImdsTWF0cml4TW9kZShHTF9QUk9KRUNUSU9OKSIpOwogICAgZ2xMb2FkSWRlbnRpdHkoKTsKICAgIGNoZWNrR0xjYWxsKCJnbExvYWRJZGVudGl0eSIpOwoKICAgIGlmKGNvbnRleHQtPmxhc3Rfd2FzX3JodykgewogICAgICAgIGRvdWJsZSBYLCBZLCBoZWlnaHQsIHdpZHRoLCBtaW5aLCBtYXhaOwoKICAgICAgICBYICAgICAgPSBzdGF0ZWJsb2NrLT52aWV3cG9ydC5YOwogICAgICAgIFkgICAgICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0Llk7CiAgICAgICAgaGVpZ2h0ID0gc3RhdGVibG9jay0+dmlld3BvcnQuSGVpZ2h0OwogICAgICAgIHdpZHRoICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0LldpZHRoOwogICAgICAgIG1pblogICA9IHN0YXRlYmxvY2stPnZpZXdwb3J0Lk1pblo7CiAgICAgICAgbWF4WiAgID0gc3RhdGVibG9jay0+dmlld3BvcnQuTWF4WjsKCiAgICAgICAgaWYoIXN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnVudHJhbnNmb3JtZWQpIHsKICAgICAgICAgICAgLyogVHJhbnNmb3JtZWQgdmVydGljZXMgYXJlIHN1cHBvc2VkIHRvIGJ5cGFzcyB0aGUgd2hvbGUgdHJhbnNmb3JtIHBpcGVsaW5lIGluY2x1ZGluZwogICAgICAgICAgICAgKiBmcnVzdHVtIGNsaXBwaW5nLiBUaGlzIGNhbid0IGJlIGRvbmUgaW4gb3BlbmdsLCBzbyB0aGlzIGNvZGUgYWRqdXN0cyB0aGUgWiByYW5nZSB0bwogICAgICAgICAgICAgKiBzdXBwcmVzcyBkZXB0aCBjbGlwcGluZy4gVGhpcyBjYW4gYmUgZG9uZSBiZWNhdXNlIGl0IGlzIGFuIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBhbmQKICAgICAgICAgICAgICogdGhlIFogY29vcmRpbmF0ZSBkb2VzIG5vdCBhZmZlY3QgdGhlIHNpemUgb2YgdGhlIHByaW1pdGl2ZXMKICAgICAgICAgICAgICovCiAgICAgICAgICAgIFRSQUNFKCJDYWxsaW5nIGdsT3J0aG8gd2l0aCAlZiwgJWYsICVmLCAlZlxuIiwgd2lkdGgsIGhlaWdodCwgLW1pblosIC1tYXhaKTsKICAgICAgICAgICAgaWYoc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+cmVuZGVyX29mZnNjcmVlbikgewogICAgICAgICAgICAgICAgZ2xPcnRobyhYLCBYICsgd2lkdGgsIC1ZLCAtWSAtIGhlaWdodCwgLW1pblosIC1tYXhaKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGdsT3J0aG8oWCwgWCArIHdpZHRoLCBZICsgaGVpZ2h0LCBZLCAtbWluWiwgLW1heFopOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogSWYgdGhlIGFwcCBtaXhlcyB0cmFuc2Zvcm1lZCBhbmQgdW50cmFuc2Zvcm1lZCBwcmltaXRpdmVzIHdlIGNhbid0IHVzZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0KICAgICAgICAgICAgICogdHJpY2sgYWJvdmUgYmVjYXVzZSB0aGlzIHdvdWxkIG1lc3MgdXAgdHJhbnNmb3JtZWQgYW5kIHVudHJhbnNmb3JtZWQgWiBvcmRlci4gUGFzcyB0aGUgeiBwb3NpdGlvbgogICAgICAgICAgICAgKiB1bm1vZGlmaWVkIHRvIG9wZW5nbC4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogSWYgdGhlIGFwcCBkZXBlbmRzIG9uIG1peGVkIHR5cGVzIGFuZCBkaXNhYmxlZCBjbGlwcGluZyB3ZSdyZSBvdXQgb2YgbHVjayB3aXRob3V0IGEgcGlwZWxpbmUKICAgICAgICAgICAgICogcmVwbGFjZW1lbnQgc2hhZGVyLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgVFJBQ0UoIkNhbGxpbmcgZ2xPcnRobyB3aXRoICVmLCAlZiwgJWYsICVmXG4iLCB3aWR0aCwgaGVpZ2h0LCAxLjAsIC0xLjApOwogICAgICAgICAgICBpZihzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgICAgICBnbE9ydGhvKFgsIFggKyB3aWR0aCwgLVksIC1ZIC0gaGVpZ2h0LCAxLjAsIC0xLjApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZ2xPcnRobyhYLCBYICsgd2lkdGgsIFkgKyBoZWlnaHQsIFksIDEuMCwgLTEuMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2hlY2tHTGNhbGwoImdsT3J0aG8iKTsKCiAgICAgICAgLyogV2luZG93IENvb3JkIDAgaXMgdGhlIG1pZGRsZSBvZiB0aGUgZmlyc3QgcGl4ZWwsIHNvIHRyYW5zbGF0ZSBieSAzLzggcGl4ZWxzICovCiAgICAgICAgZ2xUcmFuc2xhdGVmKDAuMzc1LCAwLjM3NSwgMCk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsVHJhbnNsYXRlZigwLjM3NSwgMC4zNzUsIDApIik7CiAgICAgICAgLyogRDNEIHRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIGZsaXBwZWQgY29tcGFyZWQgdG8gT3BlbkdMIG9uZXMsIHNvCiAgICAgICAgICogcmVuZGVyIGV2ZXJ5dGhpbmcgdXBzaWRlIGRvd24gd2hlbiByZW5kZXJpbmcgb2Zmc2NyZWVuLiAqLwogICAgICAgIGlmIChzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5yZW5kZXJfb2Zmc2NyZWVuKSB7CiAgICAgICAgICAgIGdsTXVsdE1hdHJpeGYoaW52eW1hdCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbE11bHRNYXRyaXhmKGludnltYXQpIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvKiBUaGUgcnVsZSBpcyB0aGF0IHRoZSB3aW5kb3cgY29vcmRpbmF0ZSAwIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlCiAgICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcGl4ZWwsIGJ1dCB0aGUgY2VudGVyIG9mIHRoZSBmaXJzdCBwaXhlbC4KICAgICAgICAgICAgQXMgYSBjb25zZXF1ZW5jZSBpZiB5b3Ugd2FudCB0byBjb3JyZWN0bHkgZHJhdyBvbmUgbGluZSBleGFjdGx5IGZyb20KICAgICAgICAgICAgdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGVuZCBvZiB0aGUgdmlld3BvcnQgKHdpdGggYWxsIG1hdHJpY2VzIHNldCB0bwogICAgICAgICAgICBiZSBpZGVudGl0eSksIHRoZSB4IGNvb3JkcyBvZiBib3RoIGVuZHMgb2YgdGhlIGxpbmUgd291bGQgYmUgbm90CiAgICAgICAgICAgIC0xIGFuZCAxIHJlc3BlY3RpdmVseSBidXQgKC0xLTEvdmlld3BvcnRfd2lkaCkgYW5kICgxLTEvdmlld3BvcnRfd2lkdGgpCiAgICAgICAgICAgIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBnbFRyYW5zbGF0ZWYoMC45IC8gc3RhdGVibG9jay0+dmlld3BvcnQuV2lkdGgsIC0wLjkgLyBzdGF0ZWJsb2NrLT52aWV3cG9ydC5IZWlnaHQsIDApOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbFRyYW5zbGF0ZWYgKDAuOSAvIHdpZHRoLCAtMC45IC8gaGVpZ2h0LCAwKSIpOwoKICAgICAgICAvKiBEM0QgdGV4dHVyZSBjb29yZGluYXRlcyBhcmUgZmxpcHBlZCBjb21wYXJlZCB0byBPcGVuR0wgb25lcywgc28KICAgICAgICAgICAgKiByZW5kZXIgZXZlcnl0aGluZyB1cHNpZGUgZG93biB3aGVuIHJlbmRlcmluZyBvZmZzY3JlZW4uICovCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnJlbmRlcl9vZmZzY3JlZW4pIHsKICAgICAgICAgICAgZ2xNdWx0TWF0cml4ZihpbnZ5bWF0KTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsTXVsdE1hdHJpeGYoaW52eW1hdCkiKTsKICAgICAgICB9CiAgICAgICAgZ2xNdWx0TWF0cml4ZigoZmxvYXQgKikgJnN0YXRlYmxvY2stPnRyYW5zZm9ybXNbV0lORUQzRFRTX1BST0pFQ1RJT05dLnUubVswXVswXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTG9hZE1hdHJpeGYiKTsKICAgIH0KfQoKLyogVGhpcyBzaG91bGQgbWF0Y2ggYW55IGFycmF5cyBsb2FkZWQgaW4gbG9hZFZlcnRleERhdGEuCiAqIHN0YXRlYmxvY2sgaW1wbCBpcyByZXF1aXJlZCBmb3IgR0xfU1VQUE9SVAogKiBUT0RPOiBPbmx5IGxvYWQgLyB1bmxvYWQgYXJyYXlzIGlmIHdlIGhhdmUgdG8uCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2FkVmVydGV4RGF0YShJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrKSB7CiAgICBpbnQgdGV4dHVyZV9pZHg7CgogICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSk7CiAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSk7CiAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1NFQ09OREFSWV9DT0xPUl9BUlJBWV9FWFQpOwogICAgfQogICAgZm9yICh0ZXh0dXJlX2lkeCA9IDA7IHRleHR1cmVfaWR4IDwgR0xfTElNSVRTKHRleHR1cmVzKTsgKyt0ZXh0dXJlX2lkeCkgewogICAgICAgIEdMX0VYVENBTEwoZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIHRleHR1cmVfaWR4KSk7CiAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CiAgICB9Cn0KCi8qIFRoaXMgc2hvdWxkIG1hdGNoIGFueSBhcnJheXMgbG9hZGVkIGluIGxvYWROdW1iZXJlZEFycmF5cwogKiBUT0RPOiBPbmx5IGxvYWQgLyB1bmxvYWQgYXJyYXlzIGlmIHdlIGhhdmUgdG8uCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2FkTnVtYmVyZWRBcnJheXMoSVdpbmVEM0RTdGF0ZUJsb2NrSW1wbCAqc3RhdGVibG9jaykgewogICAgLyogZGlzYWJsZSBhbnkgYXR0cmlicyAodGhpcyBpcyB0aGUgc2FtZSBmb3IgYm90aCBHTFNMIGFuZCBBUkIgbW9kZXMpICovCiAgICBHTGludCBtYXhBdHRyaWJzOwogICAgaW50IGk7CgogICAgLyogTGVhdmUgYWxsIHRoZSBhdHRyaWJzIGRpc2FibGVkICovCiAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfQVRUUklCU19BUkIsICZtYXhBdHRyaWJzKTsKICAgIC8qIE1FU0EgZG9lcyBub3Qgc3VwcG9ydCBpdCByaWdodCBub3QgKi8KICAgIGlmIChnbEdldEVycm9yKCkgIT0gR0xfTk9fRVJST1IpCiAgICAgICAgbWF4QXR0cmlicyA9IDE2OwogICAgZm9yIChpID0gMDsgaSA8IG1heEF0dHJpYnM7ICsraSkgewogICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihyZWcpOyIpOwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbG9hZE51bWJlcmVkQXJyYXlzKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzdHJpZGVkKSB7CiAgICBHTGludCBjdXJWQk8gPSBHTF9TVVBQT1JUKEFSQl9WRVJURVhfQlVGRkVSX09CSkVDVCkgPyAtMSA6IDA7CiAgICBpbnQgaTsKICAgIFVJTlQgKm9mZnNldCA9IHN0YXRlYmxvY2stPnN0cmVhbU9mZnNldDsKCiAgICAvKiBEZWZhdWx0IHRvIG5vIGluc3RhbmNpbmcgKi8KICAgIHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPmluc3RhbmNlZERyYXcgPSBGQUxTRTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0FUVFJJQlM7IGkrKykgewoKICAgICAgICBpZiAoIXN0cmlkZWQtPnUuaW5wdXRbaV0ubHBEYXRhICYmICFzdHJpZGVkLT51LmlucHV0W2ldLlZCTykKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgIC8qIERvIG5vdCBsb2FkIGluc3RhbmNlIGRhdGEuIEl0IHdpbGwgYmUgc3BlY2lmaWVkIHVzaW5nIGdsVGV4Q29vcmQgYnkgZHJhd3ByaW0gKi8KICAgICAgICBpZihzdGF0ZWJsb2NrLT5zdHJlYW1GbGFnc1tzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSAmIFdJTkVEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXlBUkIoaSkpOwogICAgICAgICAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gVFJVRTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBUUkFDRV8oZDNkX3NoYWRlcikoIkxvYWRpbmcgYXJyYXkgJXUgW1ZCTz0ldV1cbiIsIGksIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKTsKCiAgICAgICAgaWYoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc3RyaWRlZC0+dS5pbnB1dFtpXS5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzdHJpZGVkLT51LmlucHV0W2ldLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliUG9pbnRlckFSQihpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfTk9STUFMSVpFRChzdHJpZGVkLT51LmlucHV0W2ldLmR3VHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVkLT51LmlucHV0W2ldLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1N0cmlkZSArIG9mZnNldFtzdHJpZGVkLT51LmlucHV0W2ldLnN0cmVhbU5vXSkgKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5QVJCKGkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBTdHJpZGUgPSAwIG1lYW5zIGFsd2F5cyB0aGUgc2FtZSB2YWx1ZXMuIGdsVmVydGV4QXR0cmliUG9pbnRlckFSQiBkb2Vzbid0IGRvIHRoYXQuIEluc3RlYWQgZGlzYWJsZSB0aGUgcG9pbnRlciBhbmQKICAgICAgICAgICAgICogc2V0IHVwIHRoZSBhdHRyaWJ1dGUgc3RhdGljYWxseS4gQnV0IHdlIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgc3lzdGVtIG1lbW9yeSBhZGRyZXNzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgQllURSAqcHRyID0gc3RyaWRlZC0+dS5pbnB1dFtpXS5scERhdGEgKyBvZmZzZXRbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgIGlmKHN0cmlkZWQtPnUuaW5wdXRbaV0uVkJPKSB7CiAgICAgICAgICAgICAgICBJV2luZUQzRFZlcnRleEJ1ZmZlckltcGwgKnZiID0gKElXaW5lRDNEVmVydGV4QnVmZmVySW1wbCAqKSBzdGF0ZWJsb2NrLT5zdHJlYW1Tb3VyY2Vbc3RyaWRlZC0+dS5pbnB1dFtpXS5zdHJlYW1Ob107CiAgICAgICAgICAgICAgICBwdHIgKz0gKGxvbmcpIHZiLT5yZXNvdXJjZS5hbGxvY2F0ZWRNZW1vcnk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgR0xfRVhUQ0FMTChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheUFSQihpKSk7CgogICAgICAgICAgICBzd2l0Y2goc3RyaWRlZC0+dS5pbnB1dFtpXS5kd1R5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMToKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMWZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliMmZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMzoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliM2Z2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNGZ2QVJCKGksIChmbG9hdCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VQllURTQ6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjROdWJ2QVJCKGksIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVUJZVEU0TjoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0QzRENPTE9SOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVidkFSQihpLCBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9TSE9SVDI6CiAgICAgICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbFZlcnRleEF0dHJpYjRzdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUNDoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNHN2QVJCKGksIChHTHNob3J0ICopIHB0cikpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1NIT1JUMk46CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0xzaG9ydCBzWzRdID0geygoc2hvcnQgKikgcHRyKVswXSwgKChzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCBzKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9VU0hPUlQyTjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHTHVzaG9ydCBzWzRdID0geygodW5zaWduZWQgc2hvcnQgKikgcHRyKVswXSwgKCh1bnNpZ25lZCBzaG9ydCAqKSBwdHIpWzFdLCAwLCAxfTsKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE51c3ZBUkIoaSwgcykpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfU0hPUlQ0TjoKICAgICAgICAgICAgICAgICAgICBHTF9FWFRDQUxMKGdsVmVydGV4QXR0cmliNE5zdkFSQihpLCAoR0xzaG9ydCAqKSBwdHIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX1VTSE9SVDROOgogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhBdHRyaWI0TnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVURFQzM6CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfVURFQzNcbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzdXN2QVJCKGksIChHTHVzaG9ydCAqKSBwdHIpOyBEb2VzIG5vdCBleGlzdCAqLwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfREVDM046CiAgICAgICAgICAgICAgICAgICAgRklYTUUoIlVuc3VyZSBhYm91dCBXSU5FRDNEREVDTFRZUEVfREVDM05cbiIpOwogICAgICAgICAgICAgICAgICAgIC8qZ2xWZXJ0ZXhBdHRyaWIzTnVzdkFSQihpLCAoR0x1c2hvcnQgKikgcHRyKTsgRG9lcyBub3QgZXhpc3QgKi8KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFdJTkVEM0RERUNMVFlQRV9GTE9BVDE2XzI6CiAgICAgICAgICAgICAgICAgICAgLyogQXJlIHRob3NlIDE2IGJpdCBmbG9hdHMuIEMgZG9lc24ndCBoYXZlIGEgMTYgYml0IGZsb2F0IHR5cGUuIEkgY291bGQgcmVhZCB0aGUgc2luZ2xlIGJpdHMgYW5kIGNhbGN1bGF0ZSBhIDQKICAgICAgICAgICAgICAgICAgICAgKiBieXRlIGZsb2F0IGFjY29yZGluZyB0byB0aGUgSUVFRSBzdGFuZGFyZAogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJVbnN1cHBvcnRlZCBXSU5FRDNEREVDTFRZUEVfRkxPQVQxNl8yXG4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNDoKICAgICAgICAgICAgICAgICAgICBGSVhNRSgiVW5zdXBwb3J0ZWQgV0lORUQzRERFQ0xUWVBFX0ZMT0FUMTZfNFxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBXSU5FRDNEREVDTFRZUEVfVU5VU0VEOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24gaW4gc3RyaWRlIDAgYXR0cmlidXRlc1xuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovKiBVc2VkIGZyb20gMiBkaWZmZXJlbnQgZnVuY3Rpb25zLCBhbmQgdG9vIGJpZyB0byBqdXN0aWZ5IG1ha2luZyBpdCBpbmxpbmVkICovCnN0YXRpYyB2b2lkIGxvYWRWZXJ0ZXhEYXRhKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpzZCkgewogICAgdW5zaWduZWQgaW50IHRleHR1cmVObyAgID0gMDsKICAgIFVJTlQgKm9mZnNldCA9IHN0YXRlYmxvY2stPnN0cmVhbU9mZnNldDsKICAgIEdMaW50IGN1clZCTyA9IEdMX1NVUFBPUlQoQVJCX1ZFUlRFWF9CVUZGRVJfT0JKRUNUKSA/IC0xIDogMDsKICAgIHVuc2lnbmVkIGludCBtYXBwZWRfc3RhZ2UgPSAwOwoKICAgIFRSQUNFKCJVc2luZyBmYXN0IHZlcnRleCBhcnJheSBjb2RlXG4iKTsKCiAgICAvKiBUaGlzIGlzIGZpeGVkIGZ1bmN0aW9uIHBpcGVsaW5lIG9ubHksIGFuZCB0aGUgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmUgZG9lc24ndCBkbyBpbnN0YW5jaW5nICovCiAgICBzdGF0ZWJsb2NrLT53aW5lRDNERGV2aWNlLT5pbnN0YW5jZWREcmF3ID0gRkFMU0U7CgogICAgLyogQmxlbmQgRGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBpZiggKHNkLT51LnMuYmxlbmRXZWlnaHRzLmxwRGF0YSkgfHwgKHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTykgfHwKICAgICAgICAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMubHBEYXRhKSB8fCAoc2QtPnUucy5ibGVuZE1hdHJpeEluZGljZXMuVkJPKSApIHsKCgogICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9WRVJURVhfQkxFTkQpKSB7CgojaWYgMQogICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1dFSUdIVF9BUlJBWV9BUkIpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9XRUlHSFRfQVJSQVlfQVJCKSIpOwojZW5kaWYKCiAgICAgICAgICAgIFRSQUNFKCJCbGVuZCAlZCAlcCAlZFxuIiwgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlLCBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLmJsZW5kV2VpZ2h0cy5zdHJlYW1Ob10pOwogICAgICAgICAgICAvKiBGSVhNRSgiVE9ET1xuIik7Ki8KICAgICAgICAgICAgLyogTm90ZSBkd1R5cGUgPT0gZmxvYXQzIG9yIGZsb2F0NCA9PSAyIG9yIDMgKi8KCiNpZiAwCiAgICAgICAgICAgIC8qIHdpdGggdGhpcyBvbiwgdGhlIG5vcm1hbHMgYXBwZWFyIHRvIGJlIGJlaW5nIG1vZGlmaWVkLAogICAgICAgICAgICAgICBidXQgdGhlIHZlcnRpY2VzIGFyZW4ndCBiZWluZyB0cmFuc2xhdGVkIGFzIHRoZXkgc2hvdWxkIGJlCiAgICAgICAgICAgICAgIE1heWJlIHRoZSB3b3JsZCBtYXRyaXggYXJlbid0IGJlaW5nIHNldHVwIHByb3Blcmx5PyAqLwogICAgICAgICAgICBnbFZlcnRleEJsZW5kQVJCKFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSArIDEpOwojZW5kaWYKCgogICAgICAgICAgICBWVFJBQ0UoKCJnbFdlaWdodFBvaW50ZXJBUkIoJWQsIEdMX0ZMT0FULCAlZCwgJXApXG4iLAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpICwKICAgICAgICAgICAgICAgIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuYmxlbmRXZWlnaHRzLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuYmxlbmRXZWlnaHRzLnN0cmVhbU5vXSkpOwoKICAgICAgICAgICAgaWYoY3VyVkJPICE9IHNkLT51LnMuYmxlbmRXZWlnaHRzLlZCTykgewogICAgICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5ibGVuZFdlaWdodHMuVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5WQk87CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xXZWlnaHRQb2ludGVyQVJCKSgKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSwKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy5ibGVuZFdlaWdodHMuc3RyZWFtTm9dKTsKCiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFdlaWdodFBvaW50ZXJBUkIiKTsKCiAgICAgICAgICAgIGlmKChzZC0+dS5zLmJsZW5kTWF0cml4SW5kaWNlcy5scERhdGEpIHx8IChzZC0+dS5zLmJsZW5kTWF0cml4SW5kaWNlcy5WQk8pKXsKICAgICAgICAgICAgICAgIHN0YXRpYyBCT09MIHNob3dmaXhtZSA9IFRSVUU7CiAgICAgICAgICAgICAgICBpZihzaG93Zml4bWUpewogICAgICAgICAgICAgICAgICAgIEZJWE1FKCJibGVuZE1hdHJpeEluZGljZXMgc3VwcG9ydFxuIik7CiAgICAgICAgICAgICAgICAgICAgc2hvd2ZpeG1lID0gRkFMU0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIGlmIChHTF9TVVBQT1JUKEVYVF9WRVJURVhfV0VJR0hUSU5HKSkgewogICAgICAgICAgICAvKiBGSVhNRSgiVE9ET1xuIik7Ki8KI2lmIDAKCiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xWZXJ0ZXhXZWlnaHRQb2ludGVyRVhUKSgKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX1NJWkUoc2QtPnUucy5ibGVuZFdlaWdodHMuZHdUeXBlKSwKICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLmJsZW5kV2VpZ2h0cy5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5ibGVuZFdlaWdodHMuZHdTdHJpZGUpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xWZXJ0ZXhXZWlnaHRQb2ludGVyRVhUKG51bUJsZW5kcywgLi4uKSIpOwogICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9XRUlHSFRfQVJSQVlfRVhUKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpIik7CiNlbmRpZgoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBUT0RPOiBzdXBwb3J0IGJsZW5kcyBpbiBkcmF3U3RyaWRlZFNsb3cKICAgICAgICAgICAgICogTm8gbmVlZCB0byB3cml0ZSBhIEZJWE1FIGhlcmUsIHRoaXMgaXMgZG9uZSBhZnRlciB0aGUgZ2VuZXJhbCB2ZXJ0ZXggZGVjbCBkZWNvZGluZwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgV0FSTigidW5zdXBwb3J0ZWQgYmxlbmRpbmcgaW4gb3BlbkdsXG4iKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChHTF9TVVBQT1JUKEFSQl9WRVJURVhfQkxFTkQpKSB7CiNpZiAwICAgIC8qIFRPRE86IFZlcnRleCBibGVuZGluZyAqLwogICAgICAgICAgICBnbERpc2FibGUoR0xfVkVSVEVYX0JMRU5EX0FSQik7CiNlbmRpZgogICAgICAgICAgICBUUkFDRSgiQVJCX1ZFUlRFWF9CTEVORFxuIik7CiAgICAgICAgfSBlbHNlIGlmIChHTF9TVVBQT1JUKEVYVF9WRVJURVhfV0VJR0hUSU5HKSkgewogICAgICAgICAgICBUUkFDRSgiIEVYVF9WRVJURVhfV0VJR0hUSU5HXG4iKTsKICAgICAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpOwogICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX1dFSUdIVF9BUlJBWV9FWFQpIik7CgogICAgICAgIH0KICAgIH0KCiNpZiAwIC8qIEZPRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBpZiAoc2QtPnUucy5mb2cubHBEYXRhIHx8IHNkLT51LnMuZm9nLlZCTykgewogICAgICAgIC8qIFRPRE86IGZvZyovCiAgICBpZiAoR0xfU1VQUE9SVChFWFRfRk9HX0NPT1JEKSB7CiAgICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgICAgIChHTF9FWFRDQUxMKShGb2dDb29yZFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuZm9nLmR3VHlwZSksCiAgICAgICAgICAgICAgICBzZC0+dS5zLmZvZy5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMuZm9nLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLmZvZy5kd1N0cmlkZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyogZG9uJ3QgYm90aGVyIGZhbGxpbmcgYmFjayB0byAnc2xvdycgYXMgd2UgZG9uJ3Qgc3VwcG9ydCBzb2Z0d2FyZSBGT0cgeWV0LiAqLwogICAgICAgICAgICAvKiBGSVhNRTogZml4bWUgb25jZSAqLwogICAgICAgICAgICBUUkFDRSgiSGFyZHdhcmUgc3VwcG9ydCBmb3IgRk9HIGlzIG5vdCBhdmFpYWJsZSwgRk9HIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUFJUKEVYVF9GT1JfQ09PUkQpIHsKICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBmb2cgaXMgZGlzYWJsZWQgKi8KICAgICAgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX0ZPR19DT09SRElOQVRFX0VYVCk7CiAgICAgICAgfQogICAgfQojZW5kaWYKCiNpZiAwIC8qIHRhbmdlbnRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnRhbmdlbnQubHBEYXRhIHx8IHNkLT51LnMudGFuZ2VudC5WQk8gfHwKICAgICAgICBzZC0+dS5zLmJpbm9ybWFsLmxwRGF0YSB8fCBzZC0+dS5zLmJpbm9ybWFsLlZCTykgewogICAgICAgIC8qIFRPRE86IHRhbmdlbnRzKi8KICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICBpZiAoc2QtPnUucy50YW5nZW50LmxwRGF0YSB8fCBzZC0+dS5zLnRhbmdlbnQuVkJPKSB7CiAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoVGFuZ2VudFBvaW50ZXJFWFQpKAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRhbmdlbnQuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50YW5nZW50LmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRhbmdlbnQuZHdTdHJpZGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9UQU5HRU5UX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNkLT51LnMuYmlub3JtYWwubHBEYXRhIHx8IHNkLT51LnMuYmlub3JtYWwuVkJPKSB7CiAgICAgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgICAgICAgICAoR0xfRVhUQ0FMTCkoQmlub3JtYWxQb2ludGVyRVhUKSgKICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfR0xUWVBFKHNkLT51LnMuYmlub3JtYWwuZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2QtPnUucy5iaW5vcm1hbC5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5iaW5vcm1hbC5kd1N0cmlkZSk7CiAgICAgICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfQklOT1JNQUxfQVJSQVlfRVhUKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiBkb24ndCBib3RoZXIgZmFsbGluZyBiYWNrIHRvICdzbG93JyBhcyB3ZSBkb24ndCBzdXBwb3J0IHNvZnR3YXJlIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgeWV0IC4gKi8KICAgICAgICAgICAgLyogRklYTUU6IGZpeG1lIG9uY2UgKi8KICAgICAgICAgICAgVFJBQ0UoIkhhcmR3YXJlIHN1cHBvcnQgZm9yIHRhbmdlbnRzIGFuZCBiaW5vcm1hbHMgaXMgbm90IGF2YWlhYmxlLCB0YW5nZW50cyBhbmQgYmlub3JtYWxzIGRpc2FibGVkLlxuIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfQ09PUkRJTkFURV9GUkFNRSkgewogICAgICAgICAgICAgLyogbWFrZSBzdXJlIGZvZyBpcyBkaXNhYmxlZCAqLwogICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX1RBTkdFTlRfQVJSQVlfRVhUKTsKICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9CSU5PUk1BTF9BUlJBWV9FWFQpOwogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLyogUG9pbnQgU2l6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLnBTaXplLmxwRGF0YSB8fCBzZC0+dS5zLnBTaXplLlZCTykgewoKICAgICAgICAvKiBubyBzdWNoIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpeGVkIGZ1bmN0aW9uIEdMIHBpcGVsaW5lICovCiAgICAgICAgVFJBQ0UoIkNhbm5vdCBjaGFuZ2UgcHRTaXplIGhlcmUgaW4gb3BlbkdsXG4iKTsKICAgICAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpbiB1c2luZyBzaGFkZXJzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSAqLwoKICAgIH0KCiAgICAvKiBWZXJ0ZXggUG9pbnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMucG9zaXRpb24ubHBEYXRhICE9IE5VTEwgfHwgc2QtPnUucy5wb3NpdGlvbi5WQk8gIT0gMCkgewogICAgICAgIC8qIE5vdGUgZHdUeXBlID09IGZsb2F0MyBvciBmbG9hdDQgPT0gMiBvciAzICovCiAgICAgICAgVlRSQUNFKCgiZ2xWZXJ0ZXhQb2ludGVyKCVkLCBHTF9GTE9BVCwgJWQsICVwKVxuIiwKICAgICAgICAgICAgICAgIHNkLT51LnMucG9zaXRpb24uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSArIDEsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnBvc2l0aW9uLmxwRGF0YSkpOwoKICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5wb3NpdGlvbi5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5wb3NpdGlvbi5WQk8pKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnBvc2l0aW9uLlZCTzsKICAgICAgICB9CgogICAgICAgIC8qIG1pbihXSU5FRDNEX0FUUl9TSVpFKHBvc2l0aW9uKSwzKSB0byBEaXNhYmxlIFJIVyBtb2RlIGFzICd3JyBjb29yZAogICAgICAgICAgIGhhbmRsaW5nIGZvciByaHcgbW9kZSBzaG91bGQgbm90IGltcGFjdCBzY3JlZW4gcG9zaXRpb24gd2hlcmVhcyBpbiBHTCBpdCBkb2VzLgogICAgICAgICAgIFRoaXMgbWF5ICByZXN1bHQgaW4gdmVyeSBzbGlnaHRseSBkaXN0b3JlZCB0ZXh0dXJlcyBpbiByaHcgbW9kZSwgYnV0CiAgICAgICAgICAgYSB2ZXJ5IG1pbmltYWwgZGlmZmVyZW50LiBUaGVyZSdzIGFsd2F5cyB0aGUgb3RoZXIgb3B0aW9uIG9mCiAgICAgICAgICAgZml4aW5nIHRoZSB2aWV3IG1hdHJpeCB0byBwcmV2ZW50IHcgZnJvbSBoYXZpbmcgYW55IGVmZmVjdAoKICAgICAgICAgICBUaGlzIG9ubHkgYXBwbGllcyB0byB1c2VyIHBvaW50ZXIgc291cmNlcywgaW4gVkJPcyB0aGUgdmVydGljZXMgYXJlIGZpeGVkIHVwCiAgICAgICAgICovCiAgICAgICAgaWYoc2QtPnUucy5wb3NpdGlvbi5WQk8gPT0gMCkgewogICAgICAgICAgICBnbFZlcnRleFBvaW50ZXIoMyAvKiBtaW4oV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksMykgKi8sCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xWZXJ0ZXhQb2ludGVyKAogICAgICAgICAgICAgICAgV0lORUQzRF9BVFJfU0laRShzZC0+dS5zLnBvc2l0aW9uLmR3VHlwZSksCiAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9HTFRZUEUoc2QtPnUucy5wb3NpdGlvbi5kd1R5cGUpLAogICAgICAgICAgICAgICAgc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSwgc2QtPnUucy5wb3NpdGlvbi5scERhdGEgKyBzdGF0ZWJsb2NrLT5sb2FkQmFzZVZlcnRleEluZGV4ICogc2QtPnUucy5wb3NpdGlvbi5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLnBvc2l0aW9uLnN0cmVhbU5vXSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrR0xjYWxsKCJnbFZlcnRleFBvaW50ZXIoLi4uKSIpOwogICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpIik7CgogICAgfSBlbHNlIHsKICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpIik7CiAgICB9CgogICAgLyogTm9ybWFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgIGlmIChzZC0+dS5zLm5vcm1hbC5scERhdGEgfHwgc2QtPnUucy5ub3JtYWwuVkJPKSB7CiAgICAgICAgLyogTm90ZSBkd1R5cGUgPT0gZmxvYXQzIG9yIGZsb2F0NCA9PSAyIG9yIDMgKi8KICAgICAgICBWVFJBQ0UoKCJnbE5vcm1hbFBvaW50ZXIoR0xfRkxPQVQsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgICAgIHNkLT51LnMubm9ybWFsLmxwRGF0YSkpOwogICAgICAgIGlmKGN1clZCTyAhPSBzZC0+dS5zLm5vcm1hbC5WQk8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbEJpbmRCdWZmZXJBUkIoR0xfQVJSQVlfQlVGRkVSX0FSQiwgc2QtPnUucy5ub3JtYWwuVkJPKSk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbEJpbmRCdWZmZXJBUkIiKTsKICAgICAgICAgICAgY3VyVkJPID0gc2QtPnUucy5ub3JtYWwuVkJPOwogICAgICAgIH0KICAgICAgICBnbE5vcm1hbFBvaW50ZXIoCiAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLm5vcm1hbC5kd1R5cGUpLAogICAgICAgICAgICBzZC0+dS5zLm5vcm1hbC5kd1N0cmlkZSwKICAgICAgICAgICAgc2QtPnUucy5ub3JtYWwubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMubm9ybWFsLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMubm9ybWFsLnN0cmVhbU5vXSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsTm9ybWFsUG9pbnRlciguLi4pIik7CiAgICAgICAgZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9OT1JNQUxfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSkiKTsKCiAgICB9IGVsc2UgewogICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSk7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX05PUk1BTF9BUlJBWSkiKTsKICAgICAgICBnbE5vcm1hbDNmKDAsIDAsIDEpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbE5vcm1hbDNmKDAsIDAsIDEpIik7CiAgICB9CgogICAgLyogRGlmZnVzZSBDb2xvdXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgLyogIFdBUk5JTkc6IERhdGEgaGVyZSBNVVNUIGJlIGluIFJHQkEgZm9ybWF0LCBzbyBjYW5ub3QgICAgICAqLwogICAgLyogICAgIGdvIGRpcmVjdGx5IGludG8gZmFzdCBtb2RlIGZyb20gYXBwIHBnbSwgYmVjYXVzZSAgICAgICAqLwogICAgLyogICAgIGRpcmVjdHggcmVxdWlyZXMgZGF0YSBpbiBCR1JBIGZvcm1hdC4gICAgICAgICAgICAgICAgICAqLwogICAgLyogY3VycmVudGx5IGZpeHVwVmVydGljZXMgc3dpemVscyB0aGUgZm9ybWF0LCBidXQgdGhpcyBpc24ndCAqLwogICAgLyogdmVyeSBwcmFjdGljYWwgd2hlbiB1c2luZyBWQk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgLyogTk9URTogVW5sZXNzIHdlIHdyaXRlIGEgdmVydGV4IHNoYWRlciB0byBzd2l6ZWwgdGhlIGNvbG91ciAqLwogICAgLyogLCBvciB0aGUgdXNlciBkb2Vzbid0IGNhcmUgYW5kIHdhbnRzIHRoZSBzcGVlZCBhZHZhbnRhZ2UgICAqLwoKICAgIGlmIChzZC0+dS5zLmRpZmZ1c2UubHBEYXRhIHx8IHNkLT51LnMuZGlmZnVzZS5WQk8pIHsKICAgICAgICAvKiBOb3RlIGR3VHlwZSA9PSBmbG9hdDMgb3IgZmxvYXQ0ID09IDIgb3IgMyAqLwogICAgICAgIFZUUkFDRSgoImdsQ29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UuZHdTdHJpZGUsCiAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UubHBEYXRhKSk7CgogICAgICAgIGlmKGN1clZCTyAhPSBzZC0+dS5zLmRpZmZ1c2UuVkJPKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMuZGlmZnVzZS5WQk8pKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQmluZEJ1ZmZlckFSQiIpOwogICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLmRpZmZ1c2UuVkJPOwogICAgICAgIH0KICAgICAgICBnbENvbG9yUG9pbnRlcig0LCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICAgIHNkLT51LnMuZGlmZnVzZS5kd1N0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLmRpZmZ1c2UubHBEYXRhICsgc3RhdGVibG9jay0+bG9hZEJhc2VWZXJ0ZXhJbmRleCAqIHNkLT51LnMuZGlmZnVzZS5kd1N0cmlkZSArIG9mZnNldFtzZC0+dS5zLmRpZmZ1c2Uuc3RyZWFtTm9dKTsKICAgICAgICBjaGVja0dMY2FsbCgiZ2xDb2xvclBvaW50ZXIoNCwgR0xfVU5TSUdORURfQllURSwgLi4uKSIpOwogICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfQ09MT1JfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbEVuYWJsZUNsaWVudFN0YXRlKEdMX0NPTE9SX0FSUkFZKSIpOwoKICAgIH0gZWxzZSB7CiAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfQ09MT1JfQVJSQVkpOwogICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9DT0xPUl9BUlJBWSkiKTsKICAgICAgICBnbENvbG9yNGYoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7CiAgICAgICAgY2hlY2tHTGNhbGwoImdsQ29sb3I0ZigxLCAxLCAxLCAxKSIpOwogICAgfQoKICAgIC8qIFNwZWN1bGFyIENvbG91ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgaWYgKHNkLT51LnMuc3BlY3VsYXIubHBEYXRhIHx8IHNkLT51LnMuc3BlY3VsYXIuVkJPKSB7CiAgICAgICAgVFJBQ0UoInNldHRpbmcgc3BlY3VsYXIgY29sb3VyXG4iKTsKICAgICAgICAvKiBOb3RlIGR3VHlwZSA9PSBmbG9hdDMgb3IgZmxvYXQ0ID09IDIgb3IgMyAqLwogICAgICAgIFZUUkFDRSgoImdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyKDQsIEdMX1VOU0lHTkVEX0JZVEUsICVkLCAlcClcbiIsCiAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgc2QtPnUucy5zcGVjdWxhci5scERhdGEpKTsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewogICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy5zcGVjdWxhci5WQk8pIHsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMuc3BlY3VsYXIuVkJPKSk7CiAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICBjdXJWQk8gPSBzZC0+dS5zLnNwZWN1bGFyLlZCTzsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3JQb2ludGVyRVhUKSg0LCBHTF9VTlNJR05FRF9CWVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnNwZWN1bGFyLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnNwZWN1bGFyLmR3U3RyaWRlICsgb2Zmc2V0W3NkLT51LnMuc3BlY3VsYXIuc3RyZWFtTm9dKTsKICAgICAgICAgICAgdmNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yUG9pbnRlckVYVCg0LCBHTF9VTlNJR05FRF9CWVRFLCAuLi4pIik7CiAgICAgICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIHZjaGVja0dMY2FsbCgiZ2xFbmFibGVDbGllbnRTdGF0ZShHTF9TRUNPTkRBUllfQ09MT1JfQVJSQVlfRVhUKSIpOwogICAgICAgIH0gZWxzZSB7CgogICAgICAgIC8qIE1pc3Npbmcgc3BlY3VsYXIgY29sb3IgaXMgbm90IGNyaXRpY2FsLCBubyB3YXJuaW5ncyAqLwogICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgICBpZiAoR0xfU1VQUE9SVChFWFRfU0VDT05EQVJZX0NPTE9SKSkgewoKICAgICAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbERpc2FibGVDbGllbnRTdGF0ZShHTF9TRUNPTkRBUllfQ09MT1JfQVJSQVlfRVhUKSIpOwogICAgICAgICAgICBHTF9FWFRDQUxMKGdsU2Vjb25kYXJ5Q29sb3IzZkVYVCkoMCwgMCwgMCk7CiAgICAgICAgICAgIGNoZWNrR0xjYWxsKCJnbFNlY29uZGFyeUNvbG9yM2ZFWFQoMCwgMCwgMCkiKTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLyogTWlzc2luZyBzcGVjdWxhciBjb2xvciBpcyBub3QgY3JpdGljYWwsIG5vIHdhcm5pbmdzICovCiAgICAgICAgICAgIFZUUkFDRSgoIlNwZWN1bGFyIGNvbG91ciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgR0wgaW1wbGVtZW50YXRpb25cbiIpKTsKICAgICAgICB9CiAgICB9CgogICAgLyogVGV4dHVyZSBjb29yZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgZm9yICh0ZXh0dXJlTm8gPSAwOyB0ZXh0dXJlTm8gPCBHTF9MSU1JVFModGV4dHVyZV9zdGFnZXMpOyArK3RleHR1cmVObykgewogICAgICAgIC8qIFRoZSBjb2RlIGJlbG93IHVzZXMgZ2xDbGllbnRBY3RpdmVUZXh0dXJlIGFuZCBnbE11bHRpVGV4Q29vcmQqIHdoaWNoIGFyZSBhbGwgcGFydCBvZiB0aGUgR0xfQVJCX211bHRpdGV4dHVyZSBleHRlbnNpb24uICovCiAgICAgICAgLyogQWJvcnQgaWYgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uLiAqLwogICAgICAgIGlmICghR0xfU1VQUE9SVChBUkJfTVVMVElURVhUVVJFKSkgewogICAgICAgICAgICBGSVhNRSgiUHJvZ3JhbSB1c2luZyBtdWx0aXBsZSBjb25jdXJyZW50IHRleHR1cmVzIHdoaWNoIHRoaXMgb3BlbmdsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlYmxvY2stPnRleHR1cmVzW3RleHR1cmVOb10gIT0gTlVMTCkgewogICAgICAgICAgICBpbnQgY29vcmRJZHggPSBzdGF0ZWJsb2NrLT50ZXh0dXJlU3RhdGVbdGV4dHVyZU5vXVtXSU5FRDNEVFNTX1RFWENPT1JESU5ERVhdOwoKICAgICAgICAgICAgbWFwcGVkX3N0YWdlID0gc3RhdGVibG9jay0+d2luZUQzRERldmljZS0+dGV4VW5pdE1hcFt0ZXh0dXJlTm9dOwogICAgICAgICAgICAvKiBUaGUgZ2wgdGV4dHVyZSB1bml0IHdpbGwgbmV2ZXIgYmUgLTEgZm9yIGEgYm91bmQgdGV4dHVyZSAqLwogICAgICAgICAgICBHTF9FWFRDQUxMKGdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQihHTF9URVhUVVJFMF9BUkIgKyBtYXBwZWRfc3RhZ2UpKTsKICAgICAgICAgICAgY2hlY2tHTGNhbGwoImdsQ2xpZW50QWN0aXZlVGV4dHVyZUFSQiIpOwoKICAgICAgICAgICAgaWYgKGNvb3JkSWR4ID49IE1BWF9URVhUVVJFUykgewogICAgICAgICAgICAgICAgVlRSQUNFKCgidGV4OiAlZCAtIFNraXAgdGV4IGNvb3JkcywgYXMgYmVpbmcgc3lzdGVtIGdlbmVyYXRlZFxuIiwgdGV4dHVyZU5vKSk7CiAgICAgICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xNdWx0aVRleENvb3JkNGZBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlLCAwLCAwLCAwLCAxKSk7CgogICAgICAgICAgICB9IGVsc2UgaWYgKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5scERhdGEgPT0gTlVMTCAmJiBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uVkJPID09IDApIHsKICAgICAgICAgICAgICAgIFZUUkFDRSgoIkJvdW5kIHRleHR1cmUgYnV0IG5vIHRleHR1cmUgY29vcmRpbmF0ZXMgc3VwcGxpZWQsIHNvIHNraXBwaW5nXG4iKSk7CiAgICAgICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xNdWx0aVRleENvb3JkNGZBUkIoR0xfVEVYVFVSRTBfQVJCICsgbWFwcGVkX3N0YWdlLCAwLCAwLCAwLCAxKSk7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVFJBQ0UoIlNldHRpbmcgdXAgdGV4dHVyZSAldSwgaWR4ICVkLCBjb3JkaW5keCAldSwgZGF0YSAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVObywgbWFwcGVkX3N0YWdlLCBjb29yZElkeCwgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLmxwRGF0YSk7CiAgICAgICAgICAgICAgICBpZihjdXJWQk8gIT0gc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTykgewogICAgICAgICAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xCaW5kQnVmZmVyQVJCKEdMX0FSUkFZX0JVRkZFUl9BUkIsIHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5WQk8pKTsKICAgICAgICAgICAgICAgICAgICBjaGVja0dMY2FsbCgiZ2xCaW5kQnVmZmVyQVJCIik7CiAgICAgICAgICAgICAgICAgICAgY3VyVkJPID0gc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLlZCTzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8qIFRoZSBjb29yZHMgdG8gc3VwcGx5IGRlcGVuZCBjb21wbGV0ZWx5IG9uIHRoZSBmdmYgLyB2ZXJ0ZXggc2hhZGVyICovCiAgICAgICAgICAgICAgICBnbFRleENvb3JkUG9pbnRlcigKICAgICAgICAgICAgICAgICAgICBXSU5FRDNEX0FUUl9TSVpFKHNkLT51LnMudGV4Q29vcmRzW2Nvb3JkSWR4XS5kd1R5cGUpLAogICAgICAgICAgICAgICAgICAgIFdJTkVEM0RfQVRSX0dMVFlQRShzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLmxwRGF0YSArIHN0YXRlYmxvY2stPmxvYWRCYXNlVmVydGV4SW5kZXggKiBzZC0+dS5zLnRleENvb3Jkc1tjb29yZElkeF0uZHdTdHJpZGUgKyBvZmZzZXRbc2QtPnUucy50ZXhDb29yZHNbY29vcmRJZHhdLnN0cmVhbU5vXSk7CiAgICAgICAgICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgICAgIEdMX0VYVENBTEwoZ2xDbGllbnRBY3RpdmVUZXh0dXJlQVJCKEdMX1RFWFRVUkUwX0FSQiArIHRleHR1cmVObykpOwogICAgICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbE11bHRpVGV4Q29vcmQ0ZkFSQihHTF9URVhUVVJFMF9BUkIgKyB0ZXh0dXJlTm8sIDAsIDAsIDAsIDEpKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoR0xfU1VQUE9SVChOVl9SRUdJU1RFUl9DT01CSU5FUlMpKSB7CiAgICAgICAgLyogVGhlIG51bWJlciBvZiB0aGUgbWFwcGVkIHN0YWdlcyBpbmNyZWFzZXMgbW9ub3RvbmljYWxseSwgc28gaXQncyBmaW5lIHRvIHVzZSB0aGUgbGFzdCB1c2VkIG9uZSAqLwogICAgICAgIGZvciAodGV4dHVyZU5vID0gbWFwcGVkX3N0YWdlICsgMTsgdGV4dHVyZU5vIDwgR0xfTElNSVRTKHRleHR1cmVzKTsgKyt0ZXh0dXJlTm8pIHsKICAgICAgICAgICAgR0xfRVhUQ0FMTChnbENsaWVudEFjdGl2ZVRleHR1cmVBUkIoR0xfVEVYVFVSRTBfQVJCICsgdGV4dHVyZU5vKSk7CiAgICAgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOwogICAgICAgICAgICBHTF9FWFRDQUxMKGdsTXVsdGlUZXhDb29yZDRmQVJCKEdMX1RFWFRVUkUwX0FSQiArIHRleHR1cmVObywgMCwgMCwgMCwgMSkpOwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIGlubGluZSB2b2lkIGRyYXdQcmltaXRpdmVUcmFjZURhdGFMb2NhdGlvbnMoCiAgICBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqZGF0YUxvY2F0aW9ucykgewoKICAgIC8qIER1bXAgb3V0IHdoYXQgcGFydHMgd2UgaGF2ZSBzdXBwbGllZCAqLwogICAgVFJBQ0UoIlN0cmlkZWQgRGF0YTpcbiIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHBvc2l0aW9uKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBibGVuZFdlaWdodHMpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGJsZW5kTWF0cml4SW5kaWNlcyk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgbm9ybWFsKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBwU2l6ZSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgZGlmZnVzZSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgc3BlY3VsYXIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1swXSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzFdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbMl0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1szXSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzRdKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXhDb29yZHNbNV0pOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRleENvb3Jkc1s2XSk7CiAgICBUUkFDRV9TVFJJREVEKChkYXRhTG9jYXRpb25zKSwgdGV4Q29vcmRzWzddKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBwb3NpdGlvbjIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIG5vcm1hbDIpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIHRhbmdlbnQpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGJpbm9ybWFsKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCB0ZXNzRmFjdG9yKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBmb2cpOwogICAgVFJBQ0VfU1RSSURFRCgoZGF0YUxvY2F0aW9ucyksIGRlcHRoKTsKICAgIFRSQUNFX1NUUklERUQoKGRhdGFMb2NhdGlvbnMpLCBzYW1wbGUpOwoKICAgIHJldHVybjsKfQoKLyogSGVscGVyIGZvciB2ZXJ0ZXhkZWNsYXJhdGlvbigpICovCnN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVTdHJlYW1zKElXaW5lRDNEU3RhdGVCbG9ja0ltcGwgKnN0YXRlYmxvY2ssIEJPT0wgdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24sIFdpbmVEM0RDb250ZXh0ICpjb250ZXh0KSB7CiAgICBJV2luZUQzRERldmljZUltcGwgKmRldmljZSA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2U7CiAgICBCT09MIGZpeHVwID0gRkFMU0U7CiAgICBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqZGF0YUxvY2F0aW9ucyA9ICZkZXZpY2UtPnN0cmlkZWRfc3RyZWFtczsKCiAgICBpZihkZXZpY2UtPnVwX3N0cmlkZWQpIHsKICAgICAgICAvKiBOb3RlOiB0aGlzIGlzIGEgZGRyYXcgZml4ZWQtZnVuY3Rpb24gY29kZSBwYXRoICovCiAgICAgICAgVFJBQ0UoIj09PT09PT09PT09PT09PT0gU3RyaWRlZCBJbnB1dCA9PT09PT09PT09PT09PT09PT09XG4iKTsKICAgICAgICBtZW1jcHkoZGF0YUxvY2F0aW9ucywgZGV2aWNlLT51cF9zdHJpZGVkLCBzaXplb2YoKmRhdGFMb2NhdGlvbnMpKTsKCiAgICAgICAgaWYoVFJBQ0VfT04oZDNkKSkgewogICAgICAgICAgICBkcmF3UHJpbWl0aXZlVHJhY2VEYXRhTG9jYXRpb25zKGRhdGFMb2NhdGlvbnMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoc3RhdGVibG9jay0+dmVydGV4RGVjbCkgewogICAgICAgIC8qIE5vdGU6IFRoaXMgaXMgYSBmaXhlZCBmdW5jdGlvbiBvciBzaGFkZXIgY29kZXBhdGguCiAgICAgICAgICogVGhpcyBtZWFucyBpdCBtdXN0IGhhbmRsZSBib3RoIHR5cGVzIG9mIHN0cmlkZWQgZGF0YS4KICAgICAgICAgKiBTaGFkZXJzIG11c3QgZ28gdGhyb3VnaCBoZXJlIHRvIHplcm8gdGhlIHN0cmlkZWQgZGF0YSwgZXZlbiBpZiB0aGV5CiAgICAgICAgICogZG9uJ3Qgc2V0IGFueSBkZWNsYXJhdGlvbiBhdCBhbGwKICAgICAgICAgKi8KICAgICAgICBUUkFDRSgiPT09PT09PT09PT09PT09PSBWZXJ0ZXggRGVjbGFyYXRpb24gID09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgICAgIG1lbXNldChkYXRhTG9jYXRpb25zLCAwLCBzaXplb2YoKmRhdGFMb2NhdGlvbnMpKTsKICAgICAgICBwcmltaXRpdmVEZWNsYXJhdGlvbkNvbnZlcnRUb1N0cmlkZWREYXRhKChJV2luZUQzRERldmljZSAqKSBkZXZpY2UsCiAgICAgICAgICAgICAgICB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiwgZGF0YUxvY2F0aW9ucywgJmZpeHVwKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLyogTm90ZTogVGhpcyBjb2RlcGF0aCBpcyBub3QgcmVhY2hhYmxlIGZyb20gZDNkOSAoc2VlIGZ2Zi0+ZGVjbDkgY29udmVyc2lvbikKICAgICAgICAgKiBJdCBpcyByZWFjaGFibGUgdGhyb3VnaCBkM2Q4LCBidXQgb25seSBmb3IgZml4ZWQtZnVuY3Rpb24uCiAgICAgICAgICogSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBmb3Igc2hhZGVycy4KICAgICAgICAgKi8KICAgICAgICBUUkFDRSgiPT09PT09PT09PT09PT09PSBGVkYgPT09PT09PT09PT09PT09PT09PVxuIik7CiAgICAgICAgbWVtc2V0KGRhdGFMb2NhdGlvbnMsIDAsIHNpemVvZigqZGF0YUxvY2F0aW9ucykpOwogICAgICAgIHByaW1pdGl2ZUNvbnZlcnRUb1N0cmlkZWREYXRhKChJV2luZUQzRERldmljZSAqKSBkZXZpY2UsIGRhdGFMb2NhdGlvbnMsICZmaXh1cCk7CiAgICAgICAgaWYoVFJBQ0VfT04oZDNkKSkgewogICAgICAgICAgICBkcmF3UHJpbWl0aXZlVHJhY2VEYXRhTG9jYXRpb25zKGRhdGFMb2NhdGlvbnMpOwogICAgICAgIH0KICAgICB9CgogICAgaWYgKGRhdGFMb2NhdGlvbnMtPnUucy5wb3NpdGlvbl90cmFuc2Zvcm1lZCkgewogICAgICAgIHVzZVZlcnRleFNoYWRlckZ1bmN0aW9uID0gRkFMU0U7CiAgICB9CgogICAgLyogVW5sb2FkIHRoZSBvbGQgYXJyYXlzIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXcgb25lcyB0byBnZXQgb2xkIGp1bmsgb3V0ICovCiAgICBpZihjb250ZXh0LT5udW1iZXJlZEFycmF5c0xvYWRlZCkgewogICAgICAgIHVubG9hZE51bWJlcmVkQXJyYXlzKHN0YXRlYmxvY2spOwogICAgICAgIGNvbnRleHQtPm51bWJlcmVkQXJyYXlzTG9hZGVkID0gRkFMU0U7CiAgICB9CiAgICBpZihjb250ZXh0LT5uYW1lZEFycmF5c0xvYWRlZCkgewogICAgICAgIHVubG9hZFZlcnRleERhdGEoc3RhdGVibG9jayk7CiAgICAgICAgY29udGV4dC0+bmFtZWRBcnJheXNMb2FkZWQgPSBGQUxTRTsKICAgIH0KCiAgICBpZih1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbikgewogICAgICAgIFRSQUNFKCJMb2FkaW5nIG51bWJlcmVkIGFycmF5c1xuIik7CiAgICAgICAgbG9hZE51bWJlcmVkQXJyYXlzKHN0YXRlYmxvY2ssIGRhdGFMb2NhdGlvbnMpOwogICAgICAgIGRldmljZS0+dXNlRHJhd1N0cmlkZWRTbG93ID0gRkFMU0U7CiAgICAgICAgY29udGV4dC0+bnVtYmVyZWRBcnJheXNMb2FkZWQgPSBUUlVFOwogICAgfSBlbHNlIGlmIChmaXh1cCB8fAogICAgICAgICAgICAgICAoZGF0YUxvY2F0aW9ucy0+dS5zLnBTaXplLmxwRGF0YSA9PSBOVUxMICYmCiAgICAgICAgICAgICAgICBkYXRhTG9jYXRpb25zLT51LnMuZGlmZnVzZS5scERhdGEgPT0gTlVMTCAmJgogICAgICAgICAgICAgICAgZGF0YUxvY2F0aW9ucy0+dS5zLnNwZWN1bGFyLmxwRGF0YSA9PSBOVUxMKSkgewogICAgICAgIC8qIExvYWQgdGhlIHZlcnRleCBkYXRhIHVzaW5nIG5hbWVkIGFycmF5cyAqLwogICAgICAgIFRSQUNFKCJMb2FkaW5nIHZlcnRleCBkYXRhXG4iKTsKICAgICAgICBsb2FkVmVydGV4RGF0YShzdGF0ZWJsb2NrLCBkYXRhTG9jYXRpb25zKTsKICAgICAgICBkZXZpY2UtPnVzZURyYXdTdHJpZGVkU2xvdyA9IEZBTFNFOwogICAgICAgIGNvbnRleHQtPm5hbWVkQXJyYXlzTG9hZGVkID0gVFJVRTsKICAgIH0gZWxzZSB7CiAgICAgICAgVFJBQ0UoIk5vdCBsb2FkaW5nIHZlcnRleCBkYXRhXG4iKTsKICAgICAgICBkZXZpY2UtPnVzZURyYXdTdHJpZGVkU2xvdyA9IFRSVUU7CiAgICB9CgovKiBHZW5lcmF0ZSBzb21lIGZpeG1lJ3MgaWYgdW5zdXBwb3J0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1c2VkICovCiNkZWZpbmUgQlVGRkVSX09SX0RBVEEoX2F0dHJpYnV0ZSkgZGF0YUxvY2F0aW9ucy0+dS5zLl9hdHRyaWJ1dGUubHBEYXRhCiAgICAvKiBUT0RPOiBFaXRoZXIgc3VwcG9ydCBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgaW4gZml4dXBWZXJ0aWNlcyBvciBieSBjcmVhdGluZyBhIHNoYWRlciB0byByZXBsYWNlIHRoZSBwaXBlbGluZS4gKi8KICAgIGlmICghdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24gJiYKICAgICAgICBzdGF0ZWJsb2NrLT5yZW5kZXJTdGF0ZVtXSU5FRDNEUlNfVkVSVEVYQkxFTkRdICYmCiAgICAgICAgKEJVRkZFUl9PUl9EQVRBKGJsZW5kTWF0cml4SW5kaWNlcykgfHwgQlVGRkVSX09SX0RBVEEoYmxlbmRXZWlnaHRzKSkpIHsKICAgICAgICBGSVhNRSgiVmVydGV4IEJsZW5kaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgJXAgJXBcbiIsZGF0YUxvY2F0aW9ucy0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEsZGF0YUxvY2F0aW9ucy0+dS5zLmJsZW5kV2VpZ2h0cy5scERhdGEpOwogICAgICAgIC8qIFRPRE86IEltcGxlbWVudCBpdCB1c2luZyBHTF9BUkJfdmVydGV4X2JsZW5kIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiBkcmF3U3RyaWRlZFNsb3cgKi8KICAgIH0KICAgIGlmICghdXNlVmVydGV4U2hhZGVyRnVuY3Rpb24gJiYgKEJVRkZFUl9PUl9EQVRBKHBvc2l0aW9uMikgfHwgQlVGRkVSX09SX0RBVEEobm9ybWFsMikpKSB7CiAgICAgICAgRklYTUUoIlR3ZWVuaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCB2ZXJ0ZXggc2hhZGVyc1xuIik7CiAgICB9CiAgICBpZiAoIXVzZVZlcnRleFNoYWRlckZ1bmN0aW9uICYmIChCVUZGRVJfT1JfREFUQSh0YW5nZW50KSB8fCBCVUZGRVJfT1JfREFUQShiaW5vcm1hbCkpKSB7CiAgICAgICAgRklYTUUoIlRhbmdlbnQgYW5kIGJpbm9ybWFsIGJ1bXAgbWFwcGluZyBpcyBvbmx5IHZhbGlkIHdpdGggdmVydGV4IHNoYWRlcnNcbiIpOwogICAgfQogICAgaWYgKCF1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiAmJiAoQlVGRkVSX09SX0RBVEEodGVzc0ZhY3RvcikgfHwgQlVGRkVSX09SX0RBVEEoZm9nKSB8fCBCVUZGRVJfT1JfREFUQShkZXB0aCkgfHwgQlVGRkVSX09SX0RBVEEoc2FtcGxlKSkpIHsKICAgICAgICBGSVhNRSgiRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgb25seSB2YWxpZCB3aXRoIHZlcnRleCBzaGFkZXJzXG4iKTsKICAgIH0KI3VuZGVmIEJVRkZFUl9PUl9EQVRBCn0KCnN0YXRpYyB2b2lkIHZlcnRleGRlY2xhcmF0aW9uKERXT1JEIHN0YXRlLCBJV2luZUQzRFN0YXRlQmxvY2tJbXBsICpzdGF0ZWJsb2NrLCBXaW5lRDNEQ29udGV4dCAqY29udGV4dCkgewogICAgQk9PTCB1c2VWZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IEZBTFNFLCB1cGRhdGVGb2cgPSBGQUxTRTsKICAgIEJPT0wgdXNlUGl4ZWxTaGFkZXJGdW5jdGlvbiA9IHN0YXRlYmxvY2stPndpbmVEM0REZXZpY2UtPnBzX3NlbGVjdGVkX21vZGUgIT0gU0hBREVSX05PTkUgJiYgc3RhdGVibG9jay0+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+dmJvKSk7CiAgICAgICAgfQogICAgfQp9Cgpjb25zdCBzdHJ1Y3QgU3RhdGVFbnRyeSBTdGF0ZVRhYmxlW10gPQp7CiAgICAgIC8qIFN0YXRlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aXZlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseSBmdW5jdGlvbiAqLwogICAgeyAvKiAwLCAgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxLCAgV0lORUQzRFJTX1RFWFRVUkVIQU5ETEUgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAyLCAgV0lORUQzRFJTX0FOVElBTElBUyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FOVElBTElBUyksICAgICAgICAgICAgICAgICAgc3RhdGVfYW50aWFsaWFzICAgICB9LAogICAgeyAvKiAzLCAgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0LCAgV0lORUQzRFJTX1RFWFRVUkVQRVJTUEVDVElWRSAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RFWFRVUkVQRVJTUEVDVElWRSksICAgICAgICAgc3RhdGVfcGVyc3BlY3RpdmUgICB9LAogICAgeyAvKiA1LCAgV0lORUQzRFJTX1dSQVBVICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVBVKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcHUgICAgICAgICB9LAogICAgeyAvKiA2LCAgV0lORUQzRFJTX1dSQVBWICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVBWKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcHYgICAgICAgICB9LAogICAgeyAvKiA3LCAgV0lORUQzRFJTX1pFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pFTkFCTEUpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfemVuYWJsZSAgICAgICB9LAogICAgeyAvKiA4LCAgV0lORUQzRFJTX0ZJTExNT0RFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZJTExNT0RFKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfZmlsbG1vZGUgICAgICB9LAogICAgeyAvKiA5LCAgV0lORUQzRFJTX1NIQURFTU9ERSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NIQURFTU9ERSksICAgICAgICAgICAgICAgICAgc3RhdGVfc2hhZGVtb2RlICAgICB9LAogICAgeyAvKiAxMCwgV0lORUQzRFJTX0xJTkVQQVRURVJOICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xJTkVQQVRURVJOKSwgICAgICAgICAgICAgICAgc3RhdGVfbGluZXBhdHRlcm4gICB9LAogICAgeyAvKiAxMSwgV0lORUQzRFJTX01PTk9FTkFCTEUgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01PTk9FTkFCTEUpLCAgICAgICAgICAgICAgICAgc3RhdGVfbW9ub2VuYWJsZSAgICB9LAogICAgeyAvKiAxMiwgV0lORUQzRFJTX1JPUDIgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1JPUDIpLCAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfcm9wMiAgICAgICAgICB9LAogICAgeyAvKiAxMywgV0lORUQzRFJTX1BMQU5FTUFTSyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BMQU5FTUFTSyksICAgICAgICAgICAgICAgICAgc3RhdGVfcGxhbmVtYXNrICAgICB9LAogICAgeyAvKiAxNCwgV0lORUQzRFJTX1pXUklURUVOQUJMRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pXUklURUVOQUJMRSksICAgICAgICAgICAgICAgc3RhdGVfendyaXRlbmFibGUgICB9LAogICAgeyAvKiAxNSwgV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAxNiwgV0lORUQzRFJTX0xBU1RQSVhFTCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xBU1RQSVhFTCksICAgICAgICAgICAgICAgICAgc3RhdGVfbGFzdHBpeGVsICAgICB9LAogICAgeyAvKiAxNywgV0lORUQzRFJTX1RFWFRVUkVNQUcgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxOCwgV0lORUQzRFJTX1RFWFRVUkVNSU4gICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAxOSwgV0lORUQzRFJTX1NSQ0JMRU5EICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyMCwgV0lORUQzRFJTX0RFU1RCTEVORCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyMSwgV0lORUQzRFJTX1RFWFRVUkVNQVBCTEVORCAgICAgICAgICAgICAgKi8gICAgICAwIC8qIEhhbmRsZWQgaW4gZGRyYXcgKi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiAyMiwgV0lORUQzRFJTX0NVTExNT0RFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NVTExNT0RFKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY3VsbG1vZGUgICAgICB9LAogICAgeyAvKiAyMywgV0lORUQzRFJTX1pGVU5DICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pGVU5DKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfemZ1bmMgICAgICAgICB9LAogICAgeyAvKiAyNCwgV0lORUQzRFJTX0FMUEhBUkVGICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAyNSwgV0lORUQzRFJTX0FMUEhBRlVOQyAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiAyNiwgV0lORUQzRFJTX0RJVEhFUkVOQUJMRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0RJVEhFUkVOQUJMRSksICAgICAgICAgICAgICAgc3RhdGVfZGl0aGVyZW5hYmxlICB9LAogICAgeyAvKiAyNywgV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiAyOCwgV0lORUQzRFJTX0ZPR0VOQUJMRSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAyOSwgV0lORUQzRFJTX1NQRUNVTEFSRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NQRUNVTEFSRU5BQkxFKSwgICAgICAgICAgICAgc3RhdGVfc3BlY3VsYXJlbmFibGV9LAogICAgeyAvKiAzMCwgV0lORUQzRFJTX1pWSVNJQkxFICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtc2RuICovLCAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKiAzMSwgV0lORUQzRFJTX1NVQlBJWEVMICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NVQlBJWEVMKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfc3VicGl4ZWwgICAgICB9LAogICAgeyAvKiAzMiwgV0lORUQzRFJTX1NVQlBJWEVMWCAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NVQlBJWEVMWCksICAgICAgICAgICAgICAgICAgc3RhdGVfc3VicGl4ZWx4ICAgICB9LAogICAgeyAvKiAzMywgV0lORUQzRFJTX1NUSVBQTEVEQUxQSEEgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NUSVBQTEVEQUxQSEEpLCAgICAgICAgICAgICAgc3RhdGVfc3RpcHBsZWRhbHBoYSB9LAogICAgeyAvKiAzNCwgV0lORUQzRFJTX0ZPR0NPTE9SICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0NPTE9SKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nY29sb3IgICAgICB9LAogICAgeyAvKiAzNSwgV0lORUQzRFJTX0ZPR1RBQkxFTU9ERSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzNiwgV0lORUQzRFJTX0ZPR1NUQVJUICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzNywgV0lORUQzRFJTX0ZPR0VORCAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKiAzOCwgV0lORUQzRFJTX0ZPR0RFTlNJVFkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0RFTlNJVFkpLCAgICAgICAgICAgICAgICAgc3RhdGVfZm9nZGVuc2l0eSAgICB9LAogICAgeyAvKiAzOSwgV0lORUQzRFJTX1NUSVBQTEVFTkFCTEUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NUSVBQTEVFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RpcHBsZWVuYWJsZSB9LAogICAgeyAvKiA0MCwgV0lORUQzRFJTX0VER0VBTlRJQUxJQVMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBQkxFTkRFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfYmxlbmQgICAgICAgICB9LAogICAgeyAvKiA0MSwgV0lORUQzRFJTX0NPTE9SS0VZRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FMUEhBVEVTVEVOQUJMRSksICAgICAgICAgICAgc3RhdGVfYWxwaGEgICAgICAgICB9LAogICAgeyAvKiA0MiwgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0MywgV0lORUQzRFJTX0JPUkRFUkNPTE9SICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0JPUkRFUkNPTE9SKSwgICAgICAgICAgICAgICAgc3RhdGVfYm9yZGVyY29sb3IgICB9LAogICAgeyAvKiA0NCwgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTVSAgICAgICAgICAgICAgKi8gICAgICAwLCAvKiBIYW5kbGVkIGluIGRkcmF3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0NSwgV0lORUQzRFJTX1RFWFRVUkVBRERSRVNTViAgICAgICAgICAgICAgKi8gICAgICAwLCAvKiBIYW5kbGVkIGluIGRkcmF3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA0NiwgV0lORUQzRFJTX01JUE1BUExPREJJQVMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01JUE1BUExPREJJQVMpLCAgICAgICAgICAgICAgc3RhdGVfbWlwbWFwbG9kYmlhcyB9LAogICAgeyAvKiA0NywgV0lORUQzRFJTX1pCSUFTICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1pCSUFTKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfemJpYXMgICAgICAgICB9LAogICAgeyAvKiA0OCwgV0lORUQzRFJTX1JBTkdFRk9HRU5BQkxFICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKiA0OSwgV0lORUQzRFJTX0FOSVNPVFJPUFkgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FOSVNPVFJPUFkpLCAgICAgICAgICAgICAgICAgc3RhdGVfYW5pc290cm9weSAgICB9LAogICAgeyAvKiA1MCwgV0lORUQzRFJTX0ZMVVNIQkFUQ0ggICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZMVVNIQkFUQ0gpLCAgICAgICAgICAgICAgICAgc3RhdGVfZmx1c2hiYXRjaCAgICB9LAogICAgeyAvKiA1MSwgV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RSQU5TTFVDRU5UU09SVElOREVQRU5ERU5UKSwgc3RhdGVfdHJhbnNsdWNlbnRzaSB9LAogICAgeyAvKiA1MiwgV0lORUQzRFJTX1NURU5DSUxFTkFCTEUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1MywgV0lORUQzRFJTX1NURU5DSUxGQUlMICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NCwgV0lORUQzRFJTX1NURU5DSUxaRkFJTCAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NSwgV0lORUQzRFJTX1NURU5DSUxQQVNTICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NiwgV0lORUQzRFJTX1NURU5DSUxGVU5DICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1NywgV0lORUQzRFJTX1NURU5DSUxSRUYgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1OCwgV0lORUQzRFJTX1NURU5DSUxNQVNLICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxFTkFCTEUpLCAgICAgICAgICAgICAgc3RhdGVfc3RlbmNpbCAgICAgICB9LAogICAgeyAvKiA1OSwgV0lORUQzRFJTX1NURU5DSUxXUklURU1BU0sgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1NURU5DSUxXUklURU1BU0spLCAgICAgICAgICAgc3RhdGVfc3RlbmNpbHdyaXRlICB9LAogICAgeyAvKiA2MCwgV0lORUQzRFJTX1RFWFRVUkVGQUNUT1IgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1RFWFRVUkVGQUNUT1IpLCAgICAgICAgICAgICAgc3RhdGVfdGV4ZmFjdG9yICAgICB9LAogICAgeyAvKiA2MSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2MiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2MywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgaGUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA2OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMDkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA3OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMTkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjIgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4NywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjMgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4OCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjQgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA4OSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjUgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjYgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjcgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MiwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjggICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5MywgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMjkgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NCwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMzAgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NSwgV0lORUQzRFJTX1NUSVBQTEVQQVRURVJOMzEgICAgICAgICAgICAgKi8gICAgICAwIC8qIE9ic29sZXRlLCBzaG91bGQgYmUgaGFuZGxlZCBieSBkZHJhdyAqLywgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5NywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5OCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKiA5OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwOCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEwOSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExOCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjExOSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyMywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNiwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjEyNywgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgLyogQmlnIGhvbGUgZW5kcyAqLwogICAgeyAvKjEyOCwgV0lORUQzRFJTX1dSQVAwICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEyOSwgV0lORUQzRFJTX1dSQVAxICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMCwgV0lORUQzRFJTX1dSQVAyICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMSwgV0lORUQzRFJTX1dSQVAzICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMiwgV0lORUQzRFJTX1dSQVA0ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzMywgV0lORUQzRFJTX1dSQVA1ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNCwgV0lORUQzRFJTX1dSQVA2ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNSwgV0lORUQzRFJTX1dSQVA3ICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1dSQVAwKSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfd3JhcCAgICAgICAgICB9LAogICAgeyAvKjEzNiwgV0lORUQzRFJTX0NMSVBQSU5HICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NMSVBQSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY2xpcHBpbmcgICAgICB9LAogICAgeyAvKjEzNywgV0lORUQzRFJTX0xJR0hUSU5HICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xJR0hUSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfbGlnaHRpbmcgICAgICB9LAogICAgeyAvKjEzOCwgV0lORUQzRFJTX0VYVEVOVFMgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0VYVEVOVFMpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfZXh0ZW50cyAgICAgICB9LAogICAgeyAvKjEzOSwgV0lORUQzRFJTX0FNQklFTlQgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0FNQklFTlQpLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfYW1iaWVudCAgICAgICB9LAogICAgeyAvKjE0MCwgV0lORUQzRFJTX0ZPR1ZFUlRFWE1PREUgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0ZPR0VOQUJMRSksICAgICAgICAgICAgICAgICAgc3RhdGVfZm9nICAgICAgICAgICB9LAogICAgeyAvKjE0MSwgV0lORUQzRFJTX0NPTE9SVkVSVEVYICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0MiwgV0lORUQzRFJTX0xPQ0FMVklFV0VSICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0xPQ0FMVklFV0VSKSwgICAgICAgICAgICAgICAgc3RhdGVfbG9jYWx2aWV3ZXIgICB9LAogICAgeyAvKjE0MywgV0lORUQzRFJTX05PUk1BTElaRU5PUk1BTFMgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX05PUk1BTElaRU5PUk1BTFMpLCAgICAgICAgICAgc3RhdGVfbm9ybWFsaXplICAgICB9LAogICAgeyAvKjE0NCwgV0lORUQzRFJTX0NPTE9SS0VZQkxFTkRFTkFCTEUgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SS0VZQkxFTkRFTkFCTEUpLCAgICAgICAgc3RhdGVfY2tleWJsZW5kICAgICB9LAogICAgeyAvKjE0NSwgV0lORUQzRFJTX0RJRkZVU0VNQVRFUklBTFNPVVJDRSAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0NiwgV0lORUQzRFJTX1NQRUNVTEFSTUFURVJJQUxTT1VSQ0UgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0NywgV0lORUQzRFJTX0FNQklFTlRNQVRFUklBTFNPVVJDRSAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0OCwgV0lORUQzRFJTX0VNSVNTSVZFTUFURVJJQUxTT1VSQ0UgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SVkVSVEVYKSwgICAgICAgICAgICAgICAgc3RhdGVfY29sb3JtYXQgICAgICB9LAogICAgeyAvKjE0OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE1MCwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE1MSwgV0lORUQzRFJTX1ZFUlRFWEJMRU5EICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE1MiwgV0lORUQzRFJTX0NMSVBQTEFORUVOQUJMRSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NMSVBQSU5HKSwgICAgICAgICAgICAgICAgICAgc3RhdGVfY2xpcHBpbmcgICAgICB9LAogICAgeyAvKjE1MywgV0lORUQzRFJTX1NPRlRXQVJFVkVSVEVYUFJPQ0VTU0lORyAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE1NCwgV0lORUQzRFJTX1BPSU5UU0laRSAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRSksICAgICAgICAgICAgICAgICAgc3RhdGVfcHNpemUgICAgICAgICB9LAogICAgeyAvKjE1NSwgV0lORUQzRFJTX1BPSU5UU0laRV9NSU4gICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRV9NSU4pLCAgICAgICAgICAgICAgc3RhdGVfcHNpemVtaW4gICAgICB9LAogICAgeyAvKjE1NiwgV0lORUQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFKSwgICAgICAgICAgc3RhdGVfcG9pbnRzcHJpdGUgICB9LAogICAgeyAvKjE1NywgV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE1OCwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE1OSwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE2MCwgV0lORUQzRFJTX1BPSU5UU0NBTEVfQyAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0NBTEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfcHNjYWxlICAgICAgICB9LAogICAgeyAvKjE2MSwgV0lORUQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTKSwgICAgICAgc3RhdGVfbXVsdGlzYW1wbGVhYSB9LAogICAgeyAvKjE2MiwgV0lORUQzRFJTX01VTFRJU0FNUExFTUFTSyAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX01VTFRJU0FNUExFTUFTSyksICAgICAgICAgICAgc3RhdGVfbXVsdGlzYW1wbWFzayB9LAogICAgeyAvKjE2MywgV0lORUQzRFJTX1BBVENIRURHRVNUWUxFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BBVENIRURHRVNUWUxFKSwgICAgICAgICAgICAgc3RhdGVfcGF0Y2hlZGdlc3R5bGV9LAogICAgeyAvKjE2NCwgV0lORUQzRFJTX1BBVENIU0VHTUVOVFMgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BBVENIU0VHTUVOVFMpLCAgICAgICAgICAgICAgc3RhdGVfcGF0Y2hzZWdtZW50cyB9LAogICAgeyAvKjE2NSwgV0lORUQzRFJTX0RFQlVHTU9OSVRPUlRPS0VOICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0RFQlVHTU9OSVRPUlRPS0VOKSwgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE2NiwgV0lORUQzRFJTX1BPSU5UU0laRV9NQVggICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPSU5UU0laRV9NQVgpLCAgICAgICAgICAgICAgc3RhdGVfcHNpemVtYXggICAgICB9LAogICAgeyAvKjE2NywgV0lORUQzRFJTX0lOREVYRURWRVJURVhCTEVOREVOQUJMRSAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE2OCwgV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0NPTE9SV1JJVEVFTkFCTEUpLCAgICAgICAgICAgc3RhdGVfY29sb3J3cml0ZSAgICB9LAogICAgeyAvKjE2OSwgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfdW5kZWZpbmVkICAgICB9LAogICAgeyAvKjE3MCwgV0lORUQzRFJTX1RXRUVORkFDVE9SICAgICAgICAgICAgICAgICAgKi8gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfbm9nbCAgICAgICAgICB9LAogICAgeyAvKjE3MSwgV0lORUQzRFJTX0JMRU5ET1AgICAgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX0JMRU5ET1ApLCAgICAgICAgICAgICAgICAgICAgc3RhdGVfYmxlbmRvcCAgICAgICB9LAogICAgeyAvKjE3MiwgV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX1BPU0lUSU9OREVHUkVFKSwgICAgICAgICAgICAgc3RhdGVfcG9zaXRpb25kZWdyZWV9LAogICAgeyAvKjE3MywgV0lORUQzRFJTX05PUk1BTERFR1JFRSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9SRU5ERVIoV0lORUQzRFJTX05PUk1BTERFR1JFRSksICAgICAgICAgICAgICAgc3RhdGVfbm9ybWFsZGVncmVlICB9LAogICAgICAvKjE3MiwgV0lORUQzRFJTX1BPU0lUSU9OT1JERVIgICAgICAgICAgICAgICAgKi8gICAgICAvKiBWYWx1ZSBhc3NpZ25lZCB0byAyIHN0YXRlIG5hbWVzICovCiAgICAgIC8qMTczLCBXSU5FRDNEUlNfTk9STUFMT1JERVIgICAgICAgICAgICAgICAgICAqLyAgICAgIC8qIFZhbHVlIGFzc2lnbmVkIHRvIDIgc3RhdGUgbmFtZXMgKi8KICAgIHsgLyoxNzQsIFdJTkVEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSksICAgICAgICAgIHN0YXRlX3NjaXNzb3IgICAgICAgfSwKICAgIHsgLyoxNzUsIFdJTkVEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ERVBUSEJJQVMpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2RlcHRoYmlhcyAgICAgfSwKICAgIHsgLyoxNzYsIFdJTkVEM0RSU19BTlRJQUxJQVNFRExJTkVFTkFCTEUgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19BTFBIQUJMRU5ERU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2JsZW5kICAgICAgICAgfSwKICAgIHsgLyoxNzcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxNzgsIFdJTkVEM0RSU19NSU5URVNTRUxMQVRJT05MRVZFTCAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxNzksIFdJTkVEM0RSU19NQVhURVNTRUxMQVRJT05MRVZFTCAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODAsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWCAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODEsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODIsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfWiAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODMsIFdJTkVEM0RSU19BREFQVElWRVRFU1NfVyAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODQsIFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19FTkFCTEVBREFQVElWRVRFU1NFTExBVElPTiksIHN0YXRlX3Rlc3NlbGxhdGlvbiAgfSwKICAgIHsgLyoxODUsIFdJTkVEM0RSU19UV09TSURFRFNURU5DSUxNT0RFICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODYsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTEZBSUwgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODcsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTFpGQUlMICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODgsIFdJTkVEM0RSU19DQ1dfU1RFTkNJTFBBU1MgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxODksIFdJTkVEM0RSU19DQ1dfU1RFTkNJTEZVTkMgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TVEVOQ0lMRU5BQkxFKSwgICAgICAgICAgICAgIHN0YXRlX3N0ZW5jaWwgICAgICAgfSwKICAgIHsgLyoxOTAsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMSAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTEsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMiAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTIsIFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFMyAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19DT0xPUldSSVRFRU5BQkxFKSwgICAgICAgICAgIHN0YXRlX2NvbG9yd3JpdGUgICAgfSwKICAgIHsgLyoxOTMsIFdJTkVEM0RSU19CTEVOREZBQ1RPUiAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19CTEVOREZBQ1RPUiksICAgICAgICAgICAgICAgIHN0YXRlX2JsZW5kZmFjdG9yICAgfSwKICAgIHsgLyoxOTQsIFdJTkVEM0RSU19TUkdCV1JJVEVFTkFCTEUgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TUkdCV1JJVEVFTkFCTEUpLCAgICAgICAgICAgIHN0YXRlX3NyZ2J3cml0ZSAgICAgfSwKICAgIHsgLyoxOTUsIFdJTkVEM0RSU19ERVBUSEJJQVMgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19ERVBUSEJJQVMpLCAgICAgICAgICAgICAgICAgIHN0YXRlX2RlcHRoYmlhcyAgICAgfSwKICAgIHsgLyoxOTYsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTcsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3VuZGVmaW5lZCAgICAgfSwKICAgIHsgLyoxOTgsIFdJTkVEM0RSU19XUkFQOCAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoxOTksIFdJTkVEM0RSU19XUkFQOSAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDAsIFdJTkVEM0RSU19XUkFQMTAgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDEsIFdJTkVEM0RSU19XUkFQMTEgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDIsIFdJTkVEM0RSU19XUkFQMTIgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDMsIFdJTkVEM0RSU19XUkFQMTMgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDQsIFdJTkVEM0RSU19XUkFQMTQgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDUsIFdJTkVEM0RSU19XUkFQMTUgICAgICAgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19XUkFQMCksICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3dyYXAgICAgICAgICAgfSwKICAgIHsgLyoyMDYsIFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDcsIFdJTkVEM0RSU19TUkNCTEVOREFMUEhBICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDgsIFdJTkVEM0RSU19ERVNUQkxFTkRBTFBIQSAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIHsgLyoyMDksIFdJTkVEM0RSU19CTEVORE9QQUxQSEEgICAgICAgICAgICAgICAgICovICAgICAgU1RBVEVfUkVOREVSKFdJTkVEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUpLCAgIHN0YXRlX3NlcGVyYXRlYmxlbmQgfSwKICAgIC8qIFRleHR1cmUgc3RhZ2Ugc3RhdGVzICovCiAgICB7IC8qMCwgMDEsIFdJTkVEM0RUU1NfQ09MT1JPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDIsIFdJTkVEM0RUU1NfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDMsIFdJTkVEM0RUU1NfQ09MT1JBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDQsIFdJTkVEM0RUU1NfQUxQSEFPUCAgICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDUsIFdJTkVEM0RUU1NfQUxQSEFBUkcxICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDYsIFdJTkVEM0RUU1NfQUxQSEFBUkcyICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMDcsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMDgsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMDksIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDEwICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMTAsIFdJTkVEM0RUU1NfQlVNUEVOVk1BVDExICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCksICAgICB0ZXhfYnVtcGVudm1hdCAgICAgIH0sCiAgICB7IC8qMCwgMTEsIFdJTkVEM0RUU1NfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVgpLCAgICB0ZXhfY29vcmRpbmRleCAgICAgIH0sCiAgICB7IC8qMCwgMTIsIFdJTkVEM0RUU1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTMsIFdJTkVEM0RUU1NfQUREUkVTU1UgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTQsIFdJTkVEM0RUU1NfQUREUkVTU1YgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTUsIFdJTkVEM0RUU1NfQk9SREVSQ09MT1IgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTYsIFdJTkVEM0RUU1NfTUFHRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTcsIFdJTkVEM0RUU1NfTUlORklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTgsIFdJTkVEM0RUU1NfTUlQRklMVEVSICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMTksIFdJTkVEM0RUU1NfTUlQTUFQTE9EQklBUyAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjAsIFdJTkVEM0RUU1NfTUFYTUlQTEVWRUwgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjEsIFdJTkVEM0RUU1NfTUFYQU5JU09UUk9QWSAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjIsIFdJTkVEM0RUU1NfQlVNUEVOVkxTQ0FMRSAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZMU0NBTEUpLCAgICB0ZXhfYnVtcGVudmxzY2FsZSAgIH0sCiAgICB7IC8qMCwgMjMsIFdJTkVEM0RUU1NfQlVNUEVOVkxPRkZTRVQgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0JVTVBFTlZMT0ZGU0VUKSwgICB0ZXhfYnVtcGVudmxvZmZzZXQgIH0sCiAgICB7IC8qMCwgMjQsIFdJTkVEM0RUU1NfVEVYVFVSRVRSQU5TRk9STUZMQUdTICAgICAqLyAgICAgIFNUQVRFX1RSQU5TRk9STShXSU5FRDNEVFNfVEVYVFVSRTApLCAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdGV4dHVyZSAgIH0sCiAgICB7IC8qMCwgMjUsIFdJTkVEM0RUU1NfQUREUkVTU1cgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMjYsIFdJTkVEM0RUU1NfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0NPTE9ST1ApLCAgICAgICAgICB0ZXhfY29sb3JvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMjcsIFdJTkVEM0RUU1NfQUxQSEFBUkcwICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX0FMUEhBT1ApLCAgICAgICAgICB0ZXhfYWxwaGFvcCAgICAgICAgIH0sCiAgICB7IC8qMCwgMjgsIFdJTkVEM0RUU1NfUkVTVUxUQVJHICAgICAgICAgICAgICAgICAqLyAgICAgIFNUQVRFX1RFWFRVUkVTVEFHRSgwLCBXSU5FRDNEVFNTX1JFU1VMVEFSRyksICAgICAgICB0ZXhfcmVzdWx0YXJnICAgICAgIH0sCiAgICB7IC8qMCwgMjksIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzAsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzEsIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogLT4gc2FtcGxlciBzdGF0ZSBpbiBkZHJhdyAvIGQzZDggKi8sICAgICAgICAgICBzdGF0ZV91bmRlZmluZWQgICAgIH0sCiAgICB7IC8qMCwgMzIsIFdJTkVEM0RUU1NfQ09OU1RBTlQgICAgICAgICAgICAgICAgICAqLyAgICAgIDAgLyogQXMgbG9uZyBhcyB3ZSBkb24ndCBzdXBwb3J0IEQzRFRBX0NPTlNUQU5UICovLCBzdGF0ZV9ub2dsICAgICAgICAgIH0sCgogICAgeyAvKjEsIDAxLCBXSU5FRDNEVFNTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDAyLCBXSU5FRDNEVFNTX0NPTE9SQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDAzLCBXSU5FRDNEVFNTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19DT0xPUk9QKSwgICAgICAgICAgdGV4X2NvbG9yb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA0LCBXSU5FRDNEVFNTX0FMUEhBT1AgICAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA1LCBXSU5FRDNEVFNTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA2LCBXSU5FRDNEVFNTX0FMUEhBQVJHMiAgICAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19BTFBIQU9QKSwgICAgICAgICAgdGV4X2FscGhhb3AgICAgICAgICB9LAogICAgeyAvKjEsIDA3LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDA4LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQwMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDA5LCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDEwLCBXSU5FRDNEVFNTX0JVTVBFTlZNQVQxMSAgICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19CVU1QRU5WTUFUMDApLCAgICAgdGV4X2J1bXBlbnZtYXQgICAgICB9LAogICAgeyAvKjEsIDExLCBXSU5FRDNEVFNTX1RFWENPT1JESU5ERVggICAgICAgICAgICAgKi8gICAgICBTVEFURV9URVhUVVJFU1RBR0UoMSwgV0lORUQzRFRTU19URVhDT09SRElOREVYKSwgICAgdGV4X2Nvb3JkaW5kZXggICAgICB9LAogICAgeyAvKjEsIDEyLCBXSU5FRDNEVFNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgKi8gICAgICAwIC8qIC0+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=