LyoKICogV2luZUNmZyByZXNvdXJjZXMKICogU3BhbmlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzLTIwMDcgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKgogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ORVVUUkFMCgpJRFJfV0lORUNGRyBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiQ29uZmlndXJlIiwgSURDX0FVRElPX0NPTkZJR1VSRQogICAgRU5ECkVORAoKSUREX0FCT1VUQ0ZHIERJQUxPR0VYIDAsIDAsIDI2MCwgMjcwClNUWUxFIFdTX0NISUxECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICBQQUNLQUdFX1NUUklORyxJRENfU1RBVElDLDExOSwxNywxMjAsOAogICAgQ09OVFJPTCAgICAgICAgIElEQl9XSU5FLElEQ19TVEFUSUMsIlN0YXRpYyIsU1NfQklUTUFQICwxNSwxNywxNTcsMTExCiAgICBMVEVYVCAgICAgICAgICAgImh0dHA6Ly93d3cud2luZWhxLm9yZy8iLElEQ19TVEFUSUMsMTE5LDMxLDEwNiw4CiAgICBMVEVYVCAgICAgICAgICAgIlRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIiwKICAgICAgICAgICAgICAgICAgICBJRENfU1RBVElDLDExOSw0NCwxMjQsNzIKRU5ECgpJRERfQVBQQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAgICAgICAgIiBDb25maWd1cmFjafNuIGRlIGFwbGljYWNpb25lcyAiLElEQ19TVEFUSUMsIDgsNCwyNDQsMjQwCiAgICBMVEVYVCAgICAgICAgICAgIldpbmUgcHVlZGUgaW1pdGFyIGRpc3RpbnRhcyB2ZXJzaW9uZXMgZGUgV2luZG93cyBwYXJhIGNhZGEgYXBsaWNhY2nzbi4gRXN0YSBwZXN0YfFhIGVzdOEgZW5sYXphZGEgYSBsYXMgZGUgTGlicmVy7WFzIHkgR3LhZmljb3MgcGFyYSBwb2RlciBjYW1iaWFyIGVuIGVsbGFzIGxhIGNvbmZpZ3VyYWNp824gZ2xvYmFsIHkvbyBsYSBkZSBwb3IgYXBsaWNhY2nzbi4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsMjAsMjI3LDMwCiAgICBDT05UUk9MICAgICAgICAgIkFwbGljYWNpb25lcyIsSURDX0FQUF9MSVNUVklFVywiU3lzTGlzdFZpZXczMiIsV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IExWU19MSVNUIHwgTFZTX1NJTkdMRVNFTCB8IExWU19TSE9XU0VMQUxXQVlTLAogICAgICAgICAgICAgICAgICAgIDE1LDUwLDIzMCwxNTAKICAgIFBVU0hCVVRUT04gICAgICAiJkHxYWRpciBhcGxpY2FjafNuLi4uIixJRENfQVBQX0FEREFQUCwgOTAsMjA0LDc1LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZFbGltaW5hciBhcGxpY2FjafNuLi4uIixJRENfQVBQX1JFTU9WRUFQUCwgMTcwLDIwNCw3NSwxNAogICAgTFRFWFQgICAgICAgICAgICImVmVyc2nzbiBhIGltaXRhcjoiLElEQ19TVEFUSUMsMTcsMjI2LDU4LDE2CiAgICBDT01CT0JPWCAgICAgICAgSURDX1dJTlZFUiw4MywyMjQsMTYzLDU2LENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCAgICAKRU5ECgpJRERfR1JBUEhDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICIgQ29uZmlndXJhY2nzbiBkZSB2ZW50YW5hcyAiLElEQ19TVEFUSUMsOCw0LDI0NCw4NAogICAgQ09OVFJPTCAgICAgIlBlcm1pdGlyIGEgbG9zIHByb2dyYW1hcyBEaXJlY3RYIHJldGVuZXIgZWwgcmF0824gZW4gc3VzIHZlbnRhbmFzIixJRENfRFhfTU9VU0VfR1JBQiwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE1LDIwLDIzMCw4CiAgICBDT05UUk9MICAgICAiQWxsb3cgdGhlIHdpbmRvdyBtYW5hZ2VyIHRvICZkZWNvcmF0ZSB0aGUgd2luZG93cyIsSURDX0VOQUJMRV9ERUNPUkFURUQsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwxNSwzMiwyMzAsOAogICAgQ09OVFJPTCAgICAgIlBlcm1pdGlyIGFsIGdlc3RvciBkZSB2ZW50YW5hcyBjb250cm9sYXIgbGFzIHZlbnRhbmFzIixJRENfRU5BQkxFX01BTkFHRUQsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwxNSw0NCwyMzAsOAogICAgQ09OVFJPTCAgICAgIkVtdWxhciB1biBlc2NyaXRvcmlvIHZpcnR1YWwiLElEQ19FTkFCTEVfREVTS1RPUCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTUsNTYsMjMwLDgKICAgIExURVhUICAgICAgICJEaW1lbnNpb25lczoiLElEQ19ERVNLVE9QX1NJWkUsMTUsNzAsNDQsOCxXU19ESVNBQkxFRAogICAgTFRFWFQgICAgICAgIlgiLElEQ19ERVNLVE9QX0JZLDEwOSw3MCw4LDgsV1NfRElTQUJMRUQKICAgIEVESVRURVhUICAgIElEQ19ERVNLVE9QX1dJRFRILDY0LDY4LDQwLDEyLEVTX0FVVE9IU0NST0xMIHwgRVNfTlVNQkVSIHwgV1NfRElTQUJMRUQKICAgIEVESVRURVhUICAgIElEQ19ERVNLVE9QX0hFSUdIVCwxMTcsNjgsNDAsMTIsRVNfQVVUT0hTQ1JPTEwgfCBFU19OVU1CRVIgfCBXU19ESVNBQkxFRAoKICAgIEdST1VQQk9YICAgICIgRGlyZWN0M0QgIixJRENfU1RBVElDLDgsOTUsMjQ0LDQ5CiAgICBMVEVYVCAgICAgICAiU29wb3J0ZSBWZXJ0ZXggU2hhZGVyOiAiLElEQ19TVEFUSUMsMTUsMTEwLDgwLDMyCiAgICBDT01CT0JPWCAgICBJRENfRDNEX1ZTSEFERVJfTU9ERSwxMDAsMTA4LDE0NSw3MCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIENPTlRST0wgICAgICJQZXJtaXRpciBQaXhlbCBTaGFkZXIgKHNpIGhheSBzb3BvcnRlIHBvciBoYXJkd2FyZSkiLElEQ19EM0RfUFNIQURFUl9NT0RFLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTUsMTI2LDIzMCwxMAoKICAgIEdST1VQQk9YICAgICIgU2NyZWVuICZSZXNvbHV0aW9uICIsSURDX1NUQVRJQyw4LDE1MSwyNDQsOTMKICAgIENPTlRST0wgICAgICIiLCBJRENfUkVTX1RSQUNLQkFSLCAibXNjdGxzX3RyYWNrYmFyMzIiLFdTX1RBQlNUT1AsMTIsMTYxLDE4NywxNQogICAgRURJVFRFWFQgICAgSURDX1JFU19EUElFRElULDIwNCwxNjEsMjMsMTMsRVNfTlVNQkVSfFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICJkcGkiLElEQ19TVEFUSUMsMjM1LDE2MywxMCw4CiAgICBMVEVYVCAgICAgICAiVGhpcyBpcyBhIHNhbXBsZSB0ZXh0IHVzaW5nIDEwIHBvaW50IFRhaG9tYSIsSURDX1JFU19GT05UX1BSRVZJRVcsMTUsMTgxLDIzMCw1NQpFTkQKCklERF9ETExDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiIFJlZW1wbGF6b3MgZGUgRExMICIsSURDX1NUQVRJQyw4LDQsMjQ0LDI0MAogICAgTFRFWFQgICAgICAgICAgICJDYWRhIGxpYnJlcu1hIGRlIGVubGFjZSBkaW7hbWljbyBzZSBwdWVkZSBlc3BlY2lmaWNhciBwYXJhIHF1ZSBzZWEgbGEgaW50ZXJuYSAocHJvcG9yY2lvbmFkYSBwb3IgV2luZSkgbyBsYSBuYXRpdmEgKG9idGVuaWRhIGRlIFdpbmRvd3MgbyBwcm9wb3JjaW9uYWRhIHBvciBsYSBhcGxpY2FjafNuKS4iCiAgICAgICAgICAgICAgICAgICAgLElEQ19TVEFUSUMsMTYsMTYsMjIwLDMyCiAgICBMVEVYVCAgICAgICAgICAgIk51ZXZvIHJlZW1wbGF6byBwYXJhIGxpYnJlcu1hOiIsSURDX1NUQVRJQywxNiw1OCwxMDAsOAogICAgQ09NQk9CT1ggICAgICAgIElEQ19ETExDT01CTywxNiw2OCwxNDAsMTQsQ0JTX0RST1BET1dOIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU09SVCB8IENCU19MT1dFUkNBU0UKICAgIFBVU0hCVVRUT04gICAgICAiJkHxYWRpciIsSURDX0RMTFNfQURERExMLCAxNjQsNjgsODIsMTMsQlNfREVGUFVTSEJVVFRPTgogICAgTFRFWFQgICAgICAgICAgICJSZWVtcGxhem9zIGV4aXN0ZW50ZXM6IixJRENfU1RBVElDLDE2LDg2LDEwMCw4CiAgICBMSVNUQk9YICAgICAgICAgSURDX0RMTFNfTElTVCwxNiw5NiwxNDAsMTQwLFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19WU0NST0xMCiAgICBQVVNIQlVUVE9OICAgICAgIiZFZGl0YXIiLElEQ19ETExTX0VESVRETEwsMTY0LDk2LDgyLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkUmbGltaW5hciIsSURDX0RMTFNfUkVNT1ZFRExMLDE2NCwxMTQsODIsMTQKRU5ECgpJRERfTE9BRE9SREVSIERJQUxPRyBESVNDQVJEQUJMRSA4MCwgOTAsIDEyMCwgOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkVkaXRhciByZWVtcGxhem8iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiIE9yZGVuIGRlIGNhcmdhICIsSURDX1NUQVRJQyw4LDQsMTA0LDY2CiAgICBDT05UUk9MICAgICAgICAgIiZJbnRlcm5hIChXaW5lKSIsSURDX1JBRF9CVUlMVElOLCJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19HUk9VUCwxNiwxNCw4NSwxMAogICAgQ09OVFJPTCAgICAgICAgICImTmF0aXZhIChXaW5kb3dzKSIsSURDX1JBRF9OQVRJVkUsIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiwxNiwyNCw4NSwxMAogICAgQ09OVFJPTCAgICAgICAgICJJJm50ZXJuYSB5IGx1ZWdvIG5hdGl2YSIsSURDX1JBRF9CVUlMVElOX05BVElWRSwiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OLDE2LDM0LDg1LDEwCiAgICBDT05UUk9MICAgICAgICAgIk5hdGkmdmEgeSBsdWVnbyBpbnRlcm5hIixJRENfUkFEX05BVElWRV9CVUlMVElOLCJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04sMTYsNDQsODUsMTAKICAgIENPTlRST0wgICAgICAgICAiJkRlc2hhYmlsaXRhciIsSURDX1JBRF9ESVNBQkxFLCJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04sMTYsNTQsODUsMTAKICAgIERFRlBVU0hCVVRUT04gICAiQWNlcHRhciIsSURPSyw4LDc0LDUwLDE0LFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgICAgIkNhbmNlbGFyIixJRENBTkNFTCw2Miw3NCw1MCwxNCxXU19HUk9VUApFTkQKCklERF9EUklWRUNGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggICAgICAgICIgTWFwZW9zIGRlIHVuaWRhZCAiLElEQ19TVEFUSUMsOCw0LDI0NCwyNDAKICAgIENPTlRST0wgICAgICAgICAiTGlzdHZpZXciLElEQ19MSVNUX0RSSVZFUywiU3lzTGlzdFZpZXczMiIsTFZTX1JFUE9SVCB8IExWU19BVVRPQVJSQU5HRSB8IExWU19BTElHTkxFRlQgfAogICAgICAgICAgICAgICAgICAgIExWU19TSU5HTEVTRUwgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QLCAxNSwxOCwyMzIsNzYKICAgIFBVU0hCVVRUT04gICAgICAiJkHxYWRpci4uLiIsSURDX0JVVFRPTl9BREQsMTUsOTgsMzcsMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkVsaW1pbmFyIixJRENfQlVUVE9OX1JFTU9WRSw1Niw5OCwzNywxNAogICAgUFVTSEJVVFRPTiAgICAgICJBdXRvJmRldGVjdGFyLi4uIixJRENfQlVUVE9OX0FVVE9ERVRFQ1QsMTk3LDk4LDQ5LDE0CgogICAgLyogZWRpdGluZyBkcml2ZSBkZXRhaWxzICovCiAgICBMVEVYVCAgICAgICAgICAgIiZSdXRhOiIsSURDX1NUQVRJQywxNSwxMjMsMjAsOQogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX1BBVEgsNDEsMTIwLDE2MCwxMyxFU19BVVRPSFNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiJkV4YW1pbmFyLi4uIixJRENfQlVUVE9OX0JST1dTRV9QQVRILDIwNiwxMjAsNDAsMTMKCiAgICBMVEVYVCAgICAgICAgICAgIiZUaXBvOiIsSURDX1NUQVRJQ19UWVBFLDE1LDEzOCwyMSwxMAogICAgQ09NQk9CT1ggICAgICAgIElEQ19DT01CT19UWVBFLDQxLDEzNSw3Nyw2MCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKCiAgICBMVEVYVCAgICAgICAgICAgIkV0aXF1ZXRhIHkgbvptLiBkZSBzZXJpZSIsSURDX0xBQkVMU0VSSUFMX1NUQVRJQywxNSwxNTUsOTUsMTAKCiAgICBQVVNIQlVUVE9OICAgICAgIiZNb3N0cmFyIGF2YW56YWRvIixJRENfQlVUVE9OX1NIT1dfSElERV9BRFZBTkNFRCwxODYsMTM2LDYwLDEzCiAgICBDT05UUk9MICAgICAgICAgIkF1dG9kZXRlY3RhciAmZGVzZGUgZGlzcG9zaXRpdm86IixJRENfUkFESU9fQVVUT0RFVEVDVCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sMTUsMTY2LDkzLDEwCiAgICBFRElUVEVYVCAgICAgICAgSURDX0VESVRfREVWSUNFLDI3LDE3NiwxNzQsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIFBVU0hCVVRUT04gICAgICAiRSZ4YW1pbmFyLi4uIixJRENfQlVUVE9OX0JST1dTRV9ERVZJQ0UsMjA2LDE3Niw0MCwxMwogICAgQ09OVFJPTCAgICAgICAgICJBJnNpZ25hciBtYW51YWxtZW50ZToiLElEQ19SQURJT19BU1NJR04sIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OLDE1LDE5NSw2OSwxMAoKICAgIExURVhUICAgICAgICAgICAiJkV0aXF1ZXRhOiIsSURDX1NUQVRJQ19MQUJFTCwzMywyMDgsMjksMTIKICAgIEVESVRURVhUICAgICAgICBJRENfRURJVF9MQUJFTCw2MywyMDUsNzgsMTMsRVNfQVVUT0hTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBMVEVYVCAgICAgICAgICAgIiZOuiBzZXJpZToiLElEQ19TVEFUSUNfU0VSSUFMLDMzLDIyNSwyOSwxMgogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX1NFUklBTCw2MywyMjEsNzgsMTMsRVNfQVVUT0hTQ1JPTEwgfCBXU19UQUJTVE9QCgogICAgQ09OVFJPTCAgICAgICAgICJNb3N0cmFyIGZpY2hlcm9zIHB1bnRvIixJRENfU0hPV19ET1RfRklMRVMsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCw4LDI2MCwyMzAsOApFTkQKCklERF9BVURJT0NGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggICAgICAgICIgU2VsZWNjafNuIGRlIG1hbmVqYWRvciAiLElEQ19TVEFUSUMsOCw0LDI0NCwxOTUKICAgIExURVhUICAgICAgICAgICAiU2VsZWNjaW9uZSB1biBtYW5lamFkb3IgZGUgc29uaWRvIG1hcmNhbmRvIGxhIGNhc2lsbGEgZGVsIGRlc2VhZG8uIFBhcmEgZGVzaGFiaWxpdGFyIGVsIHNvbmlkbyBubyBzZWxlY2Npb25lIG5pbmd1bm8uIE5vIHNlIHJlY29taWVuZGEgbGEgc2VsZWNjafNuIGRlIG3hcyBkZSB1biBtYW5lamFkb3IuIFBhcmEgY29uZmlndXJhciB1biBtYW5lamFkb3IgaGFnYSBkb2JsZSBjbGljayBzb2JyZSDpbC4iLElEQ19TVEFUSUMsMTUsMTUsMjI3LDM1CiAgICBDT05UUk9MICAgICAgICAgIkRpc3Bvc2l0aXZvcyIsSURDX0FVRElPX1RSRUUsIlN5c1RyZWVWaWV3MzIiLFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsMTUsNTAsMTQwLDE0MAogICAgUFVTSEJVVFRPTiAgICAgICJQcm9iYXIgc29uaWRvIixJRENfQVVESU9fVEVTVCwxNzAsNTAsNTksMTQKICAgIFBVU0hCVVRUT04gICAgICAiUGFuZWwgZGUgY29udHJvbCIsSURDX0FVRElPX0NPTlRST0xfUEFORUwsMTcwLDcwLDU5LDE0CiAgICBHUk9VUEJPWCAgICAgICAgIiBEaXJlY3RTb3VuZCAiLElEQ19TVEFUSUMsOCwyMDUsMjQ0LDYwCiAgICBMVEVYVCAgICAgICAgICAgIkFjZWxlcmFjafNuIEhhcmR3YXJlOiAiLElEQ19TVEFUSUMsMTUsMjE1LDkwLDEwCiAgICBDT01CT0JPWAkgICAgSURDX0RTT1VORF9IV19BQ0NFTCwxMDAsMjEzLDE1MCw3MCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiRnJlY3VlbmNpYSBtdWVzdHJlbzoiLElEQ19TVEFUSUMsMTUsMjMyLDcwLDgKICAgIENPTUJPQk9YICAgICAgICBJRENfRFNPVU5EX1JBVEVTLDkwLDIzMCw0Miw3NixDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiQml0cyBwb3IgbXVlc3RyYToiLElEQ19TVEFUSUMsMTM3LDIzMiw4MCw4CiAgICBDT01CT0JPWCAgICAgICAgSURDX0RTT1VORF9CSVRTLDIyMCwyMzAsMzAsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBDT05UUk9MICAgICAgICAgIkVtdWxhY2nzbiBkZWwgbWFuZWphZG9yIixJRENfRFNPVU5EX0RSVl9FTVVMLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTUsMjUwLDIzMCwxMApFTkQKCklERF9ERVNLVE9QX0lOVEVHUkFUSU9OIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAgICAgICAgIiBBcGFyaWVuY2lhICIsSURDX1NUQVRJQyw4LDQsMjQ0LDEwNgogICAgTFRFWFQgICAgICAgICAgICJUZW1hOiIsSURDX1NUQVRJQywxNSwxNiwxMzAsOAogICAgQ09NQk9CT1ggICAgICAgIElEQ19USEVNRV9USEVNRUNPTUJPLDE1LDI0LDEzMCwxNCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiSW5zdGFsYXIgdGVtYS4uLiIsSURDX1RIRU1FX0lOU1RBTEwsMTUyLDIzLDkzLDE0CiAgICBMVEVYVCAgICAgICAgICAgIkNvbG9yOiIsSURDX1RIRU1FX0NPTE9SVEVYVCwxNSw0MCwxMTIsOAogICAgQ09NQk9CT1ggICAgICAgIElEQ19USEVNRV9DT0xPUkNPTUJPLDE1LDQ4LDExMiwxNCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiVGFtYfFvOiIsSURDX1RIRU1FX1NJWkVURVhULDEzNSw0MCwxMTAsOAogICAgQ09NQk9CT1ggICAgICAgIElEQ19USEVNRV9TSVpFQ09NQk8sMTM1LDQ4LDExMCwxNCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiRWxlbWVudG86IixJRENfU1RBVElDLDE1LDY0LDExMiw4CiAgICBDT01CT0JPWCAgICAgICAgSURDX1NZU1BBUkFNX0NPTUJPLDE1LDc0LDExMiwxMjAsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NPUlQKICAgIExURVhUICAgICAgICAgICAiQ29sb3I6IixJRENfU1lTUEFSQU1fQ09MT1JfVEVYVCwxMzUsNjQsMjUsOCxXU19ESVNBQkxFRAogICAgUFVTSEJVVFRPTiAgICAgICIiLElEQ19TWVNQQVJBTV9DT0xPUiwxMzUsNzQsMjUsMTMsV1NfRElTQUJMRUQgfCBCU19PV05FUkRSQVcKICAgIExURVhUICAgICAgICAgICAiVGFtYfFvOiIsSURDX1NZU1BBUkFNX1NJWkVfVEVYVCwxNjYsNjQsMzAsOCxXU19ESVNBQkxFRAogICAgRURJVFRFWFQgICAgICAgIElEQ19TWVNQQVJBTV9TSVpFLDE2Niw3NCwyMywxMyxFU19BVVRPSFNDUk9MTCB8IFdTX1RBQlNUT1AgfCBXU19ESVNBQkxFRAogICAgQ09OVFJPTCAgICAgICAgICIiLElEQ19TWVNQQVJBTV9TSVpFX1VELFVQRE9XTl9DTEFTUyxVRFNfU0VUQlVERFlJTlQgfCBXU19ESVNBQkxFRCwxODcsNzQsMTUsMTMKICAgIFBVU0hCVVRUT04gICAgICAiRnVlbnRlIixJRENfU1lTUEFSQU1fRk9OVCwyMDgsNzQsMzcsMTMsV1NfRElTQUJMRUQKICAgIEdST1VQQk9YICAgICAgICAiIENhcnBldGFzIGRlbCBzaXN0ZW1hICIsSURDX1NUQVRJQyw4LDExNCwyNDQsMTAwCiAgICBDT05UUk9MICAgICAgICAgIkxpc3R2aWV3IixJRENfTElTVF9TRlBBVEhTLCJTeXNMaXN0VmlldzMyIixMVlNfUkVQT1JUIHwgTFZTX0FVVE9BUlJBTkdFIHwgTFZTX0FMSUdOTEVGVCB8CiAgICAgICAgICAgICAgICAgICAgIExWU19TSU5HTEVTRUwgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QLCAxNSwxMjYsMjMwLDY0CiAgICBDT05UUk9MICAgICAgICAgIkVubGFjZSBhOiIsSURDX0xJTktfU0ZQQVRILCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QfFdTX0RJU0FCTEVELDE1LDE5NSw1MCwxMwogICAgRURJVFRFWFQgICAgICAgICBJRENfRURJVF9TRlBBVEgsNjUsMTk1LDE0NSwxMyxFU19BVVRPSFNDUk9MTHxXU19UQUJTVE9QfFdTX0RJU0FCTEVECiAgICBQVVNIQlVUVE9OICAgICAgIkV4cGxvcmFyIixJRENfQlJPV1NFX1NGUEFUSCwyMTUsMTk1LDMwLDEzLFdTX0RJU0FCTEVECkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19UQUJfQVBQTElDQVRJT05TICAgICJBcGxpY2FjaW9uZXMiCiAgICBJRFNfVEFCX0RMTFMgICAgICAgICAgICAiTGlicmVy7WFzIgogICAgSURTX1RBQl9EUklWRVMgICAgICAgICAgIlVuaWRhZGVzIgogICAgSURTX0NIT09TRV9QQVRIICAgICAgICAgIlBvciBmYXZvciwgc2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIHVuaXguIgogICAgSURTX0hJREVfQURWQU5DRUQgICAgICAgIk9jdWx0YXIgYXZhbnphZG8iCiAgICBJRFNfU0hPV19BRFZBTkNFRCAgICAgICAiTW9zdHJhciBhdmFuemFkbyIKICAgIElEU19OT1RIRU1FICAgICAgICAgICAgICIoTmluZ/puIHRlbWEpIgogICAgSURTX1RBQl9HUkFQSElDUyAgICAgICAgIkdy4WZpY29zIgogICAgSURTX1RBQl9ERVNLVE9QX0lOVEVHUkFUSU9OICJJbnRlZ3JhY2nzbiBkZSBlc2NyaXRvcmlvIgogICAgSURTX1RBQl9BVURJTyAgICAgICAgICAgIkF1ZGlvIgogICAgSURTX1RBQl9BQk9VVCAgICAgICAgICAgIkFjZXJjYSBkZSIKICAgIElEU19XSU5FQ0ZHX1RJVExFICAgICAgICJDb25maWd1cmFjafNuIGRlIFdpbmUiCiAgICBJRFNfV0lORUNGR19USVRMRV9BUFAgICAiQ29uZmlndXJhY2nzbiBkZSBXaW5lIHBhcmEgJXMiCiAgICBJRFNfVEhFTUVGSUxFICAgICAgICAgICAiRmljaGVyb3MgZGUgdGVtYSIKICAgIElEU19USEVNRUZJTEVfU0VMRUNUICAgICJTZWxlY2Npb25lIHVuIGZpY2hlcm8gZGUgdGVtYSIKICAgIElEU19BVURJT19NSVNTSU5HICAgICAgICJBY3R1YWxtZW50ZSBubyBoYXkgbmluZ/puIG1hbmVqYWRvciBkZSBhdWRpbyBlc3BlY2lmaWNhZG8gZW4gZWwgcmVnaXN0cm8uXG5cblNlIGhhIHNlbGVjY2lvbmFkbyBwYXJhIHVzdGVkIHVuIG1hbmVqYWRvciByZWNvbWVuZGFkby4gUHVlZGUgdXNhciDpc3RlIG8gc2VsZWNjaW9uYXIgb3RybyBtYW5lamFkb3IgZGlzcG9uaWJsZS5cblxuRGViZSBwdWxzYXIgQXBsaWNhciBwYXJhIHF1ZSBsYSBzZWxlY2Np824gc3VyamEgZWZlY3RvLiIKICAgIElEU19TSEVMTF9GT0xERVIgICAgICAgICJDYXJwZXRhIGRlbCBzaXN0ZW1hIgogICAgSURTX0xJTktTX1RPICAgICAgICAgICAgIkVubGF6YSBhIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfRExMX1dBUk5JTkcgICAgICAgICAiTm8gc2UgcmVjb21pZW5kYSBjYW1iaWFyIGVsIG9yZGVuIGRlIGNhcmdhIGRlIGVzdGEgbGlicmVy7WEuXG6/RXN04SBzZWd1cm8gcXVlIGRlc2VhIGhhY2VyIGVzdG8/IgogICAgSURTX0RMTF9XQVJOSU5HX0NBUFRJT04gIkFkdmVydGVuY2lhOiBsaWJyZXLtYSBkZWwgc2lzdGVtYSIKICAgIElEU19ETExfTkFUSVZFICAgICAgICAgICJuYXRpdmEiCiAgICBJRFNfRExMX0JVSUxUSU4gICAgICAgICAiaW50ZXJuYSIKICAgIElEU19ETExfTkFUSVZFX0JVSUxUSU4gICJuYXRpdmEsIGludGVybmEiCiAgICBJRFNfRExMX0JVSUxUSU5fTkFUSVZFICAiaW50ZXJuYSwgbmF0aXZhIgogICAgSURTX0RMTF9ESVNBQkxFRCAgICAgICAgImRlc2hhYmlsaXRhZGEiCiAgICBJRFNfREVGQVVMVF9TRVRUSU5HUyAgICAiQ29uZmlndXJhY2nzbiBwb3IgZGVmZWN0byIKICAgIElEU19FWEVDVVRBQkxFX0ZJTFRFUiAgICJQcm9ncmFtYXMgV2luZSAoKi5leGUsKi5leGUuc28pXDAqLmV4ZTsqLmV4ZS5zb1wwIgogICAgSURTX1VTRV9HTE9CQUxfU0VUVElOR1MgIlVzYXIgbGEgY29uZmlndXJhY2nzbiBnbG9iYWwiCiAgICBJRFNfU0VMRUNUX0VYRUNVVEFCTEUgICAiU2VsZWNjaW9uZSB1biBmaWNoZXJvIGVqZWN1dGFibGUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19TSEFERVJfTU9ERV9IQVJEV0FSRSAgICAiSGFyZHdhcmUiCiAgICBJRFNfU0hBREVSX01PREVfTk9ORSAgICAgICAgIk5pbmd1bm8iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19EUklWRV9VTktOT1dOICAgICAgICAgICAiQXV0b2RldGVjdGFyIgogICAgSURTX0RSSVZFX0ZJWEVEICAgICAgICAgICAgICJEaXNjbyBkdXJvIGxvY2FsIgogICAgSURTX0RSSVZFX1JFTU9URSAgICAgICAgICAgICJDb21wYXJ0aWNp824gZGUgcmVkIgogICAgSURTX0RSSVZFX1JFTU9WQUJMRSAgICAgICAgICJEaXNjbyBmbGV4aWJsZSIKICAgIElEU19EUklWRV9DRFJPTSAgICAgICAgICAgICAiQ0QtUk9NIgogICAgSURTX0RSSVZFX0xFVFRFUlNfRVhDRUVERUQgICJObyBwdWVkZSBh8WFkaXIgbeFzIHVuaWRhZGVzLlxuXG5DYWRhIHVuaWRhZCBkZWJlIHRlbmVyIHVuYSBsZXRyYSwgZGUgbGEgQSBhIGxhIFosIHBvciBsbyBxdWUgbm8gcHVlZGUgdGVuZXIgbeFzIGRlIDI2IgogICAgSURTX1NZU1RFTV9EUklWRV9MQUJFTCAgICAgICJVbmlkYWQgZGVsIHNpc3RlbWEiCiAgICBJRFNfQ09ORklSTV9ERUxFVEVfQyAgICAgICAgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGxhIHVuaWRhZCBDP1xuXG5MYSBtYXlvcu1hIGRlIGxhcyBhcGxpY2FjaW9uZXMgV2luZG93cyBlc3BlcmFuIHF1ZSBsYSB1bmlkYWQgQyBleGlzdGEsIHkgZmFsbGFy4W4gc2kgbm8gZXhpc3RlLiChU2kgbG8gaGFjZSByZWN1ZXJkZSB2b2x2ZXIgYSBjcmVhcmxhISIKICAgIElEU19DT0xfRFJJVkVMRVRURVIgICAgICAgICAiTGV0cmEiCiAgICBJRFNfQ09MX0RSSVZFTUFQUElORyAgICAgICAgIk1hcGVvIGRlIHVuaWRhZCIKICAgIElEU19OT19EUklWRV9DICAgICAgICAgICAgICAiTm8gdGllbmUgdW5hIHVuaWRhZCBDLiBFc3RvIG5vIGVzIG11eSBidWVuby5cblxuoVJlY3VlcmRlIHB1bHNhciAnQfFhZGlyJyBlbiBsYSBwZXN0YfFhIGRlIFVuaWRhZGVzIHBhcmEgY3JlYXIgdW5hIVxuIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQUNDRUxfRlVMTCAgICAgICAgICAgICAgIkNvbXBsZXRhIgogICAgSURTX0FDQ0VMX1NUQU5EQVJEICAgICAgICAgICJFc3ThbmRhciIKICAgIElEU19BQ0NFTF9CQVNJQyAgICAgICAgICAgICAiQuFzaWNhIgogICAgSURTX0FDQ0VMX0VNVUxBVElPTiAgICAgICAgICJFbXVsYWNp824iCiAgICBJRFNfRFJJVkVSX0FMU0EgICAgICAgICAgICAgIk1hbmVqYWRvciBBTFNBIgogICAgSURTX0RSSVZFUl9FU09VTkQgICAgICAgICAgICJNYW5lamFkb3IgRXNvdW5EIgogICAgSURTX0RSSVZFUl9PU1MgICAgICAgICAgICAgICJNYW5lamFkb3IgT1NTIgogICAgSURTX0RSSVZFUl9KQUNLICAgICAgICAgICAgICJNYW5lamFkb3IgSkFDSyIKICAgIElEU19EUklWRVJfTkFTICAgICAgICAgICAgICAiTWFuZWphZG9yIE5BUyIKICAgIElEU19EUklWRVJfQVVESU9JTyAgICAgICAgICAiTWFuZWphZG9yIEF1ZGlvIElPIChTb2xhcmlzKSIKICAgIElEU19EUklWRVJfQ09SRUFVRElPICAgICAgICAiTWFuZWphZG9yIENvcmVBdWRpbyIKICAgIElEU19PUEVOX0RSSVZFUl9FUlJPUiAgICAgICAioU5vIHNlIGhhIHBvZGlkbyBhYnJpciAlcyEiCiAgICBJRFNfU09VTkREUklWRVJTICAgICAgICAgICAgIk1hbmVqYWRvcmVzIGRlIHNvbmlkbyIKICAgIElEU19ERVZJQ0VTX1dBVkVPVVQgICAgICAgICAiRGlzcG9zaXRpdm9zIGRlIHNhbGlkYSBkZSBvbmRhIgogICAgSURTX0RFVklDRVNfV0FWRUlOICAgICAgICAgICJEaXNwb3NpdGl2b3MgZGUgZW50cmFkYSBkZSBvbmRhIgogICAgSURTX0RFVklDRVNfTUlESU9VVCAgICAgICAgICJEaXNwb3NpdGl2b3MgZGUgc2FsaWRhIE1JREkiCiAgICBJRFNfREVWSUNFU19NSURJSU4gICAgICAgICAgIkRpc3Bvc2l0aXZvcyBkZSBlbnRyYWRhIE1JREkiCiAgICBJRFNfREVWSUNFU19BVVggICAgICAgICAgICAgIkRpc3Bvc2l0aXZvcyBhdXhpbGlhcmVzIgogICAgSURTX0RFVklDRVNfTUlYRVIgICAgICAgICAgICJEaXNwb3NpdGl2b3MgbWV6Y2xhZG9yZXMiCiAgICBJRFNfVU5BVkFJTEFCTEVfRFJJVkVSICAgICAgIqFTZSBoYSBlbmNvbnRyYWRvIGVuIGVsIHJlZ2lzdHJvIHVuIG1hbmVqYWRvciBxdWUgbm8gZXN04SBkaXNwb25pYmxlIVxuXG6/RWxpbWluYXIgXCIlc1wiIGRlbCByZWdpc3Rybz8iCiAgICBJRFNfV0FSTklORyAgICAgICAgICAgICAgICAgIkFkdmVydGVuY2lhIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRENfU1lTUEFSQU1TX0JVVFRPTiAgICAgICAgICAgICJGb25kbyBkZWwgY29udHJvbCIKICAgIElEQ19TWVNQQVJBTVNfQlVUVE9OX1RFWFQgICAgICAgIlRleHRvIGRlbCBjb250cm9sIgogICAgSURDX1NZU1BBUkFNU19ERVNLVE9QICAgICAgICAgICAiRXNjcml0b3JpbyIKICAgIElEQ19TWVNQQVJBTVNfTUVOVSAgICAgICAgICAgICAgIkZvbmRvIGRlbCBtZW76IgogICAgSURDX1NZU1BBUkFNU19NRU5VX1RFWFQgICAgICAgICAiVGV4dG8gZGVsIG1lbvoiCiAgICBJRENfU1lTUEFSQU1TX1NDUk9MTEJBUiAgICAgICAgICJCYXJyYSBkZSBkZXNwbGF6YW1pZW50byIKICAgIElEQ19TWVNQQVJBTVNfU0VMRUNUSU9OICAgICAgICAgIkZvbmRvIGRlIGxhIHNlbGVjY2nzbiIKICAgIElEQ19TWVNQQVJBTVNfU0VMRUNUSU9OX1RFWFQgICAgIlRleHRvIGRlIGxhIHNlbGVjY2nzbiIKICAgIElEQ19TWVNQQVJBTVNfVE9PTFRJUCAgICAgICAgICAgIkZvbmRvIGRlbCBjb25zZWpvIgogICAgSURDX1NZU1BBUkFNU19UT09MVElQX1RFWFQgICAgICAiVGV4dG8gZGVsIGNvbnNlam8iCiAgICBJRENfU1lTUEFSQU1TX1dJTkRPVyAgICAgICAgICAgICJGb25kbyBkZSBsYSB2ZW50YW5hIgogICAgSURDX1NZU1BBUkFNU19XSU5ET1dfVEVYVCAgICAgICAiVGV4dG8gZGUgbGEgdmVudGFuYSIKICAgIElEQ19TWVNQQVJBTVNfQUNUSVZFX1RJVExFICAgICAgIkJhcnJhIGRlIHTtdHVsbyBhY3RpdmEiCiAgICBJRENfU1lTUEFSQU1TX0FDVElWRV9USVRMRV9URVhUICJUZXh0byBkZSBiYXJyYSBkZSB07XR1bG8gYWN0aXZhIgogICAgSURDX1NZU1BBUkFNU19JTkFDVElWRV9USVRMRSAgICAiQmFycmEgZGUgdO10dWxvIGluYWN0aXZhIgogICAgSURDX1NZU1BBUkFNU19JTkFDVElWRV9USVRMRV9URVhUICJUZXh0byBkZSBiYXJyYSBkZSB07XR1bG8gaW5hY3RpdmEiCiAgICBJRENfU1lTUEFSQU1TX01TR0JPWF9URVhUICAgICAgICJNZXNzYWdlIEJveCBUZXh0IgpFTkQK