LyoKKiBBZGQvUmVtb3ZlIFByb2dyYW1zIE5vcndlZ2lhbiBCb2tt5WwgcmVzb3VyY2VzCioKKiBDb3B5cmlnaHQgMjAwOCBBbGV4YW5kZXIgTi4gU/hybmVzIDxhbGV4QHRoZWhhbmRvZmFnb255LmNvbT4KKgoqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCioKKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKgoqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQoqCiovCgpMQU5HVUFHRSBMQU5HX05PUldFR0lBTiwgU1VCTEFOR19OT1JXRUdJQU5fQk9LTUFMCgpTVFJJTkdUQUJMRQp7CiAgIElEU19DUExfVElUTEUsICJMZWdnIHRpbC9GamVybiBwcm9ncmFtbWVyIgogICBJRFNfQ1BMX0RFU0MsICJMYXIgZGVnIGluc3RhbGxlcmUgbnkgcHJvZ3JhbXZhcmUgZWxsZXIgZmplcm5lIGluc3RhbGxlcnRlIHByb2dyYW1tZXIuIgogICBJRFNfVEFCMV9USVRMRSwgIlByb2dyYW1tZXIiCgogICBJRFNfVU5JTlNUQUxMX0ZBSUxFRCwgIktsYXJ0ZSBpa2tlIGtq+HJlIGF2aW5zdGFsbGVyaW5nc3Byb2dyYW1tZXQsIKslc7suIFZpbCBkdSBmamVybmUgb3BwZvhyaW5nZW4gZnJhIGxpc3RlbiBvdmVyIGluc3RhbGxlcnRlIHByb2dyYW1tZXI/IgogICBJRFNfTk9UX1NQRUNJRklFRCwgIklra2Ugb3BwZ2l0dCIKCiAgIElEU19DT0xVTU5fTkFNRSwgIk5hdm4iCiAgIElEU19DT0xVTU5fUFVCTElTSEVSLCAiVXRnaXZlciIKICAgSURTX0NPTFVNTl9WRVJTSU9OLCAiVmVyc2pvbiIKfQoKLyogVE9ETzogaXQncyBiZXN0IHRvIHVzZSB0aGUgY29uc3RhbnQgV0NfTElTVFZJRVcgaW5zdGVhZCBvZiBTeXNMaXN0VmlldzMyIGRpcmVjdGx5LCBidXQgdGhlIFdpbmUgcmVzb3VyY2UgY29tcGlsZXIgZG9lc24ndCBzZWVtIHRvIGxpa2UgdGhhdC4uLiAqLwoKSUREX01BSU4gRElBTE9HIDAsIDAsIDMyMCwgMjIwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJbnN0YWxsZXIvQXZpbnN0YWxsZXIiCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCnsKIENPTlRST0wgIlRyeWtrIKtJbnN0YWxsZXK7IGZvciDlIGluc3RhbGxlcmUgZXQgcHJvZ3JhbSBmcmEgZW4gZGlza2V0dCwgQ0Qtc3Rhc2pvbiBlbGxlciBhbm5ldCBtZWRpdW0uIiwgMTAwMCwgIlNUQVRJQyIsIFNTX0xFRlQgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCwgNDAsIDcsIDI3MCwgMjAKIENPTlRST0wgIiZJbnN0YWxsZXIuLi4iLCBJRENfSU5TVEFMTCwgIkJVVFRPTiIsIEJTX1BVU0hCVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QLCAyNDYsIDI2LCA2NCwgMTQKIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfTEVGVCB8IFNTX1NVTktFTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgNywgNDYsIDMwMywgMQogQ09OVFJPTCAyLCAxMDAxLCAiU1RBVElDIiwgU1NfSUNPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgNywgNywgMjEsIDIwCiBDT05UUk9MICJG+GxnZW5kZSBwcm9ncmFtbWVyIGthbiBmamVybmVzIGF1dG9tYXRpc2suIE1lcmsgZXQgcHJvZ3JhbSBvZyB0cnlrayCrTGVnZyB0aWwvRmplcm67IGZvciDlIGZqZXJuZSBkZXQgZWxsZXIgZW5kcmUgaW5zdGFsbGVydGUga29tcG9uZW50ZXIiLCAxMDAyLCAiU1RBVElDIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQLCA0MCwgNTcsIDI3MCwgMzAKIENPTlRST0wgIiIsIElETF9QUk9HUkFNUywgIlN5c0xpc3RWaWV3MzIiLCBMVlNfUkVQT1JUIHwgTFZTX1NJTkdMRVNFTCB8IExWU19TT1JUQVNDRU5ESU5HIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgNywgOTAsIDMwMywgMTAwCiBDT05UUk9MICJMZWdnIHRpbC9GamUmcm4uLi4iLCBJRENfQUREUkVNT1ZFLCAiQlVUVE9OIiwgQlNfUFVTSEJVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AsIDI0NiwgMTk4LCA2NCwgMTQKIENPTlRST0wgIiZTdPh0dGVpbmZvcm1hc2pvbi4uLiIsIElEQ19TVVBQT1JUX0lORk8sICJidXR0b24iLCBCU19QVVNIQlVUVE9OIHwgQlNfQ0VOVEVSIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgMTcwLCAxOTgsIDcwLCAxNAogQ09OVFJPTCAzLCAxMDAzLCAiU1RBVElDIiwgU1NfSUNPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgNywgNTcsIDIxLCAyMAp9CgpJRERfSU5GTyBESUFMT0cgMCwgMCwgMjU2LCAxMzgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlN0+HR0ZWluZm9ybWFzam9uIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgp7CiBDT05UUk9MICJPSyIsIElET0ssICJCVVRUT04iLCBCU19ERUZQVVNIQlVUVE9OIHwgQlNfQ0VOVEVSIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgMTAzLCAxMTYsIDUwLCAxNAogQ09OVFJPTCAiRvhsZ2VuZGUgaW5mb3JtYXNqb24ga2FuIGJydWtlcyB0aWwg5SBm5SB0ZWtuaXNrIHN0+HR0ZSBmb3IgJXM6IiwgSURDX0lORk9fTEFCRUwsICJzdGF0aWMiLCBTU19MRUZUIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAxMiwgOSwgMjI4LCAxOQogQ09OVFJPTCAiVXRnaXZlcjoiLCAtMSwgInN0YXRpYyIsIFNTX0xFRlQgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUsIDE2LCAzMCwgNjAsIDgKIENPTlRST0wgIlZlcnNqb246IiwgLTEsICJzdGF0aWMiLCBTU19MRUZUIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAxNiwgNDAsIDYwLCA4CiBDT05UUk9MICJLb250YWt0OiIsIC0xLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTYsIDUwLCA2MCwgOAogQ09OVFJPTCAiU3T4dHRlaW5mb3JtYXNqb246IiwgLTEsICJzdGF0aWMiLCBTU19MRUZUIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAxNiwgNjAsIDY0LCA4CiBDT05UUk9MICJLdW5kZXN0+HR0ZSwgdGxmOiIsIC0xLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTYsIDcwLCA2OCwgOAogQ09OVFJPTCAiTGVzbWVnLWZpbDoiLCAtMSwgInN0YXRpYyIsIFNTX0xFRlQgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUsIDE2LCA4MCwgNjAsIDgKIENPTlRST0wgIlByb2R1a3RvcHBkYXRlcmluZ2VyOiIsIC0xLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTYsIDkwLCA2MCwgOAogQ09OVFJPTCAiS29tbWVudGFyZXI6IiwgLTEsICJzdGF0aWMiLCBTU19MRUZUIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFLCAxNiwgMTAwLCA2MCwgOAogQ09OVFJPTCAiIiwgSURDX0lORk9fUFVCTElTSEVSLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCAzMCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19WRVJTSU9OLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCA0MCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19DT05UQUNULCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCA1MCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19TVVBQT1JULCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCA2MCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19QSE9ORSwgInN0YXRpYyIsIFNTX0xFRlQgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUsIDEwNCwgNzAsIDEzNiwgOAogQ09OVFJPTCAiIiwgSURDX0lORk9fUkVBRE1FLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCA4MCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19VUERBVEVTLCAic3RhdGljIiwgU1NfTEVGVCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSwgMTA0LCA5MCwgMTM2LCA4CiBDT05UUk9MICIiLCBJRENfSU5GT19DT01NRU5UUywgInN0YXRpYyIsIFNTX0xFRlQgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUsIDEwNCwgMTAwLCAxMzYsIDgKfQo=