LyoKICogY3J5cHQzMiBkbGwgRnJlbmNoIHJlc291cmNlcwogKgogKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvbmF0aGFuIEVybnN0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19BVVRIT1JJVFlfS0VZX0lEICJJZGVudGlmaWFudCBkZSBsJ2F1dGhvcml06SBkZSBsYSBjbOkiCiAgICBJRFNfS0VZX0FUVFJJQlVURVMgIkF0dHJpYnV0cyBkZSBsYSBjbOkiCiAgICBJRFNfS0VZX1VTQUdFX1JFU1RSSUNUSU9OICJSZXN0cmljdGlvbnMgZGUgbCd1dGlsaXNhdGlvbiBkZSBsYSBjbOkiCiAgICBJRFNfU1VCSkVDVF9BTFRfTkFNRSAiU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lIgogICAgSURTX0lTU1VFUl9BTFRfTkFNRSAiSXNzdWVyIEFsdGVybmF0aXZlIE5hbWUiCiAgICBJRFNfQkFTSUNfQ09OU1RSQUlOVFMgIkJhc2ljIENvbnN0cmFpbnRzIgogICAgSURTX0tFWV9VU0FHRSAiVXRpbGlzYXRpb24gZGUgbGEgY2zpIgogICAgSURTX0NFUlRfUE9MSUNJRVMgIkNlcnRpZmljYXRlIFBvbGljaWVzIgogICAgSURTX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIgIlN1YmplY3QgS2V5IElkZW50aWZpZXIiCiAgICBJRFNfQ1JMX1JFQVNPTl9DT0RFICJDUkwgUmVhc29uIENvZGUiCiAgICBJRFNfQ1JMX0RJU1RfUE9JTlRTICJDUkwgRGlzdHJpYnV0aW9uIFBvaW50cyIKICAgIElEU19FTkhBTkNFRF9LRVlfVVNBR0UgIkVuaGFuY2VkIEtleSBVc2FnZSIKICAgIElEU19BVVRIT1JJVFlfSU5GT19BQ0NFU1MgIkF1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3MiCiAgICBJRFNfQ0VSVF9FWFRFTlNJT05TICJDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zIgogICAgSURTX05FWFRfVVBEQVRFX0xPQ0FUSU9OICJOZXh0IFVwZGF0ZSBMb2NhdGlvbiIKICAgIElEU19ZRVNfT1JfTk9fVFJVU1QgIlllcyBvciBObyBUcnVzdCIKICAgIElEU19FTUFJTF9BRERSRVNTICJFbWFpbCBBZGRyZXNzIgogICAgSURTX1VOU1RSVUNUVVJFRF9OQU1FICJVbnN0cnVjdHVyZWQgTmFtZSIKICAgIElEU19DT05URU5UX1RZUEUgIkNvbnRlbnQgVHlwZSIKICAgIElEU19NRVNTQUdFX0RJR0VTVCAiTWVzc2FnZSBEaWdlc3QiCiAgICBJRFNfU0lHTklOR19USU1FICJTaWduaW5nIFRpbWUiCiAgICBJRFNfQ09VTlRFUl9TSUdOICJDb3VudGVyIFNpZ24iCiAgICBJRFNfQ0hBTExFTkdFX1BBU1NXT1JEICJDaGFsbGVuZ2UgUGFzc3dvcmQiCiAgICBJRFNfVU5TVFJVQ1RVUkVEX0FERFJFU1MgIlVuc3RydWN0dXJlZCBBZGRyZXNzIgogICAgSURTX1NNSU1FX0NBUEFCSUxJVElFUyAiU01JTUUgQ2FwYWJpbGl0aWVzIgogICAgSURTX1BSRUZFUl9TSUdORURfREFUQSAiUHJlZmVyIFNpZ25lZCBEYXRhIgogICAgSURTX0NQUyAiQ1BTIgogICAgSURTX1VTRVJfTk9USUNFICJOb3RpY2UgdXRpbGlzYXRldXIiCiAgICBJRFNfT0NTUCAiT24tbGluZSBDZXJ0aWZpY2F0ZSBTdGF0dXMgUHJvdG9jb2wiCiAgICBJRFNfQ0FfSVNTVUVSICJDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBJc3N1ZXIiCiAgICBJRFNfQ0VSVF9URU1QTEFURV9OQU1FICJDZXJ0aWZpY2F0aW9uIFRlbXBsYXRlIE5hbWUiCiAgICBJRFNfQ0VSVF9UWVBFICJDZXJ0aWZpY2F0ZSBUeXBlIgogICAgSURTX0NFUlRfTUFOSUZPTEQgIkNlcnRpZmljYXRlIE1hbmlmb2xkIgogICAgSURTX05FVFNDQVBFX0NFUlRfVFlQRSAiVHlwZSBkZSBjZXJ0aWZpY2F0IE5ldHNjYXBlIgogICAgSURTX05FVFNDQVBFX0JBU0VfVVJMICJVUkwgTmV0c2NhcGUgZGUgYmFzZSIKICAgIElEU19ORVRTQ0FQRV9SRVZPQ0FUSU9OX1VSTCAiVVJMIE5ldHNjYXBlIGRlIHLpdm9jYXRpb24iCiAgICBJRFNfTkVUU0NBUEVfQ0FfUkVWT0NBVElPTl9VUkwgIlVSTCBOZXRzY2FwZSBkZSBy6XZvY2F0aW9uIGR1IGNlcnRpZmljYXQiCiAgICBJRFNfTkVUU0NBUEVfQ0VSVF9SRU5FV0FMX1VSTCAiVVJMIE5ldHNjYXBlIGRlIHJlbm91dmVsbGVtZW50IGR1IGNlcnRpZmljYXQiCiAgICBJRFNfTkVUU0NBUEVfQ0FfUE9MSUNZX1VSTCAiTmV0c2NhcGUgQ0EgUG9saWN5IFVSTCIKICAgIElEU19ORVRTQ0FQRV9TU0xfU0VSVkVSX05BTUUgIk5ldHNjYXBlIFNTTCBTZXJ2ZXJOYW1lIgogICAgSURTX05FVFNDQVBFX0NPTU1FTlQgIkNvbW1lbnRhaXJlIE5ldHNjYXBlIgogICAgSURTX1NQQ19TUF9BR0VOQ1lfSU5GTyAiU3BjU3BBZ2VuY3lJbmZvIgogICAgSURTX1NQQ19GSU5BTkNJQUxfQ1JJVEVSSUEgIlNwY0ZpbmFuY2lhbENyaXRlcmlhIgogICAgSURTX1NQQ19NSU5JTUFMX0NSSVRFUklBICJTcGNNaW5pbWFsQ3JpdGVyaWEiCiAgICBJRFNfQ09VTlRSWSAiUGF5cy9S6Wdpb24iCiAgICBJRFNfT1JHQU5JWkFUSU9OICJPcmdhbmlzYXRpb24iCiAgICBJRFNfT1JHQU5JWkFUSU9OQUxfVU5JVCAiVW5pdOkgZCdvcmdhbmlzYXRpb24iCiAgICBJRFNfQ09NTU9OX05BTUUgIk5vbSBjb21tdW4iCiAgICBJRFNfTE9DQUxJVFkgIkxvY2FsaXR5IgogICAgSURTX1NUQVRFX09SX1BST1ZJTkNFICLJdGF0IG91IHByb3ZpbmNlIgogICAgSURTX1RJVExFICJUaXRyZSIKICAgIElEU19HSVZFTl9OQU1FICJOb20gZG9ubukiCiAgICBJRFNfSU5JVElBTFMgIkluaXRpYWxlcyIKICAgIElEU19TVVJfTkFNRSAiTm9tIGRlIGZhbWlsbGUiCiAgICBJRFNfRE9NQUlOX0NPTVBPTkVOVCAiRG9tYWluIENvbXBvbmVudCIKICAgIElEU19TVFJFRVRfQUREUkVTUyAiQWRyZXNzZSIKICAgIElEU19TRVJJQUxfTlVNQkVSICJOdW3pcm8gZGUgc+lyaWUiCiAgICBJRFNfQ0FfVkVSU0lPTiAiVmVyc2lvbiBkdSBDQSIKICAgIElEU19DUk9TU19DQV9WRVJTSU9OICJDcm9zcyBDQSBWZXJzaW9uIgogICAgSURTX1NFUklBTElaRURfU0lHX1NFUklBTF9OVU1CRVIgIlNlcmlhbGl6ZWQgU2lnbmF0dXJlIFNlcmlhbCBOdW1iZXIiCiAgICBJRFNfUFJJTkNJUEFMX05BTUUgIk5vbSBwcmluY2lwYWwiCiAgICBJRFNfV0lORE9XU19QUk9EVUNUX1VQREFURSAiTWlzZSDgIGpvdXIgZGUgV2luZG93cyIKICAgIElEU19FTlJPTExNRU5UX05BTUVfVkFMVUVfUEFJUiAiRW5yb2xsbWVudCBOYW1lIFZhbHVlIFBhaXIiCiAgICBJRFNfT1NfVkVSU0lPTiAiVmVyc2lvbiBkdSBzeXN06G1lIGQnZXhwbG9pdGF0aW9uIgogICAgSURTX0VOUk9MTE1FTlRfQ1NQICJFbnJvbGxtZW50IENTUCIKICAgIElEU19DUkxfTlVNQkVSICJDUkwgTnVtYmVyIgogICAgSURTX0RFTFRBX0NSTF9JTkRJQ0FUT1IgIkRlbHRhIENSTCBJbmRpY2F0b3IiCiAgICBJRFNfSVNTVUlOR19ESVNUX1BPSU5UICJJc3N1aW5nIERpc3RyaWJ1dGlvbiBQb2ludCIKICAgIElEU19GUkVTSEVTVF9DUkwgIkZyZXNoZXN0IENSTCIKICAgIElEU19OQU1FX0NPTlNUUkFJTlRTICJDb250cmFpbnRlcyBkZSBub20iCiAgICBJRFNfUE9MSUNZX01BUFBJTkdTICJQb2xpY3kgTWFwcGluZ3MiCiAgICBJRFNfUE9MSUNZX0NPTlNUUkFJTlRTICJQb2xpY3kgQ29uc3RyYWludHMiCiAgICBJRFNfQ1JPU1NfQ0VSVF9ESVNUX1BPSU5UUyAiQ3Jvc3MtQ2VydGlmaWNhdGUgRGlzdHJpYnV0aW9uIFBvaW50cyIKICAgIElEU19BUFBMSUNBVElPTl9QT0xJQ0lFUyAiQXBwbGljYXRpb24gUG9saWNpZXMiCiAgICBJRFNfQVBQTElDQVRJT05fUE9MSUNZX01BUFBJTkdTICJBcHBsaWNhdGlvbiBQb2xpY3kgTWFwcGluZ3MiCiAgICBJRFNfQVBQTElDQVRJT05fUE9MSUNZX0NPTlNUUkFJTlRTICJBcHBsaWNhdGlvbiBQb2xpY3kgQ29uc3RyYWludHMiCiAgICBJRFNfQ01DX0RBVEEgIkNNQyBEYXRhIgogICAgSURTX0NNQ19SRVNQT05TRSAiQ01DIFJlc3BvbnNlIgogICAgSURTX1VOU0lHTkVEX0NNQ19SRVFVRVNUICJVbnNpZ25lZCBDTUMgUmVxdWVzdCIKICAgIElEU19DTUNfU1RBVFVTX0lORk8gIkNNQyBTdGF0dXMgSW5mbyIKICAgIElEU19DTUNfRVhURU5TSU9OUyAiQ01DIEV4dGVuc2lvbnMiCiAgICBJRFNfQ01DX0FUVFJJQlVURVMgIkNNQyBBdHRyaWJ1dGVzIgogICAgSURTX1BLQ1NfN19EQVRBICJEb25u6WVzIFBLQ1MgNyIKICAgIElEU19QS0NTXzdfU0lHTkVEICJTaWdu6SBhdmVjIFBLQ1MgNyIKICAgIElEU19QS0NTXzdfRU5WRUxPUEVEICJFbnZlbG9wcOkgYXZlYyBQS0NTIDciCiAgICBJRFNfUEtDU183X1NJR05FRF9FTlZFTE9QRUQgIkVudmVsb3Bw6SBldCBzaWdu6SBhdmVjIFBLQ1MgNyIKICAgIElEU19QS0NTXzdfRElHRVNURUQgIkhhY2jpIGF2ZWMgUEtDUyA3IgogICAgSURTX1BLQ1NfN19FTkNSWVBURUQgIkNoaWZmcukgYXZlYyBQS0NTIDciCiAgICBJRFNfUFJFVklPVVNfQ0FfQ0VSVF9IQVNIICJQcmV2aW91cyBDQSBDZXJ0aWZpY2F0ZSBIYXNoIgogICAgSURTX0NSTF9WSVJUVUFMX0JBU0UgIlZpcnR1YWwgQmFzZSBDUkwgTnVtYmVyIgogICAgSURTX0NSTF9ORVhUX1BVQkxJU0ggIk5leHQgQ1JMIFB1Ymxpc2giCiAgICBJRFNfQ0FfRVhDSEFOR0UgIkNlcnRpZmljYXQgZGUgY2hpZmZyZW1lbnQgQ0EiCiAgICBJRFNfS0VZX1JFQ09WRVJZX0FHRU5UICJLZXkgUmVjb3ZlcnkgQWdlbnQiCiAgICBJRFNfQ0VSVElGSUNBVEVfVEVNUExBVEUgIkNlcnRpZmljYXRlIFRlbXBsYXRlIEluZm9ybWF0aW9uIgogICAgSURTX0VOVEVSUFJJU0VfUk9PVF9PSUQgIkVudGVycHJpc2UgUm9vdCBPSUQiCiAgICBJRFNfUkROX0RVTU1ZX1NJR05FUiAiU2lnbmF0YWlyZSBmYWN0aWNlIgogICAgSURTX0FSQ0hJVkVEX0tFWV9BVFRSICJDbOkgZGUgY2hpZmZyZW1lbnQgcHJpdullIgogICAgSURTX0NSTF9TRUxGX0NEUCAiUHVibGlzaGVkIENSTCBMb2NhdGlvbnMiCiAgICBJRFNfUkVRVUlSRV9DRVJUX0NIQUlOX1BPTElDWSAiRW5mb3JjZSBDZXJ0aWZpY2F0ZSBDaGFpbiBQb2xpY3kiCiAgICBJRFNfVFJBTlNBQ1RJT05fSUQgIlRyYW5zYWN0aW9uIElkIgogICAgSURTX1NFTkRFUl9OT05DRSAiU2VuZGVyIE5vbmNlIgogICAgSURTX1JFQ0lQSUVOVF9OT05DRSAiUmVjaXBpZW50IE5vbmNlIgogICAgSURTX1JFR19JTkZPICJSZWcgSW5mbyIKICAgIElEU19HRVRfQ0VSVElGSUNBVEUgIkdldCBDZXJ0aWZpY2F0ZSIKICAgIElEU19HRVRfQ1JMICJHZXQgQ1JMIgogICAgSURTX1JFVk9LRV9SRVFVRVNUICJSZXZva2UgUmVxdWVzdCIKICAgIElEU19RVUVSWV9QRU5ESU5HICJRdWVyeSBQZW5kaW5nIgogICAgSURTX1NPUlRFRF9DVEwgIkNlcnRpZmljYXRlIFRydXN0IExpc3QiCiAgICBJRFNfQVJDSElWRURfS0VZX0NFUlRfSEFTSCAiQXJjaGl2ZWQgS2V5IENlcnRpZmljYXRlIEhhc2giCiAgICBJRFNfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9EICJQcml2YXRlIEtleSBVc2FnZSBQZXJpb2QiCiAgICBJRFNfQ0xJRU5UX0lORk9STUFUSU9OICJDbGllbnQgSW5mb3JtYXRpb24iCiAgICBJRFNfU0VSVkVSX0FVVEhFTlRJQ0FUSU9OICJTZXJ2ZXIgQXV0aGVudGljYXRpb24iCiAgICBJRFNfQ0xJRU5UX0FVVEhFTlRJQ0FUSU9OICJDbGllbnQgQXV0aGVudGljYXRpb24iCiAgICBJRFNfQ09ERV9TSUdOSU5HICJDb2RlIFNpZ25pbmciCiAgICBJRFNfU0VDVVJFX0VNQUlMICJTZWN1cmUgRW1haWwiCiAgICBJRFNfVElNRV9TVEFNUElORyAiVGltZSBTdGFtcGluZyIKICAgIElEU19NSUNST1NPRlRfVFJVU1RfTElTVF9TSUdOSU5HICJNaWNyb3NvZnQgVHJ1c3QgTGlzdCBTaWduaW5nIgogICAgSURTX01JQ1JPU09GVF9USU1FX1NUQU1QSU5HICJNaWNyb3NvZnQgVGltZSBTdGFtcGluZyIKICAgIElEU19JUFNFQ19FTkRfU1lTVEVNICJJUCBzZWN1cml0eSBlbmQgc3lzdGVtIgogICAgSURTX0lQU0VDX1RVTk5FTCAiSVAgc2VjdXJpdHkgdHVubmVsIHRlcm1pbmF0aW9uIgogICAgSURTX0lQU0VDX1VTRVIgIklQIHNlY3VyaXR5IHVzZXIiCiAgICBJRFNfRUZTICJFbmNyeXB0aW5nIEZpbGUgU3lzdGVtIgogICAgSURTX1dIUUxfQ1JZUFRPICJXaW5kb3dzIEhhcmR3YXJlIERyaXZlciBWZXJpZmljYXRpb24iCiAgICBJRFNfTlQ1X0NSWVBUTyAiV2luZG93cyBTeXN0ZW0gQ29tcG9uZW50IFZlcmlmaWNhdGlvbiIKICAgIElEU19PRU1fV0hRTF9DUllQVE8gIk9FTSBXaW5kb3dzIFN5c3RlbSBDb21wb25lbnQgVmVyaWZpY2F0aW9uIgogICAgSURTX0VNQkVEREVEX05UX0NSWVBUTyAiRW1iZWRkZWQgV2luZG93cyBTeXN0ZW0gQ29tcG9uZW50IFZlcmlmaWNhdGlvbiIKICAgIElEU19LRVlfUEFDS19MSUNFTlNFUyAiS2V5IFBhY2sgTGljZW5zZXMiCiAgICBJRFNfTElDRU5TRV9TRVJWRVIgIkxpY2Vuc2UgU2VydmVyIFZlcmlmaWNhdGlvbiIKICAgIElEU19TTUFSVF9DQVJEX0xPR09OICJTbWFydCBDYXJkIExvZ29uIgogICAgSURTX0RJR0lUQUxfUklHSFRTICJEaWdpdGFsIFJpZ2h0cyIKICAgIElEU19RVUFMSUZJRURfU1VCT1JESU5BVElPTiAiUXVhbGlmaWVkIFN1Ym9yZGluYXRpb24iCiAgICBJRFNfS0VZX1JFQ09WRVJZICJS6WN1cOlyYXRpb24gZGUgY2zpIgogICAgSURTX0RPQ1VNRU5UX1NJR05JTkcgIlNpZ25hdHVyZSBkZSBkb2N1bWVudCIKICAgIElEU19JUFNFQ19JS0VfSU5URVJNRURJQVRFICJJUCBzZWN1cml0eSBJS0UgaW50ZXJtZWRpYXRlIgogICAgSURTX0ZJTEVfUkVDT1ZFUlkgIlLpY3Vw6XJhdGlvbiBkZSBmaWNoaWVyIgogICAgSURTX1JPT1RfTElTVF9TSUdORVIgIlNpZ25hdGFpcmVzIGRlIGxhIGxpc3RlIHJhY2luZSIKICAgIElEU19BTllfQVBQTElDQVRJT05fUE9MSUNJRVMgIkFsbCBhcHBsaWNhdGlvbiBwb2xpY2llcyIKICAgIElEU19EU19FTUFJTF9SRVBMSUNBVElPTiAiRGlyZWN0b3J5IFNlcnZpY2UgRW1haWwgUmVwbGljYXRpb24iCiAgICBJRFNfRU5ST0xMTUVOVF9BR0VOVCAiQ2VydGlmaWNhdGUgUmVxdWVzdCBBZ2VudCIKICAgIElEU19MSUZFVElNRV9TSUdOSU5HICJMaWZldGltZSBTaWduaW5nIgogICAgSURTX0FOWV9DRVJUX1BPTElDWSAiQWxsIGlzc3VhbmNlIHBvbGljaWVzIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfTE9DQUxJWkVETkFNRV9ST09UICJBdXRvcml06XMgZGUgY2VydGlmaWNhdGlvbiBkZSBjb25maWFuY2UiCiAgICBJRFNfTE9DQUxJWkVETkFNRV9NWSAiUGVyc29ubmVsIgogICAgSURTX0xPQ0FMSVpFRE5BTUVfQ0EgIkF1dG9yaXTpcyBpbnRlcm3pZGlhaXJlcyIKICAgIElEU19MT0NBTElaRUROQU1FX0FERFJFU1NCT09LICJBdXRyZXMgcGVyc29ubmVzIgp9Cg==