mountebank

mountebank - over the wire test doubles

Fork me on GitHub

the apothecary

tcp

Imposter Creation Parameters

Parameter Options Required? Default Description
protocol tcp Yes N/A  
port Any valid port number No A randomly assigned port. mountebank will return the actual value in the POST response. The port to run the imposter on.
mode text or binary. No text Defines the encoding used for request and response stings. text strings will use utf8 encoding, and binary strings will use base64 encoding. See examples on the predicates page.
name Any string No empty string Included in the logs, useful when multiple imposters are set up.
recordRequests true or false No false Adds mock verification support by remembering the requests made to this imposter. Note that this represents a memory leak for any long running mb process, as requests are never forgotten.
stubs A stub request. No An empty array The list of stubs responsible for matching a request and returning a response
defaultResponse A valid response, see below for response fields No

{ "data": "" }
    
...which does not respond.
The default response to send if no predicate matches. Also represents the default values that get merged into a response that doesn't specify every field
endOfRequestResolver See below No Assumes each packet represents a separate request. Determines if the request has finished or not, since this depends on the specific TCP protocol being used. See below for further explanation.

TCP Requests

Field Descripion Type
requestFrom The client socket, primarily used for logging and debugging. string
data The request data. string - the imposter mode defines how the string is encoded.

TCP Responses

Field Type Default
data string an empty string, which does not respond with data, but does send the FIN bit.

Determining the end of a request

The tricky bit about using the raw TCP protocol is knowing when a request ends. Application protocols give some way of determining this, such as the Content-Length header in HTTP or by embedding the message length in binary protocols. By default, mountebank assumes each packet represents a separate request, which typically limits the size of each request to somewhere between 1500 and 64k bytes (you'll get a larger payload using the loopback interface on localhost, but lower level protocols like Ethernet will force a smaller payload over the network). This strategy works for many scenarios as simple serialized requests tend to fall below this size, but breaks down with large requests.

mountebank allows you the flexibility to determine when a request ends using the endOfRequestResolver at the imposter level. The value is a JavaScript function that takes a parameter that represents all request data captured from all packets so far. If the imposter is in text mode, the parameter will be a string; in binary it will be a node.js Buffer object. mountebank's logger object is also passed as an optional second parameter to assist in troubleshooting. Like all JavaScript injection, it requires the --allowInjection command line flag to execute.

Of course, the best option is to have native support for the protocol you're trying to use. Let mountebank know what you're trying to do, and he will try and help you set up your endOfRequestResolver and consider adding your protocol to the built-in protocols.

Let's look at both a binary and a text example:

Supporting large binary requests

The application protocols used for RPC are generally message based and requires some metadata to define the boundaries of the message. For this example, we'll emulate a Mule TCP connector, which adds a four byte length prefix to each message in case it spans multiple packets. Since the message content itself isn't particularly important for this example, we'll simply add enough text to guarantee it will split into multiple packets. Here's the endOfRequestResolver we'll use and the API call to create the imposter:

function (requestData, logger) {
    var messageLength = requestData.readInt32BE(0);
    logger.info('Message length: ' + messageLength + ', so far: ' + requestData.length);
    return requestData.length >= messageLength;
}
POST /imposters HTTP/1.1
Host: localhost:46717
Accept: application/json
Content-Type: application/json

{
  "port": 5555,
  "protocol": "tcp",
  "mode": "binary",
  "stubs": [
    {
      "responses": [{ "is": { "data": "SGVsbG8sIHdvcmxkIQ==" } }]
    }
  ],
  "endOfRequestResolver": {
    "inject": "function (requestData, logger) { var messageLength = requestData.readInt32BE(0); logger.info('Message length: ' + messageLength + ', so far: ' + requestData.length); return requestData.length === messageLength; }"
  }
}

We'll send a large request with the total message size written as a big-endian integer in the first four bytes:

)
echo "AAEK/0Jvb2sgSQ0KDQpUZWxsIG1lLCBPIG11c2UsIG9mIHRoYXQgaW5nZW5pb3VzIGhlcm8gd2hvIHRyYXZlbGxlZCBmYXIgYW5kIHdpZGUgYWZ0ZXIgaGUgaGFkIHNhY2tlZCB0aGUgZmFtb3VzIHRvd24gb2YgVHJveS4gTWFueSBjaXRpZXMgZGlkIGhlIHZpc2l0LCBhbmQgbWFueSB3ZXJlIHRoZSBuYXRpb25zIHdpdGggd2hvc2UgbWFubmVycyBhbmQgY3VzdG9tcyBoZSB3YXMgYWNxdWFpbnRlZDsgbW9yZW92ZXIgaGUgc3VmZmVyZWQgbXVjaCBieSBzZWEgd2hpbGUgdHJ5aW5nIHRvIHNhdmUgaGlzIG93biBsaWZlIGFuZCBicmluZyBoaXMgbWVuIHNhZmVseSBob21lOyBidXQgZG8gd2hhdCBoZSBtaWdodCBoZSBjb3VsZCBub3Qgc2F2ZSBoaXMgbWVuLCBmb3IgdGhleSBwZXJpc2hlZCB0aHJvdWdoIHRoZWlyIG93biBzaGVlciBmb2xseSBpbiBlYXRpbmcgdGhlIGNhdHRsZSBvZiB0aGUgU3VuLWdvZCBIeXBlcmlvbjsgc28gdGhlIGdvZCBwcmV2ZW50ZWQgdGhlbSBmcm9tIGV2ZXIgcmVhY2hpbmcgaG9tZS4gVGVsbCBtZSwgdG9vLCBhYm91dCBhbGwgdGhlc2UgdGhpbmdzLCBPIGRhdWdodGVyIG9mIEpvdmUsIGZyb20gd2hhdHNvZXZlciBzb3VyY2UgeW91IG1heSBrbm93IHRoZW0uDQoNClNvIG5vdyBhbGwgd2hvIGVzY2FwZWQgZGVhdGggaW4gYmF0dGxlIG9yIGJ5IHNoaXB3cmVjayBoYWQgZ290IHNhZmVseSBob21lIGV4Y2VwdCBVbHlzc2VzLCBhbmQgaGUsIHRob3VnaCBoZSB3YXMgbG9uZ2luZyB0byByZXR1cm4gdG8gaGlzIHdpZmUgYW5kIGNvdW50cnksIHdhcyBkZXRhaW5lZCBieSB0aGUgZ29kZGVzcyBDYWx5cHNvLCB3aG8gaGFkIGdvdCBoaW0gaW50byBhIGxhcmdlIGNhdmUgYW5kIHdhbnRlZCB0byBtYXJyeSBoaW0uIEJ1dCBhcyB5ZWFycyB3ZW50IGJ5LCB0aGVyZSBjYW1lIGEgdGltZSB3aGVuIHRoZSBnb2RzIHNldHRsZWQgdGhhdCBoZSBzaG91bGQgZ28gYmFjayB0byBJdGhhY2E7IGV2ZW4gdGhlbiwgaG93ZXZlciwgd2hlbiBoZSB3YXMgYW1vbmcgaGlzIG93biBwZW9wbGUsIGhpcyB0cm91YmxlcyB3ZXJlIG5vdCB5ZXQgb3ZlcjsgbmV2ZXJ0aGVsZXNzIGFsbCB0aGUgZ29kcyBoYWQgbm93IGJlZ3VuIHRvIHBpdHkgaGltIGV4Y2VwdCBOZXB0dW5lLCB3aG8gc3RpbGwgcGVyc2VjdXRlZCBoaW0gd2l0aG91dCBjZWFzaW5nIGFuZCB3b3VsZCBub3QgbGV0IGhpbSBnZXQgaG9tZS4NCg0KTm93IE5lcHR1bmUgaGFkIGdvbmUgb2ZmIHRvIHRoZSBFdGhpb3BpYW5zLCB3aG8gYXJlIGF0IHRoZSB3b3JsZCdzIGVuZCwgYW5kIGxpZSBpbiB0d28gaGFsdmVzLCB0aGUgb25lIGxvb2tpbmcgV2VzdCBhbmQgdGhlIG90aGVyIEVhc3QuIEhlIGhhZCBnb25lIHRoZXJlIHRvIGFjY2VwdCBhIGhlY2F0b21iIG9mIHNoZWVwIGFuZCBveGVuLCBhbmQgd2FzIGVuam95aW5nIGhpbXNlbGYgYXQgaGlzIGZlc3RpdmFsOyBidXQgdGhlIG90aGVyIGdvZHMgbWV0IGluIHRoZSBob3VzZSBvZiBPbHltcGlhbiBKb3ZlLCBhbmQgdGhlIHNpcmUgb2YgZ29kcyBhbmQgbWVuIHNwb2tlIGZpcnN0LiBBdCB0aGF0IG1vbWVudCBoZSB3YXMgdGhpbmtpbmcgb2YgQWVnaXN0aHVzLCB3aG8gaGFkIGJlZW4ga2lsbGVkIGJ5IEFnYW1lbW5vbidzIHNvbiBPcmVzdGVzOyBzbyBoZSBzYWlkIHRvIHRoZSBvdGhlciBnb2RzOg0KDQoiU2VlIG5vdywgaG93IG1lbiBsYXkgYmxhbWUgdXBvbiB1cyBnb2RzIGZvciB3aGF0IGlzIGFmdGVyIGFsbCBub3RoaW5nIGJ1dCB0aGVpciBvd24gZm9sbHkuIExvb2sgYXQgQWVnaXN0aHVzOyBoZSBtdXN0IG5lZWRzIG1ha2UgbG92ZSB0byBBZ2FtZW1ub24ncyB3aWZlIHVucmlnaHRlb3VzbHkgYW5kIHRoZW4ga2lsbCBBZ2FtZW1ub24sIHRob3VnaCBoZSBrbmV3IGl0IHdvdWxkIGJlIHRoZSBkZWF0aCBvZiBoaW07IGZvciBJIHNlbnQgTWVyY3VyeSB0byB3YXJuIGhpbSBub3QgdG8gZG8gZWl0aGVyIG9mIHRoZXNlIHRoaW5ncywgaW5hc211Y2ggYXMgT3Jlc3RlcyB3b3VsZCBiZSBzdXJlIHRvIHRha2UgaGlzIHJldmVuZ2Ugd2hlbiBoZSBncmV3IHVwIGFuZCB3YW50ZWQgdG8gcmV0dXJuIGhvbWUuIE1lcmN1cnkgdG9sZCBoaW0gdGhpcyBpbiBhbGwgZ29vZCB3aWxsIGJ1dCBoZSB3b3VsZCBub3QgbGlzdGVuLCBhbmQgbm93IGhlIGhhcyBwYWlkIGZvciBldmVyeXRoaW5nIGluIGZ1bGwuIg0KDQpUaGVuIE1pbmVydmEgc2FpZCwgIkZhdGhlciwgc29uIG9mIFNhdHVybiwgS2luZyBvZiBraW5ncywgaXQgc2VydmVkIEFlZ2lzdGh1cyByaWdodCwgYW5kIHNvIGl0IHdvdWxkIGFueSBvbmUgZWxzZSB3aG8gZG9lcyBhcyBoZSBkaWQ7IGJ1dCBBZWdpc3RodXMgaXMgbmVpdGhlciBoZXJlIG5vciB0aGVyZTsgaXQgaXMgZm9yIFVseXNzZXMgdGhhdCBteSBoZWFydCBibGVlZHMsIHdoZW4gSSB0aGluayBvZiBoaXMgc3VmZmVyaW5ncyBpbiB0aGF0IGxvbmVseSBzZWEtZ2lydCBpc2xhbmQsIGZhciBhd2F5LCBwb29yIG1hbiwgZnJvbSBhbGwgaGlzIGZyaWVuZHMuIEl0IGlzIGFuIGlzbGFuZCBjb3ZlcmVkIHdpdGggZm9yZXN0LCBpbiB0aGUgdmVyeSBtaWRkbGUgb2YgdGhlIHNlYSwgYW5kIGEgZ29kZGVzcyBsaXZlcyB0aGVyZSwgZGF1Z2h0ZXIgb2YgdGhlIG1hZ2ljaWFuIEF0bGFzLCB3aG8gbG9va3MgYWZ0ZXIgdGhlIGJvdHRvbSBvZiB0aGUgb2NlYW4sIGFuZCBjYXJyaWVzIHRoZSBncmVhdCBjb2x1bW5zIHRoYXQga2VlcCBoZWF2ZW4gYW5kIGVhcnRoIGFzdW5kZXIuIFRoaXMgZGF1Z2h0ZXIgb2YgQXRsYXMgaGFzIGdvdCBob2xkIG9mIHBvb3IgdW5oYXBweSBVbHlzc2VzLCBhbmQga2VlcHMgdHJ5aW5nIGJ5IGV2ZXJ5IGtpbmQgb2YgYmxhbmRpc2htZW50IHRvIG1ha2UgaGltIGZvcmdldCBoaXMgaG9tZSwgc28gdGhhdCBoZSBpcyB0aXJlZCBvZiBsaWZlLCBhbmQgdGhpbmtzIG9mIG5vdGhpbmcgYnV0IGhvdyBoZSBtYXkgb25jZSBtb3JlIHNlZSB0aGUgc21va2Ugb2YgaGlzIG93biBjaGltbmV5cy4gWW91LCBzaXIsIHRha2Ugbm8gaGVlZCBvZiB0aGlzLCBhbmQgeWV0IHdoZW4gVWx5c3NlcyB3YXMgYmVmb3JlIFRyb3kgZGlkIGhlIG5vdCBwcm9waXRpYXRlIHlvdSB3aXRoIG1hbnkgYSBidXJudCBzYWNyaWZpY2U/IFdoeSB0aGVuIHNob3VsZCB5b3Uga2VlcCBvbiBiZWluZyBzbyBhbmdyeSB3aXRoIGhpbT8iDQoNCkFuZCBKb3ZlIHNhaWQsICJNeSBjaGlsZCwgd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IEhvdyBjYW4gSSBmb3JnZXQgVWx5c3NlcyB0aGFuIHdob20gdGhlcmUgaXMgbm8gbW9yZSBjYXBhYmxlIG1hbiBvbiBlYXJ0aCwgbm9yIG1vcmUgbGliZXJhbCBpbiBoaXMgb2ZmZXJpbmdzIHRvIHRoZSBpbW1vcnRhbCBnb2RzIHRoYXQgbGl2ZSBpbiBoZWF2ZW4/IEJlYXIgaW4gbWluZCwgaG93ZXZlciwgdGhhdCBOZXB0dW5lIGlzIHN0aWxsIGZ1cmlvdXMgd2l0aCBVbHlzc2VzIGZvciBoYXZpbmcgYmxpbmRlZCBhbiBleWUgb2YgUG9seXBoZW11cyBraW5nIG9mIHRoZSBDeWNsb3Blcy4gUG9seXBoZW11cyBpcyBzb24gdG8gTmVwdHVuZSBieSB0aGUgbnltcGggVGhvb3NhLCBkYXVnaHRlciB0byB0aGUgc2VhLWtpbmcgUGhvcmN5czsgdGhlcmVmb3JlIHRob3VnaCBoZSB3aWxsIG5vdCBraWxsIFVseXNzZXMgb3V0cmlnaHQsIGhlIHRvcm1lbnRzIGhpbSBieSBwcmV2ZW50aW5nIGhpbSBmcm9tIGdldHRpbmcgaG9tZS4gU3RpbGwsIGxldCB1cyBsYXkgb3VyIGhlYWRzIHRvZ2V0aGVyIGFuZCBzZWUgaG93IHdlIGNhbiBoZWxwIGhpbSB0byByZXR1cm47IE5lcHR1bmUgd2lsbCB0aGVuIGJlIHBhY2lmaWVkLCBmb3IgaWYgd2UgYXJlIGFsbCBvZiBhIG1pbmQgaGUgY2FuIGhhcmRseSBzdGFuZCBvdXQgYWdhaW5zdCB1cy4iDQoNCkFuZCBNaW5lcnZhIHNhaWQsICJGYXRoZXIsIHNvbiBvZiBTYXR1cm4sIEtpbmcgb2Yga2luZ3MsIGlmLCB0aGVuLCB0aGUgZ29kcyBub3cgbWVhbiB0aGF0IFVseXNzZXMgc2hvdWxkIGdldCBob21lLCB3ZSBzaG91bGQgZmlyc3Qgc2VuZCBNZXJjdXJ5IHRvIHRoZSBPZ3lnaWFuIGlzbGFuZCB0byB0ZWxsIENhbHlwc28gdGhhdCB3ZSBoYXZlIG1hZGUgdXAgb3VyIG1pbmRzIGFuZCB0aGF0IGhlIGlzIHRvIHJldHVybi4gSW4gdGhlIG1lYW50aW1lIEkgd2lsbCBnbyB0byBJdGhhY2EsIHRvIHB1dCBoZWFydCBpbnRvIFVseXNzZXMnIHNvbiBUZWxlbWFjaHVzOyBJIHdpbGwgZW1ib2xkZW4gaGltIHRvIGNhbGwgdGhlIEFjaGFlYW5zIGluIGFzc2VtYmx5LCBhbmQgc3BlYWsgb3V0IHRvIHRoZSBzdWl0b3JzIG9mIGhpcyBtb3RoZXIgUGVuZWxvcGUsIHdobyBwZXJzaXN0IGluIGVhdGluZyB1cCBhbnkgbnVtYmVyIG9mIGhpcyBzaGVlcCBhbmQgb3hlbjsgSSB3aWxsIGFsc28gY29uZHVjdCBoaW0gdG8gU3BhcnRhIGFuZCB0byBQeWxvcywgdG8gc2VlIGlmIGhlIGNhbiBoZWFyIGFueXRoaW5nIGFib3V0IHRoZSByZXR1cm4gb2YgaGlzIGRlYXIgZmF0aGVyLSBmb3IgdGhpcyB3aWxsIG1ha2UgcGVvcGxlIHNwZWFrIHdlbGwgb2YgaGltLiINCg0KU28gc2F5aW5nIHNoZSBib3VuZCBvbiBoZXIgZ2xpdHRlcmluZyBnb2xkZW4gc2FuZGFscywgaW1wZXJpc2hhYmxlLCB3aXRoIHdoaWNoIHNoZSBjYW4gZmx5IGxpa2UgdGhlIHdpbmQgb3ZlciBsYW5kIG9yIHNlYTsgc2hlIGdyYXNwZWQgdGhlIHJlZG91YnRhYmxlIGJyb256ZS1zaG9kIHNwZWFyLCBzbyBzdG91dCBhbmQgc3R1cmR5IGFuZCBzdHJvbmcsIHdoZXJld2l0aCBzaGUgcXVlbGxzIHRoZSByYW5rcyBvZiBoZXJvZXMgd2hvIGhhdmUgZGlzcGxlYXNlZCBoZXIsIGFuZCBkb3duIHNoZSBkYXJ0ZWQgZnJvbSB0aGUgdG9wbW9zdCBzdW1taXRzIG9mIE9seW1wdXMsIHdoZXJlb24gZm9ydGh3aXRoIHNoZSB3YXMgaW4gSXRoYWNhLCBhdCB0aGUgZ2F0ZXdheSBvZiBVbHlzc2VzJyBob3VzZSwgZGlzZ3Vpc2VkIGFzIGEgdmlzaXRvciwgTWVudGVzLCBjaGllZiBvZiB0aGUgVGFwaGlhbnMsIGFuZCBzaGUgaGVsZCBhIGJyb256ZSBzcGVhciBpbiBoZXIgaGFuZC4gVGhlcmUgc2hlIGZvdW5kIHRoZSBsb3JkbHkgc3VpdG9ycyBzZWF0ZWQgb24gaGlkZXMgb2YgdGhlIG94ZW4gd2hpY2ggdGhleSBoYWQga2lsbGVkIGFuZCBlYXRlbiwgYW5kIHBsYXlpbmcgZHJhdWdodHMgaW4gZnJvbnQgb2YgdGhlIGhvdXNlLiBNZW4tc2VydmFudHMgYW5kIHBhZ2VzIHdlcmUgYnVzdGxpbmcgYWJvdXQgdG8gd2FpdCB1cG9uIHRoZW0sIHNvbWUgbWl4aW5nIHdpbmUgd2l0aCB3YXRlciBpbiB0aGUgbWl4aW5nLWJvd2xzLCBzb21lIGNsZWFuaW5nIGRvd24gdGhlIHRhYmxlcyB3aXRoIHdldCBzcG9uZ2VzIGFuZCBsYXlpbmcgdGhlbSBvdXQgYWdhaW4sIGFuZCBzb21lIGN1dHRpbmcgdXAgZ3JlYXQgcXVhbnRpdGllcyBvZiBtZWF0Lg0KDQpUZWxlbWFjaHVzIHNhdyBoZXIgbG9uZyBiZWZvcmUgYW55IG9uZSBlbHNlIGRpZC4gSGUgd2FzIHNpdHRpbmcgbW9vZGlseSBhbW9uZyB0aGUgc3VpdG9ycyB0aGlua2luZyBhYm91dCBoaXMgYnJhdmUgZmF0aGVyLCBhbmQgaG93IGhlIHdvdWxkIHNlbmQgdGhlbSBmbHlpbmcgb3V0IG9mIHRoZSBob3VzZSwgaWYgaGUgd2VyZSB0byBjb21lIHRvIGhpcyBvd24gYWdhaW4gYW5kIGJlIGhvbm91cmVkIGFzIGluIGRheXMgZ29uZSBieS4gVGh1cyBicm9vZGluZyBhcyBoZSBzYXQgYW1vbmcgdGhlbSwgaGUgY2F1Z2h0IHNpZ2h0IG9mIE1pbmVydmEgYW5kIHdlbnQgc3RyYWlnaHQgdG8gdGhlIGdhdGUsIGZvciBoZSB3YXMgdmV4ZWQgdGhhdCBhIHN0cmFuZ2VyIHNob3VsZCBiZSBrZXB0IHdhaXRpbmcgZm9yIGFkbWl0dGFuY2UuIEhlIHRvb2sgaGVyIHJpZ2h0IGhhbmQgaW4gaGlzIG93biwgYW5kIGJhZGUgaGVyIGdpdmUgaGltIGhlciBzcGVhci4gIldlbGNvbWUsIiBzYWlkIGhlLCAidG8gb3VyIGhvdXNlLCBhbmQgd2hlbiB5b3UgaGF2ZSBwYXJ0YWtlbiBvZiBmb29kIHlvdSBzaGFsbCB0ZWxsIHVzIHdoYXQgeW91IGhhdmUgY29tZSBmb3IuIg0KDQpIZSBsZWQgdGhlIHdheSBhcyBoZSBzcG9rZSwgYW5kIE1pbmVydmEgZm9sbG93ZWQgaGltLiBXaGVuIHRoZXkgd2VyZSB3aXRoaW4gaGUgdG9vayBoZXIgc3BlYXIgYW5kIHNldCBpdCBpbiB0aGUgc3BlYXItIHN0YW5kIGFnYWluc3QgYSBzdHJvbmcgYmVhcmluZy1wb3N0IGFsb25nIHdpdGggdGhlIG1hbnkgb3RoZXIgc3BlYXJzIG9mIGhpcyB1bmhhcHB5IGZhdGhlciwgYW5kIGhlIGNvbmR1Y3RlZCBoZXIgdG8gYSByaWNobHkgZGVjb3JhdGVkIHNlYXQgdW5kZXIgd2hpY2ggaGUgdGhyZXcgYSBjbG90aCBvZiBkYW1hc2suIFRoZXJlIHdhcyBhIGZvb3RzdG9vbCBhbHNvIGZvciBoZXIgZmVldCwgYW5kIGhlIHNldCBhbm90aGVyIHNlYXQgbmVhciBoZXIgZm9yIGhpbXNlbGYsIGF3YXkgZnJvbSB0aGUgc3VpdG9ycywgdGhhdCBzaGUgbWlnaHQgbm90IGJlIGFubm95ZWQgd2hpbGUgZWF0aW5nIGJ5IHRoZWlyIG5vaXNlIGFuZCBpbnNvbGVuY2UsIGFuZCB0aGF0IGhlIG1pZ2h0IGFzayBoZXIgbW9yZSBmcmVlbHkgYWJvdXQgaGlzIGZhdGhlci4NCg0KQSBtYWlkIHNlcnZhbnQgdGhlbiBicm91Z2h0IHRoZW0gd2F0ZXIgaW4gYSBiZWF1dGlmdWwgZ29sZGVuIGV3ZXIgYW5kIHBvdXJlZCBpdCBpbnRvIGEgc2lsdmVyIGJhc2luIGZvciB0aGVtIHRvIHdhc2ggdGhlaXIgaGFuZHMsIGFuZCBzaGUgZHJldyBhIGNsZWFuIHRhYmxlIGJlc2lkZSB0aGVtLiBBbiB1cHBlciBzZXJ2YW50IGJyb3VnaHQgdGhlbSBicmVhZCwgYW5kIG9mZmVyZWQgdGhlbSBtYW55IGdvb2QgdGhpbmdzIG9mIHdoYXQgdGhlcmUgd2FzIGluIHRoZSBob3VzZSwgdGhlIGNhcnZlciBmZXRjaGVkIHRoZW0gcGxhdGVzIG9mIGFsbCBtYW5uZXIgb2YgbWVhdHMgYW5kIHNldCBjdXBzIG9mIGdvbGQgYnkgdGhlaXIgc2lkZSwgYW5kIGEgbWFuLXNlcnZhbnQgYnJvdWdodCB0aGVtIHdpbmUgYW5kIHBvdXJlZCBpdCBvdXQgZm9yIHRoZW0uDQoNClRoZW4gdGhlIHN1aXRvcnMgY2FtZSBpbiBhbmQgdG9vayB0aGVpciBwbGFjZXMgb24gdGhlIGJlbmNoZXMgYW5kIHNlYXRzLiBGb3J0aHdpdGggbWVuIHNlcnZhbnRzIHBvdXJlZCB3YXRlciBvdmVyIHRoZWlyIGhhbmRzLCBtYWlkcyB3ZW50IHJvdW5kIHdpdGggdGhlIGJyZWFkLWJhc2tldHMsIHBhZ2VzIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHdpdGggd2luZSBhbmQgd2F0ZXIsIGFuZCB0aGV5IGxhaWQgdGhlaXIgaGFuZHMgdXBvbiB0aGUgZ29vZCB0aGluZ3MgdGhhdCB3ZXJlIGJlZm9yZSB0aGVtLiBBcyBzb29uIGFzIHRoZXkgaGFkIGhhZCBlbm91Z2ggdG8gZWF0IGFuZCBkcmluayB0aGV5IHdhbnRlZCBtdXNpYyBhbmQgZGFuY2luZywgd2hpY2ggYXJlIHRoZSBjcm93bmluZyBlbWJlbGxpc2htZW50cyBvZiBhIGJhbnF1ZXQsIHNvIGEgc2VydmFudCBicm91Z2h0IGEgbHlyZSB0byBQaGVtaXVzLCB3aG9tIHRoZXkgY29tcGVsbGVkIHBlcmZvcmNlIHRvIHNpbmcgdG8gdGhlbS4gQXMgc29vbiBhcyBoZSB0b3VjaGVkIGhpcyBseXJlIGFuZCBiZWdhbiB0byBzaW5nIFRlbGVtYWNodXMgc3Bva2UgbG93IHRvIE1pbmVydmEsIHdpdGggaGlzIGhlYWQgY2xvc2UgdG8gaGVycyB0aGF0IG5vIG1hbiBtaWdodCBoZWFyLg0KDQoiSSBob3BlLCBzaXIsIiBzYWlkIGhlLCAidGhhdCB5b3Ugd2lsbCBub3QgYmUgb2ZmZW5kZWQgd2l0aCB3aGF0IEkgYW0gZ29pbmcgdG8gc2F5LiBTaW5naW5nIGNvbWVzIGNoZWFwIHRvIHRob3NlIHdobyBkbyBub3QgcGF5IGZvciBpdCwgYW5kIGFsbCB0aGlzIGlzIGRvbmUgYXQgdGhlIGNvc3Qgb2Ygb25lIHdob3NlIGJvbmVzIGxpZSByb3R0aW5nIGluIHNvbWUgd2lsZGVybmVzcyBvciBncmluZGluZyB0byBwb3dkZXIgaW4gdGhlIHN1cmYuIElmIHRoZXNlIG1lbiB3ZXJlIHRvIHNlZSBteSBmYXRoZXIgY29tZSBiYWNrIHRvIEl0aGFjYSB0aGV5IHdvdWxkIHByYXkgZm9yIGxvbmdlciBsZWdzIHJhdGhlciB0aGFuIGEgbG9uZ2VyIHB1cnNlLCBmb3IgbW9uZXkgd291bGQgbm90IHNlcnZlIHRoZW07IGJ1dCBoZSwgYWxhcywgaGFzIGZhbGxlbiBvbiBhbiBpbGwgZmF0ZSwgYW5kIGV2ZW4gd2hlbiBwZW9wbGUgZG8gc29tZXRpbWVzIHNheSB0aGF0IGhlIGlzIGNvbWluZywgd2Ugbm8gbG9uZ2VyIGhlZWQgdGhlbTsgd2Ugc2hhbGwgbmV2ZXIgc2VlIGhpbSBhZ2Fpbi4gQW5kIG5vdywgc2lyLCB0ZWxsIG1lIGFuZCB0ZWxsIG1lIHRydWUsIHdobyB5b3UgYXJlIGFuZCB3aGVyZSB5b3UgY29tZSBmcm9tLiBUZWxsIG1lIG9mIHlvdXIgdG93biBhbmQgcGFyZW50cywgd2hhdCBtYW5uZXIgb2Ygc2hpcCB5b3UgY2FtZSBpbiwgaG93IHlvdXIgY3JldyBicm91Z2h0IHlvdSB0byBJdGhhY2EsIGFuZCBvZiB3aGF0IG5hdGlvbiB0aGV5IGRlY2xhcmVkIHRoZW1zZWx2ZXMgdG8gYmUtIGZvciB5b3UgY2Fubm90IGhhdmUgY29tZSBieSBsYW5kLiBUZWxsIG1lIGFsc28gdHJ1bHksIGZvciBJIHdhbnQgdG8ga25vdywgYXJlIHlvdSBhIHN0cmFuZ2VyIHRvIHRoaXMgaG91c2UsIG9yIGhhdmUgeW91IGJlZW4gaGVyZSBpbiBteSBmYXRoZXIncyB0aW1lPyBJbiB0aGUgb2xkIGRheXMgd2UgaGFkIG1hbnkgdmlzaXRvcnMgZm9yIG15IGZhdGhlciB3ZW50IGFib3V0IG11Y2ggaGltc2VsZi4iDQoNCkFuZCBNaW5lcnZhIGFuc3dlcmVkLCAiSSB3aWxsIHRlbGwgeW91IHRydWx5IGFuZCBwYXJ0aWN1bGFybHkgYWxsIGFib3V0IGl0LiBJIGFtIE1lbnRlcywgc29uIG9mIEFuY2hpYWx1cywgYW5kIEkgYW0gS2luZyBvZiB0aGUgVGFwaGlhbnMuIEkgaGF2ZSBjb21lIGhlcmUgd2l0aCBteSBzaGlwIGFuZCBjcmV3LCBvbiBhIHZveWFnZSB0byBtZW4gb2YgYSBmb3JlaWduIHRvbmd1ZSBiZWluZyBib3VuZCBmb3IgVGVtZXNhIHdpdGggYSBjYXJnbyBvZiBpcm9uLCBhbmQgSSBzaGFsbCBicmluZyBiYWNrIGNvcHBlci4gQXMgZm9yIG15IHNoaXAsIGl0IGxpZXMgb3ZlciB5b25kZXIgb2ZmIHRoZSBvcGVuIGNvdW50cnkgYXdheSBmcm9tIHRoZSB0b3duLCBpbiB0aGUgaGFyYm91ciBSaGVpdGhyb24gdW5kZXIgdGhlIHdvb2RlZCBtb3VudGFpbiBOZXJpdHVtLiBPdXIgZmF0aGVycyB3ZXJlIGZyaWVuZHMgYmVmb3JlIHVzLCBhcyBvbGQgTGFlcnRlcyB3aWxsIHRlbGwgeW91LCBpZiB5b3Ugd2lsbCBnbyBhbmQgYXNrIGhpbS4gVGhleSBzYXksIGhvd2V2ZXIsIHRoYXQgaGUgbmV2ZXIgY29tZXMgdG8gdG93biBub3csIGFuZCBsaXZlcyBieSBoaW1zZWxmIGluIHRoZSBjb3VudHJ5LCBmYXJpbmcgaGFyZGx5LCB3aXRoIGFuIG9sZCB3b21hbiB0byBsb29rIGFmdGVyIGhpbSBhbmQgZ2V0IGhpcyBkaW5uZXIgZm9yIGhpbSwgd2hlbiBoZSBjb21lcyBpbiB0aXJlZCBmcm9tIHBvdHRlcmluZyBhYm91dCBoaXMgdmluZXlhcmQuIFRoZXkgdG9sZCBtZSB5b3VyIGZhdGhlciB3YXMgYXQgaG9tZSBhZ2FpbiwgYW5kIHRoYXQgd2FzIHdoeSBJIGNhbWUsIGJ1dCBpdCBzZWVtcyB0aGUgZ29kcyBhcmUgc3RpbGwga2VlcGluZyBoaW0gYmFjaywgZm9yIGhlIGlzIG5vdCBkZWFkIHlldCBub3Qgb24gdGhlIG1haW5sYW5kLiBJdCBpcyBtb3JlIGxpa2VseSBoZSBpcyBvbiBzb21lIHNlYS1naXJ0IGlzbGFuZCBpbiBtaWQgb2NlYW4sIG9yIGEgcHJpc29uZXIgYW1vbmcgc2F2YWdlcyB3aG8gYXJlIGRldGFpbmluZyBoaW0gYWdhaW5zdCBoaXMgd2lsbCBJIGFtIG5vIHByb3BoZXQsIGFuZCBrbm93IHZlcnkgbGl0dGxlIGFib3V0IG9tZW5zLCBidXQgSSBzcGVhayBhcyBpdCBpcyBib3JuZSBpbiB1cG9uIG1lIGZyb20gaGVhdmVuLCBhbmQgYXNzdXJlIHlvdSB0aGF0IGhlIHdpbGwgbm90IGJlIGF3YXkgbXVjaCBsb25nZXI7IGZvciBoZSBpcyBhIG1hbiBvZiBzdWNoIHJlc291cmNlIHRoYXQgZXZlbiB0aG91Z2ggaGUgd2VyZSBpbiBjaGFpbnMgb2YgaXJvbiBoZSB3b3VsZCBmaW5kIHNvbWUgbWVhbnMgb2YgZ2V0dGluZyBob21lIGFnYWluLiBCdXQgdGVsbCBtZSwgYW5kIHRlbGwgbWUgdHJ1ZSwgY2FuIFVseXNzZXMgcmVhbGx5IGhhdmUgc3VjaCBhIGZpbmUgbG9va2luZyBmZWxsb3cgZm9yIGEgc29uPyBZb3UgYXJlIGluZGVlZCB3b25kZXJmdWxseSBsaWtlIGhpbSBhYm91dCB0aGUgaGVhZCBhbmQgZXllcywgZm9yIHdlIHdlcmUgY2xvc2UgZnJpZW5kcyBiZWZvcmUgaGUgc2V0IHNhaWwgZm9yIFRyb3kgd2hlcmUgdGhlIGZsb3dlciBvZiBhbGwgdGhlIEFyZ2l2ZXMgd2VudCBhbHNvLiBTaW5jZSB0aGF0IHRpbWUgd2UgaGF2ZSBuZXZlciBlaXRoZXIgb2YgdXMgc2VlbiB0aGUgb3RoZXIuIg0KDQoiTXkgbW90aGVyLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgdGVsbHMgbWUgSSBhbSBzb24gdG8gVWx5c3NlcywgYnV0IGl0IGlzIGEgd2lzZSBjaGlsZCB0aGF0IGtub3dzIGhpcyBvd24gZmF0aGVyLiBXb3VsZCB0aGF0IEkgd2VyZSBzb24gdG8gb25lIHdobyBoYWQgZ3Jvd24gb2xkIHVwb24gaGlzIG93biBlc3RhdGVzLCBmb3IsIHNpbmNlIHlvdSBhc2sgbWUsIHRoZXJlIGlzIG5vIG1vcmUgaWxsLXN0YXJyZWQgbWFuIHVuZGVyIGhlYXZlbiB0aGFuIGhlIHdobyB0aGV5IHRlbGwgbWUgaXMgbXkgZmF0aGVyLiINCg0KQW5kIE1pbmVydmEgc2FpZCwgIlRoZXJlIGlzIG5vIGZlYXIgb2YgeW91ciByYWNlIGR5aW5nIG91dCB5ZXQsIHdoaWxlIFBlbmVsb3BlIGhhcyBzdWNoIGEgZmluZSBzb24gYXMgeW91IGFyZS4gQnV0IHRlbGwgbWUsIGFuZCB0ZWxsIG1lIHRydWUsIHdoYXQgaXMgdGhlIG1lYW5pbmcgb2YgYWxsIHRoaXMgZmVhc3RpbmcsIGFuZCB3aG8gYXJlIHRoZXNlIHBlb3BsZT8gV2hhdCBpcyBpdCBhbGwgYWJvdXQ/IEhhdmUgeW91IHNvbWUgYmFucXVldCwgb3IgaXMgdGhlcmUgYSB3ZWRkaW5nIGluIHRoZSBmYW1pbHktIGZvciBubyBvbmUgc2VlbXMgdG8gYmUgYnJpbmdpbmcgYW55IHByb3Zpc2lvbnMgb2YgaGlzIG93bj8gQW5kIHRoZSBndWVzdHMtIGhvdyBhdHJvY2lvdXNseSB0aGV5IGFyZSBiZWhhdmluZzsgd2hhdCByaW90IHRoZXkgbWFrZSBvdmVyIHRoZSB3aG9sZSBob3VzZTsgaXQgaXMgZW5vdWdoIHRvIGRpc2d1c3QgYW55IHJlc3BlY3RhYmxlIHBlcnNvbiB3aG8gY29tZXMgbmVhciB0aGVtLiINCg0KIlNpciwiIHNhaWQgVGVsZW1hY2h1cywgImFzIHJlZ2FyZHMgeW91ciBxdWVzdGlvbiwgc28gbG9uZyBhcyBteSBmYXRoZXIgd2FzIGhlcmUgaXQgd2FzIHdlbGwgd2l0aCB1cyBhbmQgd2l0aCB0aGUgaG91c2UsIGJ1dCB0aGUgZ29kcyBpbiB0aGVpciBkaXNwbGVhc3VyZSBoYXZlIHdpbGxlZCBpdCBvdGhlcndpc2UsIGFuZCBoYXZlIGhpZGRlbiBoaW0gYXdheSBtb3JlIGNsb3NlbHkgdGhhbiBtb3J0YWwgbWFuIHdhcyBldmVyIHlldCBoaWRkZW4uIEkgY291bGQgaGF2ZSBib3JuZSBpdCBiZXR0ZXIgZXZlbiB0aG91Z2ggaGUgd2VyZSBkZWFkLCBpZiBoZSBoYWQgZmFsbGVuIHdpdGggaGlzIG1lbiBiZWZvcmUgVHJveSwgb3IgaGFkIGRpZWQgd2l0aCBmcmllbmRzIGFyb3VuZCBoaW0gd2hlbiB0aGUgZGF5cyBvZiBoaXMgZmlnaHRpbmcgd2VyZSBkb25lOyBmb3IgdGhlbiB0aGUgQWNoYWVhbnMgd291bGQgaGF2ZSBidWlsdCBhIG1vdW5kIG92ZXIgaGlzIGFzaGVzLCBhbmQgSSBzaG91bGQgbXlzZWxmIGhhdmUgYmVlbiBoZWlyIHRvIGhpcyByZW5vd247IGJ1dCBub3cgdGhlIHN0b3JtLXdpbmRzIGhhdmUgc3Bpcml0ZWQgaGltIGF3YXkgd2Uga25vdyBub3Qgd2l0aGVyOyBoZSBpcyBnb25lIHdpdGhvdXQgbGVhdmluZyBzbyBtdWNoIGFzIGEgdHJhY2UgYmVoaW5kIGhpbSwgYW5kIEkgaW5oZXJpdCBub3RoaW5nIGJ1dCBkaXNtYXkuIE5vciBkb2VzIHRoZSBtYXR0ZXIgZW5kIHNpbXBseSB3aXRoIGdyaWVmIGZvciB0aGUgbG9zcyBvZiBteSBmYXRoZXI7IGhlYXZlbiBoYXMgbGFpZCBzb3Jyb3dzIHVwb24gbWUgb2YgeWV0IGFub3RoZXIga2luZDsgZm9yIHRoZSBjaGllZnMgZnJvbSBhbGwgb3VyIGlzbGFuZHMsIER1bGljaGl1bSwgU2FtZSwgYW5kIHRoZSB3b29kbGFuZCBpc2xhbmQgb2YgWmFjeW50aHVzLCBhcyBhbHNvIGFsbCB0aGUgcHJpbmNpcGFsIG1lbiBvZiBJdGhhY2EgaXRzZWxmLCBhcmUgZWF0aW5nIHVwIG15IGhvdXNlIHVuZGVyIHRoZSBwcmV0ZXh0IG9mIHBheWluZyB0aGVpciBjb3VydCB0byBteSBtb3RoZXIsIHdobyB3aWxsIG5laXRoZXIgcG9pbnQgYmxhbmsgc2F5IHRoYXQgc2hlIHdpbGwgbm90IG1hcnJ5LCBub3IgeWV0IGJyaW5nIG1hdHRlcnMgdG8gYW4gZW5kOyBzbyB0aGV5IGFyZSBtYWtpbmcgaGF2b2Mgb2YgbXkgZXN0YXRlLCBhbmQgYmVmb3JlIGxvbmcgd2lsbCBkbyBzbyBhbHNvIHdpdGggbXlzZWxmLiINCg0KIklzIHRoYXQgc28/IiBleGNsYWltZWQgTWluZXJ2YSwgInRoZW4geW91IGRvIGluZGVlZCB3YW50IFVseXNzZXMgaG9tZSBhZ2Fpbi4gR2l2ZSBoaW0gaGlzIGhlbG1ldCwgc2hpZWxkLCBhbmQgYSBjb3VwbGUgbGFuY2VzLCBhbmQgaWYgaGUgaXMgdGhlIG1hbiBoZSB3YXMgd2hlbiBJIGZpcnN0IGtuZXcgaGltIGluIG91ciBob3VzZSwgZHJpbmtpbmcgYW5kIG1ha2luZyBtZXJyeSwgaGUgd291bGQgc29vbiBsYXkgaGlzIGhhbmRzIGFib3V0IHRoZXNlIHJhc2NhbGx5IHN1aXRvcnMsIHdlcmUgaGUgdG8gc3RhbmQgb25jZSBtb3JlIHVwb24gaGlzIG93biB0aHJlc2hvbGQuIEhlIHdhcyB0aGVuIGNvbWluZyBmcm9tIEVwaHlyYSwgd2hlcmUgaGUgaGFkIGJlZW4gdG8gYmVnIHBvaXNvbiBmb3IgaGlzIGFycm93cyBmcm9tIElsdXMsIHNvbiBvZiBNZXJtZXJ1cy4gSWx1cyBmZWFyZWQgdGhlIGV2ZXItbGl2aW5nIGdvZHMgYW5kIHdvdWxkIG5vdCBnaXZlIGhpbSBhbnksIGJ1dCBteSBmYXRoZXIgbGV0IGhpbSBoYXZlIHNvbWUsIGZvciBoZSB3YXMgdmVyeSBmb25kIG9mIGhpbS4gSWYgVWx5c3NlcyBpcyB0aGUgbWFuIGhlIHRoZW4gd2FzIHRoZXNlIHN1aXRvcnMgd2lsbCBoYXZlIGEgc2hvcnQgc2hyaWZ0IGFuZCBhIHNvcnJ5IHdlZGRpbmcuDQoNCiJCdXQgdGhlcmUhIEl0IHJlc3RzIHdpdGggaGVhdmVuIHRvIGRldGVybWluZSB3aGV0aGVyIGhlIGlzIHRvIHJldHVybiwgYW5kIHRha2UgaGlzIHJldmVuZ2UgaW4gaGlzIG93biBob3VzZSBvciBubzsgSSB3b3VsZCwgaG93ZXZlciwgdXJnZSB5b3UgdG8gc2V0IGFib3V0IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZXNlIHN1aXRvcnMgYXQgb25jZS4gVGFrZSBteSBhZHZpY2UsIGNhbGwgdGhlIEFjaGFlYW4gaGVyb2VzIGluIGFzc2VtYmx5IHRvLW1vcnJvdyAtbGF5IHlvdXIgY2FzZSBiZWZvcmUgdGhlbSwgYW5kIGNhbGwgaGVhdmVuIHRvIGJlYXIgeW91IHdpdG5lc3MuIEJpZCB0aGUgc3VpdG9ycyB0YWtlIHRoZW1zZWx2ZXMgb2ZmLCBlYWNoIHRvIGhpcyBvd24gcGxhY2UsIGFuZCBpZiB5b3VyIG1vdGhlcidzIG1pbmQgaXMgc2V0IG9uIG1hcnJ5aW5nIGFnYWluLCBsZXQgaGVyIGdvIGJhY2sgdG8gaGVyIGZhdGhlciwgd2hvIHdpbGwgZmluZCBoZXIgYSBodXNiYW5kIGFuZCBwcm92aWRlIGhlciB3aXRoIGFsbCB0aGUgbWFycmlhZ2UgZ2lmdHMgdGhhdCBzbyBkZWFyIGEgZGF1Z2h0ZXIgbWF5IGV4cGVjdC4gQXMgZm9yIHlvdXJzZWxmLCBsZXQgbWUgcHJldmFpbCB1cG9uIHlvdSB0byB0YWtlIHRoZSBiZXN0IHNoaXAgeW91IGNhbiBnZXQsIHdpdGggYSBjcmV3IG9mIHR3ZW50eSBtZW4sIGFuZCBnbyBpbiBxdWVzdCBvZiB5b3VyIGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBTb21lIG9uZSBtYXkgdGVsbCB5b3Ugc29tZXRoaW5nLCBvciAoYW5kIHBlb3BsZSBvZnRlbiBoZWFyIHRoaW5ncyBpbiB0aGlzIHdheSkgc29tZSBoZWF2ZW4tc2VudCBtZXNzYWdlIG1heSBkaXJlY3QgeW91LiBGaXJzdCBnbyB0byBQeWxvcyBhbmQgYXNrIE5lc3RvcjsgdGhlbmNlIGdvIG9uIHRvIFNwYXJ0YSBhbmQgdmlzaXQgTWVuZWxhdXMsIGZvciBoZSBnb3QgaG9tZSBsYXN0IG9mIGFsbCB0aGUgQWNoYWVhbnM7IGlmIHlvdSBoZWFyIHRoYXQgeW91ciBmYXRoZXIgaXMgYWxpdmUgYW5kIG9uIGhpcyB3YXkgaG9tZSwgeW91IGNhbiBwdXQgdXAgd2l0aCB0aGUgd2FzdGUgdGhlc2Ugc3VpdG9ycyB3aWxsIG1ha2UgZm9yIHlldCBhbm90aGVyIHR3ZWx2ZSBtb250aHMuIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBoZWFyIG9mIGhpcyBkZWF0aCwgY29tZSBob21lIGF0IG9uY2UsIGNlbGVicmF0ZSBoaXMgZnVuZXJhbCByaXRlcyB3aXRoIGFsbCBkdWUgcG9tcCwgYnVpbGQgYSBiYXJyb3cgdG8gaGlzIG1lbW9yeSwgYW5kIG1ha2UgeW91ciBtb3RoZXIgbWFycnkgYWdhaW4uIFRoZW4sIGhhdmluZyBkb25lIGFsbCB0aGlzLCB0aGluayBpdCB3ZWxsIG92ZXIgaW4geW91ciBtaW5kIGhvdywgYnkgZmFpciBtZWFucyBvciBmb3VsLCB5b3UgbWF5IGtpbGwgdGhlc2Ugc3VpdG9ycyBpbiB5b3VyIG93biBob3VzZS4gWW91IGFyZSB0b28gb2xkIHRvIHBsZWFkIGluZmFuY3kgYW55IGxvbmdlcjsgaGF2ZSB5b3Ugbm90IGhlYXJkIGhvdyBwZW9wbGUgYXJlIHNpbmdpbmcgT3Jlc3RlcycgcHJhaXNlcyBmb3IgaGF2aW5nIGtpbGxlZCBoaXMgZmF0aGVyJ3MgbXVyZGVyZXIgQWVnaXN0aHVzPyBZb3UgYXJlIGEgZmluZSwgc21hcnQgbG9va2luZyBmZWxsb3c7IHNob3cgeW91ciBtZXR0bGUsIHRoZW4sIGFuZCBtYWtlIHlvdXJzZWxmIGEgbmFtZSBpbiBzdG9yeS4gTm93LCBob3dldmVyLCBJIG11c3QgZ28gYmFjayB0byBteSBzaGlwIGFuZCB0byBteSBjcmV3LCB3aG8gd2lsbCBiZSBpbXBhdGllbnQgaWYgSSBrZWVwIHRoZW0gd2FpdGluZyBsb25nZXI7IHRoaW5rIHRoZSBtYXR0ZXIgb3ZlciBmb3IgeW91cnNlbGYsIGFuZCByZW1lbWJlciB3aGF0IEkgaGF2ZSBzYWlkIHRvIHlvdS4iDQoNCiJTaXIsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiaXQgaGFzIGJlZW4gdmVyeSBraW5kIG9mIHlvdSB0byB0YWxrIHRvIG1lIGluIHRoaXMgd2F5LCBhcyB0aG91Z2ggSSB3ZXJlIHlvdXIgb3duIHNvbiwgYW5kIEkgd2lsbCBkbyBhbGwgeW91IHRlbGwgbWU7IEkga25vdyB5b3Ugd2FudCB0byBiZSBnZXR0aW5nIG9uIHdpdGggeW91ciB2b3lhZ2UsIGJ1dCBzdGF5IGEgbGl0dGxlIGxvbmdlciB0aWxsIHlvdSBoYXZlIHRha2VuIGEgYmF0aCBhbmQgcmVmcmVzaGVkIHlvdXJzZWxmLiBJIHdpbGwgdGhlbiBnaXZlIHlvdSBhIHByZXNlbnQsIGFuZCB5b3Ugc2hhbGwgZ28gb24geW91ciB3YXkgcmVqb2ljaW5nOyBJIHdpbGwgZ2l2ZSB5b3Ugb25lIG9mIGdyZWF0IGJlYXV0eSBhbmQgdmFsdWUtIGEga2VlcHNha2Ugc3VjaCBhcyBvbmx5IGRlYXIgZnJpZW5kcyBnaXZlIHRvIG9uZSBhbm90aGVyLiINCg0KTWluZXJ2YSBhbnN3ZXJlZCwgIkRvIG5vdCB0cnkgdG8ga2VlcCBtZSwgZm9yIEkgd291bGQgYmUgb24gbXkgd2F5IGF0IG9uY2UuIEFzIGZvciBhbnkgcHJlc2VudCB5b3UgbWF5IGJlIGRpc3Bvc2VkIHRvIG1ha2UgbWUsIGtlZXAgaXQgdGlsbCBJIGNvbWUgYWdhaW4sIGFuZCBJIHdpbGwgdGFrZSBpdCBob21lIHdpdGggbWUuIFlvdSBzaGFsbCBnaXZlIG1lIGEgdmVyeSBnb29kIG9uZSwgYW5kIEkgd2lsbCBnaXZlIHlvdSBvbmUgb2Ygbm8gbGVzcyB2YWx1ZSBpbiByZXR1cm4uIg0KDQpXaXRoIHRoZXNlIHdvcmRzIHNoZSBmbGV3IGF3YXkgbGlrZSBhIGJpcmQgaW50byB0aGUgYWlyLCBidXQgc2hlIGhhZCBnaXZlbiBUZWxlbWFjaHVzIGNvdXJhZ2UsIGFuZCBoYWQgbWFkZSBoaW0gdGhpbmsgbW9yZSB0aGFuIGV2ZXIgYWJvdXQgaGlzIGZhdGhlci4gSGUgZmVsdCB0aGUgY2hhbmdlLCB3b25kZXJlZCBhdCBpdCwgYW5kIGtuZXcgdGhhdCB0aGUgc3RyYW5nZXIgaGFkIGJlZW4gYSBnb2QsIHNvIGhlIHdlbnQgc3RyYWlnaHQgdG8gd2hlcmUgdGhlIHN1aXRvcnMgd2VyZSBzaXR0aW5nLg0KDQpQaGVtaXVzIHdhcyBzdGlsbCBzaW5naW5nLCBhbmQgaGlzIGhlYXJlcnMgc2F0IHJhcHQgaW4gc2lsZW5jZSBhcyBoZSB0b2xkIHRoZSBzYWQgdGFsZSBvZiB0aGUgcmV0dXJuIGZyb20gVHJveSwgYW5kIHRoZSBpbGxzIE1pbmVydmEgaGFkIGxhaWQgdXBvbiB0aGUgQWNoYWVhbnMuIFBlbmVsb3BlLCBkYXVnaHRlciBvZiBJY2FyaXVzLCBoZWFyZCBoaXMgc29uZyBmcm9tIGhlciByb29tIHVwc3RhaXJzLCBhbmQgY2FtZSBkb3duIGJ5IHRoZSBncmVhdCBzdGFpcmNhc2UsIG5vdCBhbG9uZSwgYnV0IGF0dGVuZGVkIGJ5IHR3byBvZiBoZXIgaGFuZG1haWRzLiBXaGVuIHNoZSByZWFjaGVkIHRoZSBzdWl0b3JzIHNoZSBzdG9vZCBieSBvbmUgb2YgdGhlIGJlYXJpbmcgcG9zdHMgdGhhdCBzdXBwb3J0ZWQgdGhlIHJvb2Ygb2YgdGhlIGNsb2lzdGVycyB3aXRoIGEgc3RhaWQgbWFpZGVuIG9uIGVpdGhlciBzaWRlIG9mIGhlci4gU2hlIGhlbGQgYSB2ZWlsLCBtb3Jlb3ZlciwgYmVmb3JlIGhlciBmYWNlLCBhbmQgd2FzIHdlZXBpbmcgYml0dGVybHkuDQoNCiJQaGVtaXVzLCIgc2hlIGNyaWVkLCAieW91IGtub3cgbWFueSBhbm90aGVyIGZlYXQgb2YgZ29kcyBhbmQgaGVyb2VzLCBzdWNoIGFzIHBvZXRzIGxvdmUgdG8gY2VsZWJyYXRlLiBTaW5nIHRoZSBzdWl0b3JzIHNvbWUgb25lIG9mIHRoZXNlLCBhbmQgbGV0IHRoZW0gZHJpbmsgdGhlaXIgd2luZSBpbiBzaWxlbmNlLCBidXQgY2Vhc2UgdGhpcyBzYWQgdGFsZSwgZm9yIGl0IGJyZWFrcyBteSBzb3Jyb3dmdWwgaGVhcnQsIGFuZCByZW1pbmRzIG1lIG9mIG15IGxvc3QgaHVzYmFuZCB3aG9tIEkgbW91cm4gZXZlciB3aXRob3V0IGNlYXNpbmcsIGFuZCB3aG9zZSBuYW1lIHdhcyBncmVhdCBvdmVyIGFsbCBIZWxsYXMgYW5kIG1pZGRsZSBBcmdvcy4iDQoNCiJNb3RoZXIsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAibGV0IHRoZSBiYXJkIHNpbmcgd2hhdCBoZSBoYXMgYSBtaW5kIHRvOyBiYXJkcyBkbyBub3QgbWFrZSB0aGUgaWxscyB0aGV5IHNpbmcgb2Y7IGl0IGlzIEpvdmUsIG5vdCB0aGV5LCB3aG8gbWFrZXMgdGhlbSwgYW5kIHdobyBzZW5kcyB3ZWFsIG9yIHdvZSB1cG9uIG1hbmtpbmQgYWNjb3JkaW5nIHRvIGhpcyBvd24gZ29vZCBwbGVhc3VyZS4gVGhpcyBmZWxsb3cgbWVhbnMgbm8gaGFybSBieSBzaW5naW5nIHRoZSBpbGwtZmF0ZWQgcmV0dXJuIG9mIHRoZSBEYW5hYW5zLCBmb3IgcGVvcGxlIGFsd2F5cyBhcHBsYXVkIHRoZSBsYXRlc3Qgc29uZ3MgbW9zdCB3YXJtbHkuIE1ha2UgdXAgeW91ciBtaW5kIHRvIGl0IGFuZCBiZWFyIGl0OyBVbHlzc2VzIGlzIG5vdCB0aGUgb25seSBtYW4gd2hvIG5ldmVyIGNhbWUgYmFjayBmcm9tIFRyb3ksIGJ1dCBtYW55IGFub3RoZXIgd2VudCBkb3duIGFzIHdlbGwgYXMgaGUuIEdvLCB0aGVuLCB3aXRoaW4gdGhlIGhvdXNlIGFuZCBidXN5IHlvdXJzZWxmIHdpdGggeW91ciBkYWlseSBkdXRpZXMsIHlvdXIgbG9vbSwgeW91ciBkaXN0YWZmLCBhbmQgdGhlIG9yZGVyaW5nIG9mIHlvdXIgc2VydmFudHM7IGZvciBzcGVlY2ggaXMgbWFuJ3MgbWF0dGVyLCBhbmQgbWluZSBhYm92ZSBhbGwgb3RoZXJzLSBmb3IgaXQgaXMgSSB3aG8gYW0gbWFzdGVyIGhlcmUuIg0KDQpTaGUgd2VudCB3b25kZXJpbmcgYmFjayBpbnRvIHRoZSBob3VzZSwgYW5kIGxhaWQgaGVyIHNvbidzIHNheWluZyBpbiBoZXIgaGVhcnQuIFRoZW4sIGdvaW5nIHVwc3RhaXJzIHdpdGggaGVyIGhhbmRtYWlkcyBpbnRvIGhlciByb29tLCBzaGUgbW91cm5lZCBoZXIgZGVhciBodXNiYW5kIHRpbGwgTWluZXJ2YSBzaGVkIHN3ZWV0IHNsZWVwIG92ZXIgaGVyIGV5ZXMuIEJ1dCB0aGUgc3VpdG9ycyB3ZXJlIGNsYW1vcm91cyB0aHJvdWdob3V0IHRoZSBjb3ZlcmVkIGNsb2lzdGVycywgYW5kIHByYXllZCBlYWNoIG9uZSB0aGF0IGhlIG1pZ2h0IGJlIGhlciBiZWQgZmVsbG93Lg0KDQpUaGVuIFRlbGVtYWNodXMgc3Bva2UsICJTaGFtZWxlc3MsIiBoZSBjcmllZCwgImFuZCBpbnNvbGVudCBzdWl0b3JzLCBsZXQgdXMgZmVhc3QgYXQgb3VyIHBsZWFzdXJlIG5vdywgYW5kIGxldCB0aGVyZSBiZSBubyBicmF3bGluZywgZm9yIGl0IGlzIGEgcmFyZSB0aGluZyB0byBoZWFyIGEgbWFuIHdpdGggc3VjaCBhIGRpdmluZSB2b2ljZSBhcyBQaGVtaXVzIGhhczsgYnV0IGluIHRoZSBtb3JuaW5nIG1lZXQgbWUgaW4gZnVsbCBhc3NlbWJseSB0aGF0IEkgbWF5IGdpdmUgeW91IGZvcm1hbCBub3RpY2UgdG8gZGVwYXJ0LCBhbmQgZmVhc3QgYXQgb25lIGFub3RoZXIncyBob3VzZXMsIHR1cm4gYW5kIHR1cm4gYWJvdXQsIGF0IHlvdXIgb3duIGNvc3QuIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBjaG9vc2UgdG8gcGVyc2lzdCBpbiBzcHVuZ2luZyB1cG9uIG9uZSBtYW4sIGhlYXZlbiBoZWxwIG1lLCBidXQgSm92ZSBzaGFsbCByZWNrb24gd2l0aCB5b3UgaW4gZnVsbCwgYW5kIHdoZW4geW91IGZhbGwgaW4gbXkgZmF0aGVyJ3MgaG91c2UgdGhlcmUgc2hhbGwgYmUgbm8gbWFuIHRvIGF2ZW5nZSB5b3UuIg0KDQpUaGUgc3VpdG9ycyBiaXQgdGhlaXIgbGlwcyBhcyB0aGV5IGhlYXJkIGhpbSwgYW5kIG1hcnZlbGxlZCBhdCB0aGUgYm9sZG5lc3Mgb2YgaGlzIHNwZWVjaC4gVGhlbiwgQW50aW5vdXMsIHNvbiBvZiBFdXBlaXRoZXMsIHNhaWQsICJUaGUgZ29kcyBzZWVtIHRvIGhhdmUgZ2l2ZW4geW91IGxlc3NvbnMgaW4gYmx1c3RlciBhbmQgdGFsbCB0YWxraW5nOyBtYXkgSm92ZSBuZXZlciBncmFudCB5b3UgdG8gYmUgY2hpZWYgaW4gSXRoYWNhIGFzIHlvdXIgZmF0aGVyIHdhcyBiZWZvcmUgeW91LiINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCwgIkFudGlub3VzLCBkbyBub3QgY2hpZGUgd2l0aCBtZSwgYnV0LCBnb2Qgd2lsbGluZywgSSB3aWxsIGJlIGNoaWVmIHRvbyBpZiBJIGNhbi4gSXMgdGhpcyB0aGUgd29yc3QgZmF0ZSB5b3UgY2FuIHRoaW5rIG9mIGZvciBtZT8gSXQgaXMgbm8gYmFkIHRoaW5nIHRvIGJlIGEgY2hpZWYsIGZvciBpdCBicmluZ3MgYm90aCByaWNoZXMgYW5kIGhvbm91ci4gU3RpbGwsIG5vdyB0aGF0IFVseXNzZXMgaXMgZGVhZCB0aGVyZSBhcmUgbWFueSBncmVhdCBtZW4gaW4gSXRoYWNhIGJvdGggb2xkIGFuZCB5b3VuZywgYW5kIHNvbWUgb3RoZXIgbWF5IHRha2UgdGhlIGxlYWQgYW1vbmcgdGhlbTsgbmV2ZXJ0aGVsZXNzIEkgd2lsbCBiZSBjaGllZiBpbiBteSBvd24gaG91c2UsIGFuZCB3aWxsIHJ1bGUgdGhvc2Ugd2hvbSBVbHlzc2VzIGhhcyB3b24gZm9yIG1lLiINCg0KVGhlbiBFdXJ5bWFjaHVzLCBzb24gb2YgUG9seWJ1cywgYW5zd2VyZWQsICJJdCByZXN0cyB3aXRoIGhlYXZlbiB0byBkZWNpZGUgd2hvIHNoYWxsIGJlIGNoaWVmIGFtb25nIHVzLCBidXQgeW91IHNoYWxsIGJlIG1hc3RlciBpbiB5b3VyIG93biBob3VzZSBhbmQgb3ZlciB5b3VyIG93biBwb3NzZXNzaW9uczsgbm8gb25lIHdoaWxlIHRoZXJlIGlzIGEgbWFuIGluIEl0aGFjYSBzaGFsbCBkbyB5b3UgdmlvbGVuY2Ugbm9yIHJvYiB5b3UuIEFuZCBub3csIG15IGdvb2QgZmVsbG93LCBJIHdhbnQgdG8ga25vdyBhYm91dCB0aGlzIHN0cmFuZ2VyLiBXaGF0IGNvdW50cnkgZG9lcyBoZSBjb21lIGZyb20/IE9mIHdoYXQgZmFtaWx5IGlzIGhlLCBhbmQgd2hlcmUgaXMgaGlzIGVzdGF0ZT8gSGFzIGhlIGJyb3VnaHQgeW91IG5ld3MgYWJvdXQgdGhlIHJldHVybiBvZiB5b3VyIGZhdGhlciwgb3Igd2FzIGhlIG9uIGJ1c2luZXNzIG9mIGhpcyBvd24/IEhlIHNlZW1lZCBhIHdlbGwtdG8tZG8gbWFuLCBidXQgaGUgaHVycmllZCBvZmYgc28gc3VkZGVubHkgdGhhdCBoZSB3YXMgZ29uZSBpbiBhIG1vbWVudCBiZWZvcmUgd2UgY291bGQgZ2V0IHRvIGtub3cgaGltLiINCg0KIk15IGZhdGhlciBpcyBkZWFkIGFuZCBnb25lLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgImFuZCBldmVuIGlmIHNvbWUgcnVtb3VyIHJlYWNoZXMgbWUgSSBwdXQgbm8gbW9yZSBmYWl0aCBpbiBpdCBub3cuIE15IG1vdGhlciBkb2VzIGluZGVlZCBzb21ldGltZXMgc2VuZCBmb3IgYSBzb290aHNheWVyIGFuZCBxdWVzdGlvbiBoaW0sIGJ1dCBJIGdpdmUgaGlzIHByb3BoZWN5aW5ncyBubyBoZWVkLiBBcyBmb3IgdGhlIHN0cmFuZ2VyLCBoZSB3YXMgTWVudGVzLCBzb24gb2YgQW5jaGlhbHVzLCBjaGllZiBvZiB0aGUgVGFwaGlhbnMsIGFuIG9sZCBmcmllbmQgb2YgbXkgZmF0aGVyJ3MuIiBCdXQgaW4gaGlzIGhlYXJ0IGhlIGtuZXcgdGhhdCBpdCBoYWQgYmVlbiB0aGUgZ29kZGVzcy4NCg0KVGhlIHN1aXRvcnMgdGhlbiByZXR1cm5lZCB0byB0aGVpciBzaW5naW5nIGFuZCBkYW5jaW5nIHVudGlsIHRoZSBldmVuaW5nOyBidXQgd2hlbiBuaWdodCBmZWxsIHVwb24gdGhlaXIgcGxlYXN1cmluZyB0aGV5IHdlbnQgaG9tZSB0byBiZWQgZWFjaCBpbiBoaXMgb3duIGFib2RlLiBUZWxlbWFjaHVzJ3Mgcm9vbSB3YXMgaGlnaCB1cCBpbiBhIHRvd2VyIHRoYXQgbG9va2VkIG9uIHRvIHRoZSBvdXRlciBjb3VydDsgaGl0aGVyLCB0aGVuLCBoZSBoaWVkLCBicm9vZGluZyBhbmQgZnVsbCBvZiB0aG91Z2h0LiBBIGdvb2Qgb2xkIHdvbWFuLCBFdXJ5Y2xlYSwgZGF1Z2h0ZXIgb2YgT3BzLCB0aGUgc29uIG9mIFBpc2Vub3IsIHdlbnQgYmVmb3JlIGhpbSB3aXRoIGEgY291cGxlIG9mIGJsYXppbmcgdG9yY2hlcy4gTGFlcnRlcyBoYWQgYm91Z2h0IGhlciB3aXRoIGhpcyBvd24gbW9uZXkgd2hlbiBzaGUgd2FzIHF1aXRlIHlvdW5nOyBoZSBnYXZlIHRoZSB3b3J0aCBvZiB0d2VudHkgb3hlbiBmb3IgaGVyLCBhbmQgc2hld2VkIGFzIG11Y2ggcmVzcGVjdCB0byBoZXIgaW4gaGlzIGhvdXNlaG9sZCBhcyBoZSBkaWQgdG8gaGlzIG93biB3ZWRkZWQgd2lmZSwgYnV0IGhlIGRpZCBub3QgdGFrZSBoZXIgdG8gaGlzIGJlZCBmb3IgaGUgZmVhcmVkIGhpcyB3aWZlJ3MgcmVzZW50bWVudC4gU2hlIGl0IHdhcyB3aG8gbm93IGxpZ2h0ZWQgVGVsZW1hY2h1cyB0byBoaXMgcm9vbSwgYW5kIHNoZSBsb3ZlZCBoaW0gYmV0dGVyIHRoYW4gYW55IG9mIHRoZSBvdGhlciB3b21lbiBpbiB0aGUgaG91c2UgZGlkLCBmb3Igc2hlIGhhZCBudXJzZWQgaGltIHdoZW4gaGUgd2FzIGEgYmFieS4gSGUgb3BlbmVkIHRoZSBkb29yIG9mIGhpcyBiZWQgcm9vbSBhbmQgc2F0IGRvd24gdXBvbiB0aGUgYmVkOyBhcyBoZSB0b29rIG9mZiBoaXMgc2hpcnQgaGUgZ2F2ZSBpdCB0byB0aGUgZ29vZCBvbGQgd29tYW4sIHdobyBmb2xkZWQgaXQgdGlkaWx5IHVwLCBhbmQgaHVuZyBpdCBmb3IgaGltIG92ZXIgYSBwZWcgYnkgaGlzIGJlZCBzaWRlLCBhZnRlciB3aGljaCBzaGUgd2VudCBvdXQsIHB1bGxlZCB0aGUgZG9vciB0byBieSBhIHNpbHZlciBjYXRjaCwgYW5kIGRyZXcgdGhlIGJvbHQgaG9tZSBieSBtZWFucyBvZiB0aGUgc3RyYXAuIEJ1dCBUZWxlbWFjaHVzIGFzIGhlIGxheSBjb3ZlcmVkIHdpdGggYSB3b29sbGVuIGZsZWVjZSBrZXB0IHRoaW5raW5nIGFsbCBuaWdodCB0aHJvdWdoIG9mIGhpcyBpbnRlbmRlZCB2b3lhZ2Ugb2YgdGhlIGNvdW5zZWwgdGhhdCBNaW5lcnZhIGhhZCBnaXZlbiBoaW0uDQoNCkJvb2sgSUkNCg0KTm93IHdoZW4gdGhlIGNoaWxkIG9mIG1vcm5pbmcsIHJvc3ktZmluZ2VyZWQgRGF3biwgYXBwZWFyZWQsIFRlbGVtYWNodXMgcm9zZSBhbmQgZHJlc3NlZCBoaW1zZWxmLiBIZSBib3VuZCBoaXMgc2FuZGFscyBvbiB0byBoaXMgY29tZWx5IGZlZXQsIGdpcmRlZCBoaXMgc3dvcmQgYWJvdXQgaGlzIHNob3VsZGVyLCBhbmQgbGVmdCBoaXMgcm9vbSBsb29raW5nIGxpa2UgYW4gaW1tb3J0YWwgZ29kLiBIZSBhdCBvbmNlIHNlbnQgdGhlIGNyaWVycyByb3VuZCB0byBjYWxsIHRoZSBwZW9wbGUgaW4gYXNzZW1ibHksIHNvIHRoZXkgY2FsbGVkIHRoZW0gYW5kIHRoZSBwZW9wbGUgZ2F0aGVyZWQgdGhlcmVvbjsgdGhlbiwgd2hlbiB0aGV5IHdlcmUgZ290IHRvZ2V0aGVyLCBoZSB3ZW50IHRvIHRoZSBwbGFjZSBvZiBhc3NlbWJseSBzcGVhciBpbiBoYW5kLSBub3QgYWxvbmUsIGZvciBoaXMgdHdvIGhvdW5kcyB3ZW50IHdpdGggaGltLiBNaW5lcnZhIGVuZG93ZWQgaGltIHdpdGggYSBwcmVzZW5jZSBvZiBzdWNoIGRpdmluZSBjb21lbGluZXNzIHRoYXQgYWxsIG1hcnZlbGxlZCBhdCBoaW0gYXMgaGUgd2VudCBieSwgYW5kIHdoZW4gaGUgdG9vayBoaXMgcGxhY2UnIGluIGhpcyBmYXRoZXIncyBzZWF0IGV2ZW4gdGhlIG9sZGVzdCBjb3VuY2lsbG9ycyBtYWRlIHdheSBmb3IgaGltLg0KDQpBZWd5cHRpdXMsIGEgbWFuIGJlbnQgZG91YmxlIHdpdGggYWdlLCBhbmQgb2YgaW5maW5pdGUgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHRvIHNwZWFrIEhpcyBzb24gQW50aXBodXMgaGFkIGdvbmUgd2l0aCBVbHlzc2VzIHRvIElsaXVzLCBsYW5kIG9mIG5vYmxlIHN0ZWVkcywgYnV0IHRoZSBzYXZhZ2UgQ3ljbG9wcyBoYWQga2lsbGVkIGhpbSB3aGVuIHRoZXkgd2VyZSBhbGwgc2h1dCB1cCBpbiB0aGUgY2F2ZSwgYW5kIGhhZCBjb29rZWQgaGlzIGxhc3QgZGlubmVyIGZvciBoaW0sIEhlIGhhZCB0aHJlZSBzb25zIGxlZnQsIG9mIHdob20gdHdvIHN0aWxsIHdvcmtlZCBvbiB0aGVpciBmYXRoZXIncyBsYW5kLCB3aGlsZSB0aGUgdGhpcmQsIEV1cnlub211cywgd2FzIG9uZSBvZiB0aGUgc3VpdG9yczsgbmV2ZXJ0aGVsZXNzIHRoZWlyIGZhdGhlciBjb3VsZCBub3QgZ2V0IG92ZXIgdGhlIGxvc3Mgb2YgQW50aXBodXMsIGFuZCB3YXMgc3RpbGwgd2VlcGluZyBmb3IgaGltIHdoZW4gaGUgYmVnYW4gaGlzIHNwZWVjaC4NCg0KIk1lbiBvZiBJdGhhY2EsIiBoZSBzYWlkLCAiaGVhciBteSB3b3Jkcy4gRnJvbSB0aGUgZGF5IFVseXNzZXMgbGVmdCB1cyB0aGVyZSBoYXMgYmVlbiBubyBtZWV0aW5nIG9mIG91ciBjb3VuY2lsbG9ycyB1bnRpbCBub3c7IHdobyB0aGVuIGNhbiBpdCBiZSwgd2hldGhlciBvbGQgb3IgeW91bmcsIHRoYXQgZmluZHMgaXQgc28gbmVjZXNzYXJ5IHRvIGNvbnZlbmUgdXM/IEhhcyBoZSBnb3Qgd2luZCBvZiBzb21lIGhvc3QgYXBwcm9hY2hpbmcsIGFuZCBkb2VzIGhlIHdpc2ggdG8gd2FybiB1cywgb3Igd291bGQgaGUgc3BlYWsgdXBvbiBzb21lIG90aGVyIG1hdHRlciBvZiBwdWJsaWMgbW9tZW50PyBJIGFtIHN1cmUgaGUgaXMgYW4gZXhjZWxsZW50IHBlcnNvbiwgYW5kIEkgaG9wZSBKb3ZlIHdpbGwgZ3JhbnQgaGltIGhpcyBoZWFydCdzIGRlc2lyZS4iDQoNClRlbGVtYWNodXMgdG9vayB0aGlzIHNwZWVjaCBhcyBvZiBnb29kIG9tZW4gYW5kIHJvc2UgYXQgb25jZSwgZm9yIGhlIHdhcyBidXJzdGluZyB3aXRoIHdoYXQgaGUgaGFkIHRvIHNheS4gSGUgc3Rvb2QgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYXNzZW1ibHkgYW5kIHRoZSBnb29kIGhlcmFsZCBQaXNlbm9yIGJyb3VnaHQgaGltIGhpcyBzdGFmZi4gVGhlbiwgdHVybmluZyB0byBBZWd5cHRpdXMsICJTaXIsIiBzYWlkIGhlLCAiaXQgaXMgSSwgYXMgeW91IHdpbGwgc2hvcnRseSBsZWFybiwgd2hvIGhhdmUgY29udmVuZWQgeW91LCBmb3IgaXQgaXMgSSB3aG8gYW0gdGhlIG1vc3QgYWdncmlldmVkLiBJIGhhdmUgbm90IGdvdCB3aW5kIG9mIGFueSBob3N0IGFwcHJvYWNoaW5nIGFib3V0IHdoaWNoIEkgd291bGQgd2FybiB5b3UsIG5vciBpcyB0aGVyZSBhbnkgbWF0dGVyIG9mIHB1YmxpYyBtb21lbnQgb24gd2hpY2ggSSB3b3VsZCBzcGVhay4gTXkgZ3JpZXZlYW5jZSBpcyBwdXJlbHkgcGVyc29uYWwsIGFuZCB0dXJucyBvbiB0d28gZ3JlYXQgbWlzZm9ydHVuZXMgd2hpY2ggaGF2ZSBmYWxsZW4gdXBvbiBteSBob3VzZS4gVGhlIGZpcnN0IG9mIHRoZXNlIGlzIHRoZSBsb3NzIG9mIG15IGV4Y2VsbGVudCBmYXRoZXIsIHdobyB3YXMgY2hpZWYgYW1vbmcgYWxsIHlvdSBoZXJlIHByZXNlbnQsIGFuZCB3YXMgbGlrZSBhIGZhdGhlciB0byBldmVyeSBvbmUgb2YgeW91OyB0aGUgc2Vjb25kIGlzIG11Y2ggbW9yZSBzZXJpb3VzLCBhbmQgZXJlIGxvbmcgd2lsbCBiZSB0aGUgdXR0ZXIgcnVpbiBvZiBteSBlc3RhdGUuIFRoZSBzb25zIG9mIGFsbCB0aGUgY2hpZWYgbWVuIGFtb25nIHlvdSBhcmUgcGVzdGVyaW5nIG15IG1vdGhlciB0byBtYXJyeSB0aGVtIGFnYWluc3QgaGVyIHdpbGwuIFRoZXkgYXJlIGFmcmFpZCB0byBnbyB0byBoZXIgZmF0aGVyIEljYXJpdXMsIGFza2luZyBoaW0gdG8gY2hvb3NlIHRoZSBvbmUgaGUgbGlrZXMgYmVzdCwgYW5kIHRvIHByb3ZpZGUgbWFycmlhZ2UgZ2lmdHMgZm9yIGhpcyBkYXVnaHRlciwgYnV0IGRheSBieSBkYXkgdGhleSBrZWVwIGhhbmdpbmcgYWJvdXQgbXkgZmF0aGVyJ3MgaG91c2UsIHNhY3JpZmljaW5nIG91ciBveGVuLCBzaGVlcCwgYW5kIGZhdCBnb2F0cyBmb3IgdGhlaXIgYmFucXVldHMsIGFuZCBuZXZlciBnaXZpbmcgc28gbXVjaCBhcyBhIHRob3VnaHQgdG8gdGhlIHF1YW50aXR5IG9mIHdpbmUgdGhleSBkcmluay4gTm8gZXN0YXRlIGNhbiBzdGFuZCBzdWNoIHJlY2tsZXNzbmVzczsgd2UgaGF2ZSBub3cgbm8gVWx5c3NlcyB0byB3YXJkIG9mZiBoYXJtIGZyb20gb3VyIGRvb3JzLCBhbmQgSSBjYW5ub3QgaG9sZCBteSBvd24gYWdhaW5zdCB0aGVtLiBJIHNoYWxsIG5ldmVyIGFsbCBteSBkYXlzIGJlIGFzIGdvb2QgYSBtYW4gYXMgaGUgd2FzLCBzdGlsbCBJIHdvdWxkIGluZGVlZCBkZWZlbmQgbXlzZWxmIGlmIEkgaGFkIHBvd2VyIHRvIGRvIHNvLCBmb3IgSSBjYW5ub3Qgc3RhbmQgc3VjaCB0cmVhdG1lbnQgYW55IGxvbmdlcjsgbXkgaG91c2UgaXMgYmVpbmcgZGlzZ3JhY2VkIGFuZCBydWluZWQuIEhhdmUgcmVzcGVjdCwgdGhlcmVmb3JlLCB0byB5b3VyIG93biBjb25zY2llbmNlcyBhbmQgdG8gcHVibGljIG9waW5pb24uIEZlYXIsIHRvbywgdGhlIHdyYXRoIG9mIGhlYXZlbiwgbGVzdCB0aGUgZ29kcyBzaG91bGQgYmUgZGlzcGxlYXNlZCBhbmQgdHVybiB1cG9uIHlvdS4gSSBwcmF5IHlvdSBieSBKb3ZlIGFuZCBUaGVtaXMsIHdobyBpcyB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIGNvdW5jaWxzLCBbZG8gbm90XSBob2xkIGJhY2ssIG15IGZyaWVuZHMsIGFuZCBsZWF2ZSBtZSBzaW5nbGVoYW5kZWQtIHVubGVzcyBpdCBiZSB0aGF0IG15IGJyYXZlIGZhdGhlciBVbHlzc2VzIGRpZCBzb21lIHdyb25nIHRvIHRoZSBBY2hhZWFucyB3aGljaCB5b3Ugd291bGQgbm93IGF2ZW5nZSBvbiBtZSwgYnkgYWlkaW5nIGFuZCBhYmV0dGluZyB0aGVzZSBzdWl0b3JzLiBNb3Jlb3ZlciwgaWYgSSBhbSB0byBiZSBlYXRlbiBvdXQgb2YgaG91c2UgYW5kIGhvbWUgYXQgYWxsLCBJIGhhZCByYXRoZXIgeW91IGRpZCB0aGUgZWF0aW5nIHlvdXJzZWx2ZXMsIGZvciBJIGNvdWxkIHRoZW4gdGFrZSBhY3Rpb24gYWdhaW5zdCB5b3UgdG8gc29tZSBwdXJwb3NlLCBhbmQgc2VydmUgeW91IHdpdGggbm90aWNlcyBmcm9tIGhvdXNlIHRvIGhvdXNlIHRpbGwgSSBnb3QgcGFpZCBpbiBmdWxsLCB3aGVyZWFzIG5vdyBJIGhhdmUgbm8gcmVtZWR5LiINCg0KV2l0aCB0aGlzIFRlbGVtYWNodXMgZGFzaGVkIGhpcyBzdGFmZiB0byB0aGUgZ3JvdW5kIGFuZCBidXJzdCBpbnRvIHRlYXJzLiBFdmVyeSBvbmUgd2FzIHZlcnkgc29ycnkgZm9yIGhpbSwgYnV0IHRoZXkgYWxsIHNhdCBzdGlsbCBhbmQgbm8gb25lIHZlbnR1cmVkIHRvIG1ha2UgaGltIGFuIGFuZ3J5IGFuc3dlciwgc2F2ZSBvbmx5IEFudGlub3VzLCB3aG8gc3Bva2UgdGh1czoNCg0KIlRlbGVtYWNodXMsIGluc29sZW50IGJyYWdnYXJ0IHRoYXQgeW91IGFyZSwgaG93IGRhcmUgeW91IHRyeSB0byB0aHJvdyB0aGUgYmxhbWUgdXBvbiB1cyBzdWl0b3JzPyBJdCBpcyB5b3VyIG1vdGhlcidzIGZhdWx0IG5vdCBvdXJzLCBmb3Igc2hlIGlzIGEgdmVyeSBhcnRmdWwgd29tYW4uIFRoaXMgdGhyZWUgeWVhcnMgcGFzdCwgYW5kIGNsb3NlIG9uIGZvdXIsIHNoZSBoYXMgYmVlbiBkcml2aW5nIHVzIG91dCBvZiBvdXIgbWluZHMsIGJ5IGVuY291cmFnaW5nIGVhY2ggb25lIG9mIHVzLCBhbmQgc2VuZGluZyBoaW0gbWVzc2FnZXMgd2l0aG91dCBtZWFuaW5nIG9uZSB3b3JkIG9mIHdoYXQgc2hlIHNheXMuIEFuZCB0aGVuIHRoZXJlIHdhcyB0aGF0IG90aGVyIHRyaWNrIHNoZSBwbGF5ZWQgdXMuIFNoZSBzZXQgdXAgYSBncmVhdCB0YW1ib3VyIGZyYW1lIGluIGhlciByb29tLCBhbmQgYmVnYW4gdG8gd29yayBvbiBhbiBlbm9ybW91cyBwaWVjZSBvZiBmaW5lIG5lZWRsZXdvcmsuICdTd2VldCBoZWFydHMsJyBzYWlkIHNoZSwgJ1VseXNzZXMgaXMgaW5kZWVkIGRlYWQsIHN0aWxsIGRvIG5vdCBwcmVzcyBtZSB0byBtYXJyeSBhZ2FpbiBpbW1lZGlhdGVseSwgd2FpdC0gZm9yIEkgd291bGQgbm90IGhhdmUgc2tpbGwgaW4gbmVlZGxld29yayBwZXJpc2ggdW5yZWNvcmRlZC0gdGlsbCBJIGhhdmUgY29tcGxldGVkIGEgcGFsbCBmb3IgdGhlIGhlcm8gTGFlcnRlcywgdG8gYmUgaW4gcmVhZGluZXNzIGFnYWluc3QgdGhlIHRpbWUgd2hlbiBkZWF0aCBzaGFsbCB0YWtlIGhpbS4gSGUgaXMgdmVyeSByaWNoLCBhbmQgdGhlIHdvbWVuIG9mIHRoZSBwbGFjZSB3aWxsIHRhbGsgaWYgaGUgaXMgbGFpZCBvdXQgd2l0aG91dCBhIHBhbGwuJw0KDQoiVGhpcyB3YXMgd2hhdCBzaGUgc2FpZCwgYW5kIHdlIGFzc2VudGVkOyB3aGVyZW9uIHdlIGNvdWxkIHNlZSBoZXIgd29ya2luZyBvbiBoZXIgZ3JlYXQgd2ViIGFsbCBkYXkgbG9uZywgYnV0IGF0IG5pZ2h0IHNoZSB3b3VsZCB1bnBpY2sgdGhlIHN0aXRjaGVzIGFnYWluIGJ5IHRvcmNobGlnaHQuIFNoZSBmb29sZWQgdXMgaW4gdGhpcyB3YXkgZm9yIHRocmVlIHllYXJzIGFuZCB3ZSBuZXZlciBmb3VuZCBoZXIgb3V0LCBidXQgYXMgdGltZSB3b3JlIG9uIGFuZCBzaGUgd2FzIG5vdyBpbiBoZXIgZm91cnRoIHllYXIsIG9uZSBvZiBoZXIgbWFpZHMgd2hvIGtuZXcgd2hhdCBzaGUgd2FzIGRvaW5nIHRvbGQgdXMsIGFuZCB3ZSBjYXVnaHQgaGVyIGluIHRoZSBhY3Qgb2YgdW5kb2luZyBoZXIgd29yaywgc28gc2hlIGhhZCB0byBmaW5pc2ggaXQgd2hldGhlciBzaGUgd291bGQgb3Igbm8uIFRoZSBzdWl0b3JzLCB0aGVyZWZvcmUsIG1ha2UgeW91IHRoaXMgYW5zd2VyLCB0aGF0IGJvdGggeW91IGFuZCB0aGUgQWNoYWVhbnMgbWF5IHVuZGVyc3RhbmQtJ1NlbmQgeW91ciBtb3RoZXIgYXdheSwgYW5kIGJpZCBoZXIgbWFycnkgdGhlIG1hbiBvZiBoZXIgb3duIGFuZCBvZiBoZXIgZmF0aGVyJ3MgY2hvaWNlJzsgZm9yIEkgZG8gbm90IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiBzaGUgZ29lcyBvbiBwbGFndWluZyB1cyBtdWNoIGxvbmdlciB3aXRoIHRoZSBhaXJzIHNoZSBnaXZlcyBoZXJzZWxmIG9uIHRoZSBzY29yZSBvZiB0aGUgYWNjb21wbGlzaG1lbnRzIE1pbmVydmEgaGFzIHRhdWdodCBoZXIsIGFuZCBiZWNhdXNlIHNoZSBpcyBzbyBjbGV2ZXIuIFdlIG5ldmVyIHlldCBoZWFyZCBvZiBzdWNoIGEgd29tYW47IHdlIGtub3cgYWxsIGFib3V0IFR5cm8sIEFsY21lbmEsIE15Y2VuZSwgYW5kIHRoZSBmYW1vdXMgd29tZW4gb2Ygb2xkLCBidXQgdGhleSB3ZXJlIG5vdGhpbmcgdG8geW91ciBtb3RoZXIsIGFueSBvbmUgb2YgdGhlbS4gSXQgd2FzIG5vdCBmYWlyIG9mIGhlciB0byB0cmVhdCB1cyBpbiB0aGF0IHdheSwgYW5kIGFzIGxvbmcgYXMgc2hlIGNvbnRpbnVlcyBpbiB0aGUgbWluZCB3aXRoIHdoaWNoIGhlYXZlbiBoYXMgbm93IGVuZG93ZWQgaGVyLCBzbyBsb25nIHNoYWxsIHdlIGdvIG9uIGVhdGluZyB1cCB5b3VyIGVzdGF0ZTsgYW5kIEkgZG8gbm90IHNlZSB3aHkgc2hlIHNob3VsZCBjaGFuZ2UsIGZvciBzaGUgZ2V0cyBhbGwgdGhlIGhvbm91ciBhbmQgZ2xvcnksIGFuZCBpdCBpcyB5b3Ugd2hvIHBheSBmb3IgaXQsIG5vdCBzaGUuIFVuZGVyc3RhbmQsIHRoZW4sIHRoYXQgd2Ugd2lsbCBub3QgZ28gYmFjayB0byBvdXIgbGFuZHMsIG5laXRoZXIgaGVyZSBub3IgZWxzZXdoZXJlLCB0aWxsIHNoZSBoYXMgbWFkZSBoZXIgY2hvaWNlIGFuZCBtYXJyaWVkIHNvbWUgb25lIG9yIG90aGVyIG9mIHVzLiINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCwgIkFudGlub3VzLCBob3cgY2FuIEkgZHJpdmUgdGhlIG1vdGhlciB3aG8gYm9yZSBtZSBmcm9tIG15IGZhdGhlcidzIGhvdXNlPyBNeSBmYXRoZXIgaXMgYWJyb2FkIGFuZCB3ZSBkbyBub3Qga25vdyB3aGV0aGVyIGhlIGlzIGFsaXZlIG9yIGRlYWQuIEl0IHdpbGwgYmUgaGFyZCBvbiBtZSBpZiBJIGhhdmUgdG8gcGF5IEljYXJpdXMgdGhlIGxhcmdlIHN1bSB3aGljaCBJIG11c3QgZ2l2ZSBoaW0gaWYgSSBpbnNpc3Qgb24gc2VuZGluZyBoaXMgZGF1Z2h0ZXIgYmFjayB0byBoaW0uIE5vdCBvbmx5IHdpbGwgaGUgZGVhbCByaWdvcm91c2x5IHdpdGggbWUsIGJ1dCBoZWF2ZW4gd2lsbCBhbHNvIHB1bmlzaCBtZTsgZm9yIG15IG1vdGhlciB3aGVuIHNoZSBsZWF2ZXMgdGhlIGhvdXNlIHdpbGwgY2FsZiBvbiB0aGUgRXJpbnllcyB0byBhdmVuZ2UgaGVyOyBiZXNpZGVzLCBpdCB3b3VsZCBub3QgYmUgYSBjcmVkaXRhYmxlIHRoaW5nIHRvIGRvLCBhbmQgSSB3aWxsIGhhdmUgbm90aGluZyB0byBzYXkgdG8gaXQuIElmIHlvdSBjaG9vc2UgdG8gdGFrZSBvZmZlbmNlIGF0IHRoaXMsIGxlYXZlIHRoZSBob3VzZSBhbmQgZmVhc3QgZWxzZXdoZXJlIGF0IG9uZSBhbm90aGVyJ3MgaG91c2VzIGF0IHlvdXIgb3duIGNvc3QgdHVybiBhbmQgdHVybiBhYm91dC4gSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB5b3UgZWxlY3QgdG8gcGVyc2lzdCBpbiBzcHVuZ2luZyB1cG9uIG9uZSBtYW4sIGhlYXZlbiBoZWxwIG1lLCBidXQgSm92ZSBzaGFsbCByZWNrb24gd2l0aCB5b3UgaW4gZnVsbCwgYW5kIHdoZW4geW91IGZhbGwgaW4gbXkgZmF0aGVyJ3MgaG91c2UgdGhlcmUgc2hhbGwgYmUgbm8gbWFuIHRvIGF2ZW5nZSB5b3UuIg0KDQpBcyBoZSBzcG9rZSBKb3ZlIHNlbnQgdHdvIGVhZ2xlcyBmcm9tIHRoZSB0b3Agb2YgdGhlIG1vdW50YWluLCBhbmQgdGhleSBmbGV3IG9uIGFuZCBvbiB3aXRoIHRoZSB3aW5kLCBzYWlsaW5nIHNpZGUgYnkgc2lkZSBpbiB0aGVpciBvd24gbG9yZGx5IGZsaWdodC4gV2hlbiB0aGV5IHdlcmUgcmlnaHQgb3ZlciB0aGUgbWlkZGxlIG9mIHRoZSBhc3NlbWJseSB0aGV5IHdoZWVsZWQgYW5kIGNpcmNsZWQgYWJvdXQsIGJlYXRpbmcgdGhlIGFpciB3aXRoIHRoZWlyIHdpbmdzIGFuZCBnbGFyaW5nIGRlYXRoIGludG8gdGhlIGV5ZXMgb2YgdGhlbSB0aGF0IHdlcmUgYmVsb3c7IHRoZW4sIGZpZ2h0aW5nIGZpZXJjZWx5IGFuZCB0ZWFyaW5nIGF0IG9uZSBhbm90aGVyLCB0aGV5IGZsZXcgb2ZmIHRvd2FyZHMgdGhlIHJpZ2h0IG92ZXIgdGhlIHRvd24uIFRoZSBwZW9wbGUgd29uZGVyZWQgYXMgdGhleSBzYXcgdGhlbSwgYW5kIGFza2VkIGVhY2ggb3RoZXIgd2hhdCBhbiB0aGlzIG1pZ2h0IGJlOyB3aGVyZW9uIEhhbGl0aGVyc2VzLCB3aG8gd2FzIHRoZSBiZXN0IHByb3BoZXQgYW5kIHJlYWRlciBvZiBvbWVucyBhbW9uZyB0aGVtLCBzcG9rZSB0byB0aGVtIHBsYWlubHkgYW5kIGluIGFsbCBob25lc3R5LCBzYXlpbmc6DQoNCiJIZWFyIG1lLCBtZW4gb2YgSXRoYWNhLCBhbmQgSSBzcGVhayBtb3JlIHBhcnRpY3VsYXJseSB0byB0aGUgc3VpdG9ycywgZm9yIEkgc2VlIG1pc2NoaWVmIGJyZXdpbmcgZm9yIHRoZW0uIFVseXNzZXMgaXMgbm90IGdvaW5nIHRvIGJlIGF3YXkgbXVjaCBsb25nZXI7IGluZGVlZCBoZSBpcyBjbG9zZSBhdCBoYW5kIHRvIGRlYWwgb3V0IGRlYXRoIGFuZCBkZXN0cnVjdGlvbiwgbm90IG9uIHRoZW0gYWxvbmUsIGJ1dCBvbiBtYW55IGFub3RoZXIgb2YgdXMgd2hvIGxpdmUgaW4gSXRoYWNhLiBMZXQgdXMgdGhlbiBiZSB3aXNlIGluIHRpbWUsIGFuZCBwdXQgYSBzdG9wIHRvIHRoaXMgd2lja2VkbmVzcyBiZWZvcmUgaGUgY29tZXMuIExldCB0aGUgc3VpdG9ycyBkbyBzbyBvZiB0aGVpciBvd24gYWNjb3JkOyBpdCB3aWxsIGJlIGJldHRlciBmb3IgdGhlbSwgZm9yIEkgYW0gbm90IHByb3BoZXN5aW5nIHdpdGhvdXQgZHVlIGtub3dsZWRnZTsgZXZlcnl0aGluZyBoYXMgaGFwcGVuZWQgdG8gVWx5c3NlcyBhcyBJIGZvcmV0b2xkIHdoZW4gdGhlIEFyZ2l2ZXMgc2V0IG91dCBmb3IgVHJveSwgYW5kIGhlIHdpdGggdGhlbS4gSSBzYWlkIHRoYXQgYWZ0ZXIgZ29pbmcgdGhyb3VnaCBtdWNoIGhhcmRzaGlwIGFuZCBsb3NpbmcgYWxsIGhpcyBtZW4gaGUgc2hvdWxkIGNvbWUgaG9tZSBhZ2FpbiBpbiB0aGUgdHdlbnRpZXRoIHllYXIgYW5kIHRoYXQgbm8gb25lIHdvdWxkIGtub3cgaGltOyBhbmQgbm93IGFsbCB0aGlzIGlzIGNvbWluZyB0cnVlLiINCg0KRXVyeW1hY2h1cyBzb24gb2YgUG9seWJ1cyB0aGVuIHNhaWQsICJHbyBob21lLCBvbGQgbWFuLCBhbmQgcHJvcGhlc3kgdG8geW91ciBvd24gY2hpbGRyZW4sIG9yIGl0IG1heSBiZSB3b3JzZSBmb3IgdGhlbS4gSSBjYW4gcmVhZCB0aGVzZSBvbWVucyBteXNlbGYgbXVjaCBiZXR0ZXIgdGhhbiB5b3UgY2FuOyBiaXJkcyBhcmUgYWx3YXlzIGZseWluZyBhYm91dCBpbiB0aGUgc3Vuc2hpbmUgc29tZXdoZXJlIG9yIG90aGVyLCBidXQgdGhleSBzZWxkb20gbWVhbiBhbnl0aGluZy4gVWx5c3NlcyBoYXMgZGllZCBpbiBhIGZhciBjb3VudHJ5LCBhbmQgaXQgaXMgYSBwaXR5IHlvdSBhcmUgbm90IGRlYWQgYWxvbmcgd2l0aCBoaW0sIGluc3RlYWQgb2YgcHJhdGluZyBoZXJlIGFib3V0IG9tZW5zIGFuZCBhZGRpbmcgZnVlbCB0byB0aGUgYW5nZXIgb2YgVGVsZW1hY2h1cyB3aGljaCBpcyBmaWVyY2UgZW5vdWdoIGFzIGl0IGlzLiBJIHN1cHBvc2UgeW91IHRoaW5rIGhlIHdpbGwgZ2l2ZSB5b3Ugc29tZXRoaW5nIGZvciB5b3VyIGZhbWlseSwgYnV0IEkgdGVsbCB5b3UtIGFuZCBpdCBzaGFsbCBzdXJlbHkgYmUtIHdoZW4gYW4gb2xkIG1hbiBsaWtlIHlvdSwgd2hvIHNob3VsZCBrbm93IGJldHRlciwgdGFsa3MgYSB5b3VuZyBvbmUgb3ZlciB0aWxsIGhlIGJlY29tZXMgdHJvdWJsZXNvbWUsIGluIHRoZSBmaXJzdCBwbGFjZSBoaXMgeW91bmcgZnJpZW5kIHdpbGwgb25seSBmYXJlIHNvIG11Y2ggdGhlIHdvcnNlLSBoZSB3aWxsIHRha2Ugbm90aGluZyBieSBpdCwgZm9yIHRoZSBzdWl0b3JzIHdpbGwgcHJldmVudCB0aGlzLSBhbmQgaW4gdGhlIG5leHQsIHdlIHdpbGwgbGF5IGEgaGVhdmllciBmaW5lLCBzaXIsIHVwb24geW91cnNlbGYgdGhhbiB5b3Ugd2lsbCBhdCBhbGwgbGlrZSBwYXlpbmcsIGZvciBpdCB3aWxsIGJlYXIgaGFyZGx5IHVwb24geW91LiBBcyBmb3IgVGVsZW1hY2h1cywgSSB3YXJuIGhpbSBpbiB0aGUgcHJlc2VuY2Ugb2YgeW91IGFsbCB0byBzZW5kIGhpcyBtb3RoZXIgYmFjayB0byBoZXIgZmF0aGVyLCB3aG8gd2lsbCBmaW5kIGhlciBhIGh1c2JhbmQgYW5kIHByb3ZpZGUgaGVyIHdpdGggYWxsIHRoZSBtYXJyaWFnZSBnaWZ0cyBzbyBkZWFyIGEgZGF1Z2h0ZXIgbWF5IGV4cGVjdC4gVGlsbCB3ZSBzaGFsbCBnbyBvbiBoYXJhc3NpbmcgaGltIHdpdGggb3VyIHN1aXQ7IGZvciB3ZSBmZWFyIG5vIG1hbiwgYW5kIGNhcmUgbmVpdGhlciBmb3IgaGltLCB3aXRoIGFsbCBoaXMgZmluZSBzcGVlY2hlcywgbm9yIGZvciBhbnkgZm9ydHVuZS10ZWxsaW5nIG9mIHlvdXJzLiBZb3UgbWF5IHByZWFjaCBhcyBtdWNoIGFzIHlvdSBwbGVhc2UsIGJ1dCB3ZSBzaGFsbCBvbmx5IGhhdGUgeW91IHRoZSBtb3JlLiBXZSBzaGFsbCBnbyBiYWNrIGFuZCBjb250aW51ZSB0byBlYXQgdXAgVGVsZW1hY2h1cydzIGVzdGF0ZSB3aXRob3V0IHBheWluZyBoaW0sIHRpbGwgc3VjaCB0aW1lIGFzIGhpcyBtb3RoZXIgbGVhdmVzIG9mZiB0b3JtZW50aW5nIHVzIGJ5IGtlZXBpbmcgdXMgZGF5IGFmdGVyIGRheSBvbiB0aGUgdGlwdG9lIG9mIGV4cGVjdGF0aW9uLCBlYWNoIHZ5aW5nIHdpdGggdGhlIG90aGVyIGluIGhpcyBzdWl0IGZvciBhIHByaXplIG9mIHN1Y2ggcmFyZSBwZXJmZWN0aW9uLiBCZXNpZGVzIHdlIGNhbm5vdCBnbyBhZnRlciB0aGUgb3RoZXIgd29tZW4gd2hvbSB3ZSBzaG91bGQgbWFycnkgaW4gZHVlIGNvdXJzZSwgYnV0IGZvciB0aGUgd2F5IGluIHdoaWNoIHNoZSB0cmVhdHMgdXMuIg0KDQpUaGVuIFRlbGVtYWNodXMgc2FpZCwgIkV1cnltYWNodXMsIGFuZCB5b3Ugb3RoZXIgc3VpdG9ycywgSSBzaGFsbCBzYXkgbm8gbW9yZSwgYW5kIGVudHJlYXQgeW91IG5vIGZ1cnRoZXIsIGZvciB0aGUgZ29kcyBhbmQgdGhlIHBlb3BsZSBvZiBJdGhhY2Egbm93IGtub3cgbXkgc3RvcnkuIEdpdmUgbWUsIHRoZW4sIGEgc2hpcCBhbmQgYSBjcmV3IG9mIHR3ZW50eSBtZW4gdG8gdGFrZSBtZSBoaXRoZXIgYW5kIHRoaXRoZXIsIGFuZCBJIHdpbGwgZ28gdG8gU3BhcnRhIGFuZCB0byBQeWxvcyBpbiBxdWVzdCBvZiBteSBmYXRoZXIgd2hvIGhhcyBzbyBsb25nIGJlZW4gbWlzc2luZy4gU29tZSBvbmUgbWF5IHRlbGwgbWUgc29tZXRoaW5nLCBvciAoYW5kIHBlb3BsZSBvZnRlbiBoZWFyIHRoaW5ncyBpbiB0aGlzIHdheSkgc29tZSBoZWF2ZW4tc2VudCBtZXNzYWdlIG1heSBkaXJlY3QgbWUuIElmIEkgY2FuIGhlYXIgb2YgaGltIGFzIGFsaXZlIGFuZCBvbiBoaXMgd2F5IGhvbWUgSSB3aWxsIHB1dCB1cCB3aXRoIHRoZSB3YXN0ZSB5b3Ugc3VpdG9ycyB3aWxsIG1ha2UgZm9yIHlldCBhbm90aGVyIHR3ZWx2ZSBtb250aHMuIElmIG9uIHRoZSBvdGhlciBoYW5kIEkgaGVhciBvZiBoaXMgZGVhdGgsIEkgd2lsbCByZXR1cm4gYXQgb25jZSwgY2VsZWJyYXRlIGhpcyBmdW5lcmFsIHJpdGVzIHdpdGggYWxsIGR1ZSBwb21wLCBidWlsZCBhIGJhcnJvdyB0byBoaXMgbWVtb3J5LCBhbmQgbWFrZSBteSBtb3RoZXIgbWFycnkgYWdhaW4uIg0KDQpXaXRoIHRoZXNlIHdvcmRzIGhlIHNhdCBkb3duLCBhbmQgTWVudG9yIHdobyBoYWQgYmVlbiBhIGZyaWVuZCBvZiBVbHlzc2VzLCBhbmQgaGFkIGJlZW4gbGVmdCBpbiBjaGFyZ2Ugb2YgZXZlcnl0aGluZyB3aXRoIGZ1bGwgYXV0aG9yaXR5IG92ZXIgdGhlIHNlcnZhbnRzLCByb3NlIHRvIHNwZWFrLiBIZSwgdGhlbiwgcGxhaW5seSBhbmQgaW4gYWxsIGhvbmVzdHkgYWRkcmVzc2VkIHRoZW0gdGh1czoNCg0KIkhlYXIgbWUsIG1lbiBvZiBJdGhhY2EsIEkgaG9wZSB0aGF0IHlvdSBtYXkgbmV2ZXIgaGF2ZSBhIGtpbmQgYW5kIHdlbGwtZGlzcG9zZWQgcnVsZXIgYW55IG1vcmUsIG5vciBvbmUgd2hvIHdpbGwgZ292ZXJuIHlvdSBlcXVpdGFibHk7IEkgaG9wZSB0aGF0IGFsbCB5b3VyIGNoaWVmcyBoZW5jZWZvcndhcmQgbWF5IGJlIGNydWVsIGFuZCB1bmp1c3QsIGZvciB0aGVyZSBpcyBub3Qgb25lIG9mIHlvdSBidXQgaGFzIGZvcmdvdHRlbiBVbHlzc2VzLCB3aG8gcnVsZWQgeW91IGFzIHRob3VnaCBoZSB3ZXJlIHlvdXIgZmF0aGVyLiBJIGFtIG5vdCBoYWxmIHNvIGFuZ3J5IHdpdGggdGhlIHN1aXRvcnMsIGZvciBpZiB0aGV5IGNob29zZSB0byBkbyB2aW9sZW5jZSBpbiB0aGUgbmF1Z2h0aW5lc3Mgb2YgdGhlaXIgaGVhcnRzLCBhbmQgd2FnZXIgdGhlaXIgaGVhZHMgdGhhdCBVbHlzc2VzIHdpbGwgbm90IHJldHVybiwgdGhleSBjYW4gdGFrZSB0aGUgaGlnaCBoYW5kIGFuZCBlYXQgdXAgaGlzIGVzdGF0ZSwgYnV0IGFzIGZvciB5b3Ugb3RoZXJzIEkgYW0gc2hvY2tlZCBhdCB0aGUgd2F5IGluIHdoaWNoIHlvdSBhbGwgc2l0IHN0aWxsIHdpdGhvdXQgZXZlbiB0cnlpbmcgdG8gc3RvcCBzdWNoIHNjYW5kYWxvdXMgZ29pbmdzIG9uLXdoaWNoIHlvdSBjb3VsZCBkbyBpZiB5b3UgY2hvc2UsIGZvciB5b3UgYXJlIG1hbnkgYW5kIHRoZXkgYXJlIGZldy4iDQoNCkxlaW9jcml0dXMsIHNvbiBvZiBFdmVub3IsIGFuc3dlcmVkIGhpbSBzYXlpbmcsICJNZW50b3IsIHdoYXQgZm9sbHkgaXMgYWxsIHRoaXMsIHRoYXQgeW91IHNob3VsZCBzZXQgdGhlIHBlb3BsZSB0byBzdGF5IHVzPyBJdCBpcyBhIGhhcmQgdGhpbmcgZm9yIG9uZSBtYW4gdG8gZmlnaHQgd2l0aCBtYW55IGFib3V0IGhpcyB2aWN0dWFscy4gRXZlbiB0aG91Z2ggVWx5c3NlcyBoaW1zZWxmIHdlcmUgdG8gc2V0IHVwb24gdXMgd2hpbGUgd2UgYXJlIGZlYXN0aW5nIGluIGhpcyBob3VzZSwgYW5kIGRvIGhpcyBiZXN0IHRvIG91c3QgdXMsIGhpcyB3aWZlLCB3aG8gd2FudHMgaGltIGJhY2sgc28gdmVyeSBiYWRseSwgd291bGQgaGF2ZSBzbWFsbCBjYXVzZSBmb3IgcmVqb2ljaW5nLCBhbmQgaGlzIGJsb29kIHdvdWxkIGJlIHVwb24gaGlzIG93biBoZWFkIGlmIGhlIGZvdWdodCBhZ2FpbnN0IHN1Y2ggZ3JlYXQgb2Rkcy4gVGhlcmUgaXMgbm8gc2Vuc2UgaW4gd2hhdCB5b3UgaGF2ZSBiZWVuIHNheWluZy4gTm93LCB0aGVyZWZvcmUsIGRvIHlvdSBwZW9wbGUgZ28gYWJvdXQgeW91ciBidXNpbmVzcywgYW5kIGxldCBoaXMgZmF0aGVyJ3Mgb2xkIGZyaWVuZHMsIE1lbnRvciBhbmQgSGFsaXRoZXJzZXMsIHNwZWVkIHRoaXMgYm95IG9uIGhpcyBqb3VybmV5LCBpZiBoZSBnb2VzIGF0IGFsbC0gd2hpY2ggSSBkbyBub3QgdGhpbmsgaGUgd2lsbCwgZm9yIGhlIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgd2hlcmUgaGUgaXMgdGlsbCBzb21lIG9uZSBjb21lcyBhbmQgdGVsbHMgaGltIHNvbWV0aGluZy4iDQoNCk9uIHRoaXMgaGUgYnJva2UgdXAgdGhlIGFzc2VtYmx5LCBhbmQgZXZlcnkgbWFuIHdlbnQgYmFjayB0byBoaXMgb3duIGFib2RlLCB3aGlsZSB0aGUgc3VpdG9ycyByZXR1cm5lZCB0byB0aGUgaG91c2Ugb2YgVWx5c3Nlcy4NCg0KVGhlbiBUZWxlbWFjaHVzIHdlbnQgYWxsIGFsb25lIGJ5IHRoZSBzZWEgc2lkZSwgd2FzaGVkIGhpcyBoYW5kcyBpbiB0aGUgZ3JleSB3YXZlcywgYW5kIHByYXllZCB0byBNaW5lcnZhLg0KDQoiSGVhciBtZSwiIGhlIGNyaWVkLCAieW91IGdvZCB3aG8gdmlzaXRlZCBtZSB5ZXN0ZXJkYXksIGFuZCBiYWRlIG1lIHNhaWwgdGhlIHNlYXMgaW4gc2VhcmNoIG9mIG15IGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBJIHdvdWxkIG9iZXkgeW91LCBidXQgdGhlIEFjaGFlYW5zLCBhbmQgbW9yZSBwYXJ0aWN1bGFybHkgdGhlIHdpY2tlZCBzdWl0b3JzLCBhcmUgaGluZGVyaW5nIG1lIHRoYXQgSSBjYW5ub3QgZG8gc28uIg0KDQpBcyBoZSB0aHVzIHByYXllZCwgTWluZXJ2YSBjYW1lIGNsb3NlIHVwIHRvIGhpbSBpbiB0aGUgbGlrZW5lc3MgYW5kIHdpdGggdGhlIHZvaWNlIG9mIE1lbnRvci4gIlRlbGVtYWNodXMsIiBzYWlkIHNoZSwgImlmIHlvdSBhcmUgbWFkZSBvZiB0aGUgc2FtZSBzdHVmZiBhcyB5b3VyIGZhdGhlciB5b3Ugd2lsbCBiZSBuZWl0aGVyIGZvb2wgbm9yIGNvd2FyZCBoZW5jZWZvcndhcmQsIGZvciBVbHlzc2VzIG5ldmVyIGJyb2tlIGhpcyB3b3JkIG5vciBsZWZ0IGhpcyB3b3JrIGhhbGYgZG9uZS4gSWYsIHRoZW4sIHlvdSB0YWtlIGFmdGVyIGhpbSwgeW91ciB2b3lhZ2Ugd2lsbCBub3QgYmUgZnJ1aXRsZXNzLCBidXQgdW5sZXNzIHlvdSBoYXZlIHRoZSBibG9vZCBvZiBVbHlzc2VzIGFuZCBvZiBQZW5lbG9wZSBpbiB5b3VyIHZlaW5zIEkgc2VlIG5vIGxpa2VsaWhvb2Qgb2YgeW91ciBzdWNjZWVkaW5nLiBTb25zIGFyZSBzZWxkb20gYXMgZ29vZCBtZW4gYXMgdGhlaXIgZmF0aGVyczsgdGhleSBhcmUgZ2VuZXJhbGx5IHdvcnNlLCBub3QgYmV0dGVyOyBzdGlsbCwgYXMgeW91IGFyZSBub3QgZ29pbmcgdG8gYmUgZWl0aGVyIGZvb2wgb3IgY293YXJkIGhlbmNlZm9yd2FyZCwgYW5kIGFyZSBub3QgZW50aXJlbHkgd2l0aG91dCBzb21lIHNoYXJlIG9mIHlvdXIgZmF0aGVyJ3Mgd2lzZSBkaXNjZXJubWVudCwgSSBsb29rIHdpdGggaG9wZSB1cG9uIHlvdXIgdW5kZXJ0YWtpbmcuIEJ1dCBtaW5kIHlvdSBuZXZlciBtYWtlIGNvbW1vbiBjYXVzZSB3aXRoIGFueSBvZiB0aG9zZSBmb29saXNoIHN1aXRvcnMsIGZvciB0aGV5IGhhdmUgbmVpdGhlciBzZW5zZSBub3IgdmlydHVlLCBhbmQgZ2l2ZSBubyB0aG91Z2h0IHRvIGRlYXRoIGFuZCB0byB0aGUgZG9vbSB0aGF0IHdpbGwgc2hvcnRseSBmYWxsIG9uIG9uZSBhbmQgYWxsIG9mIHRoZW0sIHNvIHRoYXQgdGhleSBzaGFsbCBwZXJpc2ggb24gdGhlIHNhbWUgZGF5LiBBcyBmb3IgeW91ciB2b3lhZ2UsIGl0IHNoYWxsIG5vdCBiZSBsb25nIGRlbGF5ZWQ7IHlvdXIgZmF0aGVyIHdhcyBzdWNoIGFuIG9sZCBmcmllbmQgb2YgbWluZSB0aGF0IEkgd2lsbCBmaW5kIHlvdSBhIHNoaXAsIGFuZCB3aWxsIGNvbWUgd2l0aCB5b3UgbXlzZWxmLiBOb3csIGhvd2V2ZXIsIHJldHVybiBob21lLCBhbmQgZ28gYWJvdXQgYW1vbmcgdGhlIHN1aXRvcnM7IGJlZ2luIGdldHRpbmcgcHJvdmlzaW9ucyByZWFkeSBmb3IgeW91ciB2b3lhZ2U7IHNlZSBldmVyeXRoaW5nIHdlbGwgc3Rvd2VkLCB0aGUgd2luZSBpbiBqYXJzLCBhbmQgdGhlIGJhcmxleSBtZWFsLCB3aGljaCBpcyB0aGUgc3RhZmYgb2YgbGlmZSwgaW4gbGVhdGhlcm4gYmFncywgd2hpbGUgSSBnbyByb3VuZCB0aGUgdG93biBhbmQgYmVhdCB1cCB2b2x1bnRlZXJzIGF0IG9uY2UuIFRoZXJlIGFyZSBtYW55IHNoaXBzIGluIEl0aGFjYSBib3RoIG9sZCBhbmQgbmV3OyBJIHdpbGwgcnVuIG15IGV5ZSBvdmVyIHRoZW0gZm9yIHlvdSBhbmQgd2lsbCBjaG9vc2UgdGhlIGJlc3Q7IHdlIHdpbGwgZ2V0IGhlciByZWFkeSBhbmQgd2lsbCBwdXQgb3V0IHRvIHNlYSB3aXRob3V0IGRlbGF5LiINCg0KVGh1cyBzcG9rZSBNaW5lcnZhIGRhdWdodGVyIG9mIEpvdmUsIGFuZCBUZWxlbWFjaHVzIGxvc3Qgbm8gdGltZSBpbiBkb2luZyBhcyB0aGUgZ29kZGVzcyB0b2xkIGhpbS4gSGUgd2VudCBtb29kaWx5IGFuZCBmb3VuZCB0aGUgc3VpdG9ycyBmbGF5aW5nIGdvYXRzIGFuZCBzaW5nZWluZyBwaWdzIGluIHRoZSBvdXRlciBjb3VydC4gQW50aW5vdXMgY2FtZSB1cCB0byBoaW0gYXQgb25jZSBhbmQgbGF1Z2hlZCBhcyBoZSB0b29rIGhpcyBoYW5kIGluIGhpcyBvd24sIHNheWluZywgIlRlbGVtYWNodXMsIG15IGZpbmUgZmlyZS1lYXRlciwgYmVhciBubyBtb3JlIGlsbCBibG9vZCBuZWl0aGVyIGluIHdvcmQgbm9yIGRlZWQsIGJ1dCBlYXQgYW5kIGRyaW5rIHdpdGggdXMgYXMgeW91IHVzZWQgdG8gZG8uIFRoZSBBY2hhZWFucyB3aWxsIGZpbmQgeW91IGluIGV2ZXJ5dGhpbmctIGEgc2hpcCBhbmQgYSBwaWNrZWQgY3JldyB0byBib290LSBzbyB0aGF0IHlvdSBjYW4gc2V0IHNhaWwgZm9yIFB5bG9zIGF0IG9uY2UgYW5kIGdldCBuZXdzIG9mIHlvdXIgbm9ibGUgZmF0aGVyLiINCg0KIkFudGlub3VzLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgIkkgY2Fubm90IGVhdCBpbiBwZWFjZSwgbm9yIHRha2UgcGxlYXN1cmUgb2YgYW55IGtpbmQgd2l0aCBzdWNoIG1lbiBhcyB5b3UgYXJlLiBXYXMgaXQgbm90IGVub3VnaCB0aGF0IHlvdSBzaG91bGQgd2FzdGUgc28gbXVjaCBnb29kIHByb3BlcnR5IG9mIG1pbmUgd2hpbGUgSSB3YXMgeWV0IGEgYm95PyBOb3cgdGhhdCBJIGFtIG9sZGVyIGFuZCBrbm93IG1vcmUgYWJvdXQgaXQsIEkgYW0gYWxzbyBzdHJvbmdlciwgYW5kIHdoZXRoZXIgaGVyZSBhbW9uZyB0aGlzIHBlb3BsZSwgb3IgYnkgZ29pbmcgdG8gUHlsb3MsIEkgd2lsbCBkbyB5b3UgYWxsIHRoZSBoYXJtIEkgY2FuLiBJIHNoYWxsIGdvLCBhbmQgbXkgZ29pbmcgd2lsbCBub3QgYmUgaW4gdmFpbiB0aG91Z2gsIHRoYW5rcyB0byB5b3Ugc3VpdG9ycywgSSBoYXZlIG5laXRoZXIgc2hpcCBub3IgY3JldyBvZiBteSBvd24sIGFuZCBtdXN0IGJlIHBhc3NlbmdlciBub3QgY2FwdGFpbi4iDQoNCkFzIGhlIHNwb2tlIGhlIHNuYXRjaGVkIGhpcyBoYW5kIGZyb20gdGhhdCBvZiBBbnRpbm91cy4gTWVhbndoaWxlIHRoZSBvdGhlcnMgd2VudCBvbiBnZXR0aW5nIGRpbm5lciByZWFkeSBhYm91dCB0aGUgYnVpbGRpbmdzLCBqZWVyaW5nIGF0IGhpbSB0YXVudGluZ2x5IGFzIHRoZXkgZGlkIHNvLg0KDQoiVGVsZW1hY2h1cywiIHNhaWQgb25lIHlvdW5nc3RlciwgIm1lYW5zIHRvIGJlIHRoZSBkZWF0aCBvZiB1czsgSSBzdXBwb3NlIGhlIHRoaW5rcyBoZSBjYW4gYnJpbmcgZnJpZW5kcyB0byBoZWxwIGhpbSBmcm9tIFB5bG9zLCBvciBhZ2FpbiBmcm9tIFNwYXJ0YSwgd2hlcmUgaGUgc2VlbXMgYmVudCBvbiBnb2luZy4gT3Igd2lsbCBoZSBnbyB0byBFcGh5cmEgYXMgd2VsbCwgZm9yIHBvaXNvbiB0byBwdXQgaW4gb3VyIHdpbmUgYW5kIGtpbGwgdXM/Ig0KDQpBbm90aGVyIHNhaWQsICJQZXJoYXBzIGlmIFRlbGVtYWNodXMgZ29lcyBvbiBib2FyZCBzaGlwLCBoZSB3aWxsIGJlIGxpa2UgaGlzIGZhdGhlciBhbmQgcGVyaXNoIGZhciBmcm9tIGhpcyBmcmllbmRzLiBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGhhdmUgcGxlbnR5IHRvIGRvLCBmb3Igd2UgY291bGQgdGhlbiBkaXZpZGUgdXAgaGlzIHByb3BlcnR5IGFtb25nc3QgdXM6IGFzIGZvciB0aGUgaG91c2Ugd2UgY2FuIGxldCBoaXMgbW90aGVyIGFuZCB0aGUgbWFuIHdobyBtYXJyaWVzIGhlciBoYXZlIHRoYXQuIg0KDQpUaGlzIHdhcyBob3cgdGhleSB0YWxrZWQuIEJ1dCBUZWxlbWFjaHVzIHdlbnQgZG93biBpbnRvIHRoZSBsb2Z0eSBhbmQgc3BhY2lvdXMgc3RvcmUtcm9vbSB3aGVyZSBoaXMgZmF0aGVyJ3MgdHJlYXN1cmUgb2YgZ29sZCBhbmQgYnJvbnplIGxheSBoZWFwZWQgdXAgdXBvbiB0aGUgZmxvb3IsIGFuZCB3aGVyZSB0aGUgbGluZW4gYW5kIHNwYXJlIGNsb3RoZXMgd2VyZSBrZXB0IGluIG9wZW4gY2hlc3RzLiBIZXJlLCB0b28sIHRoZXJlIHdhcyBhIHN0b3JlIG9mIGZyYWdyYW50IG9saXZlIG9pbCwgd2hpbGUgY2Fza3Mgb2Ygb2xkLCB3ZWxsLXJpcGVuZWQgd2luZSwgdW5ibGVuZGVkIGFuZCBmaXQgZm9yIGEgZ29kIHRvIGRyaW5rLCB3ZXJlIHJhbmdlZCBhZ2FpbnN0IHRoZSB3YWxsIGluIGNhc2UgVWx5c3NlcyBzaG91bGQgY29tZSBob21lIGFnYWluIGFmdGVyIGFsbC4gVGhlIHJvb20gd2FzIGNsb3NlZCB3aXRoIHdlbGwtbWFkZSBkb29ycyBvcGVuaW5nIGluIHRoZSBtaWRkbGU7IG1vcmVvdmVyIHRoZSBmYWl0aGZ1bCBvbGQgaG91c2Uta2VlcGVyIEV1cnljbGVhLCBkYXVnaHRlciBvZiBPcHMgdGhlIHNvbiBvZiBQaXNlbm9yLCB3YXMgaW4gY2hhcmdlIG9mIGV2ZXJ5dGhpbmcgYm90aCBuaWdodCBhbmQgZGF5LiBUZWxlbWFjaHVzIGNhbGxlZCBoZXIgdG8gdGhlIHN0b3JlLXJvb20gYW5kIHNhaWQ6DQoNCiJOdXJzZSwgZHJhdyBtZSBvZmYgc29tZSBvZiB0aGUgYmVzdCB3aW5lIHlvdSBoYXZlLCBhZnRlciB3aGF0IHlvdSBhcmUga2VlcGluZyBmb3IgbXkgZmF0aGVyJ3Mgb3duIGRyaW5raW5nLCBpbiBjYXNlLCBwb29yIG1hbiwgaGUgc2hvdWxkIGVzY2FwZSBkZWF0aCwgYW5kIGZpbmQgaGlzIHdheSBob21lIGFnYWluIGFmdGVyIGFsbC4gTGV0IG1lIGhhdmUgdHdlbHZlIGphcnMsIGFuZCBzZWUgdGhhdCB0aGV5IGFsbCBoYXZlIGxpZHM7IGFsc28gZmlsbCBtZSBzb21lIHdlbGwtc2V3biBsZWF0aGVybiBiYWdzIHdpdGggYmFybGV5IG1lYWwtIGFib3V0IHR3ZW50eSBtZWFzdXJlcyBpbiBhbGwuIEdldCB0aGVzZSB0aGluZ3MgcHV0IHRvZ2V0aGVyIGF0IG9uY2UsIGFuZCBzYXkgbm90aGluZyBhYm91dCBpdC4gSSB3aWxsIHRha2UgZXZlcnl0aGluZyBhd2F5IHRoaXMgZXZlbmluZyBhcyBzb29uIGFzIG15IG1vdGhlciBoYXMgZ29uZSB1cHN0YWlycyBmb3IgdGhlIG5pZ2h0LiBJIGFtIGdvaW5nIHRvIFNwYXJ0YSBhbmQgdG8gUHlsb3MgdG8gc2VlIGlmIEkgY2FuIGhlYXIgYW55dGhpbmcgYWJvdXQgdGhlIHJldHVybiBvZiBteSBkZWFyIGZhdGhlci4NCg0KV2hlbiBFdXJ5Y2xlYSBoZWFyZCB0aGlzIHNoZSBiZWdhbiB0byBjcnksIGFuZCBzcG9rZSBmb25kbHkgdG8gaGltLCBzYXlpbmcsICJNeSBkZWFyIGNoaWxkLCB3aGF0IGV2ZXIgY2FuIGhhdmUgcHV0IHN1Y2ggbm90aW9uIGFzIHRoYXQgaW50byB5b3VyIGhlYWQ/IFdoZXJlIGluIHRoZSB3b3JsZCBkbyB5b3Ugd2FudCB0byBnbyB0by0geW91LCB3aG8gYXJlIHRoZSBvbmUgaG9wZSBvZiB0aGUgaG91c2U/IFlvdXIgcG9vciBmYXRoZXIgaXMgZGVhZCBhbmQgZ29uZSBpbiBzb21lIGZvcmVpZ24gY291bnRyeSBub2JvZHkga25vd3Mgd2hlcmUsIGFuZCBhcyBzb29uIGFzIHlvdXIgYmFjayBpcyB0dXJuZWQgdGhlc2Ugd2lja2VkIG9uZXMgaGVyZSB3aWxsIGJlIHNjaGVtaW5nIHRvIGdldCB5b3UgcHV0IG91dCBvZiB0aGUgd2F5LCBhbmQgd2lsbCBzaGFyZSBhbGwgeW91ciBwb3NzZXNzaW9ucyBhbW9uZyB0aGVtc2VsdmVzOyBzdGF5IHdoZXJlIHlvdSBhcmUgYW1vbmcgeW91ciBvd24gcGVvcGxlLCBhbmQgZG8gbm90IGdvIHdhbmRlcmluZyBhbmQgd29ycnlpbmcgeW91ciBsaWZlIG91dCBvbiB0aGUgYmFycmVuIG9jZWFuLiINCg0KIkZlYXIgbm90LCBudXJzZSwiIGFuc3dlcmVkIFRlbGVtYWNodXMsICJteSBzY2hlbWUgaXMgbm90IHdpdGhvdXQgaGVhdmVuJ3Mgc2FuY3Rpb247IGJ1dCBzd2VhciB0aGF0IHlvdSB3aWxsIHNheSBub3RoaW5nIGFib3V0IGFsbCB0aGlzIHRvIG15IG1vdGhlciwgdGlsbCBJIGhhdmUgYmVlbiBhd2F5IHNvbWUgdGVuIG9yIHR3ZWx2ZSBkYXlzLCB1bmxlc3Mgc2hlIGhlYXJzIG9mIG15IGhhdmluZyBnb25lLCBhbmQgYXNrcyB5b3U7IGZvciBJIGRvIG5vdCB3YW50IGhlciB0byBzcG9pbCBoZXIgYmVhdXR5IGJ5IGNyeWluZy4iDQoNClRoZSBvbGQgd29tYW4gc3dvcmUgbW9zdCBzb2xlbW5seSB0aGF0IHNoZSB3b3VsZCBub3QsIGFuZCB3aGVuIHNoZSBoYWQgY29tcGxldGVkIGhlciBvYXRoLCBzaGUgYmVnYW4gZHJhd2luZyBvZmYgdGhlIHdpbmUgaW50byBqYXJzLCBhbmQgZ2V0dGluZyB0aGUgYmFybGV5IG1lYWwgaW50byB0aGUgYmFncywgd2hpbGUgVGVsZW1hY2h1cyB3ZW50IGJhY2sgdG8gdGhlIHN1aXRvcnMuDQoNClRoZW4gTWluZXJ2YSBiZXRob3VnaHQgaGVyIG9mIGFub3RoZXIgbWF0dGVyLiBTaGUgdG9vayBoaXMgc2hhcGUsIGFuZCB3ZW50IHJvdW5kIHRoZSB0b3duIHRvIGVhY2ggb25lIG9mIHRoZSBjcmV3LCB0ZWxsaW5nIHRoZW0gdG8gbWVldCBhdCB0aGUgc2hpcCBieSBzdW5kb3duLiBTaGUgd2VudCBhbHNvIHRvIE5vZW1vbiBzb24gb2YgUGhyb25pdXMsIGFuZCBhc2tlZCBoaW0gdG8gbGV0IGhlciBoYXZlIGEgc2hpcC0gd2hpY2ggaGUgd2FzIHZlcnkgcmVhZHkgdG8gZG8uIFdoZW4gdGhlIHN1biBoYWQgc2V0IGFuZCBkYXJrbmVzcyB3YXMgb3ZlciBhbGwgdGhlIGxhbmQsIHNoZSBnb3QgdGhlIHNoaXAgaW50byB0aGUgd2F0ZXIsIHB1dCBhbGwgdGhlIHRhY2tsZSBvbiBib2FyZCBoZXIgdGhhdCBzaGlwcyBnZW5lcmFsbHkgY2FycnksIGFuZCBzdGF0aW9uZWQgaGVyIGF0IHRoZSBlbmQgb2YgdGhlIGhhcmJvdXIuIFByZXNlbnRseSB0aGUgY3JldyBjYW1lIHVwLCBhbmQgdGhlIGdvZGRlc3Mgc3Bva2UgZW5jb3VyYWdpbmdseSB0byBlYWNoIG9mIHRoZW0uDQoNCkZ1cnRoZXJtb3JlIHNoZSB3ZW50IHRvIHRoZSBob3VzZSBvZiBVbHlzc2VzLCBhbmQgdGhyZXcgdGhlIHN1aXRvcnMgaW50byBhIGRlZXAgc2x1bWJlci4gU2hlIGNhdXNlZCB0aGVpciBkcmluayB0byBmdWRkbGUgdGhlbSwgYW5kIG1hZGUgdGhlbSBkcm9wIHRoZWlyIGN1cHMgZnJvbSB0aGVpciBoYW5kcywgc28gdGhhdCBpbnN0ZWFkIG9mIHNpdHRpbmcgb3ZlciB0aGVpciB3aW5lLCB0aGV5IHdlbnQgYmFjayBpbnRvIHRoZSB0b3duIHRvIHNsZWVwLCB3aXRoIHRoZWlyIGV5ZXMgaGVhdnkgYW5kIGZ1bGwgb2YgZHJvd3NpbmVzcy4gVGhlbiBzaGUgdG9vayB0aGUgZm9ybSBhbmQgdm9pY2Ugb2YgTWVudG9yLCBhbmQgY2FsbGVkIFRlbGVtYWNodXMgdG8gY29tZSBvdXRzaWRlLg0KDQoiVGVsZW1hY2h1cywiIHNhaWQgc2hlLCAidGhlIG1lbiBhcmUgb24gYm9hcmQgYW5kIGF0IHRoZWlyIG9hcnMsIHdhaXRpbmcgZm9yIHlvdSB0byBnaXZlIHlvdXIgb3JkZXJzLCBzbyBtYWtlIGhhc3RlIGFuZCBsZXQgdXMgYmUgb2ZmLiINCg0KT24gdGhpcyBzaGUgbGVkIHRoZSB3YXksIHdoaWxlIFRlbGVtYWNodXMgZm9sbG93ZWQgaW4gaGVyIHN0ZXBzLiBXaGVuIHRoZXkgZ290IHRvIHRoZSBzaGlwIHRoZXkgZm91bmQgdGhlIGNyZXcgd2FpdGluZyBieSB0aGUgd2F0ZXIgc2lkZSwgYW5kIFRlbGVtYWNodXMgc2FpZCwgIk5vdyBteSBtZW4sIGhlbHAgbWUgdG8gZ2V0IHRoZSBzdG9yZXMgb24gYm9hcmQ7IHRoZXkgYXJlIGFsbCBwdXQgdG9nZXRoZXIgaW4gdGhlIGNsb2lzdGVyLCBhbmQgbXkgbW90aGVyIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYWJvdXQgaXQsIG5vciBhbnkgb2YgdGhlIG1haWQgc2VydmFudHMgZXhjZXB0IG9uZS4iDQoNCldpdGggdGhlc2Ugd29yZHMgaGUgbGVkIHRoZSB3YXkgYW5kIHRoZSBvdGhlcnMgZm9sbG93ZWQgYWZ0ZXIuIFdoZW4gdGhleSBoYWQgYnJvdWdodCB0aGUgdGhpbmdzIGFzIGhlIHRvbGQgdGhlbSwgVGVsZW1hY2h1cyB3ZW50IG9uIGJvYXJkLCBNaW5lcnZhIGdvaW5nIGJlZm9yZSBoaW0gYW5kIHRha2luZyBoZXIgc2VhdCBpbiB0aGUgc3Rlcm4gb2YgdGhlIHZlc3NlbCwgd2hpbGUgVGVsZW1hY2h1cyBzYXQgYmVzaWRlIGhlci4gVGhlbiB0aGUgbWVuIGxvb3NlZCB0aGUgaGF3c2VycyBhbmQgdG9vayB0aGVpciBwbGFjZXMgb24gdGhlIGJlbmNoZXMuIE1pbmVydmEgc2VudCB0aGVtIGEgZmFpciB3aW5kIGZyb20gdGhlIFdlc3QsIHRoYXQgd2hpc3RsZWQgb3ZlciB0aGUgZGVlcCBibHVlIHdhdmVzIHdoZXJlb24gVGVsZW1hY2h1cyB0b2xkIHRoZW0gdG8gY2F0Y2ggaG9sZCBvZiB0aGUgcm9wZXMgYW5kIGhvaXN0IHNhaWwsIGFuZCB0aGV5IGRpZCBhcyBoZSB0b2xkIHRoZW0uIFRoZXkgc2V0IHRoZSBtYXN0IGluIGl0cyBzb2NrZXQgaW4gdGhlIGNyb3NzIHBsYW5rLCByYWlzZWQgaXQsIGFuZCBtYWRlIGl0IGZhc3Qgd2l0aCB0aGUgZm9yZXN0YXlzOyB0aGVuIHRoZXkgaG9pc3RlZCB0aGVpciB3aGl0ZSBzYWlscyBhbG9mdCB3aXRoIHJvcGVzIG9mIHR3aXN0ZWQgb3ggaGlkZS4gQXMgdGhlIHNhaWwgYmVsbGllZCBvdXQgd2l0aCB0aGUgd2luZCwgdGhlIHNoaXAgZmxldyB0aHJvdWdoIHRoZSBkZWVwIGJsdWUgd2F0ZXIsIGFuZCB0aGUgZm9hbSBoaXNzZWQgYWdhaW5zdCBoZXIgYm93cyBhcyBzaGUgc3BlZCBvbndhcmQuIFRoZW4gdGhleSBtYWRlIGFsbCBmYXN0IHRocm91Z2hvdXQgdGhlIHNoaXAsIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHRvIHRoZSBicmltLCBhbmQgbWFkZSBkcmluayBvZmZlcmluZ3MgdG8gdGhlIGltbW9ydGFsIGdvZHMgdGhhdCBhcmUgZnJvbSBldmVybGFzdGluZywgYnV0IG1vcmUgcGFydGljdWxhcmx5IHRvIHRoZSBncmV5LWV5ZWQgZGF1Z2h0ZXIgb2YgSm92ZS4NCg0KVGh1cywgdGhlbiwgdGhlIHNoaXAgc3BlZCBvbiBoZXIgd2F5IHRocm91Z2ggdGhlIHdhdGNoZXMgb2YgdGhlIG5pZ2h0IGZyb20gZGFyayB0aWxsIGRhd24uDQoNCkJvb2sgSUlJDQoNCkJ1dCBhcyB0aGUgc3VuIHdhcyByaXNpbmcgZnJvbSB0aGUgZmFpciBzZWEgaW50byB0aGUgZmlybWFtZW50IG9mIGhlYXZlbiB0byBzaGVkIGxpZ2h0IG9uIG1vcnRhbHMgYW5kIGltbW9ydGFscywgdGhleSByZWFjaGVkIFB5bG9zIHRoZSBjaXR5IG9mIE5lbGV1cy4gTm93IHRoZSBwZW9wbGUgb2YgUHlsb3Mgd2VyZSBnYXRoZXJlZCBvbiB0aGUgc2VhIHNob3JlIHRvIG9mZmVyIHNhY3JpZmljZSBvZiBibGFjayBidWxscyB0byBOZXB0dW5lIGxvcmQgb2YgdGhlIEVhcnRocXVha2UuIFRoZXJlIHdlcmUgbmluZSBndWlsZHMgd2l0aCBmaXZlIGh1bmRyZWQgbWVuIGluIGVhY2gsIGFuZCB0aGVyZSB3ZXJlIG5pbmUgYnVsbHMgdG8gZWFjaCBndWlsZC4gQXMgdGhleSB3ZXJlIGVhdGluZyB0aGUgaW53YXJkIG1lYXRzIGFuZCBidXJuaW5nIHRoZSB0aGlnaCBib25lcyBbb24gdGhlIGVtYmVyc10gaW4gdGhlIG5hbWUgb2YgTmVwdHVuZSwgVGVsZW1hY2h1cyBhbmQgaGlzIGNyZXcgYXJyaXZlZCwgZnVybGVkIHRoZWlyIHNhaWxzLCBicm91Z2h0IHRoZWlyIHNoaXAgdG8gYW5jaG9yLCBhbmQgd2VudCBhc2hvcmUuDQoNCk1pbmVydmEgbGVkIHRoZSB3YXkgYW5kIFRlbGVtYWNodXMgZm9sbG93ZWQgaGVyLiBQcmVzZW50bHkgc2hlIHNhaWQsICJUZWxlbWFjaHVzLCB5b3UgbXVzdCBub3QgYmUgaW4gdGhlIGxlYXN0IHNoeSBvciBuZXJ2b3VzOyB5b3UgaGF2ZSB0YWtlbiB0aGlzIHZveWFnZSB0byB0cnkgYW5kIGZpbmQgb3V0IHdoZXJlIHlvdXIgZmF0aGVyIGlzIGJ1cmllZCBhbmQgaG93IGhlIGNhbWUgYnkgaGlzIGVuZDsgc28gZ28gc3RyYWlnaHQgdXAgdG8gTmVzdG9yIHRoYXQgd2UgbWF5IHNlZSB3aGF0IGhlIGhhcyBnb3QgdG8gdGVsbCB1cy4gQmVnIG9mIGhpbSB0byBzcGVhayB0aGUgdHJ1dGgsIGFuZCBoZSB3aWxsIHRlbGwgbm8gbGllcywgZm9yIGhlIGlzIGFuIGV4Y2VsbGVudCBwZXJzb24uIg0KDQoiQnV0IGhvdywgTWVudG9yLCIgcmVwbGllZCBUZWxlbWFjaHVzLCAiZGFyZSBJIGdvIHVwIHRvIE5lc3RvciwgYW5kIGhvdyBhbSBJIHRvIGFkZHJlc3MgaGltPyBJIGhhdmUgbmV2ZXIgeWV0IGJlZW4gdXNlZCB0byBob2xkaW5nIGxvbmcgY29udmVyc2F0aW9ucyB3aXRoIHBlb3BsZSwgYW5kIGFtIGFzaGFtZWQgdG8gYmVnaW4gcXVlc3Rpb25pbmcgb25lIHdobyBpcyBzbyBtdWNoIG9sZGVyIHRoYW4gbXlzZWxmLiINCg0KIlNvbWUgdGhpbmdzLCBUZWxlbWFjaHVzLCIgYW5zd2VyZWQgTWluZXJ2YSwgIndpbGwgYmUgc3VnZ2VzdGVkIHRvIHlvdSBieSB5b3VyIG93biBpbnN0aW5jdCwgYW5kIGhlYXZlbiB3aWxsIHByb21wdCB5b3UgZnVydGhlcjsgZm9yIEkgYW0gYXNzdXJlZCB0aGF0IHRoZSBnb2RzIGhhdmUgYmVlbiB3aXRoIHlvdSBmcm9tIHRoZSB0aW1lIG9mIHlvdXIgYmlydGggdW50aWwgbm93LiINCg0KU2hlIHRoZW4gd2VudCBxdWlja2x5IG9uLCBhbmQgVGVsZW1hY2h1cyBmb2xsb3dlZCBpbiBoZXIgc3RlcHMgdGlsbCB0aGV5IHJlYWNoZWQgdGhlIHBsYWNlIHdoZXJlIHRoZSBndWlsZHMgb2YgdGhlIFB5bGlhbiBwZW9wbGUgd2VyZSBhc3NlbWJsZWQuIFRoZXJlIHRoZXkgZm91bmQgTmVzdG9yIHNpdHRpbmcgd2l0aCBoaXMgc29ucywgd2hpbGUgaGlzIGNvbXBhbnkgcm91bmQgaGltIHdlcmUgYnVzeSBnZXR0aW5nIGRpbm5lciByZWFkeSwgYW5kIHB1dHRpbmcgcGllY2VzIG9mIG1lYXQgb24gdG8gdGhlIHNwaXRzIHdoaWxlIG90aGVyIHBpZWNlcyB3ZXJlIGNvb2tpbmcuIFdoZW4gdGhleSBzYXcgdGhlIHN0cmFuZ2VycyB0aGV5IGNyb3dkZWQgcm91bmQgdGhlbSwgdG9vayB0aGVtIGJ5IHRoZSBoYW5kIGFuZCBiYWRlIHRoZW0gdGFrZSB0aGVpciBwbGFjZXMuIE5lc3RvcidzIHNvbiBQaXNpc3RyYXR1cyBhdCBvbmNlIG9mZmVyZWQgaGlzIGhhbmQgdG8gZWFjaCBvZiB0aGVtLCBhbmQgc2VhdGVkIHRoZW0gb24gc29tZSBzb2Z0IHNoZWVwc2tpbnMgdGhhdCB3ZXJlIGx5aW5nIG9uIHRoZSBzYW5kcyBuZWFyIGhpcyBmYXRoZXIgYW5kIGhpcyBicm90aGVyIFRocmFzeW1lZGVzLiBUaGVuIGhlIGdhdmUgdGhlbSB0aGVpciBwb3J0aW9ucyBvZiB0aGUgaW53YXJkIG1lYXRzIGFuZCBwb3VyZWQgd2luZSBmb3IgdGhlbSBpbnRvIGEgZ29sZGVuIGN1cCwgaGFuZGluZyBpdCB0byBNaW5lcnZhIGZpcnN0LCBhbmQgc2FsdXRpbmcgaGVyIGF0IHRoZSBzYW1lIHRpbWUuDQoNCiJPZmZlciBhIHByYXllciwgc2lyLCIgc2FpZCBoZSwgInRvIEtpbmcgTmVwdHVuZSwgZm9yIGl0IGlzIGhpcyBmZWFzdCB0aGF0IHlvdSBhcmUgam9pbmluZzsgd2hlbiB5b3UgaGF2ZSBkdWx5IHByYXllZCBhbmQgbWFkZSB5b3VyIGRyaW5rLW9mZmVyaW5nLCBwYXNzIHRoZSBjdXAgdG8geW91ciBmcmllbmQgdGhhdCBoZSBtYXkgZG8gc28gYWxzby4gSSBkb3VidCBub3QgdGhhdCBoZSB0b28gbGlmdHMgaGlzIGhhbmRzIGluIHByYXllciwgZm9yIG1hbiBjYW5ub3QgbGl2ZSB3aXRob3V0IEdvZCBpbiB0aGUgd29ybGQuIFN0aWxsIGhlIGlzIHlvdW5nZXIgdGhhbiB5b3UgYXJlLCBhbmQgaXMgbXVjaCBvZiBhbiBhZ2Ugd2l0aCBteXNlbGYsIHNvIEkgaGUgaGFuZGVkIEkgd2lsbCBnaXZlIHlvdSB0aGUgcHJlY2VkZW5jZS4iDQoNCkFzIGhlIHNwb2tlIGhlIGhhbmRlZCBoZXIgdGhlIGN1cC4gTWluZXJ2YSB0aG91Z2h0IGl0IHZlcnkgcmlnaHQgYW5kIHByb3BlciBvZiBoaW0gdG8gaGF2ZSBnaXZlbiBpdCB0byBoZXJzZWxmIGZpcnN0OyBzaGUgYWNjb3JkaW5nbHkgYmVnYW4gcHJheWluZyBoZWFydGlseSB0byBOZXB0dW5lLiAiTyB0aG91LCIgc2hlIGNyaWVkLCAidGhhdCBlbmNpcmNsZXN0IHRoZSBlYXJ0aCwgdm91Y2hzYWZlIHRvIGdyYW50IHRoZSBwcmF5ZXJzIG9mIHRoeSBzZXJ2YW50cyB0aGF0IGNhbGwgdXBvbiB0aGVlLiBNb3JlIGVzcGVjaWFsbHkgd2UgcHJheSB0aGVlIHNlbmQgZG93biB0aHkgZ3JhY2Ugb24gTmVzdG9yIGFuZCBvbiBoaXMgc29uczsgdGhlcmVhZnRlciBhbHNvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIFB5bGlhbiBwZW9wbGUgc29tZSBoYW5kc29tZSByZXR1cm4gZm9yIHRoZSBnb29kbHkgaGVjYXRvbWIgdGhleSBhcmUgb2ZmZXJpbmcgeW91LiBMYXN0bHksIGdyYW50IFRlbGVtYWNodXMgYW5kIG15c2VsZiBhIGhhcHB5IGlzc3VlLCBpbiByZXNwZWN0IG9mIHRoZSBtYXR0ZXIgdGhhdCBoYXMgYnJvdWdodCB1cyBpbiBvdXIgdG8gUHlsb3MuIg0KDQpXaGVuIHNoZSBoYWQgdGh1cyBtYWRlIGFuIGVuZCBvZiBwcmF5aW5nLCBzaGUgaGFuZGVkIHRoZSBjdXAgdG8gVGVsZW1hY2h1cyBhbmQgaGUgcHJheWVkIGxpa2V3aXNlLiBCeSBhbmQgYnksIHdoZW4gdGhlIG91dGVyIG1lYXRzIHdlcmUgcm9hc3RlZCBhbmQgaGFkIGJlZW4gdGFrZW4gb2ZmIHRoZSBzcGl0cywgdGhlIGNhcnZlcnMgZ2F2ZSBldmVyeSBtYW4gaGlzIHBvcnRpb24gYW5kIHRoZXkgYWxsIG1hZGUgYW4gZXhjZWxsZW50IGRpbm5lci4gQXMgc29vbiBhcyB0aGV5IGhhZCBoYWQgZW5vdWdoIHRvIGVhdCBhbmQgZHJpbmssIE5lc3Rvciwga25pZ2h0IG9mIEdlcmVuZSwgYmVnYW4gdG8gc3BlYWsuDQoNCiJOb3csIiBzYWlkIGhlLCAidGhhdCBvdXIgZ3Vlc3RzIGhhdmUgZG9uZSB0aGVpciBkaW5uZXIsIGl0IHdpbGwgYmUgYmVzdCB0byBhc2sgdGhlbSB3aG8gdGhleSBhcmUuIFdobywgdGhlbiwgc2lyIHN0cmFuZ2VycywgYXJlIHlvdSwgYW5kIGZyb20gd2hhdCBwb3J0IGhhdmUgeW91IHNhaWxlZD8gQXJlIHlvdSB0cmFkZXJzPyBvciBkbyB5b3Ugc2FpbCB0aGUgc2VhcyBhcyByb3ZlcnMgd2l0aCB5b3VyIGhhbmQgYWdhaW5zdCBldmVyeSBtYW4sIGFuZCBldmVyeSBtYW4ncyBoYW5kIGFnYWluc3QgeW91PyINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCBib2xkbHksIGZvciBNaW5lcnZhIGhhZCBnaXZlbiBoaW0gY291cmFnZSB0byBhc2sgYWJvdXQgaGlzIGZhdGhlciBhbmQgZ2V0IGhpbXNlbGYgYSBnb29kIG5hbWUuDQoNCiJOZXN0b3IsIiBzYWlkIGhlLCAic29uIG9mIE5lbGV1cywgaG9ub3VyIHRvIHRoZSBBY2hhZWFuIG5hbWUsIHlvdSBhc2sgd2hlbmNlIHdlIGNvbWUsIGFuZCBJIHdpbGwgdGVsbCB5b3UuIFdlIGNvbWUgZnJvbSBJdGhhY2EgdW5kZXIgTmVyaXR1bSwgYW5kIHRoZSBtYXR0ZXIgYWJvdXQgd2hpY2ggSSB3b3VsZCBzcGVhayBpcyBvZiBwcml2YXRlIG5vdCBwdWJsaWMgaW1wb3J0LiBJIHNlZWsgbmV3cyBvZiBteSB1bmhhcHB5IGZhdGhlciBVbHlzc2VzLCB3aG8gaXMgc2FpZCB0byBoYXZlIHNhY2tlZCB0aGUgdG93biBvZiBUcm95IGluIGNvbXBhbnkgd2l0aCB5b3Vyc2VsZi4gV2Uga25vdyB3aGF0IGZhdGUgYmVmZWxsIGVhY2ggb25lIG9mIHRoZSBvdGhlciBoZXJvZXMgd2hvIGZvdWdodCBhdCBUcm95LCBidXQgYXMgcmVnYXJkcyBVbHlzc2VzIGhlYXZlbiBoYXMgaGlkZGVuIGZyb20gdXMgdGhlIGtub3dsZWRnZSBldmVuIHRoYXQgaGUgaXMgZGVhZCBhdCBhbGwsIGZvciBubyBvbmUgY2FuIGNlcnRpZnkgdXMgaW4gd2hhdCBwbGFjZSBoZSBwZXJpc2hlZCwgbm9yIHNheSB3aGV0aGVyIGhlIGZlbGwgaW4gYmF0dGxlIG9uIHRoZSBtYWlubGFuZCwgb3Igd2FzIGxvc3QgYXQgc2VhIGFtaWQgdGhlIHdhdmVzIG9mIEFtcGhpdHJpdGUuIFRoZXJlZm9yZSBJIGFtIHN1cHBsaWFudCBhdCB5b3VyIGtuZWVzLCBpZiBoYXBseSB5b3UgbWF5IGJlIHBsZWFzZWQgdG8gdGVsbCBtZSBvZiBoaXMgbWVsYW5jaG9seSBlbmQsIHdoZXRoZXIgeW91IHNhdyBpdCB3aXRoIHlvdXIgb3duIGV5ZXMsIG9yIGhlYXJkIGl0IGZyb20gc29tZSBvdGhlciB0cmF2ZWxsZXIsIGZvciBoZSB3YXMgYSBtYW4gYm9ybiB0byB0cm91YmxlLiBEbyBub3Qgc29mdGVuIHRoaW5ncyBvdXQgb2YgYW55IHBpdHkgZm9yIG1lLCBidXQgdGVsbCBtZSBpbiBhbGwgcGxhaW5uZXNzIGV4YWN0bHkgd2hhdCB5b3Ugc2F3LiBJZiBteSBicmF2ZSBmYXRoZXIgVWx5c3NlcyBldmVyIGRpZCB5b3UgbG95YWwgc2VydmljZSwgZWl0aGVyIGJ5IHdvcmQgb3IgZGVlZCwgd2hlbiB5b3UgQWNoYWVhbnMgd2VyZSBoYXJhc3NlZCBhbW9uZyB0aGUgVHJvamFucywgYmVhciBpdCBpbiBtaW5kIG5vdyBhcyBpbiBteSBmYXZvdXIgYW5kIHRlbGwgbWUgdHJ1bHkgYWxsLiINCg0KIk15IGZyaWVuZCwiIGFuc3dlcmVkIE5lc3RvciwgInlvdSByZWNhbGwgYSB0aW1lIG9mIG11Y2ggc29ycm93IHRvIG15IG1pbmQsIGZvciB0aGUgYnJhdmUgQWNoYWVhbnMgc3VmZmVyZWQgbXVjaCBib3RoIGF0IHNlYSwgd2hpbGUgcHJpdmF0ZWVyaW5nIHVuZGVyIEFjaGlsbGVzLCBhbmQgd2hlbiBmaWdodGluZyBiZWZvcmUgdGhlIGdyZWF0IGNpdHkgb2Yga2luZyBQcmlhbS4gT3VyIGJlc3QgbWVuIGFsbCBvZiB0aGVtIGZlbGwgdGhlcmUtIEFqYXgsIEFjaGlsbGVzLCBQYXRyb2NsdXMgcGVlciBvZiBnb2RzIGluIGNvdW5zZWwsIGFuZCBteSBvd24gZGVhciBzb24gQW50aWxvY2h1cywgYSBtYW4gc2luZ3VsYXJseSBmbGVldCBvZiBmb290IGFuZCBpbiBmaWdodCB2YWxpYW50LiBCdXQgd2Ugc3VmZmVyZWQgbXVjaCBtb3JlIHRoYW4gdGhpczsgd2hhdCBtb3J0YWwgdG9uZ3VlIGluZGVlZCBjb3VsZCB0ZWxsIHRoZSB3aG9sZSBzdG9yeT8gVGhvdWdoIHlvdSB3ZXJlIHRvIHN0YXkgaGVyZSBhbmQgcXVlc3Rpb24gbWUgZm9yIGZpdmUgeWVhcnMsIG9yIGV2ZW4gc2l4LCBJIGNvdWxkIG5vdCB0ZWxsIHlvdSBhbGwgdGhhdCB0aGUgQWNoYWVhbnMgc3VmZmVyZWQsIGFuZCB5b3Ugd291bGQgdHVybiBob21ld2FyZCB3ZWFyeSBvZiBteSB0YWxlIGJlZm9yZSBpdCBlbmRlZC4gTmluZSBsb25nIHllYXJzIGRpZCB3ZSB0cnkgZXZlcnkga2luZCBvZiBzdHJhdGFnZW0sIGJ1dCB0aGUgaGFuZCBvZiBoZWF2ZW4gd2FzIGFnYWluc3QgdXM7IGR1cmluZyBhbGwgdGhpcyB0aW1lIHRoZXJlIHdhcyBubyBvbmUgd2hvIGNvdWxkIGNvbXBhcmUgd2l0aCB5b3VyIGZhdGhlciBpbiBzdWJ0bGV0eS0gaWYgaW5kZWVkIHlvdSBhcmUgaGlzIHNvbi0gSSBjYW4gaGFyZGx5IGJlbGlldmUgbXkgZXllcy0gYW5kIHlvdSB0YWxrIGp1c3QgbGlrZSBoaW0gdG9vLSBubyBvbmUgd291bGQgc2F5IHRoYXQgcGVvcGxlIG9mIHN1Y2ggZGlmZmVyZW50IGFnZXMgY291bGQgc3BlYWsgc28gbXVjaCBhbGlrZS4gSGUgYW5kIEkgbmV2ZXIgaGFkIGFueSBraW5kIG9mIGRpZmZlcmVuY2UgZnJvbSBmaXJzdCB0byBsYXN0IG5laXRoZXIgaW4gY2FtcCBub3IgY291bmNpbCwgYnV0IGluIHNpbmdsZW5lc3Mgb2YgaGVhcnQgYW5kIHB1cnBvc2Ugd2UgYWR2aXNlZCB0aGUgQXJnaXZlcyBob3cgYWxsIG1pZ2h0IGJlIG9yZGVyZWQgZm9yIHRoZSBiZXN0Lg0KDQoiV2hlbiBob3dldmVyLCB3ZSBoYWQgc2Fja2VkIHRoZSBjaXR5IG9mIFByaWFtLCBhbmQgd2VyZSBzZXR0aW5nIHNhaWwgaW4gb3VyIHNoaXBzIGFzIGhlYXZlbiBoYWQgZGlzcGVyc2VkIHVzLCB0aGVuIEpvdmUgc2F3IGZpdCB0byB2ZXggdGhlIEFyZ2l2ZXMgb24gdGhlaXIgaG9tZXdhcmQgdm95YWdlOyBmb3IgdGhleSBoYWQgTm90IGFsbCBiZWVuIGVpdGhlciB3aXNlIG9yIHVuZGVyc3RhbmRpbmcsIGFuZCBoZW5jZSBtYW55IGNhbWUgdG8gYSBiYWQgZW5kIHRocm91Z2ggdGhlIGRpc3BsZWFzdXJlIG9mIEpvdmUncyBkYXVnaHRlciBNaW5lcnZhLCB3aG8gYnJvdWdodCBhYm91dCBhIHF1YXJyZWwgYmV0d2VlbiB0aGUgdHdvIHNvbnMgb2YgQXRyZXVzLg0KDQoiVGhlIHNvbnMgb2YgQXRyZXVzIGNhbGxlZCBhIG1lZXRpbmcgd2hpY2ggd2FzIG5vdCBhcyBpdCBzaG91bGQgYmUsIGZvciBpdCB3YXMgc3Vuc2V0IGFuZCB0aGUgQWNoYWVhbnMgd2VyZSBoZWF2eSB3aXRoIHdpbmUuIFdoZW4gdGhleSBleHBsYWluZWQgd2h5IHRoZXkgaGFkIGNhbGxlZC0gdGhlIHBlb3BsZSB0b2dldGhlciwgaXQgc2VlbWVkIHRoYXQgTWVuZWxhdXMgd2FzIGZvciBzYWlsaW5nIGhvbWV3YXJkIGF0IG9uY2UsIGFuZCB0aGlzIGRpc3BsZWFzZWQgQWdhbWVtbm9uLCB3aG8gdGhvdWdodCB0aGF0IHdlIHNob3VsZCB3YWl0IHRpbGwgd2UgaGFkIG9mZmVyZWQgaGVjYXRvbWJzIHRvIGFwcGVhc2UgdGhlIGFuZ2VyIG9mIE1pbmVydmEuIEZvb2wgdGhhdCBoZSB3YXMsIGhlIG1pZ2h0IGhhdmUga25vd24gdGhhdCBoZSB3b3VsZCBub3QgcHJldmFpbCB3aXRoIGhlciwgZm9yIHdoZW4gdGhlIGdvZHMgaGF2ZSBtYWRlIHVwIHRoZWlyIG1pbmRzIHRoZXkgZG8gbm90IGNoYW5nZSB0aGVtIGxpZ2h0bHkuIFNvIHRoZSB0d28gc3Rvb2QgYmFuZHlpbmcgaGFyZCB3b3Jkcywgd2hlcmVvbiB0aGUgQWNoYWVhbnMgc3ByYW5nIHRvIHRoZWlyIGZlZXQgd2l0aCBhIGNyeSB0aGF0IHJlbnQgdGhlIGFpciwgYW5kIHdlcmUgb2YgdHdvIG1pbmRzIGFzIHRvIHdoYXQgdGhleSBzaG91bGQgZG8uDQoNCiJUaGF0IG5pZ2h0IHdlIHJlc3RlZCBhbmQgbnVyc2VkIG91ciBhbmdlciwgZm9yIEpvdmUgd2FzIGhhdGNoaW5nIG1pc2NoaWVmIGFnYWluc3QgdXMuIEJ1dCBpbiB0aGUgbW9ybmluZyBzb21lIG9mIHVzIGRyZXcgb3VyIHNoaXBzIGludG8gdGhlIHdhdGVyIGFuZCBwdXQgb3VyIGdvb2RzIHdpdGggb3VyIHdvbWVuIG9uIGJvYXJkLCB3aGlsZSB0aGUgcmVzdCwgYWJvdXQgaGFsZiBpbiBudW1iZXIsIHN0YXllZCBiZWhpbmQgd2l0aCBBZ2FtZW1ub24uIFdlLSB0aGUgb3RoZXIgaGFsZi0gZW1iYXJrZWQgYW5kIHNhaWxlZDsgYW5kIHRoZSBzaGlwcyB3ZW50IHdlbGwsIGZvciBoZWF2ZW4gaGFkIHNtb290aGVkIHRoZSBzZWEuIFdoZW4gd2UgcmVhY2hlZCBUZW5lZG9zIHdlIG9mZmVyZWQgc2FjcmlmaWNlcyB0byB0aGUgZ29kcywgZm9yIHdlIHdlcmUgbG9uZ2luZyB0byBnZXQgaG9tZTsgY3J1ZWwgSm92ZSwgaG93ZXZlciwgZGlkIG5vdCB5ZXQgbWVhbiB0aGF0IHdlIHNob3VsZCBkbyBzbywgYW5kIHJhaXNlZCBhIHNlY29uZCBxdWFycmVsIGluIHRoZSBjb3Vyc2Ugb2Ygd2hpY2ggc29tZSBhbW9uZyB1cyB0dXJuZWQgdGhlaXIgc2hpcHMgYmFjayBhZ2FpbiwgYW5kIHNhaWxlZCBhd2F5IHVuZGVyIFVseXNzZXMgdG8gbWFrZSB0aGVpciBwZWFjZSB3aXRoIEFnYW1lbW5vbjsgYnV0IEksIGFuZCBhbGwgdGhlIHNoaXBzIHRoYXQgd2VyZSB3aXRoIG1lIHByZXNzZWQgZm9yd2FyZCwgZm9yIEkgc2F3IHRoYXQgbWlzY2hpZWYgd2FzIGJyZXdpbmcuIFRoZSBzb24gb2YgVHlkZXVzIHdlbnQgb24gYWxzbyB3aXRoIG1lLCBhbmQgaGlzIGNyZXdzIHdpdGggaGltLiBMYXRlciBvbiBNZW5lbGF1cyBqb2luZWQgdXMgYXQgTGVzYm9zLCBhbmQgZm91bmQgdXMgbWFraW5nIHVwIG91ciBtaW5kcyBhYm91dCBvdXIgY291cnNlLSBmb3Igd2UgZGlkIG5vdCBrbm93IHdoZXRoZXIgdG8gZ28gb3V0c2lkZSBDaGlvcyBieSB0aGUgaXNsYW5kIG9mIFBzeXJhLCBrZWVwaW5nIHRoaXMgdG8gb3VyIGxlZnQsIG9yIGluc2lkZSBDaGlvcywgb3ZlciBhZ2FpbnN0IHRoZSBzdG9ybXkgaGVhZGxhbmQgb2YgTWltYXMuIFNvIHdlIGFza2VkIGhlYXZlbiBmb3IgYSBzaWduLCBhbmQgd2VyZSBzaG93biBvbmUgdG8gdGhlIGVmZmVjdCB0aGF0IHdlIHNob3VsZCBiZSBzb29uZXN0IG91dCBvZiBkYW5nZXIgaWYgd2UgaGVhZGVkIG91ciBzaGlwcyBhY3Jvc3MgdGhlIG9wZW4gc2VhIHRvIEV1Ym9lYS4gVGhpcyB3ZSB0aGVyZWZvcmUgZGlkLCBhbmQgYSBmYWlyIHdpbmQgc3ByYW5nIHVwIHdoaWNoIGdhdmUgdXMgYSBxdWljayBwYXNzYWdlIGR1cmluZyB0aGUgbmlnaHQgdG8gR2VyYWVzdHVzLCB3aGVyZSB3ZSBvZmZlcmVkIG1hbnkgc2FjcmlmaWNlcyB0byBOZXB0dW5lIGZvciBoYXZpbmcgaGVscGVkIHVzIHNvIGZhciBvbiBvdXIgd2F5LiBGb3VyIGRheXMgbGF0ZXIgRGlvbWVkIGFuZCBoaXMgbWVuIHN0YXRpb25lZCB0aGVpciBzaGlwcyBpbiBBcmdvcywgYnV0IEkgaGVsZCBvbiBmb3IgUHlsb3MsIGFuZCB0aGUgd2luZCBuZXZlciBmZWxsIGxpZ2h0IGZyb20gdGhlIGRheSB3aGVuIGhlYXZlbiBmaXJzdCBtYWRlIGl0IGZhaXIgZm9yIG1lLg0KDQoiVGhlcmVmb3JlLCBteSBkZWFyIHlvdW5nIGZyaWVuZCwgSSByZXR1cm5lZCB3aXRob3V0IGhlYXJpbmcgYW55dGhpbmcgYWJvdXQgdGhlIG90aGVycy4gSSBrbm93IG5laXRoZXIgd2hvIGdvdCBob21lIHNhZmVseSBub3Igd2hvIHdlcmUgbG9zdCBidXQsIGFzIGluIGR1dHkgYm91bmQsIEkgd2lsbCBnaXZlIHlvdSB3aXRob3V0IHJlc2VydmUgdGhlIHJlcG9ydHMgdGhhdCBoYXZlIHJlYWNoZWQgbWUgc2luY2UgSSBoYXZlIGJlZW4gaGVyZSBpbiBteSBvd24gaG91c2UuIFRoZXkgc2F5IHRoZSBNeXJtaWRvbnMgcmV0dXJuZWQgaG9tZSBzYWZlbHkgdW5kZXIgQWNoaWxsZXMnIHNvbiBOZW9wdG9sZW11czsgc28gYWxzbyBkaWQgdGhlIHZhbGlhbnQgc29uIG9mIFBvaWFzLCBQaGlsb2N0ZXRlcy4gSWRvbWVuZXVzLCBhZ2FpbiwgbG9zdCBubyBtZW4gYXQgc2VhLCBhbmQgYWxsIGhpcyBmb2xsb3dlcnMgd2hvIGVzY2FwZWQgZGVhdGggaW4gdGhlIGZpZWxkIGdvdCBzYWZlIGhvbWUgd2l0aCBoaW0gdG8gQ3JldGUuIE5vIG1hdHRlciBob3cgZmFyIG91dCBvZiB0aGUgd29ybGQgeW91IGxpdmUsIHlvdSB3aWxsIGhhdmUgaGVhcmQgb2YgQWdhbWVtbm9uIGFuZCB0aGUgYmFkIGVuZCBoZSBjYW1lIHRvIGF0IHRoZSBoYW5kcyBvZiBBZWdpc3RodXMtIGFuZCBhIGZlYXJmdWwgcmVja29uaW5nIGRpZCBBZWdpc3RodXMgcHJlc2VudGx5IHBheS4gU2VlIHdoYXQgYSBnb29kIHRoaW5nIGl0IGlzIGZvciBhIG1hbiB0byBsZWF2ZSBhIHNvbiBiZWhpbmQgaGltIHRvIGRvIGFzIE9yZXN0ZXMgZGlkLCB3aG8ga2lsbGVkIGZhbHNlIEFlZ2lzdGh1cyB0aGUgbXVyZGVyZXIgb2YgaGlzIG5vYmxlIGZhdGhlci4gWW91IHRvbywgdGhlbi0gZm9yIHlvdSBhcmUgYSB0YWxsLCBzbWFydC1sb29raW5nIGZlbGxvdy0gc2hvdyB5b3VyIG1ldHRsZSBhbmQgbWFrZSB5b3Vyc2VsZiBhIG5hbWUgaW4gc3RvcnkuIg0KDQoiTmVzdG9yIHNvbiBvZiBOZWxldXMsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiaG9ub3VyIHRvIHRoZSBBY2hhZWFuIG5hbWUsIHRoZSBBY2hhZWFucyBhcHBsYXVkIE9yZXN0ZXMgYW5kIGhpcyBuYW1lIHdpbGwgbGl2ZSB0aHJvdWdoIGFsbCB0aW1lIGZvciBoZSBoYXMgYXZlbmdlZCBoaXMgZmF0aGVyIG5vYmx5LiBXb3VsZCB0aGF0IGhlYXZlbiBtaWdodCBncmFudCBtZSB0byBkbyBsaWtlIHZlbmdlYW5jZSBvbiB0aGUgaW5zb2xlbmNlIG9mIHRoZSB3aWNrZWQgc3VpdG9ycywgd2hvIGFyZSBpbGwgdHJlYXRpbmcgbWUgYW5kIHBsb3R0aW5nIG15IHJ1aW47IGJ1dCB0aGUgZ29kcyBoYXZlIG5vIHN1Y2ggaGFwcGluZXNzIGluIHN0b3JlIGZvciBtZSBhbmQgZm9yIG15IGZhdGhlciwgc28gd2UgbXVzdCBiZWFyIGl0IGFzIGJlc3Qgd2UgbWF5LiINCg0KIk15IGZyaWVuZCwiIHNhaWQgTmVzdG9yLCAibm93IHRoYXQgeW91IHJlbWluZCBtZSwgSSByZW1lbWJlciB0byBoYXZlIGhlYXJkIHRoYXQgeW91ciBtb3RoZXIgaGFzIG1hbnkgc3VpdG9ycywgd2hvIGFyZSBpbGwgZGlzcG9zZWQgdG93YXJkcyB5b3UgYW5kIGFyZSBtYWtpbmcgaGF2b2Mgb2YgeW91ciBlc3RhdGUuIERvIHlvdSBzdWJtaXQgdG8gdGhpcyB0YW1lbHksIG9yIGFyZSBwdWJsaWMgZmVlbGluZyBhbmQgdGhlIHZvaWNlIG9mIGhlYXZlbiBhZ2FpbnN0IHlvdT8gV2hvIGtub3dzIGJ1dCB3aGF0IFVseXNzZXMgbWF5IGNvbWUgYmFjayBhZnRlciBhbGwsIGFuZCBwYXkgdGhlc2Ugc2NvdW5kcmVscyBpbiBmdWxsLCBlaXRoZXIgc2luZ2xlLWhhbmRlZCBvciB3aXRoIGEgZm9yY2Ugb2YgQWNoYWVhbnMgYmVoaW5kIGhpbT8gSWYgTWluZXJ2YSB3ZXJlIHRvIHRha2UgYXMgZ3JlYXQgYSBsaWtpbmcgdG8geW91IGFzIHNoZSBkaWQgdG8gVWx5c3NlcyB3aGVuIHdlIHdlcmUgZmlnaHRpbmcgYmVmb3JlIFRyb3kgKGZvciBJIG5ldmVyIHlldCBzYXcgdGhlIGdvZHMgc28gb3Blbmx5IGZvbmQgb2YgYW55IG9uZSBhcyBNaW5lcnZhIHRoZW4gd2FzIG9mIHlvdXIgZmF0aGVyKSwgaWYgc2hlIHdvdWxkIHRha2UgYXMgZ29vZCBjYXJlIG9mIHlvdSBhcyBzaGUgZGlkIG9mIGhpbSwgdGhlc2Ugd29vZXJzIHdvdWxkIHNvb24gc29tZSBvZiB0aGVtIGhpbSwgZm9yZ2V0IHRoZWlyIHdvb2luZy4iDQoNClRlbGVtYWNodXMgYW5zd2VyZWQsICJJIGNhbiBleHBlY3Qgbm90aGluZyBvZiB0aGUga2luZDsgaXQgd291bGQgYmUgZmFyIHRvbyBtdWNoIHRvIGhvcGUgZm9yLiBJIGRhcmUgbm90IGxldCBteXNlbGYgdGhpbmsgb2YgaXQuIEV2ZW4gdGhvdWdoIHRoZSBnb2RzIHRoZW1zZWx2ZXMgd2lsbGVkIGl0IG5vIHN1Y2ggZ29vZCBmb3J0dW5lIGNvdWxkIGJlZmFsbCBtZS4iDQoNCk9uIHRoaXMgTWluZXJ2YSBzYWlkLCAiVGVsZW1hY2h1cywgd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IEhlYXZlbiBoYXMgYSBsb25nIGFybSBpZiBpdCBpcyBtaW5kZWQgdG8gc2F2ZSBhIG1hbjsgYW5kIGlmIGl0IHdlcmUgbWUsIEkgc2hvdWxkIG5vdCBjYXJlIGhvdyBtdWNoIEkgc3VmZmVyZWQgYmVmb3JlIGdldHRpbmcgaG9tZSwgcHJvdmlkZWQgSSBjb3VsZCBiZSBzYWZlIHdoZW4gSSB3YXMgb25jZSB0aGVyZS4gSSB3b3VsZCByYXRoZXIgdGhpcywgdGhhbiBnZXQgaG9tZSBxdWlja2x5LCBhbmQgdGhlbiBiZSBraWxsZWQgaW4gbXkgb3duIGhvdXNlIGFzIEFnYW1lbW5vbiB3YXMgYnkgdGhlIHRyZWFjaGVyeSBvZiBBZWdpc3RodXMgYW5kIGhpcyB3aWZlLiBTdGlsbCwgZGVhdGggaXMgY2VydGFpbiwgYW5kIHdoZW4gYSBtYW4ncyBob3VyIGlzIGNvbWUsIG5vdCBldmVuIHRoZSBnb2RzIGNhbiBzYXZlIGhpbSwgbm8gbWF0dGVyIGhvdyBmb25kIHRoZXkgYXJlIG9mIGhpbS4iDQoNCiJNZW50b3IsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiZG8gbm90IGxldCB1cyB0YWxrIGFib3V0IGl0IGFueSBtb3JlLiBUaGVyZSBpcyBubyBjaGFuY2Ugb2YgbXkgZmF0aGVyJ3MgZXZlciBjb21pbmcgYmFjazsgdGhlIGdvZHMgaGF2ZSBsb25nIHNpbmNlIGNvdW5zZWxsZWQgaGlzIGRlc3RydWN0aW9uLiBUaGVyZSBpcyBzb21ldGhpbmcgZWxzZSwgaG93ZXZlciwgYWJvdXQgd2hpY2ggSSBzaG91bGQgbGlrZSB0byBhc2sgTmVzdG9yLCBmb3IgaGUga25vd3MgbXVjaCBtb3JlIHRoYW4gYW55IG9uZSBlbHNlIGRvZXMuIFRoZXkgc2F5IGhlIGhhcyByZWlnbmVkIGZvciB0aHJlZSBnZW5lcmF0aW9ucyBzbyB0aGF0IGl0IGlzIGxpa2UgdGFsa2luZyB0byBhbiBpbW1vcnRhbC4gVGVsbCBtZSwgdGhlcmVmb3JlLCBOZXN0b3IsIGFuZCB0ZWxsIG1lIHRydWU7IGhvdyBkaWQgQWdhbWVtbm9uIGNvbWUgdG8gZGllIGluIHRoYXQgd2F5PyBXaGF0IHdhcyBNZW5lbGF1cyBkb2luZz8gQW5kIGhvdyBjYW1lIGZhbHNlIEFlZ2lzdGh1cyB0byBraWxsIHNvIGZhciBiZXR0ZXIgYSBtYW4gdGhhbiBoaW1zZWxmPyBXYXMgTWVuZWxhdXMgYXdheSBmcm9tIEFjaGFlYW4gQXJnb3MsIHZveWFnaW5nIGVsc2V3aGl0aGVyIGFtb25nIG1hbmtpbmQsIHRoYXQgQWVnaXN0aHVzIHRvb2sgaGVhcnQgYW5kIGtpbGxlZCBBZ2FtZW1ub24/Ig0KDQoiSSB3aWxsIHRlbGwgeW91IHRydWx5LCIgYW5zd2VyZWQgTmVzdG9yLCAiYW5kIGluZGVlZCB5b3UgaGF2ZSB5b3Vyc2VsZiBkaXZpbmVkIGhvdyBpdCBhbGwgaGFwcGVuZWQuIElmIE1lbmVsYXVzIHdoZW4gaGUgZ290IGJhY2sgZnJvbSBUcm95IGhhZCBmb3VuZCBBZWdpc3RodXMgc3RpbGwgYWxpdmUgaW4gaGlzIGhvdXNlLCB0aGVyZSB3b3VsZCBoYXZlIGJlZW4gbm8gYmFycm93IGhlYXBlZCB1cCBmb3IgaGltLCBub3QgZXZlbiB3aGVuIGhlIHdhcyBkZWFkLCBidXQgaGUgd291bGQgaGF2ZSBiZWVuIHRocm93biBvdXRzaWRlIHRoZSBjaXR5IHRvIGRvZ3MgYW5kIHZ1bHR1cmVzLCBhbmQgbm90IGEgd29tYW4gd291bGQgaGF2ZSBtb3VybmVkIGhpbSwgZm9yIGhlIGhhZCBkb25lIGEgZGVlZCBvZiBncmVhdCB3aWNrZWRuZXNzOyBidXQgd2Ugd2VyZSBvdmVyIHRoZXJlLCBmaWdodGluZyBoYXJkIGF0IFRyb3ksIGFuZCBBZWdpc3RodXMgd2hvIHdhcyB0YWtpbmcgaGlzIGVhc2UgcXVpZXRseSBpbiB0aGUgaGVhcnQgb2YgQXJnb3MsIGNham9sZWQgQWdhbWVtbm9uJ3Mgd2lmZSBDbHl0ZW1uZXN0cmEgd2l0aCBpbmNlc3NhbnQgZmxhdHRlcnkuDQoNCiJBdCBmaXJzdCBzaGUgd291bGQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggaGlzIHdpY2tlZCBzY2hlbWUsIGZvciBzaGUgd2FzIG9mIGEgZ29vZCBuYXR1cmFsIGRpc3Bvc2l0aW9uOyBtb3Jlb3ZlciB0aGVyZSB3YXMgYSBiYXJkIHdpdGggaGVyLCB0byB3aG9tIEFnYW1lbW5vbiBoYWQgZ2l2ZW4gc3RyaWN0IG9yZGVycyBvbiBzZXR0aW5nIG91dCBmb3IgVHJveSwgdGhhdCBoZSB3YXMgdG8ga2VlcCBndWFyZCBvdmVyIGhpcyB3aWZlOyBidXQgd2hlbiBoZWF2ZW4gaGFkIGNvdW5zZWxsZWQgaGVyIGRlc3RydWN0aW9uLCBBZWdpc3RodXMgdGh1cyB0aGlzIGJhcmQgb2ZmIHRvIGEgZGVzZXJ0IGlzbGFuZCBhbmQgbGVmdCBoaW0gdGhlcmUgZm9yIGNyb3dzIGFuZCBzZWFndWxscyB0byBiYXR0ZW4gdXBvbi0gYWZ0ZXIgd2hpY2ggc2hlIHdlbnQgd2lsbGluZ2x5IGVub3VnaCB0byB0aGUgaG91c2Ugb2YgQWVnaXN0aHVzLiBUaGVuIGhlIG9mZmVyZWQgbWFueSBidXJudCBzYWNyaWZpY2VzIHRvIHRoZSBnb2RzLCBhbmQgZGVjb3JhdGVkIG1hbnkgdGVtcGxlcyB3aXRoIHRhcGVzdHJpZXMgYW5kIGdpbGRpbmcsIGZvciBoZSBoYWQgc3VjY2VlZGVkIGZhciBiZXlvbmQgaGlzIGV4cGVjdGF0aW9ucy4NCg0KIk1lYW53aGlsZSBNZW5lbGF1cyBhbmQgSSB3ZXJlIG9uIG91ciB3YXkgaG9tZSBmcm9tIFRyb3ksIG9uIGdvb2QgdGVybXMgd2l0aCBvbmUgYW5vdGhlci4gV2hlbiB3ZSBnb3QgdG8gU3VuaXVtLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgQXRoZW5zLCBBcG9sbG8gd2l0aCBoaXMgcGFpbmxlc3Mgc2hhZnRzIGtpbGxlZCBQaHJvbnRpcyB0aGUgc3RlZXJzbWFuIG9mIE1lbmVsYXVzJyBzaGlwIChhbmQgbmV2ZXIgbWFuIGtuZXcgYmV0dGVyIGhvdyB0byBoYW5kbGUgYSB2ZXNzZWwgaW4gcm91Z2ggd2VhdGhlcikgc28gdGhhdCBoZSBkaWVkIHRoZW4gYW5kIHRoZXJlIHdpdGggdGhlIGhlbG0gaW4gaGlzIGhhbmQsIGFuZCBNZW5lbGF1cywgdGhvdWdoIHZlcnkgYW54aW91cyB0byBwcmVzcyBmb3J3YXJkLCBoYWQgdG8gd2FpdCBpbiBvcmRlciB0byBidXJ5IGhpcyBjb21yYWRlIGFuZCBnaXZlIGhpbSBoaXMgZHVlIGZ1bmVyYWwgcml0ZXMuIFByZXNlbnRseSwgd2hlbiBoZSB0b28gY291bGQgcHV0IHRvIHNlYSBhZ2FpbiwgYW5kIGhhZCBzYWlsZWQgb24gYXMgZmFyIGFzIHRoZSBNYWxlYW4gaGVhZHMsIEpvdmUgY291bnNlbGxlZCBldmlsIGFnYWluc3QgaGltIGFuZCBtYWRlIGl0IGl0IGJsb3cgaGFyZCB0aWxsIHRoZSB3YXZlcyByYW4gbW91bnRhaW5zIGhpZ2guIEhlcmUgaGUgZGl2aWRlZCBoaXMgZmxlZXQgYW5kIHRvb2sgdGhlIG9uZSBoYWxmIHRvd2FyZHMgQ3JldGUgd2hlcmUgdGhlIEN5ZG9uaWFucyBkd2VsbCByb3VuZCBhYm91dCB0aGUgd2F0ZXJzIG9mIHRoZSByaXZlciBJYXJkYW51cy4gVGhlcmUgaXMgYSBoaWdoIGhlYWRsYW5kIGhlcmVhYm91dHMgc3RyZXRjaGluZyBvdXQgaW50byB0aGUgc2VhIGZyb20gYSBwbGFjZSBjYWxsZWQgR29ydHluLCBhbmQgYWxsIGFsb25nIHRoaXMgcGFydCBvZiB0aGUgY29hc3QgYXMgZmFyIGFzIFBoYWVzdHVzIHRoZSBzZWEgcnVucyBoaWdoIHdoZW4gdGhlcmUgaXMgYSBzb3V0aCB3aW5kIGJsb3dpbmcsIGJ1dCBhcnRlciBQaGFlc3R1cyB0aGUgY29hc3QgaXMgbW9yZSBwcm90ZWN0ZWQsIGZvciBhIHNtYWxsIGhlYWRsYW5kIGNhbiBtYWtlIGEgZ3JlYXQgc2hlbHRlci4gSGVyZSB0aGlzIHBhcnQgb2YgdGhlIGZsZWV0IHdhcyBkcml2ZW4gb24gdG8gdGhlIHJvY2tzIGFuZCB3cmVja2VkOyBidXQgdGhlIGNyZXdzIGp1c3QgbWFuYWdlZCB0byBzYXZlIHRoZW1zZWx2ZXMuIEFzIGZvciB0aGUgb3RoZXIgZml2ZSBzaGlwcywgdGhleSB3ZXJlIHRha2VuIGJ5IHdpbmRzIGFuZCBzZWFzIHRvIEVneXB0LCB3aGVyZSBNZW5lbGF1cyBnYXRoZXJlZCBtdWNoIGdvbGQgYW5kIHN1YnN0YW5jZSBhbW9uZyBwZW9wbGUgb2YgYW4gYWxpZW4gc3BlZWNoLiBNZWFud2hpbGUgQWVnaXN0aHVzIGhlcmUgYXQgaG9tZSBwbG90dGVkIGhpcyBldmlsIGRlZWQuIEZvciBzZXZlbiB5ZWFycyBhZnRlciBoZSBoYWQga2lsbGVkIEFnYW1lbW5vbiBoZSBydWxlZCBpbiBNeWNlbmUsIGFuZCB0aGUgcGVvcGxlIHdlcmUgb2JlZGllbnQgdW5kZXIgaGltLCBidXQgaW4gdGhlIGVpZ2h0aCB5ZWFyIE9yZXN0ZXMgY2FtZSBiYWNrIGZyb20gQXRoZW5zIHRvIGJlIGhpcyBiYW5lLCBhbmQga2lsbGVkIHRoZSBtdXJkZXJlciBvZiBoaXMgZmF0aGVyLiBUaGVuIGhlIGNlbGVicmF0ZWQgdGhlIGZ1bmVyYWwgcml0ZXMgb2YgaGlzIG1vdGhlciBhbmQgb2YgZmFsc2UgQWVnaXN0aHVzIGJ5IGEgYmFucXVldCB0byB0aGUgcGVvcGxlIG9mIEFyZ29zLCBhbmQgb24gdGhhdCB2ZXJ5IGRheSBNZW5lbGF1cyBjYW1lIGhvbWUsIHdpdGggYXMgbXVjaCB0cmVhc3VyZSBhcyBoaXMgc2hpcHMgY291bGQgY2FycnkuDQoNCiJUYWtlIG15IGFkdmljZSB0aGVuLCBhbmQgZG8gbm90IGdvIHRyYXZlbGxpbmcgYWJvdXQgZm9yIGxvbmcgc28gZmFyIGZyb20gaG9tZSwgbm9yIGxlYXZlIHlvdXIgcHJvcGVydHkgd2l0aCBzdWNoIGRhbmdlcm91cyBwZW9wbGUgaW4geW91ciBob3VzZTsgdGhleSB3aWxsIGVhdCB1cCBldmVyeXRoaW5nIHlvdSBoYXZlIGFtb25nIHRoZW0sIGFuZCB5b3Ugd2lsbCBoYXZlIGJlZW4gb24gYSBmb29sJ3MgZXJyYW5kLiBTdGlsbCwgSSBzaG91bGQgYWR2aXNlIHlvdSBieSBhbGwgbWVhbnMgdG8gZ28gYW5kIHZpc2l0IE1lbmVsYXVzLCB3aG8gaGFzIGxhdGVseSBjb21lIG9mZiBhIHZveWFnZSBhbW9uZyBzdWNoIGRpc3RhbnQgcGVvcGxlcyBhcyBubyBtYW4gY291bGQgZXZlciBob3BlIHRvIGdldCBiYWNrIGZyb20sIHdoZW4gdGhlIHdpbmRzIGhhZCBvbmNlIGNhcnJpZWQgaGltIHNvIGZhciBvdXQgb2YgaGlzIHJlY2tvbmluZzsgZXZlbiBiaXJkcyBjYW5ub3QgZmx5IHRoZSBkaXN0YW5jZSBpbiBhIHR3ZWx2ZW1vbnRoLCBzbyB2YXN0IGFuZCB0ZXJyaWJsZSBhcmUgdGhlIHNlYXMgdGhhdCB0aGV5IG11c3QgY3Jvc3MuIEdvIHRvIGhpbSwgdGhlcmVmb3JlLCBieSBzZWEsIGFuZCB0YWtlIHlvdXIgb3duIG1lbiB3aXRoIHlvdTsgb3IgaWYgeW91IHdvdWxkIHJhdGhlciB0cmF2ZWwgYnkgbGFuZCB5b3UgY2FuIGhhdmUgYSBjaGFyaW90LCB5b3UgY2FuIGhhdmUgaG9yc2VzLCBhbmQgaGVyZSBhcmUgbXkgc29ucyB3aG8gY2FuIGVzY29ydCB5b3UgdG8gTGFjZWRhZW1vbiB3aGVyZSBNZW5lbGF1cyBsaXZlcy4gQmVnIG9mIGhpbSB0byBzcGVhayB0aGUgdHJ1dGgsIGFuZCBoZSB3aWxsIHRlbGwgeW91IG5vIGxpZXMsIGZvciBoZSBpcyBhbiBleGNlbGxlbnQgcGVyc29uLiINCg0KQXMgaGUgc3Bva2UgdGhlIHN1biBzZXQgYW5kIGl0IGNhbWUgb24gZGFyaywgd2hlcmVvbiBNaW5lcnZhIHNhaWQsICJTaXIsIGFsbCB0aGF0IHlvdSBoYXZlIHNhaWQgaXMgd2VsbDsgbm93LCBob3dldmVyLCBvcmRlciB0aGUgdG9uZ3VlcyBvZiB0aGUgdmljdGltcyB0byBiZSBjdXQsIGFuZCBtaXggd2luZSB0aGF0IHdlIG1heSBtYWtlIGRyaW5rLW9mZmVyaW5ncyB0byBOZXB0dW5lLCBhbmQgdGhlIG90aGVyIGltbW9ydGFscywgYW5kIHRoZW4gZ28gdG8gYmVkLCBmb3IgaXQgaXMgYmVkIHRpbWUuIFBlb3BsZSBzaG91bGQgZ28gYXdheSBlYXJseSBhbmQgbm90IGtlZXAgbGF0ZSBob3VycyBhdCBhIHJlbGlnaW91cyBmZXN0aXZhbC4iDQoNClRodXMgc3Bva2UgdGhlIGRhdWdodGVyIG9mIEpvdmUsIGFuZCB0aGV5IG9iZXllZCBoZXIgc2F5aW5nLiBNZW4gc2VydmFudHMgcG91cmVkIHdhdGVyIG92ZXIgdGhlIGhhbmRzIG9mIHRoZSBndWVzdHMsIHdoaWxlIHBhZ2VzIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHdpdGggd2luZSBhbmQgd2F0ZXIsIGFuZCBoYW5kZWQgaXQgcm91bmQgYWZ0ZXIgZ2l2aW5nIGV2ZXJ5IG1hbiBoaXMgZHJpbmstb2ZmZXJpbmc7IHRoZW4gdGhleSB0aHJldyB0aGUgdG9uZ3VlcyBvZiB0aGUgdmljdGltcyBpbnRvIHRoZSBmaXJlLCBhbmQgc3Rvb2QgdXAgdG8gbWFrZSB0aGVpciBkcmluay1vZmZlcmluZ3MuIFdoZW4gdGhleSBoYWQgbWFkZSB0aGVpciBvZmZlcmluZ3MgYW5kIGhhZCBkcnVuayBlYWNoIGFzIG11Y2ggYXMgaGUgd2FzIG1pbmRlZCwgTWluZXJ2YSBhbmQgVGVsZW1hY2h1cyB3ZXJlIGZvcmdvaW5nIG9uIGJvYXJkIHRoZWlyIHNoaXAsIGJ1dCBOZXN0b3IgY2F1Z2h0IHRoZW0gdXAgYXQgb25jZSBhbmQgc3RheWVkIHRoZW0uDQoNCiJIZWF2ZW4gYW5kIHRoZSBpbW1vcnRhbCBnb2RzLCIgaGUgZXhjbGFpbWVkLCAiZm9yYmlkIHRoYXQgeW91IHNob3VsZCBsZWF2ZSBteSBob3VzZSB0byBnbyBvbiBib2FyZCBvZiBhIHNoaXAuIERvIHlvdSB0aGluayBJIGFtIHNvIHBvb3IgYW5kIHNob3J0IG9mIGNsb3RoZXMsIG9yIHRoYXQgSSBoYXZlIHNvIGZldyBjbG9ha3MgYW5kIGFzIHRvIGJlIHVuYWJsZSB0byBmaW5kIGNvbWZvcnRhYmxlIGJlZHMgYm90aCBmb3IgbXlzZWxmIGFuZCBmb3IgbXkgZ3Vlc3RzPyBMZXQgbWUgdGVsbCB5b3UgSSBoYXZlIHN0b3JlIGJvdGggb2YgcnVncyBhbmQgY2xvYWtzLCBhbmQgc2hhbGwgbm90IHBlcm1pdCB0aGUgc29uIG9mIG15IG9sZCBmcmllbmQgVWx5c3NlcyB0byBjYW1wIGRvd24gb24gdGhlIGRlY2sgb2YgYSBzaGlwLSBub3Qgd2hpbGUgSSBsaXZlLSBub3IgeWV0IHdpbGwgbXkgc29ucyBhZnRlciBtZSwgYnV0IHRoZXkgd2lsbCBrZWVwIG9wZW4gaG91c2UgYXMgaGF2ZSBkb25lLiINCg0KVGhlbiBNaW5lcnZhIGFuc3dlcmVkLCAiU2lyLCB5b3UgaGF2ZSBzcG9rZW4gd2VsbCwgYW5kIGl0IHdpbGwgYmUgbXVjaCBiZXR0ZXIgdGhhdCBUZWxlbWFjaHVzIHNob3VsZCBkbyBhcyB5b3UgaGF2ZSBzYWlkOyBoZSwgdGhlcmVmb3JlLCBzaGFsbCByZXR1cm4gd2l0aCB5b3UgYW5kIHNsZWVwIGF0IHlvdXIgaG91c2UsIGJ1dCBJIG11c3QgZ28gYmFjayB0byBnaXZlIG9yZGVycyB0byBteSBjcmV3LCBhbmQga2VlcCB0aGVtIGluIGdvb2QgaGVhcnQuIEkgYW0gdGhlIG9ubHkgb2xkZXIgcGVyc29uIGFtb25nIHRoZW07IHRoZSByZXN0IGFyZSBhbGwgeW91bmcgbWVuIG9mIFRlbGVtYWNodXMnIG93biBhZ2UsIHdobyBoYXZlIHRha2VuIHRoaXMgdm95YWdlIG91dCBvZiBmcmllbmRzaGlwOyBzbyBJIG11c3QgcmV0dXJuIHRvIHRoZSBzaGlwIGFuZCBzbGVlcCB0aGVyZS4gTW9yZW92ZXIgdG8tbW9ycm93IEkgbXVzdCBnbyB0byB0aGUgQ2F1Y29uaWFucyB3aGVyZSBJIGhhdmUgYSBsYXJnZSBzdW0gb2YgbW9uZXkgbG9uZyBvd2luZyB0byBtZS4gQXMgZm9yIFRlbGVtYWNodXMsIG5vdyB0aGF0IGhlIGlzIHlvdXIgZ3Vlc3QsIHNlbmQgaGltIHRvIExhY2VkYWVtb24gaW4gYSBjaGFyaW90LCBhbmQgbGV0IG9uZSBvZiB5b3VyIHNvbnMgZ28gd2l0aCBoaW0uIEJlIHBsZWFzZWQgYWxzbyB0byBwcm92aWRlIGhpbSB3aXRoIHlvdXIgYmVzdCBhbmQgZmxlZXRlc3QgaG9yc2VzLiINCg0KV2hlbiBzaGUgaGFkIHRodXMgc3Bva2VuLCBzaGUgZmxldyBhd2F5IGluIHRoZSBmb3JtIG9mIGFuIGVhZ2xlLCBhbmQgYWxsIG1hcnZlbGxlZCBhcyB0aGV5IGJlaGVsZCBpdC4gTmVzdG9yIHdhcyBhc3RvbmlzaGVkLCBhbmQgdG9vayBUZWxlbWFjaHVzIGJ5IHRoZSBoYW5kLiAiTXkgZnJpZW5kLCIgc2FpZCBoZSwgIkkgc2VlIHRoYXQgeW91IGFyZSBnb2luZyB0byBiZSBhIGdyZWF0IGhlcm8gc29tZSBkYXksIHNpbmNlIHRoZSBnb2RzIHdhaXQgdXBvbiB5b3UgdGh1cyB3aGlsZSB5b3UgYXJlIHN0aWxsIHNvIHlvdW5nLiBUaGlzIGNhbiBoYXZlIGJlZW4gbm9uZSBvdGhlciBvZiB0aG9zZSB3aG8gZHdlbGwgaW4gaGVhdmVuIHRoYW4gSm92ZSdzIHJlZG91YnRhYmxlIGRhdWdodGVyLCB0aGUgVHJpdG8tYm9ybiwgd2hvIHNob3dlZCBzdWNoIGZhdm91ciB0b3dhcmRzIHlvdXIgYnJhdmUgZmF0aGVyIGFtb25nIHRoZSBBcmdpdmVzLiIgIkhvbHkgcXVlZW4sIiBoZSBjb250aW51ZWQsICJ2b3VjaHNhZmUgdG8gc2VuZCBkb3duIHRoeSBncmFjZSB1cG9uIG15c2VsZiwgbXkgZ29vZCB3aWZlLCBhbmQgbXkgY2hpbGRyZW4uIEluIHJldHVybiwgSSB3aWxsIG9mZmVyIHlvdSBpbiBzYWNyaWZpY2UgYSBicm9hZC1icm93ZWQgaGVpZmVyIG9mIGEgeWVhciBvbGQsIHVuYnJva2VuLCBhbmQgbmV2ZXIgeWV0IGJyb3VnaHQgYnkgbWFuIHVuZGVyIHRoZSB5b2tlLiBJIHdpbGwgZ2lsZCBoZXIgaG9ybnMsIGFuZCB3aWxsIG9mZmVyIGhlciB1cCB0byB5b3UgaW4gc2FjcmlmaWNlLiINCg0KVGh1cyBkaWQgaGUgcHJheSwgYW5kIE1pbmVydmEgaGVhcmQgaGlzIHByYXllci4gSGUgdGhlbiBsZWQgdGhlIHdheSB0byBoaXMgb3duIGhvdXNlLCBmb2xsb3dlZCBieSBoaXMgc29ucyBhbmQgc29ucy1pbi1sYXcuIFdoZW4gdGhleSBoYWQgZ290IHRoZXJlIGFuZCBoYWQgdGFrZW4gdGhlaXIgcGxhY2VzIG9uIHRoZSBiZW5jaGVzIGFuZCBzZWF0cywgaGUgbWl4ZWQgdGhlbSBhIGJvd2wgb2Ygc3dlZXQgd2luZSB0aGF0IHdhcyBlbGV2ZW4geWVhcnMgb2xkIHdoZW4gdGhlIGhvdXNla2VlcGVyIHRvb2sgdGhlIGxpZCBvZmYgdGhlIGphciB0aGF0IGhlbGQgaXQuIEFzIGhlIG1peGVkIHRoZSB3aW5lLCBoZSBwcmF5ZWQgbXVjaCBhbmQgbWFkZSBkcmluay1vZmZlcmluZ3MgdG8gTWluZXJ2YSwgZGF1Z2h0ZXIgb2YgQWVnaXMtYmVhcmluZyBKb3ZlLiBUaGVuLCB3aGVuIHRoZXkgaGFkIG1hZGUgdGhlaXIgZHJpbmstb2ZmZXJpbmdzIGFuZCBoYWQgZHJ1bmsgZWFjaCBhcyBtdWNoIGFzIGhlIHdhcyBtaW5kZWQsIHRoZSBvdGhlcnMgd2VudCBob21lIHRvIGJlZCBlYWNoIGluIGhpcyBvd24gYWJvZGU7IGJ1dCBOZXN0b3IgcHV0IFRlbGVtYWNodXMgdG8gc2xlZXAgaW4gdGhlIHJvb20gdGhhdCB3YXMgb3ZlciB0aGUgZ2F0ZXdheSBhbG9uZyB3aXRoIFBpc2lzdHJhdHVzLCB3aG8gd2FzIHRoZSBvbmx5IHVubWFycmllZCBzb24gbm93IGxlZnQgaGltLiBBcyBmb3IgaGltc2VsZiwgaGUgc2xlcHQgaW4gYW4gaW5uZXIgcm9vbSBvZiB0aGUgaG91c2UsIHdpdGggdGhlIHF1ZWVuIGhpcyB3aWZlIGJ5IGhpcyBzaWRlLg0KDQpOb3cgd2hlbiB0aGUgY2hpbGQgb2YgbW9ybmluZywgcm9zeS1maW5nZXJlZCBEYXduLCBhcHBlYXJlZCwgTmVzdG9yIGxlZnQgaGlzIGNvdWNoIGFuZCB0b29rIGhpcyBzZWF0IG9uIHRoZSBiZW5jaGVzIG9mIHdoaXRlIGFuZCBwb2xpc2hlZCBtYXJibGUgdGhhdCBzdG9vZCBpbiBmcm9udCBvZiBoaXMgaG91c2UuIEhlcmUgYWZvcmV0aW1lIHNhdCBOZWxldXMsIHBlZXIgb2YgZ29kcyBpbiBjb3Vuc2VsLCBidXQgaGUgd2FzIG5vdyBkZWFkLCBhbmQgaGFkIGdvbmUgdG8gdGhlIGhvdXNlIG9mIEhhZGVzOyBzbyBOZXN0b3Igc2F0IGluIGhpcyBzZWF0LCBzY2VwdHJlIGluIGhhbmQsIGFzIGd1YXJkaWFuIG9mIHRoZSBwdWJsaWMgd2VhbC4gSGlzIHNvbnMgYXMgdGhleSBsZWZ0IHRoZWlyIHJvb21zIGdhdGhlcmVkIHJvdW5kIGhpbSwgRWNoZXBocm9uLCBTdHJhdGl1cywgUGVyc2V1cywgQXJldHVzLCBhbmQgVGhyYXN5bWVkZXM7IHRoZSBzaXh0aCBzb24gd2FzIFBpc2lzdHJhdHVzLCBhbmQgd2hlbiBUZWxlbWFjaHVzIGpvaW5lZCB0aGVtIHRoZXkgbWFkZSBoaW0gc2l0IHdpdGggdGhlbS4gTmVzdG9yIHRoZW4gYWRkcmVzc2VkIHRoZW0uDQoNCiJNeSBzb25zLCIgc2FpZCBoZSwgIm1ha2UgaGFzdGUgdG8gZG8gYXMgSSBzaGFsbCBiaWQgeW91LiBJIHdpc2ggZmlyc3QgYW5kIGZvcmVtb3N0IHRvIHByb3BpdGlhdGUgdGhlIGdyZWF0IGdvZGRlc3MgTWluZXJ2YSwgd2hvIG1hbmlmZXN0ZWQgaGVyc2VsZiB2aXNpYmx5IHRvIG1lIGR1cmluZyB5ZXN0ZXJkYXkncyBmZXN0aXZpdGllcy4gR28sIHRoZW4sIG9uZSBvciBvdGhlciBvZiB5b3UgdG8gdGhlIHBsYWluLCB0ZWxsIHRoZSBzdG9ja21hbiB0byBsb29rIG1lIG91dCBhIGhlaWZlciwgYW5kIGNvbWUgb24gaGVyZSB3aXRoIGl0IGF0IG9uY2UuIEFub3RoZXIgbXVzdCBnbyB0byBUZWxlbWFjaHVzJ3Mgc2hpcCwgYW5kIGludml0ZSBhbGwgdGhlIGNyZXcsIGxlYXZpbmcgdHdvIG1lbiBvbmx5IGluIGNoYXJnZSBvZiB0aGUgdmVzc2VsLiBTb21lIG9uZSBlbHNlIHdpbGwgcnVuIGFuZCBmZXRjaCBMYWVyY2V1cyB0aGUgZ29sZHNtaXRoIHRvIGdpbGQgdGhlIGhvcm5zIG9mIHRoZSBoZWlmZXIuIFRoZSByZXN0LCBzdGF5IGFsbCBvZiB5b3Ugd2hlcmUgeW91IGFyZTsgdGVsbCB0aGUgbWFpZHMgaW4gdGhlIGhvdXNlIHRvIHByZXBhcmUgYW4gZXhjZWxsZW50IGRpbm5lciwgYW5kIHRvIGZldGNoIHNlYXRzLCBhbmQgbG9ncyBvZiB3b29kIGZvciBhIGJ1cm50IG9mZmVyaW5nLiBUZWxsIHRoZW0gYWxzby0gdG8gYnJpbmcgbWUgc29tZSBjbGVhciBzcHJpbmcgd2F0ZXIuIg0KDQpPbiB0aGlzIHRoZXkgaHVycmllZCBvZmYgb24gdGhlaXIgc2V2ZXJhbCBlcnJhbmRzLiBUaGUgaGVpZmVyIHdhcyBicm91Z2h0IGluIGZyb20gdGhlIHBsYWluLCBhbmQgVGVsZW1hY2h1cydzIGNyZXcgY2FtZSBmcm9tIHRoZSBzaGlwOyB0aGUgZ29sZHNtaXRoIGJyb3VnaHQgdGhlIGFudmlsLCBoYW1tZXIsIGFuZCB0b25ncywgd2l0aCB3aGljaCBoZSB3b3JrZWQgaGlzIGdvbGQsIGFuZCBNaW5lcnZhIGhlcnNlbGYgY2FtZSB0byB0aGUgc2FjcmlmaWNlLiBOZXN0b3IgZ2F2ZSBvdXQgdGhlIGdvbGQsIGFuZCB0aGUgc21pdGggZ2lsZGVkIHRoZSBob3JucyBvZiB0aGUgaGVpZmVyIHRoYXQgdGhlIGdvZGRlc3MgbWlnaHQgaGF2ZSBwbGVhc3VyZSBpbiB0aGVpciBiZWF1dHkuIFRoZW4gU3RyYXRpdXMgYW5kIEVjaGVwaHJvbiBicm91Z2h0IGhlciBpbiBieSB0aGUgaG9ybnM7IEFyZXR1cyBmZXRjaGVkIHdhdGVyIGZyb20gdGhlIGhvdXNlIGluIGEgZXdlciB0aGF0IGhhZCBhIGZsb3dlciBwYXR0ZXJuIG9uIGl0LCBhbmQgaW4gaGlzIG90aGVyIGhhbmQgaGUgaGVsZCBhIGJhc2tldCBvZiBiYXJsZXkgbWVhbDsgc3R1cmR5IFRocmFzeW1lZGVzIHN0b29kIGJ5IHdpdGggYSBzaGFycCBheGUsIHJlYWR5IHRvIHN0cmlrZSB0aGUgaGVpZmVyLCB3aGlsZSBQZXJzZXVzIGhlbGQgYSBidWNrZXQuIFRoZW4gTmVzdG9yIGJlZ2FuIHdpdGggd2FzaGluZyBoaXMgaGFuZHMgYW5kIHNwcmlua2xpbmcgdGhlIGJhcmxleSBtZWFsLCBhbmQgaGUgb2ZmZXJlZCBtYW55IGEgcHJheWVyIHRvIE1pbmVydmEgYXMgaGUgdGhyZXcgYSBsb2NrIGZyb20gdGhlIGhlaWZlcidzIGhlYWQgdXBvbiB0aGUgZmlyZS4NCg0KV2hlbiB0aGV5IGhhZCBkb25lIHByYXlpbmcgYW5kIHNwcmlua2xpbmcgdGhlIGJhcmxleSBtZWFsIFRocmFzeW1lZGVzIGRlYWx0IGhpcyBibG93LCBhbmQgYnJvdWdodCB0aGUgaGVpZmVyIGRvd24gd2l0aCBhIHN0cm9rZSB0aGF0IGN1dCB0aHJvdWdoIHRoZSB0ZW5kb25zIGF0IHRoZSBiYXNlIG9mIGhlciBuZWNrLCB3aGVyZW9uIHRoZSBkYXVnaHRlcnMgYW5kIGRhdWdodGVycy1pbi1sYXcgb2YgTmVzdG9yLCBhbmQgaGlzIHZlbmVyYWJsZSB3aWZlIEV1cnlkaWNlIChzaGUgd2FzIGVsZGVzdCBkYXVnaHRlciB0byBDbHltZW51cykgc2NyZWFtZWQgd2l0aCBkZWxpZ2h0LiBUaGVuIHRoZXkgbGlmdGVkIHRoZSBoZWlmZXIncyBoZWFkIGZyb20gb2ZmIHRoZSBncm91bmQsIGFuZCBQaXNpc3RyYXR1cyBjdXQgaGVyIHRocm9hdC4gV2hlbiBzaGUgaGFkIGRvbmUgYmxlZWRpbmcgYW5kIHdhcyBxdWl0ZSBkZWFkLCB0aGV5IGN1dCBoZXIgdXAuIFRoZXkgY3V0IG91dCB0aGUgdGhpZ2ggYm9uZXMgYWxsIGluIGR1ZSBjb3Vyc2UsIHdyYXBwZWQgdGhlbSByb3VuZCBpbiB0d28gbGF5ZXJzIG9mIGZhdCwgYW5kIHNldCBzb21lIHBpZWNlcyBvZiByYXcgbWVhdCBvbiB0aGUgdG9wIG9mIHRoZW07IHRoZW4gTmVzdG9yIGxhaWQgdGhlbSB1cG9uIHRoZSB3b29kIGZpcmUgYW5kIHBvdXJlZCB3aW5lIG92ZXIgdGhlbSwgd2hpbGUgdGhlIHlvdW5nIG1lbiBzdG9vZCBuZWFyIGhpbSB3aXRoIGZpdmUtcHJvbmdlZCBzcGl0cyBpbiB0aGVpciBoYW5kcy4gV2hlbiB0aGUgdGhpZ2hzIHdlcmUgYnVybmVkIGFuZCB0aGV5IGhhZCB0YXN0ZWQgdGhlIGlud2FyZCBtZWF0cywgdGhleSBjdXQgdGhlIHJlc3Qgb2YgdGhlIG1lYXQgdXAgc21hbGwsIHB1dCB0aGUgcGllY2VzIG9uIHRoZSBzcGl0cyBhbmQgdG9hc3RlZCB0aGVtIG92ZXIgdGhlIGZpcmUuDQoNCk1lYW53aGlsZSBsb3ZlbHkgUG9seWNhc3RlLCBOZXN0b3IncyB5b3VuZ2VzdCBkYXVnaHRlciwgd2FzaGVkIFRlbGVtYWNodXMuIFdoZW4gc2hlIGhhZCB3YXNoZWQgaGltIGFuZCBhbm9pbnRlZCBoaW0gd2l0aCBvaWwsIHNoZSBicm91Z2h0IGhpbSBhIGZhaXIgbWFudGxlIGFuZCBzaGlydCwgYW5kIGhlIGxvb2tlZCBsaWtlIGEgZ29kIGFzIGhlIGNhbWUgZnJvbSB0aGUgYmF0aCBhbmQgdG9vayBoaXMgc2VhdCBieSB0aGUgc2lkZSBvZiBOZXN0b3IuIFdoZW4gdGhlIG91dGVyIG1lYXRzIHdlcmUgZG9uZSB0aGV5IGRyZXcgdGhlbSBvZmYgdGhlIHNwaXRzIGFuZCBzYXQgZG93biB0byBkaW5uZXIgd2hlcmUgdGhleSB3ZXJlIHdhaXRlZCB1cG9uIGJ5IHNvbWUgd29ydGh5IGhlbmNobWVuLCB3aG8ga2VwdCBwb3VyaW5nIHRoZW0gb3V0IHRoZWlyIHdpbmUgaW4gY3VwcyBvZiBnb2xkLiBBcyBzb29uIGFzIHRoZXkgaGFkIGhhZCBoYWQgZW5vdWdoIHRvIGVhdCBhbmQgZHJpbmsgTmVzdG9yIHNhaWQsICJTb25zLCBwdXQgVGVsZW1hY2h1cydzIGhvcnNlcyB0byB0aGUgY2hhcmlvdCB0aGF0IGhlIG1heSBzdGFydCBhdCBvbmNlLiINCg0KVGh1cyBkaWQgaGUgc3BlYWssIGFuZCB0aGV5IGRpZCBldmVuIGFzIGhlIGhhZCBzYWlkLCBhbmQgeW9rZWQgdGhlIGZsZWV0IGhvcnNlcyB0byB0aGUgY2hhcmlvdC4gVGhlIGhvdXNla2VlcGVyIHBhY2tlZCB0aGVtIHVwIGEgcHJvdmlzaW9uIG9mIGJyZWFkLCB3aW5lLCBhbmQgc3dlZXRtZWF0cyBmaXQgZm9yIHRoZSBzb25zIG9mIHByaW5jZXMuIFRoZW4gVGVsZW1hY2h1cyBnb3QgaW50byB0aGUgY2hhcmlvdCwgd2hpbGUgUGlzaXN0cmF0dXMgZ2F0aGVyZWQgdXAgdGhlIHJlaW5zIGFuZCB0b29rIGhpcyBzZWF0IGJlc2lkZSBoaW0uIEhlIGxhc2hlZCB0aGUgaG9yc2VzIG9uIGFuZCB0aGV5IGZsZXcgZm9yd2FyZCBub3RoaW5nIGxvdGggaW50byB0aGUgb3BlbiBjb3VudHJ5LCBsZWF2aW5nIHRoZSBoaWdoIGNpdGFkZWwgb2YgUHlsb3MgYmVoaW5kIHRoZW0uIEFsbCB0aGF0IGRheSBkaWQgdGhleSB0cmF2ZWwsIHN3YXlpbmcgdGhlIHlva2UgdXBvbiB0aGVpciBuZWNrcyB0aWxsIHRoZSBzdW4gd2VudCBkb3duIGFuZCBkYXJrbmVzcyB3YXMgb3ZlciBhbGwgdGhlIGxhbmQuIFRoZW4gdGhleSByZWFjaGVkIFBoZXJhZSB3aGVyZSBEaW9jbGVzIGxpdmVkLCB3aG8gd2FzIHNvbiB0byBPcnRpbG9jaHVzIGFuZCBncmFuZHNvbiB0byBBbHBoZXVzLiBIZXJlIHRoZXkgcGFzc2VkIHRoZSBuaWdodCBhbmQgRGlvY2xlcyBlbnRlcnRhaW5lZCB0aGVtIGhvc3BpdGFibHkuIFdoZW4gdGhlIGNoaWxkIG9mIG1vcm5pbmcsIHJvc3ktZmluZ2VyZWQgRGF3bjsgYXBwZWFyZWQsIHRoZXkgYWdhaW4geW9rZWQgdGhlaXIgaG9yc2VzIGFuZCBkcm92ZSBvdXQgdGhyb3VnaCB0aGUgZ2F0ZXdheSB1bmRlciB0aGUgZWNob2luZyBnYXRlaG91c2UuIFBpc2lzdHJhdHVzIGxhc2hlZCB0aGUgaG9yc2VzIG9uIGFuZCB0aGV5IGZsZXcgZm9yd2FyZCBub3RoaW5nIGxvdGg7IHByZXNlbnRseSB0aGV5IGNhbWUgdG8gdGhlIGNvcm4gbGFuZHMgT2YgdGhlIG9wZW4gY291bnRyeSwgYW5kIGluIHRoZSBjb3Vyc2Ugb2YgdGltZSBjb21wbGV0ZWQgdGhlaXIgam91cm5leSwgc28gd2VsbCBkaWQgdGhlaXIgc3RlZWRzIHRha2UgdGhlbS4NCg0KTm93IHdoZW4gdGhlIHN1biBoYWQgc2V0IGFuZCBkYXJrbmVzcyB3YXMgb3ZlciB0aGUgbGFuZC4=" \
  | base64 --decode | nc localhost 5555

Let's GET our imposter to verify only one request was captured (part of the response is elided for brevity).

GET /imposters/5555 HTTP/1.1
Host: localhost:46717
Accept: application/json
{
  "protocol": "tcp",
  "port": 5555,
  "numberOfRequests": 1,
  "recordRequests": false,
  "mode": "binary",
  "requests": [
    {
      "requestFrom": "::ffff:127.0.0.1:60642",
      "ip": "::ffff:127.0.0.1",
      "data": "AAEK/0Jvb2sgSQ0KDQpUZWxsIG1lLCBPIG11c2UsIG9mIHRoYXQgaW5nZW5pb3VzIGhlcm8gd2hvIHRyYXZlbGxlZCBmYXIgYW5kIHdpZGUgYWZ0ZXIgaGUgaGFkIHNhY2tlZCB0aGUgZmFtb3VzIHRvd24gb2YgVHJveS4gTWFueSBjaXRpZXMgZGlkIGhlIHZpc2l0LCBhbmQgbWFueSB3ZXJlIHRoZSBuYXRpb25zIHdpdGggd2hvc2UgbWFubmVycyBhbmQgY3VzdG9tcyBoZSB3YXMgYWNxdWFpbnRlZDsgbW9yZW92ZXIgaGUgc3VmZmVyZWQgbXVjaCBieSBzZWEgd2hpbGUgdHJ5aW5nIHRvIHNhdmUgaGlzIG93biBsaWZlIGFuZCBicmluZyBoaXMgbWVuIHNhZmVseSBob21lOyBidXQgZG8gd2hhdCBoZSBtaWdodCBoZSBjb3VsZCBub3Qgc2F2ZSBoaXMgbWVuLCBmb3IgdGhleSBwZXJpc2hlZCB0aHJvdWdoIHRoZWlyIG93biBzaGVlciBmb2xseSBpbiBlYXRpbmcgdGhlIGNhdHRsZSBvZiB0aGUgU3VuLWdvZCBIeXBlcmlvbjsgc28gdGhlIGdvZCBwcmV2ZW50ZWQgdGhlbSBmcm9tIGV2ZXIgcmVhY2hpbmcgaG9tZS4gVGVsbCBtZSwgdG9vLCBhYm91dCBhbGwgdGhlc2UgdGhpbmdzLCBPIGRhdWdodGVyIG9mIEpvdmUsIGZyb20gd2hhdHNvZXZlciBzb3VyY2UgeW91IG1heSBrbm93IHRoZW0uDQoNClNvIG5vdyBhbGwgd2hvIGVzY2FwZWQgZGVhdGggaW4gYmF0dGxlIG9yIGJ5IHNoaXB3cmVjayBoYWQgZ290IHNhZmVseSBob21lIGV4Y2VwdCBVbHlzc2VzLCBhbmQgaGUsIHRob3VnaCBoZSB3YXMgbG9uZ2luZyB0byByZXR1cm4gdG8gaGlzIHdpZmUgYW5kIGNvdW50cnksIHdhcyBkZXRhaW5lZCBieSB0aGUgZ29kZGVzcyBDYWx5cHNvLCB3aG8gaGFkIGdvdCBoaW0gaW50byBhIGxhcmdlIGNhdmUgYW5kIHdhbnRlZCB0byBtYXJyeSBoaW0uIEJ1dCBhcyB5ZWFycyB3ZW50IGJ5LCB0aGVyZSBjYW1lIGEgdGltZSB3aGVuIHRoZSBnb2RzIHNldHRsZWQgdGhhdCBoZSBzaG91bGQgZ28gYmFjayB0byBJdGhhY2E7IGV2ZW4gdGhlbiwgaG93ZXZlciwgd2hlbiBoZSB3YXMgYW1vbmcgaGlzIG93biBwZW9wbGUsIGhpcyB0cm91YmxlcyB3ZXJlIG5vdCB5ZXQgb3ZlcjsgbmV2ZXJ0aGVsZXNzIGFsbCB0aGUgZ29kcyBoYWQgbm93IGJlZ3VuIHRvIHBpdHkgaGltIGV4Y2VwdCBOZXB0dW5lLCB3aG8gc3RpbGwgcGVyc2VjdXRlZCBoaW0gd2l0aG91dCBjZWFzaW5nIGFuZCB3b3VsZCBub3QgbGV0IGhpbSBnZXQgaG9tZS4NCg0KTm93IE5lcHR1bmUgaGFkIGdvbmUgb2ZmIHRvIHRoZSBFdGhpb3BpYW5zLCB3aG8gYXJlIGF0IHRoZSB3b3JsZCdzIGVuZCwgYW5kIGxpZSBpbiB0d28gaGFsdmVzLCB0aGUgb25lIGxvb2tpbmcgV2VzdCBhbmQgdGhlIG90aGVyIEVhc3QuIEhlIGhhZCBnb25lIHRoZXJlIHRvIGFjY2VwdCBhIGhlY2F0b21iIG9mIHNoZWVwIGFuZCBveGVuLCBhbmQgd2FzIGVuam95aW5nIGhpbXNlbGYgYXQgaGlzIGZlc3RpdmFsOyBidXQgdGhlIG90aGVyIGdvZHMgbWV0IGluIHRoZSBob3VzZSBvZiBPbHltcGlhbiBKb3ZlLCBhbmQgdGhlIHNpcmUgb2YgZ29kcyBhbmQgbWVuIHNwb2tlIGZpcnN0LiBBdCB0aGF0IG1vbWVudCBoZSB3YXMgdGhpbmtpbmcgb2YgQWVnaXN0aHVzLCB3aG8gaGFkIGJlZW4ga2lsbGVkIGJ5IEFnYW1lbW5vbidzIHNvbiBPcmVzdGVzOyBzbyBoZSBzYWlkIHRvIHRoZSBvdGhlciBnb2RzOg0KDQoiU2VlIG5vdywgaG93IG1lbiBsYXkgYmxhbWUgdXBvbiB1cyBnb2RzIGZvciB3aGF0IGlzIGFmdGVyIGFsbCBub3RoaW5nIGJ1dCB0aGVpciBvd24gZm9sbHkuIExvb2sgYXQgQWVnaXN0aHVzOyBoZSBtdXN0IG5lZWRzIG1ha2UgbG92ZSB0byBBZ2FtZW1ub24ncyB3aWZlIHVucmlnaHRlb3VzbHkgYW5kIHRoZW4ga2lsbCBBZ2FtZW1ub24sIHRob3VnaCBoZSBrbmV3IGl0IHdvdWxkIGJlIHRoZSBkZWF0aCBvZiBoaW07IGZvciBJIHNlbnQgTWVyY3VyeSB0byB3YXJuIGhpbSBub3QgdG8gZG8gZWl0aGVyIG9mIHRoZXNlIHRoaW5ncywgaW5hc211Y2ggYXMgT3Jlc3RlcyB3b3VsZCBiZSBzdXJlIHRvIHRha2UgaGlzIHJldmVuZ2Ugd2hlbiBoZSBncmV3IHVwIGFuZCB3YW50ZWQgdG8gcmV0dXJuIGhvbWUuIE1lcmN1cnkgdG9sZCBoaW0gdGhpcyBpbiBhbGwgZ29vZCB3aWxsIGJ1dCBoZSB3b3VsZCBub3QgbGlzdGVuLCBhbmQgbm93IGhlIGhhcyBwYWlkIGZvciBldmVyeXRoaW5nIGluIGZ1bGwuIg0KDQpUaGVuIE1pbmVydmEgc2FpZCwgIkZhdGhlciwgc29uIG9mIFNhdHVybiwgS2luZyBvZiBraW5ncywgaXQgc2VydmVkIEFlZ2lzdGh1cyByaWdodCwgYW5kIHNvIGl0IHdvdWxkIGFueSBvbmUgZWxzZSB3aG8gZG9lcyBhcyBoZSBkaWQ7IGJ1dCBBZWdpc3RodXMgaXMgbmVpdGhlciBoZXJlIG5vciB0aGVyZTsgaXQgaXMgZm9yIFVseXNzZXMgdGhhdCBteSBoZWFydCBibGVlZHMsIHdoZW4gSSB0aGluayBvZiBoaXMgc3VmZmVyaW5ncyBpbiB0aGF0IGxvbmVseSBzZWEtZ2lydCBpc2xhbmQsIGZhciBhd2F5LCBwb29yIG1hbiwgZnJvbSBhbGwgaGlzIGZyaWVuZHMuIEl0IGlzIGFuIGlzbGFuZCBjb3ZlcmVkIHdpdGggZm9yZXN0LCBpbiB0aGUgdmVyeSBtaWRkbGUgb2YgdGhlIHNlYSwgYW5kIGEgZ29kZGVzcyBsaXZlcyB0aGVyZSwgZGF1Z2h0ZXIgb2YgdGhlIG1hZ2ljaWFuIEF0bGFzLCB3aG8gbG9va3MgYWZ0ZXIgdGhlIGJvdHRvbSBvZiB0aGUgb2NlYW4sIGFuZCBjYXJyaWVzIHRoZSBncmVhdCBjb2x1bW5zIHRoYXQga2VlcCBoZWF2ZW4gYW5kIGVhcnRoIGFzdW5kZXIuIFRoaXMgZGF1Z2h0ZXIgb2YgQXRsYXMgaGFzIGdvdCBob2xkIG9mIHBvb3IgdW5oYXBweSBVbHlzc2VzLCBhbmQga2VlcHMgdHJ5aW5nIGJ5IGV2ZXJ5IGtpbmQgb2YgYmxhbmRpc2htZW50IHRvIG1ha2UgaGltIGZvcmdldCBoaXMgaG9tZSwgc28gdGhhdCBoZSBpcyB0aXJlZCBvZiBsaWZlLCBhbmQgdGhpbmtzIG9mIG5vdGhpbmcgYnV0IGhvdyBoZSBtYXkgb25jZSBtb3JlIHNlZSB0aGUgc21va2Ugb2YgaGlzIG93biBjaGltbmV5cy4gWW91LCBzaXIsIHRha2Ugbm8gaGVlZCBvZiB0aGlzLCBhbmQgeWV0IHdoZW4gVWx5c3NlcyB3YXMgYmVmb3JlIFRyb3kgZGlkIGhlIG5vdCBwcm9waXRpYXRlIHlvdSB3aXRoIG1hbnkgYSBidXJudCBzYWNyaWZpY2U/IFdoeSB0aGVuIHNob3VsZCB5b3Uga2VlcCBvbiBiZWluZyBzbyBhbmdyeSB3aXRoIGhpbT8iDQoNCkFuZCBKb3ZlIHNhaWQsICJNeSBjaGlsZCwgd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IEhvdyBjYW4gSSBmb3JnZXQgVWx5c3NlcyB0aGFuIHdob20gdGhlcmUgaXMgbm8gbW9yZSBjYXBhYmxlIG1hbiBvbiBlYXJ0aCwgbm9yIG1vcmUgbGliZXJhbCBpbiBoaXMgb2ZmZXJpbmdzIHRvIHRoZSBpbW1vcnRhbCBnb2RzIHRoYXQgbGl2ZSBpbiBoZWF2ZW4/IEJlYXIgaW4gbWluZCwgaG93ZXZlciwgdGhhdCBOZXB0dW5lIGlzIHN0aWxsIGZ1cmlvdXMgd2l0aCBVbHlzc2VzIGZvciBoYXZpbmcgYmxpbmRlZCBhbiBleWUgb2YgUG9seXBoZW11cyBraW5nIG9mIHRoZSBDeWNsb3Blcy4gUG9seXBoZW11cyBpcyBzb24gdG8gTmVwdHVuZSBieSB0aGUgbnltcGggVGhvb3NhLCBkYXVnaHRlciB0byB0aGUgc2VhLWtpbmcgUGhvcmN5czsgdGhlcmVmb3JlIHRob3VnaCBoZSB3aWxsIG5vdCBraWxsIFVseXNzZXMgb3V0cmlnaHQsIGhlIHRvcm1lbnRzIGhpbSBieSBwcmV2ZW50aW5nIGhpbSBmcm9tIGdldHRpbmcgaG9tZS4gU3RpbGwsIGxldCB1cyBsYXkgb3VyIGhlYWRzIHRvZ2V0aGVyIGFuZCBzZWUgaG93IHdlIGNhbiBoZWxwIGhpbSB0byByZXR1cm47IE5lcHR1bmUgd2lsbCB0aGVuIGJlIHBhY2lmaWVkLCBmb3IgaWYgd2UgYXJlIGFsbCBvZiBhIG1pbmQgaGUgY2FuIGhhcmRseSBzdGFuZCBvdXQgYWdhaW5zdCB1cy4iDQoNCkFuZCBNaW5lcnZhIHNhaWQsICJGYXRoZXIsIHNvbiBvZiBTYXR1cm4sIEtpbmcgb2Yga2luZ3MsIGlmLCB0aGVuLCB0aGUgZ29kcyBub3cgbWVhbiB0aGF0IFVseXNzZXMgc2hvdWxkIGdldCBob21lLCB3ZSBzaG91bGQgZmlyc3Qgc2VuZCBNZXJjdXJ5IHRvIHRoZSBPZ3lnaWFuIGlzbGFuZCB0byB0ZWxsIENhbHlwc28gdGhhdCB3ZSBoYXZlIG1hZGUgdXAgb3VyIG1pbmRzIGFuZCB0aGF0IGhlIGlzIHRvIHJldHVybi4gSW4gdGhlIG1lYW50aW1lIEkgd2lsbCBnbyB0byBJdGhhY2EsIHRvIHB1dCBoZWFydCBpbnRvIFVseXNzZXMnIHNvbiBUZWxlbWFjaHVzOyBJIHdpbGwgZW1ib2xkZW4gaGltIHRvIGNhbGwgdGhlIEFjaGFlYW5zIGluIGFzc2VtYmx5LCBhbmQgc3BlYWsgb3V0IHRvIHRoZSBzdWl0b3JzIG9mIGhpcyBtb3RoZXIgUGVuZWxvcGUsIHdobyBwZXJzaXN0IGluIGVhdGluZyB1cCBhbnkgbnVtYmVyIG9mIGhpcyBzaGVlcCBhbmQgb3hlbjsgSSB3aWxsIGFsc28gY29uZHVjdCBoaW0gdG8gU3BhcnRhIGFuZCB0byBQeWxvcywgdG8gc2VlIGlmIGhlIGNhbiBoZWFyIGFueXRoaW5nIGFib3V0IHRoZSByZXR1cm4gb2YgaGlzIGRlYXIgZmF0aGVyLSBmb3IgdGhpcyB3aWxsIG1ha2UgcGVvcGxlIHNwZWFrIHdlbGwgb2YgaGltLiINCg0KU28gc2F5aW5nIHNoZSBib3VuZCBvbiBoZXIgZ2xpdHRlcmluZyBnb2xkZW4gc2FuZGFscywgaW1wZXJpc2hhYmxlLCB3aXRoIHdoaWNoIHNoZSBjYW4gZmx5IGxpa2UgdGhlIHdpbmQgb3ZlciBsYW5kIG9yIHNlYTsgc2hlIGdyYXNwZWQgdGhlIHJlZG91YnRhYmxlIGJyb256ZS1zaG9kIHNwZWFyLCBzbyBzdG91dCBhbmQgc3R1cmR5IGFuZCBzdHJvbmcsIHdoZXJld2l0aCBzaGUgcXVlbGxzIHRoZSByYW5rcyBvZiBoZXJvZXMgd2hvIGhhdmUgZGlzcGxlYXNlZCBoZXIsIGFuZCBkb3duIHNoZSBkYXJ0ZWQgZnJvbSB0aGUgdG9wbW9zdCBzdW1taXRzIG9mIE9seW1wdXMsIHdoZXJlb24gZm9ydGh3aXRoIHNoZSB3YXMgaW4gSXRoYWNhLCBhdCB0aGUgZ2F0ZXdheSBvZiBVbHlzc2VzJyBob3VzZSwgZGlzZ3Vpc2VkIGFzIGEgdmlzaXRvciwgTWVudGVzLCBjaGllZiBvZiB0aGUgVGFwaGlhbnMsIGFuZCBzaGUgaGVsZCBhIGJyb256ZSBzcGVhciBpbiBoZXIgaGFuZC4gVGhlcmUgc2hlIGZvdW5kIHRoZSBsb3JkbHkgc3VpdG9ycyBzZWF0ZWQgb24gaGlkZXMgb2YgdGhlIG94ZW4gd2hpY2ggdGhleSBoYWQga2lsbGVkIGFuZCBlYXRlbiwgYW5kIHBsYXlpbmcgZHJhdWdodHMgaW4gZnJvbnQgb2YgdGhlIGhvdXNlLiBNZW4tc2VydmFudHMgYW5kIHBhZ2VzIHdlcmUgYnVzdGxpbmcgYWJvdXQgdG8gd2FpdCB1cG9uIHRoZW0sIHNvbWUgbWl4aW5nIHdpbmUgd2l0aCB3YXRlciBpbiB0aGUgbWl4aW5nLWJvd2xzLCBzb21lIGNsZWFuaW5nIGRvd24gdGhlIHRhYmxlcyB3aXRoIHdldCBzcG9uZ2VzIGFuZCBsYXlpbmcgdGhlbSBvdXQgYWdhaW4sIGFuZCBzb21lIGN1dHRpbmcgdXAgZ3JlYXQgcXVhbnRpdGllcyBvZiBtZWF0Lg0KDQpUZWxlbWFjaHVzIHNhdyBoZXIgbG9uZyBiZWZvcmUgYW55IG9uZSBlbHNlIGRpZC4gSGUgd2FzIHNpdHRpbmcgbW9vZGlseSBhbW9uZyB0aGUgc3VpdG9ycyB0aGlua2luZyBhYm91dCBoaXMgYnJhdmUgZmF0aGVyLCBhbmQgaG93IGhlIHdvdWxkIHNlbmQgdGhlbSBmbHlpbmcgb3V0IG9mIHRoZSBob3VzZSwgaWYgaGUgd2VyZSB0byBjb21lIHRvIGhpcyBvd24gYWdhaW4gYW5kIGJlIGhvbm91cmVkIGFzIGluIGRheXMgZ29uZSBieS4gVGh1cyBicm9vZGluZyBhcyBoZSBzYXQgYW1vbmcgdGhlbSwgaGUgY2F1Z2h0IHNpZ2h0IG9mIE1pbmVydmEgYW5kIHdlbnQgc3RyYWlnaHQgdG8gdGhlIGdhdGUsIGZvciBoZSB3YXMgdmV4ZWQgdGhhdCBhIHN0cmFuZ2VyIHNob3VsZCBiZSBrZXB0IHdhaXRpbmcgZm9yIGFkbWl0dGFuY2UuIEhlIHRvb2sgaGVyIHJpZ2h0IGhhbmQgaW4gaGlzIG93biwgYW5kIGJhZGUgaGVyIGdpdmUgaGltIGhlciBzcGVhci4gIldlbGNvbWUsIiBzYWlkIGhlLCAidG8gb3VyIGhvdXNlLCBhbmQgd2hlbiB5b3UgaGF2ZSBwYXJ0YWtlbiBvZiBmb29kIHlvdSBzaGFsbCB0ZWxsIHVzIHdoYXQgeW91IGhhdmUgY29tZSBmb3IuIg0KDQpIZSBsZWQgdGhlIHdheSBhcyBoZSBzcG9rZSwgYW5kIE1pbmVydmEgZm9sbG93ZWQgaGltLiBXaGVuIHRoZXkgd2VyZSB3aXRoaW4gaGUgdG9vayBoZXIgc3BlYXIgYW5kIHNldCBpdCBpbiB0aGUgc3BlYXItIHN0YW5kIGFnYWluc3QgYSBzdHJvbmcgYmVhcmluZy1wb3N0IGFsb25nIHdpdGggdGhlIG1hbnkgb3RoZXIgc3BlYXJzIG9mIGhpcyB1bmhhcHB5IGZhdGhlciwgYW5kIGhlIGNvbmR1Y3RlZCBoZXIgdG8gYSByaWNobHkgZGVjb3JhdGVkIHNlYXQgdW5kZXIgd2hpY2ggaGUgdGhyZXcgYSBjbG90aCBvZiBkYW1hc2suIFRoZXJlIHdhcyBhIGZvb3RzdG9vbCBhbHNvIGZvciBoZXIgZmVldCwgYW5kIGhlIHNldCBhbm90aGVyIHNlYXQgbmVhciBoZXIgZm9yIGhpbXNlbGYsIGF3YXkgZnJvbSB0aGUgc3VpdG9ycywgdGhhdCBzaGUgbWlnaHQgbm90IGJlIGFubm95ZWQgd2hpbGUgZWF0aW5nIGJ5IHRoZWlyIG5vaXNlIGFuZCBpbnNvbGVuY2UsIGFuZCB0aGF0IGhlIG1pZ2h0IGFzayBoZXIgbW9yZSBmcmVlbHkgYWJvdXQgaGlzIGZhdGhlci4NCg0KQSBtYWlkIHNlcnZhbnQgdGhlbiBicm91Z2h0IHRoZW0gd2F0ZXIgaW4gYSBiZWF1dGlmdWwgZ29sZGVuIGV3ZXIgYW5kIHBvdXJlZCBpdCBpbnRvIGEgc2lsdmVyIGJhc2luIGZvciB0aGVtIHRvIHdhc2ggdGhlaXIgaGFuZHMsIGFuZCBzaGUgZHJldyBhIGNsZWFuIHRhYmxlIGJlc2lkZSB0aGVtLiBBbiB1cHBlciBzZXJ2YW50IGJyb3VnaHQgdGhlbSBicmVhZCwgYW5kIG9mZmVyZWQgdGhlbSBtYW55IGdvb2QgdGhpbmdzIG9mIHdoYXQgdGhlcmUgd2FzIGluIHRoZSBob3VzZSwgdGhlIGNhcnZlciBmZXRjaGVkIHRoZW0gcGxhdGVzIG9mIGFsbCBtYW5uZXIgb2YgbWVhdHMgYW5kIHNldCBjdXBzIG9mIGdvbGQgYnkgdGhlaXIgc2lkZSwgYW5kIGEgbWFuLXNlcnZhbnQgYnJvdWdodCB0aGVtIHdpbmUgYW5kIHBvdXJlZCBpdCBvdXQgZm9yIHRoZW0uDQoNClRoZW4gdGhlIHN1aXRvcnMgY2FtZSBpbiBhbmQgdG9vayB0aGVpciBwbGFjZXMgb24gdGhlIGJlbmNoZXMgYW5kIHNlYXRzLiBGb3J0aHdpdGggbWVuIHNlcnZhbnRzIHBvdXJlZCB3YXRlciBvdmVyIHRoZWlyIGhhbmRzLCBtYWlkcyB3ZW50IHJvdW5kIHdpdGggdGhlIGJyZWFkLWJhc2tldHMsIHBhZ2VzIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHdpdGggd2luZSBhbmQgd2F0ZXIsIGFuZCB0aGV5IGxhaWQgdGhlaXIgaGFuZHMgdXBvbiB0aGUgZ29vZCB0aGluZ3MgdGhhdCB3ZXJlIGJlZm9yZSB0aGVtLiBBcyBzb29uIGFzIHRoZXkgaGFkIGhhZCBlbm91Z2ggdG8gZWF0IGFuZCBkcmluayB0aGV5IHdhbnRlZCBtdXNpYyBhbmQgZGFuY2luZywgd2hpY2ggYXJlIHRoZSBjcm93bmluZyBlbWJlbGxpc2htZW50cyBvZiBhIGJhbnF1ZXQsIHNvIGEgc2VydmFudCBicm91Z2h0IGEgbHlyZSB0byBQaGVtaXVzLCB3aG9tIHRoZXkgY29tcGVsbGVkIHBlcmZvcmNlIHRvIHNpbmcgdG8gdGhlbS4gQXMgc29vbiBhcyBoZSB0b3VjaGVkIGhpcyBseXJlIGFuZCBiZWdhbiB0byBzaW5nIFRlbGVtYWNodXMgc3Bva2UgbG93IHRvIE1pbmVydmEsIHdpdGggaGlzIGhlYWQgY2xvc2UgdG8gaGVycyB0aGF0IG5vIG1hbiBtaWdodCBoZWFyLg0KDQoiSSBob3BlLCBzaXIsIiBzYWlkIGhlLCAidGhhdCB5b3Ugd2lsbCBub3QgYmUgb2ZmZW5kZWQgd2l0aCB3aGF0IEkgYW0gZ29pbmcgdG8gc2F5LiBTaW5naW5nIGNvbWVzIGNoZWFwIHRvIHRob3NlIHdobyBkbyBub3QgcGF5IGZvciBpdCwgYW5kIGFsbCB0aGlzIGlzIGRvbmUgYXQgdGhlIGNvc3Qgb2Ygb25lIHdob3NlIGJvbmVzIGxpZSByb3R0aW5nIGluIHNvbWUgd2lsZGVybmVzcyBvciBncmluZGluZyB0byBwb3dkZXIgaW4gdGhlIHN1cmYuIElmIHRoZXNlIG1lbiB3ZXJlIHRvIHNlZSBteSBmYXRoZXIgY29tZSBiYWNrIHRvIEl0aGFjYSB0aGV5IHdvdWxkIHByYXkgZm9yIGxvbmdlciBsZWdzIHJhdGhlciB0aGFuIGEgbG9uZ2VyIHB1cnNlLCBmb3IgbW9uZXkgd291bGQgbm90IHNlcnZlIHRoZW07IGJ1dCBoZSwgYWxhcywgaGFzIGZhbGxlbiBvbiBhbiBpbGwgZmF0ZSwgYW5kIGV2ZW4gd2hlbiBwZW9wbGUgZG8gc29tZXRpbWVzIHNheSB0aGF0IGhlIGlzIGNvbWluZywgd2Ugbm8gbG9uZ2VyIGhlZWQgdGhlbTsgd2Ugc2hhbGwgbmV2ZXIgc2VlIGhpbSBhZ2Fpbi4gQW5kIG5vdywgc2lyLCB0ZWxsIG1lIGFuZCB0ZWxsIG1lIHRydWUsIHdobyB5b3UgYXJlIGFuZCB3aGVyZSB5b3UgY29tZSBmcm9tLiBUZWxsIG1lIG9mIHlvdXIgdG93biBhbmQgcGFyZW50cywgd2hhdCBtYW5uZXIgb2Ygc2hpcCB5b3UgY2FtZSBpbiwgaG93IHlvdXIgY3JldyBicm91Z2h0IHlvdSB0byBJdGhhY2EsIGFuZCBvZiB3aGF0IG5hdGlvbiB0aGV5IGRlY2xhcmVkIHRoZW1zZWx2ZXMgdG8gYmUtIGZvciB5b3UgY2Fubm90IGhhdmUgY29tZSBieSBsYW5kLiBUZWxsIG1lIGFsc28gdHJ1bHksIGZvciBJIHdhbnQgdG8ga25vdywgYXJlIHlvdSBhIHN0cmFuZ2VyIHRvIHRoaXMgaG91c2UsIG9yIGhhdmUgeW91IGJlZW4gaGVyZSBpbiBteSBmYXRoZXIncyB0aW1lPyBJbiB0aGUgb2xkIGRheXMgd2UgaGFkIG1hbnkgdmlzaXRvcnMgZm9yIG15IGZhdGhlciB3ZW50IGFib3V0IG11Y2ggaGltc2VsZi4iDQoNCkFuZCBNaW5lcnZhIGFuc3dlcmVkLCAiSSB3aWxsIHRlbGwgeW91IHRydWx5IGFuZCBwYXJ0aWN1bGFybHkgYWxsIGFib3V0IGl0LiBJIGFtIE1lbnRlcywgc29uIG9mIEFuY2hpYWx1cywgYW5kIEkgYW0gS2luZyBvZiB0aGUgVGFwaGlhbnMuIEkgaGF2ZSBjb21lIGhlcmUgd2l0aCBteSBzaGlwIGFuZCBjcmV3LCBvbiBhIHZveWFnZSB0byBtZW4gb2YgYSBmb3JlaWduIHRvbmd1ZSBiZWluZyBib3VuZCBmb3IgVGVtZXNhIHdpdGggYSBjYXJnbyBvZiBpcm9uLCBhbmQgSSBzaGFsbCBicmluZyBiYWNrIGNvcHBlci4gQXMgZm9yIG15IHNoaXAsIGl0IGxpZXMgb3ZlciB5b25kZXIgb2ZmIHRoZSBvcGVuIGNvdW50cnkgYXdheSBmcm9tIHRoZSB0b3duLCBpbiB0aGUgaGFyYm91ciBSaGVpdGhyb24gdW5kZXIgdGhlIHdvb2RlZCBtb3VudGFpbiBOZXJpdHVtLiBPdXIgZmF0aGVycyB3ZXJlIGZyaWVuZHMgYmVmb3JlIHVzLCBhcyBvbGQgTGFlcnRlcyB3aWxsIHRlbGwgeW91LCBpZiB5b3Ugd2lsbCBnbyBhbmQgYXNrIGhpbS4gVGhleSBzYXksIGhvd2V2ZXIsIHRoYXQgaGUgbmV2ZXIgY29tZXMgdG8gdG93biBub3csIGFuZCBsaXZlcyBieSBoaW1zZWxmIGluIHRoZSBjb3VudHJ5LCBmYXJpbmcgaGFyZGx5LCB3aXRoIGFuIG9sZCB3b21hbiB0byBsb29rIGFmdGVyIGhpbSBhbmQgZ2V0IGhpcyBkaW5uZXIgZm9yIGhpbSwgd2hlbiBoZSBjb21lcyBpbiB0aXJlZCBmcm9tIHBvdHRlcmluZyBhYm91dCBoaXMgdmluZXlhcmQuIFRoZXkgdG9sZCBtZSB5b3VyIGZhdGhlciB3YXMgYXQgaG9tZSBhZ2FpbiwgYW5kIHRoYXQgd2FzIHdoeSBJIGNhbWUsIGJ1dCBpdCBzZWVtcyB0aGUgZ29kcyBhcmUgc3RpbGwga2VlcGluZyBoaW0gYmFjaywgZm9yIGhlIGlzIG5vdCBkZWFkIHlldCBub3Qgb24gdGhlIG1haW5sYW5kLiBJdCBpcyBtb3JlIGxpa2VseSBoZSBpcyBvbiBzb21lIHNlYS1naXJ0IGlzbGFuZCBpbiBtaWQgb2NlYW4sIG9yIGEgcHJpc29uZXIgYW1vbmcgc2F2YWdlcyB3aG8gYXJlIGRldGFpbmluZyBoaW0gYWdhaW5zdCBoaXMgd2lsbCBJIGFtIG5vIHByb3BoZXQsIGFuZCBrbm93IHZlcnkgbGl0dGxlIGFib3V0IG9tZW5zLCBidXQgSSBzcGVhayBhcyBpdCBpcyBib3JuZSBpbiB1cG9uIG1lIGZyb20gaGVhdmVuLCBhbmQgYXNzdXJlIHlvdSB0aGF0IGhlIHdpbGwgbm90IGJlIGF3YXkgbXVjaCBsb25nZXI7IGZvciBoZSBpcyBhIG1hbiBvZiBzdWNoIHJlc291cmNlIHRoYXQgZXZlbiB0aG91Z2ggaGUgd2VyZSBpbiBjaGFpbnMgb2YgaXJvbiBoZSB3b3VsZCBmaW5kIHNvbWUgbWVhbnMgb2YgZ2V0dGluZyBob21lIGFnYWluLiBCdXQgdGVsbCBtZSwgYW5kIHRlbGwgbWUgdHJ1ZSwgY2FuIFVseXNzZXMgcmVhbGx5IGhhdmUgc3VjaCBhIGZpbmUgbG9va2luZyBmZWxsb3cgZm9yIGEgc29uPyBZb3UgYXJlIGluZGVlZCB3b25kZXJmdWxseSBsaWtlIGhpbSBhYm91dCB0aGUgaGVhZCBhbmQgZXllcywgZm9yIHdlIHdlcmUgY2xvc2UgZnJpZW5kcyBiZWZvcmUgaGUgc2V0IHNhaWwgZm9yIFRyb3kgd2hlcmUgdGhlIGZsb3dlciBvZiBhbGwgdGhlIEFyZ2l2ZXMgd2VudCBhbHNvLiBTaW5jZSB0aGF0IHRpbWUgd2UgaGF2ZSBuZXZlciBlaXRoZXIgb2YgdXMgc2VlbiB0aGUgb3RoZXIuIg0KDQoiTXkgbW90aGVyLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgdGVsbHMgbWUgSSBhbSBzb24gdG8gVWx5c3NlcywgYnV0IGl0IGlzIGEgd2lzZSBjaGlsZCB0aGF0IGtub3dzIGhpcyBvd24gZmF0aGVyLiBXb3VsZCB0aGF0IEkgd2VyZSBzb24gdG8gb25lIHdobyBoYWQgZ3Jvd24gb2xkIHVwb24gaGlzIG93biBlc3RhdGVzLCBmb3IsIHNpbmNlIHlvdSBhc2sgbWUsIHRoZXJlIGlzIG5vIG1vcmUgaWxsLXN0YXJyZWQgbWFuIHVuZGVyIGhlYXZlbiB0aGFuIGhlIHdobyB0aGV5IHRlbGwgbWUgaXMgbXkgZmF0aGVyLiINCg0KQW5kIE1pbmVydmEgc2FpZCwgIlRoZXJlIGlzIG5vIGZlYXIgb2YgeW91ciByYWNlIGR5aW5nIG91dCB5ZXQsIHdoaWxlIFBlbmVsb3BlIGhhcyBzdWNoIGEgZmluZSBzb24gYXMgeW91IGFyZS4gQnV0IHRlbGwgbWUsIGFuZCB0ZWxsIG1lIHRydWUsIHdoYXQgaXMgdGhlIG1lYW5pbmcgb2YgYWxsIHRoaXMgZmVhc3RpbmcsIGFuZCB3aG8gYXJlIHRoZXNlIHBlb3BsZT8gV2hhdCBpcyBpdCBhbGwgYWJvdXQ/IEhhdmUgeW91IHNvbWUgYmFucXVldCwgb3IgaXMgdGhlcmUgYSB3ZWRkaW5nIGluIHRoZSBmYW1pbHktIGZvciBubyBvbmUgc2VlbXMgdG8gYmUgYnJpbmdpbmcgYW55IHByb3Zpc2lvbnMgb2YgaGlzIG93bj8gQW5kIHRoZSBndWVzdHMtIGhvdyBhdHJvY2lvdXNseSB0aGV5IGFyZSBiZWhhdmluZzsgd2hhdCByaW90IHRoZXkgbWFrZSBvdmVyIHRoZSB3aG9sZSBob3VzZTsgaXQgaXMgZW5vdWdoIHRvIGRpc2d1c3QgYW55IHJlc3BlY3RhYmxlIHBlcnNvbiB3aG8gY29tZXMgbmVhciB0aGVtLiINCg0KIlNpciwiIHNhaWQgVGVsZW1hY2h1cywgImFzIHJlZ2FyZHMgeW91ciBxdWVzdGlvbiwgc28gbG9uZyBhcyBteSBmYXRoZXIgd2FzIGhlcmUgaXQgd2FzIHdlbGwgd2l0aCB1cyBhbmQgd2l0aCB0aGUgaG91c2UsIGJ1dCB0aGUgZ29kcyBpbiB0aGVpciBkaXNwbGVhc3VyZSBoYXZlIHdpbGxlZCBpdCBvdGhlcndpc2UsIGFuZCBoYXZlIGhpZGRlbiBoaW0gYXdheSBtb3JlIGNsb3NlbHkgdGhhbiBtb3J0YWwgbWFuIHdhcyBldmVyIHlldCBoaWRkZW4uIEkgY291bGQgaGF2ZSBib3JuZSBpdCBiZXR0ZXIgZXZlbiB0aG91Z2ggaGUgd2VyZSBkZWFkLCBpZiBoZSBoYWQgZmFsbGVuIHdpdGggaGlzIG1lbiBiZWZvcmUgVHJveSwgb3IgaGFkIGRpZWQgd2l0aCBmcmllbmRzIGFyb3VuZCBoaW0gd2hlbiB0aGUgZGF5cyBvZiBoaXMgZmlnaHRpbmcgd2VyZSBkb25lOyBmb3IgdGhlbiB0aGUgQWNoYWVhbnMgd291bGQgaGF2ZSBidWlsdCBhIG1vdW5kIG92ZXIgaGlzIGFzaGVzLCBhbmQgSSBzaG91bGQgbXlzZWxmIGhhdmUgYmVlbiBoZWlyIHRvIGhpcyByZW5vd247IGJ1dCBub3cgdGhlIHN0b3JtLXdpbmRzIGhhdmUgc3Bpcml0ZWQgaGltIGF3YXkgd2Uga25vdyBub3Qgd2l0aGVyOyBoZSBpcyBnb25lIHdpdGhvdXQgbGVhdmluZyBzbyBtdWNoIGFzIGEgdHJhY2UgYmVoaW5kIGhpbSwgYW5kIEkgaW5oZXJpdCBub3RoaW5nIGJ1dCBkaXNtYXkuIE5vciBkb2VzIHRoZSBtYXR0ZXIgZW5kIHNpbXBseSB3aXRoIGdyaWVmIGZvciB0aGUgbG9zcyBvZiBteSBmYXRoZXI7IGhlYXZlbiBoYXMgbGFpZCBzb3Jyb3dzIHVwb24gbWUgb2YgeWV0IGFub3RoZXIga2luZDsgZm9yIHRoZSBjaGllZnMgZnJvbSBhbGwgb3VyIGlzbGFuZHMsIER1bGljaGl1bSwgU2FtZSwgYW5kIHRoZSB3b29kbGFuZCBpc2xhbmQgb2YgWmFjeW50aHVzLCBhcyBhbHNvIGFsbCB0aGUgcHJpbmNpcGFsIG1lbiBvZiBJdGhhY2EgaXRzZWxmLCBhcmUgZWF0aW5nIHVwIG15IGhvdXNlIHVuZGVyIHRoZSBwcmV0ZXh0IG9mIHBheWluZyB0aGVpciBjb3VydCB0byBteSBtb3RoZXIsIHdobyB3aWxsIG5laXRoZXIgcG9pbnQgYmxhbmsgc2F5IHRoYXQgc2hlIHdpbGwgbm90IG1hcnJ5LCBub3IgeWV0IGJyaW5nIG1hdHRlcnMgdG8gYW4gZW5kOyBzbyB0aGV5IGFyZSBtYWtpbmcgaGF2b2Mgb2YgbXkgZXN0YXRlLCBhbmQgYmVmb3JlIGxvbmcgd2lsbCBkbyBzbyBhbHNvIHdpdGggbXlzZWxmLiINCg0KIklzIHRoYXQgc28/IiBleGNsYWltZWQgTWluZXJ2YSwgInRoZW4geW91IGRvIGluZGVlZCB3YW50IFVseXNzZXMgaG9tZSBhZ2Fpbi4gR2l2ZSBoaW0gaGlzIGhlbG1ldCwgc2hpZWxkLCBhbmQgYSBjb3VwbGUgbGFuY2VzLCBhbmQgaWYgaGUgaXMgdGhlIG1hbiBoZSB3YXMgd2hlbiBJIGZpcnN0IGtuZXcgaGltIGluIG91ciBob3VzZSwgZHJpbmtpbmcgYW5kIG1ha2luZyBtZXJyeSwgaGUgd291bGQgc29vbiBsYXkgaGlzIGhhbmRzIGFib3V0IHRoZXNlIHJhc2NhbGx5IHN1aXRvcnMsIHdlcmUgaGUgdG8gc3RhbmQgb25jZSBtb3JlIHVwb24gaGlzIG93biB0aHJlc2hvbGQuIEhlIHdhcyB0aGVuIGNvbWluZyBmcm9tIEVwaHlyYSwgd2hlcmUgaGUgaGFkIGJlZW4gdG8gYmVnIHBvaXNvbiBmb3IgaGlzIGFycm93cyBmcm9tIElsdXMsIHNvbiBvZiBNZXJtZXJ1cy4gSWx1cyBmZWFyZWQgdGhlIGV2ZXItbGl2aW5nIGdvZHMgYW5kIHdvdWxkIG5vdCBnaXZlIGhpbSBhbnksIGJ1dCBteSBmYXRoZXIgbGV0IGhpbSBoYXZlIHNvbWUsIGZvciBoZSB3YXMgdmVyeSBmb25kIG9mIGhpbS4gSWYgVWx5c3NlcyBpcyB0aGUgbWFuIGhlIHRoZW4gd2FzIHRoZXNlIHN1aXRvcnMgd2lsbCBoYXZlIGEgc2hvcnQgc2hyaWZ0IGFuZCBhIHNvcnJ5IHdlZGRpbmcuDQoNCiJCdXQgdGhlcmUhIEl0IHJlc3RzIHdpdGggaGVhdmVuIHRvIGRldGVybWluZSB3aGV0aGVyIGhlIGlzIHRvIHJldHVybiwgYW5kIHRha2UgaGlzIHJldmVuZ2UgaW4gaGlzIG93biBob3VzZSBvciBubzsgSSB3b3VsZCwgaG93ZXZlciwgdXJnZSB5b3UgdG8gc2V0IGFib3V0IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZXNlIHN1aXRvcnMgYXQgb25jZS4gVGFrZSBteSBhZHZpY2UsIGNhbGwgdGhlIEFjaGFlYW4gaGVyb2VzIGluIGFzc2VtYmx5IHRvLW1vcnJvdyAtbGF5IHlvdXIgY2FzZSBiZWZvcmUgdGhlbSwgYW5kIGNhbGwgaGVhdmVuIHRvIGJlYXIgeW91IHdpdG5lc3MuIEJpZCB0aGUgc3VpdG9ycyB0YWtlIHRoZW1zZWx2ZXMgb2ZmLCBlYWNoIHRvIGhpcyBvd24gcGxhY2UsIGFuZCBpZiB5b3VyIG1vdGhlcidzIG1pbmQgaXMgc2V0IG9uIG1hcnJ5aW5nIGFnYWluLCBsZXQgaGVyIGdvIGJhY2sgdG8gaGVyIGZhdGhlciwgd2hvIHdpbGwgZmluZCBoZXIgYSBodXNiYW5kIGFuZCBwcm92aWRlIGhlciB3aXRoIGFsbCB0aGUgbWFycmlhZ2UgZ2lmdHMgdGhhdCBzbyBkZWFyIGEgZGF1Z2h0ZXIgbWF5IGV4cGVjdC4gQXMgZm9yIHlvdXJzZWxmLCBsZXQgbWUgcHJldmFpbCB1cG9uIHlvdSB0byB0YWtlIHRoZSBiZXN0IHNoaXAgeW91IGNhbiBnZXQsIHdpdGggYSBjcmV3IG9mIHR3ZW50eSBtZW4sIGFuZCBnbyBpbiBxdWVzdCBvZiB5b3VyIGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBTb21lIG9uZSBtYXkgdGVsbCB5b3Ugc29tZXRoaW5nLCBvciAoYW5kIHBlb3BsZSBvZnRlbiBoZWFyIHRoaW5ncyBpbiB0aGlzIHdheSkgc29tZSBoZWF2ZW4tc2VudCBtZXNzYWdlIG1heSBkaXJlY3QgeW91LiBGaXJzdCBnbyB0byBQeWxvcyBhbmQgYXNrIE5lc3RvcjsgdGhlbmNlIGdvIG9uIHRvIFNwYXJ0YSBhbmQgdmlzaXQgTWVuZWxhdXMsIGZvciBoZSBnb3QgaG9tZSBsYXN0IG9mIGFsbCB0aGUgQWNoYWVhbnM7IGlmIHlvdSBoZWFyIHRoYXQgeW91ciBmYXRoZXIgaXMgYWxpdmUgYW5kIG9uIGhpcyB3YXkgaG9tZSwgeW91IGNhbiBwdXQgdXAgd2l0aCB0aGUgd2FzdGUgdGhlc2Ugc3VpdG9ycyB3aWxsIG1ha2UgZm9yIHlldCBhbm90aGVyIHR3ZWx2ZSBtb250aHMuIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBoZWFyIG9mIGhpcyBkZWF0aCwgY29tZSBob21lIGF0IG9uY2UsIGNlbGVicmF0ZSBoaXMgZnVuZXJhbCByaXRlcyB3aXRoIGFsbCBkdWUgcG9tcCwgYnVpbGQgYSBiYXJyb3cgdG8gaGlzIG1lbW9yeSwgYW5kIG1ha2UgeW91ciBtb3RoZXIgbWFycnkgYWdhaW4uIFRoZW4sIGhhdmluZyBkb25lIGFsbCB0aGlzLCB0aGluayBpdCB3ZWxsIG92ZXIgaW4geW91ciBtaW5kIGhvdywgYnkgZmFpciBtZWFucyBvciBmb3VsLCB5b3UgbWF5IGtpbGwgdGhlc2Ugc3VpdG9ycyBpbiB5b3VyIG93biBob3VzZS4gWW91IGFyZSB0b28gb2xkIHRvIHBsZWFkIGluZmFuY3kgYW55IGxvbmdlcjsgaGF2ZSB5b3Ugbm90IGhlYXJkIGhvdyBwZW9wbGUgYXJlIHNpbmdpbmcgT3Jlc3RlcycgcHJhaXNlcyBmb3IgaGF2aW5nIGtpbGxlZCBoaXMgZmF0aGVyJ3MgbXVyZGVyZXIgQWVnaXN0aHVzPyBZb3UgYXJlIGEgZmluZSwgc21hcnQgbG9va2luZyBmZWxsb3c7IHNob3cgeW91ciBtZXR0bGUsIHRoZW4sIGFuZCBtYWtlIHlvdXJzZWxmIGEgbmFtZSBpbiBzdG9yeS4gTm93LCBob3dldmVyLCBJIG11c3QgZ28gYmFjayB0byBteSBzaGlwIGFuZCB0byBteSBjcmV3LCB3aG8gd2lsbCBiZSBpbXBhdGllbnQgaWYgSSBrZWVwIHRoZW0gd2FpdGluZyBsb25nZXI7IHRoaW5rIHRoZSBtYXR0ZXIgb3ZlciBmb3IgeW91cnNlbGYsIGFuZCByZW1lbWJlciB3aGF0IEkgaGF2ZSBzYWlkIHRvIHlvdS4iDQoNCiJTaXIsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiaXQgaGFzIGJlZW4gdmVyeSBraW5kIG9mIHlvdSB0byB0YWxrIHRvIG1lIGluIHRoaXMgd2F5LCBhcyB0aG91Z2ggSSB3ZXJlIHlvdXIgb3duIHNvbiwgYW5kIEkgd2lsbCBkbyBhbGwgeW91IHRlbGwgbWU7IEkga25vdyB5b3Ugd2FudCB0byBiZSBnZXR0aW5nIG9uIHdpdGggeW91ciB2b3lhZ2UsIGJ1dCBzdGF5IGEgbGl0dGxlIGxvbmdlciB0aWxsIHlvdSBoYXZlIHRha2VuIGEgYmF0aCBhbmQgcmVmcmVzaGVkIHlvdXJzZWxmLiBJIHdpbGwgdGhlbiBnaXZlIHlvdSBhIHByZXNlbnQsIGFuZCB5b3Ugc2hhbGwgZ28gb24geW91ciB3YXkgcmVqb2ljaW5nOyBJIHdpbGwgZ2l2ZSB5b3Ugb25lIG9mIGdyZWF0IGJlYXV0eSBhbmQgdmFsdWUtIGEga2VlcHNha2Ugc3VjaCBhcyBvbmx5IGRlYXIgZnJpZW5kcyBnaXZlIHRvIG9uZSBhbm90aGVyLiINCg0KTWluZXJ2YSBhbnN3ZXJlZCwgIkRvIG5vdCB0cnkgdG8ga2VlcCBtZSwgZm9yIEkgd291bGQgYmUgb24gbXkgd2F5IGF0IG9uY2UuIEFzIGZvciBhbnkgcHJlc2VudCB5b3UgbWF5IGJlIGRpc3Bvc2VkIHRvIG1ha2UgbWUsIGtlZXAgaXQgdGlsbCBJIGNvbWUgYWdhaW4sIGFuZCBJIHdpbGwgdGFrZSBpdCBob21lIHdpdGggbWUuIFlvdSBzaGFsbCBnaXZlIG1lIGEgdmVyeSBnb29kIG9uZSwgYW5kIEkgd2lsbCBnaXZlIHlvdSBvbmUgb2Ygbm8gbGVzcyB2YWx1ZSBpbiByZXR1cm4uIg0KDQpXaXRoIHRoZXNlIHdvcmRzIHNoZSBmbGV3IGF3YXkgbGlrZSBhIGJpcmQgaW50byB0aGUgYWlyLCBidXQgc2hlIGhhZCBnaXZlbiBUZWxlbWFjaHVzIGNvdXJhZ2UsIGFuZCBoYWQgbWFkZSBoaW0gdGhpbmsgbW9yZSB0aGFuIGV2ZXIgYWJvdXQgaGlzIGZhdGhlci4gSGUgZmVsdCB0aGUgY2hhbmdlLCB3b25kZXJlZCBhdCBpdCwgYW5kIGtuZXcgdGhhdCB0aGUgc3RyYW5nZXIgaGFkIGJlZW4gYSBnb2QsIHNvIGhlIHdlbnQgc3RyYWlnaHQgdG8gd2hlcmUgdGhlIHN1aXRvcnMgd2VyZSBzaXR0aW5nLg0KDQpQaGVtaXVzIHdhcyBzdGlsbCBzaW5naW5nLCBhbmQgaGlzIGhlYXJlcnMgc2F0IHJhcHQgaW4gc2lsZW5jZSBhcyBoZSB0b2xkIHRoZSBzYWQgdGFsZSBvZiB0aGUgcmV0dXJuIGZyb20gVHJveSwgYW5kIHRoZSBpbGxzIE1pbmVydmEgaGFkIGxhaWQgdXBvbiB0aGUgQWNoYWVhbnMuIFBlbmVsb3BlLCBkYXVnaHRlciBvZiBJY2FyaXVzLCBoZWFyZCBoaXMgc29uZyBmcm9tIGhlciByb29tIHVwc3RhaXJzLCBhbmQgY2FtZSBkb3duIGJ5IHRoZSBncmVhdCBzdGFpcmNhc2UsIG5vdCBhbG9uZSwgYnV0IGF0dGVuZGVkIGJ5IHR3byBvZiBoZXIgaGFuZG1haWRzLiBXaGVuIHNoZSByZWFjaGVkIHRoZSBzdWl0b3JzIHNoZSBzdG9vZCBieSBvbmUgb2YgdGhlIGJlYXJpbmcgcG9zdHMgdGhhdCBzdXBwb3J0ZWQgdGhlIHJvb2Ygb2YgdGhlIGNsb2lzdGVycyB3aXRoIGEgc3RhaWQgbWFpZGVuIG9uIGVpdGhlciBzaWRlIG9mIGhlci4gU2hlIGhlbGQgYSB2ZWlsLCBtb3Jlb3ZlciwgYmVmb3JlIGhlciBmYWNlLCBhbmQgd2FzIHdlZXBpbmcgYml0dGVybHkuDQoNCiJQaGVtaXVzLCIgc2hlIGNyaWVkLCAieW91IGtub3cgbWFueSBhbm90aGVyIGZlYXQgb2YgZ29kcyBhbmQgaGVyb2VzLCBzdWNoIGFzIHBvZXRzIGxvdmUgdG8gY2VsZWJyYXRlLiBTaW5nIHRoZSBzdWl0b3JzIHNvbWUgb25lIG9mIHRoZXNlLCBhbmQgbGV0IHRoZW0gZHJpbmsgdGhlaXIgd2luZSBpbiBzaWxlbmNlLCBidXQgY2Vhc2UgdGhpcyBzYWQgdGFsZSwgZm9yIGl0IGJyZWFrcyBteSBzb3Jyb3dmdWwgaGVhcnQsIGFuZCByZW1pbmRzIG1lIG9mIG15IGxvc3QgaHVzYmFuZCB3aG9tIEkgbW91cm4gZXZlciB3aXRob3V0IGNlYXNpbmcsIGFuZCB3aG9zZSBuYW1lIHdhcyBncmVhdCBvdmVyIGFsbCBIZWxsYXMgYW5kIG1pZGRsZSBBcmdvcy4iDQoNCiJNb3RoZXIsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAibGV0IHRoZSBiYXJkIHNpbmcgd2hhdCBoZSBoYXMgYSBtaW5kIHRvOyBiYXJkcyBkbyBub3QgbWFrZSB0aGUgaWxscyB0aGV5IHNpbmcgb2Y7IGl0IGlzIEpvdmUsIG5vdCB0aGV5LCB3aG8gbWFrZXMgdGhlbSwgYW5kIHdobyBzZW5kcyB3ZWFsIG9yIHdvZSB1cG9uIG1hbmtpbmQgYWNjb3JkaW5nIHRvIGhpcyBvd24gZ29vZCBwbGVhc3VyZS4gVGhpcyBmZWxsb3cgbWVhbnMgbm8gaGFybSBieSBzaW5naW5nIHRoZSBpbGwtZmF0ZWQgcmV0dXJuIG9mIHRoZSBEYW5hYW5zLCBmb3IgcGVvcGxlIGFsd2F5cyBhcHBsYXVkIHRoZSBsYXRlc3Qgc29uZ3MgbW9zdCB3YXJtbHkuIE1ha2UgdXAgeW91ciBtaW5kIHRvIGl0IGFuZCBiZWFyIGl0OyBVbHlzc2VzIGlzIG5vdCB0aGUgb25seSBtYW4gd2hvIG5ldmVyIGNhbWUgYmFjayBmcm9tIFRyb3ksIGJ1dCBtYW55IGFub3RoZXIgd2VudCBkb3duIGFzIHdlbGwgYXMgaGUuIEdvLCB0aGVuLCB3aXRoaW4gdGhlIGhvdXNlIGFuZCBidXN5IHlvdXJzZWxmIHdpdGggeW91ciBkYWlseSBkdXRpZXMsIHlvdXIgbG9vbSwgeW91ciBkaXN0YWZmLCBhbmQgdGhlIG9yZGVyaW5nIG9mIHlvdXIgc2VydmFudHM7IGZvciBzcGVlY2ggaXMgbWFuJ3MgbWF0dGVyLCBhbmQgbWluZSBhYm92ZSBhbGwgb3RoZXJzLSBmb3IgaXQgaXMgSSB3aG8gYW0gbWFzdGVyIGhlcmUuIg0KDQpTaGUgd2VudCB3b25kZXJpbmcgYmFjayBpbnRvIHRoZSBob3VzZSwgYW5kIGxhaWQgaGVyIHNvbidzIHNheWluZyBpbiBoZXIgaGVhcnQuIFRoZW4sIGdvaW5nIHVwc3RhaXJzIHdpdGggaGVyIGhhbmRtYWlkcyBpbnRvIGhlciByb29tLCBzaGUgbW91cm5lZCBoZXIgZGVhciBodXNiYW5kIHRpbGwgTWluZXJ2YSBzaGVkIHN3ZWV0IHNsZWVwIG92ZXIgaGVyIGV5ZXMuIEJ1dCB0aGUgc3VpdG9ycyB3ZXJlIGNsYW1vcm91cyB0aHJvdWdob3V0IHRoZSBjb3ZlcmVkIGNsb2lzdGVycywgYW5kIHByYXllZCBlYWNoIG9uZSB0aGF0IGhlIG1pZ2h0IGJlIGhlciBiZWQgZmVsbG93Lg0KDQpUaGVuIFRlbGVtYWNodXMgc3Bva2UsICJTaGFtZWxlc3MsIiBoZSBjcmllZCwgImFuZCBpbnNvbGVudCBzdWl0b3JzLCBsZXQgdXMgZmVhc3QgYXQgb3VyIHBsZWFzdXJlIG5vdywgYW5kIGxldCB0aGVyZSBiZSBubyBicmF3bGluZywgZm9yIGl0IGlzIGEgcmFyZSB0aGluZyB0byBoZWFyIGEgbWFuIHdpdGggc3VjaCBhIGRpdmluZSB2b2ljZSBhcyBQaGVtaXVzIGhhczsgYnV0IGluIHRoZSBtb3JuaW5nIG1lZXQgbWUgaW4gZnVsbCBhc3NlbWJseSB0aGF0IEkgbWF5IGdpdmUgeW91IGZvcm1hbCBub3RpY2UgdG8gZGVwYXJ0LCBhbmQgZmVhc3QgYXQgb25lIGFub3RoZXIncyBob3VzZXMsIHR1cm4gYW5kIHR1cm4gYWJvdXQsIGF0IHlvdXIgb3duIGNvc3QuIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBjaG9vc2UgdG8gcGVyc2lzdCBpbiBzcHVuZ2luZyB1cG9uIG9uZSBtYW4sIGhlYXZlbiBoZWxwIG1lLCBidXQgSm92ZSBzaGFsbCByZWNrb24gd2l0aCB5b3UgaW4gZnVsbCwgYW5kIHdoZW4geW91IGZhbGwgaW4gbXkgZmF0aGVyJ3MgaG91c2UgdGhlcmUgc2hhbGwgYmUgbm8gbWFuIHRvIGF2ZW5nZSB5b3UuIg0KDQpUaGUgc3VpdG9ycyBiaXQgdGhlaXIgbGlwcyBhcyB0aGV5IGhlYXJkIGhpbSwgYW5kIG1hcnZlbGxlZCBhdCB0aGUgYm9sZG5lc3Mgb2YgaGlzIHNwZWVjaC4gVGhlbiwgQW50aW5vdXMsIHNvbiBvZiBFdXBlaXRoZXMsIHNhaWQsICJUaGUgZ29kcyBzZWVtIHRvIGhhdmUgZ2l2ZW4geW91IGxlc3NvbnMgaW4gYmx1c3RlciBhbmQgdGFsbCB0YWxraW5nOyBtYXkgSm92ZSBuZXZlciBncmFudCB5b3UgdG8gYmUgY2hpZWYgaW4gSXRoYWNhIGFzIHlvdXIgZmF0aGVyIHdhcyBiZWZvcmUgeW91LiINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCwgIkFudGlub3VzLCBkbyBub3QgY2hpZGUgd2l0aCBtZSwgYnV0LCBnb2Qgd2lsbGluZywgSSB3aWxsIGJlIGNoaWVmIHRvbyBpZiBJIGNhbi4gSXMgdGhpcyB0aGUgd29yc3QgZmF0ZSB5b3UgY2FuIHRoaW5rIG9mIGZvciBtZT8gSXQgaXMgbm8gYmFkIHRoaW5nIHRvIGJlIGEgY2hpZWYsIGZvciBpdCBicmluZ3MgYm90aCByaWNoZXMgYW5kIGhvbm91ci4gU3RpbGwsIG5vdyB0aGF0IFVseXNzZXMgaXMgZGVhZCB0aGVyZSBhcmUgbWFueSBncmVhdCBtZW4gaW4gSXRoYWNhIGJvdGggb2xkIGFuZCB5b3VuZywgYW5kIHNvbWUgb3RoZXIgbWF5IHRha2UgdGhlIGxlYWQgYW1vbmcgdGhlbTsgbmV2ZXJ0aGVsZXNzIEkgd2lsbCBiZSBjaGllZiBpbiBteSBvd24gaG91c2UsIGFuZCB3aWxsIHJ1bGUgdGhvc2Ugd2hvbSBVbHlzc2VzIGhhcyB3b24gZm9yIG1lLiINCg0KVGhlbiBFdXJ5bWFjaHVzLCBzb24gb2YgUG9seWJ1cywgYW5zd2VyZWQsICJJdCByZXN0cyB3aXRoIGhlYXZlbiB0byBkZWNpZGUgd2hvIHNoYWxsIGJlIGNoaWVmIGFtb25nIHVzLCBidXQgeW91IHNoYWxsIGJlIG1hc3RlciBpbiB5b3VyIG93biBob3VzZSBhbmQgb3ZlciB5b3VyIG93biBwb3NzZXNzaW9uczsgbm8gb25lIHdoaWxlIHRoZXJlIGlzIGEgbWFuIGluIEl0aGFjYSBzaGFsbCBkbyB5b3UgdmlvbGVuY2Ugbm9yIHJvYiB5b3UuIEFuZCBub3csIG15IGdvb2QgZmVsbG93LCBJIHdhbnQgdG8ga25vdyBhYm91dCB0aGlzIHN0cmFuZ2VyLiBXaGF0IGNvdW50cnkgZG9lcyBoZSBjb21lIGZyb20/IE9mIHdoYXQgZmFtaWx5IGlzIGhlLCBhbmQgd2hlcmUgaXMgaGlzIGVzdGF0ZT8gSGFzIGhlIGJyb3VnaHQgeW91IG5ld3MgYWJvdXQgdGhlIHJldHVybiBvZiB5b3VyIGZhdGhlciwgb3Igd2FzIGhlIG9uIGJ1c2luZXNzIG9mIGhpcyBvd24/IEhlIHNlZW1lZCBhIHdlbGwtdG8tZG8gbWFuLCBidXQgaGUgaHVycmllZCBvZmYgc28gc3VkZGVubHkgdGhhdCBoZSB3YXMgZ29uZSBpbiBhIG1vbWVudCBiZWZvcmUgd2UgY291bGQgZ2V0IHRvIGtub3cgaGltLiINCg0KIk15IGZhdGhlciBpcyBkZWFkIGFuZCBnb25lLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgImFuZCBldmVuIGlmIHNvbWUgcnVtb3VyIHJlYWNoZXMgbWUgSSBwdXQgbm8gbW9yZSBmYWl0aCBpbiBpdCBub3cuIE15IG1vdGhlciBkb2VzIGluZGVlZCBzb21ldGltZXMgc2VuZCBmb3IgYSBzb290aHNheWVyIGFuZCBxdWVzdGlvbiBoaW0sIGJ1dCBJIGdpdmUgaGlzIHByb3BoZWN5aW5ncyBubyBoZWVkLiBBcyBmb3IgdGhlIHN0cmFuZ2VyLCBoZSB3YXMgTWVudGVzLCBzb24gb2YgQW5jaGlhbHVzLCBjaGllZiBvZiB0aGUgVGFwaGlhbnMsIGFuIG9sZCBmcmllbmQgb2YgbXkgZmF0aGVyJ3MuIiBCdXQgaW4gaGlzIGhlYXJ0IGhlIGtuZXcgdGhhdCBpdCBoYWQgYmVlbiB0aGUgZ29kZGVzcy4NCg0KVGhlIHN1aXRvcnMgdGhlbiByZXR1cm5lZCB0byB0aGVpciBzaW5naW5nIGFuZCBkYW5jaW5nIHVudGlsIHRoZSBldmVuaW5nOyBidXQgd2hlbiBuaWdodCBmZWxsIHVwb24gdGhlaXIgcGxlYXN1cmluZyB0aGV5IHdlbnQgaG9tZSB0byBiZWQgZWFjaCBpbiBoaXMgb3duIGFib2RlLiBUZWxlbWFjaHVzJ3Mgcm9vbSB3YXMgaGlnaCB1cCBpbiBhIHRvd2VyIHRoYXQgbG9va2VkIG9uIHRvIHRoZSBvdXRlciBjb3VydDsgaGl0aGVyLCB0aGVuLCBoZSBoaWVkLCBicm9vZGluZyBhbmQgZnVsbCBvZiB0aG91Z2h0LiBBIGdvb2Qgb2xkIHdvbWFuLCBFdXJ5Y2xlYSwgZGF1Z2h0ZXIgb2YgT3BzLCB0aGUgc29uIG9mIFBpc2Vub3IsIHdlbnQgYmVmb3JlIGhpbSB3aXRoIGEgY291cGxlIG9mIGJsYXppbmcgdG9yY2hlcy4gTGFlcnRlcyBoYWQgYm91Z2h0IGhlciB3aXRoIGhpcyBvd24gbW9uZXkgd2hlbiBzaGUgd2FzIHF1aXRlIHlvdW5nOyBoZSBnYXZlIHRoZSB3b3J0aCBvZiB0d2VudHkgb3hlbiBmb3IgaGVyLCBhbmQgc2hld2VkIGFzIG11Y2ggcmVzcGVjdCB0byBoZXIgaW4gaGlzIGhvdXNlaG9sZCBhcyBoZSBkaWQgdG8gaGlzIG93biB3ZWRkZWQgd2lmZSwgYnV0IGhlIGRpZCBub3QgdGFrZSBoZXIgdG8gaGlzIGJlZCBmb3IgaGUgZmVhcmVkIGhpcyB3aWZlJ3MgcmVzZW50bWVudC4gU2hlIGl0IHdhcyB3aG8gbm93IGxpZ2h0ZWQgVGVsZW1hY2h1cyB0byBoaXMgcm9vbSwgYW5kIHNoZSBsb3ZlZCBoaW0gYmV0dGVyIHRoYW4gYW55IG9mIHRoZSBvdGhlciB3b21lbiBpbiB0aGUgaG91c2UgZGlkLCBmb3Igc2hlIGhhZCBudXJzZWQgaGltIHdoZW4gaGUgd2FzIGEgYmFieS4gSGUgb3BlbmVkIHRoZSBkb29yIG9mIGhpcyBiZWQgcm9vbSBhbmQgc2F0IGRvd24gdXBvbiB0aGUgYmVkOyBhcyBoZSB0b29rIG9mZiBoaXMgc2hpcnQgaGUgZ2F2ZSBpdCB0byB0aGUgZ29vZCBvbGQgd29tYW4sIHdobyBmb2xkZWQgaXQgdGlkaWx5IHVwLCBhbmQgaHVuZyBpdCBmb3IgaGltIG92ZXIgYSBwZWcgYnkgaGlzIGJlZCBzaWRlLCBhZnRlciB3aGljaCBzaGUgd2VudCBvdXQsIHB1bGxlZCB0aGUgZG9vciB0byBieSBhIHNpbHZlciBjYXRjaCwgYW5kIGRyZXcgdGhlIGJvbHQgaG9tZSBieSBtZWFucyBvZiB0aGUgc3RyYXAuIEJ1dCBUZWxlbWFjaHVzIGFzIGhlIGxheSBjb3ZlcmVkIHdpdGggYSB3b29sbGVuIGZsZWVjZSBrZXB0IHRoaW5raW5nIGFsbCBuaWdodCB0aHJvdWdoIG9mIGhpcyBpbnRlbmRlZCB2b3lhZ2Ugb2YgdGhlIGNvdW5zZWwgdGhhdCBNaW5lcnZhIGhhZCBnaXZlbiBoaW0uDQoNCkJvb2sgSUkNCg0KTm93IHdoZW4gdGhlIGNoaWxkIG9mIG1vcm5pbmcsIHJvc3ktZmluZ2VyZWQgRGF3biwgYXBwZWFyZWQsIFRlbGVtYWNodXMgcm9zZSBhbmQgZHJlc3NlZCBoaW1zZWxmLiBIZSBib3VuZCBoaXMgc2FuZGFscyBvbiB0byBoaXMgY29tZWx5IGZlZXQsIGdpcmRlZCBoaXMgc3dvcmQgYWJvdXQgaGlzIHNob3VsZGVyLCBhbmQgbGVmdCBoaXMgcm9vbSBsb29raW5nIGxpa2UgYW4gaW1tb3J0YWwgZ29kLiBIZSBhdCBvbmNlIHNlbnQgdGhlIGNyaWVycyByb3VuZCB0byBjYWxsIHRoZSBwZW9wbGUgaW4gYXNzZW1ibHksIHNvIHRoZXkgY2FsbGVkIHRoZW0gYW5kIHRoZSBwZW9wbGUgZ2F0aGVyZWQgdGhlcmVvbjsgdGhlbiwgd2hlbiB0aGV5IHdlcmUgZ290IHRvZ2V0aGVyLCBoZSB3ZW50IHRvIHRoZSBwbGFjZSBvZiBhc3NlbWJseSBzcGVhciBpbiBoYW5kLSBub3QgYWxvbmUsIGZvciBoaXMgdHdvIGhvdW5kcyB3ZW50IHdpdGggaGltLiBNaW5lcnZhIGVuZG93ZWQgaGltIHdpdGggYSBwcmVzZW5jZSBvZiBzdWNoIGRpdmluZSBjb21lbGluZXNzIHRoYXQgYWxsIG1hcnZlbGxlZCBhdCBoaW0gYXMgaGUgd2VudCBieSwgYW5kIHdoZW4gaGUgdG9vayBoaXMgcGxhY2UnIGluIGhpcyBmYXRoZXIncyBzZWF0IGV2ZW4gdGhlIG9sZGVzdCBjb3VuY2lsbG9ycyBtYWRlIHdheSBmb3IgaGltLg0KDQpBZWd5cHRpdXMsIGEgbWFuIGJlbnQgZG91YmxlIHdpdGggYWdlLCBhbmQgb2YgaW5maW5pdGUgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHRvIHNwZWFrIEhpcyBzb24gQW50aXBodXMgaGFkIGdvbmUgd2l0aCBVbHlzc2VzIHRvIElsaXVzLCBsYW5kIG9mIG5vYmxlIHN0ZWVkcywgYnV0IHRoZSBzYXZhZ2UgQ3ljbG9wcyBoYWQga2lsbGVkIGhpbSB3aGVuIHRoZXkgd2VyZSBhbGwgc2h1dCB1cCBpbiB0aGUgY2F2ZSwgYW5kIGhhZCBjb29rZWQgaGlzIGxhc3QgZGlubmVyIGZvciBoaW0sIEhlIGhhZCB0aHJlZSBzb25zIGxlZnQsIG9mIHdob20gdHdvIHN0aWxsIHdvcmtlZCBvbiB0aGVpciBmYXRoZXIncyBsYW5kLCB3aGlsZSB0aGUgdGhpcmQsIEV1cnlub211cywgd2FzIG9uZSBvZiB0aGUgc3VpdG9yczsgbmV2ZXJ0aGVsZXNzIHRoZWlyIGZhdGhlciBjb3VsZCBub3QgZ2V0IG92ZXIgdGhlIGxvc3Mgb2YgQW50aXBodXMsIGFuZCB3YXMgc3RpbGwgd2VlcGluZyBmb3IgaGltIHdoZW4gaGUgYmVnYW4gaGlzIHNwZWVjaC4NCg0KIk1lbiBvZiBJdGhhY2EsIiBoZSBzYWlkLCAiaGVhciBteSB3b3Jkcy4gRnJvbSB0aGUgZGF5IFVseXNzZXMgbGVmdCB1cyB0aGVyZSBoYXMgYmVlbiBubyBtZWV0aW5nIG9mIG91ciBjb3VuY2lsbG9ycyB1bnRpbCBub3c7IHdobyB0aGVuIGNhbiBpdCBiZSwgd2hldGhlciBvbGQgb3IgeW91bmcsIHRoYXQgZmluZHMgaXQgc28gbmVjZXNzYXJ5IHRvIGNvbnZlbmUgdXM/IEhhcyBoZSBnb3Qgd2luZCBvZiBzb21lIGhvc3QgYXBwcm9hY2hpbmcsIGFuZCBkb2VzIGhlIHdpc2ggdG8gd2FybiB1cywgb3Igd291bGQgaGUgc3BlYWsgdXBvbiBzb21lIG90aGVyIG1hdHRlciBvZiBwdWJsaWMgbW9tZW50PyBJIGFtIHN1cmUgaGUgaXMgYW4gZXhjZWxsZW50IHBlcnNvbiwgYW5kIEkgaG9wZSBKb3ZlIHdpbGwgZ3JhbnQgaGltIGhpcyBoZWFydCdzIGRlc2lyZS4iDQoNClRlbGVtYWNodXMgdG9vayB0aGlzIHNwZWVjaCBhcyBvZiBnb29kIG9tZW4gYW5kIHJvc2UgYXQgb25jZSwgZm9yIGhlIHdhcyBidXJzdGluZyB3aXRoIHdoYXQgaGUgaGFkIHRvIHNheS4gSGUgc3Rvb2QgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYXNzZW1ibHkgYW5kIHRoZSBnb29kIGhlcmFsZCBQaXNlbm9yIGJyb3VnaHQgaGltIGhpcyBzdGFmZi4gVGhlbiwgdHVybmluZyB0byBBZWd5cHRpdXMsICJTaXIsIiBzYWlkIGhlLCAiaXQgaXMgSSwgYXMgeW91IHdpbGwgc2hvcnRseSBsZWFybiwgd2hvIGhhdmUgY29udmVuZWQgeW91LCBmb3IgaXQgaXMgSSB3aG8gYW0gdGhlIG1vc3QgYWdncmlldmVkLiBJIGhhdmUgbm90IGdvdCB3aW5kIG9mIGFueSBob3N0IGFwcHJvYWNoaW5nIGFib3V0IHdoaWNoIEkgd291bGQgd2FybiB5b3UsIG5vciBpcyB0aGVyZSBhbnkgbWF0dGVyIG9mIHB1YmxpYyBtb21lbnQgb24gd2hpY2ggSSB3b3VsZCBzcGVhay4gTXkgZ3JpZXZlYW5jZSBpcyBwdXJlbHkgcGVyc29uYWwsIGFuZCB0dXJucyBvbiB0d28gZ3JlYXQgbWlzZm9ydHVuZXMgd2hpY2ggaGF2ZSBmYWxsZW4gdXBvbiBteSBob3VzZS4gVGhlIGZpcnN0IG9mIHRoZXNlIGlzIHRoZSBsb3NzIG9mIG15IGV4Y2VsbGVudCBmYXRoZXIsIHdobyB3YXMgY2hpZWYgYW1vbmcgYWxsIHlvdSBoZXJlIHByZXNlbnQsIGFuZCB3YXMgbGlrZSBhIGZhdGhlciB0byBldmVyeSBvbmUgb2YgeW91OyB0aGUgc2Vjb25kIGlzIG11Y2ggbW9yZSBzZXJpb3VzLCBhbmQgZXJlIGxvbmcgd2lsbCBiZSB0aGUgdXR0ZXIgcnVpbiBvZiBteSBlc3RhdGUuIFRoZSBzb25zIG9mIGFsbCB0aGUgY2hpZWYgbWVuIGFtb25nIHlvdSBhcmUgcGVzdGVyaW5nIG15IG1vdGhlciB0byBtYXJyeSB0aGVtIGFnYWluc3QgaGVyIHdpbGwuIFRoZXkgYXJlIGFmcmFpZCB0byBnbyB0byBoZXIgZmF0aGVyIEljYXJpdXMsIGFza2luZyBoaW0gdG8gY2hvb3NlIHRoZSBvbmUgaGUgbGlrZXMgYmVzdCwgYW5kIHRvIHByb3ZpZGUgbWFycmlhZ2UgZ2lmdHMgZm9yIGhpcyBkYXVnaHRlciwgYnV0IGRheSBieSBkYXkgdGhleSBrZWVwIGhhbmdpbmcgYWJvdXQgbXkgZmF0aGVyJ3MgaG91c2UsIHNhY3JpZmljaW5nIG91ciBveGVuLCBzaGVlcCwgYW5kIGZhdCBnb2F0cyBmb3IgdGhlaXIgYmFucXVldHMsIGFuZCBuZXZlciBnaXZpbmcgc28gbXVjaCBhcyBhIHRob3VnaHQgdG8gdGhlIHF1YW50aXR5IG9mIHdpbmUgdGhleSBkcmluay4gTm8gZXN0YXRlIGNhbiBzdGFuZCBzdWNoIHJlY2tsZXNzbmVzczsgd2UgaGF2ZSBub3cgbm8gVWx5c3NlcyB0byB3YXJkIG9mZiBoYXJtIGZyb20gb3VyIGRvb3JzLCBhbmQgSSBjYW5ub3QgaG9sZCBteSBvd24gYWdhaW5zdCB0aGVtLiBJIHNoYWxsIG5ldmVyIGFsbCBteSBkYXlzIGJlIGFzIGdvb2QgYSBtYW4gYXMgaGUgd2FzLCBzdGlsbCBJIHdvdWxkIGluZGVlZCBkZWZlbmQgbXlzZWxmIGlmIEkgaGFkIHBvd2VyIHRvIGRvIHNvLCBmb3IgSSBjYW5ub3Qgc3RhbmQgc3VjaCB0cmVhdG1lbnQgYW55IGxvbmdlcjsgbXkgaG91c2UgaXMgYmVpbmcgZGlzZ3JhY2VkIGFuZCBydWluZWQuIEhhdmUgcmVzcGVjdCwgdGhlcmVmb3JlLCB0byB5b3VyIG93biBjb25zY2llbmNlcyBhbmQgdG8gcHVibGljIG9waW5pb24uIEZlYXIsIHRvbywgdGhlIHdyYXRoIG9mIGhlYXZlbiwgbGVzdCB0aGUgZ29kcyBzaG91bGQgYmUgZGlzcGxlYXNlZCBhbmQgdHVybiB1cG9uIHlvdS4gSSBwcmF5IHlvdSBieSBKb3ZlIGFuZCBUaGVtaXMsIHdobyBpcyB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIGNvdW5jaWxzLCBbZG8gbm90XSBob2xkIGJhY2ssIG15IGZyaWVuZHMsIGFuZCBsZWF2ZSBtZSBzaW5nbGVoYW5kZWQtIHVubGVzcyBpdCBiZSB0aGF0IG15IGJyYXZlIGZhdGhlciBVbHlzc2VzIGRpZCBzb21lIHdyb25nIHRvIHRoZSBBY2hhZWFucyB3aGljaCB5b3Ugd291bGQgbm93IGF2ZW5nZSBvbiBtZSwgYnkgYWlkaW5nIGFuZCBhYmV0dGluZyB0aGVzZSBzdWl0b3JzLiBNb3Jlb3ZlciwgaWYgSSBhbSB0byBiZSBlYXRlbiBvdXQgb2YgaG91c2UgYW5kIGhvbWUgYXQgYWxsLCBJIGhhZCByYXRoZXIgeW91IGRpZCB0aGUgZWF0aW5nIHlvdXJzZWx2ZXMsIGZvciBJIGNvdWxkIHRoZW4gdGFrZSBhY3Rpb24gYWdhaW5zdCB5b3UgdG8gc29tZSBwdXJwb3NlLCBhbmQgc2VydmUgeW91IHdpdGggbm90aWNlcyBmcm9tIGhvdXNlIHRvIGhvdXNlIHRpbGwgSSBnb3QgcGFpZCBpbiBmdWxsLCB3aGVyZWFzIG5vdyBJIGhhdmUgbm8gcmVtZWR5LiINCg0KV2l0aCB0aGlzIFRlbGVtYWNodXMgZGFzaGVkIGhpcyBzdGFmZiB0byB0aGUgZ3JvdW5kIGFuZCBidXJzdCBpbnRvIHRlYXJzLiBFdmVyeSBvbmUgd2FzIHZlcnkgc29ycnkgZm9yIGhpbSwgYnV0IHRoZXkgYWxsIHNhdCBzdGlsbCBhbmQgbm8gb25lIHZlbnR1cmVkIHRvIG1ha2UgaGltIGFuIGFuZ3J5IGFuc3dlciwgc2F2ZSBvbmx5IEFudGlub3VzLCB3aG8gc3Bva2UgdGh1czoNCg0KIlRlbGVtYWNodXMsIGluc29sZW50IGJyYWdnYXJ0IHRoYXQgeW91IGFyZSwgaG93IGRhcmUgeW91IHRyeSB0byB0aHJvdyB0aGUgYmxhbWUgdXBvbiB1cyBzdWl0b3JzPyBJdCBpcyB5b3VyIG1vdGhlcidzIGZhdWx0IG5vdCBvdXJzLCBmb3Igc2hlIGlzIGEgdmVyeSBhcnRmdWwgd29tYW4uIFRoaXMgdGhyZWUgeWVhcnMgcGFzdCwgYW5kIGNsb3NlIG9uIGZvdXIsIHNoZSBoYXMgYmVlbiBkcml2aW5nIHVzIG91dCBvZiBvdXIgbWluZHMsIGJ5IGVuY291cmFnaW5nIGVhY2ggb25lIG9mIHVzLCBhbmQgc2VuZGluZyBoaW0gbWVzc2FnZXMgd2l0aG91dCBtZWFuaW5nIG9uZSB3b3JkIG9mIHdoYXQgc2hlIHNheXMuIEFuZCB0aGVuIHRoZXJlIHdhcyB0aGF0IG90aGVyIHRyaWNrIHNoZSBwbGF5ZWQgdXMuIFNoZSBzZXQgdXAgYSBncmVhdCB0YW1ib3VyIGZyYW1lIGluIGhlciByb29tLCBhbmQgYmVnYW4gdG8gd29yayBvbiBhbiBlbm9ybW91cyBwaWVjZSBvZiBmaW5lIG5lZWRsZXdvcmsuICdTd2VldCBoZWFydHMsJyBzYWlkIHNoZSwgJ1VseXNzZXMgaXMgaW5kZWVkIGRlYWQsIHN0aWxsIGRvIG5vdCBwcmVzcyBtZSB0byBtYXJyeSBhZ2FpbiBpbW1lZGlhdGVseSwgd2FpdC0gZm9yIEkgd291bGQgbm90IGhhdmUgc2tpbGwgaW4gbmVlZGxld29yayBwZXJpc2ggdW5yZWNvcmRlZC0gdGlsbCBJIGhhdmUgY29tcGxldGVkIGEgcGFsbCBmb3IgdGhlIGhlcm8gTGFlcnRlcywgdG8gYmUgaW4gcmVhZGluZXNzIGFnYWluc3QgdGhlIHRpbWUgd2hlbiBkZWF0aCBzaGFsbCB0YWtlIGhpbS4gSGUgaXMgdmVyeSByaWNoLCBhbmQgdGhlIHdvbWVuIG9mIHRoZSBwbGFjZSB3aWxsIHRhbGsgaWYgaGUgaXMgbGFpZCBvdXQgd2l0aG91dCBhIHBhbGwuJw0KDQoiVGhpcyB3YXMgd2hhdCBzaGUgc2FpZCwgYW5kIHdlIGFzc2VudGVkOyB3aGVyZW9uIHdlIGNvdWxkIHNlZSBoZXIgd29ya2luZyBvbiBoZXIgZ3JlYXQgd2ViIGFsbCBkYXkgbG9uZywgYnV0IGF0IG5pZ2h0IHNoZSB3b3VsZCB1bnBpY2sgdGhlIHN0aXRjaGVzIGFnYWluIGJ5IHRvcmNobGlnaHQuIFNoZSBmb29sZWQgdXMgaW4gdGhpcyB3YXkgZm9yIHRocmVlIHllYXJzIGFuZCB3ZSBuZXZlciBmb3VuZCBoZXIgb3V0LCBidXQgYXMgdGltZSB3b3JlIG9uIGFuZCBzaGUgd2FzIG5vdyBpbiBoZXIgZm91cnRoIHllYXIsIG9uZSBvZiBoZXIgbWFpZHMgd2hvIGtuZXcgd2hhdCBzaGUgd2FzIGRvaW5nIHRvbGQgdXMsIGFuZCB3ZSBjYXVnaHQgaGVyIGluIHRoZSBhY3Qgb2YgdW5kb2luZyBoZXIgd29yaywgc28gc2hlIGhhZCB0byBmaW5pc2ggaXQgd2hldGhlciBzaGUgd291bGQgb3Igbm8uIFRoZSBzdWl0b3JzLCB0aGVyZWZvcmUsIG1ha2UgeW91IHRoaXMgYW5zd2VyLCB0aGF0IGJvdGggeW91IGFuZCB0aGUgQWNoYWVhbnMgbWF5IHVuZGVyc3RhbmQtJ1NlbmQgeW91ciBtb3RoZXIgYXdheSwgYW5kIGJpZCBoZXIgbWFycnkgdGhlIG1hbiBvZiBoZXIgb3duIGFuZCBvZiBoZXIgZmF0aGVyJ3MgY2hvaWNlJzsgZm9yIEkgZG8gbm90IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiBzaGUgZ29lcyBvbiBwbGFndWluZyB1cyBtdWNoIGxvbmdlciB3aXRoIHRoZSBhaXJzIHNoZSBnaXZlcyBoZXJzZWxmIG9uIHRoZSBzY29yZSBvZiB0aGUgYWNjb21wbGlzaG1lbnRzIE1pbmVydmEgaGFzIHRhdWdodCBoZXIsIGFuZCBiZWNhdXNlIHNoZSBpcyBzbyBjbGV2ZXIuIFdlIG5ldmVyIHlldCBoZWFyZCBvZiBzdWNoIGEgd29tYW47IHdlIGtub3cgYWxsIGFib3V0IFR5cm8sIEFsY21lbmEsIE15Y2VuZSwgYW5kIHRoZSBmYW1vdXMgd29tZW4gb2Ygb2xkLCBidXQgdGhleSB3ZXJlIG5vdGhpbmcgdG8geW91ciBtb3RoZXIsIGFueSBvbmUgb2YgdGhlbS4gSXQgd2FzIG5vdCBmYWlyIG9mIGhlciB0byB0cmVhdCB1cyBpbiB0aGF0IHdheSwgYW5kIGFzIGxvbmcgYXMgc2hlIGNvbnRpbnVlcyBpbiB0aGUgbWluZCB3aXRoIHdoaWNoIGhlYXZlbiBoYXMgbm93IGVuZG93ZWQgaGVyLCBzbyBsb25nIHNoYWxsIHdlIGdvIG9uIGVhdGluZyB1cCB5b3VyIGVzdGF0ZTsgYW5kIEkgZG8gbm90IHNlZSB3aHkgc2hlIHNob3VsZCBjaGFuZ2UsIGZvciBzaGUgZ2V0cyBhbGwgdGhlIGhvbm91ciBhbmQgZ2xvcnksIGFuZCBpdCBpcyB5b3Ugd2hvIHBheSBmb3IgaXQsIG5vdCBzaGUuIFVuZGVyc3RhbmQsIHRoZW4sIHRoYXQgd2Ugd2lsbCBub3QgZ28gYmFjayB0byBvdXIgbGFuZHMsIG5laXRoZXIgaGVyZSBub3IgZWxzZXdoZXJlLCB0aWxsIHNoZSBoYXMgbWFkZSBoZXIgY2hvaWNlIGFuZCBtYXJyaWVkIHNvbWUgb25lIG9yIG90aGVyIG9mIHVzLiINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCwgIkFudGlub3VzLCBob3cgY2FuIEkgZHJpdmUgdGhlIG1vdGhlciB3aG8gYm9yZSBtZSBmcm9tIG15IGZhdGhlcidzIGhvdXNlPyBNeSBmYXRoZXIgaXMgYWJyb2FkIGFuZCB3ZSBkbyBub3Qga25vdyB3aGV0aGVyIGhlIGlzIGFsaXZlIG9yIGRlYWQuIEl0IHdpbGwgYmUgaGFyZCBvbiBtZSBpZiBJIGhhdmUgdG8gcGF5IEljYXJpdXMgdGhlIGxhcmdlIHN1bSB3aGljaCBJIG11c3QgZ2l2ZSBoaW0gaWYgSSBpbnNpc3Qgb24gc2VuZGluZyBoaXMgZGF1Z2h0ZXIgYmFjayB0byBoaW0uIE5vdCBvbmx5IHdpbGwgaGUgZGVhbCByaWdvcm91c2x5IHdpdGggbWUsIGJ1dCBoZWF2ZW4gd2lsbCBhbHNvIHB1bmlzaCBtZTsgZm9yIG15IG1vdGhlciB3aGVuIHNoZSBsZWF2ZXMgdGhlIGhvdXNlIHdpbGwgY2FsZiBvbiB0aGUgRXJpbnllcyB0byBhdmVuZ2UgaGVyOyBiZXNpZGVzLCBpdCB3b3VsZCBub3QgYmUgYSBjcmVkaXRhYmxlIHRoaW5nIHRvIGRvLCBhbmQgSSB3aWxsIGhhdmUgbm90aGluZyB0byBzYXkgdG8gaXQuIElmIHlvdSBjaG9vc2UgdG8gdGFrZSBvZmZlbmNlIGF0IHRoaXMsIGxlYXZlIHRoZSBob3VzZSBhbmQgZmVhc3QgZWxzZXdoZXJlIGF0IG9uZSBhbm90aGVyJ3MgaG91c2VzIGF0IHlvdXIgb3duIGNvc3QgdHVybiBhbmQgdHVybiBhYm91dC4gSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB5b3UgZWxlY3QgdG8gcGVyc2lzdCBpbiBzcHVuZ2luZyB1cG9uIG9uZSBtYW4sIGhlYXZlbiBoZWxwIG1lLCBidXQgSm92ZSBzaGFsbCByZWNrb24gd2l0aCB5b3UgaW4gZnVsbCwgYW5kIHdoZW4geW91IGZhbGwgaW4gbXkgZmF0aGVyJ3MgaG91c2UgdGhlcmUgc2hhbGwgYmUgbm8gbWFuIHRvIGF2ZW5nZSB5b3UuIg0KDQpBcyBoZSBzcG9rZSBKb3ZlIHNlbnQgdHdvIGVhZ2xlcyBmcm9tIHRoZSB0b3Agb2YgdGhlIG1vdW50YWluLCBhbmQgdGhleSBmbGV3IG9uIGFuZCBvbiB3aXRoIHRoZSB3aW5kLCBzYWlsaW5nIHNpZGUgYnkgc2lkZSBpbiB0aGVpciBvd24gbG9yZGx5IGZsaWdodC4gV2hlbiB0aGV5IHdlcmUgcmlnaHQgb3ZlciB0aGUgbWlkZGxlIG9mIHRoZSBhc3NlbWJseSB0aGV5IHdoZWVsZWQgYW5kIGNpcmNsZWQgYWJvdXQsIGJlYXRpbmcgdGhlIGFpciB3aXRoIHRoZWlyIHdpbmdzIGFuZCBnbGFyaW5nIGRlYXRoIGludG8gdGhlIGV5ZXMgb2YgdGhlbSB0aGF0IHdlcmUgYmVsb3c7IHRoZW4sIGZpZ2h0aW5nIGZpZXJjZWx5IGFuZCB0ZWFyaW5nIGF0IG9uZSBhbm90aGVyLCB0aGV5IGZsZXcgb2ZmIHRvd2FyZHMgdGhlIHJpZ2h0IG92ZXIgdGhlIHRvd24uIFRoZSBwZW9wbGUgd29uZGVyZWQgYXMgdGhleSBzYXcgdGhlbSwgYW5kIGFza2VkIGVhY2ggb3RoZXIgd2hhdCBhbiB0aGlzIG1pZ2h0IGJlOyB3aGVyZW9uIEhhbGl0aGVyc2VzLCB3aG8gd2FzIHRoZSBiZXN0IHByb3BoZXQgYW5kIHJlYWRlciBvZiBvbWVucyBhbW9uZyB0aGVtLCBzcG9rZSB0byB0aGVtIHBsYWlubHkgYW5kIGluIGFsbCBob25lc3R5LCBzYXlpbmc6DQoNCiJIZWFyIG1lLCBtZW4gb2YgSXRoYWNhLCBhbmQgSSBzcGVhayBtb3JlIHBhcnRpY3VsYXJseSB0byB0aGUgc3VpdG9ycywgZm9yIEkgc2VlIG1pc2NoaWVmIGJyZXdpbmcgZm9yIHRoZW0uIFVseXNzZXMgaXMgbm90IGdvaW5nIHRvIGJlIGF3YXkgbXVjaCBsb25nZXI7IGluZGVlZCBoZSBpcyBjbG9zZSBhdCBoYW5kIHRvIGRlYWwgb3V0IGRlYXRoIGFuZCBkZXN0cnVjdGlvbiwgbm90IG9uIHRoZW0gYWxvbmUsIGJ1dCBvbiBtYW55IGFub3RoZXIgb2YgdXMgd2hvIGxpdmUgaW4gSXRoYWNhLiBMZXQgdXMgdGhlbiBiZSB3aXNlIGluIHRpbWUsIGFuZCBwdXQgYSBzdG9wIHRvIHRoaXMgd2lja2VkbmVzcyBiZWZvcmUgaGUgY29tZXMuIExldCB0aGUgc3VpdG9ycyBkbyBzbyBvZiB0aGVpciBvd24gYWNjb3JkOyBpdCB3aWxsIGJlIGJldHRlciBmb3IgdGhlbSwgZm9yIEkgYW0gbm90IHByb3BoZXN5aW5nIHdpdGhvdXQgZHVlIGtub3dsZWRnZTsgZXZlcnl0aGluZyBoYXMgaGFwcGVuZWQgdG8gVWx5c3NlcyBhcyBJIGZvcmV0b2xkIHdoZW4gdGhlIEFyZ2l2ZXMgc2V0IG91dCBmb3IgVHJveSwgYW5kIGhlIHdpdGggdGhlbS4gSSBzYWlkIHRoYXQgYWZ0ZXIgZ29pbmcgdGhyb3VnaCBtdWNoIGhhcmRzaGlwIGFuZCBsb3NpbmcgYWxsIGhpcyBtZW4gaGUgc2hvdWxkIGNvbWUgaG9tZSBhZ2FpbiBpbiB0aGUgdHdlbnRpZXRoIHllYXIgYW5kIHRoYXQgbm8gb25lIHdvdWxkIGtub3cgaGltOyBhbmQgbm93IGFsbCB0aGlzIGlzIGNvbWluZyB0cnVlLiINCg0KRXVyeW1hY2h1cyBzb24gb2YgUG9seWJ1cyB0aGVuIHNhaWQsICJHbyBob21lLCBvbGQgbWFuLCBhbmQgcHJvcGhlc3kgdG8geW91ciBvd24gY2hpbGRyZW4sIG9yIGl0IG1heSBiZSB3b3JzZSBmb3IgdGhlbS4gSSBjYW4gcmVhZCB0aGVzZSBvbWVucyBteXNlbGYgbXVjaCBiZXR0ZXIgdGhhbiB5b3UgY2FuOyBiaXJkcyBhcmUgYWx3YXlzIGZseWluZyBhYm91dCBpbiB0aGUgc3Vuc2hpbmUgc29tZXdoZXJlIG9yIG90aGVyLCBidXQgdGhleSBzZWxkb20gbWVhbiBhbnl0aGluZy4gVWx5c3NlcyBoYXMgZGllZCBpbiBhIGZhciBjb3VudHJ5LCBhbmQgaXQgaXMgYSBwaXR5IHlvdSBhcmUgbm90IGRlYWQgYWxvbmcgd2l0aCBoaW0sIGluc3RlYWQgb2YgcHJhdGluZyBoZXJlIGFib3V0IG9tZW5zIGFuZCBhZGRpbmcgZnVlbCB0byB0aGUgYW5nZXIgb2YgVGVsZW1hY2h1cyB3aGljaCBpcyBmaWVyY2UgZW5vdWdoIGFzIGl0IGlzLiBJIHN1cHBvc2UgeW91IHRoaW5rIGhlIHdpbGwgZ2l2ZSB5b3Ugc29tZXRoaW5nIGZvciB5b3VyIGZhbWlseSwgYnV0IEkgdGVsbCB5b3UtIGFuZCBpdCBzaGFsbCBzdXJlbHkgYmUtIHdoZW4gYW4gb2xkIG1hbiBsaWtlIHlvdSwgd2hvIHNob3VsZCBrbm93IGJldHRlciwgdGFsa3MgYSB5b3VuZyBvbmUgb3ZlciB0aWxsIGhlIGJlY29tZXMgdHJvdWJsZXNvbWUsIGluIHRoZSBmaXJzdCBwbGFjZSBoaXMgeW91bmcgZnJpZW5kIHdpbGwgb25seSBmYXJlIHNvIG11Y2ggdGhlIHdvcnNlLSBoZSB3aWxsIHRha2Ugbm90aGluZyBieSBpdCwgZm9yIHRoZSBzdWl0b3JzIHdpbGwgcHJldmVudCB0aGlzLSBhbmQgaW4gdGhlIG5leHQsIHdlIHdpbGwgbGF5IGEgaGVhdmllciBmaW5lLCBzaXIsIHVwb24geW91cnNlbGYgdGhhbiB5b3Ugd2lsbCBhdCBhbGwgbGlrZSBwYXlpbmcsIGZvciBpdCB3aWxsIGJlYXIgaGFyZGx5IHVwb24geW91LiBBcyBmb3IgVGVsZW1hY2h1cywgSSB3YXJuIGhpbSBpbiB0aGUgcHJlc2VuY2Ugb2YgeW91IGFsbCB0byBzZW5kIGhpcyBtb3RoZXIgYmFjayB0byBoZXIgZmF0aGVyLCB3aG8gd2lsbCBmaW5kIGhlciBhIGh1c2JhbmQgYW5kIHByb3ZpZGUgaGVyIHdpdGggYWxsIHRoZSBtYXJyaWFnZSBnaWZ0cyBzbyBkZWFyIGEgZGF1Z2h0ZXIgbWF5IGV4cGVjdC4gVGlsbCB3ZSBzaGFsbCBnbyBvbiBoYXJhc3NpbmcgaGltIHdpdGggb3VyIHN1aXQ7IGZvciB3ZSBmZWFyIG5vIG1hbiwgYW5kIGNhcmUgbmVpdGhlciBmb3IgaGltLCB3aXRoIGFsbCBoaXMgZmluZSBzcGVlY2hlcywgbm9yIGZvciBhbnkgZm9ydHVuZS10ZWxsaW5nIG9mIHlvdXJzLiBZb3UgbWF5IHByZWFjaCBhcyBtdWNoIGFzIHlvdSBwbGVhc2UsIGJ1dCB3ZSBzaGFsbCBvbmx5IGhhdGUgeW91IHRoZSBtb3JlLiBXZSBzaGFsbCBnbyBiYWNrIGFuZCBjb250aW51ZSB0byBlYXQgdXAgVGVsZW1hY2h1cydzIGVzdGF0ZSB3aXRob3V0IHBheWluZyBoaW0sIHRpbGwgc3VjaCB0aW1lIGFzIGhpcyBtb3RoZXIgbGVhdmVzIG9mZiB0b3JtZW50aW5nIHVzIGJ5IGtlZXBpbmcgdXMgZGF5IGFmdGVyIGRheSBvbiB0aGUgdGlwdG9lIG9mIGV4cGVjdGF0aW9uLCBlYWNoIHZ5aW5nIHdpdGggdGhlIG90aGVyIGluIGhpcyBzdWl0IGZvciBhIHByaXplIG9mIHN1Y2ggcmFyZSBwZXJmZWN0aW9uLiBCZXNpZGVzIHdlIGNhbm5vdCBnbyBhZnRlciB0aGUgb3RoZXIgd29tZW4gd2hvbSB3ZSBzaG91bGQgbWFycnkgaW4gZHVlIGNvdXJzZSwgYnV0IGZvciB0aGUgd2F5IGluIHdoaWNoIHNoZSB0cmVhdHMgdXMuIg0KDQpUaGVuIFRlbGVtYWNodXMgc2FpZCwgIkV1cnltYWNodXMsIGFuZCB5b3Ugb3RoZXIgc3VpdG9ycywgSSBzaGFsbCBzYXkgbm8gbW9yZSwgYW5kIGVudHJlYXQgeW91IG5vIGZ1cnRoZXIsIGZvciB0aGUgZ29kcyBhbmQgdGhlIHBlb3BsZSBvZiBJdGhhY2Egbm93IGtub3cgbXkgc3RvcnkuIEdpdmUgbWUsIHRoZW4sIGEgc2hpcCBhbmQgYSBjcmV3IG9mIHR3ZW50eSBtZW4gdG8gdGFrZSBtZSBoaXRoZXIgYW5kIHRoaXRoZXIsIGFuZCBJIHdpbGwgZ28gdG8gU3BhcnRhIGFuZCB0byBQeWxvcyBpbiBxdWVzdCBvZiBteSBmYXRoZXIgd2hvIGhhcyBzbyBsb25nIGJlZW4gbWlzc2luZy4gU29tZSBvbmUgbWF5IHRlbGwgbWUgc29tZXRoaW5nLCBvciAoYW5kIHBlb3BsZSBvZnRlbiBoZWFyIHRoaW5ncyBpbiB0aGlzIHdheSkgc29tZSBoZWF2ZW4tc2VudCBtZXNzYWdlIG1heSBkaXJlY3QgbWUuIElmIEkgY2FuIGhlYXIgb2YgaGltIGFzIGFsaXZlIGFuZCBvbiBoaXMgd2F5IGhvbWUgSSB3aWxsIHB1dCB1cCB3aXRoIHRoZSB3YXN0ZSB5b3Ugc3VpdG9ycyB3aWxsIG1ha2UgZm9yIHlldCBhbm90aGVyIHR3ZWx2ZSBtb250aHMuIElmIG9uIHRoZSBvdGhlciBoYW5kIEkgaGVhciBvZiBoaXMgZGVhdGgsIEkgd2lsbCByZXR1cm4gYXQgb25jZSwgY2VsZWJyYXRlIGhpcyBmdW5lcmFsIHJpdGVzIHdpdGggYWxsIGR1ZSBwb21wLCBidWlsZCBhIGJhcnJvdyB0byBoaXMgbWVtb3J5LCBhbmQgbWFrZSBteSBtb3RoZXIgbWFycnkgYWdhaW4uIg0KDQpXaXRoIHRoZXNlIHdvcmRzIGhlIHNhdCBkb3duLCBhbmQgTWVudG9yIHdobyBoYWQgYmVlbiBhIGZyaWVuZCBvZiBVbHlzc2VzLCBhbmQgaGFkIGJlZW4gbGVmdCBpbiBjaGFyZ2Ugb2YgZXZlcnl0aGluZyB3aXRoIGZ1bGwgYXV0aG9yaXR5IG92ZXIgdGhlIHNlcnZhbnRzLCByb3NlIHRvIHNwZWFrLiBIZSwgdGhlbiwgcGxhaW5seSBhbmQgaW4gYWxsIGhvbmVzdHkgYWRkcmVzc2VkIHRoZW0gdGh1czoNCg0KIkhlYXIgbWUsIG1lbiBvZiBJdGhhY2EsIEkgaG9wZSB0aGF0IHlvdSBtYXkgbmV2ZXIgaGF2ZSBhIGtpbmQgYW5kIHdlbGwtZGlzcG9zZWQgcnVsZXIgYW55IG1vcmUsIG5vciBvbmUgd2hvIHdpbGwgZ292ZXJuIHlvdSBlcXVpdGFibHk7IEkgaG9wZSB0aGF0IGFsbCB5b3VyIGNoaWVmcyBoZW5jZWZvcndhcmQgbWF5IGJlIGNydWVsIGFuZCB1bmp1c3QsIGZvciB0aGVyZSBpcyBub3Qgb25lIG9mIHlvdSBidXQgaGFzIGZvcmdvdHRlbiBVbHlzc2VzLCB3aG8gcnVsZWQgeW91IGFzIHRob3VnaCBoZSB3ZXJlIHlvdXIgZmF0aGVyLiBJIGFtIG5vdCBoYWxmIHNvIGFuZ3J5IHdpdGggdGhlIHN1aXRvcnMsIGZvciBpZiB0aGV5IGNob29zZSB0byBkbyB2aW9sZW5jZSBpbiB0aGUgbmF1Z2h0aW5lc3Mgb2YgdGhlaXIgaGVhcnRzLCBhbmQgd2FnZXIgdGhlaXIgaGVhZHMgdGhhdCBVbHlzc2VzIHdpbGwgbm90IHJldHVybiwgdGhleSBjYW4gdGFrZSB0aGUgaGlnaCBoYW5kIGFuZCBlYXQgdXAgaGlzIGVzdGF0ZSwgYnV0IGFzIGZvciB5b3Ugb3RoZXJzIEkgYW0gc2hvY2tlZCBhdCB0aGUgd2F5IGluIHdoaWNoIHlvdSBhbGwgc2l0IHN0aWxsIHdpdGhvdXQgZXZlbiB0cnlpbmcgdG8gc3RvcCBzdWNoIHNjYW5kYWxvdXMgZ29pbmdzIG9uLXdoaWNoIHlvdSBjb3VsZCBkbyBpZiB5b3UgY2hvc2UsIGZvciB5b3UgYXJlIG1hbnkgYW5kIHRoZXkgYXJlIGZldy4iDQoNCkxlaW9jcml0dXMsIHNvbiBvZiBFdmVub3IsIGFuc3dlcmVkIGhpbSBzYXlpbmcsICJNZW50b3IsIHdoYXQgZm9sbHkgaXMgYWxsIHRoaXMsIHRoYXQgeW91IHNob3VsZCBzZXQgdGhlIHBlb3BsZSB0byBzdGF5IHVzPyBJdCBpcyBhIGhhcmQgdGhpbmcgZm9yIG9uZSBtYW4gdG8gZmlnaHQgd2l0aCBtYW55IGFib3V0IGhpcyB2aWN0dWFscy4gRXZlbiB0aG91Z2ggVWx5c3NlcyBoaW1zZWxmIHdlcmUgdG8gc2V0IHVwb24gdXMgd2hpbGUgd2UgYXJlIGZlYXN0aW5nIGluIGhpcyBob3VzZSwgYW5kIGRvIGhpcyBiZXN0IHRvIG91c3QgdXMsIGhpcyB3aWZlLCB3aG8gd2FudHMgaGltIGJhY2sgc28gdmVyeSBiYWRseSwgd291bGQgaGF2ZSBzbWFsbCBjYXVzZSBmb3IgcmVqb2ljaW5nLCBhbmQgaGlzIGJsb29kIHdvdWxkIGJlIHVwb24gaGlzIG93biBoZWFkIGlmIGhlIGZvdWdodCBhZ2FpbnN0IHN1Y2ggZ3JlYXQgb2Rkcy4gVGhlcmUgaXMgbm8gc2Vuc2UgaW4gd2hhdCB5b3UgaGF2ZSBiZWVuIHNheWluZy4gTm93LCB0aGVyZWZvcmUsIGRvIHlvdSBwZW9wbGUgZ28gYWJvdXQgeW91ciBidXNpbmVzcywgYW5kIGxldCBoaXMgZmF0aGVyJ3Mgb2xkIGZyaWVuZHMsIE1lbnRvciBhbmQgSGFsaXRoZXJzZXMsIHNwZWVkIHRoaXMgYm95IG9uIGhpcyBqb3VybmV5LCBpZiBoZSBnb2VzIGF0IGFsbC0gd2hpY2ggSSBkbyBub3QgdGhpbmsgaGUgd2lsbCwgZm9yIGhlIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgd2hlcmUgaGUgaXMgdGlsbCBzb21lIG9uZSBjb21lcyBhbmQgdGVsbHMgaGltIHNvbWV0aGluZy4iDQoNCk9uIHRoaXMgaGUgYnJva2UgdXAgdGhlIGFzc2VtYmx5LCBhbmQgZXZlcnkgbWFuIHdlbnQgYmFjayB0byBoaXMgb3duIGFib2RlLCB3aGlsZSB0aGUgc3VpdG9ycyByZXR1cm5lZCB0byB0aGUgaG91c2Ugb2YgVWx5c3Nlcy4NCg0KVGhlbiBUZWxlbWFjaHVzIHdlbnQgYWxsIGFsb25lIGJ5IHRoZSBzZWEgc2lkZSwgd2FzaGVkIGhpcyBoYW5kcyBpbiB0aGUgZ3JleSB3YXZlcywgYW5kIHByYXllZCB0byBNaW5lcnZhLg0KDQoiSGVhciBtZSwiIGhlIGNyaWVkLCAieW91IGdvZCB3aG8gdmlzaXRlZCBtZSB5ZXN0ZXJkYXksIGFuZCBiYWRlIG1lIHNhaWwgdGhlIHNlYXMgaW4gc2VhcmNoIG9mIG15IGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBJIHdvdWxkIG9iZXkgeW91LCBidXQgdGhlIEFjaGFlYW5zLCBhbmQgbW9yZSBwYXJ0aWN1bGFybHkgdGhlIHdpY2tlZCBzdWl0b3JzLCBhcmUgaGluZGVyaW5nIG1lIHRoYXQgSSBjYW5ub3QgZG8gc28uIg0KDQpBcyBoZSB0aHVzIHByYXllZCwgTWluZXJ2YSBjYW1lIGNsb3NlIHVwIHRvIGhpbSBpbiB0aGUgbGlrZW5lc3MgYW5kIHdpdGggdGhlIHZvaWNlIG9mIE1lbnRvci4gIlRlbGVtYWNodXMsIiBzYWlkIHNoZSwgImlmIHlvdSBhcmUgbWFkZSBvZiB0aGUgc2FtZSBzdHVmZiBhcyB5b3VyIGZhdGhlciB5b3Ugd2lsbCBiZSBuZWl0aGVyIGZvb2wgbm9yIGNvd2FyZCBoZW5jZWZvcndhcmQsIGZvciBVbHlzc2VzIG5ldmVyIGJyb2tlIGhpcyB3b3JkIG5vciBsZWZ0IGhpcyB3b3JrIGhhbGYgZG9uZS4gSWYsIHRoZW4sIHlvdSB0YWtlIGFmdGVyIGhpbSwgeW91ciB2b3lhZ2Ugd2lsbCBub3QgYmUgZnJ1aXRsZXNzLCBidXQgdW5sZXNzIHlvdSBoYXZlIHRoZSBibG9vZCBvZiBVbHlzc2VzIGFuZCBvZiBQZW5lbG9wZSBpbiB5b3VyIHZlaW5zIEkgc2VlIG5vIGxpa2VsaWhvb2Qgb2YgeW91ciBzdWNjZWVkaW5nLiBTb25zIGFyZSBzZWxkb20gYXMgZ29vZCBtZW4gYXMgdGhlaXIgZmF0aGVyczsgdGhleSBhcmUgZ2VuZXJhbGx5IHdvcnNlLCBub3QgYmV0dGVyOyBzdGlsbCwgYXMgeW91IGFyZSBub3QgZ29pbmcgdG8gYmUgZWl0aGVyIGZvb2wgb3IgY293YXJkIGhlbmNlZm9yd2FyZCwgYW5kIGFyZSBub3QgZW50aXJlbHkgd2l0aG91dCBzb21lIHNoYXJlIG9mIHlvdXIgZmF0aGVyJ3Mgd2lzZSBkaXNjZXJubWVudCwgSSBsb29rIHdpdGggaG9wZSB1cG9uIHlvdXIgdW5kZXJ0YWtpbmcuIEJ1dCBtaW5kIHlvdSBuZXZlciBtYWtlIGNvbW1vbiBjYXVzZSB3aXRoIGFueSBvZiB0aG9zZSBmb29saXNoIHN1aXRvcnMsIGZvciB0aGV5IGhhdmUgbmVpdGhlciBzZW5zZSBub3IgdmlydHVlLCBhbmQgZ2l2ZSBubyB0aG91Z2h0IHRvIGRlYXRoIGFuZCB0byB0aGUgZG9vbSB0aGF0IHdpbGwgc2hvcnRseSBmYWxsIG9uIG9uZSBhbmQgYWxsIG9mIHRoZW0sIHNvIHRoYXQgdGhleSBzaGFsbCBwZXJpc2ggb24gdGhlIHNhbWUgZGF5LiBBcyBmb3IgeW91ciB2b3lhZ2UsIGl0IHNoYWxsIG5vdCBiZSBsb25nIGRlbGF5ZWQ7IHlvdXIgZmF0aGVyIHdhcyBzdWNoIGFuIG9sZCBmcmllbmQgb2YgbWluZSB0aGF0IEkgd2lsbCBmaW5kIHlvdSBhIHNoaXAsIGFuZCB3aWxsIGNvbWUgd2l0aCB5b3UgbXlzZWxmLiBOb3csIGhvd2V2ZXIsIHJldHVybiBob21lLCBhbmQgZ28gYWJvdXQgYW1vbmcgdGhlIHN1aXRvcnM7IGJlZ2luIGdldHRpbmcgcHJvdmlzaW9ucyByZWFkeSBmb3IgeW91ciB2b3lhZ2U7IHNlZSBldmVyeXRoaW5nIHdlbGwgc3Rvd2VkLCB0aGUgd2luZSBpbiBqYXJzLCBhbmQgdGhlIGJhcmxleSBtZWFsLCB3aGljaCBpcyB0aGUgc3RhZmYgb2YgbGlmZSwgaW4gbGVhdGhlcm4gYmFncywgd2hpbGUgSSBnbyByb3VuZCB0aGUgdG93biBhbmQgYmVhdCB1cCB2b2x1bnRlZXJzIGF0IG9uY2UuIFRoZXJlIGFyZSBtYW55IHNoaXBzIGluIEl0aGFjYSBib3RoIG9sZCBhbmQgbmV3OyBJIHdpbGwgcnVuIG15IGV5ZSBvdmVyIHRoZW0gZm9yIHlvdSBhbmQgd2lsbCBjaG9vc2UgdGhlIGJlc3Q7IHdlIHdpbGwgZ2V0IGhlciByZWFkeSBhbmQgd2lsbCBwdXQgb3V0IHRvIHNlYSB3aXRob3V0IGRlbGF5LiINCg0KVGh1cyBzcG9rZSBNaW5lcnZhIGRhdWdodGVyIG9mIEpvdmUsIGFuZCBUZWxlbWFjaHVzIGxvc3Qgbm8gdGltZSBpbiBkb2luZyBhcyB0aGUgZ29kZGVzcyB0b2xkIGhpbS4gSGUgd2VudCBtb29kaWx5IGFuZCBmb3VuZCB0aGUgc3VpdG9ycyBmbGF5aW5nIGdvYXRzIGFuZCBzaW5nZWluZyBwaWdzIGluIHRoZSBvdXRlciBjb3VydC4gQW50aW5vdXMgY2FtZSB1cCB0byBoaW0gYXQgb25jZSBhbmQgbGF1Z2hlZCBhcyBoZSB0b29rIGhpcyBoYW5kIGluIGhpcyBvd24sIHNheWluZywgIlRlbGVtYWNodXMsIG15IGZpbmUgZmlyZS1lYXRlciwgYmVhciBubyBtb3JlIGlsbCBibG9vZCBuZWl0aGVyIGluIHdvcmQgbm9yIGRlZWQsIGJ1dCBlYXQgYW5kIGRyaW5rIHdpdGggdXMgYXMgeW91IHVzZWQgdG8gZG8uIFRoZSBBY2hhZWFucyB3aWxsIGZpbmQgeW91IGluIGV2ZXJ5dGhpbmctIGEgc2hpcCBhbmQgYSBwaWNrZWQgY3JldyB0byBib290LSBzbyB0aGF0IHlvdSBjYW4gc2V0IHNhaWwgZm9yIFB5bG9zIGF0IG9uY2UgYW5kIGdldCBuZXdzIG9mIHlvdXIgbm9ibGUgZmF0aGVyLiINCg0KIkFudGlub3VzLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgIkkgY2Fubm90IGVhdCBpbiBwZWFjZSwgbm9yIHRha2UgcGxlYXN1cmUgb2YgYW55IGtpbmQgd2l0aCBzdWNoIG1lbiBhcyB5b3UgYXJlLiBXYXMgaXQgbm90IGVub3VnaCB0aGF0IHlvdSBzaG91bGQgd2FzdGUgc28gbXVjaCBnb29kIHByb3BlcnR5IG9mIG1pbmUgd2hpbGUgSSB3YXMgeWV0IGEgYm95PyBOb3cgdGhhdCBJIGFtIG9sZGVyIGFuZCBrbm93IG1vcmUgYWJvdXQgaXQsIEkgYW0gYWxzbyBzdHJvbmdlciwgYW5kIHdoZXRoZXIgaGVyZSBhbW9uZyB0aGlzIHBlb3BsZSwgb3IgYnkgZ29pbmcgdG8gUHlsb3MsIEkgd2lsbCBkbyB5b3UgYWxsIHRoZSBoYXJtIEkgY2FuLiBJIHNoYWxsIGdvLCBhbmQgbXkgZ29pbmcgd2lsbCBub3QgYmUgaW4gdmFpbiB0aG91Z2gsIHRoYW5rcyB0byB5b3Ugc3VpdG9ycywgSSBoYXZlIG5laXRoZXIgc2hpcCBub3IgY3JldyBvZiBteSBvd24sIGFuZCBtdXN0IGJlIHBhc3NlbmdlciBub3QgY2FwdGFpbi4iDQoNCkFzIGhlIHNwb2tlIGhlIHNuYXRjaGVkIGhpcyBoYW5kIGZyb20gdGhhdCBvZiBBbnRpbm91cy4gTWVhbndoaWxlIHRoZSBvdGhlcnMgd2VudCBvbiBnZXR0aW5nIGRpbm5lciByZWFkeSBhYm91dCB0aGUgYnVpbGRpbmdzLCBqZWVyaW5nIGF0IGhpbSB0YXVudGluZ2x5IGFzIHRoZXkgZGlkIHNvLg0KDQoiVGVsZW1hY2h1cywiIHNhaWQgb25lIHlvdW5nc3RlciwgIm1lYW5zIHRvIGJlIHRoZSBkZWF0aCBvZiB1czsgSSBzdXBwb3NlIGhlIHRoaW5rcyBoZSBjYW4gYnJpbmcgZnJpZW5kcyB0byBoZWxwIGhpbSBmcm9tIFB5bG9zLCBvciBhZ2FpbiBmcm9tIFNwYXJ0YSwgd2hlcmUgaGUgc2VlbXMgYmVudCBvbiBnb2luZy4gT3Igd2lsbCBoZSBnbyB0byBFcGh5cmEgYXMgd2VsbCwgZm9yIHBvaXNvbiB0byBwdXQgaW4gb3VyIHdpbmUgYW5kIGtpbGwgdXM/Ig0KDQpBbm90aGVyIHNhaWQsICJQZXJoYXBzIGlmIFRlbGVtYWNodXMgZ29lcyBvbiBib2FyZCBzaGlwLCBoZSB3aWxsIGJlIGxpa2UgaGlzIGZhdGhlciBhbmQgcGVyaXNoIGZhciBmcm9tIGhpcyBmcmllbmRzLiBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGhhdmUgcGxlbnR5IHRvIGRvLCBmb3Igd2UgY291bGQgdGhlbiBkaXZpZGUgdXAgaGlzIHByb3BlcnR5IGFtb25nc3QgdXM6IGFzIGZvciB0aGUgaG91c2Ugd2UgY2FuIGxldCBoaXMgbW90aGVyIGFuZCB0aGUgbWFuIHdobyBtYXJyaWVzIGhlciBoYXZlIHRoYXQuIg0KDQpUaGlzIHdhcyBob3cgdGhleSB0YWxrZWQuIEJ1dCBUZWxlbWFjaHVzIHdlbnQgZG93biBpbnRvIHRoZSBsb2Z0eSBhbmQgc3BhY2lvdXMgc3RvcmUtcm9vbSB3aGVyZSBoaXMgZmF0aGVyJ3MgdHJlYXN1cmUgb2YgZ29sZCBhbmQgYnJvbnplIGxheSBoZWFwZWQgdXAgdXBvbiB0aGUgZmxvb3IsIGFuZCB3aGVyZSB0aGUgbGluZW4gYW5kIHNwYXJlIGNsb3RoZXMgd2VyZSBrZXB0IGluIG9wZW4gY2hlc3RzLiBIZXJlLCB0b28sIHRoZXJlIHdhcyBhIHN0b3JlIG9mIGZyYWdyYW50IG9saXZlIG9pbCwgd2hpbGUgY2Fza3Mgb2Ygb2xkLCB3ZWxsLXJpcGVuZWQgd2luZSwgdW5ibGVuZGVkIGFuZCBmaXQgZm9yIGEgZ29kIHRvIGRyaW5rLCB3ZXJlIHJhbmdlZCBhZ2FpbnN0IHRoZSB3YWxsIGluIGNhc2UgVWx5c3NlcyBzaG91bGQgY29tZSBob21lIGFnYWluIGFmdGVyIGFsbC4gVGhlIHJvb20gd2FzIGNsb3NlZCB3aXRoIHdlbGwtbWFkZSBkb29ycyBvcGVuaW5nIGluIHRoZSBtaWRkbGU7IG1vcmVvdmVyIHRoZSBmYWl0aGZ1bCBvbGQgaG91c2Uta2VlcGVyIEV1cnljbGVhLCBkYXVnaHRlciBvZiBPcHMgdGhlIHNvbiBvZiBQaXNlbm9yLCB3YXMgaW4gY2hhcmdlIG9mIGV2ZXJ5dGhpbmcgYm90aCBuaWdodCBhbmQgZGF5LiBUZWxlbWFjaHVzIGNhbGxlZCBoZXIgdG8gdGhlIHN0b3JlLXJvb20gYW5kIHNhaWQ6DQoNCiJOdXJzZSwgZHJhdyBtZSBvZmYgc29tZSBvZiB0aGUgYmVzdCB3aW5lIHlvdSBoYXZlLCBhZnRlciB3aGF0IHlvdSBhcmUga2VlcGluZyBmb3IgbXkgZmF0aGVyJ3Mgb3duIGRyaW5raW5nLCBpbiBjYXNlLCBwb29yIG1hbiwgaGUgc2hvdWxkIGVzY2FwZSBkZWF0aCwgYW5kIGZpbmQgaGlzIHdheSBob21lIGFnYWluIGFmdGVyIGFsbC4gTGV0IG1lIGhhdmUgdHdlbHZlIGphcnMsIGFuZCBzZWUgdGhhdCB0aGV5IGFsbCBoYXZlIGxpZHM7IGFsc28gZmlsbCBtZSBzb21lIHdlbGwtc2V3biBsZWF0aGVybiBiYWdzIHdpdGggYmFybGV5IG1lYWwtIGFib3V0IHR3ZW50eSBtZWFzdXJlcyBpbiBhbGwuIEdldCB0aGVzZSB0aGluZ3MgcHV0IHRvZ2V0aGVyIGF0IG9uY2UsIGFuZCBzYXkgbm90aGluZyBhYm91dCBpdC4gSSB3aWxsIHRha2UgZXZlcnl0aGluZyBhd2F5IHRoaXMgZXZlbmluZyBhcyBzb29uIGFzIG15IG1vdGhlciBoYXMgZ29uZSB1cHN0YWlycyBmb3IgdGhlIG5pZ2h0LiBJIGFtIGdvaW5nIHRvIFNwYXJ0YSBhbmQgdG8gUHlsb3MgdG8gc2VlIGlmIEkgY2FuIGhlYXIgYW55dGhpbmcgYWJvdXQgdGhlIHJldHVybiBvZiBteSBkZWFyIGZhdGhlci4NCg0KV2hlbiBFdXJ5Y2xlYSBoZWFyZCB0aGlzIHNoZSBiZWdhbiB0byBjcnksIGFuZCBzcG9rZSBmb25kbHkgdG8gaGltLCBzYXlpbmcsICJNeSBkZWFyIGNoaWxkLCB3aGF0IGV2ZXIgY2FuIGhhdmUgcHV0IHN1Y2ggbm90aW9uIGFzIHRoYXQgaW50byB5b3VyIGhlYWQ/IFdoZXJlIGluIHRoZSB3b3JsZCBkbyB5b3Ugd2FudCB0byBnbyB0by0geW91LCB3aG8gYXJlIHRoZSBvbmUgaG9wZSBvZiB0aGUgaG91c2U/IFlvdXIgcG9vciBmYXRoZXIgaXMgZGVhZCBhbmQgZ29uZSBpbiBzb21lIGZvcmVpZ24gY291bnRyeSBub2JvZHkga25vd3Mgd2hlcmUsIGFuZCBhcyBzb29uIGFzIHlvdXIgYmFjayBpcyB0dXJuZWQgdGhlc2Ugd2lja2VkIG9uZXMgaGVyZSB3aWxsIGJlIHNjaGVtaW5nIHRvIGdldCB5b3UgcHV0IG91dCBvZiB0aGUgd2F5LCBhbmQgd2lsbCBzaGFyZSBhbGwgeW91ciBwb3NzZXNzaW9ucyBhbW9uZyB0aGVtc2VsdmVzOyBzdGF5IHdoZXJlIHlvdSBhcmUgYW1vbmcgeW91ciBvd24gcGVvcGxlLCBhbmQgZG8gbm90IGdvIHdhbmRlcmluZyBhbmQgd29ycnlpbmcgeW91ciBsaWZlIG91dCBvbiB0aGUgYmFycmVuIG9jZWFuLiINCg0KIkZlYXIgbm90LCBudXJzZSwiIGFuc3dlcmVkIFRlbGVtYWNodXMsICJteSBzY2hlbWUgaXMgbm90IHdpdGhvdXQgaGVhdmVuJ3Mgc2FuY3Rpb247IGJ1dCBzd2VhciB0aGF0IHlvdSB3aWxsIHNheSBub3RoaW5nIGFib3V0IGFsbCB0aGlzIHRvIG15IG1vdGhlciwgdGlsbCBJIGhhdmUgYmVlbiBhd2F5IHNvbWUgdGVuIG9yIHR3ZWx2ZSBkYXlzLCB1bmxlc3Mgc2hlIGhlYXJzIG9mIG15IGhhdmluZyBnb25lLCBhbmQgYXNrcyB5b3U7IGZvciBJIGRvIG5vdCB3YW50IGhlciB0byBzcG9pbCBoZXIgYmVhdXR5IGJ5IGNyeWluZy4iDQoNClRoZSBvbGQgd29tYW4gc3dvcmUgbW9zdCBzb2xlbW5seSB0aGF0IHNoZSB3b3VsZCBub3QsIGFuZCB3aGVuIHNoZSBoYWQgY29tcGxldGVkIGhlciBvYXRoLCBzaGUgYmVnYW4gZHJhd2luZyBvZmYgdGhlIHdpbmUgaW50byBqYXJzLCBhbmQgZ2V0dGluZyB0aGUgYmFybGV5IG1lYWwgaW50byB0aGUgYmFncywgd2hpbGUgVGVsZW1hY2h1cyB3ZW50IGJhY2sgdG8gdGhlIHN1aXRvcnMuDQoNClRoZW4gTWluZXJ2YSBiZXRob3VnaHQgaGVyIG9mIGFub3RoZXIgbWF0dGVyLiBTaGUgdG9vayBoaXMgc2hhcGUsIGFuZCB3ZW50IHJvdW5kIHRoZSB0b3duIHRvIGVhY2ggb25lIG9mIHRoZSBjcmV3LCB0ZWxsaW5nIHRoZW0gdG8gbWVldCBhdCB0aGUgc2hpcCBieSBzdW5kb3duLiBTaGUgd2VudCBhbHNvIHRvIE5vZW1vbiBzb24gb2YgUGhyb25pdXMsIGFuZCBhc2tlZCBoaW0gdG8gbGV0IGhlciBoYXZlIGEgc2hpcC0gd2hpY2ggaGUgd2FzIHZlcnkgcmVhZHkgdG8gZG8uIFdoZW4gdGhlIHN1biBoYWQgc2V0IGFuZCBkYXJrbmVzcyB3YXMgb3ZlciBhbGwgdGhlIGxhbmQsIHNoZSBnb3QgdGhlIHNoaXAgaW50byB0aGUgd2F0ZXIsIHB1dCBhbGwgdGhlIHRhY2tsZSBvbiBib2FyZCBoZXIgdGhhdCBzaGlwcyBnZW5lcmFsbHkgY2FycnksIGFuZCBzdGF0aW9uZWQgaGVyIGF0IHRoZSBlbmQgb2YgdGhlIGhhcmJvdXIuIFByZXNlbnRseSB0aGUgY3JldyBjYW1lIHVwLCBhbmQgdGhlIGdvZGRlc3Mgc3Bva2UgZW5jb3VyYWdpbmdseSB0byBlYWNoIG9mIHRoZW0uDQoNCkZ1cnRoZXJtb3JlIHNoZSB3ZW50IHRvIHRoZSBob3VzZSBvZiBVbHlzc2VzLCBhbmQgdGhyZXcgdGhlIHN1aXRvcnMgaW50byBhIGRlZXAgc2x1bWJlci4gU2hlIGNhdXNlZCB0aGVpciBkcmluayB0byBmdWRkbGUgdGhlbSwgYW5kIG1hZGUgdGhlbSBkcm9wIHRoZWlyIGN1cHMgZnJvbSB0aGVpciBoYW5kcywgc28gdGhhdCBpbnN0ZWFkIG9mIHNpdHRpbmcgb3ZlciB0aGVpciB3aW5lLCB0aGV5IHdlbnQgYmFjayBpbnRvIHRoZSB0b3duIHRvIHNsZWVwLCB3aXRoIHRoZWlyIGV5ZXMgaGVhdnkgYW5kIGZ1bGwgb2YgZHJvd3NpbmVzcy4gVGhlbiBzaGUgdG9vayB0aGUgZm9ybSBhbmQgdm9pY2Ugb2YgTWVudG9yLCBhbmQgY2FsbGVkIFRlbGVtYWNodXMgdG8gY29tZSBvdXRzaWRlLg0KDQoiVGVsZW1hY2h1cywiIHNhaWQgc2hlLCAidGhlIG1lbiBhcmUgb24gYm9hcmQgYW5kIGF0IHRoZWlyIG9hcnMsIHdhaXRpbmcgZm9yIHlvdSB0byBnaXZlIHlvdXIgb3JkZXJzLCBzbyBtYWtlIGhhc3RlIGFuZCBsZXQgdXMgYmUgb2ZmLiINCg0KT24gdGhpcyBzaGUgbGVkIHRoZSB3YXksIHdoaWxlIFRlbGVtYWNodXMgZm9sbG93ZWQgaW4gaGVyIHN0ZXBzLiBXaGVuIHRoZXkgZ290IHRvIHRoZSBzaGlwIHRoZXkgZm91bmQgdGhlIGNyZXcgd2FpdGluZyBieSB0aGUgd2F0ZXIgc2lkZSwgYW5kIFRlbGVtYWNodXMgc2FpZCwgIk5vdyBteSBtZW4sIGhlbHAgbWUgdG8gZ2V0IHRoZSBzdG9yZXMgb24gYm9hcmQ7IHRoZXkgYXJlIGFsbCBwdXQgdG9nZXRoZXIgaW4gdGhlIGNsb2lzdGVyLCBhbmQgbXkgbW90aGVyIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYWJvdXQgaXQsIG5vciBhbnkgb2YgdGhlIG1haWQgc2VydmFudHMgZXhjZXB0IG9uZS4iDQoNCldpdGggdGhlc2Ugd29yZHMgaGUgbGVkIHRoZSB3YXkgYW5kIHRoZSBvdGhlcnMgZm9sbG93ZWQgYWZ0ZXIuIFdoZW4gdGhleSBoYWQgYnJvdWdodCB0aGUgdGhpbmdzIGFzIGhlIHRvbGQgdGhlbSwgVGVsZW1hY2h1cyB3ZW50IG9uIGJvYXJkLCBNaW5lcnZhIGdvaW5nIGJlZm9yZSBoaW0gYW5kIHRha2luZyBoZXIgc2VhdCBpbiB0aGUgc3Rlcm4gb2YgdGhlIHZlc3NlbCwgd2hpbGUgVGVsZW1hY2h1cyBzYXQgYmVzaWRlIGhlci4gVGhlbiB0aGUgbWVuIGxvb3NlZCB0aGUgaGF3c2VycyBhbmQgdG9vayB0aGVpciBwbGFjZXMgb24gdGhlIGJlbmNoZXMuIE1pbmVydmEgc2VudCB0aGVtIGEgZmFpciB3aW5kIGZyb20gdGhlIFdlc3QsIHRoYXQgd2hpc3RsZWQgb3ZlciB0aGUgZGVlcCBibHVlIHdhdmVzIHdoZXJlb24gVGVsZW1hY2h1cyB0b2xkIHRoZW0gdG8gY2F0Y2ggaG9sZCBvZiB0aGUgcm9wZXMgYW5kIGhvaXN0IHNhaWwsIGFuZCB0aGV5IGRpZCBhcyBoZSB0b2xkIHRoZW0uIFRoZXkgc2V0IHRoZSBtYXN0IGluIGl0cyBzb2NrZXQgaW4gdGhlIGNyb3NzIHBsYW5rLCByYWlzZWQgaXQsIGFuZCBtYWRlIGl0IGZhc3Qgd2l0aCB0aGUgZm9yZXN0YXlzOyB0aGVuIHRoZXkgaG9pc3RlZCB0aGVpciB3aGl0ZSBzYWlscyBhbG9mdCB3aXRoIHJvcGVzIG9mIHR3aXN0ZWQgb3ggaGlkZS4gQXMgdGhlIHNhaWwgYmVsbGllZCBvdXQgd2l0aCB0aGUgd2luZCwgdGhlIHNoaXAgZmxldyB0aHJvdWdoIHRoZSBkZWVwIGJsdWUgd2F0ZXIsIGFuZCB0aGUgZm9hbSBoaXNzZWQgYWdhaW5zdCBoZXIgYm93cyBhcyBzaGUgc3BlZCBvbndhcmQuIFRoZW4gdGhleSBtYWRlIGFsbCBmYXN0IHRocm91Z2hvdXQgdGhlIHNoaXAsIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHRvIHRoZSBicmltLCBhbmQgbWFkZSBkcmluayBvZmZlcmluZ3MgdG8gdGhlIGltbW9ydGFsIGdvZHMgdGhhdCBhcmUgZnJvbSBldmVybGFzdGluZywgYnV0IG1vcmUgcGFydGljdWxhcmx5IHRvIHRoZSBncmV5LWV5ZWQgZGF1Z2h0ZXIgb2YgSm92ZS4NCg0KVGh1cywgdGhlbiwgdGhlIHNoaXAgc3BlZCBvbiBoZXIgd2F5IHRocm91Z2ggdGhlIHdhdGNoZXMgb2YgdGhlIG5pZ2h0IGZyb20gZGFyayB0aWxsIGRhd24uDQoNCkJvb2sgSUlJDQoNCkJ1dCBhcyB0aGUgc3VuIHdhcyByaXNpbmcgZnJvbSB0aGUgZmFpciBzZWEgaW50byB0aGUgZmlybWFtZW50IG9mIGhlYXZlbiB0byBzaGVkIGxpZ2h0IG9uIG1vcnRhbHMgYW5kIGltbW9ydGFscywgdGhleSByZWFjaGVkIFB5bG9zIHRoZSBjaXR5IG9mIE5lbGV1cy4gTm93IHRoZSBwZW9wbGUgb2YgUHlsb3Mgd2VyZSBnYXRoZXJlZCBvbiB0aGUgc2VhIHNob3JlIHRvIG9mZmVyIHNhY3JpZmljZSBvZiBibGFjayBidWxscyB0byBOZXB0dW5lIGxvcmQgb2YgdGhlIEVhcnRocXVha2UuIFRoZXJlIHdlcmUgbmluZSBndWlsZHMgd2l0aCBmaXZlIGh1bmRyZWQgbWVuIGluIGVhY2gsIGFuZCB0aGVyZSB3ZXJlIG5pbmUgYnVsbHMgdG8gZWFjaCBndWlsZC4gQXMgdGhleSB3ZXJlIGVhdGluZyB0aGUgaW53YXJkIG1lYXRzIGFuZCBidXJuaW5nIHRoZSB0aGlnaCBib25lcyBbb24gdGhlIGVtYmVyc10gaW4gdGhlIG5hbWUgb2YgTmVwdHVuZSwgVGVsZW1hY2h1cyBhbmQgaGlzIGNyZXcgYXJyaXZlZCwgZnVybGVkIHRoZWlyIHNhaWxzLCBicm91Z2h0IHRoZWlyIHNoaXAgdG8gYW5jaG9yLCBhbmQgd2VudCBhc2hvcmUuDQoNCk1pbmVydmEgbGVkIHRoZSB3YXkgYW5kIFRlbGVtYWNodXMgZm9sbG93ZWQgaGVyLiBQcmVzZW50bHkgc2hlIHNhaWQsICJUZWxlbWFjaHVzLCB5b3UgbXVzdCBub3QgYmUgaW4gdGhlIGxlYXN0IHNoeSBvciBuZXJ2b3VzOyB5b3UgaGF2ZSB0YWtlbiB0aGlzIHZveWFnZSB0byB0cnkgYW5kIGZpbmQgb3V0IHdoZXJlIHlvdXIgZmF0aGVyIGlzIGJ1cmllZCBhbmQgaG93IGhlIGNhbWUgYnkgaGlzIGVuZDsgc28gZ28gc3RyYWlnaHQgdXAgdG8gTmVzdG9yIHRoYXQgd2UgbWF5IHNlZSB3aGF0IGhlIGhhcyBnb3QgdG8gdGVsbCB1cy4gQmVnIG9mIGhpbSB0byBzcGVhayB0aGUgdHJ1dGgsIGFuZCBoZSB3aWxsIHRlbGwgbm8gbGllcywgZm9yIGhlIGlzIGFuIGV4Y2VsbGVudCBwZXJzb24uIg0KDQoiQnV0IGhvdywgTWVudG9yLCIgcmVwbGllZCBUZWxlbWFjaHVzLCAiZGFyZSBJIGdvIHVwIHRvIE5lc3RvciwgYW5kIGhvdyBhbSBJIHRvIGFkZHJlc3MgaGltPyBJIGhhdmUgbmV2ZXIgeWV0IGJlZW4gdXNlZCB0byBob2xkaW5nIGxvbmcgY29udmVyc2F0aW9ucyB3aXRoIHBlb3BsZSwgYW5kIGFtIGFzaGFtZWQgdG8gYmVnaW4gcXVlc3Rpb25pbmcgb25lIHdobyBpcyBzbyBtdWNoIG9sZGVyIHRoYW4gbXlzZWxmLiINCg0KIlNvbWUgdGhpbmdzLCBUZWxlbWFjaHVzLCIgYW5zd2VyZWQgTWluZXJ2YSwgIndpbGwgYmUgc3VnZ2VzdGVkIHRvIHlvdSBieSB5b3VyIG93biBpbnN0aW5jdCwgYW5kIGhlYXZlbiB3aWxsIHByb21wdCB5b3UgZnVydGhlcjsgZm9yIEkgYW0gYXNzdXJlZCB0aGF0IHRoZSBnb2RzIGhhdmUgYmVlbiB3aXRoIHlvdSBmcm9tIHRoZSB0aW1lIG9mIHlvdXIgYmlydGggdW50aWwgbm93LiINCg0KU2hlIHRoZW4gd2VudCBxdWlja2x5IG9uLCBhbmQgVGVsZW1hY2h1cyBmb2xsb3dlZCBpbiBoZXIgc3RlcHMgdGlsbCB0aGV5IHJlYWNoZWQgdGhlIHBsYWNlIHdoZXJlIHRoZSBndWlsZHMgb2YgdGhlIFB5bGlhbiBwZW9wbGUgd2VyZSBhc3NlbWJsZWQuIFRoZXJlIHRoZXkgZm91bmQgTmVzdG9yIHNpdHRpbmcgd2l0aCBoaXMgc29ucywgd2hpbGUgaGlzIGNvbXBhbnkgcm91bmQgaGltIHdlcmUgYnVzeSBnZXR0aW5nIGRpbm5lciByZWFkeSwgYW5kIHB1dHRpbmcgcGllY2VzIG9mIG1lYXQgb24gdG8gdGhlIHNwaXRzIHdoaWxlIG90aGVyIHBpZWNlcyB3ZXJlIGNvb2tpbmcuIFdoZW4gdGhleSBzYXcgdGhlIHN0cmFuZ2VycyB0aGV5IGNyb3dkZWQgcm91bmQgdGhlbSwgdG9vayB0aGVtIGJ5IHRoZSBoYW5kIGFuZCBiYWRlIHRoZW0gdGFrZSB0aGVpciBwbGFjZXMuIE5lc3RvcidzIHNvbiBQaXNpc3RyYXR1cyBhdCBvbmNlIG9mZmVyZWQgaGlzIGhhbmQgdG8gZWFjaCBvZiB0aGVtLCBhbmQgc2VhdGVkIHRoZW0gb24gc29tZSBzb2Z0IHNoZWVwc2tpbnMgdGhhdCB3ZXJlIGx5aW5nIG9uIHRoZSBzYW5kcyBuZWFyIGhpcyBmYXRoZXIgYW5kIGhpcyBicm90aGVyIFRocmFzeW1lZGVzLiBUaGVuIGhlIGdhdmUgdGhlbSB0aGVpciBwb3J0aW9ucyBvZiB0aGUgaW53YXJkIG1lYXRzIGFuZCBwb3VyZWQgd2luZSBmb3IgdGhlbSBpbnRvIGEgZ29sZGVuIGN1cCwgaGFuZGluZyBpdCB0byBNaW5lcnZhIGZpcnN0LCBhbmQgc2FsdXRpbmcgaGVyIGF0IHRoZSBzYW1lIHRpbWUuDQoNCiJPZmZlciBhIHByYXllciwgc2lyLCIgc2FpZCBoZSwgInRvIEtpbmcgTmVwdHVuZSwgZm9yIGl0IGlzIGhpcyBmZWFzdCB0aGF0IHlvdSBhcmUgam9pbmluZzsgd2hlbiB5b3UgaGF2ZSBkdWx5IHByYXllZCBhbmQgbWFkZSB5b3VyIGRyaW5rLW9mZmVyaW5nLCBwYXNzIHRoZSBjdXAgdG8geW91ciBmcmllbmQgdGhhdCBoZSBtYXkgZG8gc28gYWxzby4gSSBkb3VidCBub3QgdGhhdCBoZSB0b28gbGlmdHMgaGlzIGhhbmRzIGluIHByYXllciwgZm9yIG1hbiBjYW5ub3QgbGl2ZSB3aXRob3V0IEdvZCBpbiB0aGUgd29ybGQuIFN0aWxsIGhlIGlzIHlvdW5nZXIgdGhhbiB5b3UgYXJlLCBhbmQgaXMgbXVjaCBvZiBhbiBhZ2Ugd2l0aCBteXNlbGYsIHNvIEkgaGUgaGFuZGVkIEkgd2lsbCBnaXZlIHlvdSB0aGUgcHJlY2VkZW5jZS4iDQoNCkFzIGhlIHNwb2tlIGhlIGhhbmRlZCBoZXIgdGhlIGN1cC4gTWluZXJ2YSB0aG91Z2h0IGl0IHZlcnkgcmlnaHQgYW5kIHByb3BlciBvZiBoaW0gdG8gaGF2ZSBnaXZlbiBpdCB0byBoZXJzZWxmIGZpcnN0OyBzaGUgYWNjb3JkaW5nbHkgYmVnYW4gcHJheWluZyBoZWFydGlseSB0byBOZXB0dW5lLiAiTyB0aG91LCIgc2hlIGNyaWVkLCAidGhhdCBlbmNpcmNsZXN0IHRoZSBlYXJ0aCwgdm91Y2hzYWZlIHRvIGdyYW50IHRoZSBwcmF5ZXJzIG9mIHRoeSBzZXJ2YW50cyB0aGF0IGNhbGwgdXBvbiB0aGVlLiBNb3JlIGVzcGVjaWFsbHkgd2UgcHJheSB0aGVlIHNlbmQgZG93biB0aHkgZ3JhY2Ugb24gTmVzdG9yIGFuZCBvbiBoaXMgc29uczsgdGhlcmVhZnRlciBhbHNvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIFB5bGlhbiBwZW9wbGUgc29tZSBoYW5kc29tZSByZXR1cm4gZm9yIHRoZSBnb29kbHkgaGVjYXRvbWIgdGhleSBhcmUgb2ZmZXJpbmcgeW91LiBMYXN0bHksIGdyYW50IFRlbGVtYWNodXMgYW5kIG15c2VsZiBhIGhhcHB5IGlzc3VlLCBpbiByZXNwZWN0IG9mIHRoZSBtYXR0ZXIgdGhhdCBoYXMgYnJvdWdodCB1cyBpbiBvdXIgdG8gUHlsb3MuIg0KDQpXaGVuIHNoZSBoYWQgdGh1cyBtYWRlIGFuIGVuZCBvZiBwcmF5aW5nLCBzaGUgaGFuZGVkIHRoZSBjdXAgdG8gVGVsZW1hY2h1cyBhbmQgaGUgcHJheWVkIGxpa2V3aXNlLiBCeSBhbmQgYnksIHdoZW4gdGhlIG91dGVyIG1lYXRzIHdlcmUgcm9hc3RlZCBhbmQgaGFkIGJlZW4gdGFrZW4gb2ZmIHRoZSBzcGl0cywgdGhlIGNhcnZlcnMgZ2F2ZSBldmVyeSBtYW4gaGlzIHBvcnRpb24gYW5kIHRoZXkgYWxsIG1hZGUgYW4gZXhjZWxsZW50IGRpbm5lci4gQXMgc29vbiBhcyB0aGV5IGhhZCBoYWQgZW5vdWdoIHRvIGVhdCBhbmQgZHJpbmssIE5lc3Rvciwga25pZ2h0IG9mIEdlcmVuZSwgYmVnYW4gdG8gc3BlYWsuDQoNCiJOb3csIiBzYWlkIGhlLCAidGhhdCBvdXIgZ3Vlc3RzIGhhdmUgZG9uZSB0aGVpciBkaW5uZXIsIGl0IHdpbGwgYmUgYmVzdCB0byBhc2sgdGhlbSB3aG8gdGhleSBhcmUuIFdobywgdGhlbiwgc2lyIHN0cmFuZ2VycywgYXJlIHlvdSwgYW5kIGZyb20gd2hhdCBwb3J0IGhhdmUgeW91IHNhaWxlZD8gQXJlIHlvdSB0cmFkZXJzPyBvciBkbyB5b3Ugc2FpbCB0aGUgc2VhcyBhcyByb3ZlcnMgd2l0aCB5b3VyIGhhbmQgYWdhaW5zdCBldmVyeSBtYW4sIGFuZCBldmVyeSBtYW4ncyBoYW5kIGFnYWluc3QgeW91PyINCg0KVGVsZW1hY2h1cyBhbnN3ZXJlZCBib2xkbHksIGZvciBNaW5lcnZhIGhhZCBnaXZlbiBoaW0gY291cmFnZSB0byBhc2sgYWJvdXQgaGlzIGZhdGhlciBhbmQgZ2V0IGhpbXNlbGYgYSBnb29kIG5hbWUuDQoNCiJOZXN0b3IsIiBzYWlkIGhlLCAic29uIG9mIE5lbGV1cywgaG9ub3VyIHRvIHRoZSBBY2hhZWFuIG5hbWUsIHlvdSBhc2sgd2hlbmNlIHdlIGNvbWUsIGFuZCBJIHdpbGwgdGVsbCB5b3UuIFdlIGNvbWUgZnJvbSBJdGhhY2EgdW5kZXIgTmVyaXR1bSwgYW5kIHRoZSBtYXR0ZXIgYWJvdXQgd2hpY2ggSSB3b3VsZCBzcGVhayBpcyBvZiBwcml2YXRlIG5vdCBwdWJsaWMgaW1wb3J0LiBJIHNlZWsgbmV3cyBvZiBteSB1bmhhcHB5IGZhdGhlciBVbHlzc2VzLCB3aG8gaXMgc2FpZCB0byBoYXZlIHNhY2tlZCB0aGUgdG93biBvZiBUcm95IGluIGNvbXBhbnkgd2l0aCB5b3Vyc2VsZi4gV2Uga25vdyB3aGF0IGZhdGUgYmVmZWxsIGVhY2ggb25lIG9mIHRoZSBvdGhlciBoZXJvZXMgd2hvIGZvdWdodCBhdCBUcm95LCBidXQgYXMgcmVnYXJkcyBVbHlzc2VzIGhlYXZlbiBoYXMgaGlkZGVuIGZyb20gdXMgdGhlIGtub3dsZWRnZSBldmVuIHRoYXQgaGUgaXMgZGVhZCBhdCBhbGwsIGZvciBubyBvbmUgY2FuIGNlcnRpZnkgdXMgaW4gd2hhdCBwbGFjZSBoZSBwZXJpc2hlZCwgbm9yIHNheSB3aGV0aGVyIGhlIGZlbGwgaW4gYmF0dGxlIG9uIHRoZSBtYWlubGFuZCwgb3Igd2FzIGxvc3QgYXQgc2VhIGFtaWQgdGhlIHdhdmVzIG9mIEFtcGhpdHJpdGUuIFRoZXJlZm9yZSBJIGFtIHN1cHBsaWFudCBhdCB5b3VyIGtuZWVzLCBpZiBoYXBseSB5b3UgbWF5IGJlIHBsZWFzZWQgdG8gdGVsbCBtZSBvZiBoaXMgbWVsYW5jaG9seSBlbmQsIHdoZXRoZXIgeW91IHNhdyBpdCB3aXRoIHlvdXIgb3duIGV5ZXMsIG9yIGhlYXJkIGl0IGZyb20gc29tZSBvdGhlciB0cmF2ZWxsZXIsIGZvciBoZSB3YXMgYSBtYW4gYm9ybiB0byB0cm91YmxlLiBEbyBub3Qgc29mdGVuIHRoaW5ncyBvdXQgb2YgYW55IHBpdHkgZm9yIG1lLCBidXQgdGVsbCBtZSBpbiBhbGwgcGxhaW5uZXNzIGV4YWN0bHkgd2hhdCB5b3Ugc2F3LiBJZiBteSBicmF2ZSBmYXRoZXIgVWx5c3NlcyBldmVyIGRpZCB5b3UgbG95YWwgc2VydmljZSwgZWl0aGVyIGJ5IHdvcmQgb3IgZGVlZCwgd2hlbiB5b3UgQWNoYWVhbnMgd2VyZSBoYXJhc3NlZCBhbW9uZyB0aGUgVHJvamFucywgYmVhciBpdCBpbiBtaW5kIG5vdyBhcyBpbiBteSBmYXZvdXIgYW5kIHRlbGwgbWUgdHJ1bHkgYWxsLiINCg0KIk15IGZyaWVuZCwiIGFuc3dlcmVkIE5lc3RvciwgInlvdSByZWNhbGwgYSB0aW1lIG9mIG11Y2ggc29ycm93IHRvIG15IG1pbmQsIGZvciB0aGUgYnJhdmUgQWNoYWVhbnMgc3VmZmVyZWQgbXVjaCBib3RoIGF0IHNlYSwgd2hpbGUgcHJpdmF0ZWVyaW5nIHVuZGVyIEFjaGlsbGVzLCBhbmQgd2hlbiBmaWdodGluZyBiZWZvcmUgdGhlIGdyZWF0IGNpdHkgb2Yga2luZyBQcmlhbS4gT3VyIGJlc3QgbWVuIGFsbCBvZiB0aGVtIGZlbGwgdGhlcmUtIEFqYXgsIEFjaGlsbGVzLCBQYXRyb2NsdXMgcGVlciBvZiBnb2RzIGluIGNvdW5zZWwsIGFuZCBteSBvd24gZGVhciBzb24gQW50aWxvY2h1cywgYSBtYW4gc2luZ3VsYXJseSBmbGVldCBvZiBmb290IGFuZCBpbiBmaWdodCB2YWxpYW50LiBCdXQgd2Ugc3VmZmVyZWQgbXVjaCBtb3JlIHRoYW4gdGhpczsgd2hhdCBtb3J0YWwgdG9uZ3VlIGluZGVlZCBjb3VsZCB0ZWxsIHRoZSB3aG9sZSBzdG9yeT8gVGhvdWdoIHlvdSB3ZXJlIHRvIHN0YXkgaGVyZSBhbmQgcXVlc3Rpb24gbWUgZm9yIGZpdmUgeWVhcnMsIG9yIGV2ZW4gc2l4LCBJIGNvdWxkIG5vdCB0ZWxsIHlvdSBhbGwgdGhhdCB0aGUgQWNoYWVhbnMgc3VmZmVyZWQsIGFuZCB5b3Ugd291bGQgdHVybiBob21ld2FyZCB3ZWFyeSBvZiBteSB0YWxlIGJlZm9yZSBpdCBlbmRlZC4gTmluZSBsb25nIHllYXJzIGRpZCB3ZSB0cnkgZXZlcnkga2luZCBvZiBzdHJhdGFnZW0sIGJ1dCB0aGUgaGFuZCBvZiBoZWF2ZW4gd2FzIGFnYWluc3QgdXM7IGR1cmluZyBhbGwgdGhpcyB0aW1lIHRoZXJlIHdhcyBubyBvbmUgd2hvIGNvdWxkIGNvbXBhcmUgd2l0aCB5b3VyIGZhdGhlciBpbiBzdWJ0bGV0eS0gaWYgaW5kZWVkIHlvdSBhcmUgaGlzIHNvbi0gSSBjYW4gaGFyZGx5IGJlbGlldmUgbXkgZXllcy0gYW5kIHlvdSB0YWxrIGp1c3QgbGlrZSBoaW0gdG9vLSBubyBvbmUgd291bGQgc2F5IHRoYXQgcGVvcGxlIG9mIHN1Y2ggZGlmZmVyZW50IGFnZXMgY291bGQgc3BlYWsgc28gbXVjaCBhbGlrZS4gSGUgYW5kIEkgbmV2ZXIgaGFkIGFueSBraW5kIG9mIGRpZmZlcmVuY2UgZnJvbSBmaXJzdCB0byBsYXN0IG5laXRoZXIgaW4gY2FtcCBub3IgY291bmNpbCwgYnV0IGluIHNpbmdsZW5lc3Mgb2YgaGVhcnQgYW5kIHB1cnBvc2Ugd2UgYWR2aXNlZCB0aGUgQXJnaXZlcyBob3cgYWxsIG1pZ2h0IGJlIG9yZGVyZWQgZm9yIHRoZSBiZXN0Lg0KDQoiV2hlbiBob3dldmVyLCB3ZSBoYWQgc2Fja2VkIHRoZSBjaXR5IG9mIFByaWFtLCBhbmQgd2VyZSBzZXR0aW5nIHNhaWwgaW4gb3VyIHNoaXBzIGFzIGhlYXZlbiBoYWQgZGlzcGVyc2VkIHVzLCB0aGVuIEpvdmUgc2F3IGZpdCB0byB2ZXggdGhlIEFyZ2l2ZXMgb24gdGhlaXIgaG9tZXdhcmQgdm95YWdlOyBmb3IgdGhleSBoYWQgTm90IGFsbCBiZWVuIGVpdGhlciB3aXNlIG9yIHVuZGVyc3RhbmRpbmcsIGFuZCBoZW5jZSBtYW55IGNhbWUgdG8gYSBiYWQgZW5kIHRocm91Z2ggdGhlIGRpc3BsZWFzdXJlIG9mIEpvdmUncyBkYXVnaHRlciBNaW5lcnZhLCB3aG8gYnJvdWdodCBhYm91dCBhIHF1YXJyZWwgYmV0d2VlbiB0aGUgdHdvIHNvbnMgb2YgQXRyZXVzLg0KDQoiVGhlIHNvbnMgb2YgQXRyZXVzIGNhbGxlZCBhIG1lZXRpbmcgd2hpY2ggd2FzIG5vdCBhcyBpdCBzaG91bGQgYmUsIGZvciBpdCB3YXMgc3Vuc2V0IGFuZCB0aGUgQWNoYWVhbnMgd2VyZSBoZWF2eSB3aXRoIHdpbmUuIFdoZW4gdGhleSBleHBsYWluZWQgd2h5IHRoZXkgaGFkIGNhbGxlZC0gdGhlIHBlb3BsZSB0b2dldGhlciwgaXQgc2VlbWVkIHRoYXQgTWVuZWxhdXMgd2FzIGZvciBzYWlsaW5nIGhvbWV3YXJkIGF0IG9uY2UsIGFuZCB0aGlzIGRpc3BsZWFzZWQgQWdhbWVtbm9uLCB3aG8gdGhvdWdodCB0aGF0IHdlIHNob3VsZCB3YWl0IHRpbGwgd2UgaGFkIG9mZmVyZWQgaGVjYXRvbWJzIHRvIGFwcGVhc2UgdGhlIGFuZ2VyIG9mIE1pbmVydmEuIEZvb2wgdGhhdCBoZSB3YXMsIGhlIG1pZ2h0IGhhdmUga25vd24gdGhhdCBoZSB3b3VsZCBub3QgcHJldmFpbCB3aXRoIGhlciwgZm9yIHdoZW4gdGhlIGdvZHMgaGF2ZSBtYWRlIHVwIHRoZWlyIG1pbmRzIHRoZXkgZG8gbm90IGNoYW5nZSB0aGVtIGxpZ2h0bHkuIFNvIHRoZSB0d28gc3Rvb2QgYmFuZHlpbmcgaGFyZCB3b3Jkcywgd2hlcmVvbiB0aGUgQWNoYWVhbnMgc3ByYW5nIHRvIHRoZWlyIGZlZXQgd2l0aCBhIGNyeSB0aGF0IHJlbnQgdGhlIGFpciwgYW5kIHdlcmUgb2YgdHdvIG1pbmRzIGFzIHRvIHdoYXQgdGhleSBzaG91bGQgZG8uDQoNCiJUaGF0IG5pZ2h0IHdlIHJlc3RlZCBhbmQgbnVyc2VkIG91ciBhbmdlciwgZm9yIEpvdmUgd2FzIGhhdGNoaW5nIG1pc2NoaWVmIGFnYWluc3QgdXMuIEJ1dCBpbiB0aGUgbW9ybmluZyBzb21lIG9mIHVzIGRyZXcgb3VyIHNoaXBzIGludG8gdGhlIHdhdGVyIGFuZCBwdXQgb3VyIGdvb2RzIHdpdGggb3VyIHdvbWVuIG9uIGJvYXJkLCB3aGlsZSB0aGUgcmVzdCwgYWJvdXQgaGFsZiBpbiBudW1iZXIsIHN0YXllZCBiZWhpbmQgd2l0aCBBZ2FtZW1ub24uIFdlLSB0aGUgb3RoZXIgaGFsZi0gZW1iYXJrZWQgYW5kIHNhaWxlZDsgYW5kIHRoZSBzaGlwcyB3ZW50IHdlbGwsIGZvciBoZWF2ZW4gaGFkIHNtb290aGVkIHRoZSBzZWEuIFdoZW4gd2UgcmVhY2hlZCBUZW5lZG9zIHdlIG9mZmVyZWQgc2FjcmlmaWNlcyB0byB0aGUgZ29kcywgZm9yIHdlIHdlcmUgbG9uZ2luZyB0byBnZXQgaG9tZTsgY3J1ZWwgSm92ZSwgaG93ZXZlciwgZGlkIG5vdCB5ZXQgbWVhbiB0aGF0IHdlIHNob3VsZCBkbyBzbywgYW5kIHJhaXNlZCBhIHNlY29uZCBxdWFycmVsIGluIHRoZSBjb3Vyc2Ugb2Ygd2hpY2ggc29tZSBhbW9uZyB1cyB0dXJuZWQgdGhlaXIgc2hpcHMgYmFjayBhZ2FpbiwgYW5kIHNhaWxlZCBhd2F5IHVuZGVyIFVseXNzZXMgdG8gbWFrZSB0aGVpciBwZWFjZSB3aXRoIEFnYW1lbW5vbjsgYnV0IEksIGFuZCBhbGwgdGhlIHNoaXBzIHRoYXQgd2VyZSB3aXRoIG1lIHByZXNzZWQgZm9yd2FyZCwgZm9yIEkgc2F3IHRoYXQgbWlzY2hpZWYgd2FzIGJyZXdpbmcuIFRoZSBzb24gb2YgVHlkZXVzIHdlbnQgb24gYWxzbyB3aXRoIG1lLCBhbmQgaGlzIGNyZXdzIHdpdGggaGltLiBMYXRlciBvbiBNZW5lbGF1cyBqb2luZWQgdXMgYXQgTGVzYm9zLCBhbmQgZm91bmQgdXMgbWFraW5nIHVwIG91ciBtaW5kcyBhYm91dCBvdXIgY291cnNlLSBmb3Igd2UgZGlkIG5vdCBrbm93IHdoZXRoZXIgdG8gZ28gb3V0c2lkZSBDaGlvcyBieSB0aGUgaXNsYW5kIG9mIFBzeXJhLCBrZWVwaW5nIHRoaXMgdG8gb3VyIGxlZnQsIG9yIGluc2lkZSBDaGlvcywgb3ZlciBhZ2FpbnN0IHRoZSBzdG9ybXkgaGVhZGxhbmQgb2YgTWltYXMuIFNvIHdlIGFza2VkIGhlYXZlbiBmb3IgYSBzaWduLCBhbmQgd2VyZSBzaG93biBvbmUgdG8gdGhlIGVmZmVjdCB0aGF0IHdlIHNob3VsZCBiZSBzb29uZXN0IG91dCBvZiBkYW5nZXIgaWYgd2UgaGVhZGVkIG91ciBzaGlwcyBhY3Jvc3MgdGhlIG9wZW4gc2VhIHRvIEV1Ym9lYS4gVGhpcyB3ZSB0aGVyZWZvcmUgZGlkLCBhbmQgYSBmYWlyIHdpbmQgc3ByYW5nIHVwIHdoaWNoIGdhdmUgdXMgYSBxdWljayBwYXNzYWdlIGR1cmluZyB0aGUgbmlnaHQgdG8gR2VyYWVzdHVzLCB3aGVyZSB3ZSBvZmZlcmVkIG1hbnkgc2FjcmlmaWNlcyB0byBOZXB0dW5lIGZvciBoYXZpbmcgaGVscGVkIHVzIHNvIGZhciBvbiBvdXIgd2F5LiBGb3VyIGRheXMgbGF0ZXIgRGlvbWVkIGFuZCBoaXMgbWVuIHN0YXRpb25lZCB0aGVpciBzaGlwcyBpbiBBcmdvcywgYnV0IEkgaGVsZCBvbiBmb3IgUHlsb3MsIGFuZCB0aGUgd2luZCBuZXZlciBmZWxsIGxpZ2h0IGZyb20gdGhlIGRheSB3aGVuIGhlYXZlbiBmaXJzdCBtYWRlIGl0IGZhaXIgZm9yIG1lLg0KDQoiVGhlcmVmb3JlLCBteSBkZWFyIHlvdW5nIGZyaWVuZCwgSSByZXR1cm5lZCB3aXRob3V0IGhlYXJpbmcgYW55dGhpbmcgYWJvdXQgdGhlIG90aGVycy4gSSBrbm93IG5laXRoZXIgd2hvIGdvdCBob21lIHNhZmVseSBub3Igd2hvIHdlcmUgbG9zdCBidXQsIGFzIGluIGR1dHkgYm91bmQsIEkgd2lsbCBnaXZlIHlvdSB3aXRob3V0IHJlc2VydmUgdGhlIHJlcG9ydHMgdGhhdCBoYXZlIHJlYWNoZWQgbWUgc2luY2UgSSBoYXZlIGJlZW4gaGVyZSBpbiBteSBvd24gaG91c2UuIFRoZXkgc2F5IHRoZSBNeXJtaWRvbnMgcmV0dXJuZWQgaG9tZSBzYWZlbHkgdW5kZXIgQWNoaWxsZXMnIHNvbiBOZW9wdG9sZW11czsgc28gYWxzbyBkaWQgdGhlIHZhbGlhbnQgc29uIG9mIFBvaWFzLCBQaGlsb2N0ZXRlcy4gSWRvbWVuZXVzLCBhZ2FpbiwgbG9zdCBubyBtZW4gYXQgc2VhLCBhbmQgYWxsIGhpcyBmb2xsb3dlcnMgd2hvIGVzY2FwZWQgZGVhdGggaW4gdGhlIGZpZWxkIGdvdCBzYWZlIGhvbWUgd2l0aCBoaW0gdG8gQ3JldGUuIE5vIG1hdHRlciBob3cgZmFyIG91dCBvZiB0aGUgd29ybGQgeW91IGxpdmUsIHlvdSB3aWxsIGhhdmUgaGVhcmQgb2YgQWdhbWVtbm9uIGFuZCB0aGUgYmFkIGVuZCBoZSBjYW1lIHRvIGF0IHRoZSBoYW5kcyBvZiBBZWdpc3RodXMtIGFuZCBhIGZlYXJmdWwgcmVja29uaW5nIGRpZCBBZWdpc3RodXMgcHJlc2VudGx5IHBheS4gU2VlIHdoYXQgYSBnb29kIHRoaW5nIGl0IGlzIGZvciBhIG1hbiB0byBsZWF2ZSBhIHNvbiBiZWhpbmQgaGltIHRvIGRvIGFzIE9yZXN0ZXMgZGlkLCB3aG8ga2lsbGVkIGZhbHNlIEFlZ2lzdGh1cyB0aGUgbXVyZGVyZXIgb2YgaGlzIG5vYmxlIGZhdGhlci4gWW91IHRvbywgdGhlbi0gZm9yIHlvdSBhcmUgYSB0YWxsLCBzbWFydC1sb29raW5nIGZlbGxvdy0gc2hvdyB5b3VyIG1ldHRsZSBhbmQgbWFrZSB5b3Vyc2VsZiBhIG5hbWUgaW4gc3RvcnkuIg0KDQoiTmVzdG9yIHNvbiBvZiBOZWxldXMsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiaG9ub3VyIHRvIHRoZSBBY2hhZWFuIG5hbWUsIHRoZSBBY2hhZWFucyBhcHBsYXVkIE9yZXN0ZXMgYW5kIGhpcyBuYW1lIHdpbGwgbGl2ZSB0aHJvdWdoIGFsbCB0aW1lIGZvciBoZSBoYXMgYXZlbmdlZCBoaXMgZmF0aGVyIG5vYmx5LiBXb3VsZCB0aGF0IGhlYXZlbiBtaWdodCBncmFudCBtZSB0byBkbyBsaWtlIHZlbmdlYW5jZSBvbiB0aGUgaW5zb2xlbmNlIG9mIHRoZSB3aWNrZWQgc3VpdG9ycywgd2hvIGFyZSBpbGwgdHJlYXRpbmcgbWUgYW5kIHBsb3R0aW5nIG15IHJ1aW47IGJ1dCB0aGUgZ29kcyBoYXZlIG5vIHN1Y2ggaGFwcGluZXNzIGluIHN0b3JlIGZvciBtZSBhbmQgZm9yIG15IGZhdGhlciwgc28gd2UgbXVzdCBiZWFyIGl0IGFzIGJlc3Qgd2UgbWF5LiINCg0KIk15IGZyaWVuZCwiIHNhaWQgTmVzdG9yLCAibm93IHRoYXQgeW91IHJlbWluZCBtZSwgSSByZW1lbWJlciB0byBoYXZlIGhlYXJkIHRoYXQgeW91ciBtb3RoZXIgaGFzIG1hbnkgc3VpdG9ycywgd2hvIGFyZSBpbGwgZGlzcG9zZWQgdG93YXJkcyB5b3UgYW5kIGFyZSBtYWtpbmcgaGF2b2Mgb2YgeW91ciBlc3RhdGUuIERvIHlvdSBzdWJtaXQgdG8gdGhpcyB0YW1lbHksIG9yIGFyZSBwdWJsaWMgZmVlbGluZyBhbmQgdGhlIHZvaWNlIG9mIGhlYXZlbiBhZ2FpbnN0IHlvdT8gV2hvIGtub3dzIGJ1dCB3aGF0IFVseXNzZXMgbWF5IGNvbWUgYmFjayBhZnRlciBhbGwsIGFuZCBwYXkgdGhlc2Ugc2NvdW5kcmVscyBpbiBmdWxsLCBlaXRoZXIgc2luZ2xlLWhhbmRlZCBvciB3aXRoIGEgZm9yY2Ugb2YgQWNoYWVhbnMgYmVoaW5kIGhpbT8gSWYgTWluZXJ2YSB3ZXJlIHRvIHRha2UgYXMgZ3JlYXQgYSBsaWtpbmcgdG8geW91IGFzIHNoZSBkaWQgdG8gVWx5c3NlcyB3aGVuIHdlIHdlcmUgZmlnaHRpbmcgYmVmb3JlIFRyb3kgKGZvciBJIG5ldmVyIHlldCBzYXcgdGhlIGdvZHMgc28gb3Blbmx5IGZvbmQgb2YgYW55IG9uZSBhcyBNaW5lcnZhIHRoZW4gd2FzIG9mIHlvdXIgZmF0aGVyKSwgaWYgc2hlIHdvdWxkIHRha2UgYXMgZ29vZCBjYXJlIG9mIHlvdSBhcyBzaGUgZGlkIG9mIGhpbSwgdGhlc2Ugd29vZXJzIHdvdWxkIHNvb24gc29tZSBvZiB0aGVtIGhpbSwgZm9yZ2V0IHRoZWlyIHdvb2luZy4iDQoNClRlbGVtYWNodXMgYW5zd2VyZWQsICJJIGNhbiBleHBlY3Qgbm90aGluZyBvZiB0aGUga2luZDsgaXQgd291bGQgYmUgZmFyIHRvbyBtdWNoIHRvIGhvcGUgZm9yLiBJIGRhcmUgbm90IGxldCBteXNlbGYgdGhpbmsgb2YgaXQuIEV2ZW4gdGhvdWdoIHRoZSBnb2RzIHRoZW1zZWx2ZXMgd2lsbGVkIGl0IG5vIHN1Y2ggZ29vZCBmb3J0dW5lIGNvdWxkIGJlZmFsbCBtZS4iDQoNCk9uIHRoaXMgTWluZXJ2YSBzYWlkLCAiVGVsZW1hY2h1cywgd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IEhlYXZlbiBoYXMgYSBsb25nIGFybSBpZiBpdCBpcyBtaW5kZWQgdG8gc2F2ZSBhIG1hbjsgYW5kIGlmIGl0IHdlcmUgbWUsIEkgc2hvdWxkIG5vdCBjYXJlIGhvdyBtdWNoIEkgc3VmZmVyZWQgYmVmb3JlIGdldHRpbmcgaG9tZSwgcHJvdmlkZWQgSSBjb3VsZCBiZSBzYWZlIHdoZW4gSSB3YXMgb25jZSB0aGVyZS4gSSB3b3VsZCByYXRoZXIgdGhpcywgdGhhbiBnZXQgaG9tZSBxdWlja2x5LCBhbmQgdGhlbiBiZSBraWxsZWQgaW4gbXkgb3duIGhvdXNlIGFzIEFnYW1lbW5vbiB3YXMgYnkgdGhlIHRyZWFjaGVyeSBvZiBBZWdpc3RodXMgYW5kIGhpcyB3aWZlLiBTdGlsbCwgZGVhdGggaXMgY2VydGFpbiwgYW5kIHdoZW4gYSBtYW4ncyBob3VyIGlzIGNvbWUsIG5vdCBldmVuIHRoZSBnb2RzIGNhbiBzYXZlIGhpbSwgbm8gbWF0dGVyIGhvdyBmb25kIHRoZXkgYXJlIG9mIGhpbS4iDQoNCiJNZW50b3IsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiZG8gbm90IGxldCB1cyB0YWxrIGFib3V0IGl0IGFueSBtb3JlLiBUaGVyZSBpcyBubyBjaGFuY2Ugb2YgbXkgZmF0aGVyJ3MgZXZlciBjb21pbmcgYmFjazsgdGhlIGdvZHMgaGF2ZSBsb25nIHNpbmNlIGNvdW5zZWxsZWQgaGlzIGRlc3RydWN0aW9uLiBUaGVyZSBpcyBzb21ldGhpbmcgZWxzZSwgaG93ZXZlciwgYWJvdXQgd2hpY2ggSSBzaG91bGQgbGlrZSB0byBhc2sgTmVzdG9yLCBmb3IgaGUga25vd3MgbXVjaCBtb3JlIHRoYW4gYW55IG9uZSBlbHNlIGRvZXMuIFRoZXkgc2F5IGhlIGhhcyByZWlnbmVkIGZvciB0aHJlZSBnZW5lcmF0aW9ucyBzbyB0aGF0IGl0IGlzIGxpa2UgdGFsa2luZyB0byBhbiBpbW1vcnRhbC4gVGVsbCBtZSwgdGhlcmVmb3JlLCBOZXN0b3IsIGFuZCB0ZWxsIG1lIHRydWU7IGhvdyBkaWQgQWdhbWVtbm9uIGNvbWUgdG8gZGllIGluIHRoYXQgd2F5PyBXaGF0IHdhcyBNZW5lbGF1cyBkb2luZz8gQW5kIGhvdyBjYW1lIGZhbHNlIEFlZ2lzdGh1cyB0byBraWxsIHNvIGZhciBiZXR0ZXIgYSBtYW4gdGhhbiBoaW1zZWxmPyBXYXMgTWVuZWxhdXMgYXdheSBmcm9tIEFjaGFlYW4gQXJnb3MsIHZveWFnaW5nIGVsc2V3aGl0aGVyIGFtb25nIG1hbmtpbmQsIHRoYXQgQWVnaXN0aHVzIHRvb2sgaGVhcnQgYW5kIGtpbGxlZCBBZ2FtZW1ub24/Ig0KDQoiSSB3aWxsIHRlbGwgeW91IHRydWx5LCIgYW5zd2VyZWQgTmVzdG9yLCAiYW5kIGluZGVlZCB5b3UgaGF2ZSB5b3Vyc2VsZiBkaXZpbmVkIGhvdyBpdCBhbGwgaGFwcGVuZWQuIElmIE1lbmVsYXVzIHdoZW4gaGUgZ290IGJhY2sgZnJvbSBUcm95IGhhZCBmb3VuZCBBZWdpc3RodXMgc3RpbGwgYWxpdmUgaW4gaGlzIGhvdXNlLCB0aGVyZSB3b3VsZCBoYXZlIGJlZW4gbm8gYmFycm93IGhlYXBlZCB1cCBmb3IgaGltLCBub3QgZXZlbiB3aGVuIGhlIHdhcyBkZWFkLCBidXQgaGUgd291bGQgaGF2ZSBiZWVuIHRocm93biBvdXRzaWRlIHRoZSBjaXR5IHRvIGRvZ3MgYW5kIHZ1bHR1cmVzLCBhbmQgbm90IGEgd29tYW4gd291bGQgaGF2ZSBtb3VybmVkIGhpbSwgZm9yIGhlIGhhZCBkb25lIGEgZGVlZCBvZiBncmVhdCB3aWNrZWRuZXNzOyBidXQgd2Ugd2VyZSBvdmVyIHRoZXJlLCBmaWdodGluZyBoYXJkIGF0IFRyb3ksIGFuZCBBZWdpc3RodXMgd2hvIHdhcyB0YWtpbmcgaGlzIGVhc2UgcXVpZXRseSBpbiB0aGUgaGVhcnQgb2YgQXJnb3MsIGNham9sZWQgQWdhbWVtbm9uJ3Mgd2lmZSBDbHl0ZW1uZXN0cmEgd2l0aCBpbmNlc3NhbnQgZmxhdHRlcnkuDQoNCiJBdCBmaXJzdCBzaGUgd291bGQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggaGlzIHdpY2tlZCBzY2hlbWUsIGZvciBzaGUgd2FzIG9mIGEgZ29vZCBuYXR1cmFsIGRpc3Bvc2l0aW9uOyBtb3Jlb3ZlciB0aGVyZSB3YXMgYSBiYXJkIHdpdGggaGVyLCB0byB3aG9tIEFnYW1lbW5vbiBoYWQgZ2l2ZW4gc3RyaWN0IG9yZGVycyBvbiBzZXR0aW5nIG91dCBmb3IgVHJveSwgdGhhdCBoZSB3YXMgdG8ga2VlcCBndWFyZCBvdmVyIGhpcyB3aWZlOyBidXQgd2hlbiBoZWF2ZW4gaGFkIGNvdW5zZWxsZWQgaGVyIGRlc3RydWN0aW9uLCBBZWdpc3RodXMgdGh1cyB0aGlzIGJhcmQgb2ZmIHRvIGEgZGVzZXJ0IGlzbGFuZCBhbmQgbGVmdCBoaW0gdGhlcmUgZm9yIGNyb3dzIGFuZCBzZWFndWxscyB0byBiYXR0ZW4gdXBvbi0gYWZ0ZXIgd2hpY2ggc2hlIHdlbnQgd2lsbGluZ2x5IGVub3VnaCB0byB0aGUgaG91c2Ugb2YgQWVnaXN0aHVzLiBUaGVuIGhlIG9mZmVyZWQgbWFueSBidXJudCBzYWNyaWZpY2VzIHRvIHRoZSBnb2RzLCBhbmQgZGVjb3JhdGVkIG1hbnkgdGVtcGxlcyB3aXRoIHRhcGVzdHJpZXMgYW5kIGdpbGRpbmcsIGZvciBoZSBoYWQgc3VjY2VlZGVkIGZhciBiZXlvbmQgaGlzIGV4cGVjdGF0aW9ucy4NCg0KIk1lYW53aGlsZSBNZW5lbGF1cyBhbmQgSSB3ZXJlIG9uIG91ciB3YXkgaG9tZSBmcm9tIFRyb3ksIG9uIGdvb2QgdGVybXMgd2l0aCBvbmUgYW5vdGhlci4gV2hlbiB3ZSBnb3QgdG8gU3VuaXVtLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgQXRoZW5zLCBBcG9sbG8gd2l0aCBoaXMgcGFpbmxlc3Mgc2hhZnRzIGtpbGxlZCBQaHJvbnRpcyB0aGUgc3RlZXJzbWFuIG9mIE1lbmVsYXVzJyBzaGlwIChhbmQgbmV2ZXIgbWFuIGtuZXcgYmV0dGVyIGhvdyB0byBoYW5kbGUgYSB2ZXNzZWwgaW4gcm91Z2ggd2VhdGhlcikgc28gdGhhdCBoZSBkaWVkIHRoZW4gYW5kIHRoZXJlIHdpdGggdGhlIGhlbG0gaW4gaGlzIGhhbmQsIGFuZCBNZW5lbGF1cywgdGhvdWdoIHZlcnkgYW54aW91cyB0byBwcmVzcyBmb3J3YXJkLCBoYWQgdG8gd2FpdCBpbiBvcmRlciB0byBidXJ5IGhpcyBjb21yYWRlIGFuZCBnaXZlIGhpbSBoaXMgZHVlIGZ1bmVyYWwgcml0ZXMuIFByZXNlbnRseSwgd2hlbiBoZSB0b28gY291bGQgcHV0IHRvIHNlYSBhZ2FpbiwgYW5kIGhhZCBzYWlsZWQgb24gYXMgZmFyIGFzIHRoZSBNYWxlYW4gaGVhZHMsIEpvdmUgY291bnNlbGxlZCBldmlsIGFnYWluc3QgaGltIGFuZCBtYWRlIGl0IGl0IGJsb3cgaGFyZCB0aWxsIHRoZSB3YXZlcyByYW4gbW91bnRhaW5zIGhpZ2guIEhlcmUgaGUgZGl2aWRlZCBoaXMgZmxlZXQgYW5kIHRvb2sgdGhlIG9uZSBoYWxmIHRvd2FyZHMgQ3JldGUgd2hlcmUgdGhlIEN5ZG9uaWFucyBkd2VsbCByb3VuZCBhYm91dCB0aGUgd2F0ZXJzIG9mIHRoZSByaXZlciBJYXJkYW51cy4gVGhlcmUgaXMgYSBoaWdoIGhlYWRsYW5kIGhlcmVhYm91dHMgc3RyZXRjaGluZyBvdXQgaW50byB0aGUgc2VhIGZyb20gYSBwbGFjZSBjYWxsZWQgR29ydHluLCBhbmQgYWxsIGFsb25nIHRoaXMgcGFydCBvZiB0aGUgY29hc3QgYXMgZmFyIGFzIFBoYWVzdHVzIHRoZSBzZWEgcnVucyBoaWdoIHdoZW4gdGhlcmUgaXMgYSBzb3V0aCB3aW5kIGJsb3dpbmcsIGJ1dCBhcnRlciBQaGFlc3R1cyB0aGUgY29hc3QgaXMgbW9yZSBwcm90ZWN0ZWQsIGZvciBhIHNtYWxsIGhlYWRsYW5kIGNhbiBtYWtlIGEgZ3JlYXQgc2hlbHRlci4gSGVyZSB0aGlzIHBhcnQgb2YgdGhlIGZsZWV0IHdhcyBkcml2ZW4gb24gdG8gdGhlIHJvY2tzIGFuZCB3cmVja2VkOyBidXQgdGhlIGNyZXdzIGp1c3QgbWFuYWdlZCB0byBzYXZlIHRoZW1zZWx2ZXMuIEFzIGZvciB0aGUgb3RoZXIgZml2ZSBzaGlwcywgdGhleSB3ZXJlIHRha2VuIGJ5IHdpbmRzIGFuZCBzZWFzIHRvIEVneXB0LCB3aGVyZSBNZW5lbGF1cyBnYXRoZXJlZCBtdWNoIGdvbGQgYW5kIHN1YnN0YW5jZSBhbW9uZyBwZW9wbGUgb2YgYW4gYWxpZW4gc3BlZWNoLiBNZWFud2hpbGUgQWVnaXN0aHVzIGhlcmUgYXQgaG9tZSBwbG90dGVkIGhpcyBldmlsIGRlZWQuIEZvciBzZXZlbiB5ZWFycyBhZnRlciBoZSBoYWQga2lsbGVkIEFnYW1lbW5vbiBoZSBydWxlZCBpbiBNeWNlbmUsIGFuZCB0aGUgcGVvcGxlIHdlcmUgb2JlZGllbnQgdW5kZXIgaGltLCBidXQgaW4gdGhlIGVpZ2h0aCB5ZWFyIE9yZXN0ZXMgY2FtZSBiYWNrIGZyb20gQXRoZW5zIHRvIGJlIGhpcyBiYW5lLCBhbmQga2lsbGVkIHRoZSBtdXJkZXJlciBvZiBoaXMgZmF0aGVyLiBUaGVuIGhlIGNlbGVicmF0ZWQgdGhlIGZ1bmVyYWwgcml0ZXMgb2YgaGlzIG1vdGhlciBhbmQgb2YgZmFsc2UgQWVnaXN0aHVzIGJ5IGEgYmFucXVldCB0byB0aGUgcGVvcGxlIG9mIEFyZ29zLCBhbmQgb24gdGhhdCB2ZXJ5IGRheSBNZW5lbGF1cyBjYW1lIGhvbWUsIHdpdGggYXMgbXVjaCB0cmVhc3VyZSBhcyBoaXMgc2hpcHMgY291bGQgY2FycnkuDQoNCiJUYWtlIG15IGFkdmljZSB0aGVuLCBhbmQgZG8gbm90IGdvIHRyYXZlbGxpbmcgYWJvdXQgZm9yIGxvbmcgc28gZmFyIGZyb20gaG9tZSwgbm9yIGxlYXZlIHlvdXIgcHJvcGVydHkgd2l0aCBzdWNoIGRhbmdlcm91cyBwZW9wbGUgaW4geW91ciBob3VzZTsgdGhleSB3aWxsIGVhdCB1cCBldmVyeXRoaW5nIHlvdSBoYXZlIGFtb25nIHRoZW0sIGFuZCB5b3Ugd2lsbCBoYXZlIGJlZW4gb24gYSBmb29sJ3MgZXJyYW5kLiBTdGlsbCwgSSBzaG91bGQgYWR2aXNlIHlvdSBieSBhbGwgbWVhbnMgdG8gZ28gYW5kIHZpc2l0IE1lbmVsYXVzLCB3aG8gaGFzIGxhdGVseSBjb21lIG9mZiBhIHZveWFnZSBhbW9uZyBzdWNoIGRpc3RhbnQgcGVvcGxlcyBhcyBubyBtYW4gY291bGQgZXZlciBob3BlIHRvIGdldCBiYWNrIGZyb20sIHdoZW4gdGhlIHdpbmRzIGhhZCBvbmNlIGNhcnJpZWQgaGltIHNvIGZhciBvdXQgb2YgaGlzIHJlY2tvbmluZzsgZXZlbiBiaXJkcyBjYW5ub3QgZmx5IHRoZSBkaXN0YW5jZSBpbiBhIHR3ZWx2ZW1vbnRoLCBzbyB2YXN0IGFuZCB0ZXJyaWJsZSBhcmUgdGhlIHNlYXMgdGhhdCB0aGV5IG11c3QgY3Jvc3MuIEdvIHRvIGhpbSwgdGhlcmVmb3JlLCBieSBzZWEsIGFuZCB0YWtlIHlvdXIgb3duIG1lbiB3aXRoIHlvdTsgb3IgaWYgeW91IHdvdWxkIHJhdGhlciB0cmF2ZWwgYnkgbGFuZCB5b3UgY2FuIGhhdmUgYSBjaGFyaW90LCB5b3UgY2FuIGhhdmUgaG9yc2VzLCBhbmQgaGVyZSBhcmUgbXkgc29ucyB3aG8gY2FuIGVzY29ydCB5b3UgdG8gTGFjZWRhZW1vbiB3aGVyZSBNZW5lbGF1cyBsaXZlcy4gQmVnIG9mIGhpbSB0byBzcGVhayB0aGUgdHJ1dGgsIGFuZCBoZSB3aWxsIHRlbGwgeW91IG5vIGxpZXMsIGZvciBoZSBpcyBhbiBleGNlbGxlbnQgcGVyc29uLiINCg0KQXMgaGUgc3Bva2UgdGhlIHN1biBzZXQgYW5kIGl0IGNhbWUgb24gZGFyaywgd2hlcmVvbiBNaW5lcnZhIHNhaWQsICJTaXIsIGFsbCB0aGF0IHlvdSBoYXZlIHNhaWQgaXMgd2VsbDsgbm93LCBob3dldmVyLCBvcmRlciB0aGUgdG9uZ3VlcyBvZiB0aGUgdmljdGltcyB0byBiZSBjdXQsIGFuZCBtaXggd2luZSB0aGF0IHdlIG1heSBtYWtlIGRyaW5rLW9mZmVyaW5ncyB0byBOZXB0dW5lLCBhbmQgdGhlIG90aGVyIGltbW9ydGFscywgYW5kIHRoZW4gZ28gdG8gYmVkLCBmb3IgaXQgaXMgYmVkIHRpbWUuIFBlb3BsZSBzaG91bGQgZ28gYXdheSBlYXJseSBhbmQgbm90IGtlZXAgbGF0ZSBob3VycyBhdCBhIHJlbGlnaW91cyBmZXN0aXZhbC4iDQoNClRodXMgc3Bva2UgdGhlIGRhdWdodGVyIG9mIEpvdmUsIGFuZCB0aGV5IG9iZXllZCBoZXIgc2F5aW5nLiBNZW4gc2VydmFudHMgcG91cmVkIHdhdGVyIG92ZXIgdGhlIGhhbmRzIG9mIHRoZSBndWVzdHMsIHdoaWxlIHBhZ2VzIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHdpdGggd2luZSBhbmQgd2F0ZXIsIGFuZCBoYW5kZWQgaXQgcm91bmQgYWZ0ZXIgZ2l2aW5nIGV2ZXJ5IG1hbiBoaXMgZHJpbmstb2ZmZXJpbmc7IHRoZW4gdGhleSB0aHJldyB0aGUgdG9uZ3VlcyBvZiB0aGUgdmljdGltcyBpbnRvIHRoZSBmaXJlLCBhbmQgc3Rvb2QgdXAgdG8gbWFrZSB0aGVpciBkcmluay1vZmZlcmluZ3MuIFdoZW4gdGhleSBoYWQgbWFkZSB0aGVpciBvZmZlcmluZ3MgYW5kIGhhZCBkcnVuayBlYWNoIGFzIG11Y2ggYXMgaGUgd2FzIG1pbmRlZCwgTWluZXJ2YSBhbmQgVGVsZW1hY2h1cyB3ZXJlIGZvcmdvaW5nIG9uIGJvYXJkIHRoZWlyIHNoaXAsIGJ1dCBOZXN0b3IgY2F1Z2h0IHRoZW0gdXAgYXQgb25jZSBhbmQgc3RheWVkIHRoZW0uDQoNCiJIZWF2ZW4gYW5kIHRoZSBpbW1vcnRhbCBnb2RzLCIgaGUgZXhjbGFpbWVkLCAiZm9yYmlkIHRoYXQgeW91IHNob3VsZCBsZWF2ZSBteSBob3VzZSB0byBnbyBvbiBib2FyZCBvZiBhIHNoaXAuIERvIHlvdSB0aGluayBJIGFtIHNvIHBvb3IgYW5kIHNob3J0IG9mIGNsb3RoZXMsIG9yIHRoYXQgSSBoYXZlIHNvIGZldyBjbG9ha3MgYW5kIGFzIHRvIGJlIHVuYWJsZSB0byBmaW5kIGNvbWZvcnRhYmxlIGJlZHMgYm90aCBmb3IgbXlzZWxmIGFuZCBmb3IgbXkgZ3Vlc3RzPyBMZXQgbWUgdGVsbCB5b3UgSSBoYXZlIHN0b3JlIGJvdGggb2YgcnVncyBhbmQgY2xvYWtzLCBhbmQgc2hhbGwgbm90IHBlcm1pdCB0aGUgc29uIG9mIG15IG9sZCBmcmllbmQgVWx5c3NlcyB0byBjYW1wIGRvd24gb24gdGhlIGRlY2sgb2YgYSBzaGlwLSBub3Qgd2hpbGUgSSBsaXZlLSBub3IgeWV0IHdpbGwgbXkgc29ucyBhZnRlciBtZSwgYnV0IHRoZXkgd2lsbCBrZWVwIG9wZW4gaG91c2UgYXMgaGF2ZSBkb25lLiINCg0KVGhlbiBNaW5lcnZhIGFuc3dlcmVkLCAiU2lyLCB5b3UgaGF2ZSBzcG9rZW4gd2VsbCwgYW5kIGl0IHdpbGwgYmUgbXVjaCBiZXR0ZXIgdGhhdCBUZWxlbWFjaHVzIHNob3VsZCBkbyBhcyB5b3UgaGF2ZSBzYWlkOyBoZSwgdGhlcmVmb3JlLCBzaGFsbCByZXR1cm4gd2l0aCB5b3UgYW5kIHNsZWVwIGF0IHlvdXIgaG91c2UsIGJ1dCBJIG11c3QgZ28gYmFjayB0byBnaXZlIG9yZGVycyB0byBteSBjcmV3LCBhbmQga2VlcCB0aGVtIGluIGdvb2QgaGVhcnQuIEkgYW0gdGhlIG9ubHkgb2xkZXIgcGVyc29uIGFtb25nIHRoZW07IHRoZSByZXN0IGFyZSBhbGwgeW91bmcgbWVuIG9mIFRlbGVtYWNodXMnIG93biBhZ2UsIHdobyBoYXZlIHRha2VuIHRoaXMgdm95YWdlIG91dCBvZiBmcmllbmRzaGlwOyBzbyBJIG11c3QgcmV0dXJuIHRvIHRoZSBzaGlwIGFuZCBzbGVlcCB0aGVyZS4gTW9yZW92ZXIgdG8tbW9ycm93IEkgbXVzdCBnbyB0byB0aGUgQ2F1Y29uaWFucyB3aGVyZSBJIGhhdmUgYSBsYXJnZSBzdW0gb2YgbW9uZXkgbG9uZyBvd2luZyB0byBtZS4gQXMgZm9yIFRlbGVtYWNodXMsIG5vdyB0aGF0IGhlIGlzIHlvdXIgZ3Vlc3QsIHNlbmQgaGltIHRvIExhY2VkYWVtb24gaW4gYSBjaGFyaW90LCBhbmQgbGV0IG9uZSBvZiB5b3VyIHNvbnMgZ28gd2l0aCBoaW0uIEJlIHBsZWFzZWQgYWxzbyB0byBwcm92aWRlIGhpbSB3aXRoIHlvdXIgYmVzdCBhbmQgZmxlZXRlc3QgaG9yc2VzLiINCg0KV2hlbiBzaGUgaGFkIHRodXMgc3Bva2VuLCBzaGUgZmxldyBhd2F5IGluIHRoZSBmb3JtIG9mIGFuIGVhZ2xlLCBhbmQgYWxsIG1hcnZlbGxlZCBhcyB0aGV5IGJlaGVsZCBpdC4gTmVzdG9yIHdhcyBhc3RvbmlzaGVkLCBhbmQgdG9vayBUZWxlbWFjaHVzIGJ5IHRoZSBoYW5kLiAiTXkgZnJpZW5kLCIgc2FpZCBoZSwgIkkgc2VlIHRoYXQgeW91IGFyZSBnb2luZyB0byBiZSBhIGdyZWF0IGhlcm8gc29tZSBkYXksIHNpbmNlIHRoZSBnb2RzIHdhaXQgdXBvbiB5b3UgdGh1cyB3aGlsZSB5b3UgYXJlIHN0aWxsIHNvIHlvdW5nLiBUaGlzIGNhbiBoYXZlIGJlZW4gbm9uZSBvdGhlciBvZiB0aG9zZSB3aG8gZHdlbGwgaW4gaGVhdmVuIHRoYW4gSm92ZSdzIHJlZG91YnRhYmxlIGRhdWdodGVyLCB0aGUgVHJpdG8tYm9ybiwgd2hvIHNob3dlZCBzdWNoIGZhdm91ciB0b3dhcmRzIHlvdXIgYnJhdmUgZmF0aGVyIGFtb25nIHRoZSBBcmdpdmVzLiIgIkhvbHkgcXVlZW4sIiBoZSBjb250aW51ZWQsICJ2b3VjaHNhZmUgdG8gc2VuZCBkb3duIHRoeSBncmFjZSB1cG9uIG15c2VsZiwgbXkgZ29vZCB3aWZlLCBhbmQgbXkgY2hpbGRyZW4uIEluIHJldHVybiwgSSB3aWxsIG9mZmVyIHlvdSBpbiBzYWNyaWZpY2UgYSBicm9hZC1icm93ZWQgaGVpZmVyIG9mIGEgeWVhciBvbGQsIHVuYnJva2VuLCBhbmQgbmV2ZXIgeWV0IGJyb3VnaHQgYnkgbWFuIHVuZGVyIHRoZSB5b2tlLiBJIHdpbGwgZ2lsZCBoZXIgaG9ybnMsIGFuZCB3aWxsIG9mZmVyIGhlciB1cCB0byB5b3UgaW4gc2FjcmlmaWNlLiINCg0KVGh1cyBkaWQgaGUgcHJheSwgYW5kIE1pbmVydmEgaGVhcmQgaGlzIHByYXllci4gSGUgdGhlbiBsZWQgdGhlIHdheSB0byBoaXMgb3duIGhvdXNlLCBmb2xsb3dlZCBieSBoaXMgc29ucyBhbmQgc29ucy1pbi1sYXcuIFdoZW4gdGhleSBoYWQgZ290IHRoZXJlIGFuZCBoYWQgdGFrZW4gdGhlaXIgcGxhY2VzIG9uIHRoZSBiZW5jaGVzIGFuZCBzZWF0cywgaGUgbWl4ZWQgdGhlbSBhIGJvd2wgb2Ygc3dlZXQgd2luZSB0aGF0IHdhcyBlbGV2ZW4geWVhcnMgb2xkIHdoZW4gdGhlIGhvdXNla2VlcGVyIHRvb2sgdGhlIGxpZCBvZmYgdGhlIGphciB0aGF0IGhlbGQgaXQuIEFzIGhlIG1peGVkIHRoZSB3aW5lLCBoZSBwcmF5ZWQgbXVjaCBhbmQgbWFkZSBkcmluay1vZmZlcmluZ3MgdG8gTWluZXJ2YSwgZGF1Z2h0ZXIgb2YgQWVnaXMtYmVhcmluZyBKb3ZlLiBUaGVuLCB3aGVuIHRoZXkgaGFkIG1hZGUgdGhlaXIgZHJpbmstb2ZmZXJpbmdzIGFuZCBoYWQgZHJ1bmsgZWFjaCBhcyBtdWNoIGFzIGhlIHdhcyBtaW5kZWQsIHRoZSBvdGhlcnMgd2VudCBob21lIHRvIGJlZCBlYWNoIGluIGhpcyBvd24gYWJvZGU7IGJ1dCBOZXN0b3IgcHV0IFRlbGVtYWNodXMgdG8gc2xlZXAgaW4gdGhlIHJvb20gdGhhdCB3YXMgb3ZlciB0aGUgZ2F0ZXdheSBhbG9uZyB3aXRoIFBpc2lzdHJhdHVzLCB3aG8gd2FzIHRoZSBvbmx5IHVubWFycmllZCBzb24gbm93IGxlZnQgaGltLiBBcyBmb3IgaGltc2VsZiwgaGUgc2xlcHQgaW4gYW4gaW5uZXIgcm9vbSBvZiB0aGUgaG91c2UsIHdpdGggdGhlIHF1ZWVuIGhpcyB3aWZlIGJ5IGhpcyBzaWRlLg0KDQpOb3cgd2hlbiB0aGUgY2hpbGQgb2YgbW9ybmluZywgcm9zeS1maW5nZXJlZCBEYXduLCBhcHBlYXJlZCwgTmVzdG9yIGxlZnQgaGlzIGNvdWNoIGFuZCB0b29rIGhpcyBzZWF0IG9uIHRoZSBiZW5jaGVzIG9mIHdoaXRlIGFuZCBwb2xpc2hlZCBtYXJibGUgdGhhdCBzdG9vZCBpbiBmcm9udCBvZiBoaXMgaG91c2UuIEhlcmUgYWZvcmV0aW1lIHNhdCBOZWxldXMsIHBlZXIgb2YgZ29kcyBpbiBjb3Vuc2VsLCBidXQgaGUgd2FzIG5vdyBkZWFkLCBhbmQgaGFkIGdvbmUgdG8gdGhlIGhvdXNlIG9mIEhhZGVzOyBzbyBOZXN0b3Igc2F0IGluIGhpcyBzZWF0LCBzY2VwdHJlIGluIGhhbmQsIGFzIGd1YXJkaWFuIG9mIHRoZSBwdWJsaWMgd2VhbC4gSGlzIHNvbnMgYXMgdGhleSBsZWZ0IHRoZWlyIHJvb21zIGdhdGhlcmVkIHJvdW5kIGhpbSwgRWNoZXBocm9uLCBTdHJhdGl1cywgUGVyc2V1cywgQXJldHVzLCBhbmQgVGhyYXN5bWVkZXM7IHRoZSBzaXh0aCBzb24gd2FzIFBpc2lzdHJhdHVzLCBhbmQgd2hlbiBUZWxlbWFjaHVzIGpvaW5lZCB0aGVtIHRoZXkgbWFkZSBoaW0gc2l0IHdpdGggdGhlbS4gTmVzdG9yIHRoZW4gYWRkcmVzc2VkIHRoZW0uDQoNCiJNeSBzb25zLCIgc2FpZCBoZSwgIm1ha2UgaGFzdGUgdG8gZG8gYXMgSSBzaGFsbCBiaWQgeW91LiBJIHdpc2ggZmlyc3QgYW5kIGZvcmVtb3N0IHRvIHByb3BpdGlhdGUgdGhlIGdyZWF0IGdvZGRlc3MgTWluZXJ2YSwgd2hvIG1hbmlmZXN0ZWQgaGVyc2VsZiB2aXNpYmx5IHRvIG1lIGR1cmluZyB5ZXN0ZXJkYXkncyBmZXN0aXZpdGllcy4gR28sIHRoZW4sIG9uZSBvciBvdGhlciBvZiB5b3UgdG8gdGhlIHBsYWluLCB0ZWxsIHRoZSBzdG9ja21hbiB0byBsb29rIG1lIG91dCBhIGhlaWZlciwgYW5kIGNvbWUgb24gaGVyZSB3aXRoIGl0IGF0IG9uY2UuIEFub3RoZXIgbXVzdCBnbyB0byBUZWxlbWFjaHVzJ3Mgc2hpcCwgYW5kIGludml0ZSBhbGwgdGhlIGNyZXcsIGxlYXZpbmcgdHdvIG1lbiBvbmx5IGluIGNoYXJnZSBvZiB0aGUgdmVzc2VsLiBTb21lIG9uZSBlbHNlIHdpbGwgcnVuIGFuZCBmZXRjaCBMYWVyY2V1cyB0aGUgZ29sZHNtaXRoIHRvIGdpbGQgdGhlIGhvcm5zIG9mIHRoZSBoZWlmZXIuIFRoZSByZXN0LCBzdGF5IGFsbCBvZiB5b3Ugd2hlcmUgeW91IGFyZTsgdGVsbCB0aGUgbWFpZHMgaW4gdGhlIGhvdXNlIHRvIHByZXBhcmUgYW4gZXhjZWxsZW50IGRpbm5lciwgYW5kIHRvIGZldGNoIHNlYXRzLCBhbmQgbG9ncyBvZiB3b29kIGZvciBhIGJ1cm50IG9mZmVyaW5nLiBUZWxsIHRoZW0gYWxzby0gdG8gYnJpbmcgbWUgc29tZSBjbGVhciBzcHJpbmcgd2F0ZXIuIg0KDQpPbiB0aGlzIHRoZXkgaHVycmllZCBvZmYgb24gdGhlaXIgc2V2ZXJhbCBlcnJhbmRzLiBUaGUgaGVpZmVyIHdhcyBicm91Z2h0IGluIGZyb20gdGhlIHBsYWluLCBhbmQgVGVsZW1hY2h1cydzIGNyZXcgY2FtZSBmcm9tIHRoZSBzaGlwOyB0aGUgZ29sZHNtaXRoIGJyb3VnaHQgdGhlIGFudmlsLCBoYW1tZXIsIGFuZCB0b25ncywgd2l0aCB3aGljaCBoZSB3b3JrZWQgaGlzIGdvbGQsIGFuZCBNaW5lcnZhIGhlcnNlbGYgY2FtZSB0byB0aGUgc2FjcmlmaWNlLiBOZXN0b3IgZ2F2ZSBvdXQgdGhlIGdvbGQsIGFuZCB0aGUgc21pdGggZ2lsZGVkIHRoZSBob3JucyBvZiB0aGUgaGVpZmVyIHRoYXQgdGhlIGdvZGRlc3MgbWlnaHQgaGF2ZSBwbGVhc3VyZSBpbiB0aGVpciBiZWF1dHkuIFRoZW4gU3RyYXRpdXMgYW5kIEVjaGVwaHJvbiBicm91Z2h0IGhlciBpbiBieSB0aGUgaG9ybnM7IEFyZXR1cyBmZXRjaGVkIHdhdGVyIGZyb20gdGhlIGhvdXNlIGluIGEgZXdlciB0aGF0IGhhZCBhIGZsb3dlciBwYXR0ZXJuIG9uIGl0LCBhbmQgaW4gaGlzIG90aGVyIGhhbmQgaGUgaGVsZCBhIGJhc2tldCBvZiBiYXJsZXkgbWVhbDsgc3R1cmR5IFRocmFzeW1lZGVzIHN0b29kIGJ5IHdpdGggYSBzaGFycCBheGUsIHJlYWR5IHRvIHN0cmlrZSB0aGUgaGVpZmVyLCB3aGlsZSBQZXJzZXVzIGhlbGQgYSBidWNrZXQuIFRoZW4gTmVzdG9yIGJlZ2FuIHdpdGggd2FzaGluZyBoaXMgaGFuZHMgYW5kIHNwcmlua2xpbmcgdGhlIGJhcmxleSBtZWFsLCBhbmQgaGUgb2ZmZXJlZCBtYW55IGEgcHJheWVyIHRvIE1pbmVydmEgYXMgaGUgdGhyZXcgYSBsb2NrIGZyb20gdGhlIGhlaWZlcidzIGhlYWQgdXBvbiB0aGUgZmlyZS4NCg0KV2hlbiB0aGV5IGhhZCBkb25lIHByYXlpbmcgYW5kIHNwcmlua2xpbmcgdGhlIGJhcmxleSBtZWFsIFRocmFzeW1lZGVzIGRlYWx0IGhpcyBibG93LCBhbmQgYnJvdWdodCB0aGUgaGVpZmVyIGRvd24gd2l0aCBhIHN0cm9rZSB0aGF0IGN1dCB0aHJvdWdoIHRoZSB0ZW5kb25zIGF0IHRoZSBiYXNlIG9mIGhlciBuZWNrLCB3aGVyZW9uIHRoZSBkYXVnaHRlcnMgYW5kIGRhdWdodGVycy1pbi1sYXcgb2YgTmVzdG9yLCBhbmQgaGlzIHZlbmVyYWJsZSB3aWZlIEV1cnlkaWNlIChzaGUgd2FzIGVsZGVzdCBkYXVnaHRlciB0byBDbHltZW51cykgc2NyZWFtZWQgd2l0aCBkZWxpZ2h0LiBUaGVuIHRoZXkgbGlmdGVkIHRoZSBoZWlmZXIncyBoZWFkIGZyb20gb2ZmIHRoZSBncm91bmQsIGFuZCBQaXNpc3RyYXR1cyBjdXQgaGVyIHRocm9hdC4gV2hlbiBzaGUgaGFkIGRvbmUgYmxlZWRpbmcgYW5kIHdhcyBxdWl0ZSBkZWFkLCB0aGV5IGN1dCBoZXIgdXAuIFRoZXkgY3V0IG91dCB0aGUgdGhpZ2ggYm9uZXMgYWxsIGluIGR1ZSBjb3Vyc2UsIHdyYXBwZWQgdGhlbSByb3VuZCBpbiB0d28gbGF5ZXJzIG9mIGZhdCwgYW5kIHNldCBzb21lIHBpZWNlcyBvZiByYXcgbWVhdCBvbiB0aGUgdG9wIG9mIHRoZW07IHRoZW4gTmVzdG9yIGxhaWQgdGhlbSB1cG9uIHRoZSB3b29kIGZpcmUgYW5kIHBvdXJlZCB3aW5lIG92ZXIgdGhlbSwgd2hpbGUgdGhlIHlvdW5nIG1lbiBzdG9vZCBuZWFyIGhpbSB3aXRoIGZpdmUtcHJvbmdlZCBzcGl0cyBpbiB0aGVpciBoYW5kcy4gV2hlbiB0aGUgdGhpZ2hzIHdlcmUgYnVybmVkIGFuZCB0aGV5IGhhZCB0YXN0ZWQgdGhlIGlud2FyZCBtZWF0cywgdGhleSBjdXQgdGhlIHJlc3Qgb2YgdGhlIG1lYXQgdXAgc21hbGwsIHB1dCB0aGUgcGllY2VzIG9uIHRoZSBzcGl0cyBhbmQgdG9hc3RlZCB0aGVtIG92ZXIgdGhlIGZpcmUuDQoNCk1lYW53aGlsZSBsb3ZlbHkgUG9seWNhc3RlLCBOZXN0b3IncyB5b3VuZ2VzdCBkYXVnaHRlciwgd2FzaGVkIFRlbGVtYWNodXMuIFdoZW4gc2hlIGhhZCB3YXNoZWQgaGltIGFuZCBhbm9pbnRlZCBoaW0gd2l0aCBvaWwsIHNoZSBicm91Z2h0IGhpbSBhIGZhaXIgbWFudGxlIGFuZCBzaGlydCwgYW5kIGhlIGxvb2tlZCBsaWtlIGEgZ29kIGFzIGhlIGNhbWUgZnJvbSB0aGUgYmF0aCBhbmQgdG9vayBoaXMgc2VhdCBieSB0aGUgc2lkZSBvZiBOZXN0b3IuIFdoZW4gdGhlIG91dGVyIG1lYXRzIHdlcmUgZG9uZSB0aGV5IGRyZXcgdGhlbSBvZmYgdGhlIHNwaXRzIGFuZCBzYXQgZG93biB0byBkaW5uZXIgd2hlcmUgdGhleSB3ZXJlIHdhaXRlZCB1cG9uIGJ5IHNvbWUgd29ydGh5IGhlbmNobWVuLCB3aG8ga2VwdCBwb3VyaW5nIHRoZW0gb3V0IHRoZWlyIHdpbmUgaW4gY3VwcyBvZiBnb2xkLiBBcyBzb29uIGFzIHRoZXkgaGFkIGhhZCBoYWQgZW5vdWdoIHRvIGVhdCBhbmQgZHJpbmsgTmVzdG9yIHNhaWQsICJTb25zLCBwdXQgVGVsZW1hY2h1cydzIGhvcnNlcyB0byB0aGUgY2hhcmlvdCB0aGF0IGhlIG1heSBzdGFydCBhdCBvbmNlLiINCg0KVGh1cyBkaWQgaGUgc3BlYWssIGFuZCB0aGV5IGRpZCBldmVuIGFzIGhlIGhhZCBzYWlkLCBhbmQgeW9rZWQgdGhlIGZsZWV0IGhvcnNlcyB0byB0aGUgY2hhcmlvdC4gVGhlIGhvdXNla2VlcGVyIHBhY2tlZCB0aGVtIHVwIGEgcHJvdmlzaW9uIG9mIGJyZWFkLCB3aW5lLCBhbmQgc3dlZXRtZWF0cyBmaXQgZm9yIHRoZSBzb25zIG9mIHByaW5jZXMuIFRoZW4gVGVsZW1hY2h1cyBnb3QgaW50byB0aGUgY2hhcmlvdCwgd2hpbGUgUGlzaXN0cmF0dXMgZ2F0aGVyZWQgdXAgdGhlIHJlaW5zIGFuZCB0b29rIGhpcyBzZWF0IGJlc2lkZSBoaW0uIEhlIGxhc2hlZCB0aGUgaG9yc2VzIG9uIGFuZCB0aGV5IGZsZXcgZm9yd2FyZCBub3RoaW5nIGxvdGggaW50byB0aGUgb3BlbiBjb3VudHJ5LCBsZWF2aW5nIHRoZSBoaWdoIGNpdGFkZWwgb2YgUHlsb3MgYmVoaW5kIHRoZW0uIEFsbCB0aGF0IGRheSBkaWQgdGhleSB0cmF2ZWwsIHN3YXlpbmcgdGhlIHlva2UgdXBvbiB0aGVpciBuZWNrcyB0aWxsIHRoZSBzdW4gd2VudCBkb3duIGFuZCBkYXJrbmVzcyB3YXMgb3ZlciBhbGwgdGhlIGxhbmQuIFRoZW4gdGhleSByZWFjaGVkIFBoZXJhZSB3aGVyZSBEaW9jbGVzIGxpdmVkLCB3aG8gd2FzIHNvbiB0byBPcnRpbG9jaHVzIGFuZCBncmFuZHNvbiB0byBBbHBoZXVzLiBIZXJlIHRoZXkgcGFzc2VkIHRoZSBuaWdodCBhbmQgRGlvY2xlcyBlbnRlcnRhaW5lZCB0aGVtIGhvc3BpdGFibHkuIFdoZW4gdGhlIGNoaWxkIG9mIG1vcm5pbmcsIHJvc3ktZmluZ2VyZWQgRGF3bjsgYXBwZWFyZWQsIHRoZXkgYWdhaW4geW9rZWQgdGhlaXIgaG9yc2VzIGFuZCBkcm92ZSBvdXQgdGhyb3VnaCB0aGUgZ2F0ZXdheSB1bmRlciB0aGUgZWNob2luZyBnYXRlaG91c2UuIFBpc2lzdHJhdHVzIGxhc2hlZCB0aGUgaG9yc2VzIG9uIGFuZCB0aGV5IGZsZXcgZm9yd2FyZCBub3RoaW5nIGxvdGg7IHByZXNlbnRseSB0aGV5IGNhbWUgdG8gdGhlIGNvcm4gbGFuZHMgT2YgdGhlIG9wZW4gY291bnRyeSwgYW5kIGluIHRoZSBjb3Vyc2Ugb2YgdGltZSBjb21wbGV0ZWQgdGhlaXIgam91cm5leSwgc28gd2VsbCBkaWQgdGhlaXIgc3RlZWRzIHRha2UgdGhlbS4NCg0KTm93IHdoZW4gdGhlIHN1biBoYWQgc2V0IGFuZCBkYXJrbmVzcyB3YXMgb3ZlciB0aGUgbGFuZC4=",
      "timestamp": "2014-09-07T22:39:54.022Z"
    }
  ]
}

Here's what the response would have looked like had we not set the endOfRequestResolver. Notice that one logical message got split into multiple requests:

HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json; charset=utf-8
Content-Length: 184268
Date: Sun, 18 Jan 2015 14:59:36 GMT
Connection: keep-alive

{
  "protocol": "tcp",
  "port": 5555,
  "numberOfRequests": 5,
  "mode": "binary",
  "requests": [
    {
      "requestFrom": "::ffff:127.0.0.1:53172",
      "ip": "::ffff:127.0.0.1",
      "data": "AAEK/0Jvb2sgSQ0KDQpUZWxsIG1lLCBPIG11c2UsIG9mIHRoYXQgaW5nZW5pb3VzIGhlcm8gd2hvIHRyYXZlbGxlZCBmYXIgYW5kIHdpZGUgYWZ0ZXIgaGUgaGFkIHNhY2tlZCB0aGUgZmFtb3VzIHRvd24gb2YgVHJveS4gTWFueSBjaXRpZXMgZGlkIGhlIHZpc2l0LCBhbmQgbWFueSB3ZXJlIHRoZSBuYXRpb25zIHdpdGggd2hvc2UgbWFubmVycyBhbmQgY3VzdG9tcyBoZSB3YXMgYWNxdWFpbnRlZDsgbW9yZW92ZXIgaGUgc3VmZmVyZWQgbXVjaCBieSBzZWEgd2hpbGUgdHJ5aW5nIHRvIHNhdmUgaGlzIG93biBsaWZlIGFuZCBicmluZyBoaXMgbWVuIHNhZmVseSBob21lOyBidXQgZG8gd2hhdCBoZSBtaWdodCBoZSBjb3VsZCBub3Qgc2F2ZSBoaXMgbWVuLCBmb3IgdGhleSBwZXJpc2hlZCB0aHJvdWdoIHRoZWlyIG93biBzaGVlciBmb2xseSBpbiBlYXRpbmcgdGhlIGNhdHRsZSBvZiB0aGUgU3VuLWdvZCBIeXBlcmlvbjsgc28gdGhlIGdvZCBwcmV2ZW50ZWQgdGhlbSBmcm9tIGV2ZXIgcmVhY2hpbmcgaG9tZS4gVGVsbCBtZSwgdG9vLCBhYm91dCBhbGwgdGhlc2UgdGhpbmdzLCBPIGRhdWdodGVyIG9mIEpvdmUsIGZyb20gd2hhdHNvZXZlciBzb3VyY2UgeW91IG1heSBrbm93IHRoZW0uDQoNClNvIG5vdyBhbGwgd2hvIGVzY2FwZWQgZGVhdGggaW4gYmF0dGxlIG9yIGJ5IHNoaXB3cmVjayBoYWQgZ290IHNhZmVseSBob21lIGV4Y2VwdCBVbHlzc2VzLCBhbmQgaGUsIHRob3VnaCBoZSB3YXMgbG9uZ2luZyB0byByZXR1cm4gdG8gaGlzIHdpZmUgYW5kIGNvdW50cnksIHdhcyBkZXRhaW5lZCBieSB0aGUgZ29kZGVzcyBDYWx5cHNvLCB3aG8gaGFkIGdvdCBoaW0gaW50byBhIGxhcmdlIGNhdmUgYW5kIHdhbnRlZCB0byBtYXJyeSBoaW0uIEJ1dCBhcyB5ZWFycyB3ZW50IGJ5LCB0aGVyZSBjYW1lIGEgdGltZSB3aGVuIHRoZSBnb2RzIHNldHRsZWQgdGhhdCBoZSBzaG91bGQgZ28gYmFjayB0byBJdGhhY2E7IGV2ZW4gdGhlbiwgaG93ZXZlciwgd2hlbiBoZSB3YXMgYW1vbmcgaGlzIG93biBwZW9wbGUsIGhpcyB0cm91YmxlcyB3ZXJlIG5vdCB5ZXQgb3ZlcjsgbmV2ZXJ0aGVsZXNzIGFsbCB0aGUgZ29kcyBoYWQgbm93IGJlZ3VuIHRvIHBpdHkgaGltIGV4Y2VwdCBOZXB0dW5lLCB3aG8gc3RpbGwgcGVyc2VjdXRlZCBoaW0gd2l0aG91dCBjZWFzaW5nIGFuZCB3b3VsZCBub3QgbGV0IGhpbSBnZXQgaG9tZS4NCg0KTm93IE5lcHR1bmUgaGFkIGdvbmUgb2ZmIHRvIHRoZSBFdGhpb3BpYW5zLCB3aG8gYXJlIGF0IHRoZSB3b3JsZCdzIGVuZCwgYW5kIGxpZSBpbiB0d28gaGFsdmVzLCB0aGUgb25lIGxvb2tpbmcgV2VzdCBhbmQgdGhlIG90aGVyIEVhc3QuIEhlIGhhZCBnb25lIHRoZXJlIHRvIGFjY2VwdCBhIGhlY2F0b21iIG9mIHNoZWVwIGFuZCBveGVuLCBhbmQgd2FzIGVuam95aW5nIGhpbXNlbGYgYXQgaGlzIGZlc3RpdmFsOyBidXQgdGhlIG90aGVyIGdvZHMgbWV0IGluIHRoZSBob3VzZSBvZiBPbHltcGlhbiBKb3ZlLCBhbmQgdGhlIHNpcmUgb2YgZ29kcyBhbmQgbWVuIHNwb2tlIGZpcnN0LiBBdCB0aGF0IG1vbWVudCBoZSB3YXMgdGhpbmtpbmcgb2YgQWVnaXN0aHVzLCB3aG8gaGFkIGJlZW4ga2lsbGVkIGJ5IEFnYW1lbW5vbidzIHNvbiBPcmVzdGVzOyBzbyBoZSBzYWlkIHRvIHRoZSBvdGhlciBnb2RzOg0KDQoiU2VlIG5vdywgaG93IG1lbiBsYXkgYmxhbWUgdXBvbiB1cyBnb2RzIGZvciB3aGF0IGlzIGFmdGVyIGFsbCBub3RoaW5nIGJ1dCB0aGVpciBvd24gZm9sbHkuIExvb2sgYXQgQWVnaXN0aHVzOyBoZSBtdXN0IG5lZWRzIG1ha2UgbG92ZSB0byBBZ2FtZW1ub24ncyB3aWZlIHVucmlnaHRlb3VzbHkgYW5kIHRoZW4ga2lsbCBBZ2FtZW1ub24sIHRob3VnaCBoZSBrbmV3IGl0IHdvdWxkIGJlIHRoZSBkZWF0aCBvZiBoaW07IGZvciBJIHNlbnQgTWVyY3VyeSB0byB3YXJuIGhpbSBub3QgdG8gZG8gZWl0aGVyIG9mIHRoZXNlIHRoaW5ncywgaW5hc211Y2ggYXMgT3Jlc3RlcyB3b3VsZCBiZSBzdXJlIHRvIHRha2UgaGlzIHJldmVuZ2Ugd2hlbiBoZSBncmV3IHVwIGFuZCB3YW50ZWQgdG8gcmV0dXJuIGhvbWUuIE1lcmN1cnkgdG9sZCBoaW0gdGhpcyBpbiBhbGwgZ29vZCB3aWxsIGJ1dCBoZSB3b3VsZCBub3QgbGlzdGVuLCBhbmQgbm93IGhlIGhhcyBwYWlkIGZvciBldmVyeXRoaW5nIGluIGZ1bGwuIg0KDQpUaGVuIE1pbmVydmEgc2FpZCwgIkZhdGhlciwgc29uIG9mIFNhdHVybiwgS2luZyBvZiBraW5ncywgaXQgc2VydmVkIEFlZ2lzdGh1cyByaWdodCwgYW5kIHNvIGl0IHdvdWxkIGFueSBvbmUgZWxzZSB3aG8gZG9lcyBhcyBoZSBkaWQ7IGJ1dCBBZWdpc3RodXMgaXMgbmVpdGhlciBoZXJlIG5vciB0aGVyZTsgaXQgaXMgZm9yIFVseXNzZXMgdGhhdCBteSBoZWFydCBibGVlZHMsIHdoZW4gSSB0aGluayBvZiBoaXMgc3VmZmVyaW5ncyBpbiB0aGF0IGxvbmVseSBzZWEtZ2lydCBpc2xhbmQsIGZhciBhd2F5LCBwb29yIG1hbiwgZnJvbSBhbGwgaGlzIGZyaWVuZHMuIEl0IGlzIGFuIGlzbGFuZCBjb3ZlcmVkIHdpdGggZm9yZXN0LCBpbiB0aGUgdmVyeSBtaWRkbGUgb2YgdGhlIHNlYSwgYW5kIGEgZ29kZGVzcyBsaXZlcyB0aGVyZSwgZGF1Z2h0ZXIgb2YgdGhlIG1hZ2ljaWFuIEF0bGFzLCB3aG8gbG9va3MgYWZ0ZXIgdGhlIGJvdHRvbSBvZiB0aGUgb2NlYW4sIGFuZCBjYXJyaWVzIHRoZSBncmVhdCBjb2x1bW5zIHRoYXQga2VlcCBoZWF2ZW4gYW5kIGVhcnRoIGFzdW5kZXIuIFRoaXMgZGF1Z2h0ZXIgb2YgQXRsYXMgaGFzIGdvdCBob2xkIG9mIHBvb3IgdW5oYXBweSBVbHlzc2VzLCBhbmQga2VlcHMgdHJ5aW5nIGJ5IGV2ZXJ5IGtpbmQgb2YgYmxhbmRpc2htZW50IHRvIG1ha2UgaGltIGZvcmdldCBoaXMgaG9tZSwgc28gdGhhdCBoZSBpcyB0aXJlZCBvZiBsaWZlLCBhbmQgdGhpbmtzIG9mIG5vdGhpbmcgYnV0IGhvdyBoZSBtYXkgb25jZSBtb3JlIHNlZSB0aGUgc21va2Ugb2YgaGlzIG93biBjaGltbmV5cy4gWW91LCBzaXIsIHRha2Ugbm8gaGVlZCBvZiB0aGlzLCBhbmQgeWV0IHdoZW4gVWx5c3NlcyB3YXMgYmVmb3JlIFRyb3kgZGlkIGhlIG5vdCBwcm9waXRpYXRlIHlvdSB3aXRoIG1hbnkgYSBidXJudCBzYWNyaWZpY2U/IFdoeSB0aGVuIHNob3VsZCB5b3Uga2VlcCBvbiBiZWluZyBzbyBhbmdyeSB3aXRoIGhpbT8iDQoNCkFuZCBKb3ZlIHNhaWQsICJNeSBjaGlsZCwgd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IEhvdyBjYW4gSSBmb3JnZXQgVWx5c3NlcyB0aGFuIHdob20gdGhlcmUgaXMgbm8gbW9yZSBjYXBhYmxlIG1hbiBvbiBlYXJ0aCwgbm9yIG1vcmUgbGliZXJhbCBpbiBoaXMgb2ZmZXJpbmdzIHRvIHRoZSBpbW1vcnRhbCBnb2RzIHRoYXQgbGl2ZSBpbiBoZWF2ZW4/IEJlYXIgaW4gbWluZCwgaG93ZXZlciwgdGhhdCBOZXB0dW5lIGlzIHN0aWxsIGZ1cmlvdXMgd2l0aCBVbHlzc2VzIGZvciBoYXZpbmcgYmxpbmRlZCBhbiBleWUgb2YgUG9seXBoZW11cyBraW5nIG9mIHRoZSBDeWNsb3Blcy4gUG9seXBoZW11cyBpcyBzb24gdG8gTmVwdHVuZSBieSB0aGUgbnltcGggVGhvb3NhLCBkYXVnaHRlciB0byB0aGUgc2VhLWtpbmcgUGhvcmN5czsgdGhlcmVmb3JlIHRob3VnaCBoZSB3aWxsIG5vdCBraWxsIFVseXNzZXMgb3V0cmlnaHQsIGhlIHRvcm1lbnRzIGhpbSBieSBwcmV2ZW50aW5nIGhpbSBmcm9tIGdldHRpbmcgaG9tZS4gU3RpbGwsIGxldCB1cyBsYXkgb3VyIGhlYWRzIHRvZ2V0aGVyIGFuZCBzZWUgaG93IHdlIGNhbiBoZWxwIGhpbSB0byByZXR1cm47IE5lcHR1bmUgd2lsbCB0aGVuIGJlIHBhY2lmaWVkLCBmb3IgaWYgd2UgYXJlIGFsbCBvZiBhIG1pbmQgaGUgY2FuIGhhcmRseSBzdGFuZCBvdXQgYWdhaW5zdCB1cy4iDQoNCkFuZCBNaW5lcnZhIHNhaWQsICJGYXRoZXIsIHNvbiBvZiBTYXR1cm4sIEtpbmcgb2Yga2luZ3MsIGlmLCB0aGVuLCB0aGUgZ29kcyBub3cgbWVhbiB0aGF0IFVseXNzZXMgc2hvdWxkIGdldCBob21lLCB3ZSBzaG91bGQgZmlyc3Qgc2VuZCBNZXJjdXJ5IHRvIHRoZSBPZ3lnaWFuIGlzbGFuZCB0byB0ZWxsIENhbHlwc28gdGhhdCB3ZSBoYXZlIG1hZGUgdXAgb3VyIG1pbmRzIGFuZCB0aGF0IGhlIGlzIHRvIHJldHVybi4gSW4gdGhlIG1lYW50aW1lIEkgd2lsbCBnbyB0byBJdGhhY2EsIHRvIHB1dCBoZWFydCBpbnRvIFVseXNzZXMnIHNvbiBUZWxlbWFjaHVzOyBJIHdpbGwgZW1ib2xkZW4gaGltIHRvIGNhbGwgdGhlIEFjaGFlYW5zIGluIGFzc2VtYmx5LCBhbmQgc3BlYWsgb3V0IHRvIHRoZSBzdWl0b3JzIG9mIGhpcyBtb3RoZXIgUGVuZWxvcGUsIHdobyBwZXJzaXN0IGluIGVhdGluZyB1cCBhbnkgbnVtYmVyIG9mIGhpcyBzaGVlcCBhbmQgb3hlbjsgSSB3aWxsIGFsc28gY29uZHVjdCBoaW0gdG8gU3BhcnRhIGFuZCB0byBQeWxvcywgdG8gc2VlIGlmIGhlIGNhbiBoZWFyIGFueXRoaW5nIGFib3V0IHRoZSByZXR1cm4gb2YgaGlzIGRlYXIgZmF0aGVyLSBmb3IgdGhpcyB3aWxsIG1ha2UgcGVvcGxlIHNwZWFrIHdlbGwgb2YgaGltLiINCg0KU28gc2F5aW5nIHNoZSBib3VuZCBvbiBoZXIgZ2xpdHRlcmluZyBnb2xkZW4gc2FuZGFscywgaW1wZXJpc2hhYmxlLCB3aXRoIHdoaWNoIHNoZSBjYW4gZmx5IGxpa2UgdGhlIHdpbmQgb3ZlciBsYW5kIG9yIHNlYTsgc2hlIGdyYXNwZWQgdGhlIHJlZG91YnRhYmxlIGJyb256ZS1zaG9kIHNwZWFyLCBzbyBzdG91dCBhbmQgc3R1cmR5IGFuZCBzdHJvbmcsIHdoZXJld2l0aCBzaGUgcXVlbGxzIHRoZSByYW5rcyBvZiBoZXJvZXMgd2hvIGhhdmUgZGlzcGxlYXNlZCBoZXIsIGFuZCBkb3duIHNoZSBkYXJ0ZWQgZnJvbSB0aGUgdG9wbW9zdCBzdW1taXRzIG9mIE9seW1wdXMsIHdoZXJlb24gZm9ydGh3aXRoIHNoZSB3YXMgaW4gSXRoYWNhLCBhdCB0aGUgZ2F0ZXdheSBvZiBVbHlzc2VzJyBob3VzZSwgZGlzZ3Vpc2VkIGFzIGEgdmlzaXRvciwgTWVudGVzLCBjaGllZiBvZiB0aGUgVGFwaGlhbnMsIGFuZCBzaGUgaGVsZCBhIGJyb256ZSBzcGVhciBpbiBoZXIgaGFuZC4gVGhlcmUgc2hlIGZvdW5kIHRoZSBsb3JkbHkgc3VpdG9ycyBzZWF0ZWQgb24gaGlkZXMgb2YgdGhlIG94ZW4gd2hpY2ggdGhleSBoYWQga2lsbGVkIGFuZCBlYXRlbiwgYW5kIHBsYXlpbmcgZHJhdWdodHMgaW4gZnJvbnQgb2YgdGhlIGhvdXNlLiBNZW4tc2VydmFudHMgYW5kIHBhZ2VzIHdlcmUgYnVzdGxpbmcgYWJvdXQgdG8gd2FpdCB1cG9uIHRoZW0sIHNvbWUgbWl4aW5nIHdpbmUgd2l0aCB3YXRlciBpbiB0aGUgbWl4aW5nLWJvd2xzLCBzb21lIGNsZWFuaW5nIGRvd24gdGhlIHRhYmxlcyB3aXRoIHdldCBzcG9uZ2VzIGFuZCBsYXlpbmcgdGhlbSBvdXQgYWdhaW4sIGFuZCBzb21lIGN1dHRpbmcgdXAgZ3JlYXQgcXVhbnRpdGllcyBvZiBtZWF0Lg0KDQpUZWxlbWFjaHVzIHNhdyBoZXIgbG9uZyBiZWZvcmUgYW55IG9uZSBlbHNlIGRpZC4gSGUgd2FzIHNpdHRpbmcgbW9vZGlseSBhbW9uZyB0aGUgc3VpdG9ycyB0aGlua2luZyBhYm91dCBoaXMgYnJhdmUgZmF0aGVyLCBhbmQgaG93IGhlIHdvdWxkIHNlbmQgdGhlbSBmbHlpbmcgb3V0IG9mIHRoZSBob3VzZSwgaWYgaGUgd2VyZSB0byBjb21lIHRvIGhpcyBvd24gYWdhaW4gYW5kIGJlIGhvbm91cmVkIGFzIGluIGRheXMgZ29uZSBieS4gVGh1cyBicm9vZGluZyBhcyBoZSBzYXQgYW1vbmcgdGhlbSwgaGUgY2F1Z2h0IHNpZ2h0IG9mIE1pbmVydmEgYW5kIHdlbnQgc3RyYWlnaHQgdG8gdGhlIGdhdGUsIGZvciBoZSB3YXMgdmV4ZWQgdGhhdCBhIHN0cmFuZ2VyIHNob3VsZCBiZSBrZXB0IHdhaXRpbmcgZm9yIGFkbWl0dGFuY2UuIEhlIHRvb2sgaGVyIHJpZ2h0IGhhbmQgaW4gaGlzIG93biwgYW5kIGJhZGUgaGVyIGdpdmUgaGltIGhlciBzcGVhci4gIldlbGNvbWUsIiBzYWlkIGhlLCAidG8gb3VyIGhvdXNlLCBhbmQgd2hlbiB5b3UgaGF2ZSBwYXJ0YWtlbiBvZiBmb29kIHlvdSBzaGFsbCB0ZWxsIHVzIHdoYXQgeW91IGhhdmUgY29tZSBmb3IuIg0KDQpIZSBsZWQgdGhlIHdheSBhcyBoZSBzcG9rZSwgYW5kIE1pbmVydmEgZm9sbG93ZWQgaGltLiBXaGVuIHRoZXkgd2VyZSB3aXRoaW4gaGUgdG9vayBoZXIgc3BlYXIgYW5kIHNldCBpdCBpbiB0aGUgc3BlYXItIHN0YW5kIGFnYWluc3QgYSBzdHJvbmcgYmVhcmluZy1wb3N0IGFsb25nIHdpdGggdGhlIG1hbnkgb3RoZXIgc3BlYXJzIG9mIGhpcyB1bmhhcHB5IGZhdGhlciwgYW5kIGhlIGNvbmR1Y3RlZCBoZXIgdG8gYSByaWNobHkgZGVjb3JhdGVkIHNlYXQgdW5kZXIgd2hpY2ggaGUgdGhyZXcgYSBjbG90aCBvZiBkYW1hc2suIFRoZXJlIHdhcyBhIGZvb3RzdG9vbCBhbHNvIGZvciBoZXIgZmVldCwgYW5kIGhlIHNldCBhbm90aGVyIHNlYXQgbmVhciBoZXIgZm9yIGhpbXNlbGYsIGF3YXkgZnJvbSB0aGUgc3VpdG9ycywgdGhhdCBzaGUgbWlnaHQgbm90IGJlIGFubm95ZWQgd2hpbGUgZWF0aW5nIGJ5IHRoZWlyIG5vaXNlIGFuZCBpbnNvbGVuY2UsIGFuZCB0aGF0IGhlIG1pZ2h0IGFzayBoZXIgbW9yZSBmcmVlbHkgYWJvdXQgaGlzIGZhdGhlci4NCg0KQSBtYWlkIHNlcnZhbnQgdGhlbiBicm91Z2h0IHRoZW0gd2F0ZXIgaW4gYSBiZWF1dGlmdWwgZ29sZGVuIGV3ZXIgYW5kIHBvdXJlZCBpdCBpbnRvIGEgc2lsdmVyIGJhc2luIGZvciB0aGVtIHRvIHdhc2ggdGhlaXIgaGFuZHMsIGFuZCBzaGUgZHJldyBhIGNsZWFuIHRhYmxlIGJlc2lkZSB0aGVtLiBBbiB1cHBlciBzZXJ2YW50IGJyb3VnaHQgdGhlbSBicmVhZCwgYW5kIG9mZmVyZWQgdGhlbSBtYW55IGdvb2QgdGhpbmdzIG9mIHdoYXQgdGhlcmUgd2FzIGluIHRoZSBob3VzZSwgdGhlIGNhcnZlciBmZXRjaGVkIHRoZW0gcGxhdGVzIG9mIGFsbCBtYW5uZXIgb2YgbWVhdHMgYW5kIHNldCBjdXBzIG9mIGdvbGQgYnkgdGhlaXIgc2lkZSwgYW5kIGEgbWFuLXNlcnZhbnQgYnJvdWdodCB0aGVtIHdpbmUgYW5kIHBvdXJlZCBpdCBvdXQgZm9yIHRoZW0uDQoNClRoZW4gdGhlIHN1aXRvcnMgY2FtZSBpbiBhbmQgdG9vayB0aGVpciBwbGFjZXMgb24gdGhlIGJlbmNoZXMgYW5kIHNlYXRzLiBGb3J0aHdpdGggbWVuIHNlcnZhbnRzIHBvdXJlZCB3YXRlciBvdmVyIHRoZWlyIGhhbmRzLCBtYWlkcyB3ZW50IHJvdW5kIHdpdGggdGhlIGJyZWFkLWJhc2tldHMsIHBhZ2VzIGZpbGxlZCB0aGUgbWl4aW5nLWJvd2xzIHdpdGggd2luZSBhbmQgd2F0ZXIsIGFuZCB0aGV5IGxhaWQgdGhlaXIgaGFuZHMgdXBvbiB0aGUgZ29vZCB0aGluZ3MgdGhhdCB3ZXJlIGJlZm9yZSB0aGVtLiBBcyBzb29uIGFzIHRoZXkgaGFkIGhhZCBlbm91Z2ggdG8gZWF0IGFuZCBkcmluayB0aGV5IHdhbnRlZCBtdXNpYyBhbmQgZGFuY2luZywgd2hpY2ggYXJlIHRoZSBjcm93bmluZyBlbWJlbGxpc2htZW50cyBvZiBhIGJhbnF1ZXQsIHNvIGEgc2VydmFudCBicm91Z2h0IGEgbHlyZSB0byBQaGVtaXVzLCB3aG9tIHRoZXkgY29tcGVsbGVkIHBlcmZvcmNlIHRvIHNpbmcgdG8gdGhlbS4gQXMgc29vbiBhcyBoZSB0b3VjaGVkIGhpcyBseXJlIGFuZCBiZWdhbiB0byBzaW5nIFRlbGVtYWNodXMgc3Bva2UgbG93IHRvIE1pbmVydmEsIHdpdGggaGlzIGhlYWQgY2xvc2UgdG8gaGVycyB0aGF0IG5vIG1hbiBtaWdodCBoZWFyLg0KDQoiSSBob3BlLCBzaXIsIiBzYWlkIGhlLCAidGhhdCB5b3Ugd2lsbCBub3QgYmUgb2ZmZW5kZWQgd2l0aCB3aGF0IEkgYW0gZ29pbmcgdG8gc2F5LiBTaW5naW5nIGNvbWVzIGNoZWFwIHRvIHRob3NlIHdobyBkbyBub3QgcGF5IGZvciBpdCwgYW5kIGFsbCB0aGlzIGlzIGRvbmUgYXQgdGhlIGNvc3Qgb2Ygb25lIHdob3NlIGJvbmVzIGxpZSByb3R0aW5nIGluIHNvbWUgd2lsZGVybmVzcyBvciBncmluZGluZyB0byBwb3dkZXIgaW4gdGhlIHN1cmYuIElmIHRoZXNlIG1lbiB3ZXJlIHRvIHNlZSBteSBmYXRoZXIgY29tZSBiYWNrIHRvIEl0aGFjYSB0aGV5IHdvdWxkIHByYXkgZm9yIGxvbmdlciBsZWdzIHJhdGhlciB0aGFuIGEgbG9uZ2VyIHB1cnNlLCBmb3IgbW9uZXkgd291bGQgbm90IHNlcnZlIHRoZW07IGJ1dCBoZSwgYWxhcywgaGFzIGZhbGxlbiBvbiBhbiBpbGwgZmF0ZSwgYW5kIGV2ZW4gd2hlbiBwZW9wbGUgZG8gc29tZXRpbWVzIHNheSB0aGF0IGhlIGlzIGNvbWluZywgd2Ugbm8gbG9uZ2VyIGhlZWQgdGhlbTsgd2Ugc2hhbGwgbmV2ZXIgc2VlIGhpbSBhZ2Fpbi4gQW5kIG5vdywgc2lyLCB0ZWxsIG1lIGFuZCB0ZWxsIG1lIHRydWUsIHdobyB5b3UgYXJlIGFuZCB3aGVyZSB5b3UgY29tZSBmcm9tLiBUZWxsIG1lIG9mIHlvdXIgdG93biBhbmQgcGFyZW50cywgd2hhdCBtYW5uZXIgb2Ygc2hpcCB5b3UgY2FtZSBpbiwgaG93IHlvdXIgY3JldyBicm91Z2h0IHlvdSB0byBJdGhhY2EsIGFuZCBvZiB3aGF0IG5hdGlvbiB0aGV5IGRlY2xhcmVkIHRoZW1zZWx2ZXMgdG8gYmUtIGZvciB5b3UgY2Fubm90IGhhdmUgY29tZSBieSBsYW5kLiBUZWxsIG1lIGFsc28gdHJ1bHksIGZvciBJIHdhbnQgdG8ga25vdywgYXJlIHlvdSBhIHN0cmFuZ2VyIHRvIHRoaXMgaG91c2UsIG9yIGhhdmUgeW91IGJlZW4gaGVyZSBpbiBteSBmYXRoZXIncyB0aW1lPyBJbiB0aGUgb2xkIGRheXMgd2UgaGFkIG1hbnkgdmlzaXRvcnMgZm9yIG15IGZhdGhlciB3ZW50IGFib3V0IG11Y2ggaGltc2VsZi4iDQoNCkFuZCBNaW5lcnZhIGFuc3dlcmVkLCAiSSB3aWxsIHRlbGwgeW91IHRydWx5IGFuZCBwYXJ0aWN1bGFybHkgYWxsIGFib3V0IGl0LiBJIGFtIE1lbnRlcywgc29uIG9mIEFuY2hpYWx1cywgYW5kIEkgYW0gS2luZyBvZiB0aGUgVGFwaGlhbnMuIEkgaGF2ZSBjb21lIGhlcmUgd2l0aCBteSBzaGlwIGFuZCBjcmV3LCBvbiBhIHZveWFnZSB0byBtZW4gb2YgYSBmb3JlaWduIHRvbmd1ZSBiZWluZyBib3VuZCBmb3IgVGVtZXNhIHdpdGggYSBjYXJnbyBvZiBpcm9uLCBhbmQgSSBzaGFsbCBicmluZyBiYWNrIGNvcHBlci4gQXMgZm9yIG15IHNoaXAsIGl0IGxpZXMgb3ZlciB5b25kZXIgb2ZmIHRoZSBvcGVuIGNvdW50cnkgYXdheSBmcm9tIHRoZSB0b3duLCBpbiB0aGUgaGFyYm91ciBSaGVpdGhyb24gdW5kZXIgdGhlIHdvb2RlZCBtb3VudGFpbiBOZXJpdHVtLiBPdXIgZmF0aGVycyB3ZXJlIGZyaWVuZHMgYmVmb3JlIHVzLCBhcyBvbGQgTGFlcnRlcyB3aWxsIHRlbGwgeW91LCBpZiB5b3Ugd2lsbCBnbyBhbmQgYXNrIGhpbS4gVGhleSBzYXksIGhvd2V2ZXIsIHRoYXQgaGUgbmV2ZXIgY29tZXMgdG8gdG93biBub3csIGFuZCBsaXZlcyBieSBoaW1zZWxmIGluIHRoZSBjb3VudHJ5LCBmYXJpbmcgaGFyZGx5LCB3aXRoIGFuIG9sZCB3b21hbiB0byBsb29rIGFmdGVyIGhpbSBhbmQgZ2V0IGhpcyBkaW5uZXIgZm9yIGhpbSwgd2hlbiBoZSBjb21lcyBpbiB0aXJlZCBmcm9tIHBvdHRlcmluZyBhYm91dCBoaXMgdmluZXlhcmQuIFRoZXkgdG9sZCBtZSB5b3VyIGZhdGhlciB3YXMgYXQgaG9tZSBhZ2FpbiwgYW5kIHRoYXQgd2FzIHdoeSBJIGNhbWUsIGJ1dCBpdCBzZWVtcyB0aGUgZ29kcyBhcmUgc3RpbGwga2VlcGluZyBoaW0gYmFjaywgZm9yIGhlIGlzIG5vdCBkZWFkIHlldCBub3Qgb24gdGhlIG1haW5sYW5kLiBJdCBpcyBtb3JlIGxpa2VseSBoZSBpcyBvbiBzb21lIHNlYS1naXJ0IGlzbGFuZCBpbiBtaWQgb2NlYW4sIG9yIGEgcHJpc29uZXIgYW1vbmcgc2F2YWdlcyB3aG8gYXJlIGRldGFpbmluZyBoaW0gYWdhaW5zdCBoaXMgd2lsbCBJIGFtIG5vIHByb3BoZXQsIGFuZCBrbm93IHZlcnkgbGl0dGxlIGFib3V0IG9tZW5zLCBidXQgSSBzcGVhayBhcyBpdCBpcyBib3JuZSBpbiB1cG9uIG1lIGZyb20gaGVhdmVuLCBhbmQgYXNzdXJlIHlvdSB0aGF0IGhlIHdpbGwgbm90IGJlIGF3YXkgbXVjaCBsb25nZXI7IGZvciBoZSBpcyBhIG1hbiBvZiBzdWNoIHJlc291cmNlIHRoYXQgZXZlbiB0aG91Z2ggaGUgd2VyZSBpbiBjaGFpbnMgb2YgaXJvbiBoZSB3b3VsZCBmaW5kIHNvbWUgbWVhbnMgb2YgZ2V0dGluZyBob21lIGFnYWluLiBCdXQgdGVsbCBtZSwgYW5kIHRlbGwgbWUgdHJ1ZSwgY2FuIFVseXNzZXMgcmVhbGx5IGhhdmUgc3VjaCBhIGZpbmUgbG9va2luZyBmZWxsb3cgZm9yIGEgc29uPyBZb3UgYXJlIGluZGVlZCB3b25kZXJmdWxseSBsaWtlIGhpbSBhYm91dCB0aGUgaGVhZCBhbmQgZXllcywgZm9yIHdlIHdlcmUgY2xvc2UgZnJpZW5kcyBiZWZvcmUgaGUgc2V0IHNhaWwgZm9yIFRyb3kgd2hlcmUgdGhlIGZsb3dlciBvZiBhbGwgdGhlIEFyZ2l2ZXMgd2VudCBhbHNvLiBTaW5jZSB0aGF0IHRpbWUgd2UgaGF2ZSBuZXZlciBlaXRoZXIgb2YgdXMgc2VlbiB0aGUgb3RoZXIuIg0KDQoiTXkgbW90aGVyLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgdGVsbHMgbWUgSSBhbSBzb24gdG8gVWx5c3NlcywgYnV0IGl0IGlzIGEgd2lzZSBjaGlsZCB0aGF0IGtub3dzIGhpcyBvd24gZmF0aGVyLiBXb3VsZCB0aGF0IEkgd2VyZSBzb24gdG8gb25lIHdobyBoYWQgZ3Jvd24gb2xkIHVwb24gaGlzIG93biBlc3RhdGVzLCBmb3IsIHNpbmNlIHlvdSBhc2sgbWUsIHRoZXJlIGlzIG5vIG1vcmUgaWxsLXN0YXJyZWQgbWFuIHVuZGVyIGhlYXZlbiB0aGFuIGhlIHdobyB0aGV5IHRlbGwgbWUgaXMgbXkgZmF0aGVyLiINCg0KQW5kIE1pbmVydmEgc2FpZCwgIlRoZXJlIGlzIG5vIGZlYXIgb2YgeW91ciByYWNlIGR5aW5nIG91dCB5ZXQsIHdoaWxlIFBlbmVsb3BlIGhhcyBzdWNoIGEgZmluZSBzb24gYXMgeW91IGFyZS4gQnV0IHRlbGwgbWUsIGFuZCB0ZWxsIG1lIHRydWUsIHdoYXQgaXMgdGhlIG1lYW5pbmcgb2YgYWxsIHRoaXMgZmVhc3RpbmcsIGFuZCB3aG8gYXJlIHRoZXNlIHBlb3BsZT8gV2hhdCBpcyBpdCBhbGwgYWJvdXQ/IEhhdmUgeW91IHNvbWUgYmFucXVldCwgb3IgaXMgdGhlcmUgYSB3ZWRkaW5nIGluIHRoZSBmYW1pbHktIGZvciBubyBvbmUgc2VlbXMgdG8gYmUgYnJpbmdpbmcgYW55IHByb3Zpc2lvbnMgb2YgaGlzIG93bj8gQW5kIHRoZSBndWVzdHMtIGhvdyBhdHJvY2lvdXNseSB0aGV5IGFyZSBiZWhhdmluZzsgd2hhdCByaW90IHRoZXkgbWFrZSBvdmVyIHRoZSB3aG9sZSBob3VzZTsgaXQgaXMgZW5vdWdoIHRvIGRpc2d1c3QgYW55IHJlc3BlY3RhYmxlIHBlcnNvbiB3aG8gY29tZXMgbmVhciB0aGVtLiINCg0KIlNpciwiIHNhaWQgVGVsZW1hY2h1cywgImFzIHJlZ2FyZHMgeW91ciBxdWVzdGlvbiwgc28gbG9uZyBhcyBteSBmYXRoZXIgd2FzIGhlcmUgaXQgd2FzIHdlbGwgd2l0aCB1cyBhbmQgd2l0aCB0aGUgaG91c2UsIGJ1dCB0aGUgZ29kcyBpbiB0aGVpciBkaXNwbGVhc3VyZSBoYXZlIHdpbGxlZCBpdCBvdGhlcndpc2UsIGFuZCBoYXZlIGhpZGRlbiBoaW0gYXdheSBtb3JlIGNsb3NlbHkgdGhhbiBtb3J0YWwgbWFuIHdhcyBldmVyIHlldCBoaWRkZW4uIEkgY291bGQgaGF2ZSBib3JuZSBpdCBiZXR0ZXIgZXZlbiB0aG91Z2ggaGUgd2VyZSBkZWFkLCBpZiBoZSBoYWQgZmFsbGVuIHdpdGggaGlzIG1lbiBiZWZvcmUgVHJveSwgb3IgaGFkIGRpZWQgd2l0aCBmcmllbmRzIGFyb3VuZCBoaW0gd2hlbiB0aGUgZGF5cyBvZiBoaXMgZmlnaHRpbmcgd2VyZSBkb25lOyBmb3IgdGhlbiB0aGUgQWNoYWVhbnMgd291bGQgaGF2ZSBidWlsdCBhIG1vdW5kIG92ZXIgaGlzIGFzaGVzLCBhbmQgSSBzaG91bGQgbXlzZWxmIGhhdmUgYmVlbiBoZWlyIHRvIGhpcyByZW5vd247IGJ1dCBub3cgdGhlIHN0b3JtLXdpbmRzIGhhdmUgc3Bpcml0ZWQgaGltIGF3YXkgd2Uga25vdyBub3Qgd2l0aGVyOyBoZSBpcyBnb25lIHdpdGhvdXQgbGVhdmluZyBzbyBtdWNoIGFzIGEgdHJhY2UgYmVoaW5kIGhpbSwgYW5kIEkgaW5oZXJpdCBub3RoaW5nIGJ1dCBkaXNtYXkuIE5vciBkb2VzIHRoZSBtYXR0ZXIgZW5kIHNpbXBseSB3aXRoIGdyaWVmIGZvciB0aGUgbG9zcyBvZiBteSBmYXRoZXI7IGhlYXZlbiBoYXMgbGFpZCBzb3Jyb3dzIHVwb24gbWUgb2YgeWV0IGFub3RoZXIga2luZDsgZm9yIHRoZSBjaGllZnMgZnJvbSBhbGwgb3VyIGlzbGFuZHMsIER1bGljaGl1bSwgU2FtZSwgYW5kIHRoZSB3b29kbGFuZCBpc2xhbmQgb2YgWmFjeW50aHVzLCBhcyBhbHNvIGFsbCB0aGUgcHJpbmNpcGFsIG1lbiBvZiBJdGhhY2EgaXRzZWxmLCBhcmUgZWF0aW5nIHVwIG15IGhvdXNlIHVuZGVyIHRoZSBwcmV0ZXh0IG9mIHBheWluZyB0aGVpciBjb3VydCB0byBteSBtb3RoZXIsIHdobyB3aWxsIG5laXRoZXIgcG9pbnQgYmxhbmsgc2F5IHRoYXQgc2hlIHdpbGwgbm90IG1hcnJ5LCBub3IgeWV0IGJyaW5nIG1hdHRlcnMgdG8gYW4gZW5kOyBzbyB0aGV5IGFyZSBtYWtpbmcgaGF2b2Mgb2YgbXkgZXN0YXRlLCBhbmQgYmVmb3JlIGxvbmcgd2lsbCBkbyBzbyBhbHNvIHdpdGggbXlzZWxmLiINCg0KIklzIHRoYXQgc28/IiBleGNsYWltZWQgTWluZXJ2YSwgInRoZW4geW91IGRvIGluZGVlZCB3YW50IFVseXNzZXMgaG9tZSBhZ2Fpbi4gR2l2ZSBoaW0gaGlzIGhlbG1ldCwgc2hpZWxkLCBhbmQgYSBjb3VwbGUgbGFuY2VzLCBhbmQgaWYgaGUgaXMgdGhlIG1hbiBoZSB3YXMgd2hlbiBJIGZpcnN0IGtuZXcgaGltIGluIG91ciBob3VzZSwgZHJpbmtpbmcgYW5kIG1ha2luZyBtZXJyeSwgaGUgd291bGQgc29vbiBsYXkgaGlzIGhhbmRzIGFib3V0IHRoZXNlIHJhc2NhbGx5IHN1aXRvcnMsIHdlcmUgaGUgdG8gc3RhbmQgb25jZSBtb3JlIHVwb24gaGlzIG93biB0aHJlc2hvbGQuIEhlIHdhcyB0aGVuIGNvbWluZyBmcm9tIEVwaHlyYSwgd2hlcmUgaGUgaGFkIGJlZW4gdG8gYmVnIHBvaXNvbiBmb3IgaGlzIGFycm93cyBmcm9tIElsdXMsIHNvbiBvZiBNZXJtZXJ1cy4gSWx1cyBmZWFyZWQgdGhlIGV2ZXItbGl2aW5nIGdvZHMgYW5kIHdvdWxkIG5vdCBnaXZlIGhpbSBhbnksIGJ1dCBteSBmYXRoZXIgbGV0IGhpbSBoYXZlIHNvbWUsIGZvciBoZSB3YXMgdmVyeSBmb25kIG9mIGhpbS4gSWYgVWx5c3NlcyBpcyB0aGUgbWFuIGhlIHRoZW4gd2FzIHRoZXNlIHN1aXRvcnMgd2lsbCBoYXZlIGEgc2hvcnQgc2hyaWZ0IGFuZCBhIHNvcnJ5IHdlZGRpbmcuDQoNCiJCdXQgdGhlcmUhIEl0IHJlc3RzIHdpdGggaGVhdmVuIHRvIGRldGVybWluZSB3aGV0aGVyIGhlIGlzIHRvIHJldHVybiwgYW5kIHRha2UgaGlzIHJldmVuZ2UgaW4gaGlzIG93biBob3VzZSBvciBubzsgSSB3b3VsZCwgaG93ZXZlciwgdXJnZSB5b3UgdG8gc2V0IGFib3V0IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZXNlIHN1aXRvcnMgYXQgb25jZS4gVGFrZSBteSBhZHZpY2UsIGNhbGwgdGhlIEFjaGFlYW4gaGVyb2VzIGluIGFzc2VtYmx5IHRvLW1vcnJvdyAtbGF5IHlvdXIgY2FzZSBiZWZvcmUgdGhlbSwgYW5kIGNhbGwgaGVhdmVuIHRvIGJlYXIgeW91IHdpdG5lc3MuIEJpZCB0aGUgc3VpdG9ycyB0YWtlIHRoZW1zZWx2ZXMgb2ZmLCBlYWNoIHRvIGhpcyBvd24gcGxhY2UsIGFuZCBpZiB5b3VyIG1vdGhlcidzIG1pbmQgaXMgc2V0IG9uIG1hcnJ5aW5nIGFnYWluLCBsZXQgaGVyIGdvIGJhY2sgdG8gaGVyIGZhdGhlciwgd2hvIHdpbGwgZmluZCBoZXIgYSBodXNiYW5kIGFuZCBwcm92aWRlIGhlciB3aXRoIGFsbCB0aGUgbWFycmlhZ2UgZ2lmdHMgdGhhdCBzbyBkZWFyIGEgZGF1Z2h0ZXIgbWF5IGV4cGVjdC4gQXMgZm9yIHlvdXJzZWxmLCBsZXQgbWUgcHJldmFpbCB1cG9uIHlvdSB0byB0YWtlIHRoZSBiZXN0IHNoaXAgeW91IGNhbiBnZXQsIHdpdGggYSBjcmV3IG9mIHR3ZW50eSBtZW4sIGFuZCBnbyBpbiBxdWVzdCBvZiB5b3VyIGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBTb21lIG9uZSBtYXkgdGVsbCB5b3Ugc29tZXRoaW5nLCBvciAoYW5kIHBlb3BsZSBvZnRlbiBoZWFyIHRoaW5ncyBpbiB0aGlzIHdheSkgc29tZSBoZWF2ZW4tc2VudCBtZXNzYWdlIG1heSBkaXJlY3QgeW91LiBGaXJzdCBnbyB0byBQeWxvcyBhbmQgYXNrIE5lc3RvcjsgdGhlbmNlIGdvIG9uIHRvIFNwYXJ0YSBhbmQgdmlzaXQgTWVuZWxhdXMsIGZvciBoZSBnb3QgaG9tZSBsYXN0IG9mIGFsbCB0aGUgQWNoYWVhbnM7IGlmIHlvdSBoZWFyIHRoYXQgeW91ciBmYXRoZXIgaXMgYWxpdmUgYW5kIG9uIGhpcyB3YXkgaG9tZSwgeW91IGNhbiBwdXQgdXAgd2l0aCB0aGUgd2FzdGUgdGhlc2Ugc3VpdG9ycyB3aWxsIG1ha2UgZm9yIHlldCBhbm90aGVyIHR3ZWx2ZSBtb250aHMuIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBoZWFyIG9mIGhpcyBkZWF0aCwgY29tZSBob21lIGF0IG9uY2UsIGNlbGVicmF0ZSBoaXMgZnVuZXJhbCByaXRlcyB3aXRoIGFsbCBkdWUgcG9tcCwgYnVpbGQgYSBiYXJyb3cgdG8gaGlzIG1lbW9yeSwgYW5kIG1ha2UgeW91ciBtb3RoZXIgbWFycnkgYWdhaW4uIFRoZW4sIGhhdmluZyBkb25lIGFsbCB0aGlzLCB0aGluayBpdCB3ZWxsIG92ZXIgaW4geW91ciBtaW5kIGhvdywgYnkgZmFpciBtZWFucyBvciBmb3VsLCB5b3UgbWF5IGtpbGwgdGhlc2Ugc3VpdG9ycyBpbiB5b3VyIG93biBob3VzZS4gWW91IGFyZSB0b28gb2xkIHRvIHBsZWFkIGluZmFuY3kgYW55IGxvbmdlcjsgaGF2ZSB5b3Ugbm90IGhlYXJkIGhvdyBwZW9wbGUgYXJlIHNpbmdpbmcgT3Jlc3RlcycgcHJhaXNlcyBmb3IgaGF2aW5nIGtpbGxlZCBoaXMgZmF0aGVyJ3MgbXVyZGVyZXIgQWVnaXN0aHVzPyBZb3UgYXJlIGEgZmluZSwgc21hcnQgbG9va2luZyBmZWxsb3c7IHNob3cgeW91ciBtZXR0bGUsIHRoZW4sIGFuZCBtYWtlIHlvdXJzZWxmIGEgbmFtZSBpbiBzdG9yeS4gTm93LCBob3dldmVyLCBJIG11c3QgZ28gYmFjayB0byBteSBzaGlwIGFuZCB0byBteSBjcmV3LCB3aG8gd2lsbCBiZSBpbXBhdGllbnQgaWYgSSBrZWVwIHRoZW0gd2FpdGluZyBsb25nZXI7IHRoaW5rIHRoZSBtYXR0ZXIgb3ZlciBmb3IgeW91cnNlbGYsIGFuZCByZW1lbWJlciB3aGF0IEkgaGF2ZSBzYWlkIHRvIHlvdS4iDQoNCiJTaXIsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiaXQgaGFzIGJlZW4gdmVyeSBraW5kIG9mIHlvdSB0byB0YWxrIHRvIG1lIGluIHRoaXMgd2F5LCBhcyB0aG91Z2ggSSB3ZXJlIHlvdXIgb3duIHNvbiwgYW5kIEkgd2lsbCBkbyBhbGwgeW91IHRlbGwgbWU7IEkga25vdyB5b3Ugd2FudCB0byBiZSBnZXR0aW5nIG9uIHdpdGggeW91ciB2b3lhZ2UsIGJ1dCBzdGF5IGEgbGl0dGxlIGxvbmdlciB0aWxsIHlvdSBoYXZlIHRha2VuIGEgYmF0aCBhbmQgcmVmcmVzaGVkIHlvdXJzZWxmLiBJIHdpbGwgdGhlbiBnaXZlIHlvdSBhIHByZXNlbnQsIGFuZCB5b3Ugc2hhbGwgZ28gb24geW91ciB3YXkgcmVqb2ljaW5nOyBJIHdpbGwgZ2l2ZSB5b3Ugb25lIG9mIGdyZWF0IGJlYXV0eSBhbmQgdmFsdWUtIGEga2VlcHNha2Ugc3VjaCBhcyBvbmx5IGRlYXIgZnJpZW5kcyBnaXZlIHRvIG9uZSBhbm90aGVyLiINCg0KTWluZXJ2YSBhbnN3ZXJlZCwgIkRvIG5vdCB0cnkgdG8ga2VlcCBtZSwgZm9yIEkgd291bGQgYmUgb24gbXkgd2F5IGF0IG9uY2UuIEFzIGZvciBhbnkgcHJlc2VudCB5b3UgbWF5IGJlIGRpc3Bvc2VkIHRvIG1ha2UgbWUsIGtlZXAgaXQgdGlsbCBJIGNvbWUgYWdhaW4sIGFuZCBJIHdpbGwgdGFrZSBpdCBob21lIHdpdGggbWUuIFlvdSBzaGFsbCBnaXZlIG1lIGEgdmVyeSBnb29kIG9uZSwgYW5kIEkgd2lsbCBnaXZlIHlvdSBvbmUgb2Ygbm8gbGVzcyB2YWx1ZSBpbiByZXR1cm4uIg0KDQpXaXRoIHRoZXNlIHdvcmRzIHNoZSBmbGV3IGF3YXkgbGlrZSBhIGJpcmQgaW50byB0aGUgYWlyLCBidXQgc2hlIGhhZCBnaXZlbiBUZWxlbWFjaHVzIGNvdXJhZ2UsIGFuZCBoYWQgbWFkZSBoaW0gdGhpbmsgbW9yZSB0aGFuIGV2ZXIgYWJvdXQgaGlzIGZhdGhlci4gSGUgZmVsdCB0aGUgY2hhbmdlLCB3b25kZXJlZCBhdCBpdCwgYW5kIGtuZXcgdGhhdCB0aGUgc3RyYW5nZXIgaGFkIGJlZW4gYSBnb2QsIHNvIGhlIHdlbnQgc3RyYWlnaHQgdG8gd2hlcmUgdGhlIHN1aXRvcnMgd2VyZSBzaXR0aW5nLg0KDQpQaGVtaXVzIHdhcyBzdGlsbCBzaW5naW5nLCBhbmQgaGlzIGhlYXJlcnMgc2F0IHJhcHQgaW4gc2lsZW5jZSBhcyBoZSB0b2xkIHRoZSBzYWQgdGFsZSBvZiB0aGUgcmV0dXJuIGZyb20gVHJveSwgYW5kIHRoZSBpbGxzIE1pbmVydmEgaGFkIGxhaWQgdXBvbiB0aGUgQWNoYWVhbnMuIFBlbmVsb3BlLCBkYXVnaHRlciBvZiBJY2FyaXVzLCBoZWFyZCBoaXMgc29uZyBmcm9tIGhlciByb29tIHVwc3RhaXJzLCBhbmQgY2FtZSBkb3duIGJ5IHRoZSBncmVhdCBzdGFpcmNhc2UsIG5vdCBhbG9uZSwgYnV0IGF0dGVuZGVkIGJ5IHR3byBvZiBoZXIgaGFuZG1haWRzLiBXaGVuIHNoZSByZWFjaGVkIHRoZSBzdWl0b3JzIHNoZSBzdG9vZCBieSBvbmUgb2YgdGhlIGJlYXJpbmcgcG9zdHMgdGhhdCBzdXBwb3J0ZWQgdGhlIHJvb2Ygb2YgdGhlIGNsb2lzdGVycyB3aXRoIGEgc3RhaWQgbWFpZGVuIG9uIGVpdGhlciBzaWRlIG9mIGhlci4gU2hlIGhlbGQgYSB2ZWlsLCBtb3Jlb3ZlciwgYmVmb3JlIGhlciBmYWNlLCBhbmQgd2FzIHdlZXBpbmcgYml0dGVybHkuDQoNCiJQaGVtaXVzLCIgc2hlIGNyaWVkLCAieW91IGtubw==",
      "timestamp": "2014-09-07T22:39:54.022Z"
    },
    {
      "requestFrom": "::ffff:127.0.0.1:53172",
      "ip": "::ffff:127.0.0.1",
      "data": "dyBtYW55IGFub3RoZXIgZmVhdCBvZiBnb2RzIGFuZCBoZXJvZXMsIHN1Y2ggYXMgcG9ldHMgbG92ZSB0byBjZWxlYnJhdGUuIFNpbmcgdGhlIHN1aXRvcnMgc29tZSBvbmUgb2YgdGhlc2UsIGFuZCBsZXQgdGhlbSBkcmluayB0aGVpciB3aW5lIGluIHNpbGVuY2UsIGJ1dCBjZWFzZSB0aGlzIHNhZCB0YWxlLCBmb3IgaXQgYnJlYWtzIG15IHNvcnJvd2Z1bCBoZWFydCwgYW5kIHJlbWluZHMgbWUgb2YgbXkgbG9zdCBodXNiYW5kIHdob20gSSBtb3VybiBldmVyIHdpdGhvdXQgY2Vhc2luZywgYW5kIHdob3NlIG5hbWUgd2FzIGdyZWF0IG92ZXIgYWxsIEhlbGxhcyBhbmQgbWlkZGxlIEFyZ29zLiINCg0KIk1vdGhlciwiIGFuc3dlcmVkIFRlbGVtYWNodXMsICJsZXQgdGhlIGJhcmQgc2luZyB3aGF0IGhlIGhhcyBhIG1pbmQgdG87IGJhcmRzIGRvIG5vdCBtYWtlIHRoZSBpbGxzIHRoZXkgc2luZyBvZjsgaXQgaXMgSm92ZSwgbm90IHRoZXksIHdobyBtYWtlcyB0aGVtLCBhbmQgd2hvIHNlbmRzIHdlYWwgb3Igd29lIHVwb24gbWFua2luZCBhY2NvcmRpbmcgdG8gaGlzIG93biBnb29kIHBsZWFzdXJlLiBUaGlzIGZlbGxvdyBtZWFucyBubyBoYXJtIGJ5IHNpbmdpbmcgdGhlIGlsbC1mYXRlZCByZXR1cm4gb2YgdGhlIERhbmFhbnMsIGZvciBwZW9wbGUgYWx3YXlzIGFwcGxhdWQgdGhlIGxhdGVzdCBzb25ncyBtb3N0IHdhcm1seS4gTWFrZSB1cCB5b3VyIG1pbmQgdG8gaXQgYW5kIGJlYXIgaXQ7IFVseXNzZXMgaXMgbm90IHRoZSBvbmx5IG1hbiB3aG8gbmV2ZXIgY2FtZSBiYWNrIGZyb20gVHJveSwgYnV0IG1hbnkgYW5vdGhlciB3ZW50IGRvd24gYXMgd2VsbCBhcyBoZS4gR28sIHRoZW4sIHdpdGhpbiB0aGUgaG91c2UgYW5kIGJ1c3kgeW91cnNlbGYgd2l0aCB5b3VyIGRhaWx5IGR1dGllcywgeW91ciBsb29tLCB5b3VyIGRpc3RhZmYsIGFuZCB0aGUgb3JkZXJpbmcgb2YgeW91ciBzZXJ2YW50czsgZm9yIHNwZWVjaCBpcyBtYW4ncyBtYXR0ZXIsIGFuZCBtaW5lIGFib3ZlIGFsbCBvdGhlcnMtIGZvciBpdCBpcyBJIHdobyBhbSBtYXN0ZXIgaGVyZS4iDQoNClNoZSB3ZW50IHdvbmRlcmluZyBiYWNrIGludG8gdGhlIGhvdXNlLCBhbmQgbGFpZCBoZXIgc29uJ3Mgc2F5aW5nIGluIGhlciBoZWFydC4gVGhlbiwgZ29pbmcgdXBzdGFpcnMgd2l0aCBoZXIgaGFuZG1haWRzIGludG8gaGVyIHJvb20sIHNoZSBtb3VybmVkIGhlciBkZWFyIGh1c2JhbmQgdGlsbCBNaW5lcnZhIHNoZWQgc3dlZXQgc2xlZXAgb3ZlciBoZXIgZXllcy4gQnV0IHRoZSBzdWl0b3JzIHdlcmUgY2xhbW9yb3VzIHRocm91Z2hvdXQgdGhlIGNvdmVyZWQgY2xvaXN0ZXJzLCBhbmQgcHJheWVkIGVhY2ggb25lIHRoYXQgaGUgbWlnaHQgYmUgaGVyIGJlZCBmZWxsb3cuDQoNClRoZW4gVGVsZW1hY2h1cyBzcG9rZSwgIlNoYW1lbGVzcywiIGhlIGNyaWVkLCAiYW5kIGluc29sZW50IHN1aXRvcnMsIGxldCB1cyBmZWFzdCBhdCBvdXIgcGxlYXN1cmUgbm93LCBhbmQgbGV0IHRoZXJlIGJlIG5vIGJyYXdsaW5nLCBmb3IgaXQgaXMgYSByYXJlIHRoaW5nIHRvIGhlYXIgYSBtYW4gd2l0aCBzdWNoIGEgZGl2aW5lIHZvaWNlIGFzIFBoZW1pdXMgaGFzOyBidXQgaW4gdGhlIG1vcm5pbmcgbWVldCBtZSBpbiBmdWxsIGFzc2VtYmx5IHRoYXQgSSBtYXkgZ2l2ZSB5b3UgZm9ybWFsIG5vdGljZSB0byBkZXBhcnQsIGFuZCBmZWFzdCBhdCBvbmUgYW5vdGhlcidzIGhvdXNlcywgdHVybiBhbmQgdHVybiBhYm91dCwgYXQgeW91ciBvd24gY29zdC4gSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IGNob29zZSB0byBwZXJzaXN0IGluIHNwdW5naW5nIHVwb24gb25lIG1hbiwgaGVhdmVuIGhlbHAgbWUsIGJ1dCBKb3ZlIHNoYWxsIHJlY2tvbiB3aXRoIHlvdSBpbiBmdWxsLCBhbmQgd2hlbiB5b3UgZmFsbCBpbiBteSBmYXRoZXIncyBob3VzZSB0aGVyZSBzaGFsbCBiZSBubyBtYW4gdG8gYXZlbmdlIHlvdS4iDQoNClRoZSBzdWl0b3JzIGJpdCB0aGVpciBsaXBzIGFzIHRoZXkgaGVhcmQgaGltLCBhbmQgbWFydmVsbGVkIGF0IHRoZSBib2xkbmVzcyBvZiBoaXMgc3BlZWNoLiBUaGVuLCBBbnRpbm91cywgc29uIG9mIEV1cGVpdGhlcywgc2FpZCwgIlRoZSBnb2RzIHNlZW0gdG8gaGF2ZSBnaXZlbiB5b3UgbGVzc29ucyBpbiBibHVzdGVyIGFuZCB0YWxsIHRhbGtpbmc7IG1heSBKb3ZlIG5ldmVyIGdyYW50IHlvdSB0byBiZSBjaGllZiBpbiBJdGhhY2EgYXMgeW91ciBmYXRoZXIgd2FzIGJlZm9yZSB5b3UuIg0KDQpUZWxlbWFjaHVzIGFuc3dlcmVkLCAiQW50aW5vdXMsIGRvIG5vdCBjaGlkZSB3aXRoIG1lLCBidXQsIGdvZCB3aWxsaW5nLCBJIHdpbGwgYmUgY2hpZWYgdG9vIGlmIEkgY2FuLiBJcyB0aGlzIHRoZSB3b3JzdCBmYXRlIHlvdSBjYW4gdGhpbmsgb2YgZm9yIG1lPyBJdCBpcyBubyBiYWQgdGhpbmcgdG8gYmUgYSBjaGllZiwgZm9yIGl0IGJyaW5ncyBib3RoIHJpY2hlcyBhbmQgaG9ub3VyLiBTdGlsbCwgbm93IHRoYXQgVWx5c3NlcyBpcyBkZWFkIHRoZXJlIGFyZSBtYW55IGdyZWF0IG1lbiBpbiBJdGhhY2EgYm90aCBvbGQgYW5kIHlvdW5nLCBhbmQgc29tZSBvdGhlciBtYXkgdGFrZSB0aGUgbGVhZCBhbW9uZyB0aGVtOyBuZXZlcnRoZWxlc3MgSSB3aWxsIGJlIGNoaWVmIGluIG15IG93biBob3VzZSwgYW5kIHdpbGwgcnVsZSB0aG9zZSB3aG9tIFVseXNzZXMgaGFzIHdvbiBmb3IgbWUuIg0KDQpUaGVuIEV1cnltYWNodXMsIHNvbiBvZiBQb2x5YnVzLCBhbnN3ZXJlZCwgIkl0IHJlc3RzIHdpdGggaGVhdmVuIHRvIGRlY2lkZSB3aG8gc2hhbGwgYmUgY2hpZWYgYW1vbmcgdXMsIGJ1dCB5b3Ugc2hhbGwgYmUgbWFzdGVyIGluIHlvdXIgb3duIGhvdXNlIGFuZCBvdmVyIHlvdXIgb3duIHBvc3Nlc3Npb25zOyBubyBvbmUgd2hpbGUgdGhlcmUgaXMgYSBtYW4gaW4gSXRoYWNhIHNoYWxsIGRvIHlvdSB2aW9sZW5jZSBub3Igcm9iIHlvdS4gQW5kIG5vdywgbXkgZ29vZCBmZWxsb3csIEkgd2FudCB0byBrbm93IGFib3V0IHRoaXMgc3RyYW5nZXIuIFdoYXQgY291bnRyeSBkb2VzIGhlIGNvbWUgZnJvbT8gT2Ygd2hhdCBmYW1pbHkgaXMgaGUsIGFuZCB3aGVyZSBpcyBoaXMgZXN0YXRlPyBIYXMgaGUgYnJvdWdodCB5b3UgbmV3cyBhYm91dCB0aGUgcmV0dXJuIG9mIHlvdXIgZmF0aGVyLCBvciB3YXMgaGUgb24gYnVzaW5lc3Mgb2YgaGlzIG93bj8gSGUgc2VlbWVkIGEgd2VsbC10by1kbyBtYW4sIGJ1dCBoZSBodXJyaWVkIG9mZiBzbyBzdWRkZW5seSB0aGF0IGhlIHdhcyBnb25lIGluIGEgbW9tZW50IGJlZm9yZSB3ZSBjb3VsZCBnZXQgdG8ga25vdyBoaW0uIg0KDQoiTXkgZmF0aGVyIGlzIGRlYWQgYW5kIGdvbmUsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAiYW5kIGV2ZW4gaWYgc29tZSBydW1vdXIgcmVhY2hlcyBtZSBJIHB1dCBubyBtb3JlIGZhaXRoIGluIGl0IG5vdy4gTXkgbW90aGVyIGRvZXMgaW5kZWVkIHNvbWV0aW1lcyBzZW5kIGZvciBhIHNvb3Roc2F5ZXIgYW5kIHF1ZXN0aW9uIGhpbSwgYnV0IEkgZ2l2ZSBoaXMgcHJvcGhlY3lpbmdzIG5vIGhlZWQuIEFzIGZvciB0aGUgc3RyYW5nZXIsIGhlIHdhcyBNZW50ZXMsIHNvbiBvZiBBbmNoaWFsdXMsIGNoaWVmIG9mIHRoZSBUYXBoaWFucywgYW4gb2xkIGZyaWVuZCBvZiBteSBmYXRoZXIncy4iIEJ1dCBpbiBoaXMgaGVhcnQgaGUga25ldyB0aGF0IGl0IGhhZCBiZWVuIHRoZSBnb2RkZXNzLg0KDQpUaGUgc3VpdG9ycyB0aGVuIHJldHVybmVkIHRvIHRoZWlyIHNpbmdpbmcgYW5kIGRhbmNpbmcgdW50aWwgdGhlIGV2ZW5pbmc7IGJ1dCB3aGVuIG5pZ2h0IGZlbGwgdXBvbiB0aGVpciBwbGVhc3VyaW5nIHRoZXkgd2VudCBob21lIHRvIGJlZCBlYWNoIGluIGhpcyBvd24gYWJvZGUuIFRlbGVtYWNodXMncyByb29tIHdhcyBoaWdoIHVwIGluIGEgdG93ZXIgdGhhdCBsb29rZWQgb24gdG8gdGhlIG91dGVyIGNvdXJ0OyBoaXRoZXIsIHRoZW4sIGhlIGhpZWQsIGJyb29kaW5nIGFuZCBmdWxsIG9mIHRob3VnaHQuIEEgZ29vZCBvbGQgd29tYW4sIEV1cnljbGVhLCBkYXVnaHRlciBvZiBPcHMsIHRoZSBzb24gb2YgUGlzZW5vciwgd2VudCBiZWZvcmUgaGltIHdpdGggYSBjb3VwbGUgb2YgYmxhemluZyB0b3JjaGVzLiBMYWVydGVzIGhhZCBib3VnaHQgaGVyIHdpdGggaGlzIG93biBtb25leSB3aGVuIHNoZSB3YXMgcXVpdGUgeW91bmc7IGhlIGdhdmUgdGhlIHdvcnRoIG9mIHR3ZW50eSBveGVuIGZvciBoZXIsIGFuZCBzaGV3ZWQgYXMgbXVjaCByZXNwZWN0IHRvIGhlciBpbiBoaXMgaG91c2Vob2xkIGFzIGhlIGRpZCB0byBoaXMgb3duIHdlZGRlZCB3aWZlLCBidXQgaGUgZGlkIG5vdCB0YWtlIGhlciB0byBoaXMgYmVkIGZvciBoZSBmZWFyZWQgaGlzIHdpZmUncyByZXNlbnRtZW50LiBTaGUgaXQgd2FzIHdobyBub3cgbGlnaHRlZCBUZWxlbWFjaHVzIHRvIGhpcyByb29tLCBhbmQgc2hlIGxvdmVkIGhpbSBiZXR0ZXIgdGhhbiBhbnkgb2YgdGhlIG90aGVyIHdvbWVuIGluIHRoZSBob3VzZSBkaWQsIGZvciBzaGUgaGFkIG51cnNlZCBoaW0gd2hlbiBoZSB3YXMgYSBiYWJ5LiBIZSBvcGVuZWQgdGhlIGRvb3Igb2YgaGlzIGJlZCByb29tIGFuZCBzYXQgZG93biB1cG9uIHRoZSBiZWQ7IGFzIGhlIHRvb2sgb2ZmIGhpcyBzaGlydCBoZSBnYXZlIGl0IHRvIHRoZSBnb29kIG9sZCB3b21hbiwgd2hvIGZvbGRlZCBpdCB0aWRpbHkgdXAsIGFuZCBodW5nIGl0IGZvciBoaW0gb3ZlciBhIHBlZyBieSBoaXMgYmVkIHNpZGUsIGFmdGVyIHdoaWNoIHNoZSB3ZW50IG91dCwgcHVsbGVkIHRoZSBkb29yIHRvIGJ5IGEgc2lsdmVyIGNhdGNoLCBhbmQgZHJldyB0aGUgYm9sdCBob21lIGJ5IG1lYW5zIG9mIHRoZSBzdHJhcC4gQnV0IFRlbGVtYWNodXMgYXMgaGUgbGF5IGNvdmVyZWQgd2l0aCBhIHdvb2xsZW4gZmxlZWNlIGtlcHQgdGhpbmtpbmcgYWxsIG5pZ2h0IHRocm91Z2ggb2YgaGlzIGludGVuZGVkIHZveWFnZSBvZiB0aGUgY291bnNlbCB0aGF0IE1pbmVydmEgaGFkIGdpdmVuIGhpbS4NCg0KQm9vayBJSQ0KDQpOb3cgd2hlbiB0aGUgY2hpbGQgb2YgbW9ybmluZywgcm9zeS1maW5nZXJlZCBEYXduLCBhcHBlYXJlZCwgVGVsZW1hY2h1cyByb3NlIGFuZCBkcmVzc2VkIGhpbXNlbGYuIEhlIGJvdW5kIGhpcyBzYW5kYWxzIG9uIHRvIGhpcyBjb21lbHkgZmVldCwgZ2lyZGVkIGhpcyBzd29yZCBhYm91dCBoaXMgc2hvdWxkZXIsIGFuZCBsZWZ0IGhpcyByb29tIGxvb2tpbmcgbGlrZSBhbiBpbW1vcnRhbCBnb2QuIEhlIGF0IG9uY2Ugc2VudCB0aGUgY3JpZXJzIHJvdW5kIHRvIGNhbGwgdGhlIHBlb3BsZSBpbiBhc3NlbWJseSwgc28gdGhleSBjYWxsZWQgdGhlbSBhbmQgdGhlIHBlb3BsZSBnYXRoZXJlZCB0aGVyZW9uOyB0aGVuLCB3aGVuIHRoZXkgd2VyZSBnb3QgdG9nZXRoZXIsIGhlIHdlbnQgdG8gdGhlIHBsYWNlIG9mIGFzc2VtYmx5IHNwZWFyIGluIGhhbmQtIG5vdCBhbG9uZSwgZm9yIGhpcyB0d28gaG91bmRzIHdlbnQgd2l0aCBoaW0uIE1pbmVydmEgZW5kb3dlZCBoaW0gd2l0aCBhIHByZXNlbmNlIG9mIHN1Y2ggZGl2aW5lIGNvbWVsaW5lc3MgdGhhdCBhbGwgbWFydmVsbGVkIGF0IGhpbSBhcyBoZSB3ZW50IGJ5LCBhbmQgd2hlbiBoZSB0b29rIGhpcyBwbGFjZScgaW4gaGlzIGZhdGhlcidzIHNlYXQgZXZlbiB0aGUgb2xkZXN0IGNvdW5jaWxsb3JzIG1hZGUgd2F5IGZvciBoaW0uDQoNCkFlZ3lwdGl1cywgYSBtYW4gYmVudCBkb3VibGUgd2l0aCBhZ2UsIGFuZCBvZiBpbmZpbml0ZSBleHBlcmllbmNlLCB0aGUgZmlyc3QgdG8gc3BlYWsgSGlzIHNvbiBBbnRpcGh1cyBoYWQgZ29uZSB3aXRoIFVseXNzZXMgdG8gSWxpdXMsIGxhbmQgb2Ygbm9ibGUgc3RlZWRzLCBidXQgdGhlIHNhdmFnZSBDeWNsb3BzIGhhZCBraWxsZWQgaGltIHdoZW4gdGhleSB3ZXJlIGFsbCBzaHV0IHVwIGluIHRoZSBjYXZlLCBhbmQgaGFkIGNvb2tlZCBoaXMgbGFzdCBkaW5uZXIgZm9yIGhpbSwgSGUgaGFkIHRocmVlIHNvbnMgbGVmdCwgb2Ygd2hvbSB0d28gc3RpbGwgd29ya2VkIG9uIHRoZWlyIGZhdGhlcidzIGxhbmQsIHdoaWxlIHRoZSB0aGlyZCwgRXVyeW5vbXVzLCB3YXMgb25lIG9mIHRoZSBzdWl0b3JzOyBuZXZlcnRoZWxlc3MgdGhlaXIgZmF0aGVyIGNvdWxkIG5vdCBnZXQgb3ZlciB0aGUgbG9zcyBvZiBBbnRpcGh1cywgYW5kIHdhcyBzdGlsbCB3ZWVwaW5nIGZvciBoaW0gd2hlbiBoZSBiZWdhbiBoaXMgc3BlZWNoLg0KDQoiTWVuIG9mIEl0aGFjYSwiIGhlIHNhaWQsICJoZWFyIG15IHdvcmRzLiBGcm9tIHRoZSBkYXkgVWx5c3NlcyBsZWZ0IHVzIHRoZXJlIGhhcyBiZWVuIG5vIG1lZXRpbmcgb2Ygb3VyIGNvdW5jaWxsb3JzIHVudGlsIG5vdzsgd2hvIHRoZW4gY2FuIGl0IGJlLCB3aGV0aGVyIG9sZCBvciB5b3VuZywgdGhhdCBmaW5kcyBpdCBzbyBuZWNlc3NhcnkgdG8gY29udmVuZSB1cz8gSGFzIGhlIGdvdCB3aW5kIG9mIHNvbWUgaG9zdCBhcHByb2FjaGluZywgYW5kIGRvZXMgaGUgd2lzaCB0byB3YXJuIHVzLCBvciB3b3VsZCBoZSBzcGVhayB1cG9uIHNvbWUgb3RoZXIgbWF0dGVyIG9mIHB1YmxpYyBtb21lbnQ/IEkgYW0gc3VyZSBoZSBpcyBhbiBleGNlbGxlbnQgcGVyc29uLCBhbmQgSSBob3BlIEpvdmUgd2lsbCBncmFudCBoaW0gaGlzIGhlYXJ0J3MgZGVzaXJlLiINCg0KVGVsZW1hY2h1cyB0b29rIHRoaXMgc3BlZWNoIGFzIG9mIGdvb2Qgb21lbiBhbmQgcm9zZSBhdCBvbmNlLCBmb3IgaGUgd2FzIGJ1cnN0aW5nIHdpdGggd2hhdCBoZSBoYWQgdG8gc2F5LiBIZSBzdG9vZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhc3NlbWJseSBhbmQgdGhlIGdvb2QgaGVyYWxkIFBpc2Vub3IgYnJvdWdodCBoaW0gaGlzIHN0YWZmLiBUaGVuLCB0dXJuaW5nIHRvIEFlZ3lwdGl1cywgIlNpciwiIHNhaWQgaGUsICJpdCBpcyBJLCBhcyB5b3Ugd2lsbCBzaG9ydGx5IGxlYXJuLCB3aG8gaGF2ZSBjb252ZW5lZCB5b3UsIGZvciBpdCBpcyBJIHdobyBhbSB0aGUgbW9zdCBhZ2dyaWV2ZWQuIEkgaGF2ZSBub3QgZ290IHdpbmQgb2YgYW55IGhvc3QgYXBwcm9hY2hpbmcgYWJvdXQgd2hpY2ggSSB3b3VsZCB3YXJuIHlvdSwgbm9yIGlzIHRoZXJlIGFueSBtYXR0ZXIgb2YgcHVibGljIG1vbWVudCBvbiB3aGljaCBJIHdvdWxkIHNwZWFrLiBNeSBncmlldmVhbmNlIGlzIHB1cmVseSBwZXJzb25hbCwgYW5kIHR1cm5zIG9uIHR3byBncmVhdCBtaXNmb3J0dW5lcyB3aGljaCBoYXZlIGZhbGxlbiB1cG9uIG15IGhvdXNlLiBUaGUgZmlyc3Qgb2YgdGhlc2UgaXMgdGhlIGxvc3Mgb2YgbXkgZXhjZWxsZW50IGZhdGhlciwgd2hvIHdhcyBjaGllZiBhbW9uZyBhbGwgeW91IGhlcmUgcHJlc2VudCwgYW5kIHdhcyBsaWtlIGEgZmF0aGVyIHRvIGV2ZXJ5IG9uZSBvZiB5b3U7IHRoZSBzZWNvbmQgaXMgbXVjaCBtb3JlIHNlcmlvdXMsIGFuZCBlcmUgbG9uZyB3aWxsIGJlIHRoZSB1dHRlciBydWluIG9mIG15IGVzdGF0ZS4gVGhlIHNvbnMgb2YgYWxsIHRoZSBjaGllZiBtZW4gYW1vbmcgeW91IGFyZSBwZXN0ZXJpbmcgbXkgbW90aGVyIHRvIG1hcnJ5IHRoZW0gYWdhaW5zdCBoZXIgd2lsbC4gVGhleSBhcmUgYWZyYWlkIHRvIGdvIHRvIGhlciBmYXRoZXIgSWNhcml1cywgYXNraW5nIGhpbSB0byBjaG9vc2UgdGhlIG9uZSBoZSBsaWtlcyBiZXN0LCBhbmQgdG8gcHJvdmlkZSBtYXJyaWFnZSBnaWZ0cyBmb3IgaGlzIGRhdWdodGVyLCBidXQgZGF5IGJ5IGRheSB0aGV5IGtlZXAgaGFuZ2luZyBhYm91dCBteSBmYXRoZXIncyBob3VzZSwgc2FjcmlmaWNpbmcgb3VyIG94ZW4sIHNoZWVwLCBhbmQgZmF0IGdvYXRzIGZvciB0aGVpciBiYW5xdWV0cywgYW5kIG5ldmVyIGdpdmluZyBzbyBtdWNoIGFzIGEgdGhvdWdodCB0byB0aGUgcXVhbnRpdHkgb2Ygd2luZSB0aGV5IGRyaW5rLiBObyBlc3RhdGUgY2FuIHN0YW5kIHN1Y2ggcmVja2xlc3NuZXNzOyB3ZSBoYXZlIG5vdyBubyBVbHlzc2VzIHRvIHdhcmQgb2ZmIGhhcm0gZnJvbSBvdXIgZG9vcnMsIGFuZCBJIGNhbm5vdCBob2xkIG15IG93biBhZ2FpbnN0IHRoZW0uIEkgc2hhbGwgbmV2ZXIgYWxsIG15IGRheXMgYmUgYXMgZ29vZCBhIG1hbiBhcyBoZSB3YXMsIHN0aWxsIEkgd291bGQgaW5kZWVkIGRlZmVuZCBteXNlbGYgaWYgSSBoYWQgcG93ZXIgdG8gZG8gc28sIGZvciBJIGNhbm5vdCBzdGFuZCBzdWNoIHRyZWF0bWVudCBhbnkgbG9uZ2VyOyBteSBob3VzZSBpcyBiZWluZyBkaXNncmFjZWQgYW5kIHJ1aW5lZC4gSGF2ZSByZXNwZWN0LCB0aGVyZWZvcmUsIHRvIHlvdXIgb3duIGNvbnNjaWVuY2VzIGFuZCB0byBwdWJsaWMgb3Bpbmlvbi4gRmVhciwgdG9vLCB0aGUgd3JhdGggb2YgaGVhdmVuLCBsZXN0IHRoZSBnb2RzIHNob3VsZCBiZSBkaXNwbGVhc2VkIGFuZCB0dXJuIHVwb24geW91LiBJIHByYXkgeW91IGJ5IEpvdmUgYW5kIFRoZW1pcywgd2hvIGlzIHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgY291bmNpbHMsIFtkbyBub3RdIGhvbGQgYmFjaywgbXkgZnJpZW5kcywgYW5kIGxlYXZlIG1lIHNpbmdsZWhhbmRlZC0gdW5sZXNzIGl0IGJlIHRoYXQgbXkgYnJhdmUgZmF0aGVyIFVseXNzZXMgZGlkIHNvbWUgd3JvbmcgdG8gdGhlIEFjaGFlYW5zIHdoaWNoIHlvdSB3b3VsZCBub3cgYXZlbmdlIG9uIG1lLCBieSBhaWRpbmcgYW5kIGFiZXR0aW5nIHRoZXNlIHN1aXRvcnMuIE1vcmVvdmVyLCBpZiBJIGFtIHRvIGJlIGVhdGVuIG91dCBvZiBob3VzZSBhbmQgaG9tZSBhdCBhbGwsIEkgaGFkIHJhdGhlciB5b3UgZGlkIHRoZSBlYXRpbmcgeW91cnNlbHZlcywgZm9yIEkgY291bGQgdGhlbiB0YWtlIGFjdGlvbiBhZ2FpbnN0IHlvdSB0byBzb21lIHB1cnBvc2UsIGFuZCBzZXJ2ZSB5b3Ugd2l0aCBub3RpY2VzIGZyb20gaG91c2UgdG8gaG91c2UgdGlsbCBJIGdvdCBwYWlkIGluIGZ1bGwsIHdoZXJlYXMgbm93IEkgaGF2ZSBubyByZW1lZHkuIg0KDQpXaXRoIHRoaXMgVGVsZW1hY2h1cyBkYXNoZWQgaGlzIHN0YWZmIHRvIHRoZSBncm91bmQgYW5kIGJ1cnN0IGludG8gdGVhcnMuIEV2ZXJ5IG9uZSB3YXMgdmVyeSBzb3JyeSBmb3IgaGltLCBidXQgdGhleSBhbGwgc2F0IHN0aWxsIGFuZCBubyBvbmUgdmVudHVyZWQgdG8gbWFrZSBoaW0gYW4gYW5ncnkgYW5zd2VyLCBzYXZlIG9ubHkgQW50aW5vdXMsIHdobyBzcG9rZSB0aHVzOg0KDQoiVGVsZW1hY2h1cywgaW5zb2xlbnQgYnJhZ2dhcnQgdGhhdCB5b3UgYXJlLCBob3cgZGFyZSB5b3UgdHJ5IHRvIHRocm93IHRoZSBibGFtZSB1cG9uIHVzIHN1aXRvcnM/IEl0IGlzIHlvdXIgbW90aGVyJ3MgZmF1bHQgbm90IG91cnMsIGZvciBzaGUgaXMgYSB2ZXJ5IGFydGZ1bCB3b21hbi4gVGhpcyB0aHJlZSB5ZWFycyBwYXN0LCBhbmQgY2xvc2Ugb24gZm91ciwgc2hlIGhhcyBiZWVuIGRyaXZpbmcgdXMgb3V0IG9mIG91ciBtaW5kcywgYnkgZW5jb3VyYWdpbmcgZWFjaCBvbmUgb2YgdXMsIGFuZCBzZW5kaW5nIGhpbSBtZXNzYWdlcyB3aXRob3V0IG1lYW5pbmcgb25lIHdvcmQgb2Ygd2hhdCBzaGUgc2F5cy4gQW5kIHRoZW4gdGhlcmUgd2FzIHRoYXQgb3RoZXIgdHJpY2sgc2hlIHBsYXllZCB1cy4gU2hlIHNldCB1cCBhIGdyZWF0IHRhbWJvdXIgZnJhbWUgaW4gaGVyIHJvb20sIGFuZCBiZWdhbiB0byB3b3JrIG9uIGFuIGVub3Jtb3VzIHBpZWNlIG9mIGZpbmUgbmVlZGxld29yay4gJ1N3ZWV0IGhlYXJ0cywnIHNhaWQgc2hlLCAnVWx5c3NlcyBpcyBpbmRlZWQgZGVhZCwgc3RpbGwgZG8gbm90IHByZXNzIG1lIHRvIG1hcnJ5IGFnYWluIGltbWVkaWF0ZWx5LCB3YWl0LSBmb3IgSSB3b3VsZCBub3QgaGF2ZSBza2lsbCBpbiBuZWVkbGV3b3JrIHBlcmlzaCB1bnJlY29yZGVkLSB0aWxsIEkgaGF2ZSBjb21wbGV0ZWQgYSBwYWxsIGZvciB0aGUgaGVybyBMYWVydGVzLCB0byBiZSBpbiByZWFkaW5lc3MgYWdhaW5zdCB0aGUgdGltZSB3aGVuIGRlYXRoIHNoYWxsIHRha2UgaGltLiBIZSBpcyB2ZXJ5IHJpY2gsIGFuZCB0aGUgd29tZW4gb2YgdGhlIHBsYWNlIHdpbGwgdGFsayBpZiBoZSBpcyBsYWlkIG91dCB3aXRob3V0IGEgcGFsbC4nDQoNCiJUaGlzIHdhcyB3aGF0IHNoZSBzYWlkLCBhbmQgd2UgYXNzZW50ZWQ7IHdoZXJlb24gd2UgY291bGQgc2VlIGhlciB3b3JraW5nIG9uIGhlciBncmVhdCB3ZWIgYWxsIGRheSBsb25nLCBidXQgYXQgbmlnaHQgc2hlIHdvdWxkIHVucGljayB0aGUgc3RpdGNoZXMgYWdhaW4gYnkgdG9yY2hsaWdodC4gU2hlIGZvb2xlZCB1cyBpbiB0aGlzIHdheSBmb3IgdGhyZWUgeWVhcnMgYW5kIHdlIG5ldmVyIGZvdW5kIGhlciBvdXQsIGJ1dCBhcyB0aW1lIHdvcmUgb24gYW5kIHNoZSB3YXMgbm93IGluIGhlciBmb3VydGggeWVhciwgb25lIG9mIGhlciBtYWlkcyB3aG8ga25ldyB3aGF0IHNoZSB3YXMgZG9pbmcgdG9sZCB1cywgYW5kIHdlIGNhdWdodCBoZXIgaW4gdGhlIGFjdCBvZiB1bmRvaW5nIGhlciB3b3JrLCBzbyBzaGUgaGFkIHRvIGZpbmlzaCBpdCB3aGV0aGVyIHNoZSB3b3VsZCBvciBuby4gVGhlIHN1aXRvcnMsIHRoZXJlZm9yZSwgbWFrZSB5b3UgdGhpcyBhbnN3ZXIsIHRoYXQgYm90aCB5b3UgYW5kIHRoZSBBY2hhZWFucyBtYXkgdW5kZXJzdGFuZC0nU2VuZCB5b3VyIG1vdGhlciBhd2F5LCBhbmQgYmlkIGhlciBtYXJyeSB0aGUgbWFuIG9mIGhlciBvd24gYW5kIG9mIGhlciBmYXRoZXIncyBjaG9pY2UnOyBmb3IgSSBkbyBub3Qga25vdyB3aGF0IHdpbGwgaGFwcGVuIGlmIHNoZSBnb2VzIG9uIHBsYWd1aW5nIHVzIG11Y2ggbG9uZ2VyIHdpdGggdGhlIGFpcnMgc2hlIGdpdmVzIGhlcnNlbGYgb24gdGhlIHNjb3JlIG9mIHRoZSBhY2NvbXBsaXNobWVudHMgTWluZXJ2YSBoYXMgdGF1Z2h0IGhlciwgYW5kIGJlY2F1c2Ugc2hlIGlzIHNvIGNsZXZlci4gV2UgbmV2ZXIgeWV0IGhlYXJkIG9mIHN1Y2ggYSB3b21hbjsgd2Uga25vdyBhbGwgYWJvdXQgVHlybywgQWxjbWVuYSwgTXljZW5lLCBhbmQgdGhlIGZhbW91cyB3b21lbiBvZiBvbGQsIGJ1dCB0aGV5IHdlcmUgbm90aGluZyB0byB5b3VyIG1vdGhlciwgYW55IG9uZSBvZiB0aGVtLiBJdCB3YXMgbm90IGZhaXIgb2YgaGVyIHRvIHRyZWF0IHVzIGluIHRoYXQgd2F5LCBhbmQgYXMgbG9uZyBhcyBzaGUgY29udGludWVzIGluIHRoZSBtaW5kIHdpdGggd2hpY2ggaGVhdmVuIGhhcyBub3cgZW5kb3dlZCBoZXIsIHNvIGxvbmcgc2hhbGwgd2UgZ28gb24gZWF0aW5nIHVwIHlvdXIgZXN0YXRlOyBhbmQgSSBkbyBub3Qgc2VlIHdoeSBzaGUgc2hvdWxkIGNoYW5nZSwgZm9yIHNoZSBnZXRzIGFsbCB0aGUgaG9ub3VyIGFuZCBnbG9yeSwgYW5kIGl0IGlzIHlvdSB3aG8gcGF5IGZvciBpdCwgbm90IHNoZS4gVW5kZXJzdGFuZCwgdGhlbiwgdGhhdCB3ZSB3aWxsIG5vdCBnbyBiYWNrIHRvIG91ciBsYW5kcywgbmVpdGhlciBoZXJlIG5vciBlbHNld2hlcmUsIHRpbGwgc2hlIGhhcyBtYWRlIGhlciBjaG9pY2UgYW5kIG1hcnJpZWQgc29tZSBvbmUgb3Igb3RoZXIgb2YgdXMuIg0KDQpUZWxlbWFjaHVzIGFuc3dlcmVkLCAiQW50aW5vdXMsIGhvdyBjYW4gSSBkcml2ZSB0aGUgbW90aGVyIHdobyBib3JlIG1lIGZyb20gbXkgZmF0aGVyJ3MgaG91c2U/IE15IGZhdGhlciBpcyBhYnJvYWQgYW5kIHdlIGRvIG5vdCBrbm93IHdoZXRoZXIgaGUgaXMgYWxpdmUgb3IgZGVhZC4gSXQgd2lsbCBiZSBoYXJkIG9uIG1lIGlmIEkgaGF2ZSB0byBwYXkgSWNhcml1cyB0aGUgbGFyZ2Ugc3VtIHdoaWNoIEkgbXVzdCBnaXZlIGhpbSBpZiBJIGluc2lzdCBvbiBzZW5kaW5nIGhpcyBkYXVnaHRlciBiYWNrIHRvIGhpbS4gTm90IG9ubHkgd2lsbCBoZSBkZWFsIHJpZ29yb3VzbHkgd2l0aCBtZSwgYnV0IGhlYXZlbiB3aWxsIGFsc28gcHVuaXNoIG1lOyBmb3IgbXkgbW90aGVyIHdoZW4gc2hlIGxlYXZlcyB0aGUgaG91c2Ugd2lsbCBjYWxmIG9uIHRoZSBFcmlueWVzIHRvIGF2ZW5nZSBoZXI7IGJlc2lkZXMsIGl0IHdvdWxkIG5vdCBiZSBhIGNyZWRpdGFibGUgdGhpbmcgdG8gZG8sIGFuZCBJIHdpbGwgaGF2ZSBub3RoaW5nIHRvIHNheSB0byBpdC4gSWYgeW91IGNob29zZSB0byB0YWtlIG9mZmVuY2UgYXQgdGhpcywgbGVhdmUgdGhlIGhvdXNlIGFuZCBmZWFzdCBlbHNld2hlcmUgYXQgb25lIGFub3RoZXIncyBob3VzZXMgYXQgeW91ciBvd24gY29zdCB0dXJuIGFuZCB0dXJuIGFib3V0LiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHlvdSBlbGVjdCB0byBwZXJzaXN0IGluIHNwdW5naW5nIHVwb24gb25lIG1hbiwgaGVhdmVuIGhlbHAgbWUsIGJ1dCBKb3ZlIHNoYWxsIHJlY2tvbiB3aXRoIHlvdSBpbiBmdWxsLCBhbmQgd2hlbiB5b3UgZmFsbCBpbiBteSBmYXRoZXIncyBob3VzZSB0aGVyZSBzaGFsbCBiZSBubyBtYW4gdG8gYXZlbmdlIHlvdS4iDQoNCkFzIGhlIHNwb2tlIEpvdmUgc2VudCB0d28gZWFnbGVzIGZyb20gdGhlIHRvcCBvZiB0aGUgbW91bnRhaW4sIGFuZCB0aGV5IGZsZXcgb24gYW5kIG9uIHdpdGggdGhlIHdpbmQsIHNhaWxpbmcgc2lkZSBieSBzaWRlIGluIHRoZWlyIG93biBsb3JkbHkgZmxpZ2h0LiBXaGVuIHRoZXkgd2VyZSByaWdodCBvdmVyIHRoZSBtaWRkbGUgb2YgdGhlIGFzc2VtYmx5IHRoZXkgd2hlZWxlZCBhbmQgY2lyY2xlZCBhYm91dCwgYmVhdGluZyB0aGUgYWlyIHdpdGggdGhlaXIgd2luZ3MgYW5kIGdsYXJpbmcgZGVhdGggaW50byB0aGUgZXllcyBvZiB0aGVtIHRoYXQgd2VyZSBiZWxvdzsgdGhlbiwgZmlnaHRpbmcgZmllcmNlbHkgYW5kIHRlYXJpbmcgYXQgb25lIGFub3RoZXIsIHRoZXkgZmxldyBvZmYgdG93YXJkcyB0aGUgcmlnaHQgb3ZlciB0aGUgdG93bi4gVGhlIHBlb3BsZSB3b25kZXJlZCBhcyB0aGV5IHNhdyB0aGVtLCBhbmQgYXNrZWQgZWFjaCBvdGhlciB3aGF0IGFuIHRoaXMgbWlnaHQgYmU7IHdoZXJlb24gSGFsaXRoZXJzZXMsIHdobyB3YXMgdGhlIGJlc3QgcHJvcGhldCBhbmQgcmVhZGVyIG9mIG9tZW5zIGFtb25nIHRoZW0sIHNwb2tlIHRvIHRoZW0gcGxhaW5seSBhbmQgaW4gYWxsIGhvbmVzdHksIHNheWluZzoNCg0KIkhlYXIgbWUsIG1lbiBvZiBJdGhhY2EsIGFuZCBJIHNwZWFrIG1vcmUgcGFydGljdWxhcmx5IHRvIHRoZSBzdWl0b3JzLCBmb3IgSSBzZWUgbWlzY2hpZWYgYnJld2luZyBmb3IgdGhlbS4gVWx5c3NlcyBpcyBub3QgZ29pbmcgdG8gYmUgYXdheSBtdWNoIGxvbmdlcjsgaW5kZWVkIGhlIGlzIGNsb3NlIGF0IGhhbmQgdG8gZGVhbCBvdXQgZGVhdGggYW5kIGRlc3RydWN0aW9uLCBub3Qgb24gdGhlbSBhbG9uZSwgYnV0IG9uIG1hbnkgYW5vdGhlciBvZiB1cyB3aG8gbGl2ZSBpbiBJdGhhY2EuIExldCB1cyB0aGVuIGJlIHdpc2UgaW4gdGltZSwgYW5kIHB1dCBhIHN0b3AgdG8gdGhpcyB3aWNrZWRuZXNzIGJlZm9yZSBoZSBjb21lcy4gTGV0IHRoZSBzdWl0b3JzIGRvIHNvIG9mIHRoZWlyIG93biBhY2NvcmQ7IGl0IHdpbGwgYmUgYmV0dGVyIGZvciB0aGVtLCBmb3IgSSBhbSBub3QgcHJvcGhlc3lpbmcgd2l0aG91dCBkdWUga25vd2xlZGdlOyBldmVyeXRoaW5nIGhhcyBoYXBwZW5lZCB0byBVbHlzc2VzIGFzIEkgZm9yZXRvbGQgd2hlbiB0aGUgQXJnaXZlcyBzZXQgb3V0IGZvciBUcm95LCBhbmQgaGUgd2l0aCB0aGVtLiBJIHNhaWQgdGhhdCBhZnRlciBnb2luZyB0aHJvdWdoIG11Y2ggaGFyZHNoaXAgYW5kIGxvc2luZyBhbGwgaGlzIG1lbiBoZSBzaG91bGQgY29tZSBob21lIGFnYWluIGluIHRoZSB0d2VudGlldGggeWVhciBhbmQgdGhhdCBubyBvbmUgd291bGQga25vdyBoaW07IGFuZCBub3cgYWxsIHRoaXMgaXMgY29taW5nIHRydWUuIg0KDQpFdXJ5bWFjaHVzIHNvbiBvZiBQb2x5YnVzIHRoZW4gc2FpZCwgIkdvIGhvbWUsIG9sZCBtYW4sIGFuZCBwcm9waGVzeSB0byB5b3VyIG93biBjaGlsZHJlbiwgb3IgaXQgbWF5IGJlIHdvcnNlIGZvciB0aGVtLiBJIGNhbiByZWFkIHRoZXNlIG9tZW5zIG15c2VsZiBtdWNoIGJldHRlciB0aGFuIHlvdSBjYW47IGJpcmRzIGFyZSBhbHdheXMgZmx5aW5nIGFib3V0IGluIHRoZSBzdW5zaGluZSBzb21ld2hlcmUgb3Igb3RoZXIsIGJ1dCB0aGV5IHNlbGRvbSBtZWFuIGFueXRoaW5nLiBVbHlzc2VzIGhhcyBkaWVkIGluIGEgZmFyIGNvdW50cnksIGFuZCBpdCBpcyBhIHBpdHkgeW91IGFyZSBub3QgZGVhZCBhbG9uZyB3aXRoIGhpbSwgaW5zdGVhZCBvZiBwcmF0aW5nIGhlcmUgYWJvdXQgb21lbnMgYW5kIGFkZGluZyBmdWVsIHRvIHRoZSBhbmdlciBvZiBUZWxlbWFjaHVzIHdoaWNoIGlzIGZpZXJjZSBlbm91Z2ggYXMgaXQgaXMuIEkgc3VwcG9zZSB5b3UgdGhpbmsgaGUgd2lsbCBnaXZlIHlvdSBzb21ldGhpbmcgZm9yIHlvdXIgZmFtaWx5LCBidXQgSSB0ZWxsIHlvdS0gYW5kIGl0IHNoYWxsIHN1cmVseSBiZS0gd2hlbiBhbiBvbGQgbWFuIGxpa2UgeW91LCB3aG8gc2hvdWxkIGtub3cgYmV0dGVyLCB0YWxrcyBhIHlvdW5nIG9uZSBvdmVyIHRpbGwgaGUgYmVjb21lcyB0cm91Ymxlc29tZSwgaW4gdGhlIGZpcnN0IHBsYWNlIGhpcyB5b3VuZyBmcmllbmQgd2lsbCBvbmx5IGZhcmUgc28gbXVjaCB0aGUgd29yc2UtIGhlIHdpbGwgdGFrZSBub3RoaW5nIGJ5IGl0LCBmb3IgdGhlIHN1aXRvcnMgd2lsbCBwcmV2ZW50IHRoaXMtIGFuZCBpbiB0aGUgbmV4dCwgd2Ugd2lsbCBsYXkgYSBoZWF2aWVyIGZpbmUsIHNpciwgdXBvbiB5b3Vyc2VsZiB0aGFuIHlvdSB3aWxsIGF0IGFsbCBsaWtlIHBheWluZywgZm9yIGl0IHdpbGwgYmVhciBoYXJkbHkgdXBvbiB5b3UuIEFzIGZvciBUZWxlbWFjaHVzLCBJIHdhcm4gaGltIGluIHRoZSBwcmVzZW5jZSBvZiB5b3UgYWxsIHRvIHNlbmQgaGlzIG1vdGhlciBiYWNrIHRvIGhlciBmYXRoZXIsIHdobyB3aWxsIGZpbmQgaGVyIGEgaHVzYmFuZCBhbmQgcHJvdmlkZSBoZXIgd2l0aCBhbGwgdGhlIG1hcnJpYWdlIGdpZnRzIHNvIGRlYXIgYSBkYXVnaHRlciBtYXkgZXhwZWN0LiBUaWxsIHdlIHNoYWxsIGdvIG9uIGhhcmFzc2luZyBoaW0gd2l0aCBvdXIgc3VpdDsgZm9yIHdlIGZlYXIgbm8gbWFuLCBhbmQgY2FyZSBuZWl0aGVyIGZvciBoaW0sIHdpdGggYWxsIGhpcyBmaW5lIHNwZWVjaGVzLCBub3IgZm9yIGFueSBmb3J0dW5lLXRlbGxpbmcgb2YgeW91cnMuIFlvdSBtYXkgcHJlYWNoIGFzIG11Y2ggYXMgeW91IHBsZWFzZSwgYnV0IHdlIHNoYWxsIG9ubHkgaGF0ZSB5b3UgdGhlIG1vcmUuIFdlIHNoYWxsIGdvIGJhY2sgYW5kIGNvbnRpbnVlIHRvIGVhdCB1cCBUZWxlbWFjaHVzJ3MgZXN0YXRlIHdpdGhvdXQgcGF5aW5nIGhpbSwgdGlsbCBzdWNoIHRpbWUgYXMgaGlzIG1vdGhlciBsZWF2ZXMgb2ZmIHRvcm1lbnRpbmcgdXMgYnkga2VlcGluZyB1cyBkYXkgYWZ0ZXIgZGF5IG9uIHRoZSB0aXB0b2Ugb2YgZXhwZWN0YXRpb24sIGVhY2ggdnlpbmcgd2l0aCB0aGUgb3RoZXIgaW4gaGlzIHN1aXQgZm9yIGEgcHJpemUgb2Ygc3VjaCByYXJlIHBlcmZlY3Rpb24uIEJlc2lkZXMgd2UgY2Fubm90IGdvIGFmdGVyIHRoZSBvdGhlciB3b21lbiB3aG9tIHdlIHNob3VsZCBtYXJyeSBpbiBkdWUgY291cnNlLCBidXQgZm9yIHRoZSB3YXkgaW4gd2hpY2ggc2hlIHRyZWF0cyB1cy4iDQoNClRoZW4gVGVsZW1hY2h1cyBzYWlkLCAiRXVyeW1hY2h1cywgYW5kIHlvdSBvdGhlciBzdWl0b3JzLCBJIHNoYWxsIHNheSBubyBtb3JlLCBhbmQgZW50cmVhdCB5b3Ugbm8gZnVydGhlciwgZm9yIHRoZSBnb2RzIGFuZCB0aGUgcGVvcGxlIG9mIEl0aGFjYSBub3cga25vdyBteSBzdG9yeS4gR2l2ZSBtZSwgdGhlbiwgYSBzaGlwIGFuZCBhIGNyZXcgb2YgdHdlbnR5IG1lbiB0byB0YWtlIG1lIGhpdGhlciBhbmQgdGhpdGhlciwgYW5kIEkgd2lsbCBnbyB0byBTcGFydGEgYW5kIHRvIFB5bG9zIGluIHF1ZXN0IG9mIG15IGZhdGhlciB3aG8gaGFzIHNvIGxvbmcgYmVlbiBtaXNzaW5nLiBTb21lIG9uZSBtYXkgdGVsbCBtZSBzb21ldGhpbmcsIG9yIChhbmQgcGVvcGxlIG9mdGVuIGhlYXIgdGhpbmdzIGluIHRoaXMgd2F5KSBzb21lIGhlYXZlbi1zZW50IG1lc3NhZ2UgbWF5IGRpcmVjdCBtZS4gSWYgSSBjYW4gaGVhciBvZiBoaW0gYXMgYWxpdmUgYW5kIG9uIGhpcyB3YXkgaG9tZSBJIHdpbGwgcHV0IHVwIHdpdGggdGhlIHdhc3RlIHlvdSBzdWl0b3JzIHdpbGwgbWFrZSBmb3IgeWV0IGFub3RoZXIgdHdlbHZlIG1vbnRocy4gSWYgb24gdGhlIG90aGVyIGhhbmQgSSBoZWFyIG9mIGhpcyBkZWF0aCwgSSB3aWxsIHJldHVybiBhdCBvbmNlLCBjZWxlYnJhdGUgaGlzIGZ1bmVyYWwgcml0ZXMgd2l0aCBhbGwgZHVlIHBvbXAsIGJ1aWxkIGEgYmFycm93IHRvIGhpcyBtZW1vcnksIGFuZCBtYWtlIG15IG1vdGhlciBtYXJyeSBhZ2Fpbi4iDQoNCldpdGggdGhlc2Ugd29yZHMgaGUgc2F0IGRvd24sIGFuZCBNZW50b3Igd2hvIGhhZCBiZWVuIGEgZnJpZW5kIG9mIFVseXNzZXMsIGFuZCBoYWQgYmVlbiBsZWZ0IGluIGNoYXJnZSBvZiBldmVyeXRoaW5nIHdpdGggZnVsbA==",
      "timestamp": "2014-09-07T22:39:54.022Z"
    },
    {
      "requestFrom": "::ffff:127.0.0.1:53172",
      "ip": "::ffff:127.0.0.1",
      "data": "IGF1dGhvcml0eSBvdmVyIHRoZSBzZXJ2YW50cywgcm9zZSB0byBzcGVhay4gSGUsIHRoZW4sIHBsYWlubHkgYW5kIGluIGFsbCBob25lc3R5IGFkZHJlc3NlZCB0aGVtIHRodXM6DQoNCiJIZWFyIG1lLCBtZW4gb2YgSXRoYWNhLCBJIGhvcGUgdGhhdCB5b3UgbWF5IG5ldmVyIGhhdmUgYSBraW5kIGFuZCB3ZWxsLWRpc3Bvc2VkIHJ1bGVyIGFueSBtb3JlLCBub3Igb25lIHdobyB3aWxsIGdvdmVybiB5b3UgZXF1aXRhYmx5OyBJIGhvcGUgdGhhdCBhbGwgeW91ciBjaGllZnMgaGVuY2Vmb3J3YXJkIG1heSBiZSBjcnVlbCBhbmQgdW5qdXN0LCBmb3IgdGhlcmUgaXMgbm90IG9uZSBvZiB5b3UgYnV0IGhhcyBmb3Jnb3R0ZW4gVWx5c3Nlcywgd2hvIHJ1bGVkIHlvdSBhcyB0aG91Z2ggaGUgd2VyZSB5b3VyIGZhdGhlci4gSSBhbSBub3QgaGFsZiBzbyBhbmdyeSB3aXRoIHRoZSBzdWl0b3JzLCBmb3IgaWYgdGhleSBjaG9vc2UgdG8gZG8gdmlvbGVuY2UgaW4gdGhlIG5hdWdodGluZXNzIG9mIHRoZWlyIGhlYXJ0cywgYW5kIHdhZ2VyIHRoZWlyIGhlYWRzIHRoYXQgVWx5c3NlcyB3aWxsIG5vdCByZXR1cm4sIHRoZXkgY2FuIHRha2UgdGhlIGhpZ2ggaGFuZCBhbmQgZWF0IHVwIGhpcyBlc3RhdGUsIGJ1dCBhcyBmb3IgeW91IG90aGVycyBJIGFtIHNob2NrZWQgYXQgdGhlIHdheSBpbiB3aGljaCB5b3UgYWxsIHNpdCBzdGlsbCB3aXRob3V0IGV2ZW4gdHJ5aW5nIHRvIHN0b3Agc3VjaCBzY2FuZGFsb3VzIGdvaW5ncyBvbi13aGljaCB5b3UgY291bGQgZG8gaWYgeW91IGNob3NlLCBmb3IgeW91IGFyZSBtYW55IGFuZCB0aGV5IGFyZSBmZXcuIg0KDQpMZWlvY3JpdHVzLCBzb24gb2YgRXZlbm9yLCBhbnN3ZXJlZCBoaW0gc2F5aW5nLCAiTWVudG9yLCB3aGF0IGZvbGx5IGlzIGFsbCB0aGlzLCB0aGF0IHlvdSBzaG91bGQgc2V0IHRoZSBwZW9wbGUgdG8gc3RheSB1cz8gSXQgaXMgYSBoYXJkIHRoaW5nIGZvciBvbmUgbWFuIHRvIGZpZ2h0IHdpdGggbWFueSBhYm91dCBoaXMgdmljdHVhbHMuIEV2ZW4gdGhvdWdoIFVseXNzZXMgaGltc2VsZiB3ZXJlIHRvIHNldCB1cG9uIHVzIHdoaWxlIHdlIGFyZSBmZWFzdGluZyBpbiBoaXMgaG91c2UsIGFuZCBkbyBoaXMgYmVzdCB0byBvdXN0IHVzLCBoaXMgd2lmZSwgd2hvIHdhbnRzIGhpbSBiYWNrIHNvIHZlcnkgYmFkbHksIHdvdWxkIGhhdmUgc21hbGwgY2F1c2UgZm9yIHJlam9pY2luZywgYW5kIGhpcyBibG9vZCB3b3VsZCBiZSB1cG9uIGhpcyBvd24gaGVhZCBpZiBoZSBmb3VnaHQgYWdhaW5zdCBzdWNoIGdyZWF0IG9kZHMuIFRoZXJlIGlzIG5vIHNlbnNlIGluIHdoYXQgeW91IGhhdmUgYmVlbiBzYXlpbmcuIE5vdywgdGhlcmVmb3JlLCBkbyB5b3UgcGVvcGxlIGdvIGFib3V0IHlvdXIgYnVzaW5lc3MsIGFuZCBsZXQgaGlzIGZhdGhlcidzIG9sZCBmcmllbmRzLCBNZW50b3IgYW5kIEhhbGl0aGVyc2VzLCBzcGVlZCB0aGlzIGJveSBvbiBoaXMgam91cm5leSwgaWYgaGUgZ29lcyBhdCBhbGwtIHdoaWNoIEkgZG8gbm90IHRoaW5rIGhlIHdpbGwsIGZvciBoZSBpcyBtb3JlIGxpa2VseSB0byBzdGF5IHdoZXJlIGhlIGlzIHRpbGwgc29tZSBvbmUgY29tZXMgYW5kIHRlbGxzIGhpbSBzb21ldGhpbmcuIg0KDQpPbiB0aGlzIGhlIGJyb2tlIHVwIHRoZSBhc3NlbWJseSwgYW5kIGV2ZXJ5IG1hbiB3ZW50IGJhY2sgdG8gaGlzIG93biBhYm9kZSwgd2hpbGUgdGhlIHN1aXRvcnMgcmV0dXJuZWQgdG8gdGhlIGhvdXNlIG9mIFVseXNzZXMuDQoNClRoZW4gVGVsZW1hY2h1cyB3ZW50IGFsbCBhbG9uZSBieSB0aGUgc2VhIHNpZGUsIHdhc2hlZCBoaXMgaGFuZHMgaW4gdGhlIGdyZXkgd2F2ZXMsIGFuZCBwcmF5ZWQgdG8gTWluZXJ2YS4NCg0KIkhlYXIgbWUsIiBoZSBjcmllZCwgInlvdSBnb2Qgd2hvIHZpc2l0ZWQgbWUgeWVzdGVyZGF5LCBhbmQgYmFkZSBtZSBzYWlsIHRoZSBzZWFzIGluIHNlYXJjaCBvZiBteSBmYXRoZXIgd2hvIGhhcyBzbyBsb25nIGJlZW4gbWlzc2luZy4gSSB3b3VsZCBvYmV5IHlvdSwgYnV0IHRoZSBBY2hhZWFucywgYW5kIG1vcmUgcGFydGljdWxhcmx5IHRoZSB3aWNrZWQgc3VpdG9ycywgYXJlIGhpbmRlcmluZyBtZSB0aGF0IEkgY2Fubm90IGRvIHNvLiINCg0KQXMgaGUgdGh1cyBwcmF5ZWQsIE1pbmVydmEgY2FtZSBjbG9zZSB1cCB0byBoaW0gaW4gdGhlIGxpa2VuZXNzIGFuZCB3aXRoIHRoZSB2b2ljZSBvZiBNZW50b3IuICJUZWxlbWFjaHVzLCIgc2FpZCBzaGUsICJpZiB5b3UgYXJlIG1hZGUgb2YgdGhlIHNhbWUgc3R1ZmYgYXMgeW91ciBmYXRoZXIgeW91IHdpbGwgYmUgbmVpdGhlciBmb29sIG5vciBjb3dhcmQgaGVuY2Vmb3J3YXJkLCBmb3IgVWx5c3NlcyBuZXZlciBicm9rZSBoaXMgd29yZCBub3IgbGVmdCBoaXMgd29yayBoYWxmIGRvbmUuIElmLCB0aGVuLCB5b3UgdGFrZSBhZnRlciBoaW0sIHlvdXIgdm95YWdlIHdpbGwgbm90IGJlIGZydWl0bGVzcywgYnV0IHVubGVzcyB5b3UgaGF2ZSB0aGUgYmxvb2Qgb2YgVWx5c3NlcyBhbmQgb2YgUGVuZWxvcGUgaW4geW91ciB2ZWlucyBJIHNlZSBubyBsaWtlbGlob29kIG9mIHlvdXIgc3VjY2VlZGluZy4gU29ucyBhcmUgc2VsZG9tIGFzIGdvb2QgbWVuIGFzIHRoZWlyIGZhdGhlcnM7IHRoZXkgYXJlIGdlbmVyYWxseSB3b3JzZSwgbm90IGJldHRlcjsgc3RpbGwsIGFzIHlvdSBhcmUgbm90IGdvaW5nIHRvIGJlIGVpdGhlciBmb29sIG9yIGNvd2FyZCBoZW5jZWZvcndhcmQsIGFuZCBhcmUgbm90IGVudGlyZWx5IHdpdGhvdXQgc29tZSBzaGFyZSBvZiB5b3VyIGZhdGhlcidzIHdpc2UgZGlzY2Vybm1lbnQsIEkgbG9vayB3aXRoIGhvcGUgdXBvbiB5b3VyIHVuZGVydGFraW5nLiBCdXQgbWluZCB5b3UgbmV2ZXIgbWFrZSBjb21tb24gY2F1c2Ugd2l0aCBhbnkgb2YgdGhvc2UgZm9vbGlzaCBzdWl0b3JzLCBmb3IgdGhleSBoYXZlIG5laXRoZXIgc2Vuc2Ugbm9yIHZpcnR1ZSwgYW5kIGdpdmUgbm8gdGhvdWdodCB0byBkZWF0aCBhbmQgdG8gdGhlIGRvb20gdGhhdCB3aWxsIHNob3J0bHkgZmFsbCBvbiBvbmUgYW5kIGFsbCBvZiB0aGVtLCBzbyB0aGF0IHRoZXkgc2hhbGwgcGVyaXNoIG9uIHRoZSBzYW1lIGRheS4gQXMgZm9yIHlvdXIgdm95YWdlLCBpdCBzaGFsbCBub3QgYmUgbG9uZyBkZWxheWVkOyB5b3VyIGZhdGhlciB3YXMgc3VjaCBhbiBvbGQgZnJpZW5kIG9mIG1pbmUgdGhhdCBJIHdpbGwgZmluZCB5b3UgYSBzaGlwLCBhbmQgd2lsbCBjb21lIHdpdGggeW91IG15c2VsZi4gTm93LCBob3dldmVyLCByZXR1cm4gaG9tZSwgYW5kIGdvIGFib3V0IGFtb25nIHRoZSBzdWl0b3JzOyBiZWdpbiBnZXR0aW5nIHByb3Zpc2lvbnMgcmVhZHkgZm9yIHlvdXIgdm95YWdlOyBzZWUgZXZlcnl0aGluZyB3ZWxsIHN0b3dlZCwgdGhlIHdpbmUgaW4gamFycywgYW5kIHRoZSBiYXJsZXkgbWVhbCwgd2hpY2ggaXMgdGhlIHN0YWZmIG9mIGxpZmUsIGluIGxlYXRoZXJuIGJhZ3MsIHdoaWxlIEkgZ28gcm91bmQgdGhlIHRvd24gYW5kIGJlYXQgdXAgdm9sdW50ZWVycyBhdCBvbmNlLiBUaGVyZSBhcmUgbWFueSBzaGlwcyBpbiBJdGhhY2EgYm90aCBvbGQgYW5kIG5ldzsgSSB3aWxsIHJ1biBteSBleWUgb3ZlciB0aGVtIGZvciB5b3UgYW5kIHdpbGwgY2hvb3NlIHRoZSBiZXN0OyB3ZSB3aWxsIGdldCBoZXIgcmVhZHkgYW5kIHdpbGwgcHV0IG91dCB0byBzZWEgd2l0aG91dCBkZWxheS4iDQoNClRodXMgc3Bva2UgTWluZXJ2YSBkYXVnaHRlciBvZiBKb3ZlLCBhbmQgVGVsZW1hY2h1cyBsb3N0IG5vIHRpbWUgaW4gZG9pbmcgYXMgdGhlIGdvZGRlc3MgdG9sZCBoaW0uIEhlIHdlbnQgbW9vZGlseSBhbmQgZm91bmQgdGhlIHN1aXRvcnMgZmxheWluZyBnb2F0cyBhbmQgc2luZ2VpbmcgcGlncyBpbiB0aGUgb3V0ZXIgY291cnQuIEFudGlub3VzIGNhbWUgdXAgdG8gaGltIGF0IG9uY2UgYW5kIGxhdWdoZWQgYXMgaGUgdG9vayBoaXMgaGFuZCBpbiBoaXMgb3duLCBzYXlpbmcsICJUZWxlbWFjaHVzLCBteSBmaW5lIGZpcmUtZWF0ZXIsIGJlYXIgbm8gbW9yZSBpbGwgYmxvb2QgbmVpdGhlciBpbiB3b3JkIG5vciBkZWVkLCBidXQgZWF0IGFuZCBkcmluayB3aXRoIHVzIGFzIHlvdSB1c2VkIHRvIGRvLiBUaGUgQWNoYWVhbnMgd2lsbCBmaW5kIHlvdSBpbiBldmVyeXRoaW5nLSBhIHNoaXAgYW5kIGEgcGlja2VkIGNyZXcgdG8gYm9vdC0gc28gdGhhdCB5b3UgY2FuIHNldCBzYWlsIGZvciBQeWxvcyBhdCBvbmNlIGFuZCBnZXQgbmV3cyBvZiB5b3VyIG5vYmxlIGZhdGhlci4iDQoNCiJBbnRpbm91cywiIGFuc3dlcmVkIFRlbGVtYWNodXMsICJJIGNhbm5vdCBlYXQgaW4gcGVhY2UsIG5vciB0YWtlIHBsZWFzdXJlIG9mIGFueSBraW5kIHdpdGggc3VjaCBtZW4gYXMgeW91IGFyZS4gV2FzIGl0IG5vdCBlbm91Z2ggdGhhdCB5b3Ugc2hvdWxkIHdhc3RlIHNvIG11Y2ggZ29vZCBwcm9wZXJ0eSBvZiBtaW5lIHdoaWxlIEkgd2FzIHlldCBhIGJveT8gTm93IHRoYXQgSSBhbSBvbGRlciBhbmQga25vdyBtb3JlIGFib3V0IGl0LCBJIGFtIGFsc28gc3Ryb25nZXIsIGFuZCB3aGV0aGVyIGhlcmUgYW1vbmcgdGhpcyBwZW9wbGUsIG9yIGJ5IGdvaW5nIHRvIFB5bG9zLCBJIHdpbGwgZG8geW91IGFsbCB0aGUgaGFybSBJIGNhbi4gSSBzaGFsbCBnbywgYW5kIG15IGdvaW5nIHdpbGwgbm90IGJlIGluIHZhaW4gdGhvdWdoLCB0aGFua3MgdG8geW91IHN1aXRvcnMsIEkgaGF2ZSBuZWl0aGVyIHNoaXAgbm9yIGNyZXcgb2YgbXkgb3duLCBhbmQgbXVzdCBiZSBwYXNzZW5nZXIgbm90IGNhcHRhaW4uIg0KDQpBcyBoZSBzcG9rZSBoZSBzbmF0Y2hlZCBoaXMgaGFuZCBmcm9tIHRoYXQgb2YgQW50aW5vdXMuIE1lYW53aGlsZSB0aGUgb3RoZXJzIHdlbnQgb24gZ2V0dGluZyBkaW5uZXIgcmVhZHkgYWJvdXQgdGhlIGJ1aWxkaW5ncywgamVlcmluZyBhdCBoaW0gdGF1bnRpbmdseSBhcyB0aGV5IGRpZCBzby4NCg0KIlRlbGVtYWNodXMsIiBzYWlkIG9uZSB5b3VuZ3N0ZXIsICJtZWFucyB0byBiZSB0aGUgZGVhdGggb2YgdXM7IEkgc3VwcG9zZSBoZSB0aGlua3MgaGUgY2FuIGJyaW5nIGZyaWVuZHMgdG8gaGVscCBoaW0gZnJvbSBQeWxvcywgb3IgYWdhaW4gZnJvbSBTcGFydGEsIHdoZXJlIGhlIHNlZW1zIGJlbnQgb24gZ29pbmcuIE9yIHdpbGwgaGUgZ28gdG8gRXBoeXJhIGFzIHdlbGwsIGZvciBwb2lzb24gdG8gcHV0IGluIG91ciB3aW5lIGFuZCBraWxsIHVzPyINCg0KQW5vdGhlciBzYWlkLCAiUGVyaGFwcyBpZiBUZWxlbWFjaHVzIGdvZXMgb24gYm9hcmQgc2hpcCwgaGUgd2lsbCBiZSBsaWtlIGhpcyBmYXRoZXIgYW5kIHBlcmlzaCBmYXIgZnJvbSBoaXMgZnJpZW5kcy4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYXZlIHBsZW50eSB0byBkbywgZm9yIHdlIGNvdWxkIHRoZW4gZGl2aWRlIHVwIGhpcyBwcm9wZXJ0eSBhbW9uZ3N0IHVzOiBhcyBmb3IgdGhlIGhvdXNlIHdlIGNhbiBsZXQgaGlzIG1vdGhlciBhbmQgdGhlIG1hbiB3aG8gbWFycmllcyBoZXIgaGF2ZSB0aGF0LiINCg0KVGhpcyB3YXMgaG93IHRoZXkgdGFsa2VkLiBCdXQgVGVsZW1hY2h1cyB3ZW50IGRvd24gaW50byB0aGUgbG9mdHkgYW5kIHNwYWNpb3VzIHN0b3JlLXJvb20gd2hlcmUgaGlzIGZhdGhlcidzIHRyZWFzdXJlIG9mIGdvbGQgYW5kIGJyb256ZSBsYXkgaGVhcGVkIHVwIHVwb24gdGhlIGZsb29yLCBhbmQgd2hlcmUgdGhlIGxpbmVuIGFuZCBzcGFyZSBjbG90aGVzIHdlcmUga2VwdCBpbiBvcGVuIGNoZXN0cy4gSGVyZSwgdG9vLCB0aGVyZSB3YXMgYSBzdG9yZSBvZiBmcmFncmFudCBvbGl2ZSBvaWwsIHdoaWxlIGNhc2tzIG9mIG9sZCwgd2VsbC1yaXBlbmVkIHdpbmUsIHVuYmxlbmRlZCBhbmQgZml0IGZvciBhIGdvZCB0byBkcmluaywgd2VyZSByYW5nZWQgYWdhaW5zdCB0aGUgd2FsbCBpbiBjYXNlIFVseXNzZXMgc2hvdWxkIGNvbWUgaG9tZSBhZ2FpbiBhZnRlciBhbGwuIFRoZSByb29tIHdhcyBjbG9zZWQgd2l0aCB3ZWxsLW1hZGUgZG9vcnMgb3BlbmluZyBpbiB0aGUgbWlkZGxlOyBtb3Jlb3ZlciB0aGUgZmFpdGhmdWwgb2xkIGhvdXNlLWtlZXBlciBFdXJ5Y2xlYSwgZGF1Z2h0ZXIgb2YgT3BzIHRoZSBzb24gb2YgUGlzZW5vciwgd2FzIGluIGNoYXJnZSBvZiBldmVyeXRoaW5nIGJvdGggbmlnaHQgYW5kIGRheS4gVGVsZW1hY2h1cyBjYWxsZWQgaGVyIHRvIHRoZSBzdG9yZS1yb29tIGFuZCBzYWlkOg0KDQoiTnVyc2UsIGRyYXcgbWUgb2ZmIHNvbWUgb2YgdGhlIGJlc3Qgd2luZSB5b3UgaGF2ZSwgYWZ0ZXIgd2hhdCB5b3UgYXJlIGtlZXBpbmcgZm9yIG15IGZhdGhlcidzIG93biBkcmlua2luZywgaW4gY2FzZSwgcG9vciBtYW4sIGhlIHNob3VsZCBlc2NhcGUgZGVhdGgsIGFuZCBmaW5kIGhpcyB3YXkgaG9tZSBhZ2FpbiBhZnRlciBhbGwuIExldCBtZSBoYXZlIHR3ZWx2ZSBqYXJzLCBhbmQgc2VlIHRoYXQgdGhleSBhbGwgaGF2ZSBsaWRzOyBhbHNvIGZpbGwgbWUgc29tZSB3ZWxsLXNld24gbGVhdGhlcm4gYmFncyB3aXRoIGJhcmxleSBtZWFsLSBhYm91dCB0d2VudHkgbWVhc3VyZXMgaW4gYWxsLiBHZXQgdGhlc2UgdGhpbmdzIHB1dCB0b2dldGhlciBhdCBvbmNlLCBhbmQgc2F5IG5vdGhpbmcgYWJvdXQgaXQuIEkgd2lsbCB0YWtlIGV2ZXJ5dGhpbmcgYXdheSB0aGlzIGV2ZW5pbmcgYXMgc29vbiBhcyBteSBtb3RoZXIgaGFzIGdvbmUgdXBzdGFpcnMgZm9yIHRoZSBuaWdodC4gSSBhbSBnb2luZyB0byBTcGFydGEgYW5kIHRvIFB5bG9zIHRvIHNlZSBpZiBJIGNhbiBoZWFyIGFueXRoaW5nIGFib3V0IHRoZSByZXR1cm4gb2YgbXkgZGVhciBmYXRoZXIuDQoNCldoZW4gRXVyeWNsZWEgaGVhcmQgdGhpcyBzaGUgYmVnYW4gdG8gY3J5LCBhbmQgc3Bva2UgZm9uZGx5IHRvIGhpbSwgc2F5aW5nLCAiTXkgZGVhciBjaGlsZCwgd2hhdCBldmVyIGNhbiBoYXZlIHB1dCBzdWNoIG5vdGlvbiBhcyB0aGF0IGludG8geW91ciBoZWFkPyBXaGVyZSBpbiB0aGUgd29ybGQgZG8geW91IHdhbnQgdG8gZ28gdG8tIHlvdSwgd2hvIGFyZSB0aGUgb25lIGhvcGUgb2YgdGhlIGhvdXNlPyBZb3VyIHBvb3IgZmF0aGVyIGlzIGRlYWQgYW5kIGdvbmUgaW4gc29tZSBmb3JlaWduIGNvdW50cnkgbm9ib2R5IGtub3dzIHdoZXJlLCBhbmQgYXMgc29vbiBhcyB5b3VyIGJhY2sgaXMgdHVybmVkIHRoZXNlIHdpY2tlZCBvbmVzIGhlcmUgd2lsbCBiZSBzY2hlbWluZyB0byBnZXQgeW91IHB1dCBvdXQgb2YgdGhlIHdheSwgYW5kIHdpbGwgc2hhcmUgYWxsIHlvdXIgcG9zc2Vzc2lvbnMgYW1vbmcgdGhlbXNlbHZlczsgc3RheSB3aGVyZSB5b3UgYXJlIGFtb25nIHlvdXIgb3duIHBlb3BsZSwgYW5kIGRvIG5vdCBnbyB3YW5kZXJpbmcgYW5kIHdvcnJ5aW5nIHlvdXIgbGlmZSBvdXQgb24gdGhlIGJhcnJlbiBvY2Vhbi4iDQoNCiJGZWFyIG5vdCwgbnVyc2UsIiBhbnN3ZXJlZCBUZWxlbWFjaHVzLCAibXkgc2NoZW1lIGlzIG5vdCB3aXRob3V0IGhlYXZlbidzIHNhbmN0aW9uOyBidXQgc3dlYXIgdGhhdCB5b3Ugd2lsbCBzYXkgbm90aGluZyBhYm91dCBhbGwgdGhpcyB0byBteSBtb3RoZXIsIHRpbGwgSSBoYXZlIGJlZW4gYXdheSBzb21lIHRlbiBvciB0d2VsdmUgZGF5cywgdW5sZXNzIHNoZSBoZWFycyBvZiBteSBoYXZpbmcgZ29uZSwgYW5kIGFza3MgeW91OyBmb3IgSSBkbyBub3Qgd2FudCBoZXIgdG8gc3BvaWwgaGVyIGJlYXV0eSBieSBjcnlpbmcuIg0KDQpUaGUgb2xkIHdvbWFuIHN3b3JlIG1vc3Qgc29sZW1ubHkgdGhhdCBzaGUgd291bGQgbm90LCBhbmQgd2hlbiBzaGUgaGFkIGNvbXBsZXRlZCBoZXIgb2F0aCwgc2hlIGJlZ2FuIGRyYXdpbmcgb2ZmIHRoZSB3aW5lIGludG8gamFycywgYW5kIGdldHRpbmcgdGhlIGJhcmxleSBtZWFsIGludG8gdGhlIGJhZ3MsIHdoaWxlIFRlbGVtYWNodXMgd2VudCBiYWNrIHRvIHRoZSBzdWl0b3JzLg0KDQpUaGVuIE1pbmVydmEgYmV0aG91Z2h0IGhlciBvZiBhbm90aGVyIG1hdHRlci4gU2hlIHRvb2sgaGlzIHNoYXBlLCBhbmQgd2VudCByb3VuZCB0aGUgdG93biB0byBlYWNoIG9uZSBvZiB0aGUgY3JldywgdGVsbGluZyB0aGVtIHRvIG1lZXQgYXQgdGhlIHNoaXAgYnkgc3VuZG93bi4gU2hlIHdlbnQgYWxzbyB0byBOb2Vtb24gc29uIG9mIFBocm9uaXVzLCBhbmQgYXNrZWQgaGltIHRvIGxldCBoZXIgaGF2ZSBhIHNoaXAtIHdoaWNoIGhlIHdhcyB2ZXJ5IHJlYWR5IHRvIGRvLiBXaGVuIHRoZSBzdW4gaGFkIHNldCBhbmQgZGFya25lc3Mgd2FzIG92ZXIgYWxsIHRoZSBsYW5kLCBzaGUgZ290IHRoZSBzaGlwIGludG8gdGhlIHdhdGVyLCBwdXQgYWxsIHRoZSB0YWNrbGUgb24gYm9hcmQgaGVyIHRoYXQgc2hpcHMgZ2VuZXJhbGx5IGNhcnJ5LCBhbmQgc3RhdGlvbmVkIGhlciBhdCB0aGUgZW5kIG9mIHRoZSBoYXJib3VyLiBQcmVzZW50bHkgdGhlIGNyZXcgY2FtZSB1cCwgYW5kIHRoZSBnb2RkZXNzIHNwb2tlIGVuY291cmFnaW5nbHkgdG8gZWFjaCBvZiB0aGVtLg0KDQpGdXJ0aGVybW9yZSBzaGUgd2VudCB0byB0aGUgaG91c2Ugb2YgVWx5c3NlcywgYW5kIHRocmV3IHRoZSBzdWl0b3JzIGludG8gYSBkZWVwIHNsdW1iZXIuIFNoZSBjYXVzZWQgdGhlaXIgZHJpbmsgdG8gZnVkZGxlIHRoZW0sIGFuZCBtYWRlIHRoZW0gZHJvcCB0aGVpciBjdXBzIGZyb20gdGhlaXIgaGFuZHMsIHNvIHRoYXQgaW5zdGVhZCBvZiBzaXR0aW5nIG92ZXIgdGhlaXIgd2luZSwgdGhleSB3ZW50IGJhY2sgaW50byB0aGUgdG93biB0byBzbGVlcCwgd2l0aCB0aGVpciBleWVzIGhlYXZ5IGFuZCBmdWxsIG9mIGRyb3dzaW5lc3MuIFRoZW4gc2hlIHRvb2sgdGhlIGZvcm0gYW5kIHZvaWNlIG9mIE1lbnRvciwgYW5kIGNhbGxlZCBUZWxlbWFjaHVzIHRvIGNvbWUgb3V0c2lkZS4NCg0KIlRlbGVtYWNodXMsIiBzYWlkIHNoZSwgInRoZSBtZW4gYXJlIG9uIGJvYXJkIGFuZCBhdCB0aGVpciBvYXJzLCB3YWl0aW5nIGZvciB5b3UgdG8gZ2l2ZSB5b3VyIG9yZGVycywgc28gbWFrZSBoYXN0ZSBhbmQgbGV0IHVzIGJlIG9mZi4iDQoNCk9uIHRoaXMgc2hlIGxlZCB0aGUgd2F5LCB3aGlsZSBUZWxlbWFjaHVzIGZvbGxvd2VkIGluIGhlciBzdGVwcy4gV2hlbiB0aGV5IGdvdCB0byB0aGUgc2hpcCB0aGV5IGZvdW5kIHRoZSBjcmV3IHdhaXRpbmcgYnkgdGhlIHdhdGVyIHNpZGUsIGFuZCBUZWxlbWFjaHVzIHNhaWQsICJOb3cgbXkgbWVuLCBoZWxwIG1lIHRvIGdldCB0aGUgc3RvcmVzIG9uIGJvYXJkOyB0aGV5IGFyZSBhbGwgcHV0IHRvZ2V0aGVyIGluIHRoZSBjbG9pc3RlciwgYW5kIG15IG1vdGhlciBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGl0LCBub3IgYW55IG9mIHRoZSBtYWlkIHNlcnZhbnRzIGV4Y2VwdCBvbmUuIg0KDQpXaXRoIHRoZXNlIHdvcmRzIGhlIGxlZCB0aGUgd2F5IGFuZCB0aGUgb3RoZXJzIGZvbGxvd2VkIGFmdGVyLiBXaGVuIHRoZXkgaGFkIGJyb3VnaHQgdGhlIHRoaW5ncyBhcyBoZSB0b2xkIHRoZW0sIFRlbGVtYWNodXMgd2VudCBvbiBib2FyZCwgTWluZXJ2YSBnb2luZyBiZWZvcmUgaGltIGFuZCB0YWtpbmcgaGVyIHNlYXQgaW4gdGhlIHN0ZXJuIG9mIHRoZSB2ZXNzZWwsIHdoaWxlIFRlbGVtYWNodXMgc2F0IGJlc2lkZSBoZXIuIFRoZW4gdGhlIG1lbiBsb29zZWQgdGhlIGhhd3NlcnMgYW5kIHRvb2sgdGhlaXIgcGxhY2VzIG9uIHRoZSBiZW5jaGVzLiBNaW5lcnZhIHNlbnQgdGhlbSBhIGZhaXIgd2luZCBmcm9tIHRoZSBXZXN0LCB0aGF0IHdoaXN0bGVkIG92ZXIgdGhlIGRlZXAgYmx1ZSB3YXZlcyB3aGVyZW9uIFRlbGVtYWNodXMgdG9sZCB0aGVtIHRvIGNhdGNoIGhvbGQgb2YgdGhlIHJvcGVzIGFuZCBob2lzdCBzYWlsLCBhbmQgdGhleSBkaWQgYXMgaGUgdG9sZCB0aGVtLiBUaGV5IHNldCB0aGUgbWFzdCBpbiBpdHMgc29ja2V0IGluIHRoZSBjcm9zcyBwbGFuaywgcmFpc2VkIGl0LCBhbmQgbWFkZSBpdCBmYXN0IHdpdGggdGhlIGZvcmVzdGF5czsgdGhlbiB0aGV5IGhvaXN0ZWQgdGhlaXIgd2hpdGUgc2FpbHMgYWxvZnQgd2l0aCByb3BlcyBvZiB0d2lzdGVkIG94IGhpZGUuIEFzIHRoZSBzYWlsIGJlbGxpZWQgb3V0IHdpdGggdGhlIHdpbmQsIHRoZSBzaGlwIGZsZXcgdGhyb3VnaCB0aGUgZGVlcCBibHVlIHdhdGVyLCBhbmQgdGhlIGZvYW0gaGlzc2VkIGFnYWluc3QgaGVyIGJvd3MgYXMgc2hlIHNwZWQgb253YXJkLiBUaGVuIHRoZXkgbWFkZSBhbGwgZmFzdCB0aHJvdWdob3V0IHRoZSBzaGlwLCBmaWxsZWQgdGhlIG1peGluZy1ib3dscyB0byB0aGUgYnJpbSwgYW5kIG1hZGUgZHJpbmsgb2ZmZXJpbmdzIHRvIHRoZSBpbW1vcnRhbCBnb2RzIHRoYXQgYXJlIGZyb20gZXZlcmxhc3RpbmcsIGJ1dCBtb3JlIHBhcnRpY3VsYXJseSB0byB0aGUgZ3JleS1leWVkIGRhdWdodGVyIG9mIEpvdmUuDQoNClRodXMsIHRoZW4sIHRoZSBzaGlwIHNwZWQgb24gaGVyIHdheSB0aHJvdWdoIHRoZSB3YXRjaGVzIG9mIHRoZSBuaWdodCBmcm9tIGRhcmsgdGlsbCBkYXduLg0KDQpCb29rIElJSQ0KDQpCdXQgYXMgdGhlIHN1biB3YXMgcmlzaW5nIGZyb20gdGhlIGZhaXIgc2VhIGludG8gdGhlIGZpcm1hbWVudCBvZiBoZWF2ZW4gdG8gc2hlZCBsaWdodCBvbiBtb3J0YWxzIGFuZCBpbW1vcnRhbHMsIHRoZXkgcmVhY2hlZCBQeWxvcyB0aGUgY2l0eSBvZiBOZWxldXMuIE5vdyB0aGUgcGVvcGxlIG9mIFB5bG9zIHdlcmUgZ2F0aGVyZWQgb24gdGhlIHNlYSBzaG9yZSB0byBvZmZlciBzYWNyaWZpY2Ugb2YgYmxhY2sgYnVsbHMgdG8gTmVwdHVuZSBsb3JkIG9mIHRoZSBFYXJ0aHF1YWtlLiBUaGVyZSB3ZXJlIG5pbmUgZ3VpbGRzIHdpdGggZml2ZSBodW5kcmVkIG1lbiBpbiBlYWNoLCBhbmQgdGhlcmUgd2VyZSBuaW5lIGJ1bGxzIHRvIGVhY2ggZ3VpbGQuIEFzIHRoZXkgd2VyZSBlYXRpbmcgdGhlIGlud2FyZCBtZWF0cyBhbmQgYnVybmluZyB0aGUgdGhpZ2ggYm9uZXMgW29uIHRoZSBlbWJlcnNdIGluIHRoZSBuYW1lIG9mIE5lcHR1bmUsIFRlbGVtYWNodXMgYW5kIGhpcyBjcmV3IGFycml2ZWQsIGZ1cmxlZCB0aGVpciBzYWlscywgYnJvdWdodCB0aGVpciBzaGlwIHRvIGFuY2hvciwgYW5kIHdlbnQgYXNob3JlLg0KDQpNaW5lcnZhIGxlZCB0aGUgd2F5IGFuZCBUZWxlbWFjaHVzIGZvbGxvd2VkIGhlci4gUHJlc2VudGx5IHNoZSBzYWlkLCAiVGVsZW1hY2h1cywgeW91IG11c3Qgbm90IGJlIGluIHRoZSBsZWFzdCBzaHkgb3IgbmVydm91czsgeW91IGhhdmUgdGFrZW4gdGhpcyB2b3lhZ2UgdG8gdHJ5IGFuZCBmaW5kIG91dCB3aGVyZSB5b3VyIGZhdGhlciBpcyBidXJpZWQgYW5kIGhvdyBoZSBjYW1lIGJ5IGhpcyBlbmQ7IHNvIGdvIHN0cmFpZ2h0IHVwIHRvIE5lc3RvciB0aGF0IHdlIG1heSBzZWUgd2hhdCBoZSBoYXMgZ290IHRvIHRlbGwgdXMuIEJlZyBvZiBoaW0gdG8gc3BlYWsgdGhlIHRydXRoLCBhbmQgaGUgd2lsbCB0ZWxsIG5vIGxpZXMsIGZvciBoZSBpcyBhbiBleGNlbGxlbnQgcGVyc29uLiINCg0KIkJ1dCBob3csIE1lbnRvciwiIHJlcGxpZWQgVGVsZW1hY2h1cywgImRhcmUgSSBnbyB1cCB0byBOZXN0b3IsIGFuZCBob3cgYW0gSSB0byBhZGRyZXNzIGhpbT8gSSBoYXZlIG5ldmVyIHlldCBiZWVuIHVzZWQgdG8gaG9sZGluZyBsb25nIGNvbnZlcnNhdGlvbnMgd2l0aCBwZW9wbGUsIGFuZCBhbSBhc2hhbWVkIHRvIGJlZ2luIHF1ZXN0aW9uaW5nIG9uZSB3aG8gaXMgc28gbXVjaCBvbGRlciB0aGFuIG15c2VsZi4iDQoNCiJTb21lIHRoaW5ncywgVGVsZW1hY2h1cywiIGFuc3dlcmVkIE1pbmVydmEsICJ3aWxsIGJlIHN1Z2dlc3RlZCB0byB5b3UgYnkgeW91ciBvd24gaW5zdGluY3QsIGFuZCBoZWF2ZW4gd2lsbCBwcm9tcHQgeW91IGZ1cnRoZXI7IGZvciBJIGFtIGFzc3VyZWQgdGhhdCB0aGUgZ29kcyBoYXZlIGJlZW4gd2l0aCB5b3UgZnJvbSB0aGUgdGltZSBvZiB5b3VyIGJpcnRoIHVudGlsIG5vdy4iDQoNClNoZSB0aGVuIHdlbnQgcXVpY2tseSBvbiwgYW5kIFRlbGVtYWNodXMgZm9sbG93ZWQgaW4gaGVyIHN0ZXBzIHRpbGwgdGhleSByZWFjaGVkIHRoZSBwbGFjZSB3aGVyZSB0aGUgZ3VpbGRzIG9mIHRoZSBQeWxpYW4gcGVvcGxlIHdlcmUgYXNzZW1ibGVkLiBUaGVyZSB0aGV5IGZvdW5kIE5lc3RvciBzaXR0aW5nIHdpdGggaGlzIHNvbnMsIHdoaWxlIGhpcyBjb21wYW55IHJvdW5kIGhpbSB3ZXJlIGJ1c3kgZ2V0dGluZyBkaW5uZXIgcmVhZHksIGFuZCBwdXR0aW5nIHBpZWNlcyBvZiBtZWF0IG9uIHRvIHRoZSBzcGl0cyB3aGlsZSBvdGhlciBwaWVjZXMgd2VyZSBjb29raW5nLiBXaGVuIHRoZXkgc2F3IHRoZSBzdHJhbmdlcnMgdGhleSBjcm93ZGVkIHJvdW5kIHRoZW0sIHRvb2sgdGhlbSBieSB0aGUgaGFuZCBhbmQgYmFkZSB0aGVtIHRha2UgdGhlaXIgcGxhY2VzLiBOZXN0b3IncyBzb24gUGlzaXN0cmF0dXMgYXQgb25jZSBvZmZlcmVkIGhpcyBoYW5kIHRvIGVhY2ggb2YgdGhlbSwgYW5kIHNlYXRlZCB0aGVtIG9uIHNvbWUgc29mdCBzaGVlcHNraW5zIHRoYXQgd2VyZSBseWluZyBvbiB0aGUgc2FuZHMgbmVhciBoaXMgZmF0aGVyIGFuZCBoaXMgYnJvdGhlciBUaHJhc3ltZWRlcy4gVGhlbiBoZSBnYXZlIHRoZW0gdGhlaXIgcG9ydGlvbnMgb2YgdGhlIGlud2FyZCBtZWF0cyBhbmQgcG91cmVkIHdpbmUgZm9yIHRoZW0gaW50byBhIGdvbGRlbiBjdXAsIGhhbmRpbmcgaXQgdG8gTWluZXJ2YSBmaXJzdCwgYW5kIHNhbHV0aW5nIGhlciBhdCB0aGUgc2FtZSB0aW1lLg0KDQoiT2ZmZXIgYSBwcmF5ZXIsIHNpciwiIHNhaWQgaGUsICJ0byBLaW5nIE5lcHR1bmUsIGZvciBpdCBpcyBoaXMgZmVhc3QgdGhhdCB5b3UgYXJlIGpvaW5pbmc7IHdoZW4geW91IGhhdmUgZHVseSBwcmF5ZWQgYW5kIG1hZGUgeW91ciBkcmluay1vZmZlcmluZywgcGFzcyB0aGUgY3VwIHRvIHlvdXIgZnJpZW5kIHRoYXQgaGUgbWF5IGRvIHNvIGFsc28uIEkgZG91YnQgbm90IHRoYXQgaGUgdG9vIGxpZnRzIGhpcyBoYW5kcyBpbiBwcmF5ZXIsIGZvciBtYW4gY2Fubm90IGxpdmUgd2l0aG91dCBHb2QgaW4gdGhlIHdvcmxkLiBTdGlsbCBoZSBpcyB5b3VuZ2VyIHRoYW4geW91IGFyZSwgYW5kIGlzIG11Y2ggb2YgYW4gYWdlIHdpdGggbXlzZWxmLCBzbyBJIGhlIGhhbmRlZCBJIHdpbGwgZ2l2ZSB5b3UgdGhlIHByZWNlZGVuY2UuIg0KDQpBcyBoZSBzcG9rZSBoZSBoYW5kZWQgaGVyIHRoZSBjdXAuIE1pbmVydmEgdGhvdWdodCBpdCB2ZXJ5IHJpZ2h0IGFuZCBwcm9wZXIgb2YgaGltIHRvIGhhdmUgZ2l2ZW4gaXQgdG8gaGVyc2VsZiBmaXJzdDsgc2hlIGFjY29yZGluZ2x5IGJlZ2FuIHByYXlpbmcgaGVhcnRpbHkgdG8gTmVwdHVuZS4gIk8gdGhvdSwiIHNoZSBjcmllZCwgInRoYXQgZW5jaXJjbGVzdCB0aGUgZWFydGgsIHZvdWNoc2FmZSB0byBncmFudCB0aGUgcHJheWVycyBvZiB0aHkgc2VydmFudHMgdGhhdCBjYWxsIHVwb24gdGhlZS4gTW9yZSBlc3BlY2lhbGx5IHdlIHByYXkgdGhlZSBzZW5kIGRvd24gdGh5IGdyYWNlIG9uIE5lc3RvciBhbmQgb24gaGlzIHNvbnM7IHRoZXJlYWZ0ZXIgYWxzbyBtYWtlIHRoZSByZXN0IG9mIHRoZSBQeWxpYW4gcGVvcGxlIHNvbWUgaGFuZHNvbWUgcmV0dXJuIGZvciB0aGUgZ29vZGx5IGhlY2F0b21iIHRoZXkgYXJlIG9mZmVyaW5nIHlvdS4gTGFzdGx5LCBncmFudCBUZWxlbWFjaHVzIGFuZCBteXNlbGYgYSBoYXBweSBpc3N1ZSwgaW4gcmVzcGVjdCBvZiB0aGUgbWF0dGVyIHRoYXQgaGFzIGJyb3VnaHQgdXMgaW4gb3VyIHRvIFB5bG9zLiINCg0KV2hlbiBzaGUgaGFkIHRodXMgbWFkZSBhbiBlbmQgb2YgcHJheWluZywgc2hlIGhhbmRlZCB0aGUgY3VwIHRvIFRlbGVtYWNodXMgYW5kIGhlIHByYXllZCBsaWtld2lzZS4gQnkgYW5kIGJ5LCB3aGVuIHRoZSBvdXRlciBtZWF0cyB3ZXJlIHJvYXN0ZWQgYW5kIGhhZCBiZWVuIHRha2VuIG9mZiB0aGUgc3BpdHMsIHRoZSBjYXJ2ZXJzIGdhdmUgZXZlcnkgbWFuIGhpcyBwb3J0aW9uIGFuZCB0aGV5IGFsbCBtYWRlIGFuIGV4Y2VsbGVudCBkaW5uZXIuIEFzIHNvb24gYXMgdGhleSBoYWQgaGFkIGVub3VnaCB0byBlYXQgYW5kIGRyaW5rLCBOZXN0b3IsIGtuaWdodCBvZiBHZXJlbmUsIGJlZ2FuIHRvIHNwZWFrLg0KDQoiTm93LCIgc2FpZCBoZSwgInRoYXQgb3VyIGd1ZXN0cyBoYXZlIGRvbmUgdGhlaXIgZGlubmVyLCBpdCB3aWxsIGJlIGJlc3QgdG8gYXNrIHRoZW0gd2hvIHRoZXkgYXJlLiBXaG8sIHRoZW4sIHNpciBzdHJhbmdlcnMsIGFyZSB5b3UsIGFuZCBmcm9tIHdoYXQgcG9ydCBoYXZlIHlvdSBzYWlsZWQ/IEFyZSB5b3UgdHJhZGVycz8gb3IgZG8geW91IHNhaWwgdGhlIHNlYXMgYXMgcm92ZXJzIHdpdGggeW91ciBoYW5kIGFnYWluc3QgZXZlcnkgbWFuLCBhbmQgZXZlcnkgbWFuJ3MgaGFuZCBhZ2FpbnN0IHlvdT8iDQoNClRlbGVtYWNodXMgYW5zd2VyZWQgYm9sZGx5LCBmb3IgTWluZXJ2YSBoYWQgZ2l2ZW4gaGltIGNvdXJhZ2UgdG8gYXNrIGFib3V0IGhpcyBmYXRoZXIgYW5kIGdldCBoaW1zZWxmIGEgZ29vZCBuYW1lLg0KDQoiTmVzdG9yLCIgc2FpZCBoZSwgInNvbiBvZiBOZWxldXMsIGhvbm91ciB0byB0aGUgQWNoYWVhbiBuYW1lLCB5b3UgYXNrIHdoZW5jZSB3ZSBjb21lLCBhbmQgSSB3aWxsIHRlbGwgeW91LiBXZSBjb21lIGZyb20gSXRoYWNhIHVuZGVyIE5lcml0dW0sIGFuZCB0aGUgbWF0dGVyIGFib3V0IHdoaWNoIEkgd291bGQgc3BlYWsgaXMgb2YgcHJpdmF0ZSBub3QgcHVibGljIGltcG9ydC4gSSBzZWVrIG5ld3Mgb2YgbXkgdW5oYXBweSBmYXRoZXIgVWx5c3Nlcywgd2hvIGlzIHNhaWQgdG8gaGF2ZSBzYWNrZWQgdGhlIHRvd24gb2YgVHJveSBpbiBjb21wYW55IHdpdGggeW91cnNlbGYuIFdlIGtub3cgd2hhdCBmYXRlIGJlZmVsbCBlYWNoIG9uZSBvZiB0aGUgb3RoZXIgaGVyb2VzIHdobyBmb3VnaHQgYXQgVHJveSwgYnV0IGFzIHJlZ2FyZHMgVWx5c3NlcyBoZWF2ZW4gaGFzIGhpZGRlbiBmcm9tIHVzIHRoZSBrbm93bGVkZ2UgZXZlbiB0aGF0IGhlIGlzIGRlYWQgYXQgYWxsLCBmb3Igbm8gb25lIGNhbiBjZXJ0aWZ5IHVzIGluIHdoYXQgcGxhY2UgaGUgcGVyaXNoZWQsIG5vciBzYXkgd2hldGhlciBoZSBmZWxsIGluIGJhdHRsZSBvbiB0aGUgbWFpbmxhbmQsIG9yIHdhcyBsb3N0IGF0IHNlYSBhbWlkIHRoZSB3YXZlcyBvZiBBbXBoaXRyaXRlLiBUaGVyZWZvcmUgSSBhbSBzdXBwbGlhbnQgYXQgeW91ciBrbmVlcywgaWYgaGFwbHkgeW91IG1heSBiZSBwbGVhc2VkIHRvIHRlbGwgbWUgb2YgaGlzIG1lbGFuY2hvbHkgZW5kLCB3aGV0aGVyIHlvdSBzYXcgaXQgd2l0aCB5b3VyIG93biBleWVzLCBvciBoZWFyZCBpdCBmcm9tIHNvbWUgb3RoZXIgdHJhdmVsbGVyLCBmb3IgaGUgd2FzIGEgbWFuIGJvcm4gdG8gdHJvdWJsZS4gRG8gbm90IHNvZnRlbiB0aGluZ3Mgb3V0IG9mIGFueSBwaXR5IGZvciBtZSwgYnV0IHRlbGwgbWUgaW4gYWxsIHBsYWlubmVzcyBleGFjdGx5IHdoYXQgeW91IHNhdy4gSWYgbXkgYnJhdmUgZmF0aGVyIFVseXNzZXMgZXZlciBkaWQgeW91IGxveWFsIHNlcnZpY2UsIGVpdGhlciBieSB3b3JkIG9yIGRlZWQsIHdoZW4geW91IEFjaGFlYW5zIHdlcmUgaGFyYXNzZWQgYW1vbmcgdGhlIFRyb2phbnMsIGJlYXIgaXQgaW4gbWluZCBub3cgYXMgaW4gbXkgZmF2b3VyIGFuZCB0ZWxsIG1lIHRydWx5IGFsbC4iDQoNCiJNeSBmcmllbmQsIiBhbnN3ZXJlZCBOZXN0b3IsICJ5b3UgcmVjYWxsIGEgdGltZSBvZiBtdWNoIHNvcnJvdyB0byBteSBtaW5kLCBmb3IgdGhlIGJyYXZlIEFjaGFlYW5zIHN1ZmZlcmVkIG11Y2ggYm90aCBhdCBzZWEsIHdoaWxlIHByaXZhdGVlcmluZyB1bmRlciBBY2hpbGxlcywgYW5kIHdoZW4gZmlnaHRpbmcgYmVmb3JlIHRoZSBncmVhdCBjaXR5IG9mIGtpbmcgUHJpYW0uIE91ciBiZXN0IG1lbiBhbGwgb2YgdGhlbSBmZWxsIHRoZXJlLSBBamF4LCBBY2hpbGxlcywgUGF0cm9jbHVzIHBlZXIgb2YgZ29kcyBpbiBjb3Vuc2VsLCBhbmQgbXkgb3duIGRlYXIgc29uIEFudGlsb2NodXMsIGEgbWFuIHNpbmd1bGFybHkgZmxlZXQgb2YgZm9vdCBhbmQgaW4gZmlnaHQgdmFsaWFudC4gQnV0IHdlIHN1ZmZlcmVkIG11Y2ggbW9yZSB0aGFuIHRoaXM7IHdoYXQgbW9ydGFsIHRvbmd1ZSBpbmRlZWQgY291bGQgdGVsbCB0aGUgd2hvbGUgc3Rvcnk/IFRob3VnaCB5b3Ugd2VyZSB0byBzdGF5IGhlcmUgYW5kIHF1ZXN0aW9uIG1lIGZvciBmaXZlIHllYXJzLCBvciBldmVuIHNpeCwgSSBjb3VsZCBub3QgdGVsbCB5b3UgYWxsIHRoYXQgdGhlIEFjaGFlYW5zIHN1ZmZlcmVkLCBhbmQgeW91IHdvdWxkIHR1cm4gaG9tZXdhcmQgd2Vhcnkgb2YgbXkgdGFsZSBiZWZvcmUgaXQgZW5kZWQuIE5pbmUgbG9uZyB5ZWFycyBkaWQgd2UgdHJ5IGV2ZXJ5IGtpbmQgb2Ygc3RyYXRhZ2VtLCBidXQgdGhlIGhhbmQgb2YgaGVhdmVuIHdhcyBhZ2FpbnN0IHVzOyBkdXJpbmcgYWxsIHRoaXMgdGltZSB0aA==",
      "timestamp": "2014-09-07T22:39:54.022Z"
    },
    {
      "requestFrom": "::ffff:127.0.0.1:53172",
      "ip": "::ffff:127.0.0.1",
      "data": "ZXJlIHdhcyBubyBvbmUgd2hvIGNvdWxkIGNvbXBhcmUgd2l0aCB5b3VyIGZhdGhlciBpbiBzdWJ0bGV0eS0gaWYgaW5kZWVkIHlvdSBhcmUgaGlzIHNvbi0gSSBjYW4gaGFyZGx5IGJlbGlldmUgbXkgZXllcy0gYW5kIHlvdSB0YWxrIGp1c3QgbGlrZSBoaW0gdG9vLSBubyBvbmUgd291bGQgc2F5IHRoYXQgcGVvcGxlIG9mIHN1Y2ggZGlmZmVyZW50IGFnZXMgY291bGQgc3BlYWsgc28gbXVjaCBhbGlrZS4gSGUgYW5kIEkgbmV2ZXIgaGFkIGFueSBraW5kIG9mIGRpZmZlcmVuY2UgZnJvbSBmaXJzdCB0byBsYXN0IG5laXRoZXIgaW4gY2FtcCBub3IgY291bmNpbCwgYnV0IGluIHNpbmdsZW5lc3Mgb2YgaGVhcnQgYW5kIHB1cnBvc2Ugd2UgYWR2aXNlZCB0aGUgQXJnaXZlcyBob3cgYWxsIG1pZ2h0IGJlIG9yZGVyZWQgZm9yIHRoZSBiZXN0Lg0KDQoiV2hlbiBob3dldmVyLCB3ZSBoYWQgc2Fja2VkIHRoZSBjaXR5IG9mIFByaWFtLCBhbmQgd2VyZSBzZXR0aW5nIHNhaWwgaW4gb3VyIHNoaXBzIGFzIGhlYXZlbiBoYWQgZGlzcGVyc2VkIHVzLCB0aGVuIEpvdmUgc2F3IGZpdCB0byB2ZXggdGhlIEFyZ2l2ZXMgb24gdGhlaXIgaG9tZXdhcmQgdm95YWdlOyBmb3IgdGhleSBoYWQgTm90IGFsbCBiZWVuIGVpdGhlciB3aXNlIG9yIHVuZGVyc3RhbmRpbmcsIGFuZCBoZW5jZSBtYW55IGNhbWUgdG8gYSBiYWQgZW5kIHRocm91Z2ggdGhlIGRpc3BsZWFzdXJlIG9mIEpvdmUncyBkYXVnaHRlciBNaW5lcnZhLCB3aG8gYnJvdWdodCBhYm91dCBhIHF1YXJyZWwgYmV0d2VlbiB0aGUgdHdvIHNvbnMgb2YgQXRyZXVzLg0KDQoiVGhlIHNvbnMgb2YgQXRyZXVzIGNhbGxlZCBhIG1lZXRpbmcgd2hpY2ggd2FzIG5vdCBhcyBpdCBzaG91bGQgYmUsIGZvciBpdCB3YXMgc3Vuc2V0IGFuZCB0aGUgQWNoYWVhbnMgd2VyZSBoZWF2eSB3aXRoIHdpbmUuIFdoZW4gdGhleSBleHBsYWluZWQgd2h5IHRoZXkgaGFkIGNhbGxlZC0gdGhlIHBlb3BsZSB0b2dldGhlciwgaXQgc2VlbWVkIHRoYXQgTWVuZWxhdXMgd2FzIGZvciBzYWlsaW5nIGhvbWV3YXJkIGF0IG9uY2UsIGFuZCB0aGlzIGRpc3BsZWFzZWQgQWdhbWVtbm9uLCB3aG8gdGhvdWdodCB0aGF0IHdlIHNob3VsZCB3YWl0IHRpbGwgd2UgaGFkIG9mZmVyZWQgaGVjYXRvbWJzIHRvIGFwcGVhc2UgdGhlIGFuZ2VyIG9mIE1pbmVydmEuIEZvb2wgdGhhdCBoZSB3YXMsIGhlIG1pZ2h0IGhhdmUga25vd24gdGhhdCBoZSB3b3VsZCBub3QgcHJldmFpbCB3aXRoIGhlciwgZm9yIHdoZW4gdGhlIGdvZHMgaGF2ZSBtYWRlIHVwIHRoZWlyIG1pbmRzIHRoZXkgZG8gbm90IGNoYW5nZSB0aGVtIGxpZ2h0bHkuIFNvIHRoZSB0d28gc3Rvb2QgYmFuZHlpbmcgaGFyZCB3b3Jkcywgd2hlcmVvbiB0aGUgQWNoYWVhbnMgc3ByYW5nIHRvIHRoZWlyIGZlZXQgd2l0aCBhIGNyeSB0aGF0IHJlbnQgdGhlIGFpciwgYW5kIHdlcmUgb2YgdHdvIG1pbmRzIGFzIHRvIHdoYXQgdGhleSBzaG91bGQgZG8uDQoNCiJUaGF0IG5pZ2h0IHdlIHJlc3RlZCBhbmQgbnVyc2VkIG91ciBhbmdlciwgZm9yIEpvdmUgd2FzIGhhdGNoaW5nIG1pc2NoaWVmIGFnYWluc3QgdXMuIEJ1dCBpbiB0aGUgbW9ybmluZyBzb21lIG9mIHVzIGRyZXcgb3VyIHNoaXBzIGludG8gdGhlIHdhdGVyIGFuZCBwdXQgb3VyIGdvb2RzIHdpdGggb3VyIHdvbWVuIG9uIGJvYXJkLCB3aGlsZSB0aGUgcmVzdCwgYWJvdXQgaGFsZiBpbiBudW1iZXIsIHN0YXllZCBiZWhpbmQgd2l0aCBBZ2FtZW1ub24uIFdlLSB0aGUgb3RoZXIgaGFsZi0gZW1iYXJrZWQgYW5kIHNhaWxlZDsgYW5kIHRoZSBzaGlwcyB3ZW50IHdlbGwsIGZvciBoZWF2ZW4gaGFkIHNtb290aGVkIHRoZSBzZWEuIFdoZW4gd2UgcmVhY2hlZCBUZW5lZG9zIHdlIG9mZmVyZWQgc2FjcmlmaWNlcyB0byB0aGUgZ29kcywgZm9yIHdlIHdlcmUgbG9uZ2luZyB0byBnZXQgaG9tZTsgY3J1ZWwgSm92ZSwgaG93ZXZlciwgZGlkIG5vdCB5ZXQgbWVhbiB0aGF0IHdlIHNob3VsZCBkbyBzbywgYW5kIHJhaXNlZCBhIHNlY29uZCBxdWFycmVsIGluIHRoZSBjb3Vyc2Ugb2Ygd2hpY2ggc28=",
      "timestamp": "2014-09-07T22:39:54.022Z"
    },
    {
      "requestFrom": "::ffff:127.0.0.1:53172",
      "ip": "::ffff:127.0.0.1",
      "data": "bWUgYW1vbmcgdXMgdHVybmVkIHRoZWlyIHNoaXBzIGJhY2sgYWdhaW4sIGFuZCBzYWlsZWQgYXdheSB1bmRlciBVbHlzc2VzIHRvIG1ha2UgdGhlaXIgcGVhY2Ugd2l0aCBBZ2FtZW1ub247IGJ1dCBJLCBhbmQgYWxsIHRoZSBzaGlwcyB0aGF0IHdlcmUgd2l0aCBtZSBwcmVzc2VkIGZvcndhcmQsIGZvciBJIHNhdyB0aGF0IG1pc2NoaWVmIHdhcyBicmV3aW5nLiBUaGUgc29uIG9mIFR5ZGV1cyB3ZW50IG9uIGFsc28gd2l0aCBtZSwgYW5kIGhpcyBjcmV3cyB3aXRoIGhpbS4gTGF0ZXIgb24gTWVuZWxhdXMgam9pbmVkIHVzIGF0IExlc2JvcywgYW5kIGZvdW5kIHVzIG1ha2luZyB1cCBvdXIgbWluZHMgYWJvdXQgb3VyIGNvdXJzZS0gZm9yIHdlIGRpZCBub3Qga25vdyB3aGV0aGVyIHRvIGdvIG91dHNpZGUgQ2hpb3MgYnkgdGhlIGlzbGFuZCBvZiBQc3lyYSwga2VlcGluZyB0aGlzIHRvIG91ciBsZWZ0LCBvciBpbnNpZGUgQ2hpb3MsIG92ZXIgYWdhaW5zdCB0aGUgc3Rvcm15IGhlYWRsYW5kIG9mIE1pbWFzLiBTbyB3ZSBhc2tlZCBoZWF2ZW4gZm9yIGEgc2lnbiwgYW5kIHdlcmUgc2hvd24gb25lIHRvIHRoZSBlZmZlY3QgdGhhdCB3ZSBzaG91bGQgYmUgc29vbmVzdCBvdXQgb2YgZGFuZ2VyIGlmIHdlIGhlYWRlZCBvdXIgc2hpcHMgYWNyb3NzIHRoZSBvcGVuIHNlYSB0byBFdWJvZWEuIFRoaXMgd2UgdGhlcmVmb3JlIGRpZCwgYW5kIGEgZmFpciB3aW5kIHNwcmFuZyB1cCB3aGljaCBnYXZlIHVzIGEgcXVpY2sgcGFzc2FnZSBkdXJpbmcgdGhlIG5pZ2h0IHRvIEdlcmFlc3R1cywgd2hlcmUgd2Ugb2ZmZXJlZCBtYW55IHNhY3JpZmljZXMgdG8gTmVwdHVuZSBmb3IgaGF2aW5nIGhlbHBlZCB1cyBzbyBmYXIgb24gb3VyIHdheS4gRm91ciBkYXlzIGxhdGVyIERpb21lZCBhbmQgaGlzIG1lbiBzdGF0aW9uZWQgdGhlaXIgc2hpcHMgaW4gQXJnb3MsIGJ1dCBJIGhlbGQgb24gZm9yIFB5bG9zLCBhbmQgdGhlIHdpbmQgbmV2ZXIgZmVsbCBsaWdodCBmcm9tIHRoZSBkYXkgd2hlbiBoZWF2ZW4gZmlyc3QgbWFkZSBpdCBmYWlyIGZvciBtZS4NCg0KIlRoZXJlZm9yZSwgbXkgZGVhciB5b3VuZyBmcmllbmQsIEkgcmV0dXJuZWQgd2l0aG91dCBoZWFyaW5nIGFueXRoaW5nIGFib3V0IHRoZSBvdGhlcnMuIEkga25vdyBuZWl0aGVyIHdobyBnb3QgaG9tZSBzYWZlbHkgbm9yIHdobyB3ZXJlIGxvc3QgYnV0LCBhcyBpbiBkdXR5IGJvdW5kLCBJIHdpbGwgZ2l2ZSB5b3Ugd2l0aG91dCByZXNlcnZlIHRoZSByZXBvcnRzIHRoYXQgaGF2ZSByZWFjaGVkIG1lIHNpbmNlIEkgaGF2ZSBiZWVuIGhlcmUgaW4gbXkgb3duIGhvdXNlLiBUaGV5IHNheSB0aGUgTXlybWlkb25zIHJldHVybmVkIGhvbWUgc2FmZWx5IHVuZGVyIEFjaGlsbGVzJyBzb24gTmVvcHRvbGVtdXM7IHNvIGFsc28gZGlkIHRoZSB2YWxpYW50IHNvbiBvZiBQb2lhcywgUGhpbG9jdGV0ZXMuIElkb21lbmV1cywgYWdhaW4sIGxvc3Qgbm8gbWVuIGF0IHNlYSwgYW5kIGFsbCBoaXMgZm9sbG93ZXJzIHdobyBlc2NhcGVkIGRlYXRoIGluIHRoZSBmaWVsZCBnb3Qgc2FmZSBob21lIHdpdGggaGltIHRvIENyZXRlLiBObyBtYXR0ZXIgaG93IGZhciBvdXQgb2YgdGhlIHdvcmxkIHlvdSBsaXZlLCB5b3Ugd2lsbCBoYXZlIGhlYXJkIG9mIEFnYW1lbW5vbiBhbmQgdGhlIGJhZCBlbmQgaGUgY2FtZSB0byBhdCB0aGUgaGFuZHMgb2YgQWVnaXN0aHVzLSBhbmQgYSBmZWFyZnVsIHJlY2tvbmluZyBkaWQgQWVnaXN0aHVzIHByZXNlbnRseSBwYXkuIFNlZSB3aGF0IGEgZ29vZCB0aGluZyBpdCBpcyBmb3IgYSBtYW4gdG8gbGVhdmUgYSBzb24gYmVoaW5kIGhpbSB0byBkbyBhcyBPcmVzdGVzIGRpZCwgd2hvIGtpbGxlZCBmYWxzZSBBZWdpc3RodXMgdGhlIG11cmRlcmVyIG9mIGhpcyBub2JsZSBmYXRoZXIuIFlvdSB0b28sIHRoZW4tIGZvciB5b3UgYXJlIGEgdGFsbCwgc21hcnQtbG9va2luZyBmZWxsb3ctIHNob3cgeW91ciBtZXR0bGUgYW5kIG1ha2UgeW91cnNlbGYgYSBuYW1lIGluIHN0b3J5LiINCg0KIk5lc3RvciBzb24gb2YgTmVsZXVzLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgImhvbm91ciB0byB0aGUgQWNoYWVhbiBuYW1lLCB0aGUgQWNoYWVhbnMgYXBwbGF1ZCBPcmVzdGVzIGFuZCBoaXMgbmFtZSB3aWxsIGxpdmUgdGhyb3VnaCBhbGwgdGltZSBmb3IgaGUgaGFzIGF2ZW5nZWQgaGlzIGZhdGhlciBub2JseS4gV291bGQgdGhhdCBoZWF2ZW4gbWlnaHQgZ3JhbnQgbWUgdG8gZG8gbGlrZSB2ZW5nZWFuY2Ugb24gdGhlIGluc29sZW5jZSBvZiB0aGUgd2lja2VkIHN1aXRvcnMsIHdobyBhcmUgaWxsIHRyZWF0aW5nIG1lIGFuZCBwbG90dGluZyBteSBydWluOyBidXQgdGhlIGdvZHMgaGF2ZSBubyBzdWNoIGhhcHBpbmVzcyBpbiBzdG9yZSBmb3IgbWUgYW5kIGZvciBteSBmYXRoZXIsIHNvIHdlIG11c3QgYmVhciBpdCBhcyBiZXN0IHdlIG1heS4iDQoNCiJNeSBmcmllbmQsIiBzYWlkIE5lc3RvciwgIm5vdyB0aGF0IHlvdSByZW1pbmQgbWUsIEkgcmVtZW1iZXIgdG8gaGF2ZSBoZWFyZCB0aGF0IHlvdXIgbW90aGVyIGhhcyBtYW55IHN1aXRvcnMsIHdobyBhcmUgaWxsIGRpc3Bvc2VkIHRvd2FyZHMgeW91IGFuZCBhcmUgbWFraW5nIGhhdm9jIG9mIHlvdXIgZXN0YXRlLiBEbyB5b3Ugc3VibWl0IHRvIHRoaXMgdGFtZWx5LCBvciBhcmUgcHVibGljIGZlZWxpbmcgYW5kIHRoZSB2b2ljZSBvZiBoZWF2ZW4gYWdhaW5zdCB5b3U/IFdobyBrbm93cyBidXQgd2hhdCBVbHlzc2VzIG1heSBjb21lIGJhY2sgYWZ0ZXIgYWxsLCBhbmQgcGF5IHRoZXNlIHNjb3VuZHJlbHMgaW4gZnVsbCwgZWl0aGVyIHNpbmdsZS1oYW5kZWQgb3Igd2l0aCBhIGZvcmNlIG9mIEFjaGFlYW5zIGJlaGluZCBoaW0/IElmIE1pbmVydmEgd2VyZSB0byB0YWtlIGFzIGdyZWF0IGEgbGlraW5nIHRvIHlvdSBhcyBzaGUgZGlkIHRvIFVseXNzZXMgd2hlbiB3ZSB3ZXJlIGZpZ2h0aW5nIGJlZm9yZSBUcm95IChmb3IgSSBuZXZlciB5ZXQgc2F3IHRoZSBnb2RzIHNvIG9wZW5seSBmb25kIG9mIGFueSBvbmUgYXMgTWluZXJ2YSB0aGVuIHdhcyBvZiB5b3VyIGZhdGhlciksIGlmIHNoZSB3b3VsZCB0YWtlIGFzIGdvb2QgY2FyZSBvZiB5b3UgYXMgc2hlIGRpZCBvZiBoaW0sIHRoZXNlIHdvb2VycyB3b3VsZCBzb29uIHNvbWUgb2YgdGhlbSBoaW0sIGZvcmdldCB0aGVpciB3b29pbmcuIg0KDQpUZWxlbWFjaHVzIGFuc3dlcmVkLCAiSSBjYW4gZXhwZWN0IG5vdGhpbmcgb2YgdGhlIGtpbmQ7IGl0IHdvdWxkIGJlIGZhciB0b28gbXVjaCB0byBob3BlIGZvci4gSSBkYXJlIG5vdCBsZXQgbXlzZWxmIHRoaW5rIG9mIGl0LiBFdmVuIHRob3VnaCB0aGUgZ29kcyB0aGVtc2VsdmVzIHdpbGxlZCBpdCBubyBzdWNoIGdvb2QgZm9ydHVuZSBjb3VsZCBiZWZhbGwgbWUuIg0KDQpPbiB0aGlzIE1pbmVydmEgc2FpZCwgIlRlbGVtYWNodXMsIHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyBIZWF2ZW4gaGFzIGEgbG9uZyBhcm0gaWYgaXQgaXMgbWluZGVkIHRvIHNhdmUgYSBtYW47IGFuZCBpZiBpdCB3ZXJlIG1lLCBJIHNob3VsZCBub3QgY2FyZSBob3cgbXVjaCBJIHN1ZmZlcmVkIGJlZm9yZSBnZXR0aW5nIGhvbWUsIHByb3ZpZGVkIEkgY291bGQgYmUgc2FmZSB3aGVuIEkgd2FzIG9uY2UgdGhlcmUuIEkgd291bGQgcmF0aGVyIHRoaXMsIHRoYW4gZ2V0IGhvbWUgcXVpY2tseSwgYW5kIHRoZW4gYmUga2lsbGVkIGluIG15IG93biBob3VzZSBhcyBBZ2FtZW1ub24gd2FzIGJ5IHRoZSB0cmVhY2hlcnkgb2YgQWVnaXN0aHVzIGFuZCBoaXMgd2lmZS4gU3RpbGwsIGRlYXRoIGlzIGNlcnRhaW4sIGFuZCB3aGVuIGEgbWFuJ3MgaG91ciBpcyBjb21lLCBub3QgZXZlbiB0aGUgZ29kcyBjYW4gc2F2ZSBoaW0sIG5vIG1hdHRlciBob3cgZm9uZCB0aGV5IGFyZSBvZiBoaW0uIg0KDQoiTWVudG9yLCIgYW5zd2VyZWQgVGVsZW1hY2h1cywgImRvIG5vdCBsZXQgdXMgdGFsayBhYm91dCBpdCBhbnkgbW9yZS4gVGhlcmUgaXMgbm8gY2hhbmNlIG9mIG15IGZhdGhlcidzIGV2ZXIgY29taW5nIGJhY2s7IHRoZSBnb2RzIGhhdmUgbG9uZyBzaW5jZSBjb3Vuc2VsbGVkIGhpcyBkZXN0cnVjdGlvbi4gVGhlcmUgaXMgc29tZXRoaW5nIGVsc2UsIGhvd2V2ZXIsIGFib3V0IHdoaWNoIEkgc2hvdWxkIGxpa2UgdG8gYXNrIE5lc3RvciwgZm9yIGhlIGtub3dzIG11Y2ggbW9yZSB0aGFuIGFueSBvbmUgZWxzZSBkb2VzLiBUaGV5IHNheSBoZSBoYXMgcmVpZ25lZCBmb3IgdGhyZWUgZ2VuZXJhdGlvbnMgc28gdGhhdCBpdCBpcyBsaWtlIHRhbGtpbmcgdG8gYW4gaW1tb3J0YWwuIFRlbGwgbWUsIHRoZXJlZm9yZSwgTmVzdG9yLCBhbmQgdGVsbCBtZSB0cnVlOyBob3cgZGlkIEFnYW1lbW5vbiBjb21lIHRvIGRpZSBpbiB0aGF0IHdheT8gV2hhdCB3YXMgTWVuZWxhdXMgZG9pbmc/IEFuZCBob3cgY2FtZSBmYWxzZSBBZWdpc3RodXMgdG8ga2lsbCBzbyBmYXIgYmV0dGVyIGEgbWFuIHRoYW4gaGltc2VsZj8gV2FzIE1lbmVsYXVzIGF3YXkgZnJvbSBBY2hhZWFuIEFyZ29zLCB2b3lhZ2luZyBlbHNld2hpdGhlciBhbW9uZyBtYW5raW5kLCB0aGF0IEFlZ2lzdGh1cyB0b29rIGhlYXJ0IGFuZCBraWxsZWQgQWdhbWVtbm9uPyINCg0KIkkgd2lsbCB0ZWxsIHlvdSB0cnVseSwiIGFuc3dlcmVkIE5lc3RvciwgImFuZCBpbmRlZWQgeW91IGhhdmUgeW91cnNlbGYgZGl2aW5lZCBob3cgaXQgYWxsIGhhcHBlbmVkLiBJZiBNZW5lbGF1cyB3aGVuIGhlIGdvdCBiYWNrIGZyb20gVHJveSBoYWQgZm91bmQgQWVnaXN0aHVzIHN0aWxsIGFsaXZlIGluIGhpcyBob3VzZSwgdGhlcmUgd291bGQgaGF2ZSBiZWVuIG5vIGJhcnJvdyBoZWFwZWQgdXAgZm9yIGhpbSwgbm90IGV2ZW4gd2hlbiBoZSB3YXMgZGVhZCwgYnV0IGhlIHdvdWxkIGhhdmUgYmVlbiB0aHJvd24gb3V0c2lkZSB0aGUgY2l0eSB0byBkb2dzIGFuZCB2dWx0dXJlcywgYW5kIG5vdCBhIHdvbWFuIHdvdWxkIGhhdmUgbW91cm5lZCBoaW0sIGZvciBoZSBoYWQgZG9uZSBhIGRlZWQgb2YgZ3JlYXQgd2lja2VkbmVzczsgYnV0IHdlIHdlcmUgb3ZlciB0aGVyZSwgZmlnaHRpbmcgaGFyZCBhdCBUcm95LCBhbmQgQWVnaXN0aHVzIHdobyB3YXMgdGFraW5nIGhpcyBlYXNlIHF1aWV0bHkgaW4gdGhlIGhlYXJ0IG9mIEFyZ29zLCBjYWpvbGVkIEFnYW1lbW5vbidzIHdpZmUgQ2x5dGVtbmVzdHJhIHdpdGggaW5jZXNzYW50IGZsYXR0ZXJ5Lg0KDQoiQXQgZmlyc3Qgc2hlIHdvdWxkIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGhpcyB3aWNrZWQgc2NoZW1lLCBmb3Igc2hlIHdhcyBvZiBhIGdvb2QgbmF0dXJhbCBkaXNwb3NpdGlvbjsgbW9yZW92ZXIgdGhlcmUgd2FzIGEgYmFyZCB3aXRoIGhlciwgdG8gd2hvbSBBZ2FtZW1ub24gaGFkIGdpdmVuIHN0cmljdCBvcmRlcnMgb24gc2V0dGluZyBvdXQgZm9yIFRyb3ksIHRoYXQgaGUgd2FzIHRvIGtlZXAgZ3VhcmQgb3ZlciBoaXMgd2lmZTsgYnV0IHdoZW4gaGVhdmVuIGhhZCBjb3Vuc2VsbGVkIGhlciBkZXN0cnVjdGlvbiwgQWVnaXN0aHVzIHRodXMgdGhpcyBiYXJkIG9mZiB0byBhIGRlc2VydCBpc2xhbmQgYW5kIGxlZnQgaGltIHRoZXJlIGZvciBjcm93cyBhbmQgc2VhZ3VsbHMgdG8gYmF0dGVuIHVwb24tIGFmdGVyIHdoaWNoIHNoZSB3ZW50IHdpbGxpbmdseSBlbm91Z2ggdG8gdGhlIGhvdXNlIG9mIEFlZ2lzdGh1cy4gVGhlbiBoZSBvZmZlcmVkIG1hbnkgYnVybnQgc2FjcmlmaWNlcyB0byB0aGUgZ29kcywgYW5kIGRlY29yYXRlZCBtYW55IHRlbXBsZXMgd2l0aCB0YXBlc3RyaWVzIGFuZCBnaWxkaW5nLCBmb3IgaGUgaGFkIHN1Y2NlZWRlZCBmYXIgYmV5b25kIGhpcyBleHBlY3RhdGlvbnMuDQoNCiJNZWFud2hpbGUgTWVuZWxhdXMgYW5kIEkgd2VyZSBvbiBvdXIgd2F5IGhvbWUgZnJvbSBUcm95LCBvbiBnb29kIHRlcm1zIHdpdGggb25lIGFub3RoZXIuIFdoZW4gd2UgZ290IHRvIFN1bml1bSwgd2hpY2ggaXMgdGhlIHBvaW50IG9mIEF0aGVucywgQXBvbGxvIHdpdGggaGlzIHBhaW5sZXNzIHNoYWZ0cyBraWxsZWQgUGhyb250aXMgdGhlIHN0ZWVyc21hbiBvZiBNZW5lbGF1cycgc2hpcCAoYW5kIG5ldmVyIG1hbiBrbmV3IGJldHRlciBob3cgdG8gaGFuZGxlIGEgdmVzc2VsIGluIHJvdWdoIHdlYXRoZXIpIHNvIHRoYXQgaGUgZGllZCB0aGVuIGFuZCB0aGVyZSB3aXRoIHRoZSBoZWxtIGluIGhpcyBoYW5kLCBhbmQgTWVuZWxhdXMsIHRob3VnaCB2ZXJ5IGFueGlvdXMgdG8gcHJlc3MgZm9yd2FyZCwgaGFkIHRvIHdhaXQgaW4gb3JkZXIgdG8gYnVyeSBoaXMgY29tcmFkZSBhbmQgZ2l2ZSBoaW0gaGlzIGR1ZSBmdW5lcmFsIHJpdGVzLiBQcmVzZW50bHksIHdoZW4gaGUgdG9vIGNvdWxkIHB1dCB0byBzZWEgYWdhaW4sIGFuZCBoYWQgc2FpbGVkIG9uIGFzIGZhciBhcyB0aGUgTWFsZWFuIGhlYWRzLCBKb3ZlIGNvdW5zZWxsZWQgZXZpbCBhZ2FpbnN0IGhpbSBhbmQgbWFkZSBpdCBpdCBibG93IGhhcmQgdGlsbCB0aGUgd2F2ZXMgcmFuIG1vdW50YWlucyBoaWdoLiBIZXJlIGhlIGRpdmlkZWQgaGlzIGZsZWV0IGFuZCB0b29rIHRoZSBvbmUgaGFsZiB0b3dhcmRzIENyZXRlIHdoZXJlIHRoZSBDeWRvbmlhbnMgZHdlbGwgcm91bmQgYWJvdXQgdGhlIHdhdGVycyBvZiB0aGUgcml2ZXIgSWFyZGFudXMuIFRoZXJlIGlzIGEgaGlnaCBoZWFkbGFuZCBoZXJlYWJvdXRzIHN0cmV0Y2hpbmcgb3V0IGludG8gdGhlIHNlYSBmcm9tIGEgcGxhY2UgY2FsbGVkIEdvcnR5biwgYW5kIGFsbCBhbG9uZyB0aGlzIHBhcnQgb2YgdGhlIGNvYXN0IGFzIGZhciBhcyBQaGFlc3R1cyB0aGUgc2VhIHJ1bnMgaGlnaCB3aGVuIHRoZXJlIGlzIGEgc291dGggd2luZCBibG93aW5nLCBidXQgYXJ0ZXIgUGhhZXN0dXMgdGhlIGNvYXN0IGlzIG1vcmUgcHJvdGVjdGVkLCBmb3IgYSBzbWFsbCBoZWFkbGFuZCBjYW4gbWFrZSBhIGdyZWF0IHNoZWx0ZXIuIEhlcmUgdGhpcyBwYXJ0IG9mIHRoZSBmbGVldCB3YXMgZHJpdmVuIG9uIHRvIHRoZSByb2NrcyBhbmQgd3JlY2tlZDsgYnV0IHRoZSBjcmV3cyBqdXN0IG1hbmFnZWQgdG8gc2F2ZSB0aGVtc2VsdmVzLiBBcyBmb3IgdGhlIG90aGVyIGZpdmUgc2hpcHMsIHRoZXkgd2VyZSB0YWtlbiBieSB3aW5kcyBhbmQgc2VhcyB0byBFZ3lwdCwgd2hlcmUgTWVuZWxhdXMgZ2F0aGVyZWQgbXVjaCBnb2xkIGFuZCBzdWJzdGFuY2UgYW1vbmcgcGVvcGxlIG9mIGFuIGFsaWVuIHNwZWVjaC4gTWVhbndoaWxlIEFlZ2lzdGh1cyBoZXJlIGF0IGhvbWUgcGxvdHRlZCBoaXMgZXZpbCBkZWVkLiBGb3Igc2V2ZW4geWVhcnMgYWZ0ZXIgaGUgaGFkIGtpbGxlZCBBZ2FtZW1ub24gaGUgcnVsZWQgaW4gTXljZW5lLCBhbmQgdGhlIHBlb3BsZSB3ZXJlIG9iZWRpZW50IHVuZGVyIGhpbSwgYnV0IGluIHRoZSBlaWdodGggeWVhciBPcmVzdGVzIGNhbWUgYmFjayBmcm9tIEF0aGVucyB0byBiZSBoaXMgYmFuZSwgYW5kIGtpbGxlZCB0aGUgbXVyZGVyZXIgb2YgaGlzIGZhdGhlci4gVGhlbiBoZSBjZWxlYnJhdGVkIHRoZSBmdW5lcmFsIHJpdGVzIG9mIGhpcyBtb3RoZXIgYW5kIG9mIGZhbHNlIEFlZ2lzdGh1cyBieSBhIGJhbnF1ZXQgdG8gdGhlIHBlb3BsZSBvZiBBcmdvcywgYW5kIG9uIHRoYXQgdmVyeSBkYXkgTWVuZWxhdXMgY2FtZSBob21lLCB3aXRoIGFzIG11Y2ggdHJlYXN1cmUgYXMgaGlzIHNoaXBzIGNvdWxkIGNhcnJ5Lg0KDQoiVGFrZSBteSBhZHZpY2UgdGhlbiwgYW5kIGRvIG5vdCBnbyB0cmF2ZWxsaW5nIGFib3V0IGZvciBsb25nIHNvIGZhciBmcm9tIGhvbWUsIG5vciBsZWF2ZSB5b3VyIHByb3BlcnR5IHdpdGggc3VjaCBkYW5nZXJvdXMgcGVvcGxlIGluIHlvdXIgaG91c2U7IHRoZXkgd2lsbCBlYXQgdXAgZXZlcnl0aGluZyB5b3UgaGF2ZSBhbW9uZyB0aGVtLCBhbmQgeW91IHdpbGwgaGF2ZSBiZWVuIG9uIGEgZm9vbCdzIGVycmFuZC4gU3RpbGwsIEkgc2hvdWxkIGFkdmlzZSB5b3UgYnkgYWxsIG1lYW5zIHRvIGdvIGFuZCB2aXNpdCBNZW5lbGF1cywgd2hvIGhhcyBsYXRlbHkgY29tZSBvZmYgYSB2b3lhZ2UgYW1vbmcgc3VjaCBkaXN0YW50IHBlb3BsZXMgYXMgbm8gbWFuIGNvdWxkIGV2ZXIgaG9wZSB0byBnZXQgYmFjayBmcm9tLCB3aGVuIHRoZSB3aW5kcyBoYWQgb25jZSBjYXJyaWVkIGhpbSBzbyBmYXIgb3V0IG9mIGhpcyByZWNrb25pbmc7IGV2ZW4gYmlyZHMgY2Fubm90IGZseSB0aGUgZGlzdGFuY2UgaW4gYSB0d2VsdmVtb250aCwgc28gdmFzdCBhbmQgdGVycmlibGUgYXJlIHRoZSBzZWFzIHRoYXQgdGhleSBtdXN0IGNyb3NzLiBHbyB0byBoaW0sIHRoZXJlZm9yZSwgYnkgc2VhLCBhbmQgdGFrZSB5b3VyIG93biBtZW4gd2l0aCB5b3U7IG9yIGlmIHlvdSB3b3VsZCByYXRoZXIgdHJhdmVsIGJ5IGxhbmQgeW91IGNhbiBoYXZlIGEgY2hhcmlvdCwgeW91IGNhbiBoYXZlIGhvcnNlcywgYW5kIGhlcmUgYXJlIG15IHNvbnMgd2hvIGNhbiBlc2NvcnQgeW91IHRvIExhY2VkYWVtb24gd2hlcmUgTWVuZWxhdXMgbGl2ZXMuIEJlZyBvZiBoaW0gdG8gc3BlYWsgdGhlIHRydXRoLCBhbmQgaGUgd2lsbCB0ZWxsIHlvdSBubyBsaWVzLCBmb3IgaGUgaXMgYW4gZXhjZWxsZW50IHBlcnNvbi4iDQoNCkFzIGhlIHNwb2tlIHRoZSBzdW4gc2V0IGFuZCBpdCBjYW1lIG9uIGRhcmssIHdoZXJlb24gTWluZXJ2YSBzYWlkLCAiU2lyLCBhbGwgdGhhdCB5b3UgaGF2ZSBzYWlkIGlzIHdlbGw7IG5vdywgaG93ZXZlciwgb3JkZXIgdGhlIHRvbmd1ZXMgb2YgdGhlIHZpY3RpbXMgdG8gYmUgY3V0LCBhbmQgbWl4IHdpbmUgdGhhdCB3ZSBtYXkgbWFrZSBkcmluay1vZmZlcmluZ3MgdG8gTmVwdHVuZSwgYW5kIHRoZSBvdGhlciBpbW1vcnRhbHMsIGFuZCB0aGVuIGdvIHRvIGJlZCwgZm9yIGl0IGlzIGJlZCB0aW1lLiBQZW9wbGUgc2hvdWxkIGdvIGF3YXkgZWFybHkgYW5kIG5vdCBrZWVwIGxhdGUgaG91cnMgYXQgYSByZWxpZ2lvdXMgZmVzdGl2YWwuIg0KDQpUaHVzIHNwb2tlIHRoZSBkYXVnaHRlciBvZiBKb3ZlLCBhbmQgdGhleSBvYmV5ZWQgaGVyIHNheWluZy4gTWVuIHNlcnZhbnRzIHBvdXJlZCB3YXRlciBvdmVyIHRoZSBoYW5kcyBvZiB0aGUgZ3Vlc3RzLCB3aGlsZSBwYWdlcyBmaWxsZWQgdGhlIG1peGluZy1ib3dscyB3aXRoIHdpbmUgYW5kIHdhdGVyLCBhbmQgaGFuZGVkIGl0IHJvdW5kIGFmdGVyIGdpdmluZyBldmVyeSBtYW4gaGlzIGRyaW5rLW9mZmVyaW5nOyB0aGVuIHRoZXkgdGhyZXcgdGhlIHRvbmd1ZXMgb2YgdGhlIHZpY3RpbXMgaW50byB0aGUgZmlyZSwgYW5kIHN0b29kIHVwIHRvIG1ha2UgdGhlaXIgZHJpbmstb2ZmZXJpbmdzLiBXaGVuIHRoZXkgaGFkIG1hZGUgdGhlaXIgb2ZmZXJpbmdzIGFuZCBoYWQgZHJ1bmsgZWFjaCBhcyBtdWNoIGFzIGhlIHdhcyBtaW5kZWQsIE1pbmVydmEgYW5kIFRlbGVtYWNodXMgd2VyZSBmb3Jnb2luZyBvbiBib2FyZCB0aGVpciBzaGlwLCBidXQgTmVzdG9yIGNhdWdodCB0aGVtIHVwIGF0IG9uY2UgYW5kIHN0YXllZCB0aGVtLg0KDQoiSGVhdmVuIGFuZCB0aGUgaW1tb3J0YWwgZ29kcywiIGhlIGV4Y2xhaW1lZCwgImZvcmJpZCB0aGF0IHlvdSBzaG91bGQgbGVhdmUgbXkgaG91c2UgdG8gZ28gb24gYm9hcmQgb2YgYSBzaGlwLiBEbyB5b3UgdGhpbmsgSSBhbSBzbyBwb29yIGFuZCBzaG9ydCBvZiBjbG90aGVzLCBvciB0aGF0IEkgaGF2ZSBzbyBmZXcgY2xvYWtzIGFuZCBhcyB0byBiZSB1bmFibGUgdG8gZmluZCBjb21mb3J0YWJsZSBiZWRzIGJvdGggZm9yIG15c2VsZiBhbmQgZm9yIG15IGd1ZXN0cz8gTGV0IG1lIHRlbGwgeW91IEkgaGF2ZSBzdG9yZSBib3RoIG9mIHJ1Z3MgYW5kIGNsb2FrcywgYW5kIHNoYWxsIG5vdCBwZXJtaXQgdGhlIHNvbiBvZiBteSBvbGQgZnJpZW5kIFVseXNzZXMgdG8gY2FtcCBkb3duIG9uIHRoZSBkZWNrIG9mIGEgc2hpcC0gbm90IHdoaWxlIEkgbGl2ZS0gbm9yIHlldCB3aWxsIG15IHNvbnMgYWZ0ZXIgbWUsIGJ1dCB0aGV5IHdpbGwga2VlcCBvcGVuIGhvdXNlIGFzIGhhdmUgZG9uZS4iDQoNClRoZW4gTWluZXJ2YSBhbnN3ZXJlZCwgIlNpciwgeW91IGhhdmUgc3Bva2VuIHdlbGwsIGFuZCBpdCB3aWxsIGJlIG11Y2ggYmV0dGVyIHRoYXQgVGVsZW1hY2h1cyBzaG91bGQgZG8gYXMgeW91IGhhdmUgc2FpZDsgaGUsIHRoZXJlZm9yZSwgc2hhbGwgcmV0dXJuIHdpdGggeW91IGFuZCBzbGVlcCBhdCB5b3VyIGhvdXNlLCBidXQgSSBtdXN0IGdvIGJhY2sgdG8gZ2l2ZSBvcmRlcnMgdG8gbXkgY3JldywgYW5kIGtlZXAgdGhlbSBpbiBnb29kIGhlYXJ0LiBJIGFtIHRoZSBvbmx5IG9sZGVyIHBlcnNvbiBhbW9uZyB0aGVtOyB0aGUgcmVzdCBhcmUgYWxsIHlvdW5nIG1lbiBvZiBUZWxlbWFjaHVzJyBvd24gYWdlLCB3aG8gaGF2ZSB0YWtlbiB0aGlzIHZveWFnZSBvdXQgb2YgZnJpZW5kc2hpcDsgc28gSSBtdXN0IHJldHVybiB0byB0aGUgc2hpcCBhbmQgc2xlZXAgdGhlcmUuIE1vcmVvdmVyIHRvLW1vcnJvdyBJIG11c3QgZ28gdG8gdGhlIENhdWNvbmlhbnMgd2hlcmUgSSBoYXZlIGEgbGFyZ2Ugc3VtIG9mIG1vbmV5IGxvbmcgb3dpbmcgdG8gbWUuIEFzIGZvciBUZWxlbWFjaHVzLCBub3cgdGhhdCBoZSBpcyB5b3VyIGd1ZXN0LCBzZW5kIGhpbSB0byBMYWNlZGFlbW9uIGluIGEgY2hhcmlvdCwgYW5kIGxldCBvbmUgb2YgeW91ciBzb25zIGdvIHdpdGggaGltLiBCZSBwbGVhc2VkIGFsc28gdG8gcHJvdmlkZSBoaW0gd2l0aCB5b3VyIGJlc3QgYW5kIGZsZWV0ZXN0IGhvcnNlcy4iDQoNCldoZW4gc2hlIGhhZCB0aHVzIHNwb2tlbiwgc2hlIGZsZXcgYXdheSBpbiB0aGUgZm9ybSBvZiBhbiBlYWdsZSwgYW5kIGFsbCBtYXJ2ZWxsZWQgYXMgdGhleSBiZWhlbGQgaXQuIE5lc3RvciB3YXMgYXN0b25pc2hlZCwgYW5kIHRvb2sgVGVsZW1hY2h1cyBieSB0aGUgaGFuZC4gIk15IGZyaWVuZCwiIHNhaWQgaGUsICJJIHNlZSB0aGF0IHlvdSBhcmUgZ29pbmcgdG8gYmUgYSBncmVhdCBoZXJvIHNvbWUgZGF5LCBzaW5jZSB0aGUgZ29kcyB3YWl0IHVwb24geW91IHRodXMgd2hpbGUgeW91IGFyZSBzdGlsbCBzbyB5b3VuZy4gVGhpcyBjYW4gaGF2ZSBiZWVuIG5vbmUgb3RoZXIgb2YgdGhvc2Ugd2hvIGR3ZWxsIGluIGhlYXZlbiB0aGFuIEpvdmUncyByZWRvdWJ0YWJsZSBkYXVnaHRlciwgdGhlIFRyaXRvLWJvcm4sIHdobyBzaG93ZWQgc3VjaCBmYXZvdXIgdG93YXJkcyB5b3VyIGJyYXZlIGZhdGhlciBhbW9uZyB0aGUgQXJnaXZlcy4iICJIb2x5IHF1ZWVuLCIgaGUgY29udGludWVkLCAidm91Y2hzYWZlIHRvIHNlbmQgZG93biB0aHkgZ3JhY2UgdXBvbiBteXNlbGYsIG15IGdvb2Qgd2lmZSwgYW5kIG15IGNoaWxkcmVuLiBJbiByZXR1cm4sIEkgd2lsbCBvZmZlciB5b3UgaW4gc2FjcmlmaWNlIGEgYnJvYWQtYnJvd2VkIGhlaWZlciBvZiBhIHllYXIgb2xkLCB1bmJyb2tlbiwgYW5kIG5ldmVyIHlldCBicm91Z2h0IGJ5IG1hbiB1bmRlciB0aGUgeW9rZS4gSSB3aWxsIGdpbGQgaGVyIGhvcm5zLCBhbmQgd2lsbCBvZmZlciBoZXIgdXAgdG8geW91IGluIHNhY3JpZmljZS4iDQoNClRodXMgZGlkIGhlIHByYXksIGFuZCBNaW5lcnZhIGhlYXJkIGhpcyBwcmF5ZXIuIEhlIHRoZW4gbGVkIHRoZSB3YXkgdG8gaGlzIG93biBob3VzZSwgZm9sbG93ZWQgYnkgaGlzIHNvbnMgYW5kIHNvbnMtaW4tbGF3LiBXaGVuIHRoZXkgaGFkIGdvdCB0aGVyZSBhbmQgaGFkIHRha2VuIHRoZWlyIHBsYWNlcyBvbiB0aGUgYmVuY2hlcyBhbmQgc2VhdHMsIGhlIG1peGVkIHRoZW0gYSBib3dsIG9mIHN3ZWV0IHdpbmUgdGhhdCB3YXMgZWxldmVuIHllYXJzIG9sZCB3aGVuIHRoZSBob3VzZWtlZXBlciB0b29rIHRoZSBsaWQgb2ZmIHRoZSBqYXIgdGhhdCBoZWxkIGl0LiBBcyBoZSBtaXhlZCB0aGUgd2luZSwgaGUgcHJheWVkIG11Y2ggYW5kIG1hZGUgZHJpbmstb2ZmZXJpbmdzIHRvIE1pbmVydmEsIGRhdWdodGVyIG9mIEFlZ2lzLWJlYXJpbmcgSm92ZS4gVGhlbiwgd2hlbiB0aGV5IGhhZCBtYWRlIHRoZWlyIGRyaW5rLW9mZmVyaW5ncyBhbmQgaGFkIGRydW5rIGVhY2ggYXMgbXVjaCBhcyBoZSB3YXMgbWluZGVkLCB0aGUgb3RoZXJzIHdlbnQgaG9tZSB0byBiZWQgZWFjaCBpbiBoaXMgb3duIGFib2RlOyBidXQgTmVzdG9yIHB1dCBUZWxlbWFjaHVzIHRvIHNsZWVwIGluIHRoZSByb29tIHRoYXQgd2FzIG92ZXIgdGhlIGdhdGV3YXkgYWxvbmcgd2l0aCBQaXNpc3RyYXR1cywgd2hvIHdhcyB0aGUgb25seSB1bm1hcnJpZWQgc29uIG5vdyBsZWZ0IGhpbS4gQXMgZm9yIGhpbXNlbGYsIGhlIHNsZXB0IGluIGFuIGlubmVyIHJvb20gb2YgdGhlIGhvdXNlLCB3aXRoIHRoZSBxdWVlbiBoaXMgd2lmZSBieSBoaXMgc2lkZS4NCg0KTm93IHdoZW4gdGhlIGNoaWxkIG9mIG1vcm5pbmcsIHJvc3ktZmluZ2VyZWQgRGF3biwgYXBwZWFyZWQsIE5lc3RvciBsZWZ0IGhpcyBjb3VjaCBhbmQgdG9vayBoaXMgc2VhdCBvbiB0aGUgYmVuY2hlcyBvZiB3aGl0ZSBhbmQgcG9saXNoZWQgbWFyYmxlIHRoYXQgc3Rvb2QgaW4gZnJvbnQgb2YgaGlzIGhvdXNlLiBIZXJlIGFmb3JldGltZSBzYXQgTmVsZXVzLCBwZWVyIG9mIGdvZHMgaW4gY291bnNlbCwgYnV0IGhlIHdhcyBub3cgZGVhZCwgYW5kIGhhZCBnb25lIHRvIHRoZSBob3VzZSBvZiBIYWRlczsgc28gTmVzdG9yIHNhdCBpbiBoaXMgc2VhdCwgc2NlcHRyZSBpbiBoYW5kLCBhcyBndWFyZGlhbiBvZiB0aGUgcHVibGljIHdlYWwuIEhpcyBzb25zIGFzIHRoZXkgbGVmdCB0aGVpciByb29tcyBnYXRoZXJlZCByb3VuZCBoaW0sIEVjaGVwaHJvbiwgU3RyYXRpdXMsIFBlcnNldXMsIEFyZXR1cywgYW5kIFRocmFzeW1lZGVzOyB0aGUgc2l4dGggc29uIHdhcyBQaXNpc3RyYXR1cywgYW5kIHdoZW4gVGVsZW1hY2h1cyBqb2luZWQgdGhlbSB0aGV5IG1hZGUgaGltIHNpdCB3aXRoIHRoZW0uIE5lc3RvciB0aGVuIGFkZHJlc3NlZCB0aGVtLg0KDQoiTXkgc29ucywiIHNhaWQgaGUsICJtYWtlIGhhc3RlIHRvIGRvIGFzIEkgc2hhbGwgYmlkIHlvdS4gSSB3aXNoIGZpcnN0IGFuZCBmb3JlbW9zdCB0byBwcm9waXRpYXRlIHRoZSBncmVhdCBnb2RkZXNzIE1pbmVydmEsIHdobyBtYW5pZmVzdGVkIGhlcnNlbGYgdmlzaWJseSB0byBtZSBkdXJpbmcgeWVzdGVyZGF5J3MgZmVzdGl2aXRpZXMuIEdvLCB0aGVuLCBvbmUgb3Igb3RoZXIgb2YgeW91IHRvIHRoZSBwbGFpbiwgdGVsbCB0aGUgc3RvY2ttYW4gdG8gbG9vayBtZSBvdXQgYSBoZWlmZXIsIGFuZCBjb21lIG9uIGhlcmUgd2l0aCBpdCBhdCBvbmNlLiBBbm90aGVyIG11c3QgZ28gdG8gVGVsZW1hY2h1cydzIHNoaXAsIGFuZCBpbnZpdGUgYWxsIHRoZSBjcmV3LCBsZWF2aW5nIHR3byBtZW4gb25seSBpbiBjaGFyZ2Ugb2YgdGhlIHZlc3NlbC4gU29tZSBvbmUgZWxzZSB3aWxsIHJ1biBhbmQgZmV0Y2ggTGFlcmNldXMgdGhlIGdvbGRzbWl0aCB0byBnaWxkIHRoZSBob3JucyBvZiB0aGUgaGVpZmVyLiBUaGUgcmVzdCwgc3RheSBhbGwgb2YgeW91IHdoZXJlIHlvdSBhcmU7IHRlbGwgdGhlIG1haWRzIGluIHRoZSBob3VzZSB0byBwcmVwYXJlIGFuIGV4Y2VsbGVudCBkaW5uZXIsIGFuZCB0byBmZXRjaCBzZWF0cywgYW5kIGxvZ3Mgb2Ygd29vZCBmb3IgYSBidXJudCBvZmZlcmluZy4gVGVsbCB0aGVtIGFsc28tIHRvIGJyaW5nIG1lIHNvbWUgY2xlYXIgc3ByaW5nIHdhdGVyLiINCg0KT24gdGhpcyB0aGV5IGh1cnJpZWQgb2ZmIG9uIHRoZWlyIHNldmVyYWwgZXJyYW5kcy4gVGhlIGhlaWZlciB3YXMgYnJvdWdodCBpbiBmcm9tIHRoZSBwbGFpbiwgYW5kIFRlbGVtYWNodXMncyBjcmV3IGNhbWUgZnJvbSB0aGUgc2hpcDsgdGhlIGdvbGRzbWl0aCBicm91Z2h0IHRoZSBhbnZpbCwgaGFtbWVyLCBhbmQgdG9uZ3MsIHdpdGggd2hpY2ggaGUgd29ya2VkIGhpcyBnb2xkLCBhbmQgTWluZXJ2YSBoZXJzZWxmIGNhbWUgdG8gdGhlIHNhY3JpZmljZS4gTmVzdG9yIGdhdmUgb3V0IHRoZSBnb2xkLCBhbmQgdGhlIHNtaXRoIGdpbGRlZCB0aGUgaG9ybnMgb2YgdGhlIGhlaWZlciB0aGF0IHRoZSBnb2RkZXNzIG1pZ2h0IGhhdmUgcGxlYXN1cmUgaW4gdGhlaXIgYmVhdXR5LiBUaGVuIFN0cmF0aXVzIGFuZCBFY2hlcGhyb24gYnJvdWdodCBoZXIgaW4gYnkgdGhlIGhvcm5zOyBBcmV0dXMgZmV0Y2hlZCB3YXRlciBmcm9tIHRoZSBob3VzZSBpbiBhIGV3ZXIgdGhhdCBoYWQgYSBmbG93ZXIgcGF0dGVybiBvbiBpdCwgYW5kIGluIGhpcyBvdGhlciBoYW5kIGhlIGhlbGQgYSBiYXNrZXQgb2YgYmFybGV5IG1lYWw7IHN0dXJkeSBUaHJhc3ltZWRlcyBzdG9vZCBieSB3aXRoIGEgc2hhcnAgYXhlLCByZWFkeSB0byBzdHJpa2UgdGhlIGhlaWZlciwgd2hpbGUgUGVyc2V1cyBoZWxkIGEgYnVja2V0LiBUaGVuIE5lc3RvciBiZWdhbiB3aXRoIHdhc2hpbmcgaGlzIGhhbmRzIGFuZCBzcHJpbmtsaW5nIHRoZSBiYXJsZXkgbWVhbCwgYW5kIGhlIG9mZmVyZWQgbWFueSBhIHByYXllciB0byBNaW5lcnZhIGFzIGhlIHRocmV3IGEgbG9jayBmcm9tIHRoZSBoZWlmZXIncyBoZWFkIHVwb24gdGhlIGZpcmUuDQoNCldoZW4gdGhleSBoYWQgZG9uZSBwcmF5aW5nIGFuZCBzcHJpbmtsaW5nIHRoZSBiYXJsZXkgbWVhbCBUaHJhc3ltZWRlcyBkZWFsdCBoaXMgYmxvdywgYW5kIGJyb3VnaHQgdGhlIGhlaWZlciBkb3duIHdpdGggYSBzdHJva2UgdGhhdCBjdXQgdGhyb3VnaCB0aGUgdGVuZG9ucyBhdCB0aGUgYmFzZSBvZiBoZXIgbmVjaywgd2hlcmVvbiB0aGUgZGF1Z2h0ZXJzIGFuZCBkYXVnaHRlcnMtaW4tbGF3IG9mIE5lc3RvciwgYW5kIGhpcyB2ZW5lcmFibGUgd2lmZSBFdXJ5ZGljZSAoc2hlIHdhcyBlbGRlc3QgZGF1Z2h0ZXIgdG8gQ2x5bWVudXMpIHNjcmVhbWVkIHdpdGggZGVsaWdodC4gVGhlbiB0aGV5IGxpZnRlZCB0aGUgaGVpZmVyJ3MgaGVhZCBmcm9tIG9mZiB0aGUgZ3JvdW5kLCBhbmQgUGlzaXN0cmF0dXMgY3V0IGhlciB0aHJvYXQuIFdoZW4gc2hlIGhhZCBkb25lIGJsZWVkaW5nIGFuZCB3YXMgcXVpdGUgZGVhZCwgdGhleSBjdXQgaGVyIHVwLiBUaGV5IGN1dCBvdXQgdGhlIHRoaWdoIGJvbmVzIGFsbCBpbiBkdWUgY291cnNlLCB3cmFwcGVkIHRoZW0gcm91bmQgaW4gdHdvIGxheWVycyBvZiBmYXQsIGFuZCBzZXQgc29tZSBwaWVjZXMgb2YgcmF3IG1lYXQgb24gdGhlIHRvcCBvZiB0aGVtOyB0aGVuIE5lc3RvciBsYWlkIHRoZW0gdXBvbiB0aGUgd29vZCBmaXJlIGFuZCBwb3VyZWQgd2luZSBvdmVyIHRoZW0sIHdoaWxlIHRoZSB5b3VuZyBtZW4gc3Rvb2QgbmVhciBoaW0gd2l0aCBmaXZlLXByb25nZWQgc3BpdHMgaW4gdGhlaXIgaGFuZHMuIFdoZW4gdGhlIHRoaWdocyB3ZXJlIGJ1cm5lZCBhbmQgdGhleSBoYWQgdGFzdGVkIHRoZSBpbndhcmQgbWVhdHMsIHRoZXkgY3V0IHRoZSByZXN0IG9mIHRoZSBtZWF0IHVwIHNtYWxsLCBwdXQgdGhlIHBpZWNlcyBvbiB0aGUgc3BpdHMgYW5kIHRvYXN0ZWQgdGhlbSBvdmVyIHRoZSBmaXJlLg0KDQpNZWFud2hpbGUgbG92ZWx5IFBvbHljYXN0ZSwgTmVzdG9yJ3MgeW91bmdlc3QgZGF1Z2h0ZXIsIHdhc2hlZCBUZWxlbWFjaHVzLiBXaGVuIHNoZSBoYWQgd2FzaGVkIGhpbSBhbmQgYW5vaW50ZWQgaGltIHdpdGggb2lsLCBzaGUgYnJvdWdodCBoaW0gYSBmYWlyIG1hbnRsZSBhbmQgc2hpcnQsIGFuZCBoZSBsb29rZWQgbGlrZSBhIGdvZCBhcyBoZSBjYW1lIGZyb20gdGhlIGJhdGggYW5kIHRvb2sgaGlzIHNlYXQgYnkgdGhlIHNpZGUgb2YgTmVzdG9yLiBXaGVuIHRoZSBvdXRlciBtZWF0cyB3ZXJlIGRvbmUgdGhleSBkcmV3IHRoZW0gb2ZmIHRoZSBzcGl0cyBhbmQgc2F0IGRvd24gdG8gZGlubmVyIHdoZXJlIHRoZXkgd2VyZSB3YWl0ZWQgdXBvbiBieSBzb21lIHdvcnRoeSBoZW5jaG1lbiwgd2hvIGtlcHQgcG91cmluZyB0aGVtIG91dCB0aGVpciB3aW5lIGluIGN1cHMgb2YgZ29sZC4gQXMgc29vbiBhcyB0aGV5IGhhZCBoYWQgaGFkIGVub3VnaCB0byBlYXQgYW5kIGRyaW5rIE5lc3RvciBzYWlkLCAiU29ucywgcHV0IFRlbGVtYWNodXMncyBob3JzZXMgdG8gdGhlIGNoYXJpb3QgdGhhdCBoZSBtYXkgc3RhcnQgYXQgb25jZS4iDQoNClRodXMgZGlkIGhlIHNwZWFrLCBhbmQgdGhleSBkaWQgZXZlbiBhcyBoZSBoYWQgc2FpZCwgYW5kIHlva2VkIHRoZSBmbGVldCBob3JzZXMgdG8gdGhlIGNoYXJpb3QuIFRoZSBob3VzZWtlZXBlciBwYWNrZWQgdGhlbSB1cCBhIHByb3Zpc2lvbiBvZiBicmVhZCwgd2luZSwgYW5kIHN3ZWV0bWVhdHMgZml0IGZvciB0aGUgc29ucyBvZiBwcmluY2VzLiBUaGVuIFRlbGVtYWNodXMgZ290IGludG8gdGhlIGNoYXJpb3QsIHdoaWxlIFBpc2lzdHJhdHVzIGdhdGhlcmVkIHVwIHRoZSByZWlucyBhbmQgdG9vayBoaXMgc2VhdCBiZXNpZGUgaGltLiBIZSBsYXNoZWQgdGhlIGhvcnNlcyBvbiBhbmQgdGhleSBmbGV3IGZvcndhcmQgbm90aGluZyBsb3RoIGludG8gdGhlIG9wZW4gY291bnRyeSwgbGVhdmluZyB0aGUgaGlnaCBjaXRhZGVsIG9mIFB5bG9zIGJlaGluZCB0aGVtLiBBbGwgdGhhdCBkYXkgZGlkIHRoZXkgdHJhdmVsLCBzd2F5aW5nIHRoZSB5b2tlIHVwb24gdGhlaXIgbmVja3MgdGlsbCB0aGUgc3VuIHdlbnQgZG93biBhbmQgZGFya25lc3Mgd2FzIG92ZXIgYWxsIHRoZSBsYW5kLiBUaGVuIHRoZXkgcmVhY2hlZCBQaGVyYWUgd2hlcmUgRGlvY2xlcyBsaXZlZCwgd2hvIHdhcyBzb24gdG8gT3J0aWxvY2h1cyBhbmQgZ3JhbmRzb24gdG8gQWxwaGV1cy4gSGVyZSB0aGV5IHBhc3NlZCB0aGUgbmlnaHQgYW5kIERpb2NsZXMgZW50ZXJ0YWluZWQgdGhlbSBob3NwaXRhYmx5LiBXaGVuIHRoZSBjaGlsZCBvZiBtb3JuaW5nLCByb3N5LWZpbmdlcmVkIERhd247IGFwcGVhcmVkLCB0aGV5IGFnYWluIHlva2VkIHRoZWlyIGhvcnNlcyBhbmQgZHJvdmUgb3V0IHRocm91Z2ggdGhlIGdhdGV3YXkgdW5kZXIgdGhlIGVjaG9pbmcgZ2F0ZWhvdXNlLiBQaXNpc3RyYXR1cyBsYXNoZWQgdGhlIGhvcnNlcyBvbiBhbmQgdGhleSBmbGV3IGZvcndhcmQgbm90aGluZyBsb3RoOyBwcmVzZW50bHkgdGhleSBjYW1lIHRvIHRoZSBjb3JuIGxhbmRzIE9mIHRoZSBvcGVuIGNvdW50cnksIGFuZCBpbiB0aGUgY291cnNlIG9mIHRpbWUgY29tcGxldGVkIHRoZWlyIGpvdXJuZXksIHNvIHdlbGwgZGlkIHRoZWlyIHN0ZWVkcyB0YWtlIHRoZW0uDQoNCk5vdyB3aGVuIHRoZSBzdW4gaGFkIHNldCBhbmQgZGFya25lc3Mgd2FzIG92ZXIgdGhlIGxhbmQu",
      "timestamp": "2014-09-07T22:39:54.022Z"
    }
  ]
}

Supporting large text requests

HTTP is an application protocol built on TCP that typically specifies the end of request using the Content-Length header. Of course, you would normally use mountebank's native http protocol, but it makes a reasonably complex example. We start by creating the endOfRequestResolver function, which looks like the function below. This is overly simplistic for parsing HTTP, but illustrates the point.

function (requestData, logger) {
    var bodyLength = parseInt(/Content-Length: (\d+)/.exec(requestData)[1]),
        headerEndIndex = requestData.indexOf('\n\n'),
        body = requestData.slice(headerEndIndex + 2);

    logger.info('Content-Length: ' + bodyLength + ', so far: ' + body.length);
    return body.length >= bodyLength;
}

We use that function in creating the imposter:

POST /imposters HTTP/1.1
Host: localhost:46717
Accept: application/json
Content-Type: application/json

{
  "port": 4545,
  "protocol": "tcp",
  "mode": "text",
  "stubs": [
    {
      "responses": [{ "is": { "data": "HTTP/1.1 200 OK\nTransfer-Encoding:chunked\n\n" } }]
    }
  ],
  "endOfRequestResolver": {
    "inject": "function (requestData, logger) { var bodyLength = parseInt(/Content-Length: (\\d+)/.exec(requestData)[1]), headerEndIndex = requestData.indexOf('\\n\\n'), body = requestData.slice(headerEndIndex + 2); logger.info('Content-Length: ' + bodyLength + ', so far: ' + body.length); return body.length >= bodyLength; }"
  }
}

We'll send a large HTTP body (greater than 65,000 bytes, which is the largest possible TCP packet size) to try out our function. We'll borrow from some of Homer's loquaciousness to get us a large enough payload.

cat << EOF > request.txt
POST / HTTP/1.1
Host: localhost:4545
Content-Length: 68134
Content-Type: text/plain

Book I

Tell me, O muse [insert rest of text here]..
EOF

cat request.txt | nc localhost 4545

To understand the problem, here's a taste of what the imposter looks like without the endOfRequestResolver. Notice that it captured multiple requests even though only one logical request was actually sent:

HTTP/1.1 200 OK
Vary: Accept
Date: Sun, 11 Jan 2015 16:59:33 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 138346
Connection: keep-alive

{
  "protocol": "tcp",
  "port": 4545,
  "numberOfRequests": 2,
  "mode": "text",
  "requests": [
    {
      "requestFrom": "::1:60590",
      "requestFrom": "::1",
      "data": "POST / HTTP/1.1\nHost: localhost:4545\nContent-Length: 68134\nContent-Type: text/plain\n\nBook I\n\nTell me, O muse [lots of words]...",
      "timestamp": "2015-01-11T16:59:33.022Z"
    },
    {
      "requestFrom": "::1:60590",
      "requestFrom": "::1",
      "data": "upon the fire.\n\nWhen they had done praying and sprinkling the barley meal [lots more words]...",
      "timestamp": "2015-01-11T16:59:33.022Z"
    }
  ]
}

Let's GET our imposter to verify only one request was captured.

GET /imposters/4545 HTTP/1.1
Host: localhost:46717
Accept: application/json
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Vary: Accept
Content-Type: application/json; charset=utf-8
Content-Length: 137982
Date: Sun, 11 Jan 2015 16:59:33 GMT
Connection: keep-alive

{
  "protocol": "tcp",
  "port": 4545,
  "numberOfRequests": 1,
  "recordRequests": false,
  "mode": "text",
  "requests": [
    {
      "requestFrom": "::1:60590",
      "ip": "::1",
      "data": "POST / HTTP/1.1\nHost: localhost:4545\nContent-Length: 68134\nContent-Type: text/plain\n\nBook I\n\nTell me, O muse, [lots of words]...",
      "timestamp": "2015-01-11T16:59:33.022Z"
    }
  ],
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "data": "HTTP/1.1 200 OK\nTransfer-Encoding:chunked\n\n"
          }
        }
      ],
      "matches": [
        {
          "timestamp": "2015-09-07T22:34:57.429Z",
          "request": {
            "requestFrom": "::1:60590",
            "ip": "::1",
            "data": "POST / HTTP/1.1\nHost: localhost:4545\nContent-Length: 68134\nContent-Type: text/plain\n\nBook I\n\nTell me, O muse, [lots of words]..."
          },
          "response": {
            "data": "HTTP/1.1 200 OK\nTransfer-Encoding:chunked\n\n"
          }
        }
      ]
    }
  ],
  "_links": {
    "self": {
      "href": "http://localhost:46717/imposters/4545"
    }
  }
}

The tcp protocol is a wonderful general purpose protocol, but can get tricky to map the application protocol message length to make it work. As always, let mountebank know if he can help.