LyoKICogVmlldwogKiBQb3J0dWd1ZXNlIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgQW3pcmljbyBKb3PpIE1lbG8KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKLyoKICoKICogTWVudQogKgogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKVklFVyBNRU5VCkJFR0lOCiAgICBQT1BVUCAiJkFycXVpdm8iCiAgICBCRUdJTgoJTUVOVUlURU0gIiZBIiwJCQlJRE1fT1BFTgogICAgICAgIE1FTlVJVEVNICJTYWkmciIsICAgICAgICAgICAgICAgICAgICAgICBJRE1fRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJlBhbiIKICAgIEJFR0lOCiAgICAgIE1FTlVJVEVNICJBanVzdGFyIGEgJmphbmVsYSIsICAgICAgICAgICAgICBJRE1fU0VUX0VYVF9UT19XSU4KICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgIE1FTlVJVEVNICImRXNxdWVyZGEiLAkJCQlJRE1fTEVGVAogICAgICBNRU5VSVRFTSAiJkRpcmVpdGEiLAkJCUlETV9SSUdIVAogICAgICBNRU5VSVRFTSAiJkFjaW1hIiwJCQkJSURNX1VQCiAgICAgIE1FTlVJVEVNICJBJmJhaXhvIiwJCQkJSURNX0RPV04KICAgIEVORAogICAgUE9QVVAgIiZJbmZvcm1h5/VlcyIKICAgIEJFR0lOCglNRU5VSVRFTSAiJkhlbGxvIiwJCQlJRE1fSEVMTE8KICAgIEVORApFTkQKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpWSUVXIE1FTlUKQkVHSU4KICAgIFBPUFVQICImRmljaGVpcm8iCiAgICBCRUdJTgoJTUVOVUlURU0gIiZBYnJpciIsCQkJSURNX09QRU4KICAgICAgICBNRU5VSVRFTSAiU2FpJnIiLCAgICAgICAgICAgICAgICAgICAgICAgSURNX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQYW4iCiAgICBCRUdJTgogICAgICBNRU5VSVRFTSAiQWp1c3RhciBhICZqYW5lbGEiLCAgICAgICAgICAgICAgSURNX1NFVF9FWFRfVE9fV0lOCiAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICBNRU5VSVRFTSAiJkVzcXVlcmRhIiwJCQkJSURNX0xFRlQKICAgICAgTUVOVUlURU0gIiZEaXJlaXRhIiwJCQlJRE1fUklHSFQKICAgICAgTUVOVUlURU0gIiZBY2ltYSIsCQkJCUlETV9VUAogICAgICBNRU5VSVRFTSAiQSZiYWl4byIsCQkJCUlETV9ET1dOCiAgICBFTkQKICAgIFBPUFVQICImSW5mb3JtYef1ZXMiCiAgICBCRUdJTgoJTUVOVUlURU0gIiZPbOEiLAkJCUlETV9IRUxMTwogICAgRU5ECkVORAoKCi8qCiAqCiAqIEFjY2VsZXJhdG9yCiAqCiAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKClZJRVcgQUNDRUxFUkFUT1JTCkJFR0lOCiAgICAiUSIsIElETV9FWElULCBWSVJUS0VZLCBDT05UUk9MCkVORAoKCi8qCiAqCiAqIFN0cmluZyBUYWJsZQogKgogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBOQU1FICAgICAgICAgICAgICJWaWV3IgogICAgSURTX0RFU0NSSVBUSU9OICAgICAgICAgIlJlZ3VsYXIgTWV0YWZpbGUgVmlld2VyIgpFTkQKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUE5BTUUgICAgICAgICAgICAgIlZlciIKICAgIElEU19ERVNDUklQVElPTiAgICAgICAgICJWaXN1YWxpemFkb3IgUmVndWxhciBkZSBGaWNoZWlyb3MgTWV0YSIKRU5ECg==