LyoKICogQ29weXJpZ2h0IDE5OTcgTWlrb2xhaiBaYWxld3NraQogKiBDb3B5cmlnaHQgMjAxMCCjdWthc3ogV29qbmmzb3dpY3oKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlcy5oIgoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1lTTUVOVSBNRU5VCnsKCU1FTlVJVEVNICImUHJ6eXdy8+YiLCA2MTcyOAoJTUVOVUlURU0gIlByemUmc3XxIiwgNjE0NTYKCU1FTlVJVEVNICImUm96bWlhciIsIDYxNDQwCglNRU5VSVRFTSAiRG8gJmlrb255IiwgNjE0NzIKCU1FTlVJVEVNICJQZbNueSAmZWtyYW4iLCA2MTQ4OAoJTUVOVUlURU0gU0VQQVJBVE9SCglNRU5VSVRFTSAiJlphbWtuaWpcdEFsdC1GNCIsIDYxNTM2CglNRU5VSVRFTSBTRVBBUkFUT1IKCU1FTlVJVEVNICImTyBwcm9ncmFtaWUgV2luZS4uLiIsIDYxNzYxCn0KCkVESVRNRU5VIE1FTlUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIiZDb2ZuaWoiLCBFTV9VTkRPCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlcmeXRuaWoiLCBXTV9DVVQKCQlNRU5VSVRFTSAiJktvcGl1aiIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiJldrbGVqIiwgV01fUEFTVEUKCQlNRU5VSVRFTSAiJlVzdfEiLCBXTV9DTEVBUgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImWmF6bmFjeiB3c3p5c3RrbyIsIEVNX1NFVFNFTAoJRU5ECn0KCk1TR0JPWCBESUFMT0cgMTAwLCA4MCwgMjE2LCAxNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkJFR0lOCglJQ09OICIiLCAxMDg4LCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKCUxURVhUICIiLCAxMDAsIDMyLCA0LCAxNzYsIDQ4LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCB8IFNTX05PUFJFRklYCglQVVNIQlVUVE9OICJPSyIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICJBbnVsdWoiLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiJlphbmllY2hhaiIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiJlBvbvN3IHBy82LqIiwgNCwgMTYwLCA1NiwgNTAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICImSWdub3J1aiIsIDUsIDIxNSwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiJlRhayIsIDYsIDI2MywgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiJk5pZSIsIDcsIDMxMSwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiJlNwcvNidWogcG9ub3duaWUiLCAxMCwgMzU5LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICImS29udHludXVqIiwgMTEsIDQwNywgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiUG9tb2MiLCA5LCA0NTUsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKRU5ECgpNRElfTU9SRVdJTkRPV1MgRElBTE9HIDIwLCAyMCwgMjMyLCAxMjIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV3liaWVyeiBva25vIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgTURJX0lEQ19MSVNUQk9YLCA1LCA3LCAyMjIsIDkwLCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCAvKiBkZWZpbmVkIGluIG1kaS5oICovCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgSURPSywgNzUsIDEwMCwgMzUsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFudWx1aiIsIElEQ0FOQ0VMLCAxMjAsIDEwMCwgMzUsIDE0CkVORAoKU1RSSU5HVEFCTEUKewogICAgSURTX0VSUk9SICJCs7lkIgogICAgSURTX01ESV9NT1JFV0lORE9XUyAiJldp6mNlaiBva2llbi4uLiIKfQo=