LyoKICogQ29weXJpZ2h0IDIwMDUtMjAwNiBBbGV4YW5kZXIgTi4gU/hybmVzIDxhbGV4QHRoZWhhbmRvZmFnb255LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmVjb25zb2xlX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19OT1JXRUdJQU4sIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiUiZlZGlnZXIiCklEU19ERUZBVUxULAkJIkFuZ2kgc3RhbiZkYXJkdmVyZGllciIKSURTX1BST1BFUlRJRVMsCQkiRWdlbnNrYSZwZXIiCklEU19NQVJLLAkJIiZNYXJrZXIiCklEU19DT1BZLAkJIiZLb3BpZXIiCklEU19QQVNURSwJCSImTGltIGlubiIKSURTX1NFTEVDVEFMTCwJCSJNZXJrICZhbHQiCklEU19TQ1JPTEwsCQkiJlJ1bGwiCklEU19TRUFSQ0gsCQkiJlP4ayIKSURTX0ZOVF9ESVNQTEFZLAkiSHZlcnQgdGVnbiBlciAlbGQgcGlrc2xlciBicmVkdCBvZyAlbGQgcGlrc2xlciBo+Hl0IgpJRFNfRk5UX1BSRVZJRVcsCSJEZXR0ZSBlciBlbiB0ZXN0IgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAiU3RhbmRhcmRpbm5zdGlsbGluZ2VyIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAiR2plbGRlbmRlIGlubnN0aWxsaW5nZXIiCklEU19ETEdfVElUX0VSUk9SLAkiT3Bwc2V0dHNmZWlsIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsCSJTa2plcm1lbnMgaHVydGlnbWlubmVzdPhycmVsc2UgbeUgduZyZSBzdPhycmUgZWxsZXIgbGlrIHZpbmR1ZXRzIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAgIndpbmVjb25zb2xlOiBLbGFydGUgaWtrZSBsZXNlIGhlbmRlbHNlcy1pZFxuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGU6IFVneWxkaWcgbW90b3JcbiIKSURTX0NNRF9JTlZBTElEX09QVElPTiAgICAgIndpbmVjb25zb2xlOiBVa2plbnQga29tbWFuZG9saW5qZXZhbGdcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIlN0YXJ0ZXIgZXQgcHJvZ3JhbSBpIGVuIFdpbmUta29uc29sbFxuIgpJRFNfQ01EX0xBVU5DSF9GQUlMRUQgICAgICAid2luZWNvbnNvbGU6IEtsYXJ0ZSBpa2tlIHN0YXJ0ZSBwcm9ncmFtbWV0IKslc3guXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiS29tbWFuZG9lbiBlciB1Z3lsZGlnLlxuIgoKSURTX1VTQUdFX0hFQURFUiAgICAgICAgICAgIlxuQnJ1azpcbiAgd2luZWNvbnNvbGUgW2FsdGVybmF0aXZlcl0gPGtvbW1hbmRvPlxuXG5BbHRlcm5hdGl2ZXI6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICCrdXNlcrsgbGFnZXIgZXQgbnl0dHQgdmluZHUsIG1lbnMgq2N1cnNlc7tcbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHL4dmUg5SBicnVrZSBnamVsZGVuZGUgdGVybWluYWwgc29tIFdpbmUta29uc29sbFxuIgpJRFNfVVNBR0VfQ09NTUFORCAgICAgICAgICAiICA8a29tbWFuZG8+ICAgICAgICAgICAgICAgICBXaW5lLXByb2dyYW1tZXQgc29tIHNrYWwga2r4cmVzIGkga29uc29sbGV0XG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbkVrc2VtcGVsOlxuICB3aW5lY29uc29sZSBjbWRcblN0YXJ0ZXIgV2luZS1sZWRldGVrc3RlbiBpIGV0IFdpbmUta29uc29sbFxuXG4iCgpFTkQKCklERF9PUFRJT04gRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIElubnN0aWxsaW5nZXIgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJQZWtlcnN0+HJyZWxzZSIsIC0xLCAxMCwgMTEsIDYwLCA0NCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiJkxpdGVuIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZNaWRkZWxzIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImU3RvciIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJDb250cm9sIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICJQb3B1cCBtZW51IiwgLTEsIDc5LCAyMywgNDAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIlJhc2sgcmVkaWdlcmluZyIsIC0xLCA3OSwgNDMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICJBa3RpdiZlciIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIktvbW1hbmRvaGlzdG9yaWtrIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICJBJm50YWxsIGh1c2tldGUga29tbWFuZG9lcjoiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIkZqZSZybiBkb2JsZSIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgU2tyaWZ0ICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAiU2tyaSZmdCIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIkZhcmcmZSIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIiZTdPhycmVsc2UiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIE9wcHNldHQgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJIdXJ0aWdtaW5uZXNvbmUiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIiZCcmVkZGU6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZI+HlkZToiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiVmluZHVzdPhycmVsc2UiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiJkJyZWRkZToiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDY4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICJI+HlkJmU6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiU2x1dHQgcOUgcHJvZ3JhbSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIiZMdWtrIGtvbnNvbGwiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJVdGdhdmUiLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzUsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgMjAsIDIwLCAxNDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiS29uc29sbC1wYXJhbWV0ZXJlIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICJCZWhvbGQgZGlzc2UgaW5uc3RpbGxpbmdlbmUgZm9yIGtvbW1lbmRlIPhrdGVyIiwgSURDX1NBVl9TQVZFLCAxNCwgMTUsIDExMCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiRW5kcmUga3VuIGdqZWxkZW5kZSD4a3QiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTEwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIk9LIiwgSURPSywgMjAsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIkF2YnJ5dCIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==