SW50ZWwoUikgUGxhdGZvcm0gSW5ub3ZhdGlvbiBGcmFtZXdvcmsgZm9yIEVGSQ0KRUZJIERldmVsb3BtZW50IEtpdCBJSSAoRURLIElJKSANClJvb3QgUGFja2FnZSAxLjAwDQoyMDA2LTA3LTE4DQoNCkludGVsIGlzIGEgdHJhZGVtYXJrIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIEludGVsIENvcnBvcmF0aW9uIG9yIGl0cyANCnN1YnNpZGlhcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgY291bnRyaWVzLg0KKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuDQpDb3B5cmlnaHQgKGMpIDIwMDYsIEludGVsIENvcnBvcmF0aW9uDQoNClRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uLCBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb24gDQpob3cgdG8gaW5zdGFsbCBhbmQgYnVpbGQgdGhlIEVESyBJSS4NCg0KUGFja2FnZSBDb250ZW50cw0KLS0tLS0tLS0tLS0tLS0tLQ0KICBSZWxlYXNlTm90ZS50eHQtIFRoZXNlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSBwYWNrYWdlLg0KICBNZGVQa2cgICAgICAgICAtIEluZHVzdHJ5LXN0YW5kYXJkIGhlYWRlcnMgYW5kIGxpYnJhcmllcw0KICBUb29scyAgICAgICAgICAtIEJ1aWxkIC1zcGVjaWZpYyB0b29scyB0aGF0IGFyZSBkZXNpZ25lZCB0byBoZWxwIHRoZSANCiAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXIgY3JlYXRlIGFuZCBtb2RpZnkgZHJpdmVycyBhbmQgbGlicmFyaWVzDQogIEVka01vZHVsZVBrZyAgIC0gUmVmZXJlbmNlIGRyaXZlcnMNCiAgRWRrRmF0QmluUGtnICAgLSBCaW5hcnkgRFhFIGRyaXZlcnMgZm9yIHRoZSBGYXQgMzIgZmlsZSBzeXN0ZW0NCiAgRWRrU2hlbGxCaW5Qa2cgLSBCaW5hcnkgU2hlbGwgYXBwbGljYXRpb25zIGFuZCBjb21tYW5kcw0KICBFZGtOdDMyUGtnICAgICAtIE5UMzIgRW11bGF0aW9uIHBsYXRmb3JtIHJlZmVyZW5jZQ0KDQpOb3RlOiBNREUgYW5kIE1ESyB0aGF0IGFwcGVhciBpbiBvdGhlciBkb2N1bWVudGF0aW9uIHJlZmVyIHRvIHRoZSBNZGVQa2cgYW5kDQpUb29scyBwYWNrYWdlcywgcmVzcGVjdGl2ZWx5LiAgV2hpbGUsIHRoZXNlIHR3byBwYWNrYWdlcyBhcmUgdGhlIG1pbmltdW0gDQpyZXF1aXJlbWVudCBmb3IgZGV2ZWxvcGluZyBFREsgSUkgUGFja2FnZXN3ZSByZWNvbW1lbmQgdGhhdCB5b3UgZG93bmxvYWQgYWxsIA0Kb2YgdGhlIHRvcC1sZXZlbCBmaWxlcyBsaXN0ZWQgYWJvdmUuDQoNClRoZSBmb2xsb3dpbmcgcGFja2FnZSBpcyBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBwcm9qZWN0LCB1bmRlciBhIHNlcGFyYXRlIA0KbGljZW5zZSwgb24gdGhlIFRpYW5vQ29yZS5vcmcgd2Vic2l0ZTogaHR0cHM6Ly9mYXQtZHJpdmVyMi50aWFub2NvcmUub3JnDQoNCiAgRWRrRmF0UGtnICAgICAgLSBBIHBhY2thZ2UgY29udGFpbmluZyBzb3VyY2UgRFhFIGRyaXZlcnMgZm9yIHRoZSBGYXQgMzIgZmlsZQ0KICAgICAgICAgICAgICAgICAgIHN5c3RlbQ0KDQpEb2N1bWVudHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZpbGVuYW1lcyAodG8gZG93bmxvYWQgdGhlc2UgZG9jdW1lbnRzLCBzZWUgk05vdGVzIA0Kb24gRG9jdW1lbnRhdGlvbpQgbGF0ZXIgaW4gdGhlc2UgUmVsZWFzZSBOb3Rlcyk6DQogIEVESyBJSSBNb2R1bGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgTGlicmFyeSBTcGVjaWZpY2F0aW9uLCB2MC41OCANCiAgICAgIChNREVfTGlicmFyeV9TcGVjXzBfNTgucnRmKQ0KICBFREsgSUkgQnVpbGQgYW5kIFBhY2thZ2luZyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiwgdjAuNTMNCiAgICAgIChCdWlsZF9QYWNrYWdpbmdfU3BlY18wXzUzLnJ0ZikNCiAgRURLIElJIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgSW5mcmFzdHJ1Y3R1cmUgRGVzY3JpcHRpb24sIHYwLjU0DQogICAgICAoUENEX0luZnJhc3RydWN0dXJlXzBfNTQucnRmKQ0KICBFREsgSUkgTW9kdWxlIFN1cmZhY2UgQXJlYSBTcGVjaWZpY2F0aW9uLCB2MC41MQ0KICAgICAgKE1vZHVsZV9TdXJmYWNlX0FyZWFfMF81MC5ydGYpDQogIEVESyBJSSBNb2R1bGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgUGFja2FnZSBTcGVjaWZpY2F0aW9uLCB2MC41MQ0KICAgICAgKE1ERV9QYWNrYWdlX1NwZWNfMF81MS5ydGYpDQogIEVESyBJSSBDIENvZGluZyBTdGFuZGFyZHMgU3BlY2lmaWNhdGlvbiB2MC41MQ0KICAgICAgKENfQ29kaW5nX1N0YW5kYXJkc19TcGVjaWZpY2F0aW9uXyAwXzUxLnJ0ZikNCiAgRURLIElJIFN1YnZlcnNpb24gU2V0dXAgR3VpZGUNCiAgICAgIChlZGsyLXN1YnZlcnNpb24tc2V0dXAucnRmKQ0KDQpQcmUtUmVxdWlzaXRlcw0KLS0tLS0tLS0tLS0tLS0NClRoZSBmb2xsb3dpbmcgbGlzdCBvZiB0b29scyBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2ZWxvcG1lbnQgd29ya3N0YXRpb24NCnByaW9yIHRvIHVzaW5nIHRoZSBFREsgSUkuDQoNCkNvbXBpbGVyIFRvb2wgQ2hhaW4NCiAgICAgIE1pY3Jvc29mdCogVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMqICAoaHR0cDovL3d3dy5taWNyb3NvZnQuY29tKQ0KICAgIG9yDQogICAgICBBIHNwZWNpYWwgR0NDIHZlcnNpb24gNC54IG9yIGxhdGVyIChodHRwOi8vZ2NjLmdudS5vcmcpLiBTZWUgYmVsb3cuDQoNCkFzc2VtYmxlciBUb29sIENoYWluDQogICAgICBNaWNyb3NvZnQgTWFjcm8gQXNzZW1ibGVyLCB2ZXJzaW9uIDYuMTUgb3IgbGF0ZXINCiAgICBvcg0KICAgICAgR05VIGJpbnV0aWxzIDIuMTYuMSBvciBsYXRlcg0KDQpKYXZhIERldmVsb3BtZW50IEtpdCAoIEphdmEgNS4wIG9yIGxhdGVyKQ0KICAgICAgU3VuKiBqZGstMS41LjBfMDYgb3IgbGF0ZXIgKGh0dHA6Ly9qYXZhLnN1bi5jb20pDQogICAgb3INCiAgICAgIEJlYSBTeXN0ZW1zKiBqcm9ja2l0LTI1LjIuMC1qZGsxLjUuMF8wMyBvciBsYXRlciAoaHR0cDovL3d3dy5iZWEuY29tKQ0KDQpKYXZhIFRvb2xzDQogICAgQXBhY2hlLUFOVCwgdmVyc2lvbiAxLjYuNSBvciBsYXRlciAoaHR0cDovL2FudC5hcGFjaGUub3JnKQ0KICAgIEFudC1jb250cmliLCB2ZXJzaW9uIDEuMGIyIG9yIGxhdGVyDQogICAgICAoaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9hbnQtY29udHJpYi9hbnQtY29udHJpYi0xLjBiMi1iaW4uemlwP2Rvd25sb2FkKQ0KICAgIFNheG9uOCwgdmVyc2lvbiA4LjEuMQ0KICAgICAgKGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvc2F4b24vc2F4b25iOC0xLTEuemlwP2Rvd25sb2FkKQ0KICAgIFhNTEJlYW5zLCB2ZXJzaW9uIDIuMS4wIChodHRwOi8veG1sYmVhbnMuYXBhY2hlLm9yZykNCiAgICAgIERPIE5PVCBkb3dubG9hZCB0aGUgbGF0ZXN0IFhNTEJlYW5zLCB2ZXJzaW9uIDIuMi4wLiBJdCBpcyBub3QgY29tcGF0aWJsZSANCiAgICAgIHdpdGggU2F4b244LCB2ZXJzaW9uIDguMS4xLg0KDQpPdGhlciBUb29scw0KICAgIFRvcnRvaXNlU1ZOIHZlcnNpb24gMS4zLjMuIChodHRwOi8vdG9ydG9pc2Vzdm4udGlncmlzLm9yZy8pDQoNCk9wdGlvbmFsIFRvb2xzDQotLS0tLS0tLS0tLS0tLQ0KQ29tcGlsZXIgVG9vbCBDaGFpbnM6DQogICAgSW50ZWwoUikgQysrIENvbXBpbGVyIGZvciBXaW5kb3dzKiwgdmVyLiA5LjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuaW50ZWwuY29tKQ0KICAgIEludGVsKFIpIEMgQ29tcGlsZXIgZm9yIEVGSSBCeXRlIENvZGUsIHZlci4gMS4yIG9yIGxhdGVyIA0KICAgICAgKGh0dHA6Ly93d3cuaW50ZWwuY29tL2NkL3NvZnR3YXJlL3Byb2R1Y3RzL2FzbW8tbmEvZW5nL2NvbXBpbGVycy9lZmliYy9pbmRleC5odG0pDQogICAgTWljcm9zb2Z0IERyaXZlciBEZXZlbG9wbWVudCBLaXQsIHZlcnNpb24gMzc5MC4xODMwIG9yIGxhdGVyDQogICAgICAoaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3doZGMvZGV2dG9vbHMvZGRrL29yZGVyZGRrY2QubXNweCkNCiAgICBNaWNyb3NvZnQgQUNQSSBTb3VyY2UgTGFuZ3VhZ2UgQXNzZW1ibGVyLCBWZXJzaW9uIDEuMC4xM05UIG9yIGxhdGVyDQogICAgSW50ZWwgQUNQSSBDb21wb25lbnQgQXJjaGl0ZWN0dXJlLCB2ZXJzaW9uIDIwMDYwMTEzDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpOb3RlcyBvbiBSZXF1aXJlZCBUb29scyAoU291cmNlIENvbnRyb2wgU3lzdGVtKQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBFREsgSUkgaXMgYmVpbmcgbWFuYWdlZCBieSB0aGUgU3VidmVyc2lvbiBTb3VyY2UgQ29udHJvbCBvbiBUaWFub2NvcmUub3JnLg0KU3VidmVyc2lvbiBwcm92aWRlcyBzcGVlZCwgc2VjdXJpdHksIGFuZCBhZGRpdGlvbmFsIGZlYXR1cmVzLiBUaGUNCnJlY29tbWVuZGVkIGNsaWVudCBpcyBUb3J0b2lzZVNWTiB2ZXJzaW9uIDEuMy4zLiANCiAoQXZhaWxhYmxlIGF0IGh0dHA6Ly90b3J0b2lzZXN2bi50aWdyaXMub3JnLykNCg0KVGhlIGNoZWNrb3V0IHByb2NlZHVyZXMgb24gdGhlIFRpYW5vY29yZS5vcmcgV2ViIHNpdGUgaW5jbHVkZQ0KaW5zdHJ1Y3Rpb25zIGZvciB0aGUgdXNlIG9mIFN1YnZlcnNpb24gU291cmNlIENvbnRyb2wuDQoNClRoZSBVUkwgb2YgdGhlIEVESyBJSSByZXBvc2l0b3J5IGlzOg0KICBodHRwczovL2VkazIudGlhbm9jb3JlLm9yZy9zdm4vZWRrMi90cnVuay9lZGsyDQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5vdGVzIE9uIFJlcXVpcmVkIFRvb2xzIChXaXRoIGV4YW1wbGVzIGZvciBXaW5kb3dzLCBPUyBYLCBhbmQgTGludXgqKSANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpTb2Z0d2FyZSBJbnN0YWxsYXRpb24gT3JkZXI6DQogIEFmdGVyIGluc3RhbGxpbmcgdGhlIGNvbXBpbGVyIHRvb2xzIGFuZCB5b3VyIFN1YnZlcnNpb24gY2xpZW50LCBpbnN0YWxsIHRoZSANCiAgZm9sbG93aW5nIHJlcXVpcmVkIHRvb2xzIGluIHRoaXMgb3JkZXI6IA0KICAgIDEuIEphdmEgSkRLDQogICAgMi4gQXBhY2hlLUFudA0KICAgIDMuIGFudC1jb250cmliDQogICAgNC4geG1sYmVhbnMNCiAgICA1LiBzYXhvbjgNCg0KSmF2YSBEZXZlbG9wbWVudCBLaXQ6DQogDQogICBUaGUgSmF2YSBFbnZpcm9ubWVudCBWYXJpYWJsZSBtdXN0IGJlIHNldCBiZWZvcmUgYXR0ZW1wdGluZyB0byBidWlsZC4NCiAgICAgICBGb3IgU3VuIEpESyAoc2VlIG5vdGUgYmVsb3eGKToNCiAgICAgICAgICAgICAgc2V0IEpBVkFfSE9NRT1jOlxKYXZhXGpkazEuNS4wXzA2ICAoV2luZG93cyBleGFtcGxlKQ0KICAgICAgICAgICAgICBleHBvcnQgSkFWQV9IT01FPS9MaWJyYXJ5L0phdmEvSG9tZS8gKE9TIFggZXhhbXBsZSkNCiAgICAgICAgICAgICAgZXhwb3J0IEpBVkFfSE9NRT0vdXNyL2xpYi9qMnNkazEuNS1zdW4vIChMaW51eCBleGFtcGxlKQ0KICAgICAgIEZvciBCZWEgU3lzdGVtczoNCiAgICAgICAgICAgICAgc2V0IEpBVkFfSE9NRT1jOlxKYXZhXGpyb2NraXQtUjI2LjAuMC1qZGsxLjUuMF8wNA0KIA0KICCGIFdoZW4gdXNpbmcgdGhlIFN1biBKREs1LjA6DQogICAgRHVyaW5nIGluc3RhbGxhdGlvbiwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBhcyBDOlxKYXZhDQogICAgaW5zdGVhZCBvZiBDOlxQcm9ncmFtIEZpbGVzXChvciBzb21lIG90aGVyIGRyaXZlIGxldHRlci4pICBXaGlsZSBpbnN0YWxsaW5nDQogICAgdG8gdGhpcyBub24tc3RhbmRhcmQgbG9jYXRpb24gaXMgbm90IHJlcXVpcmVkLCBpbiBwcmFjdGljZSwgaXQgc2VlbXMgdG8gd29yayANCiAgICBtb3JlIHJlbGlhYmx5LiANCiAgICBGb3IgdGhlIEpESywgdGhlIGluc3RhbGwgcGF0aCBpcyBDOlxKYXZhXGpkazEuNS4wXzA2DQogICAgRm9yIHRoZSBKUkUsIHRoZSBpbnN0YWxsIHBhdGggaXMgQzpcSmF2YVxqcmUxLjUuMF8wNg0KICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3BlY2lmeSBDOlxzdW5qYXZhamRrIGFuZCBDOlxzdW5qYXZhanJlLg0KDQogICAgTk9URTogWW91IGNhbm5vdCBjb21iaW5lIHRoZSBsb2NhdGlvbiBmb3IgdGhlIEpESyBhbmQgdGhlIEpSRSwgYmVjYXVzZSB0aGUgDQogICAgSlJFIGluc3RhbGwgcmVtb3ZlcyBtb3N0IG9mIHRoZSBiaW5hcmllcyBhbmQgbGlicmFyaWVzIGluc3RhbGxlZCBieSB0aGUgSkRLDQogICAgaW5zdGFsbC4NCg0KSmF2YSBUb29sczoNCiAgICBUaGUgQXBhY2hlLUFOVCByZXF1aXJlcyB0aGUgQU5UX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYmUgc2V0IGJlZm9yZQ0KICAgIGF0dGVtcHRpbmcgdG8gYnVpbGQ6DQogICAgICAgICBzZXQgQU5UX0hPTUU9YzpcPGZ1bGwgcGF0aCB0byB3aGVyZSBhbnQgd2FzIGluc3RhbGxlZD4NCiAgICAgICAgICBleHBvcnQgQU5UX0hPTUU9fi9FeHRlcm5hbFRvb2xzL2FwYWNoZS1hbnQgKE9TIFggYW5kIExpbnV4IGV4YW1wbGUpDQoNCiAgICBUaGUgYW50LWNvbnRyaWIuamFyIGZpbGUgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB0aGUgJUFOVF9IT01FJVxsaWIgDQogICAgZGlyZWN0b3J5Lg0KDQogICAgWE1MQmVhbnMsIHJlcXVpcmVzIHRoZSBYTUxCRUFOU19IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGJlIHNldA0KICAgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJ1aWxkOg0KICAgICAgICAgc2V0IFhNTEJFQU5TX0hPTUU9QzpcPGZ1bGwgcGF0aCB0byB3aGVyZSB4bWxiZWFucyB3YXMgaW5zdGFsbGVkPg0KICAgICAgICAgIGV4cG9ydCBYTUxCRUFOU19IT01FPX4vRXh0ZXJuYWxUb29scy94bWxiZWFucyAoT1MgWCBhbmQgTGludXggZXhhbXBsZSkNCg0KICAgIENvcHkgdGhlIHNheG9uOC5qYXIgZmlsZSB0byB0aGUgJVhNTEJFQU5TX0hPTUUlXGxpYiBkaXJlY3RvcnkuDQoNCiAgIFRoZSBBbnQgYW5kIFhNTEJlYW4gdG9vbHMgbXVzdCBiZSBpbiB0aGUgcGF0aC4NCiAgICAgTVMgc3lzdGVtIGV4YW1wbGU6DQogICAgICAgIHNldCBQQVRIPSVQQVRIJTslQU5UX0hPTUUlXGJpbjslWE1MQkVBTlNfSE9NRSVcYmluDQogICAgIExpbnV4L09TIFggYmFzaCBzaGVsbCBleGFtcGxlOg0KICAgICAgICBleHBvcnQgUEFUSD0kUEFUSDoke0FOVF9IT01FfS9iaW46JHtYTUxCRUFOU19IT01FfS9iaW4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiBBcGFjaGUtQU5UDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIEFwYWNoZS1BTlQgcHJvZ3JhbSBpcyBhIGJ1aWxkIHRvb2wgdGhhdCB1c2VzIFhNTC1iYXNlZCBwcm9qZWN0IGZpbGVzLg0KU2ltaWxhciB0byBNYWtlZmlsZXMsIHRoZXNlIHByb2plY3QgZmlsZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgdGFyZ2V0cy4gIE1vc3QNCmJ1aWxkLnhtbCBmaWxlcyBpbiBFREsgSUkgYXJlIGF1dG8tZ2VuZXJhdGVkOyBhbnkgZWRpdHMgcGVyZm9ybWVkIG9uIHRoZQ0KYnVpbGQueG1sIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgYnVpbGQuDQoNClByZS1kZWZpbmVkIHRhcmdldHMgaW4gdGhlIGJ1aWxkLnhtbCBmaWxlIGluY2x1ZGU6DQogICAgYWxsICAgICAgLSBUaGlzIHRhcmdldCBidWlsZHMgYmluYXJpZXMgZm9yIGRlZmluZWQgYXJjaGl0ZWN0dXJlcy4NCiAgICBjbGVhbiAgICAtIFRoaXMgdGFyZ2V0IHJlbW92ZXMgb2JqZWN0IGZpbGVzIGdlbmVyYXRlZCBieSBjb21tYW5kcy4NCiAgICBjbGVhbmFsbCAtIFRoaXMgdGFyZ2V0IHJlbW92ZXMgYWxsIGdlbmVyYXRlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiB0aGUgR0NDIFRvb2wgQ2hhaW4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkVESyBJSSB3aWxsIG5vdCBjb21waWxlIHdpdGggYSBzdGFuZGFyZCBMaW51eCBnY2MgdG9vbCBjaGFpbi4gV2hpbGUgTGludXgNCmRpc3RyaWJ1dGlvbnMgYXJlIHVzdWFsbHkgYmFzZWQgb24gRUxGLCBFREsgSUkgcmVxdWlyZXMgYSB2ZXJzaW9uIG9mIGdjYyANCnRoYXQgaXMgY29uZmlndXJlZCB0byBwcm9kdWNlIFBFLUNPRkYgaW1hZ2VzLiBZb3Ugd2lsbCBmaW5kIGEgc2NyaXB0IGluIA0KZWRrMi9Ub29scy9nY2MgdGhhdCB3aWxsIGRvd25sb2FkLCBjb25maWd1cmUsIGNvbXBpbGUsIGFuZCBpbnN0YWxsIGEgZ2NjIA0KNC5YIGNyb3NzLWNvbXBpbGUgdG9vbCBjaGFpbiBmb3IgRURLIElJIGRldmVsb3BtZW50LiBUaGlzIGN1c3RvbSB0b29sIGNoYWluIA0Kc3VwcG9ydHMgdGhlIElBLTMyIGFyY2hpdGVjdHVyZS4gSXQgY2FuIGJlIGJ1aWx0IGFuZCBydW4gb24gQ3lnd2luLCBMaW51eCwgYW5kIA0KbWFueSBvdGhlciBQT1NJWC1jb21wbGlhbnQgaG9zdCBvcGVyYXRpbmcgZW52aXJvbm1lbnRzLiBUbyBjb21waWxlIHRoZSBjdXN0b20gDQpnY2MgdG9vbCBjaGFpbiwgeW91IG5lZWQgdGhlIGZvbGxvd2luZyB0b29scyBvbiB5b3VyIGhvc3QgY29tcHV0ZXI6IGJhc2gsIGdjYywgDQpnbWFrZSwgY3VybCAob3Igd2dldCkuDQoNCk9ubHkgdGhlIE1kZVBrZyBhbmQgRWRrTW9kdWxlUGtnIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGdjYyBidWlsZHMuIE90aGVyDQpidWlsZHMsIHN1Y2ggYXMgdGhlIEVka050MzJQa2csIHdpbGwgbm90IGNvbXBpbGUgd2l0aCBnY2MuIEJ5IGRlZmF1bHQsIHRoZSBlZGsyDQp3aWxsIHRyeSB0byBidWlsZCB0aGUgTlQzMi5mcGQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjLiBTbywgeW91IG5lZWQgdG8NCmNoYW5nZSB0aGUgVG9vbHMvQ29uZi90YXJnZXQudHh0Lg0KDQpUaGUgcGxhdGZvcm0gdG8gYmUgYnVpbHQgaXMgaWRlbnRpZmllZCBieSB0aGUgVG9vbHMvQ29uZi90YXJnZXQudHh0IGZpbGU6DQoNCiMNCiMgIFBST1BFUlRZICAgICAgICAgICAgICBUeXBlICAgICAgIFVzZSAgICAgICAgIERlc2NyaXB0aW9uDQojICAtLS0tLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0gICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyAgQUNUSVZFX1BMQVRGT1JNICAgICAgIEZpbGVuYW1lICAgUmVjb21tZW5kZWQgU3BlY2lmeSB0aGUgV09SS1NQQUNFIHJlbGF0aXZlIFBhdGggYW5kIEZpbGVuYW1lIA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBsYXRmb3JtIEZQRCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnVpbGQNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGluZSBpcyByZXF1aXJlZCBpZiBhbmQgb25seSBpZiB0aGUgY3VycmVudCB3b3JraW5nDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBvbmUgb3IgbW9yZSBGUEQgZmlsZXMuDQoNCkFDVElWRV9QTEFURk9STSAgICAgICA9DQogDQpZb3UgY2FuIGxlYXZlIGl0IGJsYWNrLCBhcyBhYm92ZSwgb3Igc2V0IGl0IHRvIGFueSAuZnBkIGZpbGUgaW4gdGhlIHdvcmtzcGFjZS4NCklmIHlvdSBsZWF2ZSBpdCBibGFuaywgdGhlbiB5b3UganVzdCBjZCB0byB0aGUgZGlyIHRoYXQgY29udGFpbnMgdGhlIC5mcGQgdGhhdA0KeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgKE1kZVBrZy8gb3IgRWRrTW9kdWxlUGtnLykgYW5kIHRoZW4gdHlwZSBidWlsZC4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQSBXb3JkIG9uIGNvbXBpbGluZyBvbiBMaW51eA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpJbiBvcmRlciB0byBjb21waWxlIG9uIExpbnV4LCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgdGhlIGUyZnNwcm9ncy1kZXYgcGFja2FnZQ0KaW5zdGFsbGVkLiAgQ2hlY2sgeW91ciBkaXN0cmlidXRpb24gZm9yIHRoZSBycG0sIGRlYiBvciBvdGhlciBwYWNrYWdlIGZvcm1hdC4NClRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgdXVpZCBsaWJyYXJ5IGFuZCBoZWFkZXIgdGhhdCBhcmUgdXNlZCBieSBzb21lIG9mIHRoZQ0KaG9zdCB0b29scy4NCg0KSWYgeW91IGFyZSBydW5uaW5nIG9uIHg4Nl82NCBMaW51eCwgdGhlbiB5b3Ugc2hvdWxkIGluc3RhbGwgYSA2NCBiaXQgdmVyc2lvbiBvZg0KdGhlIEphdmEgSkRLLiBUaGUgdmVyc2lvbiB0aGF0IHdhcyB1c2VkIHdhcyBqZGstMV81XzBfMDctbGludXgtYW1kNjQtcnBtLmJpbi4NCkl0IG1heSBiZSBkb3dubG9hZGVkIGZyb20gc3VuLmNvbS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiBjb21waWxpbmcgdW5kZXIgQ3lnd2luIHdpdGggZ2NjDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpDeWd3aW4gaXMgYSBQT1NJWCBzdHlsZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQgZm9yIFdpbmRvd3MuIEl0IGlzIHBvc3NpYmxlIHRvDQpjb21waWxlIHRoZSBFREsgMiB1c2luZyBnY2MgYW5kIGN5Z3dpbi4gQ29tcGlsaW5nIHVuZGVyIGN5Z3dpbiBpcyBzbG93LCBiZWNhdXNlIA0KdGhlIHVuZGVybHlpbmcgZmlsZSBhY2Nlc3NlcyBhcmUgc2xvdyBpbiBjeWd3aW4uIEZvciB0aGlzIHJlYXNvbiwgd2UgZG8gbm90IA0KZW5jb3VyYWdlIHRoZSB1c2Ugb2YgY3lnd2luLiBBIHRydWUgdW5peCBzeXN0ZW0gd2lsbCBiZSBhIHN1cGVyaW9yIGNob2ljZSBmb3IgDQp0aG9zZSB3aXNoaW5nIHRvIGNvbXBpbGUgd2l0aCBnY2MuDQoNCk1ha2Ugc3VyZSB0aGF0IHlvdSBzZWxlY3QgdGhlIGUyZnNwcm9ncyBkZXZlbG9wbWVudCBwYWNrYWdlIHdoZW4geW91IGluc3RhbGwNCmN5Z3dpbi4gSXQgaXMgbmVjZXNzYXJ5IGZvciB0aGUgR2VuRnZJbWFnZSB0b29sLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBIFdvcmQgb24gZ2NjIGZvciBQcm9jZXNzb3IgQXJjaGl0ZWN0dXJlcw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpDdXJyZW50bHkgZ2NjIHN1cHBvcnQgaXMgbGltaXRlZCB0byBJQS0zMiBidWlsZHMsIGdlbmVyYXRpbmcgSUEtMzIgUEUzMiBpbWFnZXMuIA0KDQpUaGUgWDY0IGJpdCAoSW50ZWwgNjQsIGV0Yy4pIHN1cHBvcnQgdW5kZXIgdGhlIGdjYyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBFRklBUEkgDQpjYWxsaW5nIGNvbnZlbnRpb24gKGFzIGRlZmluZWQgaW4gdGhlIFVFRkkgMi4wIHNwZWNpZmljYXRpb24gQ2hhcHRlciAyKSwgc28gaXQgaXMgbm90IA0KcG9zc2libGUgdG8gYnVpbGQgYSB3b3JraW5nIEVGSSBpbWFnZSBmb3IgYW4gWDY0IGVudmlyb25tZW50LiAgU2luY2UgdGhlIHg2NCBnY2MgZG9lcyANCm5vdCBzdXBwb3J0IHRoZSBFRklBUEkgY2FsbGluZyBjb252ZW50aW9uIHRoZSB4NjQgdG9vbHMgZG8gbm90IHN1cHBvcnQgZ2VuZXJhdGluZyBhIA0KUEUzMisgaW1hZ2UuICBUaGUgRUZJQVBJIGNhbGxpbmcgY29udmVudGlvbiBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIE1pY3Jvc29mdCB4NjQgDQpjYWxsaW5nIGNvbnZlbnRpb24uDQoNCk9uIEl0YW5pdW2uIFByb2Nlc3NvcnMgdGhlIGdjYyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyYXRpbmcgYSBQRTMyKyBpbWFnZS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5vdGVzIG9uIERvY3VtZW50YXRpb24NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGUgZG9jdW1lbnRzIGFyZSBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBTdWJ2ZXJzaW9uIFNvdXJjZSBDb250cm9sIG9uDQpUaWFub2NvcmUub3JnLiAgVGhlIGRvY3VtZW50IHJlcG9zaXRvcnkgaXMgImRvY3MiIGFuZCBtdXN0IGJlIGNoZWNrZWQgb3V0DQpzZXBhcmF0ZWx5IGZyb20gdGhlIEVESyBJSSBzb3VyY2UgdHJlZS4gUmVmZXIgdG8gdGhlIGNoZWNrb3V0IHByb2NlZHVyZXMgb24NCnRoZSBUaWFub2NvcmUub3JnIFdlYiBzaXRlIGZvciBFREsgSUkuDQoNClRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IHJlcG9zaXRvcnkgaXM6DQogIGh0dHBzOi8vZWRrMi50aWFub2NvcmUub3JnL3N2bi9lZGsyL3RydW5rL2RvY3MNCg0KIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUXVpY2sgU3RhcnQNCi0tLS0tLS0tLS0tDQooYXNzdW1lcyBNaWNyb3NvZnQgVG9vbHMgYW5kIE9TIGVudmlyb25tZW50LCBmb3IgR0NDIFRvb2xzIG9yIExpbnV4LCBzZWUgDQoiRGV0YWlsZWQgU3RhcnRpbmcgSW5zdHJ1Y3Rpb25zIiBiZWxvdykNCg0KRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cHM6Ly9lZGsyLnRpYW5vY29yZS5vcmcvc2VydmxldHMvUHJvamVjdFNvdXJjZSB0bw0KY2hlY2sgb3V0IHRoZSBlbnRpcmUgRURLIElJIHNvdXJjZSB0cmVlLg0KDQpJbiBhIGNvbW1hbmQgd2luZG93LCBjaGFuZ2UgdG8gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIEVESyBJSSBzb3VyY2UuDQoNClRvIHRlc3QgeW91ciB0b29sIGNoYWluIHNldHVwIGFuZCB0byBidWlsZCB0aGUgc3VwcGxpZWQgdG9vbHMsIGV4ZWN1dGU6DQogICAgYzpcTXlXb3JrXGVkazJcPiBlZGtzZXR1cCBGb3JjZVJlYnVpbGQNCg0KKFRoZSBlZGtzZXR1cCBzY3JpcHQgaXMgcmVmZXJyZWQgdG8gYXMgdGhlIHNldHVwIGNvbW1hbmQgdGhyb3VnaG91dCB0aGUgDQpyZXN0IG9mIHRoaXMgZG9jdW1lbnQuKQ0KICAgICAgTk9URTogWW91IHNob3VsZCBydW4gdGhlIHNldHVwIGNvbW1hbmQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IHNlc3Npb24uDQogICAgICAgICAgICBUaGlzIGNvbmZpZ3VyZXMgdGhlIGVudmlyb25tZW50IHRvIGluY2x1ZGUgdGhlIFRpYW5vVG9vbHMgYW5kIHRoZQ0KICAgICAgICAgICAgSmF2YSBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4NCg0KWW91IHdpbGwgbmVlZCB0byBzZXQgdGhlIFdPUktTUEFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgcnVuIHRoZSBlZGtzZXR1cA0Kc2NyaXB0ICh3aXRob3V0IGFueSBhcmd1bWVudHMpLCBhbnkgdGltZSB5b3Ugd2FudCB0byBidWlsZC4NCg0KICBTZXQgdGhlIFdPUktTUEFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZS5nLjoNCg0KICAgIGM6XD4gc2V0IFdPUktTUEFDRT1DOlxNeVdvcmtcZWRrMg0KDQpZb3UgbWF5IG5lZWQgdG8gZWRpdCB0aGUgdGV4dCBmaWxlcyBUb29scy9Db25mL3RhcmdldC50eHQgYW5kDQpUb29scy9Db25mL3Rvb2xzX2RlZi50eHQgKGNyZWF0ZWQgYnkgZWRrc2V0dXApIHVzaW5nIHlvdXIgZmF2b3JpdGUgDQp0ZXh0IGVkaXRvciB0byBlbnN1cmUgdGhhdCB0aGUgcGF0aHMgdG8gdGhlIHRvb2xzIHlvdSB3YW50IHRvIHVzZSANCnRvIGJ1aWxkIEVESyBJSSBiaW5hcmllcyBhcmUgY29ycmVjdC4gIFRoZXNlIGZpbGVzIGNvbnRhaW4gdGhlIGRlZmF1bHQgDQpwYXRocyAoYXMgcGVyIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBvZiB0aGUgdG9vbHMpLCBzbyBhIGN1c3RvbWl6ZWQgDQppbnN0YWxsIG1heSByZXF1aXJlIHRoaXMgbWFudWFsIHByb2Nlc3MuDQoNCk9uY2UgdGhpcyBpcyBjb21wbGV0ZWQsIHlvdSBhcmUgcmVhZHkgdG8gdGVzdCB0aGUgYnVpbGQsIGJ5IGV4ZWN1dGluZzoNCiAgICBjOlxNeVdvcmtcZWRrMlw+IGJ1aWxkDQoNClRoaXMgY29tbWFuZCBidWlsZHMgdGhlIGFjdGl2ZSBwbGF0Zm9ybSBzcGVjaWZpZWQgaW4gdGV4dCBmaWxlIHRhcmdldC50eHQuIElmIA0KdGhlIGFjdGl2ZSBwbGF0Zm9ybSBpcyBub3Qgc3BlY2lmaWVkIHRhcmdldC50eHQsIHlvdSBtdXN0IGV4ZWN1dGUgdGhlIGJ1aWxkIA0KY29tbWFuZCBmcm9tIHRoZSBzdWItZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgRlBEIGZpbGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiANCmFib3V0IHRoZSBhY3RpdmUgcGxhdGZvcm0gcG9saWN5LCBzZWUgdGhlIJNFREsgSUkgQnVpbGQgYW5kIFBhY2thZ2luZyANCkFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uLpQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRGV0YWlsZWQgU3RhcnRpbmcgSW5zdHJ1Y3Rpb25zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cHM6Ly9lZGsyLnRpYW5vY29yZS5vcmcvc2VydmxldHMvUHJvamVjdFNvdXJjZSB0bw0KY2hlY2sgb3V0IHRoZSBlbnRpcmUgRURLIElJIHNvdXJjZSB0cmVlLg0KDQpJbiBhIGNvbW1hbmQgd2luZG93LCBjaGFuZ2UgdG8gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIEVESyBJSSBzb3VyY2UuDQoNCklmIHRoZSBhY3RpdmUgY29tcGlsZXIgdG9vbCBjaGFpbiBpcyBHQ0MsIHlvdSBtdXN0IHNldCB0aGUNCmVudmlyb25tZW50IHZhcmlhYmxlLCBUT09MX0NIQUlOIHRvICJnY2MiIGJlZm9yZSBydW5uaW5nIHRoZQ0KZWRrc2V0dXAgc2NyaXB0LiAgRXhhbXBsZTogZXhwb3J0IFRPT0xfQ0hBSU49Z2NjDQoNClRvIHRlc3QgeW91ciB0b29sIGNoYWluIHNldHVwIGFuZCB0byBidWlsZCB0aGUgc3VwcGxpZWQgdG9vbHMsIGV4ZWN1dGU6DQogICAgYzpcTXlXb3JrXGVkazJcPiBlZGtzZXR1cCBGb3JjZVJlYnVpbGQNCg0KT24gTGludXggc3lzdGVtcywgeW91IG11c3Qgc291cmNlIHRoZSBlZGtzZXR1cC5zaCBmaWxlIHRvIGxvYWQgdGhlIGNvcnJlY3QNCnNldHRpbmdzIGludG8geW91ciBzaGVsbC4NCg0KICAgIC4gZWRrc2V0dXAuc2ggIyBOb3RlIHRoZSBkb3QuDQoNCklmIHlvdSBoYXZlIHJlY2VudGx5IHVwZGF0ZWQgeW91ciBjb2RlIGZyb20gc3VidmVyc2lvbiwgdGhlIHRvb2xzIHdpbGwgbmVlZCB0bw0KYmUgcmVidWlsdCBpZiB0aGVyZSB3ZXJlIGFueSBjb2RlIGNoYW5nZXMgbWFkZSB0byB0aGVtLiBZb3UgY2FuIHJlcXVlc3QgdGhhdA0KdGhlIHRvb2xzIGdldCByZWJ1aWx0IGJ5IHR5cGluZzoNCg0KICAgIC4gZWRrc2V0dXAuc2ggUmVidWlsZCAjIFVuaXgtbGlrZSBzeXN0ZW1zDQogICAgZWRrc2V0dXAuYmF0IFJlYnVpbGQgICMgV2luZG93cw0KDQpUaGUgZWRrc2V0dXAgc2NyaXB0IGlzIHJlZmVycmVkIHRvIGFzIHRoZSBzZXR1cCBjb21tYW5kIHRocm91Z2hvdXQgdGhlIA0KcmVzdCBvZiB0aGlzIGRvY3VtZW50Lg0KICAgICAgTk9URTogWW91IHNob3VsZCBydW4gdGhlIHNldHVwIGNvbW1hbmQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IHNlc3Npb24uDQogICAgICAgICAgICBUaGlzIGNvbmZpZ3VyZXMgdGhlIGVudmlyb25tZW50IHRvIGluY2x1ZGUgdGhlIFRpYW5vVG9vbHMgYW5kIHRoZQ0KICAgICAgICAgICAgSmF2YSBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4NCg0KQW55IGNoYW5nZXMgdG8gdGhlIHRvb2wgc291cmNlIGNvZGUgb3IgWE1MIFNjaGVtYSBkb2N1bWVudHMgcmVxdWlyZSB0aGF0DQp5b3UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nOg0KICAgYzpcTXlXb3JrXGVkazJcPiBlZGtzZXR1cCBGb3JjZVJlYnVpbGQNCg0KWW91IG11c3Qgc2V0IHRoZSBXT1JLU1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIHJ1biB0aGUgZWRrc2V0dXANCnNjcmlwdCAod2l0aG91dCBhbnkgYXJndW1lbnRzKSwgYW55IHRpbWUgeW91IHdhbnQgdG8gYnVpbGQuDQoNCiAgU2V0IHRoZSBXT1JLU1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy46DQoNCiAgICBjOlw+IHNldCBXT1JLU1BBQ0U9QzpcTXlXb3JrXGVkazINCg0KWW91IG1heSBuZWVkIHRvIGVkaXQgdGhlIHRleHQgZmlsZXMgVG9vbHMvQ29uZi90YXJnZXQudHh0IGFuZA0KVG9vbHMvQ29uZi90b29sc19kZWYudHh0IChjcmVhdGVkIGJ5IGVka3NldHVwKSB1c2luZyB5b3VyIGZhdm9yaXRlIA0KdGV4dCBlZGl0b3IgdG8gZW5zdXJlIHRoYXQgdGhlIHBhdGhzIHRvIHRoZSB0b29scyB5b3Ugd2FudCB0byB1c2UgDQp0byBidWlsZCBFREsgSUkgYmluYXJpZXMgYXJlIGNvcnJlY3QuICBUaGVzZSBmaWxlcyBjb250YWluIHRoZSBkZWZhdWx0IA0KcGF0aHMgKGFzIHBlciB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gb2YgdGhlIHRvb2xzKSwgc28gYSBjdXN0b21pemVkIA0KdG9vbCBpbnN0YWxsYXRpb24gbWF5IHJlcXVpcmUgdGhpcyBtYW51YWwgcHJvY2Vzcy4NCg0KT25jZSB0aGlzIGlzIGNvbXBsZXRlZCwgeW91IGFyZSByZWFkeSB0byB0ZXN0IHRoZSBidWlsZCwgYnkgZXhlY3V0aW5nOg0KICAgIGM6XE15V29ya1xlZGsyXD4gYnVpbGQNCg0KVGhpcyBjb21tYW5kIGJ1aWxkcyB0aGUgYWN0aXZlIHBsYXRmb3JtIHNwZWNpZmllZCBpbiB0ZXh0IGZpbGUgdGFyZ2V0LnR4dC4gSWYgDQp0aGUgYWN0aXZlIHBsYXRmb3JtIGlzIG5vdCBzcGVjaWZpZWQsIGdvIHRvIHRoZSBzdWItZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgRlBEIA0KZmlsZXMgYW5kIGV4ZWN1dGUgdGhlIGJ1aWxkIGNvbW1hbmQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3RpdmUgDQpwbGF0Zm9ybSBwb2xpY3ksIHNlZSB0aGUgk0VESyBJSSBCdWlsZCBhbmQgUGFja2FnaW5nIEFyY2hpdGVjdHVyZSANClNwZWNpZmljYXRpb24ulA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSW5kaXZpZHVhbCBQbGF0Zm9ybSBCdWlsZHMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBZnRlciBydW5uaW5nIHRoZSBzZXR1cCBjb21tYW5kLCB5b3UgY2FuIGJ1aWxkIGluZGl2aWR1YWwgcGxhdGZvcm1zLg0KSW4gdGhlIGNvbW1hbmQgd2luZG93Og0KICBTZXQgdGhlIGFjdGl2ZSBwbGF0Zm9ybSBpbiB0YXJnZXQudHh0LCBhbmQgZXhlY3V0ZSB0aGlzIGNvbW1hbmQ6DQogICAgYzpcPGRpcmVjdG9yeT5cPiBidWlsZA0Kb3INCiAgY2QgdG8gdGhlIHBsYXRmb3JtIChGUEQgZmlsZSkgdGhhdCB5b3Ugd2FudCB0byBidWlsZCBhbmQgZXhlY3V0ZSB0aGlzIGNvbW1hbmQ6DQogICAgYzpcTXlXb3JrXGVkazJcRWRrTnQzMlBrZ1w+IGJ1aWxkDQoNCiAgTm90ZSB0aGF0IHRoZSBhY3RpdmUgcGxhdGZvcm0gc3BlY2lmaWVkIGluIHRhcmdldC50eHQgb3ZlcnJpZGVzIHRoZSBwbGF0Zm9ybSANCiAgc3BlY2lmaWVkIGJ5IGFueSBGUEQgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIEZvciBtb3JlICAgaW5mb3JtYXRpb24gDQogIGFib3V0IGFjdGl2ZSBwbGF0Zm9ybSBwb2xpY3ksIHNlZSB0aGUgk0VESyBJSSBCdWlsZCBhbmQgUGFja2FnaW5nIEFyY2hpdGVjdHVyZQ0KICBTcGVjaWZpY2F0aW9uLpQgDQoNClRvIHJ1biB0aGUgTnQzMiBlbXVsYXRpb24gcGxhdGZvcm0gdW5kZXIgTWljcm9zb2Z0IFdpbmRvd3MsIGdvIHRvIA0KPGZ1bGwgYnVpbGQgcGF0aD5cREVCVUdcTVNGVFxJQTMyIGFuZCBleGVjdXRlIFNlY01haW4uZXhlDQoNClRvIGV4aXQgdGhlIE50MzIgZW11bGF0aW9uIHBsYXRmb3JtLCB0eXBlIJNyZXNldJQgYXQgdGhlIEVGSSBTaGVsbD4NCmNvbW1hbmQgcHJvbXB0LiAgQWx0ZXJuYXRpdmVseSwgZnJvbSB0aGUgZ3JhcGhpY2FsIGludGVyZmFjZSwgc2VsZWN0IHRoZSBCb290DQpNYWludGVuYW5jZSBNYW5hZ2VyJ3Mgk1Jlc2V0IFN5c3RlbZQgY29tbWFuZC4NCg0KICAgICAgTk9URTogV2hlbiBjcmVhdGluZyBhIG5ldyBwbGF0Zm9ybSwgdGhlIFBsYXRmb3JtIE5hbWUgaXMgcmVzdHJpY3RlZA0KICAgICAgdG8gYSBzaW5nbGUgd29yZCBjb250YWluaW5nIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlLCBkYXNoLCANCiAgICAgIGFuZCBwZXJpb2QuICBUaGUgc3BhY2UgY2hhcmFjdGVyIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIA0KICAgICAgbm90IGFsbG93ZWQuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpOb3RlcyBvbiBTeW1ib2xpYyBEZWJ1Zw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRvIGVuYWJsZSBFRkkgU3ltYm9saWMgRGVidWdnaW5nLCBtYWtlIHN1cmUgdGhlIHRhcmdldCBvdXRwdXQgaXMgc2V0IHRvIERFQlVHDQppbiB0aGUgdGV4dCBmaWxlIFRvb2xzL0NvbmYvdGFyZ2V0LnR4dCBhbmQgdGhlbiBtb2RpZnkgdGhlIEZQRCA8QnVpbGRPcHRpb25zPg0KPE9wdGlvbnM+PE9wdGlvbiBCdWlsZFRhcmdldHM9IkRFQlVHIiBUb29sQ29kZT0iQ0MiPiBhbmQgYXBwZW5kIHRoZSBmb2xsb3dpbmcNCmNvbXBpbGVyIG9wdGlvbnMgdG8gdGhlIHN0cmluZzoNCiIvRCBFRklfR0VORVJBVEVfU1lNX0ZJTEUiLCAiL0QgRUZJX1NZTUJPTElDX0RFQlVHIg0KDQooSWYgdGhlIE9wdGlvbiBsaW5lIGRvZXMgbm90IGNvbnRhaW4gIi9EIEVGSV9ERUJVRyIsIHlvdSBtdXN0IGFkZCB0aGF0DQpvcHRpb24gYXMgd2VsbC4pDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSW5kaXZpZHVhbCBNb2R1bGUgQnVpbGRzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkFmdGVyIHJ1bm5pbmcgdGhlIHNldHVwIGNvbW1hbmQsIHlvdSBjYW4gYnVpbGQgaW5kaXZpZHVhbCBtb2R1bGVzLg0KICBJbiB0aGUgY29tbWFuZCB3aW5kb3csIGNkIHRvIHRoZSBtb2R1bGUgdGhhdCB5b3Ugd2FudCB0byBidWlsZCwgYW5kDQogIGV4ZWN1dGUgdGhlIGJ1aWxkIGNvbW1hbmQ6DQogICAgYzpcTXlXb3JrXGVkazJcTWRlUGtnXExpYnJhcnlcQmFzZUxpYlw+IGJ1aWxkDQoNCiAgWW91IG11c3Qgc2V0IHRoZSBhY3RpdmUgcGxhdGZvcm0gaW4gdGFyZ2V0LnR4dCBmb3IgaW5kaXZpZHVhbCBtb2R1bGUgYnVpbGRzLiANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpHZW5lcmFsIEluZm9ybWF0aW9uOg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgIA0KTWVjaGFuaXNtcw0KLS0tLS0tLS0tLQ0KQSBicmllZiBvdmVydmlldzoNCg0KQSkgVGhlIFN1cmZhY2UgQXJlYSBQYWNrYWdlIERlc2NyaXB0aW9uIChTUEQpIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgDQp0aGUgbW9kdWxlcyB0aGF0IHRoZSBwYWNrYWdlIGNvbnRhaW5zLCBpbmNsdWRpbmcgdGhlIGxvY2F0aW9uIG9mIGFsbCBNU0EgZmlsZXMsIA0KYW5kIHB1YmxpYyBsaWJyYXJ5IG5hbWVzIGFuZCBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJvdmlkZWQgYnkgYSBtb2R1bGUgaW4gdGhlDQpwYWNrYWdlLiAgUGFja2FnZXMgYXJlIGRlZmluZWQgYnkgU1BEIGZpbGVzLiAgKEZvdW5kIGluIHRoZSByb290IG9mIHRoZSBQYWNrYWdlDQpzdWJkaXJlY3RvcnkgKGkuZS4gRWRrTnQzMlBrZykuKSBUaGUgU1BEIGZpbGUgaXMgZnVydGhlciBleHBsYWluZWQgaW4gk0VESyBJSSANCkJ1aWxkIGFuZCBQYWNrYWdpbmcgQXJjaGl0ZWN0dXJlIFNwZWNpZmljYXRpb24ulA0KIA0KQikgTW9kdWxlIFN1cmZhY2UgQXJlYSBEZWZpbml0aW9uIChNU0EpIGZpbGVzLiAgQSBkZXNjcmlwdGlvbiBvZiBhIG1vZHVsZSdzIA0Kc3VyZmFjZSBhcmVhLCB3aXRoIGFsbCBtb2R1bGUgc3BlY2lmaWMgZGVmYXVsdCBmbGFncyBhbmQgZmVhdHVyZXMgc3BlY2lmaWVkLg0KRm9yIGFkZGl0aW9uYWwgZGV0YWlscywgc2VlIHRoZSAiRURLIElJIE1vZHVsZSBTdXJmYWNlIEFyZWEgU3BlY2lmaWNhdGlvbiIgYW5kIA0KdGhlICJFREsgSUkgQnVpbGQgYW5kIFBhY2thZ2luZyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbi4iDQoNCkMpIEZyYW1ld29yayBQbGF0Zm9ybSBEZXNjcmlwdGlvbiAoRlBEKSBmaWxlcy4gIEEgZGVzY3JpcHRpb24gb2YgYSBwbGF0Zm9ybSdzDQpzdXJmYWNlIGFyZSwgaW5jbHVkaW5nIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgYXJlIG5lZWRlZCBieSB0aGUgcGxhdGZvcm0uICBUbw0Kc3VwcG9ydCBpbmRpdmlkdWFsIG1vZHVsZSBidWlsZHMsIGRldmVsb3BlcnMgYXJlIG5vdCByZXF1aXJlZCB0byBwcm92aWRlDQppbmZvcm1hdGlvbiBhYm91dCBzcGVjaWZpYyBmbGFzaCBkZXZpY2VzLCBub3IgZmxhc2ggZGV2aWNlIGxheW91dC4gIA0KU3BlY2lmaWMgc2VjdGlvbnMgaW4gdGhlIEZQRCBmaWxlIGNvbnRyb2wgYXNwZWN0cyBvZiB0aGUgYnVpbGQsIHN1Y2ggDQphcyB0aGUgU3VwcG9ydGVkIEFyY2hpdGVjdHVyZXMgYW5kIEJ1aWxkIFRhcmdldHMsIGFzIHdlbGwgYXMgdGhlIHRvb2wgZmxhZ3MgDQp0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYmluYXJ5IGZpbGVzLiAgQSB2YWxpZCBwbGF0Zm9ybSBmaWxlIGNhbiBzcGVjaWZ5IA0KemVybyBvciBtb3JlIG1vZHVsZXMsIHNvIGluZGl2aWR1YWwgbW9kdWxlcyBjYW4gYmUgY29tcGlsZWQgd2l0aGluIHRoZSBjb250ZXh0DQpvZiBhIHBsYXRmb3JtIChGUEQpIGRlZmluaXRpb24uDQoNCkQpIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgKFBDRCkuICBBIHBsYXRmb3JtIGRhdGFiYXNlIHRoYXQgY29udGFpbnMgYQ0KdmFyaWV0eSBvZiBjdXJyZW50IHBsYXRmb3JtIHNldHRpbmdzIG9yIGRpcmVjdGl2ZXMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYnkgYSANCmRyaXZlciBvciBhcHBsaWNhdGlvbi4gIFRoZSBQQ0QgaXMgZGVmaW5lZCBieSB0aGUgUENEX1Byb3RvY29sIChUaGlzIGlzDQpmdXJ0aGVyIGV4cGxhaW5lZCBpbiB0aGUgIkVESyBJSSBQbGF0Zm9ybSBDb25maWd1cmF0aW9uIERhdGFiYXNlIEluZnJhc3RydWN0dXJlIA0KRGVzY3JpcHRpb24uIg0KDQpFKSBMaWJyYXJ5IENsYXNzLiAgQSBsaWJyYXJ5IGNsYXNzIGlzIGEgbG9naWNhbCBncm91cGluZyBvZiBzaW1pbGFyIGZ1bmN0aW9ucy4NCldoZW4gZGV2ZWxvcGluZyBjb21wb25lbnRzLCB0aGUgbW9kdWxlIHN1cmZhY2UgYXJlYSBkZWNsYXJlcyB0aGUgY2xhc3Mgb2YNCmxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBjb21wb25lbnQuIFRoZSBNU0EgYW5kIFNQRCBmaWxlcyBjYW4gc3BlY2lmeQ0KYSByZWNvbW1lbmRlZCBpbnN0YW5jZSBvZiB0aGUgbGlicmFyeSB0aGF0IGEgcGxhdGZvcm0gaW50ZWdyYXRvciAoUEkpIG1heSANCnNlbGVjdCwgaG93ZXZlciB0aGlzIGlzIG9ubHkgYSByZWNvbW1lbmRhdGlvbi4gIFRoZSBQSSBtYXkgY2hvb3NlIHRvIHNlbGVjdCBhIA0KZGlmZmVyZW50IGxpYnJhcnkgaW5zdGFuY2UgdG8gYmUgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcuIEFsbCANCmxpYnJhcnkgdHlwZSBtb2R1bGVzIG11c3QgaW5jbHVkZSBoZWFkZXIgZmlsZXMgaW4gdGhlaXIgZGlzdHJpYnV0aW9uIHBhY2thZ2UsIA0KYXMgd2VsbCBhcyB0aGVpciBNU0EgZmlsZXMuIENvbXBvbmVudHMsIG9uIHRoZSBvdGhlciBoYW5kLCBuZWVkIHByb3ZpZGUgb25seSBhbiANCk1TQSBmaWxlIGFuZCBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmaWxlcyB3aGVuIGRpc3RyaWJ1dGluZyBwYWNrYWdlcy4gIFRoZSANCkxpYnJhcnkgQ2xhc3NlcyBhcmUgZnVydGhlciBleHBsYWluZWQgaW4gdGhlICJFREsgSUkgQnVpbGQgYW5kIFBhY2thZ2luZyANCkFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uLiINCg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVGhlIGNvbW1vbiBvcGVyYXRpb25zIGJ5IGRldmVsb3BlcnMgb2YgbmV3IG1vZHVsZXMgYXJlOg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjEpIE1hbnVhbGx5IGNyZWF0aW5nIGEgbmV3IG1vZHVsZSBpbiBhIHBhY2thZ2U6DQogIC0gVGhlIG1vZHVsZSBzb3VyY2UgY29kZSBtdXN0IGZpcnN0IGJlIGNyZWF0ZWQgaW4gYW4gYXBwcm9wcmlhdGUgZGlyZWN0b3J5DQogICAgKHVuZGVyIHRoZSBwYWNrYWdlIHRoZSBtb2R1bGUgaXMgdG8gYmUgYSBwYXJ0IG9mLikgIA0KICAtIEFuIE1TQSBmaWxlIG11c3QgYmUgY3JlYXRlZCwgc3BlbGxpbmcgb3V0IGFsbCBhc3BlY3RzIG9mIHRoZSBtb2R1bGUuDQogIC0gVGhlIE1TQSBtdXN0IGJlIGFkZGVkIHRvIHRoZSBTUEQgZm9yIHRoZSBwYWNrYWdlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjIpIEFkZGluZyBhbmQgUmVtb3ZpbmcgbW9kdWxlcyB0byBhbmQgZnJvbSBhIHBhY2thZ2U6DQoNCiAgLSBTZXQgdXAgZW52aXJvbm1lbnQgYXMgQnVpbGQNCiAgLSBBZGRpbmcgYSBtb2R1bGUgdG8gYSBwYWNrYWdlOg0KICAgICAtIEdlbmVyYXRlIHRoZSBNU0EgZmlsZQ0KICAgICAtIEFkZCBhIG5ldyA8RmlsZW5hbWU+IGVsZW1lbnQgdW5kZXIgPE1zYUZpbGVzPiBpbnRvDQogICAgICAgPFBhY2thZ2VEaXI+XDxQYWNrYWdlTmFtZT4uc3BkLCB1c2luZyBhcmVsYXRpdmUgcGF0aCB0byB0aGUgcGFja2FnZQ0KICAgICAtIEFkZCBhIG5ldyA8TW9kdWxlU0E+IGVudHJ5IHVuZGVyIGVhY2ggPEZyYW1ld29ya01vZHVsZXM+IGludG8gdGhlDQogICAgICAgPFBhY2thZ2VEaXI+XDxQYWNrYWdlTmFtZT4uZnBkIGZpbGUgaWYgbmVjZXNzYXJ5LiANCg0KICAgLSBSZW1vdmluZyBhIG1vZHVsZSBmcm9tIGEgcGFja2FnZToNCiAgICAgLSBDb21tZW50IG91dCBvciByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgPEZpbGVuYW1lPiBlbGVtZW50IHVuZGVyIA0KICAgICAgIDxNc2FGaWxlcz4gZnJvbSA8UGFja2FnZURpcj5cPFBhY2thZ2VOYW1lPi5zcGQNCiAgICAgLSBDb21tZW50IG91dCBvciByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgPE1vZHVsZVNBPiBlbnRyeSB1bmRlciBlYWNoDQogICAgICAgPEZyYW1ld29ya01vZHVsZXM+IGZyb20gPFBhY2thZ2VEaXI+XDxQYWNrYWdlTmFtZT4uZnBkIGlmIG5lY2Vzc2FyeS4gDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjMpIE1hbnVhbGx5IGNyZWF0aW5nIGEgcGFja2FnZToNCiAgLSBJZGVudGlmeSB0aGUgbW9kdWxlcyB0aGF0IGFyZSB0byBiZSBtZW1iZXJzIG9mIHRoZSBwcm9qZWN0Lg0KICAtIElkZW50aWZ5IHRoZSBWYXJpYWJsZXMgYW5kIEd1aWRzIHJlcXVpcmVkIGluIGFuZCBvZiB0aGUgUGFja2FnZSAoaW5jbHVkaW5nDQogICAgY29uc3VtcHRpb24gYW5kIHByb2R1Y3Rpb24gaW5mb3JtYXRpb24pLg0KICAtIENyZWF0ZSBhbiBTUEQgZmlsZSBkZWZpbmluZyB0aGVzZSBtb2R1bGVzIGFuZCBjYWxsaW5nIG91dCB0aGVpciBNU0EgZmlsZXMuDQogIC0gQWRkIGEgbmV3IDxGaWxlbmFtZT4gZWxlbWVudCB1bmRlciA8UGFja2FnZUxpc3Q+IGludG8gDQogICAgVG9vbHNcQ29uZlxGcmFtZXdvcmtEYXRhYmFzZS5kYiwgdXNpbmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHdvcmtzcGFjZS4gDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo0KSBEZWNsYXJpbmcgYSBuZXcgUHJvdG9jb2wgaW4gYSBwYWNrYWdlOiANCiAgLSBUaGlzIHJlbGVhc2UgcmVxdWlyZXMgbWFudWFsIGVkaXRpbmcgb2YgdGhlIFNQRCBmaWxlLCBhZGRpbmcgdGhlIHByb3RvY29sDQogICAgdG8gdGhlIFByb3RvY29sRGVjbGFyYXRpb25zIHNlY3Rpb24gb2YgdGhlIGZpbGUuIA0KICAtIEFkZCB0aGUgUHJvdG9jb2wgLmggZmlsZSB0byB0aGUgSW5jbHVkZVxQcm90b2NvbCBkaXJlY3RvcnkuDQogIC0gQWRkIGFuIDxFbnRyeT4gdG8gdGhlIDxQcm90b2NvbERlY2xhcmF0aW9ucz4gZWxlbWVudCBpbiB0aGUgDQogICAgPFBhY2thZ2VOYW1lPi5zcGQgZmlsZQ0KICAgICAtIEVhY2ggbGluZSBjb250YWlucyBQcm90b2NvbCBiYXNlIG5hbWUsIGZvbGxvd2VkIGJ5IHRoZSBnbG9iYWwgdmFyaWFibGUgDQogICAgICAgbmFtZSwgYW5kICAgICAgICB0aGUgaGV4IHZhbHVlIG9mIHRoZSBQcm90b2NvbCBHVUlELg0KDQpFeGFtcGxlIFByb3RvY29sIEVudHJpZXMgKE5PVEU6IFRoZSBHdWlkIGVudHJ5IGlzIGEgc2luZ2xlIGxpbmUgaW4gdGhlIFNQRCANCmZpbGUpOg0KPFByb3RvY29sRGVjbGFyYXRpb25zPg0KICA8RW50cnkgTmFtZT0iQmRzIj4NCiAgICA8Q19OYW1lPmdFZmlCZHNBcmNoUHJvdG9jb2xHdWlkPC9DX05hbWU+DQogICAgPEd1aWRWYWx1ZT42NjVFM0ZGNi00NkNDLTExRDQtOUEzOC0wMDkwMjczRkMxNEQ8L0d1aWRWYWx1ZT4NCiAgICA8SGVscFRleHQvPg0KICA8L0VudHJ5Pg0KICA8RW50cnkgTmFtZT0iQ3B1Ij4NCiAgICA8Q19OYW1lPmdFZmlDcHVBcmNoUHJvdG9jb2xHdWlkPC9DX05hbWU+DQogICAgPEd1aWRWYWx1ZT4yNkJBQ0NCMS02RjQyLTExRDQtQkNFNy0wMDgwQzczQzg4ODE8L0d1aWRWYWx1ZT4NCiAgICA8SGVscFRleHQvPg0KICA8L0VudHJ5Pg0KPC9Qcm90b2NvbERlY2xhcmF0aW9ucz4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo1KSBEZWNsYXJpbmcgYSBuZXcgUFBJIGluIGEgcGFja2FnZToNCiAgLSBUaGlzIHJlbGVhc2UgcmVxdWlyZXMgbWFudWFsIGVkaXRpbmcgb2YgdGhlIFNQRCBmaWxlDQogIC0gQWRkIHRoZSBQUEkgLmggZmlsZSB0byB0aGUgSW5jbHVkZVxQcGkgZGlyZWN0b3J5Lg0KICAtIEFkZCBhbiA8RW50cnk+IHRvIHRoZSBwYWNrYWdlIDxQcGlEZWNsYXJhdGlvbnM+IGVsZW1lbnQgaW4gdGhlIA0KICAgIDxQYWNrYWdlTmFtZT4uc3BkIGZpbGUNCiAgICAgLSBFYWNoIGxpbmUgY29udGFpbnMgdGhlIFBQSSBiYXNlIG5hbWUsIGZvbGxvd2VkIGJ5IHRoZSBnbG9iYWwgdmFyaWFibGUgDQogICAgICAgbmFtZSBhbmQgICAgICAgIHRoZSBoZXggdmFsdWUgb2YgdGhlIFBQSSBHVUlELg0KDQpFeGFtcGxlIFBwaSBFbnRyaWVzIChOT1RFOiBUaGUgR3VpZCBlbnRyeSBpcyBhIHNpbmdsZSBsaW5lIGluIHRoZSBTUEQgZmlsZSk6DQo8UHBpRGVjbGFyYXRpb25zPg0KICA8RW50cnkgTmFtZT0iQm9vdEluUmVjb3ZlcnlNb2RlIj4NCiAgICA8Q19OYW1lPmdFZmlQZWlCb290SW5SZWNvdmVyeU1vZGVQcGlHdWlkPC9DX05hbWU+DQogICAgPEd1aWRWYWx1ZT4xN0VFNDk2QS1EOEU0LTRCOUEtOTREMS1DRTgyNzIzMDA4NTA8L0d1aWRWYWx1ZT4NCiAgICA8SGVscFRleHQvPg0KICA8L0VudHJ5Pg0KICA8RW50cnkgTmFtZT0iQ3B1SW8iPg0KICAgIDxDX05hbWU+Z0VmaVBlaUNwdUlvUHBpSW5TZXJ2aWNlVGFibGVHdWlkPC9DX05hbWU+DQogICAgPEd1aWRWYWx1ZT5FNkFGMUY3Qi1GQzNGLTQ2REEtQTgyOC1BM0I0NTdBNDQyODI8L0d1aWRWYWx1ZT4NCiAgICA8SGVscFRleHQvPg0KICA8L0VudHJ5Pg0KPC9QcGlEZWNsYXJhdGlvbnM+DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjYpIERlY2xhcmluZyBhIG5ldyBHVUlEIGluIGEgcGFja2FnZToNCiAgLSBUaGlzIHJlbGVhc2UgcmVxdWlyZXMgbWFudWFsIGVkaXRpbmcgb2YgdGhlIFNQRCBmaWxlIHRvIGluY2x1ZGUgdGhlIG5ldw0KICAgIEd1aWQuICBUaGlzIGlzIGlkZW50aWNhbCB0byBhZGRpbmcgYSBQcm90b2NvbERlY2xhcmF0aW9uIG9yIFBwaURlY2xhcmF0aW9uDQogICAgZWxlbWVudCwgYXMgZGVzY3JpYmVkIGFib3ZlLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjcpIERlY2xhcmluZyBhIG5ldyBQQ0QgZW50cnkgaW4gYSBwYWNrYWdlOg0KICAtIFRoaXMgcmVsZWFzZSByZXF1aXJlcyBtYW51YWwgZWRpdGluZyBvZiB0aGUgU1BEIGZpbGUgdG8gaW5jbHVkZSB0aGUgbmV3DQogICAgUENELiAgTmV3IFBjZCBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgUGNkRGVmaW5pdGlvbnMgc2VjdGlvbiBvZiB0aGUNCiAgICA8UGFja2FnZU5hbWU+LnNwZCBmaWxlIHVzaW5nIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgdGhlIGZvcm1hdA0KICAgIChOT1RFOiBUaGUgaGV4IDxUb2tlbj4gdmFsdWUgbXVzdCBiZSB1bmlxdWUpOg0KDQo8UGNkRGVjbGFyYXRpb25zPg0KICA8UGNkRW50cnkgSXRlbVR5cGU9IkZJWEVEX0FUX0JVSUxEIj4NCiAgICA8Q19OYW1lPlBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoPC9DX05hbWU+DQogICAgPFRva2VuPjB4MDAwMDAwMDE8L1Rva2VuPg0KICAgIDxUb2tlblNwYWNlR3VpZENOYW1lPmdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZDwvVG9rZW5TcGFjZUd1aWRDTmFtZT4NCiAgICA8RGF0dW1UeXBlPlVJTlQzMjwvRGF0dW1UeXBlPg0KICAgIDxWYWxpZFVzYWdlPkZJWEVEX0FUX0JVSUxEPC9WYWxpZFVzYWdlPg0KICAgIDxEZWZhdWx0VmFsdWU+MTAwMDAwMDwvRGVmYXVsdFZhbHVlPg0KICAgIDxIZWxwVGV4dD5UaGUgbWF4aW11bSBsZW5naCBmb3IgdW5pY29kZSBzdHJpbmcuPC9IZWxwVGV4dD4NCiAgPC9QY2RFbnRyeT4NCjwvUGNkRGVjbGFyYXRpb25zPg0KICANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KOCkgRGVjbGFyaW5nIGEgbmV3IExpYnJhcnkgQ2xhc3M6DQogIC0gVGhpcyByZWxlYXNlIHJlcXVpcmVzIG1hbnVhbCBlZGl0aW5nIG9mIHRoZSBTUEQgZmlsZSB0byBpbmNsdWRlIHRoZSBuZXcNCiAgICBMaWJyYXJ5IENsYXNzLiAgTmV3IExpYnJhcnkgQ2xhc3MgZW50cmllcyBhcmUgYWRkZWQgdG8gdGhlIA0KICAgIExpYnJhcnlDbGFzc0RlY2xhcmF0aW9ucyBzZWN0aW9uIG9mIHRoZSA8UGFja2FnZU5hbWU+LnNwZCBmaWxlIHVzaW5nDQogICAgdGhlIGZvbGxvd2luZyBleGFtcGxlIGZvciB0aGUgZm9ybWF0Og0KDQo8TGlicmFyeUNsYXNzRGVjbGFyYXRpb25zPg0KICA8TGlicmFyeUNsYXNzIE5hbWU9IkJhc2VMaWIiPg0KICAgIDxJbmNsdWRlSGVhZGVyPkluY2x1ZGUvTGlicmFyeS9CYXNlTGliLmg8L0luY2x1ZGVIZWFkZXI+DQogICAgPEhlbHBUZXh0Lz4NCiAgPC9MaWJyYXJ5Q2xhc3M+DQogIDxMaWJyYXJ5Q2xhc3MgTmFtZT0iQmFzZU1lbW9yeUxpYiI+DQogICAgPEluY2x1ZGVIZWFkZXI+SW5jbHVkZS9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaDwvSW5jbHVkZUhlYWRlcj4NCiAgICA8SGVscFRleHQvPg0KICA8L0xpYnJhcnlDbGFzcz4NCjwvTGlicmFyeUNsYXNzRGVjbGFyYXRpb25zPg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpFREsgSUkgQ2hhbmdlcyBSZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwgRURLOg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBFREsgSUkgcmVwcmVzZW50cyBzaWduaWZpY2FudCBjaGFuZ2VzIGluIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEVESy4NClRoZXJlZm9yZSwgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gaXNvbGF0ZSBhbGwgb2YgdGhlIGNoYW5nZXMgb2YgdGhpcyB2ZXJzaW9uIG9mDQp0aGUgRURLIHdpdGggdGhlIG9yaWdpbmFsIEVESy4NCg0KT2YgcGFydGljdWxhciBub3RlOg0KDQoxKSBFREsgSUkgY29udGFpbnMgbmV3IGhhcmR3YXJlIGZlYXR1cmUgc3VwcG9ydCBmb3IgdGhlIElDSCBTTUJVUyBMaWJyYXJpZXMuDQogICBUaGVzZSBsaWJyYXJpZXMgYXJlIHByb3ZpZGVkIHRvIG1ha2UgTWVtb3J5IFJlZmVyZW5jZSBDb2RlIChNUkMpIGRldmVsb3BtZW50DQogICBlYXNpZXIuDQoyKSBUaGUgTURFIGxpYnJhcmllcyByZXByZXNlbnQgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBzb3VyY2UNCiAgICh3aXRoIG9ubHkgbGltaXRlZCBjaGFuZ2VzIGluIGZ1bmN0aW9uYWxpdHkuKSAgVGhlc2UgbmV3IGxpYnJhcmllcyBjb25mb3JtDQogICB0byB0aGUgIkVESyBJSSBNb2R1bGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgTGlicmFyeSBTcGVjaWZpY2F0aW9uLpQgDQozKSBUaGUgRmF0IEJpbmFyeSBhbmQgdGhlIEVESyBTaGVsbCBCaW5hcnkgUGFja2FnZXMgYXJlIGZ1bmN0aW9uYWxseSBpZGVudGljYWwNCiAgIHRvIHRoZSBvcmlnaW5hbCBFREsuDQo0KSBUaGUgRURLIHRvb2xzIGRpcmVjdG9yeSBoYXMgYmVlbiBleHBhbmRlZCB0byBpbmNsdWRlIG1vcmUgdG9vbHMgYW5kIG1vcmUNCiAgIHRvb2wgZnVuY3Rpb25hbGl0eS4NCjUpIFRoZSBFREsgTlQzMiBzZWN0aW9uIGhhcyBiZWVuIHBvcnRlZCB0byB0aGUgbmV3IGJ1aWxkIHByb2Nlc3MsIGJ1dA0KICAgZnVuY3Rpb25hbGx5IHJlbWFpbnMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIEVESy4NCjYpIFRoZSBBcHBsaWNhdGlvbiAiSGVsbG9Xb3JsZCIgaGFzIGJlZW4gcG9ydGVkIHRvIEVESyBJSSBhcyB3ZWxsLg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpWaXJ1cyBzY2FubmVkIGJ5IE1jQWZlZSBWaXJ1c1NjYW4gRW50ZXJwcmlzZSA4LjAuMCwgVmlydXMgRGVmaW5pdGlvbnMgNDcxOCwgbm8NCnZpcnVzIGRldGVjdGVkLg0KDQo=