LyoKICogd2luZWNvbnNvbGUgKER1dGNoIHJlc291cmNlcykKICogCiAqIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqIENvcHlyaWdodCAyMDA4IEZyYW5zIEtvb2wKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQpCRUdJTgpJRFNfRURJVCwJCSImQmV3ZXJrZW4iCklEU19ERUZBVUxULAkJIiZTdGFuZGFhcmRpbnN0ZWxsaW5nZW4iCklEU19QUk9QRVJUSUVTLAkJIiZFaWdlbnNjaGFwcGVuIgpJRFNfTUFSSywJCSImTWFya2VyZW4iCklEU19DT1BZLAkJIiZLb3Bpw3JlbqsiCklEU19QQVNURSwJCSImUGxha2tlbiIKSURTX1NFTEVDVEFMTCwJCSImQWxsZXMgc2VsZWN0ZXJlbiIKSURTX1NDUk9MTCwJCSJTYyZyb2xsZW4iCklEU19TRUFSQ0gsCQkiJlpvZWtlbiIKSURTX0ZOVF9ESVNQTEFZLAkiRWxrIGthcmFrdGVyIGlzICVsZCBwaXhlbHMgYnJlZWQgZW4gJWxkIHBpeGVscyBob29nIgpJRFNfRk5UX1BSRVZJRVdfMSwJIkRpdCBpcyBlZW4gdGVzdCIKSURTX0ZOVF9QUkVWSUVXXzIsCSIiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICJDb25maWd1cmF0aWUgLSBzdGFuZGFhcmQgaW5zdGVsbGxpbmdlbiIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIkNvbmZpZ3VyYXRpZSAtIGh1aWRpZ2UgaW5zdGVsbGluZ2VuIgpJRFNfRExHX1RJVF9FUlJPUiwJIkNvbmZpZ3VyYXRpZWZvdXQiCklEU19ETEdfRVJSX1NCV0lOU0laRSwJIkRlIHNjaGVybWJ1ZmZlciBtb2V0IGdyb3RlciBkYW4gb2YgZ2VsaWprIHppam4gYWFuIGRlIHZlbnN0ZXJidWZmZXIiCgpJRFNfQ01EX0lOVkFMSURfRVZFTlRfSUQgICAid2luZWNvbnNvbGU6IEZvdXQgaW4gdmVyd2Vya2VuIGdlYmV1cnRlbmlzIGlkXG4iCklEU19DTURfSU5WQUxJRF9CQUNLRU5EICAgICJ3aW5lY29uc29sZTogT25qdWlzdGUgYmFja2VuZFxuIgpJRFNfQ01EX0lOVkFMSURfT1BUSU9OICAgICAid2luZWNvbnNvbGU6IE5pZXQgaGVya2VuZGUgb3BkcmFjaHRyZWdlbCBvcHRpZVxuIgpJRFNfQ01EX0FCT1VUICAgICAgICAgICAgICAiRGl0IHN0YXJ0IGVlbiBwcm9ncmFtbWEgaW4gZWVuIFdpbmUgY29uc29sZS1vbWdldmluZ1xuIgpJRFNfQ01EX0xBVU5DSF9GQUlMRUQgICAgICAid2luZWNvbnNvbGU6IFN0YXJ0ZW4gdmFuIHByb2dyYW1tYSAlcyBtaXNsdWt0LlxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBjb21tYW5kbyBpcyBvbmp1aXN0LlxuIgoKSURTX1VTQUdFX0hFQURFUiAgICAgICAgICAgIlxuR2VicnVpazpcbiAgd2luZWNvbnNvbGUgW29wdGllc10gPGNvbW1hbmRvPlxuXG5PcHRpZXM6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICBLaWV6ZW4gdm9vciB1c2VyIHphbCBlZW4gbmlldXcgd2luZG93IGRvZW4gdmVyc2NoaWpuZW4sXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlcyB6YWwgcHJvYmVyZW4gZGUgaHVpZGlnZSB0ZXJtaW5hbCBvbSB0ZSB6ZXR0ZW5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gZWVuIFdpbmUgY29uc29sZVxuIgpJRFNfVVNBR0VfQ09NTUFORCAgICAgICAgICAiICA8Y29tbWFuZG8+ICAgICAgICAgICAgICAgIEhldCBXaW5lIHByb2dyYW1tYSBkYXQgemFsIHN0YXJ0ZW4gaW4gZGUgV2luZSBjb25zb2xlXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbkV4YW1wbGU6XG4gIHdpbmVjb25zb2xlIGNtZFxuU3RhcnRzIHRoZSBXaW5lIGNvbW1hbmQgcHJvbXB0IGluIGEgV2luZSBjb25zb2xlXG5cbiIKCkVORAoKSUREX09QVElPTiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBPcHRpZXMgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJDdXJzb3Jncm9vdHRlIiwgLTEsIDEwLCAxMSwgNjAsIDQ0LCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICImS2xlaW4iLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJk1pZGRlbCIsIElEQ19PUFRfQ1VSU09SX01FRElVTSwgMTQsIDMzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJkdyb290IiwgSURDX09QVF9DVVJTT1JfTEFSR0UsIDE0LCA0MywgNDQsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkNvbnRyb2xlIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICJQb3B1cCBtZW51IiwgLTEsIDc5LCAyMywgNDAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIlNuZWwgYmV3ZXJrZW4iLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJmFhbiIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkdlc2NoaWVkZW5pcyIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJkFhbnRhbCB0ZSBiZXdhcmVuIG9wZHJhY2h0ZW4gOiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiJlZlcndpamRlcmVuIGR1YmJlbGVuIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDY3LCA1MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIExldHRlcnR5cGUgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICImTGV0dGVydHlwZSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIiZLbGV1ciIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIiZHcm9vdHRlIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIENvbmZpZ3VyYXRpZSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIkJ1ZmZlciB6b25lIiwgLTEsIDEwLCAxMSwgMTAwLCA0MiwgQlNfR1JPVVBCT1gKCUxURVhUICImQnJlZWR0ZSA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZIb29ndGUgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJWZW5zdGVyZ3Jvb3R0ZSIsIC0xLCAxMCwgNTUsIDEwMCwgNDIKCUxURVhUICJCJnJlZWR0ZSA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiSCZvb2d0ZSA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiUHJvZ3JhbW1hIGlzIGdl62luZGlnZCIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIiZDb25zb2xlIGFmc2x1aXRlbiIsIElEQ19DTkZfQ0xPU0VfRVhJVCwgMTE5LCAyNSwgNzUsIDIwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIlZlcnNpZSIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIkNvbnNvbGUgcGFyYW1ldGVycyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTIwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiQmV3YWFyIGRlemUgaW5zdGVsbGluZ2VuIHZvb3IgbGF0ZXJlIHNlc3NpZXMiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJXaWp6aWcgYWxsZWVuIGRlIGh1aWRpZ2Ugc2Vzc2llIiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMjcsIDExMCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICJPSyIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICJBbm51bGVyZW4iLCBJRENBTkNFTCwgNjUsIDQ1LCAzNSwgMTIKfQo=