LyoKICogVW5pbnN0YWxsZXIgKEZyZW5jaCBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDA1IEpvbmF0aGFuIEVybnN0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX05FVVRSQUwKCklERF9VTklOU1RBTExFUiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDMzMCwgMTYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJXaW5lIEFwcGxpY2F0aW9uIFVuaW5zdGFsbGVyIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiVmV1aWxsZXogc+lsZWN0aW9ubmVyIGwnYXBwbGljYXRpb24g4CBk6XNpbnN0YWxsZXI6IixJRENfUExFQVNFU0VMRUNULDEwLDEwLDI1MCwxNAogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxURVIsMTAsMjUsMjUwLDE0LEVTX0FVVE9IU0NST0xMCiAgICBMSVNUQk9YICAgICAgICAgSURDX0xJU1QsMTAsNDMsMjUwLDEwNixMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IAogICAgICAgICAgICAgICAgICAgIExCU19FWFRFTkRFRFNFTCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZTdXBwcmltZXIiLElEQ19VTklOU1RBTEwsMjcwLDQ4LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZBIHByb3BvcyIsSURDX0FCT1VULDI3MCw2NSw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICImUXVpdHRlciIsSURDX0VYSVQsMjcwLDgxLDUwLDE0CkVORAoKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIkTpc2luc3RhbGxldXIgZCdhcHBsaWNhdGlvbnMgZGUgV2luZSIKICAgICBJRFNfQUJPVVQsICJE6XNpbnN0YWxsZXVyIGQnYXBwbGljYXRpb25zIGRlIFdpbmUgKEMpIDIwMDUgcGFyIEFuZHJlYXMgTW9ociwgSGFubnUgVmFsdG9uZW4gZXQgSm9uYXRoYW4gRXJuc3QiCiAgICAgSURTX0FCT1VUVElUTEUsICJBIHByb3BvcyBkdSBk6XNpbnN0YWxsZXVyIgogICAgIElEU19SRUdJU1RSWUtFWU5PVEFWQUlMQUJMRSwgIkNs6SBkZSBkc2luc3RhbGxhdGlvbiBub24gZGlzcG9uaWJsZSBkYW5zIGxhIGJhc2UgZGUgcmVnaXN0cmUgKGFjdHVlbGxlbWVudCkuIElsIG4neSBhIHJpZW4gIGZhaXJlICEiCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIkVycmV1ciBsb3JzIGRlIGwnZXhjdXRpb24gZGUgbGEgY29tbWFuZGUgZGUgZOlzaW5zdGFsbGF0aW9uICclcycuIEwnZXjpY3V0YWJsZSBuZSBwZXV0IHBldXQg6nRyZSBwYXMg6nRyZSB0cm91dukuXHJcblNvdWhhaXRlei12b3VzIHN1cHByaW1tZXIgbCdlbnRy6WUgZGUgbGEgYmFzZSBkZSByZWdpc3RyZSA/Igp9Cg==