ZGlmZiAtLWdpdCBhL2NvbW1vbi96bGliL3psaWIuaHRtbCBiL2NvbW1vbi96bGliL3psaWIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQzNzAzCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL3psaWIvemxpYi5odG1sCkBAIC0wLDAgKzEsOTcxIEBACis8aHRtbD4KKzxoZWFkPgorIDx0aXRsZT4KKyB6bGliIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5IHZlcnNpb24gMS4xLjQKKyA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iV2hpdGUiIHRleHQ9IkJsYWNrIiB2bGluaz0iUmVkIiBhbGluaz0iTmF2eSIgbGluaz0iUmVkIj4KKzwhLS0gYmFja2dyb3VuZD0iemxpYmJnLmdpZiIgLS0+CisKKzxoMT4gemxpYiAxLjEuNCBNYW51YWwgPC9oMT4KKzxocj4KKzxhIG5hbWU9IkNvbnRlbnRzIj48aDI+Q29udGVudHM8L2gyPgorPG9sIHR5cGU9IkkiPgorPGxpPiA8YSBocmVmPSIjUHJvbG9ndWUiPlByb2xvZ3VlPC9hPgorPGxpPiA8YSBocmVmPSIjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+Cis8bGk+IDxhIGhyZWY9IiNVdGlsaXR5IGZ1bmN0aW9ucyI+VXRpbGl0eSBmdW5jdGlvbnM8L2E+Cis8bGk+IDxhIGhyZWY9IiNCYXNpYyBmdW5jdGlvbnMiPkJhc2ljIGZ1bmN0aW9uczwvYT4KKzxsaT4gPGEgaHJlZj0iI0FkdmFuY2VkIGZ1bmN0aW9ucyI+QWR2YW5jZWQgZnVuY3Rpb25zPC9hPgorPGxpPiA8YSBocmVmPSIjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+Cis8bGk+IDxhIGhyZWY9IiNzdHJ1Y3Qgel9zdHJlYW1fcyI+c3RydWN0IHpfc3RyZWFtX3M8L2E+Cis8bGk+IDxhIGhyZWY9IiNDaGVja3N1bSBmdW5jdGlvbnMiPkNoZWNrc3VtIGZ1bmN0aW9uczwvYT4KKzxsaT4gPGEgaHJlZj0iI01pc2MiPk1pc2M8L2E+Cis8L29sPgorPGhyPgorPGEgbmFtZT0iUHJvbG9ndWUiPjxoMj4gUHJvbG9ndWUgPC9oMj4KKyAgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5IHZlcnNpb24gMS4xLjQsIE1hcmNoIDExdGgsIDIwMDIKKyAgPHA+CisgIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgPHA+CisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAgPHA+CisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAgPG9sPgorICAgPGxpPiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgICA8bGk+IEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgIDxsaT4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAgPC9vbD4KKworICA8ZGw+CisgIDxkdD5KZWFuLWxvdXAgR2FpbGx5ICAgICAgICAKKyAgPGRkPjxhIGhyZWY9Im1haWx0bzpqbG91cEBnemlwLm9yZyI+amxvdXBAZ3ppcC5vcmc8L2E+CisgIDxkdD5NYXJrIEFkbGVyCisgIDxkZD48YSBocmVmPSJtYWlsdG86bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdSI+bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdTwvYT4KKyAgPC9kbD4KKworICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzIChSZXF1ZXN0IGZvcgorICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcworICA8YSBocmVmPSJmdHA6Ly9kcy5pbnRlcm5pYy5uZXQvcmZjL3JmYzE5NTAudHh0Ij4KKyAgZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUwLnR4dCA8L2E+CisgICh6bGliIGZvcm1hdCksIAorICA8YSBocmVmPSJmdHA6Ly9kcy5pbnRlcm5pYy5uZXQvcmZjL3JmYzE5NTEudHh0Ij4KKyAgcmZjMTk1MS50eHQgPC9hPgorICAoPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IGZvcm1hdCkgYW5kIAorICA8YSBocmVmPSJmdHA6Ly9kcy5pbnRlcm5pYy5uZXQvcmZjL3JmYzE5NTIudHh0Ij4KKyAgcmZjMTk1Mi50eHQgPC9hPgorICAoZ3ppcCBmb3JtYXQpLgorICA8cD4KKyAgVGhpcyBtYW51YWwgaXMgY29udmVydGVkIGZyb20gemxpYi5oIGJ5IAorICA8YSBocmVmPSJtYWlsdG86cGlhaXBAY3NpZS5udHUuZWR1LnR3Ij4gcGlhaXAgPC9hPgorICA8cD4KKyAgVmlzaXQgPGEgaHJlZj0iaHR0cDovL2Z0cC5jZHJvbS5jb20vcHViL2luZm96aXAvemxpYi8iPgorICBodHRwOi8vZnRwLmNkcm9tLmNvbS9wdWIvaW5mb3ppcC96bGliLzwvYT4gCisgIGZvciB0aGUgb2ZmaWNpYWwgemxpYiB3ZWIgcGFnZS4KKyAgPHA+CisKKzxocj4KKzxhIG5hbWU9IkludHJvZHVjdGlvbiI+PGgyPiBJbnRyb2R1Y3Rpb24gPC9oMj4KKyAgICAgVGhlICd6bGliJyBjb21wcmVzc2lvbiBsaWJyYXJ5IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQKKyAgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMsIGluY2x1ZGluZyBpbnRlZ3JpdHkgY2hlY2tzIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgZGF0YS4gIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBzdXBwb3J0cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QKKyAgKGRlZmxhdGlvbikgYnV0IG90aGVyIGFsZ29yaXRobXMgd2lsbCBiZSBhZGRlZCBsYXRlciBhbmQgd2lsbCBoYXZlIHRoZSBzYW1lCisgIHN0cmVhbSBpbnRlcmZhY2UuCisgIDxwPgorCisgICAgIENvbXByZXNzaW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdlCisgIGVub3VnaCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwgb3IgY2FuIGJlIGRvbmUgYnkKKyAgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKKyAgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAorICAocHJvdmlkaW5nIG1vcmUgb3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLgorICA8cD4KKworICAgICBUaGUgbGlicmFyeSBhbHNvIHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4gZ3ppcCAoLmd6KSBmb3JtYXQKKyAgd2l0aCBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLgorICA8cD4KKworICAgICBUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBzaWduYWwgaGFuZGxlci4gVGhlIGRlY29kZXIgY2hlY2tzCisgIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIKKyAgY3Jhc2ggZXZlbiBpbiBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4KKyAgPHA+CisKKzxocj4KKzxhIG5hbWU9IlV0aWxpdHkgZnVuY3Rpb25zIj48aDI+IFV0aWxpdHkgZnVuY3Rpb25zIDwvaDI+CisgICAgIFRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUKKyAgIDxhIGhyZWY9IiNCYXNpYyBmdW5jdGlvbnMiPmJhc2ljIHN0cmVhbS1vcmllbnRlZCBmdW5jdGlvbnM8L2E+LiAKKyAgIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUKKyAgIGRlZmF1bHQgb3B0aW9ucyBhcmUgYXNzdW1lZCAoY29tcHJlc3Npb24gbGV2ZWwgYW5kIG1lbW9yeSB1c2FnZSwKKyAgIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucykuIFRoZSBzb3VyY2UgY29kZSBvZiB0aGVzZQorICAgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGVhc2lseSBiZSBtb2RpZmllZCBpZiB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCis8aDM+IEZ1bmN0aW9uIGxpc3QgPC9oMz4KKzx1bD4KKzxsaT4gaW50ICA8YSBocmVmPSIjY29tcHJlc3MiPmNvbXByZXNzPC9hPiAoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLCBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pOworPGxpPiBpbnQgIDxhIGhyZWY9IiNjb21wcmVzczIiPmNvbXByZXNzMjwvYT4gKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuLCBpbnQgbGV2ZWwpOworPGxpPiBpbnQgIDxhIGhyZWY9IiN1bmNvbXByZXNzIj51bmNvbXByZXNzPC9hPiAoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLCBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pOworPGxpPiB0eXBlZGVmIHZvaWRwIGd6RmlsZTsKKzxsaT4gIGd6RmlsZSAgPGEgaHJlZj0iI2d6b3BlbiI+Z3pvcGVuPC9hPiAgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOworPGxpPiBnekZpbGUgIDxhIGhyZWY9IiNnemRvcGVuIj5nemRvcGVuPC9hPiAgKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7Cis8bGk+IGludCAgPGEgaHJlZj0iI2d6c2V0cGFyYW1zIj5nenNldHBhcmFtczwvYT4gKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSk7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6cmVhZCI+Z3pyZWFkPC9hPiAgKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbik7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6d3JpdGUiPmd6d3JpdGU8L2E+IChnekZpbGUgZmlsZSwgY29uc3Qgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pOworPGxpPiBpbnQgVkEgICA8YSBocmVmPSIjZ3pwcmludGYiPmd6cHJpbnRmPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjZ3pwdXRzIj5nenB1dHM8L2E+IChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqcyk7Cis8bGk+IGNoYXIgKiAgPGEgaHJlZj0iI2d6Z2V0cyI+Z3pnZXRzPC9hPiAoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbik7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6cHV0YyI+Z3pwdXRjPC9hPiAoZ3pGaWxlIGZpbGUsIGludCBjKTsKKzxsaT4gaW50ICAgICA8YSBocmVmPSIjZ3pnZXRjIj5nemdldGM8L2E+IChnekZpbGUgZmlsZSk7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6Zmx1c2giPmd6Zmx1c2g8L2E+IChnekZpbGUgZmlsZSwgaW50IGZsdXNoKTsKKzxsaT4gel9vZmZfdCAgICAgPGEgaHJlZj0iI2d6c2VlayI+Z3pzZWVrPC9hPiAoZ3pGaWxlIGZpbGUsIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKKzxsaT4gel9vZmZfdCAgICAgPGEgaHJlZj0iI2d6dGVsbCI+Z3p0ZWxsPC9hPiAoZ3pGaWxlIGZpbGUpOworPGxpPiBpbnQgICAgIDxhIGhyZWY9IiNnenJld2luZCI+Z3pyZXdpbmQ8L2E+IChnekZpbGUgZmlsZSk7Cis8bGk+IGludCAgPGEgaHJlZj0iI2d6ZW9mIj5nemVvZjwvYT4gKGd6RmlsZSBmaWxlKTsKKzxsaT4gaW50ICAgICA8YSBocmVmPSIjZ3pjbG9zZSI+Z3pjbG9zZTwvYT4gKGd6RmlsZSBmaWxlKTsKKzxsaT4gY29uc3QgY2hhciAqICA8YSBocmVmPSIjZ3plcnJvciI+Z3plcnJvcjwvYT4gKGd6RmlsZSBmaWxlLCBpbnQgKmVycm51bSk7Cis8L3VsPgorPGgzPiBGdW5jdGlvbiBkZXNjcmlwdGlvbiA8L2gzPgorPGRsPgorPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJjb21wcmVzcyI+Y29tcHJlc3M8L2E+IChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbik7PC9mb250PgorPGRkPgorICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbAorICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IDAuMSUgbGFyZ2VyIHRoYW4KKyAgIHNvdXJjZUxlbiBwbHVzIDEyIGJ5dGVzLiBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQorICAgY29tcHJlc3NlZCBidWZmZXIuPHA+CisgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gPGEgaHJlZj0iI2NvbXByZXNzIj5jb21wcmVzczwvYT4gYSB3aG9sZSBmaWxlIGF0IG9uY2UgaWYgdGhlCisgICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuPHA+CisgICAgIDxhIGhyZWY9IiNjb21wcmVzcyI+Y29tcHJlc3M8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAorICAgYnVmZmVyLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImNvbXByZXNzMiI+Y29tcHJlc3MyPC9hPiAoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLCBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4sIGludCBsZXZlbCk7PC9mb250PgorPGRkPgorICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gVGhlIGxldmVsCisgICBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4uICBzb3VyY2VMZW4gaXMgdGhlIGJ5dGUKKyAgIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKKyAgIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAwLjElIGxhcmdlciB0aGFuIHNvdXJjZUxlbiBwbHVzCisgICAxMiBieXRlcy4gVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIuCisgICA8cD4KKworICAgICA8YSBocmVmPSIjY29tcHJlc3MyIj5jb21wcmVzczI8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIsCisgICA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJ1bmNvbXByZXNzIj51bmNvbXByZXNzPC9hPiAoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLCBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pOzwvZm9udD4KKzxkZD4KKyAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbAorICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZQorICAgZW50aXJlIHVuY29tcHJlc3NlZCBkYXRhLiAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZQorICAgYmVlbiBzYXZlZCBwcmV2aW91c2x5IGJ5IHRoZSBjb21wcmVzc29yIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgZGVjb21wcmVzc29yCisgICBieSBzb21lIG1lY2hhbmlzbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNvbXByZXNzaW9uIGxpYnJhcnkuKQorICAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIuIDxwPgorICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgYSB3aG9sZSBmaWxlIGF0IG9uY2UgaWYgdGhlCisgICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCisgICA8cD4KKworICAgICA8YSBocmVmPSIjdW5jb21wcmVzcyI+dW5jb21wcmVzczwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgPGEgaHJlZj0iI1pfQlVGX0VSUk9SIj5aX0JVRl9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0CisgICBidWZmZXIsIG9yIDxhIGhyZWY9IiNaX0RBVEFfRVJST1IiPlpfREFUQV9FUlJPUjwvYT4gaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZC4KKyAgIDxwPgorCis8ZHQ+IHR5cGVkZWYgdm9pZHAgZ3pGaWxlOworPGRkPiA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGd6RmlsZSAgPGEgbmFtZT0iZ3pvcGVuIj5nem9wZW48L2E+ICAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7PC9mb250PgorPGRkPgorICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKKyAgIGlzIGFzIGluIGZvcGVuICgicmIiIG9yICJ3YiIpIGJ1dCBjYW4gYWxzbyBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwKKyAgICgid2I5Iikgb3IgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvcgorICAgSHVmZm1hbiBvbmx5IGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIi4gKFNlZSB0aGUgZGVzY3JpcHRpb24KKyAgIG9mIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pCisgICA8cD4KKworICAgICA8YSBocmVmPSIjZ3pvcGVuIj5nem9wZW48L2E+IGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdCA7IGluIHRoaXMKKyAgIGNhc2UgPGEgaHJlZj0iI2d6cmVhZCI+Z3pyZWFkPC9hPiB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uCisgICA8cD4KKworICAgICA8YSBocmVmPSIjZ3pvcGVuIj5nem9wZW48L2E+IHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJlIHdhcworICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IDsgZXJybm8KKyAgIGNhbiBiZSBjaGVja2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gY2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZQorICAgemxpYiBlcnJvciBpcyA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPikuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gZ3pGaWxlICA8YSBuYW1lPSJnemRvcGVuIj5nemRvcGVuPC9hPiAgKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7PC9mb250PgorPGRkPgorICAgICA8YSBocmVmPSIjZ3pkb3BlbiI+Z3pkb3BlbjwvYT4oKSBhc3NvY2lhdGVzIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gIEZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSBvYnRhaW5lZCBmcm9tIGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBvcgorICAgZmlsZW5vIChpbiB0aGUgZmlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIGZvcGVuKS4KKyAgIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcyBpbiA8YSBocmVmPSIjZ3pvcGVuIj5nem9wZW48L2E+LgorICAgPHA+CisgICAgIFRoZSBuZXh0IGNhbGwgb2YgPGEgaHJlZj0iI2d6Y2xvc2UiPmd6Y2xvc2U8L2E+IG9uIHRoZSByZXR1cm5lZCBnekZpbGUgd2lsbCBhbHNvIGNsb3NlIHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCksIG1vZGUpIGNsb3NlcyB0aGUgZmlsZQorICAgZGVzY3JpcHRvciBmZC4gSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgPGEgaHJlZj0iI2d6ZG9wZW4iPmd6ZG9wZW48L2E+KGR1cChmZCksIG1vZGUpLgorICAgPHA+CisgICAgIDxhIGhyZWY9IiNnemRvcGVuIj5nemRvcGVuPC9hPiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUKKyAgIHRoZSAoZGUpY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4uCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJnenNldHBhcmFtcyI+Z3pzZXRwYXJhbXM8L2E+IChnekZpbGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpOzwvZm9udD4KKzxkZD4KKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gU2VlIHRoZSBkZXNjcmlwdGlvbgorICAgb2YgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4KKyAgIDxwPgorICAgICA8YSBocmVmPSIjZ3pzZXRwYXJhbXMiPmd6c2V0cGFyYW1zPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCBvciA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgZmlsZSB3YXMgbm90CisgICBvcGVuZWQgZm9yIHdyaXRpbmcuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICAgICA8YSBuYW1lPSJnenJlYWQiPmd6cmVhZDwvYT4gIChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pOzwvZm9udD4KKzxkZD4KKyAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgSWYgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgPGEgaHJlZj0iI2d6cmVhZCI+Z3pyZWFkPC9hPiBjb3BpZXMgdGhlIGdpdmVuIG51bWJlcgorICAgb2YgYnl0ZXMgaW50byB0aGUgYnVmZmVyLgorICAgPHA+CisgICAgIDxhIGhyZWY9IiNnenJlYWQiPmd6cmVhZDwvYT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSByZWFkICgwIGZvcgorICAgZW5kIG9mIGZpbGUsIC0xIGZvciBlcnJvcikuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICAgICA8YSBuYW1lPSJnendyaXRlIj5nendyaXRlPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCisgICA8YSBocmVmPSIjZ3p3cml0ZSI+Z3p3cml0ZTwvYT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuCisgICAoMCBpbiBjYXNlIG9mIGVycm9yKS4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgVkEgICA8YSBuYW1lPSJnenByaW50ZiI+Z3pwcmludGY8L2E+IChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOzwvZm9udD4KKzxkZD4KKyAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgorICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gPGEgaHJlZj0iI2d6cHJpbnRmIj5nenByaW50ZjwvYT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9Imd6cHV0cyI+Z3pwdXRzPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKnMpOzwvZm9udD4KKzxkZD4KKyAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKKyAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KKyAgIDxwPgorICAgICAgPGEgaHJlZj0iI2d6cHV0cyI+Z3pwdXRzPC9hPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorICAgICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGNoYXIgKiAgPGEgbmFtZT0iZ3pnZXRzIj5nemdldHM8L2E+IChnekZpbGUgZmlsZSwgY2hhciAqYnVmLCBpbnQgbGVuKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgICBSZWFkcyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBhcmUgcmVhZCwgb3IKKyAgIGEgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbiBlbmQtb2YtZmlsZQorICAgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLiAgVGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwKKyAgIGNoYXJhY3Rlci4KKyAgIDxwPgorICAgICAgPGEgaHJlZj0iI2d6Z2V0cyI+Z3pnZXRzPC9hPiByZXR1cm5zIGJ1Ziwgb3IgPGEgaHJlZj0iI1pfTlVMTCI+Wl9OVUxMPC9hPiBpbiBjYXNlIG9mIGVycm9yLgorICAgICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pwdXRjIj5nenB1dGM8L2E+IChnekZpbGUgZmlsZSwgaW50IGMpOzwvZm9udD4KKzxkZD4KKyAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgPGEgaHJlZj0iI2d6cHV0YyI+Z3pwdXRjPC9hPiByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pnZXRjIj5nemdldGM8L2E+IChnekZpbGUgZmlsZSk7PC9mb250PgorPGRkPgorICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiA8YSBocmVmPSIjZ3pnZXRjIj5nemdldGM8L2E+IHJldHVybnMgdGhpcyBieXRlCisgICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pmbHVzaCI+Z3pmbHVzaDwvYT4gKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpOzwvZm9udD4KKzxkZD4KKyAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUgcGFyYW1ldGVyCisgICBmbHVzaCBpcyBhcyBpbiB0aGUgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkgZnVuY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKKyAgIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIDxhIGhyZWY9IiNnemVycm9yIj5nemVycm9yPC9hPiBiZWxvdykuIDxhIGhyZWY9IiNnemZsdXNoIj5nemZsdXNoPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZgorICAgdGhlIGZsdXNoIHBhcmFtZXRlciBpcyA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiBhbmQgYWxsIG91dHB1dCBjb3VsZCBiZSBmbHVzaGVkLgorICAgPHA+CisgICAgIDxhIGhyZWY9IiNnemZsdXNoIj5nemZsdXNoPC9hPiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCBjYW4KKyAgIGRlZ3JhZGUgY29tcHJlc3Npb24uCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gel9vZmZfdCAgICAgPGEgbmFtZT0iZ3pzZWVrIj5nenNlZWs8L2E+IChnekZpbGUgZmlsZSwgel9vZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpOzwvZm9udD4KKzxkZD4KKyAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCA8YSBocmVmPSIjZ3pyZWFkIj5nenJlYWQ8L2E+IG9yIDxhIGhyZWY9IiNnendyaXRlIj5nendyaXRlPC9hPiBvbiB0aGUKKyAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLiBUaGUgd2hlbmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOworICAgdGhlIHZhbHVlIFNFRUtfRU5EIGlzIG5vdCBzdXBwb3J0ZWQuCisgICA8cD4KKyAgICAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGVtdWxhdGVkIGJ1dCBjYW4gYmUKKyAgIGV4dHJlbWVseSBzbG93LiBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcsIG9ubHkgZm9yd2FyZCBzZWVrcyBhcmUKKyAgIHN1cHBvcnRlZCA7IDxhIGhyZWY9IiNnenNlZWsiPmd6c2VlazwvYT4gdGhlbiBjb21wcmVzc2VzIGEgc2VxdWVuY2Ugb2YgemVyb2VzIHVwIHRvIHRoZSBuZXcKKyAgIHN0YXJ0aW5nIHBvc2l0aW9uLgorICAgPHA+CisgICAgICA8YSBocmVmPSIjZ3pzZWVrIj5nenNlZWs8L2E+IHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQorICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvciwgaW4KKyAgIHBhcnRpY3VsYXIgaWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nIGFuZCB0aGUgbmV3IHN0YXJ0aW5nIHBvc2l0aW9uCisgICB3b3VsZCBiZSBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICAgICA8YSBuYW1lPSJnenJld2luZCI+Z3pyZXdpbmQ8L2E+IChnekZpbGUgZmlsZSk7PC9mb250PgorPGRkPgorICAgICBSZXdpbmRzIHRoZSBnaXZlbiBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGZvciByZWFkaW5nLgorICAgICA8cD4KKyAgIDxhIGhyZWY9IiNnenJld2luZCI+Z3pyZXdpbmQ8L2E+KGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gKGludCk8YSBocmVmPSIjZ3pzZWVrIj5nenNlZWs8L2E+KGZpbGUsIDBMLCBTRUVLX1NFVCkKKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiB6X29mZl90ICAgICA8YSBuYW1lPSJnenRlbGwiPmd6dGVsbDwvYT4gKGd6RmlsZSBmaWxlKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFJldHVybnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCA8YSBocmVmPSIjZ3pyZWFkIj5nenJlYWQ8L2E+IG9yIDxhIGhyZWY9IiNnendyaXRlIj5nendyaXRlPC9hPiBvbiB0aGUKKyAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgorICAgPHA+CisKKyAgIDxhIGhyZWY9IiNnenRlbGwiPmd6dGVsbDwvYT4oZmlsZSkgaXMgZXF1aXZhbGVudCB0byA8YSBocmVmPSIjZ3pzZWVrIj5nenNlZWs8L2E+KGZpbGUsIDBMLCBTRUVLX0NVUikKKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9Imd6ZW9mIj5nemVvZjwvYT4gKGd6RmlsZSBmaWxlKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFJldHVybnMgMSB3aGVuIEVPRiBoYXMgcHJldmlvdXNseSBiZWVuIGRldGVjdGVkIHJlYWRpbmcgdGhlIGdpdmVuCisgICBpbnB1dCBzdHJlYW0sIG90aGVyd2lzZSB6ZXJvLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pjbG9zZSI+Z3pjbG9zZTwvYT4gKGd6RmlsZSBmaWxlKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKKyAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPi4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYgorICAgZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gPGEgaHJlZj0iI2d6ZXJyb3IiPmd6ZXJyb3I8L2E+IGJlbG93KS4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBjb25zdCBjaGFyICogIDxhIG5hbWU9Imd6ZXJyb3IiPmd6ZXJyb3I8L2E+IChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pOzwvZm9udD4KKzxkZD4KKyAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCisgICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCisgICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKKyAgIGVycm51bSBpcyBzZXQgdG8gPGEgaHJlZj0iI1pfRVJSTk8iPlpfRVJSTk88L2E+IGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KKyAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKyAgIDxwPgorPC9kbD4KKzxocj4KKzxhIG5hbWU9IkJhc2ljIGZ1bmN0aW9ucyI+PGgyPiBCYXNpYyBmdW5jdGlvbnMgPC9oMj4KKzxoMz4gRnVuY3Rpb24gbGlzdCA8L2gzPgorPHVsPgorPGxpPiAgY29uc3QgY2hhciAqICA8YSBocmVmPSIjemxpYlZlcnNpb24iPnpsaWJWZXJzaW9uPC9hPiAodm9pZCk7Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCBsZXZlbCk7Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBpbnQgZmx1c2gpOworPGxpPiAgaW50ICA8YSBocmVmPSIjZGVmbGF0ZUVuZCI+ZGVmbGF0ZUVuZDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOworPGxpPiAgaW50ICA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGZsdXNoKTsKKzxsaT4gIGludCAgPGEgaHJlZj0iI2luZmxhdGVFbmQiPmluZmxhdGVFbmQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOworPC91bD4KKworPGgzPiBGdW5jdGlvbiBkZXNjcmlwdGlvbiA8L2gzPgorPGRsPgorPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGNvbnN0IGNoYXIgKiAgPGEgbmFtZT0iemxpYlZlcnNpb24iPnpsaWJWZXJzaW9uPC9hPiAodm9pZCk7PC9mb250PgorPGRkPiBUaGUgYXBwbGljYXRpb24gY2FuIGNvbXBhcmUgPGEgaHJlZj0iI3psaWJWZXJzaW9uIj56bGliVmVyc2lvbjwvYT4gYW5kIFpMSUJfVkVSU0lPTiBmb3IgY29uc2lzdGVuY3kuCisgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRpZmZlcnMsIHRoZSBsaWJyYXJ5IGNvZGUgYWN0dWFsbHkgdXNlZCBpcworICAgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgemxpYi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhpcyBjaGVjayBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4gYW5kIDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+LgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBpbnQgbGV2ZWwpOzwvZm9udD4KKzxkZD4KKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiBmb3IgY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKKyAgIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4sIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+IGFuZCA8YSBocmVmPSIjb3BhcXVlIj5vcGFxdWU8L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCisgICBJZiA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IGFuZCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhcmUgc2V0IHRvIDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4sIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IHVwZGF0ZXMgdGhlbSB0bworICAgdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCisgICA8cD4KKworICAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgbXVzdCBiZSA8YSBocmVmPSIjWl9ERUZBVUxUX0NPTVBSRVNTSU9OIj5aX0RFRkFVTFRfQ09NUFJFU1NJT048L2E+LCBvciBiZXR3ZWVuIDAgYW5kIDk6CisgICAxIGdpdmVzIGJlc3Qgc3BlZWQsIDkgZ2l2ZXMgYmVzdCBjb21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBhdAorICAgYWxsICh0aGUgaW5wdXQgZGF0YSBpcyBzaW1wbHkgY29waWVkIGEgYmxvY2sgYXQgYSB0aW1lKS4KKyAgIDxwPgorCisgICA8YSBocmVmPSIjWl9ERUZBVUxUX0NPTVBSRVNTSU9OIj5aX0RFRkFVTFRfQ09NUFJFU1NJT048L2E+IHJlcXVlc3RzIGEgZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kCisgICBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCisgICA8cD4KKworICAgICA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiBsZXZlbCBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBsZXZlbCwKKyAgIDxhIGhyZWY9IiNaX1ZFUlNJT05fRVJST1IiPlpfVkVSU0lPTl9FUlJPUjwvYT4gaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uICg8YSBocmVmPSIjemxpYl92ZXJzaW9uIj56bGliX3ZlcnNpb248L2E+KSBpcyBpbmNvbXBhdGlibGUKKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLgorICAgPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4gZG9lcyBub3QKKyAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKS4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJkZWZsYXRlIj5kZWZsYXRlPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBpbnQgZmx1c2gpOzwvZm9udD4KKzxkZD4KKyAgICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBpbnRyb2R1Y2Ugc29tZQorICBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hlbgorICBmb3JjZWQgdG8gZmx1c2guPHA+CisKKyAgICBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBhcyBmb2xsb3dzLiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCisgIGZvbGxvd2luZyBhY3Rpb25zOgorCisgIDx1bD4KKyAgPGxpPiBDb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgdXBkYXRlIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4KKyAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBhcmUgdXBkYXRlZCBhbmQKKyAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkuCisKKyAgPGxpPiAKKyAgICBQcm92aWRlIG1vcmUgb3V0cHV0IHN0YXJ0aW5nIGF0IDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCB1cGRhdGUgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4KKyAgICBhY2NvcmRpbmdseS4gVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgbm9uIHplcm8uCisgICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVzIHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKKyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCisgICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4KKyAgPC91bD4gPHA+CisKKyAgQmVmb3JlIHRoZSBjYWxsIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZworICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IG9yIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4gYWNjb3JkaW5nbHkgOyA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+CisgIHNob3VsZCBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUgY2FsbC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZQorICBjb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwKKyAgKDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4gPT0gMCksIG9yIGFmdGVyIGVhY2ggY2FsbCBvZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKS4gSWYgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+CisgIGFuZCB3aXRoIHplcm8gPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiwgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgbWFraW5nIHJvb20gaW4gdGhlCisgIG91dHB1dCBidWZmZXIgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCBwZW5kaW5nLgorICA8cD4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIDxhIGhyZWY9IiNaX1NZTkNfRkxVU0giPlpfU1lOQ19GTFVTSDwvYT4sIGFsbCBwZW5kaW5nIG91dHB1dCBpcworICBmbHVzaGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0aGUgb3V0cHV0IGlzIGFsaWduZWQgb24gYSBieXRlIGJvdW5kYXJ5LCBzbworICB0aGF0IHRoZSBkZWNvbXByZXNzb3IgY2FuIGdldCBhbGwgaW5wdXQgZGF0YSBhdmFpbGFibGUgc28gZmFyLiAoSW4gcGFydGljdWxhcgorICA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBpcyB6ZXJvIGFmdGVyIHRoZSBjYWxsIGlmIGVub3VnaCBvdXRwdXQgc3BhY2UgaGFzIGJlZW4gcHJvdmlkZWQKKyAgYmVmb3JlIHRoZSBjYWxsLikgIEZsdXNoaW5nIG1heSBkZWdyYWRlIGNvbXByZXNzaW9uIGZvciBzb21lIGNvbXByZXNzaW9uCisgIGFsZ29yaXRobXMgYW5kIHNvIGl0IHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBuZWNlc3NhcnkuCisgIDxwPgorCisgICAgSWYgZmx1c2ggaXMgc2V0IHRvIDxhIGhyZWY9IiNaX0ZVTExfRkxVU0giPlpfRlVMTF9GTFVTSDwvYT4sIGFsbCBvdXRwdXQgaXMgZmx1c2hlZCBhcyB3aXRoCisgIDxhIGhyZWY9IiNaX1NZTkNfRkxVU0giPlpfU1lOQ19GTFVTSDwvYT4sIGFuZCB0aGUgY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gaXMgcmVzZXQgc28gdGhhdCBkZWNvbXByZXNzaW9uIGNhbgorICByZXN0YXJ0IGZyb20gdGhpcyBwb2ludCBpZiBwcmV2aW91cyBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gZGFtYWdlZCBvciBpZgorICByYW5kb20gYWNjZXNzIGlzIGRlc2lyZWQuIFVzaW5nIDxhIGhyZWY9IiNaX0ZVTExfRkxVU0giPlpfRlVMTF9GTFVTSDwvYT4gdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQorICB0aGUgY29tcHJlc3Npb24uCisgIDxwPgorCisgICAgSWYgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHJldHVybnMgd2l0aCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+ID09IDAsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4KKyAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+KSwgdW50aWwgdGhlIGZsdXNoIGlzIGNvbXBsZXRlICg8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gcmV0dXJucyB3aXRoIG5vbi16ZXJvCisgIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4pLgorICA8cD4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIDxhIGhyZWY9IiNaX0ZJTklTSCI+Wl9GSU5JU0g8L2E+LCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCwKKyAgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCBhbmQgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHJldHVybnMgd2l0aCA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IGlmIHRoZXJlCisgIHdhcyBlbm91Z2ggb3V0cHV0IHNwYWNlIDsgaWYgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHJldHVybnMgd2l0aCA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4sIHRoaXMgZnVuY3Rpb24gbXVzdCBiZQorICBjYWxsZWQgYWdhaW4gd2l0aCA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPikgYnV0IG5vCisgIG1vcmUgaW5wdXQgZGF0YSwgdW50aWwgaXQgcmV0dXJucyB3aXRoIDxhIGhyZWY9IiNaX1NUUkVBTV9FTkQiPlpfU1RSRUFNX0VORDwvYT4gb3IgYW4gZXJyb3IuIEFmdGVyCisgIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiBoYXMgcmV0dXJuZWQgPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiwgdGhlIG9ubHkgcG9zc2libGUgb3BlcmF0aW9ucyBvbiB0aGUKKyAgc3RyZWFtIGFyZSA8YSBocmVmPSIjZGVmbGF0ZVJlc2V0Ij5kZWZsYXRlUmVzZXQ8L2E+IG9yIDxhIGhyZWY9IiNkZWZsYXRlRW5kIj5kZWZsYXRlRW5kPC9hPi4KKyAgPHA+CisgIAorICAgIDxhIGhyZWY9IiNaX0ZJTklTSCI+Wl9GSU5JU0g8L2E+IGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KKyAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiBJbiB0aGlzIGNhc2UsIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4gbXVzdCBiZSBhdCBsZWFzdAorICAwLjElIGxhcmdlciB0aGFuIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IHBsdXMgMTIgYnl0ZXMuICBJZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gZG9lcyBub3QgcmV0dXJuCisgIDxhIGhyZWY9IiNaX1NUUkVBTV9FTkQiPlpfU1RSRUFNX0VORDwvYT4sIHRoZW4gaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgorICA8cD4KKworICAgIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpIHNldHMgc3RybS0mZ3QgPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gdG8gdGhlIDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAorICBzbyBmYXIgKHRoYXQgaXMsIDxhIGhyZWY9IiN0b3RhbF9pbiI+dG90YWxfaW48L2E+IGJ5dGVzKS4KKyAgPHA+CisKKyAgICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKSBtYXkgdXBkYXRlIDxhIGhyZWY9IiNkYXRhX3R5cGUiPmRhdGFfdHlwZTwvYT4gaWYgaXQgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGFib3V0CisgIHRoZSBpbnB1dCBkYXRhIHR5cGUgKDxhIGhyZWY9IiNaX0FTQ0lJIj5aX0FTQ0lJPC9hPiBvciA8YSBocmVmPSIjWl9CSU5BUlkiPlpfQklOQVJZPC9hPikuIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCisgIGJpbmFyeS4gVGhpcyBmaWVsZCBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QgYWZmZWN0CisgIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KKyAgPHA+CisKKyAgICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKSByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQKKyAgcHJvY2Vzc2VkIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiBpZiBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvZHVjZWQgKG9ubHkgd2hlbiBmbHVzaCBpcyBzZXQgdG8KKyAgPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4pLCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCisgIGlmIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBvciA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiB3YXMgTlVMTCksIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+IGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlCisgIChmb3IgZXhhbXBsZSA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBvciA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IHdhcyB6ZXJvKS4KKyAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+ICBpbnQgIDxhIG5hbWU9ImRlZmxhdGVFbmQiPmRlZmxhdGVFbmQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOzwvZm9udD4KKzxkZD4KKyAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKKyAgIHBlbmRpbmcgb3V0cHV0LgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2RlZmxhdGVFbmQiPmRlZmxhdGVFbmQ8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZQorICAgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IHdhcyBpbmNvbnNpc3RlbnQsIDxhIGhyZWY9IiNaX0RBVEFfRVJST1IiPlpfREFUQV9FUlJPUjwvYT4gaWYgdGhlIHN0cmVhbSB3YXMgZnJlZWQKKyAgIHByZW1hdHVyZWx5IChzb21lIGlucHV0IG9yIG91dHB1dCB3YXMgZGlzY2FyZGVkKS4gSW4gdGhlIGVycm9yIGNhc2UsCisgICA8YSBocmVmPSIjbXNnIj5tc2c8L2E+IG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKKyAgIGRlYWxsb2NhdGVkKS4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOzwvZm9udD4KKzxkZD4gICAgIAorCUluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gZm9yIGRlY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKKyAgIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiwgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4sIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4sIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+IGFuZCA8YSBocmVmPSIjb3BhcXVlIj5vcGFxdWU8L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5CisgICB0aGUgY2FsbGVyLiBJZiA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gaXMgbm90IDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IGlzIGxhcmdlIGVub3VnaCAodGhlIGV4YWN0CisgICB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBjb21wcmVzc2lvbiBtZXRob2QpLCA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiBkZXRlcm1pbmVzIHRoZQorICAgY29tcHJlc3Npb24gbWV0aG9kIGZyb20gdGhlIHpsaWIgaGVhZGVyIGFuZCBhbGxvY2F0ZXMgYWxsIGRhdGEgc3RydWN0dXJlcworICAgYWNjb3JkaW5nbHkgOyBvdGhlcndpc2UgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBkZWZlcnJlZCB0byB0aGUgZmlyc3QgY2FsbCBvZgorICAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+LiAgSWYgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBhbmQgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gYXJlIHNldCB0byA8YSBocmVmPSIjWl9OVUxMIj5aX05VTEw8L2E+LCA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiB1cGRhdGVzIHRoZW0gdG8KKyAgIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgPGEgaHJlZj0iI1pfVkVSU0lPTl9FUlJPUiI+Wl9WRVJTSU9OX0VSUk9SPC9hPiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlci4gIDxhIGhyZWY9IiNtc2ciPm1zZzwvYT4gaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IKKyAgIG1lc3NhZ2UuIDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+IGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24gYXBhcnQgZnJvbSByZWFkaW5nCisgICB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3aWxsIGJlIGRvbmUgYnkgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkuICAoU28gPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+IGFuZAorICAgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gbWF5IGJlIG1vZGlmaWVkLCBidXQgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4gYXJlIHVuY2hhbmdlZC4pCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGludCAgPGEgbmFtZT0iaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGZsdXNoKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IGRlY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBzb21lCisgIGludHJvZHVjZSBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpCisgIGV4Y2VwdCB3aGVuIGZvcmNlZCB0byBmbHVzaC4KKyAgPHA+CisKKyAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICA8dWw+CisgIDxsaT4gRGVjb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgdXBkYXRlIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4KKyAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+IGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3NpbmcKKyAgICB3aWxsIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpLgorCisgIDxsaT4gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiBhbmQgdXBkYXRlIDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCAKKyAgICA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IGFjY29yZGluZ2x5LiAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkgcHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIAorICAgIHVudGlsIHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBvciBubyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyIAorICAgIChzZWUgYmVsb3cgYWJvdXQgdGhlIGZsdXNoIHBhcmFtZXRlcikuCisgIDwvdWw+IDxwPgorCisgIEJlZm9yZSB0aGUgY2FsbCBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcKKyAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4KKyAgVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvcgorICBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiA9PSAwKSwgb3IgYWZ0ZXIgZWFjaAorICBjYWxsIG9mIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpLiBJZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gYW5kIHdpdGggemVybyA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+LCBpdAorICBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlCisgIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisgIDxwPgorCisgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gPGEgaHJlZj0iI1pfU1lOQ19GTFVTSCI+Wl9TWU5DX0ZMVVNIPC9hPiwgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IGZsdXNoZXMgYXMgbXVjaAorICBvdXRwdXQgYXMgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIuIFRoZSBmbHVzaGluZyBiZWhhdmlvciBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gaXMKKyAgbm90IHNwZWNpZmllZCBmb3IgdmFsdWVzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgb3RoZXIgdGhhbiA8YSBocmVmPSIjWl9TWU5DX0ZMVVNIIj5aX1NZTkNfRkxVU0g8L2E+CisgIGFuZCA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiwgYnV0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQKKyAgYXMgcG9zc2libGUgYW55d2F5LgorICA8cD4KKworICAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IG9yIGFuCisgIGVycm9yLiBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwCisgIChhIHNpbmdsZSBjYWxsIG9mIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPiksIHRoZSBwYXJhbWV0ZXIgZmx1c2ggc2hvdWxkIGJlIHNldCB0bworICA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPi4gSW4gdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcKKyAgb3V0cHV0IGlzIGZsdXNoZWQgOyA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZQorICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkCisgIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdAorICBiZSA8YSBocmVmPSIjaW5mbGF0ZUVuZCI+aW5mbGF0ZUVuZDwvYT4gdG8gZGVhbGxvY2F0ZSB0aGUgZGVjb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPi4gVGhlIHVzZSBvZiA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPgorICBpcyBuZXZlciByZXF1aXJlZCwgYnV0IGNhbiBiZSB1c2VkIHRvIGluZm9ybSA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gdGhhdCBhIGZhc3RlciByb3V0aW5lCisgIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpIGNhbGwuCisgIDxwPgorCisgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGF0IHRoaXMgcG9pbnQgKHNlZSA8YSBocmVmPSIjaW5mbGF0ZVNldERpY3Rpb25hcnkiPmluZmxhdGVTZXREaWN0aW9uYXJ5PC9hPgorICBiZWxvdyksIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPiBzZXRzIHN0cm0tPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gdG8gdGhlIDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPiBjaGVja3N1bSBvZiB0aGUKKyAgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgPGEgaHJlZj0iI1pfTkVFRF9ESUNUIj5aX05FRURfRElDVDwvYT4gOyBvdGhlcndpc2UgCisgIGl0IHNldHMgc3RybS0mZ3QgPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gdG8gdGhlIDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkCisgIHNvIGZhciAodGhhdCBpcywgPGEgaHJlZj0iI3RvdGFsX291dCI+dG90YWxfb3V0PC9hPiBieXRlcykgYW5kIHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+LCA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IG9yCisgIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkIGJlbG93LiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpCisgIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gY2hlY2tzdW0gaXMgZXF1YWwgdG8gdGhhdCBzYXZlZCBieSB0aGUKKyAgY29tcHJlc3NvciBhbmQgcmV0dXJucyA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCisgIDxwPgorCisgICAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkgcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAorICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIDxhIGhyZWY9IiNaX1NUUkVBTV9FTkQiPlpfU1RSRUFNX0VORDwvYT4gaWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcworICBiZWVuIHJlYWNoZWQgYW5kIGFsbCB1bmNvbXByZXNzZWQgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkLCA8YSBocmVmPSIjWl9ORUVEX0RJQ1QiPlpfTkVFRF9ESUNUPC9hPiBpZiBhCisgIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHBvaW50LCA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGlmIHRoZSBpbnB1dCBkYXRhIHdhcworICBjb3JydXB0ZWQgKGlucHV0IHN0cmVhbSBub3QgY29uZm9ybWluZyB0byB0aGUgemxpYiBmb3JtYXQgb3IgaW5jb3JyZWN0CisgIDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPiBjaGVja3N1bSksIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQKKyAgKGZvciBleGFtcGxlIGlmIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBvciA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiB3YXMgTlVMTCksIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QKKyAgZW5vdWdoIG1lbW9yeSwgPGEgaHJlZj0iI1pfQlVGX0VSUk9SIj5aX0JVRl9FUlJPUjwvYT4gaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdAorICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVuIDxhIGhyZWY9IiNaX0ZJTklTSCI+Wl9GSU5JU0g8L2E+IGlzIHVzZWQuIEluIHRoZSA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+CisgIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgdGhlbiBjYWxsIDxhIGhyZWY9IiNpbmZsYXRlU3luYyI+aW5mbGF0ZVN5bmM8L2E+IHRvIGxvb2sgZm9yIGEgZ29vZAorICBjb21wcmVzc2lvbiBibG9jay4KKyAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+ICBpbnQgIDxhIG5hbWU9ImluZmxhdGVFbmQiPmluZmxhdGVFbmQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOzwvZm9udD4KKzxkZD4KKyAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKKyAgIHBlbmRpbmcgb3V0cHV0LgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2luZmxhdGVFbmQiPmluZmxhdGVFbmQ8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4KKyAgIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBlcnJvciBjYXNlLCA8YSBocmVmPSIjbXNnIj5tc2c8L2E+IG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEKKyAgIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkKS4KKzwvZGw+Cis8aHI+Cis8YSBuYW1lPSJBZHZhbmNlZCBmdW5jdGlvbnMiPjxoMj4gQWR2YW5jZWQgZnVuY3Rpb25zIDwvaDI+CisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5lZWRlZCBvbmx5IGluIHNvbWUgc3BlY2lhbCBhcHBsaWNhdGlvbnMuCis8aDM+IEZ1bmN0aW9uIGxpc3QgPC9oMz4KKzx1bD4KKzxsaT4gIGludCAgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLAorPGxpPiBpbnQgIDxhIGhyZWY9IiNkZWZsYXRlU2V0RGljdGlvbmFyeSI+ZGVmbGF0ZVNldERpY3Rpb25hcnk8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LCB1SW50ICBkaWN0TGVuZ3RoKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjZGVmbGF0ZUNvcHkiPmRlZmxhdGVDb3B5PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBkZXN0LCA8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHNvdXJjZSk7Cis8bGk+IGludCAgPGEgaHJlZj0iI2RlZmxhdGVSZXNldCI+ZGVmbGF0ZVJlc2V0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjZGVmbGF0ZVBhcmFtcyI+ZGVmbGF0ZVBhcmFtczwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpOworPGxpPiBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlSW5pdDIiPmluZmxhdGVJbml0MjwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50ICB3aW5kb3dCaXRzKTsKKzxsaT4gIGludCAgPGEgaHJlZj0iI2luZmxhdGVTZXREaWN0aW9uYXJ5Ij5pbmZsYXRlU2V0RGljdGlvbmFyeTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksIHVJbnQgIGRpY3RMZW5ndGgpOworPGxpPiBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlU3luYyI+aW5mbGF0ZVN5bmM8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOworPGxpPiBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlUmVzZXQiPmluZmxhdGVSZXNldDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7CisKKzwvdWw+Cis8aDM+IEZ1bmN0aW9uIGRlc2NyaXB0aW9uIDwvaDM+Cis8ZGw+Cis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50ICBsZXZlbCwgaW50ICBtZXRob2QsIGludCAgd2luZG93Qml0cywgaW50ICBtZW1MZXZlbCwgaW50ICBzdHJhdGVneSk7PC9mb250PgorCis8ZGQ+IFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiBUaGUKKyAgIGZpZWxkcyA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4sIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4sIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+IGFuZCA8YSBocmVmPSIjb3BhcXVlIj5vcGFxdWU8L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5CisgICB0aGUgY2FsbGVyLjxwPgorCisgICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuIEl0IG11c3QgYmUgPGEgaHJlZj0iI1pfREVGTEFURUQiPlpfREVGTEFURUQ8L2E+IGluCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuPHA+CisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplCisgICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMKKyAgIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIExhcmdlciB2YWx1ZXMgb2YgdGhpcyBwYXJhbWV0ZXIgcmVzdWx0IGluIGJldHRlcgorICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZgorICAgPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4gaXMgdXNlZCBpbnN0ZWFkLjxwPgorCisgICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCisgICBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+LiBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0CisgICBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvIDsgbWVtTGV2ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5CisgICBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4gU2VlIHpjb25mLmggZm9yIHRvdGFsIG1lbW9yeQorICAgdXNhZ2UgYXMgYSBmdW5jdGlvbiBvZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC48cD4KKworICAgICBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlCisgICB2YWx1ZSA8YSBocmVmPSIjWl9ERUZBVUxUX1NUUkFURUdZIj5aX0RFRkFVTFRfU1RSQVRFR1k8L2E+IGZvciBub3JtYWwgZGF0YSwgPGEgaHJlZj0iI1pfRklMVEVSRUQiPlpfRklMVEVSRUQ8L2E+IGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEKKyAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgb3IgPGEgaHJlZj0iI1pfSFVGRk1BTl9PTkxZIj5aX0hVRkZNQU5fT05MWTwvYT4gdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubworICAgc3RyaW5nIG1hdGNoKS4gIEZpbHRlcmVkIGRhdGEgY29uc2lzdHMgbW9zdGx5IG9mIHNtYWxsIHZhbHVlcyB3aXRoIGEKKyAgIHNvbWV3aGF0IHJhbmRvbSBkaXN0cmlidXRpb24uIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcworICAgdHVuZWQgdG8gPGEgaHJlZj0iI2NvbXByZXNzIj5jb21wcmVzczwvYT4gdGhlbSBiZXR0ZXIuIFRoZSBlZmZlY3Qgb2YgPGEgaHJlZj0iI1pfRklMVEVSRUQiPlpfRklMVEVSRUQ8L2E+IGlzIHRvIGZvcmNlIG1vcmUKKyAgIEh1ZmZtYW4gY29kaW5nIGFuZCBsZXNzIHN0cmluZyBtYXRjaGluZyA7IGl0IGlzIHNvbWV3aGF0IGludGVybWVkaWF0ZQorICAgYmV0d2VlbiBaX0RFRkFVTFQgYW5kIDxhIGhyZWY9IiNaX0hVRkZNQU5fT05MWSI+Wl9IVUZGTUFOX09OTFk8L2E+LiBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cworICAgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBub3QgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVuCisgICBpZiBpdCBpcyBub3Qgc2V0IGFwcHJvcHJpYXRlbHkuPHA+CisKKyAgICAgIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhbiBpbnZhbGlkCisgICBtZXRob2QpLiA8YSBocmVmPSIjbXNnIj5tc2c8L2E+IGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkuPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImRlZmxhdGVTZXREaWN0aW9uYXJ5Ij5kZWZsYXRlU2V0RGljdGlvbmFyeTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksIHVJbnQgIGRpY3RMZW5ndGgpOzwvZm9udD4KKzxkZD4KKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCisgICBpbW1lZGlhdGVseSBhZnRlciA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiwgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPiBvciA8YSBocmVmPSIjZGVmbGF0ZVJlc2V0Ij5kZWZsYXRlUmVzZXQ8L2E+LCBiZWZvcmUgYW55CisgICBjYWxsIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPi4gVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCisgICBkaWN0aW9uYXJ5IChzZWUgPGEgaHJlZj0iI2luZmxhdGVTZXREaWN0aW9uYXJ5Ij5pbmZsYXRlU2V0RGljdGlvbmFyeTwvYT4pLjxwPgorCisgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKKyAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKKyAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKKyAgIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4gYmUKKyAgIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3kgOyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlciB0aGFuCisgICB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuPHA+CisKKyAgICAgRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2lvbiBkYXRhIHN0cnVjdHVyZXMgc2VsZWN0ZWQgYnkKKyAgIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IG9yIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4sIGEgcGFydCBvZiB0aGUgZGljdGlvbmFyeSBtYXkgaW4gZWZmZWN0IGJlCisgICBkaXNjYXJkZWQsIGZvciBleGFtcGxlIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbgorICAgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IG9yIGRlZmxhdGUyLiBUaHVzIHRoZSBzdHJpbmdzIG1vc3QgbGlrZWx5IHRvIGJlIHVzZWZ1bCBzaG91bGQgYmUKKyAgIHB1dCBhdCB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LCBub3QgYXQgdGhlIGZyb250LjxwPgorCisgICAgIFVwb24gcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24sIHN0cm0tJmd0IDxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+IGlzIHNldCB0byB0aGUgQWRsZXIzMiB2YWx1ZQorICAgb2YgdGhlIGRpY3Rpb25hcnkgOyB0aGUgZGVjb21wcmVzc29yIG1heSBsYXRlciB1c2UgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUKKyAgIHdoaWNoIGRpY3Rpb25hcnkgaGFzIGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gKFRoZSBBZGxlcjMyIHZhbHVlCisgICBhcHBsaWVzIHRvIHRoZSB3aG9sZSBkaWN0aW9uYXJ5IGV2ZW4gaWYgb25seSBhIHN1YnNldCBvZiB0aGUgZGljdGlvbmFyeSBpcworICAgYWN0dWFsbHkgdXNlZCBieSB0aGUgY29tcHJlc3Nvci4pPHA+CisKKyAgICAgPGEgaHJlZj0iI2RlZmxhdGVTZXREaWN0aW9uYXJ5Ij5kZWZsYXRlU2V0RGljdGlvbmFyeTwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2Vzcywgb3IgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgYQorICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGlzCisgICBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlIGlmIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KKyAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiA8YSBocmVmPSIjZGVmbGF0ZVNldERpY3Rpb25hcnkiPmRlZmxhdGVTZXREaWN0aW9uYXJ5PC9hPiBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImRlZmxhdGVDb3B5Ij5kZWZsYXRlQ29weTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gZGVzdCwgPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzb3VyY2UpOzwvZm9udD4KKzxkZD4KKyAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS48cD4KKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXByZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQorICAgdHJpZWQsIGZvciBleGFtcGxlIHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBwcmUtcHJvY2Vzc2luZyB0aGUgaW5wdXQKKyAgIGRhdGEgd2l0aCBhIGZpbHRlci4gVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZAorICAgYnkgY2FsbGluZyA8YSBocmVmPSIjZGVmbGF0ZUVuZCI+ZGVmbGF0ZUVuZDwvYT4uICBOb3RlIHRoYXQgPGEgaHJlZj0iI2RlZmxhdGVDb3B5Ij5kZWZsYXRlQ29weTwvYT4gZHVwbGljYXRlcyB0aGUgaW50ZXJuYWwKKyAgIGNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IHdoaWNoIGNhbiBiZSBxdWl0ZSBsYXJnZSwgc28gdGhpcyBzdHJhdGVneSBpcyBzbG93IGFuZAorICAgY2FuIGNvbnN1bWUgbG90cyBvZiBtZW1vcnkuPHA+CisKKyAgICAgPGEgaHJlZj0iI2RlZmxhdGVDb3B5Ij5kZWZsYXRlQ29weTwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIHNvdXJjZSBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gd2FzIGluY29uc2lzdGVudAorICAgKHN1Y2ggYXMgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBiZWluZyBOVUxMKS4gPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIGRlc3RpbmF0aW9uLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImRlZmxhdGVSZXNldCI+ZGVmbGF0ZVJlc2V0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+Cis8ZGQ+ICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gPGEgaHJlZj0iI2RlZmxhdGVFbmQiPmRlZmxhdGVFbmQ8L2E+IGZvbGxvd2VkIGJ5IDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+LAorICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPi4KKyAgIFRoZSBzdHJlYW0gd2lsbCBrZWVwIHRoZSBzYW1lIGNvbXByZXNzaW9uIGxldmVsIGFuZCBhbnkgb3RoZXIgYXR0cmlidXRlcworICAgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+LjxwPgorCisgICAgICA8YSBocmVmPSIjZGVmbGF0ZVJlc2V0Ij5kZWZsYXRlUmVzZXQ8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIG9yIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gb3IgPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gYmVpbmcgTlVMTCkuPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iZGVmbGF0ZVBhcmFtcyI+ZGVmbGF0ZVBhcmFtczwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpOzwvZm9udD4KKzxkZD4KKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuICBUaGUKKyAgIGludGVycHJldGF0aW9uIG9mIGxldmVsIGFuZCBzdHJhdGVneSBpcyBhcyBpbiA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+LiAgVGhpcyBjYW4gYmUKKyAgIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gY29tcHJlc3Npb24gYW5kIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIGlucHV0IGRhdGEsIG9yCisgICB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVpcmluZyBhIGRpZmZlcmVudAorICAgc3RyYXRlZ3kuIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhcgorICAgaXMgY29tcHJlc3NlZCB3aXRoIHRoZSBvbGQgbGV2ZWwgKGFuZCBtYXkgYmUgZmx1c2hlZCk7IHRoZSBuZXcgbGV2ZWwgd2lsbAorICAgdGFrZSBlZmZlY3Qgb25seSBhdCB0aGUgbmV4dCBjYWxsIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLjxwPgorCisgICAgIEJlZm9yZSB0aGUgY2FsbCBvZiA8YSBocmVmPSIjZGVmbGF0ZVBhcmFtcyI+ZGVmbGF0ZVBhcmFtczwvYT4sIHRoZSBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gbXVzdCBiZSBzZXQgYXMgZm9yCisgICBhIGNhbGwgb2YgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCksIHNpbmNlIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvCisgICBiZSBjb21wcmVzc2VkIGFuZCBmbHVzaGVkLiBJbiBwYXJ0aWN1bGFyLCBzdHJtLSZndCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IG11c3QgYmUgCisgICBub24temVyby48cD4KKworICAgICA8YSBocmVmPSIjZGVmbGF0ZVBhcmFtcyI+ZGVmbGF0ZVBhcmFtczwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+CisgICBpZiBzdHJtLSZndGF2YWlsX291dCB3YXMgemVyby48cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJpbmZsYXRlSW5pdDIiPmluZmxhdGVJbml0MjwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50ICB3aW5kb3dCaXRzKTs8L2ZvbnQ+CisKKzxkZD4gICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+IHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyLiBUaGUKKyAgIGZpZWxkcyA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4sIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+LCA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhbmQgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiBtdXN0IGJlIGluaXRpYWxpemVkCisgICBiZWZvcmUgYnkgdGhlIGNhbGxlci48cD4KKworICAgICBUaGUgd2luZG93Qml0cyBwYXJhbWV0ZXIgaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgbWF4aW11bSB3aW5kb3cKKyAgIHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvcgorICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZiA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiBpcyB1c2VkCisgICBpbnN0ZWFkLiBJZiBhIGNvbXByZXNzZWQgc3RyZWFtIHdpdGggYSBsYXJnZXIgd2luZG93IHNpemUgaXMgZ2l2ZW4gYXMKKyAgIGlucHV0LCA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKSB3aWxsIHJldHVybiB3aXRoIHRoZSBlcnJvciBjb2RlIDxhIGhyZWY9IiNaX0RBVEFfRVJST1IiPlpfREFUQV9FUlJPUjwvYT4gaW5zdGVhZCBvZgorICAgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgbGFyZ2VyIHdpbmRvdy48cD4KKworICAgICAgPGEgaHJlZj0iI2luZmxhdGVJbml0MiI+aW5mbGF0ZUluaXQyPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGEgbmVnYXRpdmUKKyAgIG1lbUxldmVsKS4gPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgPGEgaHJlZj0iI2luZmxhdGVJbml0MiI+aW5mbGF0ZUluaXQyPC9hPgorICAgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbiBhcGFydCBmcm9tIHJlYWRpbmcgdGhlIHpsaWIgaGVhZGVyIGlmCisgICBwcmVzZW50OiB0aGlzIHdpbGwgYmUgZG9uZSBieSA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKS4gKFNvIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gbWF5IGJlCisgICBtb2RpZmllZCwgYnV0IDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IGFyZSB1bmNoYW5nZWQuKTxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJpbmZsYXRlU2V0RGljdGlvbmFyeSI+aW5mbGF0ZVNldERpY3Rpb25hcnk8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LCB1SW50ICBkaWN0TGVuZ3RoKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEluaXRpYWxpemVzIHRoZSBkZWNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gdW5jb21wcmVzc2VkIGJ5dGUKKyAgIHNlcXVlbmNlLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4KKyAgIGlmIHRoaXMgY2FsbCByZXR1cm5lZCA8YSBocmVmPSIjWl9ORUVEX0RJQ1QiPlpfTkVFRF9ESUNUPC9hPi4gVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yCisgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBBZGxlcjMyIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbCBvZgorICAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+LiBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKKyAgIGRpY3Rpb25hcnkgKHNlZSA8YSBocmVmPSIjZGVmbGF0ZVNldERpY3Rpb25hcnkiPmRlZmxhdGVTZXREaWN0aW9uYXJ5PC9hPikuPHA+CisKKyAgICAgPGEgaHJlZj0iI2luZmxhdGVTZXREaWN0aW9uYXJ5Ij5pbmZsYXRlU2V0RGljdGlvbmFyeTwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgYQorICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGlzCisgICBpbmNvbnNpc3RlbnQsIDxhIGhyZWY9IiNaX0RBVEFfRVJST1IiPlpfREFUQV9FUlJPUjwvYT4gaWYgdGhlIGdpdmVuIGRpY3Rpb25hcnkgZG9lc24ndCBtYXRjaCB0aGUKKyAgIGV4cGVjdGVkIG9uZSAoaW5jb3JyZWN0IEFkbGVyMzIgdmFsdWUpLiA8YSBocmVmPSIjaW5mbGF0ZVNldERpY3Rpb25hcnkiPmluZmxhdGVTZXREaWN0aW9uYXJ5PC9hPiBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgc3Vic2VxdWVudCBjYWxscyBvZgorICAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkuPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iaW5mbGF0ZVN5bmMiPmluZmxhdGVTeW5jPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+CisKKzxkZD4gICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUgdGhlCisgIGRlc2NyaXB0aW9uIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiB3aXRoIDxhIGhyZWY9IiNaX0ZVTExfRkxVU0giPlpfRlVMTF9GTFVTSDwvYT4pIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiBObyBvdXRwdXQgaXMgcHJvdmlkZWQuPHA+CisKKyAgICA8YSBocmVmPSIjaW5mbGF0ZVN5bmMiPmluZmxhdGVTeW5jPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+CisgIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLAorICBvciA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LiBJbiB0aGUgc3VjY2VzcworICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZiA8YSBocmVmPSIjdG90YWxfaW4iPnRvdGFsX2luPC9hPiB3aGljaAorICBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gSW4gdGhlIGVycm9yIGNhc2UsIHRoZQorICBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIDxhIGhyZWY9IiNpbmZsYXRlU3luYyI+aW5mbGF0ZVN5bmM8L2E+LCBwcm92aWRpbmcgbW9yZSBpbnB1dCBlYWNoIHRpbWUsCisgIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImluZmxhdGVSZXNldCI+aW5mbGF0ZVJlc2V0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byA8YSBocmVmPSIjaW5mbGF0ZUVuZCI+aW5mbGF0ZUVuZDwvYT4gZm9sbG93ZWQgYnkgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4sCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGRlY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4uCisgICBUaGUgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgPGEgaHJlZj0iI2luZmxhdGVJbml0MiI+aW5mbGF0ZUluaXQyPC9hPi4KKyAgIDxwPgorCisgICAgICA8YSBocmVmPSIjaW5mbGF0ZVJlc2V0Ij5pbmZsYXRlUmVzZXQ8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIG9yIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gb3IgPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gYmVpbmcgTlVMTCkuCisgICA8cD4KKzwvZGw+CisKKzxocj4KKzxhIG5hbWU9IkNoZWNrc3VtIGZ1bmN0aW9ucyI+PGgyPiBDaGVja3N1bSBmdW5jdGlvbnMgPC9oMj4KKyAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcmVsYXRlZCB0byBjb21wcmVzc2lvbiBidXQgYXJlIGV4cG9ydGVkCisgICBhbnl3YXkgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIHVzZWZ1bCBpbiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlCisgICBjb21wcmVzc2lvbiBsaWJyYXJ5LgorPGgzPiBGdW5jdGlvbiBsaXN0IDwvaDM+Cis8dWw+Cis8bGk+IHVMb25nICA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gKHVMb25nIDxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+LCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbik7Cis8bGk+IHVMb25nICA8YSBocmVmPSIjY3JjMzIiPmNyYzMyPC9hPiAgICh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKTsKKzwvdWw+Cis8aDM+IEZ1bmN0aW9uIGRlc2NyaXB0aW9uIDwvaDM+Cis8ZGw+Cis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiB1TG9uZyAgPGEgbmFtZT0iYWRsZXIzMiI+YWRsZXIzMjwvYT4gKHVMb25nIDxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+LCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbik7PC9mb250PgorPGRkPgorICAgICBVcGRhdGUgYSBydW5uaW5nIEFkbGVyLTMyIGNoZWNrc3VtIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kCisgICByZXR1cm4gdGhlIHVwZGF0ZWQgY2hlY2tzdW0uIElmIGJ1ZiBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgIHRoZSByZXF1aXJlZCBpbml0aWFsIHZhbHVlIGZvciB0aGUgY2hlY2tzdW0uCisgICA8cD4KKyAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgIG11Y2ggZmFzdGVyLiBVc2FnZSBleGFtcGxlOgorICAgPHByZT4KKworICAgICB1TG9uZyA8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiA9IDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPigwTCwgPGEgaHJlZj0iI1pfTlVMTCI+Wl9OVUxMPC9hPiwgMCk7CisKKyAgICAgd2hpbGUgKHJlYWRfYnVmZmVyKGJ1ZmZlciwgbGVuZ3RoKSAhPSBFT0YpIHsKKyAgICAgICA8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiA9IDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPig8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiwgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmICg8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKKyAgIDwvcHJlPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiB1TG9uZyAgPGEgbmFtZT0iY3JjMzIiPmNyYzMyPC9hPiAgICh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgY3JjIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUgdXBkYXRlZAorICAgY3JjLiBJZiBidWYgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZCBpbml0aWFsIHZhbHVlCisgICBmb3IgdGhlIGNyYy4gUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZAorICAgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVXNhZ2UgZXhhbXBsZToKKyAgIDxwcmU+CisKKyAgICAgdUxvbmcgY3JjID0gPGEgaHJlZj0iI2NyYzMyIj5jcmMzMjwvYT4oMEwsIDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4sIDApOworCisgICAgIHdoaWxlIChyZWFkX2J1ZmZlcihidWZmZXIsIGxlbmd0aCkgIT0gRU9GKSB7CisgICAgICAgY3JjID0gPGEgaHJlZj0iI2NyYzMyIj5jcmMzMjwvYT4oY3JjLCBidWZmZXIsIGxlbmd0aCk7CisgICAgIH0KKyAgICAgaWYgKGNyYyAhPSBvcmlnaW5hbF9jcmMpIGVycm9yKCk7CisgICA8L3ByZT4KKzwvZGw+Cis8aHI+Cis8YSBuYW1lPSJzdHJ1Y3Qgel9zdHJlYW1fcyI+PGgyPiBzdHJ1Y3Qgel9zdHJlYW1fcyA8L2gyPgorPGZvbnQgY29sb3I9IkJsdWUiPgorPGEgbmFtZT0iel9zdHJlYW1fcyI+Cis8cHJlPgordHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7CisgICAgQnl0ZWYgICAgKjxhIG5hbWU9Im5leHRfaW4iPm5leHRfaW48L2E+OyAgLyogbmV4dCBpbnB1dCBieXRlICovCisgICAgdUludCAgICAgPGEgbmFtZT0iYXZhaWxfaW4iPmF2YWlsX2luPC9hPjsgIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+ICovCisgICAgdUxvbmcgICAgPGEgbmFtZT0idG90YWxfaW4iPnRvdGFsX2luPC9hPjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisKKyAgICBCeXRlZiAgICAqPGEgbmFtZT0ibmV4dF9vdXQiPm5leHRfb3V0PC9hPjsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCisgICAgdUludCAgICAgPGEgbmFtZT0iYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiAqLworICAgIHVMb25nICAgIDxhIG5hbWU9InRvdGFsX291dCI+dG90YWxfb3V0PC9hPjsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworCisgICAgY2hhciAgICAgKjxhIG5hbWU9Im1zZyI+bXNnPC9hPjsgICAgICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICo8YSBuYW1lPSJzdGF0ZSI+c3RhdGU8L2E+OyAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi8KKworICAgIGFsbG9jX2Z1bmMgPGEgbmFtZT0iemFsbG9jIj56YWxsb2M8L2E+OyAgLyogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gKi8KKyAgICBmcmVlX2Z1bmMgIDxhIG5hbWU9InpmcmVlIj56ZnJlZTwvYT47ICAgLyogdXNlZCB0byBmcmVlIHRoZSBpbnRlcm5hbCA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiAqLworICAgIHZvaWRwZiAgICAgPGEgbmFtZT0ib3BhcXVlIj5vcGFxdWU8L2E+OyAgLyogcHJpdmF0ZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBhbmQgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gKi8KKworICAgIGludCAgICAgPGEgbmFtZT0iZGF0YV90eXBlIj5kYXRhX3R5cGU8L2E+OyAgLyogYmVzdCBndWVzcyBhYm91dCB0aGUgZGF0YSB0eXBlOiBhc2NpaSBvciBiaW5hcnkgKi8KKyAgICB1TG9uZyAgIDxhIG5hbWU9ImFkbGVyIj5hZGxlcjwvYT47ICAgICAgLyogPGEgaHJlZj0iI2FkbGVyMzIiPmFkbGVyMzI8L2E+IHZhbHVlIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSAqLworICAgIHVMb25nICAgPGEgbmFtZT0icmVzZXJ2ZWQiPnJlc2VydmVkPC9hPjsgICAvKiA8YSBocmVmPSIjcmVzZXJ2ZWQiPnJlc2VydmVkPC9hPiBmb3IgZnV0dXJlIHVzZSAqLworfSA8YSBocmVmPSIjel9zdHJlYW1fcyI+el9zdHJlYW08L2E+IDsKKwordHlwZWRlZiA8YSBocmVmPSIjel9zdHJlYW1fcyI+el9zdHJlYW08L2E+IEZBUiAqIDxhIG5hbWU9Inpfc3RyZWFtcCI+el9zdHJlYW1wPC9hPjsgIP8gCis8L3ByZT4KKzwvZm9udD4KKyAgIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHVwZGF0ZSA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IHdoZW4gPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gaGFzCisgICBkcm9wcGVkIHRvIHplcm8uIEl0IG11c3QgdXBkYXRlIDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IHdoZW4gPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPgorICAgaGFzIGRyb3BwZWQgdG8gemVyby4gVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhbmQKKyAgIDxhIGhyZWY9IiNvcGFxdWUiPm9wYXF1ZTwvYT4gYmVmb3JlIGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24uIEFsbCBvdGhlciBmaWVsZHMgYXJlIHNldCBieSB0aGUKKyAgIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIG11c3Qgbm90IGJlIHVwZGF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiA8cD4KKworICAgVGhlIDxhIGhyZWY9IiNvcGFxdWUiPm9wYXF1ZTwvYT4gdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdAorICAgcGFyYW1ldGVyIGZvciBjYWxscyBvZiA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IGFuZCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPi4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjdXN0b20KKyAgIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBtZWFuaW5nIHRvIHRoZQorICAgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiB2YWx1ZS4gPHA+CisKKyAgIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gbXVzdCByZXR1cm4gPGEgaHJlZj0iI1pfTlVMTCI+Wl9OVUxMPC9hPiBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG9iamVjdC4KKyAgIElmIHpsaWIgaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLCA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IGFuZCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBtdXN0IGJlCisgICB0aHJlYWQgc2FmZS4gPHA+CisKKyAgIE9uIDE2LWJpdCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb25zIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gYW5kIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+IG11c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzCisgICBpZiB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiBXQVJOSU5HOiBPbiBNU0RPUywKKyAgIHBvaW50ZXJzIHJldHVybmVkIGJ5IDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gZm9yIG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCoKKyAgIGhhdmUgdGhlaXIgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gVGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbgorICAgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5IGVuc3VyZXMgdGhpcyAoc2VlIHp1dGlsLmMpLiBUbyByZWR1Y2UgbWVtb3J5CisgICByZXF1aXJlbWVudHMgYW5kIGF2b2lkIGFueSBhbGxvY2F0aW9uIG9mIDY0SyBvYmplY3RzLCBhdCB0aGUgZXhwZW5zZSBvZgorICAgY29tcHJlc3Npb24gcmF0aW8sIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCAtRE1BWF9XQklUUz0xNCAoc2VlIHpjb25mLmgpLgorICAgPHA+CisKKyAgIFRoZSBmaWVsZHMgPGEgaHJlZj0iI3RvdGFsX2luIj50b3RhbF9pbjwvYT4gYW5kIDxhIGhyZWY9IiN0b3RhbF9vdXQiPnRvdGFsX291dDwvYT4gY2FuIGJlIHVzZWQgZm9yIHN0YXRpc3RpY3Mgb3IKKyAgIHByb2dyZXNzIHJlcG9ydHMuIEFmdGVyIGNvbXByZXNzaW9uLCA8YSBocmVmPSIjdG90YWxfaW4iPnRvdGFsX2luPC9hPiBob2xkcyB0aGUgdG90YWwgc2l6ZSBvZgorICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFuZCBtYXkgYmUgc2F2ZWQgZm9yIHVzZSBpbiB0aGUgZGVjb21wcmVzc29yCisgICAocGFydGljdWxhcmx5IGlmIHRoZSBkZWNvbXByZXNzb3Igd2FudHMgdG8gZGVjb21wcmVzcyBldmVyeXRoaW5nIGluCisgICBhIHNpbmdsZSBzdGVwKS4gPHA+CisKKzxocj4KKzxhIG5hbWU9IkNvbnN0YW50cyI+PGgyPiBDb25zdGFudHMgPC9oMj4KKzxmb250IGNvbG9yPSJCbHVlIj4KKzxwcmU+CisjZGVmaW5lIDxhIG5hbWU9IlpfTk9fRkxVU0giPlpfTk9fRkxVU0g8L2E+ICAgICAgMAorI2RlZmluZSA8YSBuYW1lPSJaX1BBUlRJQUxfRkxVU0giPlpfUEFSVElBTF9GTFVTSDwvYT4gMSAKKwkvKiB3aWxsIGJlIHJlbW92ZWQsIHVzZSA8YSBocmVmPSIjWl9TWU5DX0ZMVVNIIj5aX1NZTkNfRkxVU0g8L2E+IGluc3RlYWQgKi8KKyNkZWZpbmUgPGEgbmFtZT0iWl9TWU5DX0ZMVVNIIj5aX1NZTkNfRkxVU0g8L2E+ICAgIDIKKyNkZWZpbmUgPGEgbmFtZT0iWl9GVUxMX0ZMVVNIIj5aX0ZVTExfRkxVU0g8L2E+ICAgIDMKKyNkZWZpbmUgPGEgbmFtZT0iWl9GSU5JU0giPlpfRklOSVNIPC9hPiAgICAgICAgNAorLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXMgOyBzZWUgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KKworI2RlZmluZSA8YSBuYW1lPSJaX09LIj5aX09LPC9hPiAgICAgICAgICAgIDAKKyNkZWZpbmUgPGEgbmFtZT0iWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+ICAgIDEKKyNkZWZpbmUgPGEgbmFtZT0iWl9ORUVEX0RJQ1QiPlpfTkVFRF9ESUNUPC9hPiAgICAgMgorI2RlZmluZSA8YSBuYW1lPSJaX0VSUk5PIj5aX0VSUk5PPC9hPiAgICAgICAgKC0xKQorI2RlZmluZSA8YSBuYW1lPSJaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+ICgtMikKKyNkZWZpbmUgPGEgbmFtZT0iWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+ICAgKC0zKQorI2RlZmluZSA8YSBuYW1lPSJaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+ICAgICgtNCkKKyNkZWZpbmUgPGEgbmFtZT0iWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPiAgICAoLTUpCisjZGVmaW5lIDxhIG5hbWU9IlpfVkVSU0lPTl9FUlJPUiI+Wl9WRVJTSU9OX0VSUk9SPC9hPiAoLTYpCisvKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUKKyAqIHZhbHVlcyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCisgKi8KKworI2RlZmluZSA8YSBuYW1lPSJaX05PX0NPTVBSRVNTSU9OIj5aX05PX0NPTVBSRVNTSU9OPC9hPiAgICAgICAgIDAKKyNkZWZpbmUgPGEgbmFtZT0iWl9CRVNUX1NQRUVEIj5aX0JFU1RfU1BFRUQ8L2E+ICAgICAgICAgICAgIDEKKyNkZWZpbmUgPGEgbmFtZT0iWl9CRVNUX0NPTVBSRVNTSU9OIj5aX0JFU1RfQ09NUFJFU1NJT048L2E+ICAgICAgIDkKKyNkZWZpbmUgPGEgbmFtZT0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIj5aX0RFRkFVTFRfQ09NUFJFU1NJT048L2E+ICAoLTEpCisvKiBjb21wcmVzc2lvbiBsZXZlbHMgKi8KKworI2RlZmluZSA8YSBuYW1lPSJaX0ZJTFRFUkVEIj5aX0ZJTFRFUkVEPC9hPiAgICAgICAgICAgIDEKKyNkZWZpbmUgPGEgbmFtZT0iWl9IVUZGTUFOX09OTFkiPlpfSFVGRk1BTl9PTkxZPC9hPiAgICAgICAgMgorI2RlZmluZSA8YSBuYW1lPSJaX0RFRkFVTFRfU1RSQVRFR1kiPlpfREVGQVVMVF9TVFJBVEVHWTwvYT4gICAgMAorLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgOyBzZWUgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPigpIGJlbG93IGZvciBkZXRhaWxzICovCisKKyNkZWZpbmUgPGEgbmFtZT0iWl9CSU5BUlkiPlpfQklOQVJZPC9hPiAgIDAKKyNkZWZpbmUgPGEgbmFtZT0iWl9BU0NJSSI+Wl9BU0NJSTwvYT4gICAgMQorI2RlZmluZSA8YSBuYW1lPSJaX1VOS05PV04iPlpfVU5LTk9XTjwvYT4gIDIKKy8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgPGEgaHJlZj0iI2RhdGFfdHlwZSI+ZGF0YV90eXBlPC9hPiBmaWVsZCAqLworCisjZGVmaW5lIDxhIG5hbWU9IlpfREVGTEFURUQiPlpfREVGTEFURUQ8L2E+ICAgOAorLyogVGhlIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiBjb21wcmVzc2lvbiBtZXRob2QgKHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKSAqLworCisjZGVmaW5lIDxhIG5hbWU9IlpfTlVMTCI+Wl9OVUxMPC9hPiAgMCAgLyogZm9yIGluaXRpYWxpemluZyA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiwgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiAqLworCisjZGVmaW5lIDxhIG5hbWU9InpsaWJfdmVyc2lvbiI+emxpYl92ZXJzaW9uPC9hPiA8YSBocmVmPSIjemxpYlZlcnNpb24iPnpsaWJWZXJzaW9uPC9hPigpCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGxlc3MgdGhhbiAxLjAuMiAqLworPC9wcmU+Cis8L2ZvbnQ+CisKKzxocj4KKzxhIG5hbWU9Ik1pc2MiPjxoMj4gTWlzYyA8L2gyPgorIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IGFuZCA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiBhcmUgbWFjcm9zIHRvIGFsbG93IGNoZWNraW5nIHRoZSB6bGliIHZlcnNpb24KKyBhbmQgdGhlIGNvbXBpbGVyJ3MgdmlldyBvZiA8YSBocmVmPSIjel9zdHJlYW1fcyI+el9zdHJlYW08L2E+LgorIDxwPgorIE90aGVyIGZ1bmN0aW9uczoKKyA8ZGw+CisgPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gY29uc3QgY2hhciAgICogIDxhIG5hbWU9InpFcnJvciI+ekVycm9yPC9hPiAgICAgICAgICAgKGludCBlcnIpOzwvZm9udD4KKyA8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgICAgICAgICAgICAgPGEgbmFtZT0iaW5mbGF0ZVN5bmNQb2ludCI+aW5mbGF0ZVN5bmNQb2ludDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4geik7PC9mb250PgorIDxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGNvbnN0IHVMb25nZiAqICA8YSBuYW1lPSJnZXRfY3JjX3RhYmxlIj5nZXRfY3JjX3RhYmxlPC9hPiAgICAodm9pZCk7PC9mb250PgorIDwvZGw+CisgPGhyPgorIDxmb250IHNpemU9Ii0xIj4KKyBMYXN0IHVwZGF0ZTogV2VkIE9jdCAxMyAyMDo0MjozNCAxOTk5PGJyPgorIHBpYXBpQGNzaWUubnR1LmVkdS50dworIDwvZm9udD4KKworPC9ib2R5PgorPC9odG1sPgo=