LyoKICogS29yZWFuIHJlc291cmNlcyBmb3IgU0VUVVBBUEkKICoKICogQ29weXJpZ2h0IDIwMDEgQW5kcmVhcyBNb2hyCiAqIENvcHlyaWdodCAyMDA5IFJpY2FyZG8gRmlsaXBlCiAqIENvcHlyaWdodCAyMDA1LDIwMTAgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAic2V0dXBhcGlfcHJpdmF0ZS5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKewoJSURTX1BST01QVERJU0sgICAiwMwgxsTAzyAgJyVzJyDAuiAlc7+hvK0gx8q/5LfOIMfVtM+02SIKCUlEU19VTktOT1dOICAgICAgIr7LvPYgvvjAvSIKCUlEU19DT1BZRlJPTSAgICAgIrq5u+fH0iDGxMDPwMwgwKfEocfRILD3OiIKCUlEU19JTkZPICAgICAgICAgIsbEwM/AzCDAp8Shx9EgsOa3zrimIMDUt8LHz7DtLCDIrsDOwLsgxay4r8fPvcq9w7/ALiIKfQoKQ09QWUZJTEVETEdPUkQgRElBTE9HIDIwLCAyMCwgMjA4LCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OCkNBUFRJT04gIsbEwM8gurm758HfLi4uIgpGT05UIDksICJNUyBTaGVsbCBEbGciCkJFR0lOCglQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDc5LCA4NCwgNTAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglMVEVYVCAiv/i6uzoiLCAtMSwgNywgNywgNzcsIDExLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJTFRFWFQgIiIsIFNPVVJDRVNUUk9SRCwgNywgMTgsIDE5NCwgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiuPHA+8H2OiIsIC0xLCA3LCAzMCwgNzcsIDExLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJTFRFWFQgIiIsIERFU1RTVFJPUkQsIDcsIDQxLCAxOTQsIDIyLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJQ09OVFJPTCAiIiwgUFJPR1JFU1NPUkQsICJzZXR1cHhfcHJvZ3Jlc3MiLCA3LCA2MywgMTk0LCAxMywgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQKCklEUFJPTVBURk9SRElTSyBESUFMT0cgMCwgMCwgMjUwLCAxMjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsfKv+TH0SDGxMDPtekiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KCUxURVhUICLBpsDbu+fAxyC8s8ShILXwvbrFqbimILvwwNTHz7DtLCBcIL7Gt6HAxyC8scXDtcggteW288DMuuqwoSC/w7nZuKXB9iDIrsDOx8+9w7/AICIsIElEQ19GSUxFTkVFREVELCAxMCwgMTAsIDE3NSwgMjIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiIiwgSURDX0lORk8sIDEwLCA1MCwgMTc1LCAyMiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUxURVhUICLBpsDbu+fAxyDGxMDPwMwgurm758fSILD3OiIsIElEQ19DT1BZRlJPTSwgMTAsIDkwLCAxNzUsIDExLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJQ09OVFJPTCAiIiwgSURDX1BBVEgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMTAsIDEwMCwgMTc1LCAxNAoJUFVTSEJVVFRPTiAiyK7AziIsIElET0ssIDE5NSwgMTAsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiw+u80iIsIElEQ0FOQ0VMLCAxOTUsIDMwLCA1MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKCVBVU0hCVVRUT04gIsOjseIuLi4iLCBJRENfUlVORExHX0JST1dTRSwgMTk1LCAxMDAsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQK