LyoKICogT2xlVmlldyAoU3YucmMpCiAqIFN3ZWRpc2ggTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMjAwOSBBbmRlcnMgSm9uc3NvbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfU1dFRElTSCwgU1VCTEFOR19ORVVUUkFMCgpETEdfQ1JFQVRFSU5TVE9OIERJQUxPRyAwLCAwLCAyNTAsIDQxClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBbnNsdXQgdGlsbCBlbiBhbm5hbiBkYXRvciIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICImRGF0b3JuYW1uOiIsIC0xLCA1LCA2LCAxOTAsIDgKICAgIEVESVRURVhUICAgIElEQ19NQUNISU5FLCA1LCAxNiwgMTkwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIiZPSyIsIElET0ssIDIwMCwgNSwgNDUsIDE0CiAgICBQVVNIQlVUVE9OICAiJkF2YnJ5dCIsIElEQ0FOQ0VMLCAyMDAsIDIyLCA0NSwgMTQKfQoKRExHX1NZU0NPTkYgRElBTE9HIDAsIDAsIDE3MCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTeXN0ZW1pbnN05GxsbmluZyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICJTeXN0ZW1pbnN05GxsbmluZ2FyIiwgLTEsIDUsIDYsIDE2MCwgOAogICAgQ0hFQ0tCT1ggICAgIkFrdGl2ZXJhIGRpc3RyaWJ1JmVyYXQgQ09NIiwgSURDX0VOQUJMRURDT00sIDUsIDIwLCAxNjAsIDEwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIENIRUNLQk9YICAgICJBa3RpdmVyYSBleHRlcm5hICZhbnNsdXRuaW5nYXIgKGVuZGFzdCBXaW45NSkiLCBJRENfRU5BQkxFUkVNT1RFLCA1LCAzNSwgMTYwLCAxMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBMVEVYVCAgICJEZXNzYSBpbnN05GxsbmluZ2FyIORuZHJhciBlbmRhc3QgcmVnaXN0ZXJ25HJkZW4uXG5EZSBw5XZlcmthciBpbnRlIFdpbmVzIHByZXN0YW5kYS4iLCAtMSwgNSwgNTAsIDE2MCwgNDAKICAgIERFRlBVU0hCVVRUT04gICAiJk9LIiwgSURPSywgNzAsIDgwLCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICImQXZicnl0IiwgSURDQU5DRUwsIDEyMCwgODAsIDQ1LCAxNAp9CgpETEdfREVGQVVMVF9JViBESUFMT0cgMCwgMCwgMjgwLCA1MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiU3RhbmRhcmRncuRuc3NuaXR0c2zkc2FyZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICJHcuRuc3NuaXR0IiwgLTEsIDUsIDYsIDUwLCA4CiAgICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICAgIExURVhUICAgIklJRDoiLCAtMSwgNSwgMTYsIDUwLCA4CiAgICBMVEVYVCAgICIiLCBJRENfSURFTlRJRklFUiwgNjAsIDE2LCAxNjUsIDgKICAgIERFRlBVU0hCVVRUT04gICAiJlN05G5nIiwgSURDQU5DRUwsIDIzMCwgNiwgNDUsIDE0CiAgICBQVVNIQlVUVE9OICAiJlZpc2EgdHlwaW5mbyIsIElEQ19WSUVXVFlQRUlORk8sIDYsIDMxLCA3MCwgMTQsIFdTX0RJU0FCTEVECn0KCkRMR19JUEVSU0lTVF9JViBESUFMT0cgMCwgMCwgMjgwLCAyOQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiR3LkbnNzbml0dHNs5HNhcmUgZvZyIElQZXJzaXN0IgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICAgIktsYXNzbmFtbjoiLCAtMSwgNSwgNiwgNTAsIDgKICAgIExURVhUICAgIiIsIElEQ19MQUJFTCwgNjAsIDYsIDE0NSwgOAogICAgTFRFWFQgICAiQ0xTSUQ6IiwgLTEsIDUsIDE2LCA1MCwgOAogICAgTFRFWFQgICAiIiwgSURDX0lERU5USUZJRVIsIDYwLCAxNiwgMTY1LCA4CiAgICBERUZQVVNIQlVUVE9OICAgIiZTdORuZyIsIElEQ0FOQ0VMLCAyMzAsIDYsIDQ1LCAxNAp9CgpETEdfSVBFUlNJU1RTVFJFQU1fSVYgRElBTE9HIDAsIDAsIDI4MCwgNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkdy5G5zc25pdHRzbORzYXJlIGb2ciBJUGVyc2lzdFN0cmVhbSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICJLbGFzc25hbW46IiwgLTEsIDUsIDYsIDUwLCA4CiAgICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICAgIExURVhUICAgIkNMU0lEOiIsIC0xLCA1LCAxNiwgNTAsIDgKICAgIExURVhUICAgIiIsIElEQ19JREVOVElGSUVSLCA2MCwgMTYsIDE2NSwgOAogICAgREVGUFVTSEJVVFRPTiAgICImU3TkbmciLCBJRENBTkNFTCwgMjMwLCA2LCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICImSXNEaXJ0eSIsIElEQ19JU0RJUlRZX0JVVFRPTiwgNiwgMzEsIDUwLCAxNAogICAgTFRFWFQgICAiPz8/IiwgSURDX0lTRElSVFksIDYwLCAzNCwgMTQ1LCA4CiAgICBQVVNIQlVUVE9OICAiJkdldFNpemVNYXgiLCBJRENfR0VUU0laRU1BWF9CVVRUT04sIDYsIDQ5LCA1MCwgMTQKICAgIExURVhUICAgIj8/PyIsIElEQ19HRVRTSVpFTUFYLCA2MCwgNTIsIDE0NSwgOAp9Cg==