ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NzM4NmEyLi5iZjJlM2Y5IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMTYgQEAKIAogCQlDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMS40ICgxMSBNYXJjaCAyMDAyKQorLSBaRlJFRSB3YXMgcmVwZWF0ZWQgb24gc2FtZSBhbGxvY2F0aW9uIG9uIHNvbWUgZXJyb3IgY29uZGl0aW9ucy4KKyAgVGhpcyBjcmVhdGVzIGEgc2VjdXJpdHkgcHJvYmxlbSBkZXNjcmliZWQgaW4KKyAgaHR0cDovL3d3dy56bGliLm9yZy9hZHZpc29yeS0yMDAyLTAzLTExLnR4dAorLSBSZXR1cm5lZCBpbmNvcnJlY3QgZXJyb3IgKFpfTUVNX0VSUk9SKSBvbiBzb21lIGludmFsaWQgZGF0YQorLSBBdm9pZCBhY2Nlc3NlcyBiZWZvcmUgd2luZG93IGZvciBpbnZhbGlkIGRpc3RhbmNlcyB3aXRoIGluZmxhdGUgd2luZG93CisgIGxlc3MgdGhhbiAzMksuCistIGZvcmNlIHdpbmRvd0JpdHMgPiA4IHRvIGF2b2lkIGEgYnVnIGluIHRoZSBlbmNvZGVyIGZvciBhIHdpbmRvdyBzaXplCisgIG9mIDI1NiBieXRlcy4gKEEgY29tcGxldGUgZml4IHdpbGwgYmUgYXZhaWxhYmxlIGluIDEuMS41KS4KKwkKIENoYW5nZXMgaW4gMS4xLjMgKDkgSnVseSAxOTk4KQogLSBmaXggImFuIGluZmxhdGUgaW5wdXQgYnVmZmVyIGJ1ZyB0aGF0IHNob3dzIHVwIG9uIHJhcmUgYnV0IHBlcnNpc3RlbnQKICAgb2NjYXNpb25zIiAoTWFyaykKZGlmZiAtLWdpdCBhL0ZBUSBiL0ZBUQppbmRleCAwZmViNmQzLi40N2E3ZDYwIDEwMDY0NAotLS0gYS9GQVEKKysrIGIvRkFRCkBAIC0zLDcwICszLDk4IEBACiAKIAogSWYgeW91ciBxdWVzdGlvbiBpcyBub3QgdGhlcmUsIHBsZWFzZSBjaGVjayB0aGUgemxpYiBob21lIHBhZ2UgCi1odHRwOi8vd3d3LmNkcm9tLmNvbS9wdWIvaW5mb3ppcC96bGliLyB3aGljaCBtYXkgaGF2ZSBtb3JlIHJlY2VudCBpbmZvcm1hdGlvbi4KK2h0dHA6Ly93d3cuemxpYi5vcmcgd2hpY2ggbWF5IGhhdmUgbW9yZSByZWNlbnQgaW5mb3JtYXRpb24uCitUaGUgbGFzdGVzdCB6bGliIEZBUSBpcyBhdCBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvemxpYl9mYXEuaHRtbAogCiAKLTEpIEkgbmVlZCBhIFdpbmRvd3MgRExMCi0yKSBJIG5lZWQgYSBWaXN1YWwgQmFzaWMgaW50ZXJmYWNlIHRvIHpsaWIKLTMpIGNvbXByZXNzKCkgcmV0dXJucyBaX0JVRl9FUlJPUgotNCkgZGVmbGF0ZSBvciBpbmZsYXRlIHJldHVybnMgWl9CVUZfRVJST1IKLTUpIFdoZXJlIGlzIHRoZSB6bGliIGRvY3VtZW50YXRpb24gKG1hbiBwYWdlcywgZXRjLi4uKT8KLTYpIFdoeSBkb24ndCB5b3UgdXNlIEdOVSBhdXRvY29uZiwgbGlidG9vbCwgZXRjLi4uPwotNykgVGhlcmUgaXMgYSBidWcgaW4gemxpYi4KLTgpIEkgZ2V0ICJ1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGd6cHV0YyIKKyAxLiBJcyB6bGliIFkySy1jb21wbGlhbnQ/CiAKKyAgICBZZXMuIHpsaWIgZG9lc24ndCBoYW5kbGUgZGF0ZXMuCiAKKyAyLiBXaGVyZSBjYW4gSSBnZXQgYSBXaW5kb3dzIERMTCB2ZXJzaW9uPwogCi0xKSBJIG5lZWQgYSBXaW5kb3dzIERMTAorICAgIFRoZSB6bGliIHNvdXJjZXMgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgY2hhbmdlIHRvIHByb2R1Y2UgYSBETEwuIElmIHlvdQorICAgIHdhbnQgYSBwcmVjb21waWxlZCBETEwsIHNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsLyAuIFF1ZXN0aW9ucworICAgIGFib3V0IHRoZSB6bGliIERMTCBzaG91bGQgYmUgc2VudCB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgogCi0gIFRoZSB6bGliIHNvdXJjZXMgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgY2hhbmdlIHRvIHByb2R1Y2UgYSBETEwuCi0gIElmIHlvdSB3YW50IGEgcHJlY29tcGlsZWQgRExMLCBzZWUgaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbAorIDMuIFdoZXJlIGNhbiBJIGdldCBhIFZpc3VhbCBCYXNpYyBpbnRlcmZhY2UgdG8gemxpYj8KIAorICAgIFNlZQorICAgICAgICAqIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvY21wLXotaXQuemlwCisgICAgICAgICogaHR0cDovL3d3dy5kb2dtYS5uZXQvbWFya24vYXJ0aWNsZXMvemxpYnRvb2wvemxpYnRvb2wuaHRtCisgICAgICAgICogY29udHJpYi92aXN1YWwtYmFzaWMudHh0IGluIHRoZSB6bGliIGRpc3RyaWJ1dGlvbgogCi0yKSBJIG5lZWQgYSBWaXN1YWwgQmFzaWMgaW50ZXJmYWNlIHRvIHpsaWIKKyA0LiBjb21wcmVzcygpIHJldHVybnMgWl9CVUZfRVJST1IKIAotICBTZWUgaHR0cDovL3d3dy50Y2ZiLmNvbS9kb3dzZXdhcmUvY21wLXotaXQuemlwCi0gICAgICBodHRwOi8vd2ViMi5haXJtYWlsLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96bGlidG9vbC5odG0KLSAgYW5kIGNvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dAorICAgIE1ha2Ugc3VyZSB0aGF0IGJlZm9yZSB0aGUgY2FsbCBvZiBjb21wcmVzcywgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZAorICAgIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIgYW5kIG5vdAorICAgIHplcm8uIEZvciBWaXN1YWwgQmFzaWMsIGNoZWNrIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZQorICAgICgiYXMgYW55IiksIG5vdCBieSB2YWx1ZSAoImFzIGxvbmciKS4KIAotMykgY29tcHJlc3MoKSByZXR1cm5zIFpfQlVGX0VSUk9SCisgNS4gZGVmbGF0ZSgpIG9yIGluZmxhdGUoKSByZXR1cm5zIFpfQlVGX0VSUk9SCiAKLSAgTWFrZSBzdXJlIHRoYXQgYmVmb3JlIHRoZSBjYWxsIG9mIGNvbXByZXNzLCB0aGUgbGVuZ3RoIG9mIHRoZQotICBjb21wcmVzc2VkIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIKLSAgYW5kIG5vdCB6ZXJvLiAgRm9yIFZpc3VhbCBCYXNpYywgY2hlY2sgdGhhdCB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQKLSAgYnkgcmVmZXJlbmNlICgiYXMgYW55IiksIG5vdCBieSB2YWx1ZSAoImFzIGxvbmciKS4KKyAgICBCZWZvcmUgbWFraW5nIHRoZSBjYWxsLCBtYWtlIHN1cmUgdGhhdCBhdmFpbF9pbiBhbmQgYXZhaWxfb3V0IGFyZSBub3QKKyAgICB6ZXJvLiBXaGVuIHNldHRpbmcgdGhlIHBhcmFtZXRlciBmbHVzaCBlcXVhbCB0byBaX0ZJTklTSCwgYWxzbyBtYWtlIHN1cmUKKyAgICB0aGF0IGF2YWlsX291dCBpcyBiaWcgZW5vdWdoIHRvIGFsbG93IHByb2Nlc3NpbmcgYWxsIHBlbmRpbmcgaW5wdXQuCiAKKyA2LiBXaGVyZSdzIHRoZSB6bGliIGRvY3VtZW50YXRpb24gKG1hbiBwYWdlcywgZXRjLik/CiAKLTQpIGRlZmxhdGUgb3IgaW5mbGF0ZSByZXR1cm5zIFpfQlVGX0VSUk9SCisgICAgSXQncyBpbiB6bGliLmggZm9yIHRoZSBtb21lbnQsIGFuZCBGcmFuY2lzIFMuIExpbiBoYXMgY29udmVydGVkIGl0IHRvIGEKKyAgICB3ZWIgcGFnZSB6bGliLmh0bWwuIFZvbHVudGVlcnMgdG8gdHJhbnNmb3JtIHRoaXMgdG8gVW5peC1zdHlsZSBtYW4gcGFnZXMsCisgICAgcGxlYXNlIGNvbnRhY3QgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpLiBFeGFtcGxlcyBvZiB6bGliIHVzYWdlCisgICAgYXJlIGluIHRoZSBmaWxlcyBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMuCiAKLSAgTWFrZSBzdXJlIHRoYXQgYmVmb3JlIHRoZSBjYWxsIGF2YWlsX2luIGFuZCBhdmFpbF9vdXQgYXJlIG5vdCB6ZXJvLgorIDcuIFdoeSBkb24ndCB5b3UgdXNlIEdOVSBhdXRvY29uZiBvciBsaWJ0b29sIG9yIC4uLj8KIAorICAgIEJlY2F1c2Ugd2Ugd291bGQgbGlrZSB0byBrZWVwIHpsaWIgYXMgYSB2ZXJ5IHNtYWxsIGFuZCBzaW1wbGUKKyAgICBwYWNrYWdlLiB6bGliIGlzIHJhdGhlciBwb3J0YWJsZSBhbmQgZG9lc24ndCBuZWVkIG11Y2ggY29uZmlndXJhdGlvbi4KIAotNSkgV2hlcmUgaXMgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBldGMuLi4pPworIDguIEkgZm91bmQgYSBidWcgaW4gemxpYi4KIAotICBJdCdzIGluIHpsaWIuaCBmb3IgdGhlIG1vbWVudC4gVm9sdW50ZWVycyB0byB0cmFuc2Zvcm0gdGhpcwotICB0byBtYW4gcGFnZXMsIHBsZWFzZSBjb250YWN0IGpsb3VwQGd6aXAub3JnLiBFeGFtcGxlcyBvZiB6bGliIHVzYWdlCi0gIGFyZSBpbiB0aGUgZmlsZXMgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jLgorICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHN1Y2ggcHJvYmxlbXMgYXJlIGR1ZSB0byBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YKKyAgICB6bGliLiBQbGVhc2UgdHJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGEgc21hbGwgcHJvZ3JhbSBhbmQgc2VuZAorICAgIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSB0byB1cyBhdCB6bGliQGd6aXAub3JnIC4gRG8gbm90IHNlbmQKKyAgICBtdWx0aS1tZWdhYnl0ZSBkYXRhIGZpbGVzIHdpdGhvdXQgcHJpb3IgYWdyZWVtZW50LgogCisgOS4gV2h5IGRvIEkgZ2V0ICJ1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGd6cHV0YyI/CiAKLTYpIFdoeSBkb24ndCB5b3UgdXNlIEdOVSBhdXRvY29uZiwgbGlidG9vbCwgZXRjLi4uPworICAgIElmICJtYWtlIHRlc3QiIHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlCiAKLSAgQmVjYXVzZSB3ZSB3b3VsZCBsaWtlIHRvIGtlZXAgemxpYiBhcyBhIHZlcnkgc21hbGwgYW5kIHNpbXBsZSBwYWNrYWdlLgotICB6bGliIGlzIHJhdGhlciBwb3J0YWJsZSBhbmQgZG9lc24ndCBuZWVkIG11Y2ggY29uZmlndXJhdGlvbi4KKyAgICAgICBleGFtcGxlLm8oLnRleHQrMHgxNTQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnenB1dGMnCisgICAgICAKKyAgICBjaGVjayB0aGF0IHlvdSBkb24ndCBoYXZlIG9sZCBmaWxlcyBsaWJ6LiogaW4gL3Vzci9saWIsIC91c3IvbG9jYWwvbGliIG9yCisgICAgL3Vzci9YMTFSNi9saWIuIFJlbW92ZSBhbnkgb2xkIHZlcnNpb25zLCB0aGVuIGRvICJtYWtlIGluc3RhbGwiLgogCisxMC4gSSBuZWVkIGEgRGVscGhpIGludGVyZmFjZSB0byB6bGliLgogCi03KSBUaGVyZSBpcyBhIGJ1ZyBpbiB6bGliLgorICAgIFNlZSB0aGUgZGlyZWN0b3JpZXMgY29udHJpYi9kZWxwaGkgYW5kIGNvbnRyaWIvZGVscGhpMiBpbiB0aGUgemxpYgorICAgIGRpc3RyaWJ1dGlvbi4KIAotICBNb3N0IG9mIHRoZSB0aW1lLCBzdWNoIHByb2JsZW1zIGFyZSBkdWUgdG8gYW4gaW5jb3JyZWN0IHVzYWdlCi0gIG9mIHpsaWIuIFBsZWFzZSB0cnkgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHdpdGggYSBzbWFsbAotICBwcm9ncmFtIGFuZCBzZW5kIHVzIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBhdCB6bGliQHF1ZXN0LmpwbC5uYXNhLmdvdgotICBEbyBub3Qgc2VuZCBtdWx0aS1tZWdhYnl0ZSBkYXRhIGZpbGVzIHdpdGhvdXQgcHJpb3IgYWdyZWVtZW50LgorMTEuIENhbiB6bGliIGhhbmRsZSAuemlwIGFyY2hpdmVzPwogCisgICAgU2VlIHRoZSBkaXJlY3RvcnkgY29udHJpYi9taW5pemlwIGluIHRoZSB6bGliIGRpc3RyaWJ1dGlvbi4KIAotOCkgSSBnZXQgInVuZGVmaW5lZCByZWZlcmVuY2UgdG8gZ3pwdXRjIgorMTIuIENhbiB6bGliIGhhbmRsZSAuWiBmaWxlcz8KIAotICBJZiAibWFrZSB0ZXN0IiBwcm9kdWNlcyBzb21ldGhpbmcgbGlrZQotICAgICBleGFtcGxlLm8oLnRleHQrMHgxNzQpOiAKLSAgY2hlY2sgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBvbGQgZmlsZXMgbGliei4qIGluIC91c3IvbGliLCAvdXNyL2xvY2FsL2xpYgotICBvciAvdXNyL1gxMVI2L2xpYi4gUmVtb3ZlIG9sZCB2ZXJzaW9ucyB0aGVuIGRvICJtYWtlIGluc3RhbGwiLgorICAgIE5vLCBzb3JyeS4gWW91IGhhdmUgdG8gc3Bhd24gYW4gdW5jb21wcmVzcyBvciBndW56aXAgc3VicHJvY2Vzcywgb3IgYWRhcHQKKyAgICB0aGUgY29kZSBvZiB1bmNvbXByZXNzIG9uIHlvdXIgb3duLgogCisxMy4gSG93IGNhbiBJIG1ha2UgYSBVbml4IHNoYXJlZCBsaWJyYXJ5PworCisgICAgbWFrZSBjbGVhbgorICAgIC4vY29uZmlndXJlIC1zCisgICAgbWFrZQorCisxNC4gV2h5IGRvZXMgIm1ha2UgdGVzdCIgZmFpbCBvbiBNYWMgT1MgWD8KKworICAgIE1hYyBPUyBYIGFscmVhZHkgaW5jbHVkZXMgemxpYiBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBhbmQgc28gLWx6IGxpbmtzIHRoZQorICAgIHNoYXJlZCBsaWJyYXJ5IGluc3RlYWQgb2YgdGhlIG9uZSB0aGF0IHRoZSAibWFrZSIgY29tcGlsZWQuIEZvciB6bGliCisgICAgMS4xLjMsIHRoZSB0d28gYXJlIGluY29tcGF0aWJsZSBkdWUgdG8gZGlmZmVyZW50IGNvbXBpbGUtdGltZQorICAgIG9wdGlvbnMuIFNpbXBseSBjaGFuZ2UgdGhlIC1seiBpbiB0aGUgTWFrZWZpbGUgdG8gbGliei5hLCBhbmQgaXQgd2lsbCB1c2UKKyAgICB0aGUgY29tcGlsZWQgbGlicmFyeSBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgb25lIGFuZCB0aGUgIm1ha2UgdGVzdCIgd2lsbAorICAgIHN1Y2NlZWQuCisKKzE1LiBJIGhhdmUgYSBxdWVzdGlvbiBhYm91dCBPdHRvUERGCisKKyAgICBXZSBhcmUgbm90IHRoZSBhdXRob3JzIG9mIE90dG9QREYuIFRoZSByZWFsIGF1dGhvciBpcyBvbiB0aGUgT3R0b1BERiB3ZWIKKyAgICBzaXRlIEpvZWwgSGFpbmxleSBqaGFpbmxleUBteW5ka3J5bWUuY29tLgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAzYTNiMTE2Li41MzE1NjJiIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseS4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMjQsNyArMjQsNyBAQAogTERTSEFSRUQ9JChDQykKIENQUD0kKENDKSAtRQogCi1WRVI9MS4xLjMKK1ZFUj0xLjEuNAogTElCUz1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCiAKQEAgLTQ3LDcgKzQ3LDggQEAKIFRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCiAKIERJU1RGSUxFUyA9IFJFQURNRSBGQVEgSU5ERVggQ2hhbmdlTG9nIGNvbmZpZ3VyZSBNYWtlKlthLXowLTldICouW2NoXSAqLm1tcyBcCi0gIGFsZ29yaXRobS50eHQgemxpYi4zIG1zZG9zL01ha2UqW2EtejAtOV0gbXNkb3MvemxpYi5kZWYgbXNkb3MvemxpYi5yYyBcCisgIGFsZ29yaXRobS50eHQgemxpYi4zIHpsaWIuaHRtbCBcCisgIG1zZG9zL01ha2UqW2EtejAtOV0gbXNkb3MvemxpYi5kZWYgbXNkb3MvemxpYi5yYyBcCiAgIG50L01ha2UqW2EtejAtOV0gbnQvemxpYi5kbnQgYW1pZ2EvTWFrZSouPz8/IG9zMi9NKi5vczIgb3MyL3psaWIuZGVmIFwKICAgY29udHJpYi9SRSouY29udHJpYiBjb250cmliLyoudHh0IGNvbnRyaWIvYXNtMzg2LyouYXNtIGNvbnRyaWIvYXNtMzg2LyouYyBcCiAgIGNvbnRyaWIvYXNtMzg2LyouYmF0IGNvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kPz8gY29udHJpYi9hc21bNTZdODYvKi4/ODYgXApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCAzYTNiMTE2Li41MzE1NjJiIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseS4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMjQsNyArMjQsNyBAQAogTERTSEFSRUQ9JChDQykKIENQUD0kKENDKSAtRQogCi1WRVI9MS4xLjMKK1ZFUj0xLjEuNAogTElCUz1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCiAKQEAgLTQ3LDcgKzQ3LDggQEAKIFRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCiAKIERJU1RGSUxFUyA9IFJFQURNRSBGQVEgSU5ERVggQ2hhbmdlTG9nIGNvbmZpZ3VyZSBNYWtlKlthLXowLTldICouW2NoXSAqLm1tcyBcCi0gIGFsZ29yaXRobS50eHQgemxpYi4zIG1zZG9zL01ha2UqW2EtejAtOV0gbXNkb3MvemxpYi5kZWYgbXNkb3MvemxpYi5yYyBcCisgIGFsZ29yaXRobS50eHQgemxpYi4zIHpsaWIuaHRtbCBcCisgIG1zZG9zL01ha2UqW2EtejAtOV0gbXNkb3MvemxpYi5kZWYgbXNkb3MvemxpYi5yYyBcCiAgIG50L01ha2UqW2EtejAtOV0gbnQvemxpYi5kbnQgYW1pZ2EvTWFrZSouPz8/IG9zMi9NKi5vczIgb3MyL3psaWIuZGVmIFwKICAgY29udHJpYi9SRSouY29udHJpYiBjb250cmliLyoudHh0IGNvbnRyaWIvYXNtMzg2LyouYXNtIGNvbnRyaWIvYXNtMzg2LyouYyBcCiAgIGNvbnRyaWIvYXNtMzg2LyouYmF0IGNvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kPz8gY29udHJpYi9hc21bNTZdODYvKi4/ODYgXApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDhmZjQ1ODcuLjI5ZDY3MTQgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNyArMSw3IEBACi16bGliIDEuMS4zIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZQoremxpYiAxLjEuNCBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUKIGlzIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeQogaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIAotZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZQoraHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUKIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuIFRoZXNlIGRvY3VtZW50cyBhcmUgYWxzbyBhdmFpbGFibGUgaW4KIG90aGVyIGZvcm1hdHMgZnJvbSBmdHA6Ly9mdHAudXUubmV0L2dyYXBoaWNzL3BuZy9kb2N1bWVudHMvemxpYi96ZG9jLWluZGV4Lmh0bWwKIApAQCAtMTQsNTEgKzE0LDUwIEBACiAKIFRvIGNvbXBpbGUgYWxsIGZpbGVzIGFuZCBydW4gdGhlIHRlc3QgcHJvZ3JhbSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKIGdpdmVuIGF0IHRoZSB0b3Agb2YgTWFrZWZpbGUuIEluIHNob3J0ICJtYWtlIHRlc3Q7IG1ha2UgaW5zdGFsbCIKLXNob3VsZCB3b3JrIGZvciBtb3N0IG1hY2hpbmVzLiBGb3IgVW5peDogImNvbmZpZ3VyZTsgbWFrZSB0ZXN0OyBtYWtlIGluc3RhbGwiCitzaG91bGQgd29yayBmb3IgbW9zdCBtYWNoaW5lcy4gRm9yIFVuaXg6ICIuL2NvbmZpZ3VyZTsgbWFrZSB0ZXN0OyBtYWtlIGluc3RhbGwiCiBGb3IgTVNET1MsIHVzZSBvbmUgb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIHN1Y2ggYXMgTWFrZWZpbGUubXNjLgogRm9yIFZNUywgdXNlIE1ha2Vfdm1zLmNvbSBvciBkZXNjcmlwLm1tcy4KIAotUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAcXVlc3QuanBsLm5hc2EuZ292Piwgb3IgdG8KK1F1ZXN0aW9ucyBhYm91dCB6bGliIHNob3VsZCBiZSBzZW50IHRvIDx6bGliQGd6aXAub3JnPiwgb3IgdG8KIEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4gZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uLgotVGhlIHpsaWIgaG9tZSBwYWdlIGlzIGh0dHA6Ly93d3cuY2Ryb20uY29tL3B1Yi9pbmZvemlwL3psaWIvCi1UaGUgb2ZmaWNpYWwgemxpYiBmdHAgc2l0ZSBpcyBmdHA6Ly9mdHAuY2Ryb20uY29tL3B1Yi9pbmZvemlwL3psaWIvCi1CZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwgcGxlYXNlIGNoZWNrIHRob3NlIHNpdGVzIHRvIHZlcmlmeSB0aGF0CitUaGUgemxpYiBob21lIHBhZ2UgaXMgaHR0cDovL3d3dy56bGliLm9yZyBvciBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvCitCZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwgcGxlYXNlIGNoZWNrIHRoaXMgc2l0ZSB0byB2ZXJpZnkgdGhhdAogeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHpsaWI7IG90aGVyd2lzZSBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZAogY2hlY2sgd2hldGhlciB0aGUgcHJvYmxlbSBzdGlsbCBleGlzdHMgb3Igbm90LgogCi1NYXJrIE5lbHNvbiA8bWFya25AdGlueS5jb20+IHdyb3RlIGFuIGFydGljbGUgYWJvdXQgemxpYiBmb3IgdGhlIEphbi4gMTk5NworUExFQVNFIHJlYWQgdGhlIHpsaWIgRkFRIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi96bGliX2ZhcS5odG1sCitiZWZvcmUgYXNraW5nIGZvciBoZWxwLgorCitNYXJrIE5lbHNvbiA8bWFya25AaWVlZS5vcmc+IHdyb3RlIGFuIGFydGljbGUgYWJvdXQgemxpYiBmb3IgdGhlIEphbi4gMTk5NwogaXNzdWUgb2YgIERyLiBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBpbgotaHR0cDovL3dlYjIuYWlybWFpbC5uZXQvbWFya24vYXJ0aWNsZXMvemxpYnRvb2wvemxpYnRvb2wuaHRtCitodHRwOi8vZG9nbWEubmV0L21hcmtuL2FydGljbGVzL3psaWJ0b29sL3psaWJ0b29sLmh0bQogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4xLjMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgotVGhlIG1haW4gY2hhbmdlcyBzaW5jZSAxLjEuMiBhcmU6CitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4xLjQgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIG9ubHkgY2hhbmdlcyBtYWRlIHNpbmNlIDEuMS4zIGFyZSBidWcgY29ycmVjdGlvbnM6CiAKLS0gZml4ICJhbiBpbmZsYXRlIGlucHV0IGJ1ZmZlciBidWcgdGhhdCBzaG93cyB1cCBvbiByYXJlIGJ1dCBwZXJzaXN0ZW50Ci0gIG9jY2FzaW9ucyIgKE1hcmspCi0tIGZpeCBnenJlYWQgYW5kIGd6dGVsbCBmb3IgY29uY2F0ZW5hdGVkIC5neiBmaWxlcyAoRGlkaWVyIExlIEJvdGxhbikKLS0gZml4IGd6c2VlayguLi4sIFNFRUtfU0VUKSBpbiB3cml0ZSBtb2RlCi0tIGZpeCBjcmMgY2hlY2sgYWZ0ZXIgYSBnemVlayAoRnJhbmsgRmF1YmVydCkKLS0gZml4IG1pbml1bnppcCB3aGVuIHRoZSBsYXN0IGVudHJ5IGluIGEgemlwIGZpbGUgaXMgaXRzZWxmIGEgemlwIGZpbGUKLSAgKEogTGlsbGdlKQotLSBhZGQgY29udHJpYi9hc201ODYgYW5kIGNvbnRyaWIvYXNtNjg2IChCcmlhbiBSYWl0ZXIpCi0gIFNlZSBodHRwOi8vd3d3Lm11cHBldGxhYnMuY29tL35icmVhZGJveC9zb2Z0d2FyZS9hc3NlbWJseS5odG1sCi0tIGFkZCBzdXBwb3J0IGZvciBEZWxwaGkgMyBpbiBjb250cmliL2RlbHBoaSAoQm9iIERlbGxhY2EpCi0tIGFkZCBzdXBwb3J0IGZvciBDKytCdWlsZGVyIDMgYW5kIERlbHBoaSAzIGluIGNvbnRyaWIvZGVscGhpMiAoRGF2aWRlIE1vcmV0dGkpCi0tIGRvIG5vdCBleGl0IHByZW1hdHVyZWx5IGluIHVudGd6IGlmIDAgYXQgc3RhcnQgb2YgYmxvY2sgKE1hZ251cyBIb2xtZ3JlbikKLS0gdXNlIG1hY3JvIEVYVEVSTiBpbnN0ZWFkIG9mIGV4dGVybiB0byBzdXBwb3J0IERMTCBmb3IgQmVPUyAoU2FuZGVyIFN0b2tzKQotLSBhZGRlZCBhIEZBUSBmaWxlCistIFpGUkVFIHdhcyByZXBlYXRlZCBvbiBzYW1lIGFsbG9jYXRpb24gb24gc29tZSBlcnJvciBjb25kaXRpb25zLgorICBUaGlzIGNyZWF0ZXMgYSBzZWN1cml0eSBwcm9ibGVtIGRlc2NyaWJlZCBpbgorICBodHRwOi8vd3d3LnpsaWIub3JnL2Fkdmlzb3J5LTIwMDItMDMtMTEudHh0CistIFJldHVybmVkIGluY29ycmVjdCBlcnJvciAoWl9NRU1fRVJST1IpIG9uIHNvbWUgaW52YWxpZCBkYXRhCistIEF2b2lkIGFjY2Vzc2VzIGJlZm9yZSB3aW5kb3cgZm9yIGludmFsaWQgZGlzdGFuY2VzIHdpdGggaW5mbGF0ZSB3aW5kb3cKKyAgbGVzcyB0aGFuIDMySy4KKy0gZm9yY2Ugd2luZG93Qml0cyA+IDggdG8gYXZvaWQgYSBidWcgaW4gdGhlIGVuY29kZXIgZm9yIGEgd2luZG93IHNpemUKKyAgb2YgMjU2IGJ5dGVzLiAoQSBjb21wbGV0ZSBmaXggd2lsbCBiZSBhdmFpbGFibGUgaW4gMS4xLjUpLgogCi1wbHVzIG1hbnkgY2hhbmdlcyBmb3IgcG9ydGFiaWxpdHkuCitUaGUgYmV0YSB2ZXJzaW9uIDEuMS41YmV0YSBpbmNsdWRlcyBtYW55IG1vcmUgY2hhbmdlcy4gQSBuZXcgb2ZmaWNpYWwKK3ZlcnNpb24gMS4xLjUgd2lsbCBiZSByZWxlYXNlZCBhcyBzb29uIGFzIGV4dGVuc2l2ZSB0ZXN0aW5nIGhhcyBiZWVuCitjb21wbGV0ZWQgb24gaXQuCisKIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5ICJjb250cmliIi4KIAotQSBKYXZhIGltcGxlbWVudGF0aW9uIG9mIHpsaWIgaXMgYXZhaWxhYmxlIGluIHRoZSBKYXZhIERldmVsb3BtZW50IEtpdCAxLjEKK0EgSmF2YSBpbXBsZW1lbnRhdGlvbiBvZiB6bGliIGlzIGF2YWlsYWJsZSBpbiB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQKIGh0dHA6Ly93d3cuamF2YXNvZnQuY29tL3Byb2R1Y3RzL0pESy8xLjEvZG9jcy9hcGkvUGFja2FnZS1qYXZhLnV0aWwuemlwLmh0bWwKLVNlZSB0aGUgemxpYiBob21lIHBhZ2UgaHR0cDovL3d3dy5jZHJvbS5jb20vcHViL2luZm96aXAvemxpYi8gZm9yIGRldGFpbHMuCitTZWUgdGhlIHpsaWIgaG9tZSBwYWdlIGh0dHA6Ly93d3cuemxpYi5vcmcgZm9yIGRldGFpbHMuCiAKIEEgUGVybCBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IFBhdWwgTWFycXVlc3MgPHBtYXJxdWVzc0BiZnNlYy5idC5jby51az4KLWlzIGluIHRoZSBDUEFOIChDb21wcmVoZW5zaXZlIFBlcmwgQXJjaGl2ZSBOZXR3b3JrKSBzaXRlcywgc3VjaCBhczoKLWZ0cDovL2Z0cC5jaXMudWZsLmVkdS9wdWIvcGVybC9DUEFOL21vZHVsZXMvYnktbW9kdWxlL0NvbXByZXNzL0NvbXByZXNzLVpsaWIqCitpcyBpbiB0aGUgQ1BBTiAoQ29tcHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMKK2h0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvQ29tcHJlc3MvCiAKIEEgUHl0aG9uIGludGVyZmFjZSB0byB6bGliIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyA8YW1rQG1hZ25ldC5jb20+CiBpcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQpAQCAtMTE3LDcgKzExNiw3IEBACiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9hZGxlcjMyLmMgYi9hZGxlcjMyLmMKaW5kZXggMTZjZjlhNy4uZmFlODhiNiAxMDA2NDQKLS0tIGEvYWRsZXIzMi5jCisrKyBiL2FkbGVyMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGFkbGVyMzIuYyAtLSBjb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL2NvbXByZXNzLmMgYi9jb21wcmVzcy5jCmluZGV4IDFjZWU0NzAuLjgxNGJkOWQgMTAwNjQ0Ci0tLSBhL2NvbXByZXNzLmMKKysrIGIvY29tcHJlc3MuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNvbXByZXNzLmMgLS0gY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvY3JjMzIuYyBiL2NyYzMyLmMKaW5kZXggYTkxMTAxYS4uNjBkZWNhMiAxMDA2NDQKLS0tIGEvY3JjMzIuYworKysgYi9jcmMzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogY3JjMzIuYyAtLSBjb21wdXRlIHRoZSBDUkMtMzIgb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS9kZWZsYXRlLmMgYi9kZWZsYXRlLmMKaW5kZXggMjVkNTgxOC4uMTZlYmRhZCAxMDA2NDQKLS0tIGEvZGVmbGF0ZS5jCisrKyBiL2RlZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuYyAtLSBjb21wcmVzcyBkYXRhIHVzaW5nIHRoZSBkZWZsYXRpb24gYWxnb3JpdGhtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjEuMyBDb3B5cmlnaHQgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgIjsKKyAgICIgZGVmbGF0ZSAxLjEuNCBDb3B5cmlnaHQgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKICAgICB9CiAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9IFpfREVGTEFURUQgfHwKLSAgICAgICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHwKKyAgICAgICAgd2luZG93Qml0cyA8IDkgfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHwKIAlzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0hVRkZNQU5fT05MWSkgewogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZGVmbGF0ZS5oIGIvZGVmbGF0ZS5oCmluZGV4IDk2MjY3NmQuLmI5OWE0OGEgMTAwNjQ0Ci0tLSBhL2RlZmxhdGUuaAorKysgYi9kZWZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmggLS0gaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvZXhhbXBsZS5jIGIvZXhhbXBsZS5jCmluZGV4IDgzMDdjODQuLmU3ZTM2NzMgMTAwNjQ0Ci0tLSBhL2V4YW1wbGUuYworKysgYi9leGFtcGxlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBleGFtcGxlLmMgLS0gdXNhZ2UgZXhhbXBsZSBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvZ3ppby5jIGIvZ3ppby5jCmluZGV4IGY3YzMzNmEuLjA5ZTBhMjAgMTAwNjQ0Ci0tLSBhL2d6aW8uYworKysgYi9nemlvLmMKQEAgLTEsNSArMSw1IEBACiAvKiBnemlvLmMgLS0gSU8gb24gLmd6IGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBDb21waWxlIHRoaXMgZmlsZSB3aXRoIC1ETk9fREVGTEFURSB0byBhdm9pZCB0aGUgY29tcHJlc3Npb24gY29kZS4KZGlmZiAtLWdpdCBhL2luZmJsb2NrLmMgYi9pbmZibG9jay5jCmluZGV4IGY0OTIwZmEuLmRkN2E2ZDQgMTAwNjQ0Ci0tLSBhL2luZmJsb2NrLmMKKysrIGIvaW5mYmxvY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJsb2NrLmMgLS0gaW50ZXJwcmV0IGFuZCBwcm9jZXNzIGJsb2NrIHR5cGVzIHRvIGxhc3QgYmxvY2sKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApAQCAtMjQ5LDEwICsyNDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPnN1Yi50cmVlcy50Yiwgcy0+aHVmdHMsIHopOwogICAgICAgaWYgKHQgIT0gWl9PSykKICAgICAgIHsKLSAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKICAgICAgICAgciA9IHQ7CiAgICAgICAgIGlmIChyID09IFpfREFUQV9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgIFpGUkVFKHosIHMtPnN1Yi50cmVlcy5ibGVucyk7CiAgICAgICAgICAgcy0+bW9kZSA9IEJBRDsKKyAgICAgICAgfQogICAgICAgICBMRUFWRQogICAgICAgfQogICAgICAgcy0+c3ViLnRyZWVzLmluZGV4ID0gMDsKQEAgLTMxMywxMSArMzE1LDEzIEBACiAgICAgICAgIHQgPSBpbmZsYXRlX3RyZWVzX2R5bmFtaWMoMjU3ICsgKHQgJiAweDFmKSwgMSArICgodCA+PiA1KSAmIDB4MWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN1Yi50cmVlcy5ibGVucywgJmJsLCAmYmQsICZ0bCwgJnRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh1ZnRzLCB6KTsKLSAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKICAgICAgICAgaWYgKHQgIT0gWl9PSykKICAgICAgICAgewogICAgICAgICAgIGlmICh0ID09ICh1SW50KVpfREFUQV9FUlJPUikKKyAgICAgICAgICB7CisgICAgICAgICAgICBaRlJFRSh6LCBzLT5zdWIudHJlZXMuYmxlbnMpOwogICAgICAgICAgICAgcy0+bW9kZSA9IEJBRDsKKyAgICAgICAgICB9CiAgICAgICAgICAgciA9IHQ7CiAgICAgICAgICAgTEVBVkUKICAgICAgICAgfQpAQCAtMzI5LDYgKzMzMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgcy0+c3ViLmRlY29kZS5jb2RlcyA9IGM7CiAgICAgICB9CisgICAgICBaRlJFRSh6LCBzLT5zdWIudHJlZXMuYmxlbnMpOwogICAgICAgcy0+bW9kZSA9IENPREVTOwogICAgIGNhc2UgQ09ERVM6CiAgICAgICBVUERBVEUKZGlmZiAtLWdpdCBhL2luZmJsb2NrLmggYi9pbmZibG9jay5oCmluZGV4IGJkMjVjODAuLjE3M2IyMjYgMTAwNjQ0Ci0tLSBhL2luZmJsb2NrLmgKKysrIGIvaW5mYmxvY2suaApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJsb2NrLmggLS0gaGVhZGVyIHRvIHVzZSBpbmZibG9jay5jCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL2luZmNvZGVzLmMgYi9pbmZjb2Rlcy5jCmluZGV4IGQ0ZTVlZTkuLjlhYmU1NDEgMTAwNjQ0Ci0tLSBhL2luZmNvZGVzLmMKKysrIGIvaW5mY29kZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmNvZGVzLmMgLS0gcHJvY2VzcyBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlIHBhaXJzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKQEAgLTE5NiwxNSArMTk2LDkgQEAKICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIGMtPnN1Yi5jb3B5LmRpc3QpKTsKICAgICAgIGMtPm1vZGUgPSBDT1BZOwogICAgIGNhc2UgQ09QWTogICAgICAgICAgLyogbzogY29weWluZyBieXRlcyBpbiB3aW5kb3csIHdhaXRpbmcgZm9yIHNwYWNlICovCi0jaWZuZGVmIF9fVFVSQk9DX18gLyogVHVyYm8gQyBidWcgZm9yIGZvbGxvd2luZyBleHByZXNzaW9uICovCi0gICAgICBmID0gKHVJbnQpKHEgLSBzLT53aW5kb3cpIDwgYy0+c3ViLmNvcHkuZGlzdCA/Ci0gICAgICAgICAgcy0+ZW5kIC0gKGMtPnN1Yi5jb3B5LmRpc3QgLSAocSAtIHMtPndpbmRvdykpIDoKLSAgICAgICAgICBxIC0gYy0+c3ViLmNvcHkuZGlzdDsKLSNlbHNlCiAgICAgICBmID0gcSAtIGMtPnN1Yi5jb3B5LmRpc3Q7Ci0gICAgICBpZiAoKHVJbnQpKHEgLSBzLT53aW5kb3cpIDwgYy0+c3ViLmNvcHkuZGlzdCkKLSAgICAgICAgZiA9IHMtPmVuZCAtIChjLT5zdWIuY29weS5kaXN0IC0gKHVJbnQpKHEgLSBzLT53aW5kb3cpKTsKLSNlbmRpZgorICAgICAgd2hpbGUgKGYgPCBzLT53aW5kb3cpICAgICAgICAgICAgIC8qIG1vZHVsbyB3aW5kb3cgc2l6ZS0id2hpbGUiIGluc3RlYWQgKi8KKyAgICAgICAgZiArPSBzLT5lbmQgLSBzLT53aW5kb3c7ICAgICAgICAvKiBvZiAiaWYiIGhhbmRsZXMgaW52YWxpZCBkaXN0YW5jZXMgKi8KICAgICAgIHdoaWxlIChjLT5sZW4pCiAgICAgICB7CiAgICAgICAgIE5FRURPVVQKZGlmZiAtLWdpdCBhL2luZmNvZGVzLmggYi9pbmZjb2Rlcy5oCmluZGV4IDZjNzUwZDguLjQ2ODIxYTAgMTAwNjQ0Ci0tLSBhL2luZmNvZGVzLmgKKysrIGIvaW5mY29kZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmNvZGVzLmggLS0gaGVhZGVyIHRvIHVzZSBpbmZjb2Rlcy5jCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL2luZmZhc3QuYyBiL2luZmZhc3QuYwppbmRleCA2MWE3OGVlLi5hYTdmMWQ0IDEwMDY0NAotLS0gYS9pbmZmYXN0LmMKKysrIGIvaW5mZmFzdC5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mZmFzdC5jIC0tIHByb2Nlc3MgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZSBwYWlycyBmYXN0Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKQEAgLTkzLDI4ICs5Myw0MSBAQAogCiAgICAgICAgICAgICAvKiBkbyB0aGUgY29weSAqLwogICAgICAgICAgICAgbSAtPSBjOwotICAgICAgICAgICAgaWYgKCh1SW50KShxIC0gcy0+d2luZG93KSA+PSBkKSAgICAgLyogb2Zmc2V0IGJlZm9yZSBkZXN0ICovCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAganVzdCBjb3B5ICovCi0gICAgICAgICAgICAgIHIgPSBxIC0gZDsKLSAgICAgICAgICAgICAgKnErKyA9ICpyKys7ICBjLS07ICAgICAgICAvKiBtaW5pbXVtIGNvdW50IGlzIHRocmVlLCAqLwotICAgICAgICAgICAgICAqcSsrID0gKnIrKzsgIGMtLTsgICAgICAgIC8qICBzbyB1bnJvbGwgbG9vcCBhIGxpdHRsZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVsc2Ugb2Zmc2V0IGFmdGVyIGRlc3RpbmF0aW9uICovCisgICAgICAgICAgICByID0gcSAtIGQ7CisgICAgICAgICAgICBpZiAociA8IHMtPndpbmRvdykgICAgICAgICAgICAgICAgICAvKiB3cmFwIGlmIG5lZWRlZCAqLwogICAgICAgICAgICAgewotICAgICAgICAgICAgICBlID0gZCAtICh1SW50KShxIC0gcy0+d2luZG93KTsgLyogYnl0ZXMgZnJvbSBvZmZzZXQgdG8gZW5kICovCi0gICAgICAgICAgICAgIHIgPSBzLT5lbmQgLSBlOyAgICAgICAgICAgLyogcG9pbnRlciB0byBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgaWYgKGMgPiBlKSAgICAgICAgICAgICAgICAvKiBpZiBzb3VyY2UgY3Jvc3NlcywgKi8KKyAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHIgKz0gcy0+ZW5kIC0gcy0+d2luZG93OyAgICAgICAgLyogZm9yY2UgcG9pbnRlciBpbiB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgfSB3aGlsZSAociA8IHMtPndpbmRvdyk7ICAgICAgICAgIC8qIGNvdmVycyBpbnZhbGlkIGRpc3RhbmNlcyAqLworICAgICAgICAgICAgICBlID0gcy0+ZW5kIC0gcjsKKyAgICAgICAgICAgICAgaWYgKGMgPiBlKQogICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYyAtPSBlOyAgICAgICAgICAgICAgICAgLyogY29weSB0byBlbmQgb2Ygd2luZG93ICovCisgICAgICAgICAgICAgICAgYyAtPSBlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cmFwcGVkIGNvcHkgKi8KICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAqcSsrID0gKnIrKzsKKyAgICAgICAgICAgICAgICAgICAgKnErKyA9ICpyKys7CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1lKTsKLSAgICAgICAgICAgICAgICByID0gcy0+d2luZG93OyAgICAgICAgICAvKiBjb3B5IHJlc3QgZnJvbSBzdGFydCBvZiB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICByID0gcy0+d2luZG93OworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKnErKyA9ICpyKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1jKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9ybWFsIGNvcHkgKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpxKysgPSAqcisrOyAgYy0tOworICAgICAgICAgICAgICAgICpxKysgPSAqcisrOyAgYy0tOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKnErKyA9ICpyKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1jKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgYWxsIG9yIHdoYXQncyBsZWZ0ICovCi0gICAgICAgICAgICAgICpxKysgPSAqcisrOwotICAgICAgICAgICAgfSB3aGlsZSAoLS1jKTsKKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vcm1hbCBjb3B5ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpxKysgPSAqcisrOyAgYy0tOworICAgICAgICAgICAgICAqcSsrID0gKnIrKzsgIGMtLTsKKyAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICpxKysgPSAqcisrOworICAgICAgICAgICAgICB9IHdoaWxlICgtLWMpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgaWYgKChlICYgNjQpID09IDApCmRpZmYgLS1naXQgYS9pbmZmYXN0LmggYi9pbmZmYXN0LmgKaW5kZXggOGZhY2VjNS4uYTMxYTRiYiAxMDA2NDQKLS0tIGEvaW5mZmFzdC5oCisrKyBiL2luZmZhc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuaCAtLSBoZWFkZXIgdG8gdXNlIGluZmZhc3QuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS9pbmZsYXRlLmMgYi9pbmZsYXRlLmMKaW5kZXggMzJlOWI4ZC4uZGZiMmU4NiAxMDA2NDQKLS0tIGEvaW5mbGF0ZS5jCisrKyBiL2luZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmxhdGUuYyAtLSB6bGliIGludGVyZmFjZSB0byBpbmZsYXRlIG1vZHVsZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5mdHJlZXMuYyBiL2luZnRyZWVzLmMKaW5kZXggZWYxZTBiNi4uNGMzMmNhMyAxMDA2NDQKLS0tIGEvaW5mdHJlZXMuYworKysgYi9pbmZ0cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mdHJlZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApAQCAtMTEsNyArMTEsNyBAQAogI2VuZGlmCiAKIGNvbnN0IGNoYXIgaW5mbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGUgMS4xLjMgQ29weXJpZ2h0IDE5OTUtMTk5OCBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGUgMS4xLjQgQ29weXJpZ2h0IDE5OTUtMjAwMiBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTEwNCw4ICsxMDQsNyBAQAogLyogR2l2ZW4gYSBsaXN0IG9mIGNvZGUgbGVuZ3RocyBhbmQgYSBtYXhpbXVtIHRhYmxlIHNpemUsIG1ha2UgYSBzZXQgb2YKICAgIHRhYmxlcyB0byBkZWNvZGUgdGhhdCBzZXQgb2YgY29kZXMuICBSZXR1cm4gWl9PSyBvbiBzdWNjZXNzLCBaX0JVRl9FUlJPUgogICAgaWYgdGhlIGdpdmVuIGNvZGUgc2V0IGlzIGluY29tcGxldGUgKHRoZSB0YWJsZXMgYXJlIHN0aWxsIGJ1aWx0IGluIHRoaXMKLSAgIGNhc2UpLCBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGlzIGludmFsaWQgKGFuIG92ZXItc3Vic2NyaWJlZCBzZXQgb2YKLSAgIGxlbmd0aHMpLCBvciBaX01FTV9FUlJPUiBpZiBub3QgZW5vdWdoIG1lbW9yeS4gKi8KKyAgIGNhc2UpLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGlzIGludmFsaWQuICovCiB7CiAKICAgdUludCBhOyAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnRlciBmb3IgY29kZXMgb2YgbGVuZ3RoIGsgKi8KQEAgLTIzMSw3ICsyMzAsNyBAQAogCiAgICAgICAgIC8qIGFsbG9jYXRlIG5ldyB0YWJsZSAqLwogICAgICAgICBpZiAoKmhuICsgeiA+IE1BTlkpICAgICAvKiAobm90ZTogZG9lc24ndCBtYXR0ZXIgZm9yIGZpeGVkKSAqLwotICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsgICAvKiBub3QgZW5vdWdoIG1lbW9yeSAqLworICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7ICAvKiBvdmVyZmxvdyBvZiBNQU5ZICovCiAgICAgICAgIHVbaF0gPSBxID0gaHAgKyAqaG47CiAgICAgICAgICpobiArPSB6OwogCmRpZmYgLS1naXQgYS9pbmZ0cmVlcy5oIGIvaW5mdHJlZXMuaAppbmRleCA4NTg1M2UwLi4wNGI3M2I3IDEwMDY0NAotLS0gYS9pbmZ0cmVlcy5oCisrKyBiL2luZnRyZWVzLmgKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5oIC0tIGhlYWRlciB0byB1c2UgaW5mdHJlZXMuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS9pbmZ1dGlsLmMgYi9pbmZ1dGlsLmMKaW5kZXggODI0ZGFiNS4uOWEwNzYyMiAxMDA2NDQKLS0tIGEvaW5mdXRpbC5jCisrKyBiL2luZnV0aWwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmxhdGVfdXRpbC5jIC0tIGRhdGEgYW5kIHJvdXRpbmVzIGNvbW1vbiB0byBibG9ja3MgYW5kIGNvZGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL2luZnV0aWwuaCBiL2luZnV0aWwuaAppbmRleCA5OWQxMTM1Li40NDAxZGY4IDEwMDY0NAotLS0gYS9pbmZ1dGlsLmgKKysrIGIvaW5mdXRpbC5oCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mdXRpbC5oIC0tIHR5cGVzIGFuZCBtYWNyb3MgY29tbW9uIHRvIGJsb2NrcyBhbmQgY29kZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvbWFrZXRyZWUuYyBiL21ha2V0cmVlLmMKaW5kZXggOTQ5ZDc4Ni4uYTE2ZDRiMSAxMDA2NDQKLS0tIGEvbWFrZXRyZWUuYworKysgYi9tYWtldHJlZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWFrZXRyZWUuYyAtLSBtYWtlIGluZmZpeGVkLmggdGFibGUgZm9yIGRlY29kaW5nIGZpeGVkIGNvZGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS9taW5pZ3ppcC5jIGIvbWluaWd6aXAuYwppbmRleCA3MjE1ZWFlLi45N2I3YzJkIDEwMDY0NAotLS0gYS9taW5pZ3ppcC5jCisrKyBiL21pbmlnemlwLmMKQEAgLTEsNSArMSw1IEBACiAvKiBtaW5pZ3ppcC5jIC0tIHNpbXVsYXRlIGd6aXAgdXNpbmcgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL3RyZWVzLmMgYi90cmVlcy5jCmluZGV4IGYwMWZiMzAuLjBhOTg0MDUgMTAwNjQ0Ci0tLSBhL3RyZWVzLmMKKysrIGIvdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmggCiAgKi8KIApkaWZmIC0tZ2l0IGEvdW5jb21wci5jIGIvdW5jb21wci5jCmluZGV4IGQxMDMzMjEuLmEyODc3MTQgMTAwNjQ0Ci0tLSBhL3VuY29tcHIuYworKysgYi91bmNvbXByLmMKQEAgLTEsNSArMSw1IEBACiAvKiB1bmNvbXByLmMgLS0gZGVjb21wcmVzcyBhIG1lbW9yeSBidWZmZXIKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS96Y29uZi5oIGIvemNvbmYuaAppbmRleCA2ZDQ1MGZjLi5lYjBhZTJlIDEwMDY0NAotLS0gYS96Y29uZi5oCisrKyBiL3pjb25mLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oIAogICovCiAKZGlmZiAtLWdpdCBhL3psaWIuMyBiL3psaWIuMwppbmRleCAyNWM4NDk1Li4zYTZlNDUwIDEwMDY0NAotLS0gYS96bGliLjMKKysrIGIvemxpYi4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFpMSUIgMyAiOSBKdWx5IDE5OTgiCisuVEggWkxJQiAzICIxMSBNYXJjaCAyMDAyIgogLlNIIE5BTUUKIHpsaWIgXC0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5CiAuU0ggU1lOT1BTSVMKQEAgLTgxLDggKzgxLDggQEAKIC5JUAogZnRwOi8vZnRwLnV1Lm5ldC9ncmFwaGljcy9wbmcvZG9jdW1lbnRzL3psaWIvemRvYy1pbmRleC5odG1sCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjEuMwotQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMS40CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvemxpYi5oIGIvemxpYi5oCmluZGV4IDQ5ZjU2YjQuLjUyY2I1MjkgMTAwNjQ0Ci0tLSBhL3psaWIuaAorKysgYi96bGliLmgKQEAgLTEsNyArMSw3IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjEuMywgSnVseSA5dGgsIDE5OTgKKyAgdmVyc2lvbiAxLjEuNCwgTWFyY2ggMTF0aCwgMjAwMgogCi0gIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTM3LDcgKzM3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjEuMyIKKyNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjEuNCIKIAogLyogCiAgICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCmRpZmYgLS1naXQgYS96bGliLmh0bWwgYi96bGliLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0MzcwMwotLS0gL2Rldi9udWxsCisrKyBiL3psaWIuaHRtbApAQCAtMCwwICsxLDk3MSBAQAorPGh0bWw+Cis8aGVhZD4KKyA8dGl0bGU+CisgemxpYiBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeSB2ZXJzaW9uIDEuMS40CisgPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IldoaXRlIiB0ZXh0PSJCbGFjayIgdmxpbms9IlJlZCIgYWxpbms9Ik5hdnkiIGxpbms9IlJlZCI+Cis8IS0tIGJhY2tncm91bmQ9InpsaWJiZy5naWYiIC0tPgorCis8aDE+IHpsaWIgMS4xLjQgTWFudWFsIDwvaDE+Cis8aHI+Cis8YSBuYW1lPSJDb250ZW50cyI+PGgyPkNvbnRlbnRzPC9oMj4KKzxvbCB0eXBlPSJJIj4KKzxsaT4gPGEgaHJlZj0iI1Byb2xvZ3VlIj5Qcm9sb2d1ZTwvYT4KKzxsaT4gPGEgaHJlZj0iI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPGxpPiA8YSBocmVmPSIjVXRpbGl0eSBmdW5jdGlvbnMiPlV0aWxpdHkgZnVuY3Rpb25zPC9hPgorPGxpPiA8YSBocmVmPSIjQmFzaWMgZnVuY3Rpb25zIj5CYXNpYyBmdW5jdGlvbnM8L2E+Cis8bGk+IDxhIGhyZWY9IiNBZHZhbmNlZCBmdW5jdGlvbnMiPkFkdmFuY2VkIGZ1bmN0aW9uczwvYT4KKzxsaT4gPGEgaHJlZj0iI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPgorPGxpPiA8YSBocmVmPSIjc3RydWN0IHpfc3RyZWFtX3MiPnN0cnVjdCB6X3N0cmVhbV9zPC9hPgorPGxpPiA8YSBocmVmPSIjQ2hlY2tzdW0gZnVuY3Rpb25zIj5DaGVja3N1bSBmdW5jdGlvbnM8L2E+Cis8bGk+IDxhIGhyZWY9IiNNaXNjIj5NaXNjPC9hPgorPC9vbD4KKzxocj4KKzxhIG5hbWU9IlByb2xvZ3VlIj48aDI+IFByb2xvZ3VlIDwvaDI+CisgICd6bGliJyBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeSB2ZXJzaW9uIDEuMS40LCBNYXJjaCAxMXRoLCAyMDAyCisgIDxwPgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgIDxwPgorICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgIDxwPgorICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgIDxvbD4KKyAgIDxsaT4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAgPGxpPiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgICA8bGk+IFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisgIDwvb2w+CisKKyAgPGRsPgorICA8ZHQ+SmVhbi1sb3VwIEdhaWxseSAgICAgICAgCisgIDxkZD48YSBocmVmPSJtYWlsdG86amxvdXBAZ3ppcC5vcmciPmpsb3VwQGd6aXAub3JnPC9hPgorICA8ZHQ+TWFyayBBZGxlcgorICA8ZGQ+PGEgaHJlZj0ibWFpbHRvOm1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUiPm1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU8L2E+CisgIDwvZGw+CisKKyAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3IKKyAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMKKyAgPGEgaHJlZj0iZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUwLnR4dCI+CisgIGZ0cDovL2RzLmludGVybmljLm5ldC9yZmMvcmZjMTk1MC50eHQgPC9hPgorICAoemxpYiBmb3JtYXQpLCAKKyAgPGEgaHJlZj0iZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUxLnR4dCI+CisgIHJmYzE5NTEudHh0IDwvYT4KKyAgKDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiBmb3JtYXQpIGFuZCAKKyAgPGEgaHJlZj0iZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUyLnR4dCI+CisgIHJmYzE5NTIudHh0IDwvYT4KKyAgKGd6aXAgZm9ybWF0KS4KKyAgPHA+CisgIFRoaXMgbWFudWFsIGlzIGNvbnZlcnRlZCBmcm9tIHpsaWIuaCBieSAKKyAgPGEgaHJlZj0ibWFpbHRvOnBpYWlwQGNzaWUubnR1LmVkdS50dyI+IHBpYWlwIDwvYT4KKyAgPHA+CisgIFZpc2l0IDxhIGhyZWY9Imh0dHA6Ly9mdHAuY2Ryb20uY29tL3B1Yi9pbmZvemlwL3psaWIvIj4KKyAgaHR0cDovL2Z0cC5jZHJvbS5jb20vcHViL2luZm96aXAvemxpYi88L2E+IAorICBmb3IgdGhlIG9mZmljaWFsIHpsaWIgd2ViIHBhZ2UuCisgIDxwPgorCis8aHI+Cis8YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjxoMj4gSW50cm9kdWN0aW9uIDwvaDI+CisgICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCisgIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkCisgIGRhdGEuICBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kCisgIChkZWZsYXRpb24pIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZQorICBzdHJlYW0gaW50ZXJmYWNlLgorICA8cD4KKworICAgICBDb21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZmZXJzIGFyZSBsYXJnZQorICBlbm91Z2ggKGZvciBleGFtcGxlIGlmIGFuIGlucHV0IGZpbGUgaXMgbW1hcCdlZCksIG9yIGNhbiBiZSBkb25lIGJ5CisgIHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlCisgIGFwcGxpY2F0aW9uIG11c3QgcHJvdmlkZSBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQKKyAgKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2ggY2FsbC4KKyAgPHA+CisKKyAgICAgVGhlIGxpYnJhcnkgYWxzbyBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGd6aXAgKC5neikgZm9ybWF0CisgIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBvZiBzdGRpby4KKyAgPHA+CisKKyAgICAgVGhlIGxpYnJhcnkgZG9lcyBub3QgaW5zdGFsbCBhbnkgc2lnbmFsIGhhbmRsZXIuIFRoZSBkZWNvZGVyIGNoZWNrcworICB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwgc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyCisgIGNyYXNoIGV2ZW4gaW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCisgIDxwPgorCis8aHI+Cis8YSBuYW1lPSJVdGlsaXR5IGZ1bmN0aW9ucyI+PGgyPiBVdGlsaXR5IGZ1bmN0aW9ucyA8L2gyPgorICAgICBUaGUgZm9sbG93aW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlCisgICA8YSBocmVmPSIjQmFzaWMgZnVuY3Rpb25zIj5iYXNpYyBzdHJlYW0tb3JpZW50ZWQgZnVuY3Rpb25zPC9hPi4gCisgICBUbyBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlLCBzb21lCisgICBkZWZhdWx0IG9wdGlvbnMgYXJlIGFzc3VtZWQgKGNvbXByZXNzaW9uIGxldmVsIGFuZCBtZW1vcnkgdXNhZ2UsCisgICBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMpLiBUaGUgc291cmNlIGNvZGUgb2YgdGhlc2UKKyAgIHV0aWxpdHkgZnVuY3Rpb25zIGNhbiBlYXNpbHkgYmUgbW9kaWZpZWQgaWYgeW91IG5lZWQgc3BlY2lhbCBvcHRpb25zLgorPGgzPiBGdW5jdGlvbiBsaXN0IDwvaDM+Cis8dWw+Cis8bGk+IGludCAgPGEgaHJlZj0iI2NvbXByZXNzIj5jb21wcmVzczwvYT4gKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjY29tcHJlc3MyIj5jb21wcmVzczI8L2E+IChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbiwgaW50IGxldmVsKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjdW5jb21wcmVzcyI+dW5jb21wcmVzczwvYT4gKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKTsKKzxsaT4gdHlwZWRlZiB2b2lkcCBnekZpbGU7Cis8bGk+ICBnekZpbGUgIDxhIGhyZWY9IiNnem9wZW4iPmd6b3BlbjwvYT4gIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKKzxsaT4gZ3pGaWxlICA8YSBocmVmPSIjZ3pkb3BlbiI+Z3pkb3BlbjwvYT4gIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpOworPGxpPiBpbnQgIDxhIGhyZWY9IiNnenNldHBhcmFtcyI+Z3pzZXRwYXJhbXM8L2E+IChnekZpbGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpOworPGxpPiBpbnQgICAgIDxhIGhyZWY9IiNnenJlYWQiPmd6cmVhZDwvYT4gIChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pOworPGxpPiBpbnQgICAgIDxhIGhyZWY9IiNnendyaXRlIj5nendyaXRlPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKTsKKzxsaT4gaW50IFZBICAgPGEgaHJlZj0iI2d6cHJpbnRmIj5nenByaW50ZjwvYT4gKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cis8bGk+IGludCAgPGEgaHJlZj0iI2d6cHV0cyI+Z3pwdXRzPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKnMpOworPGxpPiBjaGFyICogIDxhIGhyZWY9IiNnemdldHMiPmd6Z2V0czwvYT4gKGd6RmlsZSBmaWxlLCBjaGFyICpidWYsIGludCBsZW4pOworPGxpPiBpbnQgICAgIDxhIGhyZWY9IiNnenB1dGMiPmd6cHV0YzwvYT4gKGd6RmlsZSBmaWxlLCBpbnQgYyk7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6Z2V0YyI+Z3pnZXRjPC9hPiAoZ3pGaWxlIGZpbGUpOworPGxpPiBpbnQgICAgIDxhIGhyZWY9IiNnemZsdXNoIj5nemZsdXNoPC9hPiAoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCk7Cis8bGk+IHpfb2ZmX3QgICAgIDxhIGhyZWY9IiNnenNlZWsiPmd6c2VlazwvYT4gKGd6RmlsZSBmaWxlLCB6X29mZl90IG9mZnNldCwgaW50IHdoZW5jZSk7Cis8bGk+IHpfb2ZmX3QgICAgIDxhIGhyZWY9IiNnenRlbGwiPmd6dGVsbDwvYT4gKGd6RmlsZSBmaWxlKTsKKzxsaT4gaW50ICAgICA8YSBocmVmPSIjZ3pyZXdpbmQiPmd6cmV3aW5kPC9hPiAoZ3pGaWxlIGZpbGUpOworPGxpPiBpbnQgIDxhIGhyZWY9IiNnemVvZiI+Z3plb2Y8L2E+IChnekZpbGUgZmlsZSk7Cis8bGk+IGludCAgICAgPGEgaHJlZj0iI2d6Y2xvc2UiPmd6Y2xvc2U8L2E+IChnekZpbGUgZmlsZSk7Cis8bGk+IGNvbnN0IGNoYXIgKiAgPGEgaHJlZj0iI2d6ZXJyb3IiPmd6ZXJyb3I8L2E+IChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pOworPC91bD4KKzxoMz4gRnVuY3Rpb24gZGVzY3JpcHRpb24gPC9oMz4KKzxkbD4KKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iY29tcHJlc3MiPmNvbXByZXNzPC9hPiAoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLCBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pOzwvZm9udD4KKzxkZD4KKyAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKKyAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKKyAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAwLjElIGxhcmdlciB0aGFuCisgICBzb3VyY2VMZW4gcGx1cyAxMiBieXRlcy4gVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXByZXNzZWQgYnVmZmVyLjxwPgorICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIDxhIGhyZWY9IiNjb21wcmVzcyI+Y29tcHJlc3M8L2E+IGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQorICAgaW5wdXQgZmlsZSBpcyBtbWFwJ2VkLjxwPgorICAgICA8YSBocmVmPSIjY29tcHJlc3MiPmNvbXByZXNzPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCA8YSBocmVmPSIjWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci48cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJjb21wcmVzczIiPmNvbXByZXNzMjwvYT4gKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuLCBpbnQgbGV2ZWwpOzwvZm9udD4KKzxkZD4KKyAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuIFRoZSBsZXZlbAorICAgcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+LiAgc291cmNlTGVuIGlzIHRoZSBieXRlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMC4xJSBsYXJnZXIgdGhhbiBzb3VyY2VMZW4gcGx1cworICAgMTIgYnl0ZXMuIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2NvbXByZXNzMiI+Y29tcHJlc3MyPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCA8YSBocmVmPSIjWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyLAorICAgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIGxldmVsIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0idW5jb21wcmVzcyI+dW5jb21wcmVzczwvYT4gKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKKyAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKKyAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKKyAgIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUKKyAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgorICAgYnkgc29tZSBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKKyAgIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLiA8cD4KKyAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkZWNvbXByZXNzIGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQorICAgaW5wdXQgZmlsZSBpcyBtbWFwJ2VkLgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI3VuY29tcHJlc3MiPnVuY29tcHJlc3M8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAorICAgYnVmZmVyLCBvciA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQuCisgICA8cD4KKworPGR0PiB0eXBlZGVmIHZvaWRwIGd6RmlsZTsKKzxkZD4gPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+ICBnekZpbGUgIDxhIG5hbWU9Imd6b3BlbiI+Z3pvcGVuPC9hPiAgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOzwvZm9udD4KKzxkZD4KKyAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCisgICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKSBidXQgY2FuIGFsc28gaW5jbHVkZSBhIGNvbXByZXNzaW9uIGxldmVsCisgICAoIndiOSIpIG9yIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IKKyAgIEh1ZmZtYW4gb25seSBjb21wcmVzc2lvbiBhcyBpbiAid2IxaCIuIChTZWUgdGhlIGRlc2NyaXB0aW9uCisgICBvZiA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKQorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2d6b3BlbiI+Z3pvcGVuPC9hPiBjYW4gYmUgdXNlZCB0byByZWFkIGEgZmlsZSB3aGljaCBpcyBub3QgaW4gZ3ppcCBmb3JtYXQgOyBpbiB0aGlzCisgICBjYXNlIDxhIGhyZWY9IiNnenJlYWQiPmd6cmVhZDwvYT4gd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2d6b3BlbiI+Z3pvcGVuPC9hPiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBvciBpZiB0aGVyZSB3YXMKKyAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIChkZSljb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiA7IGVycm5vCisgICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKKyAgIHpsaWIgZXJyb3IgaXMgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4pLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGd6RmlsZSAgPGEgbmFtZT0iZ3pkb3BlbiI+Z3pkb3BlbjwvYT4gIChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpOzwvZm9udD4KKzxkZD4KKyAgICAgPGEgaHJlZj0iI2d6ZG9wZW4iPmd6ZG9wZW48L2E+KCkgYXNzb2NpYXRlcyBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuICBGaWxlCisgICBkZXNjcmlwdG9ycyBhcmUgb2J0YWluZWQgZnJvbSBjYWxscyBsaWtlIG9wZW4sIGR1cCwgY3JlYXQsIHBpcGUgb3IKKyAgIGZpbGVubyAoaW4gdGhlIGZpbGUgaGFzIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBmb3BlbikuCisgICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gPGEgaHJlZj0iI2d6b3BlbiI+Z3pvcGVuPC9hPi4KKyAgIDxwPgorICAgICBUaGUgbmV4dCBjYWxsIG9mIDxhIGhyZWY9IiNnemNsb3NlIj5nemNsb3NlPC9hPiBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQpLCBtb2RlKSBjbG9zZXMgdGhlIGZpbGUKKyAgIGRlc2NyaXB0b3IgZmQuIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIDxhIGhyZWY9IiNnemRvcGVuIj5nemRvcGVuPC9hPihkdXAoZmQpLCBtb2RlKS4KKyAgIDxwPgorICAgICA8YSBocmVmPSIjZ3pkb3BlbiI+Z3pkb3BlbjwvYT4gcmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlCisgICB0aGUgKGRlKWNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+LgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iZ3pzZXRwYXJhbXMiPmd6c2V0cGFyYW1zPC9hPiAoZ3pGaWxlIGZpbGUsIGludCBsZXZlbCwgaW50IHN0cmF0ZWd5KTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgb3Igc3RyYXRlZ3kuIFNlZSB0aGUgZGVzY3JpcHRpb24KKyAgIG9mIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMuCisgICA8cD4KKyAgICAgPGEgaHJlZj0iI2d6c2V0cGFyYW1zIj5nenNldHBhcmFtczwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2Vzcywgb3IgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIGZpbGUgd2FzIG5vdAorICAgb3BlbmVkIGZvciB3cml0aW5nLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pyZWFkIj5nenJlYWQ8L2E+ICAoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4KKyAgIElmIHRoZSBpbnB1dCBmaWxlIHdhcyBub3QgaW4gZ3ppcCBmb3JtYXQsIDxhIGhyZWY9IiNnenJlYWQiPmd6cmVhZDwvYT4gY29waWVzIHRoZSBnaXZlbiBudW1iZXIKKyAgIG9mIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAgIDxwPgorICAgICA8YSBocmVmPSIjZ3pyZWFkIj5nenJlYWQ8L2E+IHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IKKyAgIGVuZCBvZiBmaWxlLCAtMSBmb3IgZXJyb3IpLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3p3cml0ZSI+Z3p3cml0ZTwvYT4gKGd6RmlsZSBmaWxlLCBjb25zdCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbik7PC9mb250PgorPGRkPgorICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgPGEgaHJlZj0iI2d6d3JpdGUiPmd6d3JpdGU8L2E+IHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbgorICAgKDAgaW4gY2FzZSBvZiBlcnJvcikuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50IFZBICAgPGEgbmFtZT0iZ3pwcmludGYiPmd6cHJpbnRmPC9hPiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIDxhIGhyZWY9IiNnenByaW50ZiI+Z3pwcmludGY8L2E+IHJldHVybnMgdGhlIG51bWJlciBvZgorICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJnenB1dHMiPmd6cHV0czwvYT4gKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpzKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCisgICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICA8cD4KKyAgICAgIDxhIGhyZWY9IiNnenB1dHMiPmd6cHV0czwvYT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKyAgICAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBjaGFyICogIDxhIG5hbWU9Imd6Z2V0cyI+Z3pnZXRzPC9hPiAoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbik7PC9mb250PgorPGRkPgorICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9yCisgICBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4gZW5kLW9mLWZpbGUKKyAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkIHdpdGggYSBudWxsCisgICBjaGFyYWN0ZXIuCisgICA8cD4KKyAgICAgIDxhIGhyZWY9IiNnemdldHMiPmd6Z2V0czwvYT4gcmV0dXJucyBidWYsIG9yIDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4gaW4gY2FzZSBvZiBlcnJvci4KKyAgICAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgICAgIDxhIG5hbWU9Imd6cHV0YyI+Z3pwdXRjPC9hPiAoZ3pGaWxlIGZpbGUsIGludCBjKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KKyAgIDxhIGhyZWY9IiNnenB1dGMiPmd6cHV0YzwvYT4gcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgICAgIDxhIG5hbWU9Imd6Z2V0YyI+Z3pnZXRjPC9hPiAoZ3pGaWxlIGZpbGUpOzwvZm9udD4KKzxkZD4KKyAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gPGEgaHJlZj0iI2d6Z2V0YyI+Z3pnZXRjPC9hPiByZXR1cm5zIHRoaXMgYnl0ZQorICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgICAgIDxhIG5hbWU9Imd6Zmx1c2giPmd6Zmx1c2g8L2E+IChnekZpbGUgZmlsZSwgaW50IGZsdXNoKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRlcgorICAgZmx1c2ggaXMgYXMgaW4gdGhlIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpIGZ1bmN0aW9uLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB6bGliCisgICBlcnJvciBudW1iZXIgKHNlZSBmdW5jdGlvbiA8YSBocmVmPSIjZ3plcnJvciI+Z3plcnJvcjwvYT4gYmVsb3cpLiA8YSBocmVmPSIjZ3pmbHVzaCI+Z3pmbHVzaDwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYKKyAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaXMgPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4gYW5kIGFsbCBvdXRwdXQgY291bGQgYmUgZmx1c2hlZC4KKyAgIDxwPgorICAgICA8YSBocmVmPSIjZ3pmbHVzaCI+Z3pmbHVzaDwvYT4gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gc3RyaWN0bHkgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY2FuCisgICBkZWdyYWRlIGNvbXByZXNzaW9uLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IHpfb2ZmX3QgICAgIDxhIG5hbWU9Imd6c2VlayI+Z3pzZWVrPC9hPiAoZ3pGaWxlIGZpbGUsIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgICBTZXRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgPGEgaHJlZj0iI2d6cmVhZCI+Z3pyZWFkPC9hPiBvciA8YSBocmVmPSIjZ3p3cml0ZSI+Z3p3cml0ZTwvYT4gb24gdGhlCisgICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4gVGhlIHdoZW5jZSBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBhcyBpbiBsc2VlaygyKTsKKyAgIHRoZSB2YWx1ZSBTRUVLX0VORCBpcyBub3Qgc3VwcG9ydGVkLgorICAgPHA+CisgICAgIElmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZywgdGhpcyBmdW5jdGlvbiBpcyBlbXVsYXRlZCBidXQgY2FuIGJlCisgICBleHRyZW1lbHkgc2xvdy4gSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nLCBvbmx5IGZvcndhcmQgc2Vla3MgYXJlCisgICBzdXBwb3J0ZWQgOyA8YSBocmVmPSIjZ3pzZWVrIj5nenNlZWs8L2E+IHRoZW4gY29tcHJlc3NlcyBhIHNlcXVlbmNlIG9mIHplcm9lcyB1cCB0byB0aGUgbmV3CisgICBzdGFydGluZyBwb3NpdGlvbi4KKyAgIDxwPgorICAgICAgPGEgaHJlZj0iI2d6c2VlayI+Z3pzZWVrPC9hPiByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGxvY2F0aW9uIGFzIG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KKyAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJlc3NlZCBzdHJlYW0sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IsIGluCisgICBwYXJ0aWN1bGFyIGlmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZyBhbmQgdGhlIG5ldyBzdGFydGluZyBwb3NpdGlvbgorICAgd291bGQgYmUgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgICAgPGEgbmFtZT0iZ3pyZXdpbmQiPmd6cmV3aW5kPC9hPiAoZ3pGaWxlIGZpbGUpOzwvZm9udD4KKzxkZD4KKyAgICAgUmV3aW5kcyB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgcmVhZGluZy4KKyAgICAgPHA+CisgICA8YSBocmVmPSIjZ3pyZXdpbmQiPmd6cmV3aW5kPC9hPihmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpPGEgaHJlZj0iI2d6c2VlayI+Z3pzZWVrPC9hPihmaWxlLCAwTCwgU0VFS19TRVQpCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gel9vZmZfdCAgICAgPGEgbmFtZT0iZ3p0ZWxsIj5nenRlbGw8L2E+IChnekZpbGUgZmlsZSk7PC9mb250PgorPGRkPgorICAgICBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgPGEgaHJlZj0iI2d6cmVhZCI+Z3pyZWFkPC9hPiBvciA8YSBocmVmPSIjZ3p3cml0ZSI+Z3p3cml0ZTwvYT4gb24gdGhlCisgICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAgIDxwPgorCisgICA8YSBocmVmPSIjZ3p0ZWxsIj5nenRlbGw8L2E+KGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gPGEgaHJlZj0iI2d6c2VlayI+Z3pzZWVrPC9hPihmaWxlLCAwTCwgU0VFS19DVVIpCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJnemVvZiI+Z3plb2Y8L2E+IChnekZpbGUgZmlsZSk7PC9mb250PgorPGRkPgorICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgorICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgICAgIDxhIG5hbWU9Imd6Y2xvc2UiPmd6Y2xvc2U8L2E+IChnekZpbGUgZmlsZSk7PC9mb250PgorPGRkPgorICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlCisgICBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4uIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKKyAgIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIDxhIGhyZWY9IiNnemVycm9yIj5nemVycm9yPC9hPiBiZWxvdykuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gY29uc3QgY2hhciAqICA8YSBuYW1lPSJnemVycm9yIj5nemVycm9yPC9hPiAoZ3pGaWxlIGZpbGUsIGludCAqZXJybnVtKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZQorICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBlcnJudW0gaXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiBJZiBhbgorICAgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnksCisgICBlcnJudW0gaXMgc2V0IHRvIDxhIGhyZWY9IiNaX0VSUk5PIj5aX0VSUk5PPC9hPiBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCisgICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCisgICA8cD4KKzwvZGw+Cis8aHI+Cis8YSBuYW1lPSJCYXNpYyBmdW5jdGlvbnMiPjxoMj4gQmFzaWMgZnVuY3Rpb25zIDwvaDI+Cis8aDM+IEZ1bmN0aW9uIGxpc3QgPC9oMz4KKzx1bD4KKzxsaT4gIGNvbnN0IGNoYXIgKiAgPGEgaHJlZj0iI3psaWJWZXJzaW9uIj56bGliVmVyc2lvbjwvYT4gKHZvaWQpOworPGxpPiAgaW50ICA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBpbnQgbGV2ZWwpOworPGxpPiAgaW50ICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGZsdXNoKTsKKzxsaT4gIGludCAgPGEgaHJlZj0iI2RlZmxhdGVFbmQiPmRlZmxhdGVFbmQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOworPGxpPiAgaW50ICA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTsKKzxsaT4gIGludCAgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCBmbHVzaCk7Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlRW5kIj5pbmZsYXRlRW5kPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTsKKzwvdWw+CisKKzxoMz4gRnVuY3Rpb24gZGVzY3JpcHRpb24gPC9oMz4KKzxkbD4KKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+ICBjb25zdCBjaGFyICogIDxhIG5hbWU9InpsaWJWZXJzaW9uIj56bGliVmVyc2lvbjwvYT4gKHZvaWQpOzwvZm9udD4KKzxkZD4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb21wYXJlIDxhIGhyZWY9IiN6bGliVmVyc2lvbiI+emxpYlZlcnNpb248L2E+IGFuZCBaTElCX1ZFUlNJT04gZm9yIGNvbnNpc3RlbmN5LgorICAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBkaWZmZXJzLCB0aGUgbGlicmFyeSBjb2RlIGFjdHVhbGx5IHVzZWQgaXMKKyAgIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgIFRoaXMgY2hlY2sgaXMgYXV0b21hdGljYWxseSBtYWRlIGJ5IDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IGFuZCA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPi4KKyAgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImRlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGxldmVsKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gZm9yIGNvbXByZXNzaW9uLiBUaGUgZmllbGRzCisgICA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhbmQgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLgorICAgSWYgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBhbmQgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gYXJlIHNldCB0byA8YSBocmVmPSIjWl9OVUxMIj5aX05VTEw8L2E+LCA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiB1cGRhdGVzIHRoZW0gdG8KKyAgIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorICAgPHA+CisKKyAgICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIG11c3QgYmUgPGEgaHJlZj0iI1pfREVGQVVMVF9DT01QUkVTU0lPTiI+Wl9ERUZBVUxUX0NPTVBSRVNTSU9OPC9hPiwgb3IgYmV0d2VlbiAwIGFuZCA5OgorICAgMSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQKKyAgIGFsbCAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkuCisgICA8cD4KKworICAgPGEgaHJlZj0iI1pfREVGQVVMVF9DT01QUkVTU0lPTiI+Wl9ERUZBVUxUX0NPTVBSRVNTSU9OPC9hPiByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZAorICAgY29tcHJlc3Npb24gKGN1cnJlbnRseSBlcXVpdmFsZW50IHRvIGxldmVsIDYpLgorICAgPHA+CisKKyAgICAgPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgbGV2ZWwgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbGV2ZWwsCisgICA8YSBocmVmPSIjWl9WRVJTSU9OX0VSUk9SIj5aX1ZFUlNJT05fRVJST1I8L2E+IGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoPGEgaHJlZj0iI3psaWJfdmVyc2lvbiI+emxpYl92ZXJzaW9uPC9hPikgaXMgaW5jb21wYXRpYmxlCisgICB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciAoWkxJQl9WRVJTSU9OKS4KKyAgIDxhIGhyZWY9IiNtc2ciPm1zZzwvYT4gaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IGRvZXMgbm90CisgICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGludCAgPGEgbmFtZT0iZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwgaW50IGZsdXNoKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKKyAgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KKyAgZm9yY2VkIHRvIGZsdXNoLjxwPgorCisgICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICA8dWw+CisgIDxsaT4gQ29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIHVwZGF0ZSA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+CisgICAgYWNjb3JkaW5nbHkuIElmIG5vdCBhbGwgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZCAoYmVjYXVzZSB0aGVyZSBpcyBub3QKKyAgICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciksIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gYXJlIHVwZGF0ZWQgYW5kCisgICAgcHJvY2Vzc2luZyB3aWxsIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLgorCisgIDxsaT4gCisgICAgUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiBhbmQgdXBkYXRlIDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+CisgICAgYWNjb3JkaW5nbHkuIFRoaXMgYWN0aW9uIGlzIGZvcmNlZCBpZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIG5vbiB6ZXJvLgorICAgIEZvcmNpbmcgZmx1c2ggZnJlcXVlbnRseSBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8sIHNvIHRoaXMgcGFyYW1ldGVyCisgICAgc2hvdWxkIGJlIHNldCBvbmx5IHdoZW4gbmVjZXNzYXJ5IChpbiBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMpLgorICAgIFNvbWUgb3V0cHV0IG1heSBiZSBwcm92aWRlZCBldmVuIGlmIGZsdXNoIGlzIG5vdCBzZXQuCisgIDwvdWw+IDxwPgorCisgIEJlZm9yZSB0aGUgY2FsbCBvZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcKKyAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGluZyA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBvciA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IGFjY29yZGluZ2x5IDsgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPgorICBzaG91bGQgbmV2ZXIgYmUgemVybyBiZWZvcmUgdGhlIGNhbGwuIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUKKyAgY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsCisgICg8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+ID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkuIElmIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPgorICBhbmQgd2l0aCB6ZXJvIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4sIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZQorICBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKyAgPHA+CisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byA8YSBocmVmPSIjWl9TWU5DX0ZMVVNIIj5aX1NZTkNfRkxVU0g8L2E+LCBhbGwgcGVuZGluZyBvdXRwdXQgaXMKKyAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28KKyAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBnZXQgYWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gKEluIHBhcnRpY3VsYXIKKyAgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gaXMgemVybyBhZnRlciB0aGUgY2FsbCBpZiBlbm91Z2ggb3V0cHV0IHNwYWNlIGhhcyBiZWVuIHByb3ZpZGVkCisgIGJlZm9yZSB0aGUgY2FsbC4pICBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21wcmVzc2lvbiBmb3Igc29tZSBjb21wcmVzc2lvbgorICBhbGdvcml0aG1zIGFuZCBzbyBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorICA8cD4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byA8YSBocmVmPSIjWl9GVUxMX0ZMVVNIIj5aX0ZVTExfRkxVU0g8L2E+LCBhbGwgb3V0cHV0IGlzIGZsdXNoZWQgYXMgd2l0aAorICA8YSBocmVmPSIjWl9TWU5DX0ZMVVNIIj5aX1NZTkNfRkxVU0g8L2E+LCBhbmQgdGhlIGNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGlzIHJlc2V0IHNvIHRoYXQgZGVjb21wcmVzc2lvbiBjYW4KKyAgcmVzdGFydCBmcm9tIHRoaXMgcG9pbnQgaWYgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhIGhhcyBiZWVuIGRhbWFnZWQgb3IgaWYKKyAgcmFuZG9tIGFjY2VzcyBpcyBkZXNpcmVkLiBVc2luZyA8YSBocmVmPSIjWl9GVUxMX0ZMVVNIIj5aX0ZVTExfRkxVU0g8L2E+IHRvbyBvZnRlbiBjYW4gc2VyaW91c2x5IGRlZ3JhZGUKKyAgdGhlIGNvbXByZXNzaW9uLgorICA8cD4KKworICAgIElmIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiByZXR1cm5zIHdpdGggPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiA9PSAwLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluCisgIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQKKyAgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiksIHVudGlsIHRoZSBmbHVzaCBpcyBjb21wbGV0ZSAoPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IHJldHVybnMgd2l0aCBub24temVybworICA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+KS4KKyAgPHA+CisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQsCisgIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiByZXR1cm5zIHdpdGggPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiBpZiB0aGVyZQorICB3YXMgZW5vdWdoIG91dHB1dCBzcGFjZSA7IGlmIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiByZXR1cm5zIHdpdGggPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+LCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAgY2FsbGVkIGFnYWluIHdpdGggPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4gYW5kIG1vcmUgb3V0cHV0IHNwYWNlICh1cGRhdGVkIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4pIGJ1dCBubworICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IG9yIGFuIGVycm9yLiBBZnRlcgorICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gaGFzIHJldHVybmVkIDxhIGhyZWY9IiNaX1NUUkVBTV9FTkQiPlpfU1RSRUFNX0VORDwvYT4sIHRoZSBvbmx5IHBvc3NpYmxlIG9wZXJhdGlvbnMgb24gdGhlCisgIHN0cmVhbSBhcmUgPGEgaHJlZj0iI2RlZmxhdGVSZXNldCI+ZGVmbGF0ZVJlc2V0PC9hPiBvciA8YSBocmVmPSIjZGVmbGF0ZUVuZCI+ZGVmbGF0ZUVuZDwvYT4uCisgIDxwPgorICAKKyAgICA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiBjYW4gYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiBpZiBhbGwgdGhlIGNvbXByZXNzaW9uCisgIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gSW4gdGhpcyBjYXNlLCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IG11c3QgYmUgYXQgbGVhc3QKKyAgMC4xJSBsYXJnZXIgdGhhbiA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBwbHVzIDEyIGJ5dGVzLiAgSWYgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+IGRvZXMgbm90IHJldHVybgorICA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+LCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgPHA+CisKKyAgICA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKSBzZXRzIHN0cm0tJmd0IDxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+IHRvIHRoZSA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKKyAgc28gZmFyICh0aGF0IGlzLCA8YSBocmVmPSIjdG90YWxfaW4iPnRvdGFsX2luPC9hPiBieXRlcykuCisgIDxwPgorCisgICAgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkgbWF5IHVwZGF0ZSA8YSBocmVmPSIjZGF0YV90eXBlIj5kYXRhX3R5cGU8L2E+IGlmIGl0IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhYm91dAorICB0aGUgaW5wdXQgZGF0YSB0eXBlICg8YSBocmVmPSIjWl9BU0NJSSI+Wl9BU0NJSTwvYT4gb3IgPGEgaHJlZj0iI1pfQklOQVJZIj5aX0JJTkFSWTwvYT4pLiBJbiBkb3VidCwgdGhlIGRhdGEgaXMgY29uc2lkZXJlZAorICBiaW5hcnkuIFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGRvZXMgbm90IGFmZmVjdAorICB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIGFueSBtYW5uZXIuCisgIDxwPgorCisgICAgPGEgaHJlZj0iI2RlZmxhdGUiPmRlZmxhdGU8L2E+KCkgcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0CisgIHByb2Nlc3NlZCBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIDxhIGhyZWY9IiNaX1NUUkVBTV9FTkQiPlpfU1RSRUFNX0VORDwvYT4gaWYgYWxsIGlucHV0IGhhcyBiZWVuCisgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkIChvbmx5IHdoZW4gZmx1c2ggaXMgc2V0IHRvCisgIDxhIGhyZWY9IiNaX0ZJTklTSCI+Wl9GSU5JU0g8L2E+KSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQorICBpZiA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gb3IgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gd2FzIE5VTEwpLCA8YSBocmVmPSIjWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPiBpZiBubyBwcm9ncmVzcyBpcyBwb3NzaWJsZQorICAoZm9yIGV4YW1wbGUgPGEgaHJlZj0iI2F2YWlsX2luIj5hdmFpbF9pbjwvYT4gb3IgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiB3YXMgemVybykuCisgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJkZWZsYXRlRW5kIj5kZWZsYXRlRW5kPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCisgICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55CisgICBwZW5kaW5nIG91dHB1dC4KKyAgIDxwPgorCisgICAgIDxhIGhyZWY9IiNkZWZsYXRlRW5kIj5kZWZsYXRlRW5kPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUKKyAgIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3YXMgaW5jb25zaXN0ZW50LCA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGlmIHRoZSBzdHJlYW0gd2FzIGZyZWVkCisgICBwcmVtYXR1cmVseSAoc29tZSBpbnB1dCBvciBvdXRwdXQgd2FzIGRpc2NhcmRlZCkuIEluIHRoZSBlcnJvciBjYXNlLAorICAgPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlCisgICBkZWFsbG9jYXRlZCkuCisgICA8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGludCAgPGEgbmFtZT0iaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+Cis8ZGQ+ICAgICAKKwlJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGZvciBkZWNvbXByZXNzaW9uLiBUaGUgZmllbGRzCisgICA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4sIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+LCA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhbmQgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQorICAgdGhlIGNhbGxlci4gSWYgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+IGlzIG5vdCA8YSBocmVmPSIjWl9OVUxMIj5aX05VTEw8L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiBpcyBsYXJnZSBlbm91Z2ggKHRoZSBleGFjdAorICAgdmFsdWUgZGVwZW5kcyBvbiB0aGUgY29tcHJlc3Npb24gbWV0aG9kKSwgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4gZGV0ZXJtaW5lcyB0aGUKKyAgIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB6bGliIGhlYWRlciBhbmQgYWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMKKyAgIGFjY29yZGluZ2x5IDsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKKyAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPi4gIElmIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gYW5kIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+IGFyZSBzZXQgdG8gPGEgaHJlZj0iI1pfTlVMTCI+Wl9OVUxMPC9hPiwgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4gdXBkYXRlcyB0aGVtIHRvCisgICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKyAgIDxwPgorCisgICAgIDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIDxhIGhyZWY9IiNaX1ZFUlNJT05fRVJST1IiPlpfVkVSU0lPTl9FUlJPUjwvYT4gaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIuICA8YSBocmVmPSIjbXNnIj5tc2c8L2E+IGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yCisgICBtZXNzYWdlLiA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uIGFwYXJ0IGZyb20gcmVhZGluZworICAgdGhlIHpsaWIgaGVhZGVyIGlmIHByZXNlbnQ6IHRoaXMgd2lsbCBiZSBkb25lIGJ5IDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpLiAgKFNvIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBhbmQKKyAgIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IG1heSBiZSBtb2RpZmllZCwgYnV0IDxhIGhyZWY9IiNuZXh0X291dCI+bmV4dF9vdXQ8L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfb3V0Ij5hdmFpbF9vdXQ8L2E+IGFyZSB1bmNoYW5nZWQuKQorICAgPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+ICBpbnQgIDxhIG5hbWU9ImluZmxhdGUiPmluZmxhdGU8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCBmbHVzaCk7PC9mb250PgorPGRkPgorICAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPiBkZWNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgc29tZQorICBpbnRyb2R1Y2Ugc29tZSBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KQorICBleGNlcHQgd2hlbiBmb3JjZWQgdG8gZmx1c2guCisgIDxwPgorCisgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPiBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKKyAgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgPHVsPgorICA8bGk+IERlY29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIHVwZGF0ZSA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+CisgICAgYWNjb3JkaW5nbHkuIElmIG5vdCBhbGwgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZCAoYmVjYXVzZSB0aGVyZSBpcyBub3QKKyAgICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciksIDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiBpcyB1cGRhdGVkIGFuZCBwcm9jZXNzaW5nCisgICAgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKS4KKworICA8bGk+IFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gYW5kIHVwZGF0ZSA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiBhbmQgCisgICAgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiBhY2NvcmRpbmdseS4gIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCAKKyAgICB1bnRpbCB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgb3Igbm8gbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAKKyAgICAoc2VlIGJlbG93IGFib3V0IHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgorICA8L3VsPiA8cD4KKworICBCZWZvcmUgdGhlIGNhbGwgb2YgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCksIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZW5zdXJlIHRoYXQgYXQgbGVhc3QKKyAgb25lIG9mIHRoZSBhY3Rpb25zIGlzIHBvc3NpYmxlLCBieSBwcm92aWRpbmcgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtaW5nCisgIG1vcmUgb3V0cHV0LCBhbmQgdXBkYXRpbmcgdGhlIG5leHRfKiBhbmQgYXZhaWxfKiB2YWx1ZXMgYWNjb3JkaW5nbHkuCisgIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IKKyAgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwgKDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4gPT0gMCksIG9yIGFmdGVyIGVhY2gKKyAgY2FsbCBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKS4gSWYgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGFuZCB3aXRoIHplcm8gPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiwgaXQKKyAgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgbWFraW5nIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIgYmVjYXVzZSB0aGVyZQorICBtaWdodCBiZSBtb3JlIG91dHB1dCBwZW5kaW5nLgorICA8cD4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIDxhIGhyZWY9IiNaX1NZTkNfRkxVU0giPlpfU1lOQ19GTFVTSDwvYT4sIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPiBmbHVzaGVzIGFzIG11Y2gKKyAgb3V0cHV0IGFzIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgZmx1c2hpbmcgYmVoYXZpb3Igb2YgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IGlzCisgIG5vdCBzcGVjaWZpZWQgZm9yIHZhbHVlcyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIG90aGVyIHRoYW4gPGEgaHJlZj0iI1pfU1lOQ19GTFVTSCI+Wl9TWU5DX0ZMVVNIPC9hPgorICBhbmQgPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4sIGJ1dCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0CisgIGFzIHBvc3NpYmxlIGFueXdheS4KKyAgPHA+CisKKyAgICA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKSBzaG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiBvciBhbgorICBlcnJvci4gSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcAorICAoYSBzaW5nbGUgY2FsbCBvZiA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4pLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8KKyAgPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4uIEluIHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nCisgIG91dHB1dCBpcyBmbHVzaGVkIDsgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUKKyAgdW5jb21wcmVzc2VkIGRhdGEuIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbiBzYXZlZAorICBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgVGhlIG5leHQgb3BlcmF0aW9uIG9uIHRoaXMgc3RyZWFtIG11c3QKKyAgYmUgPGEgaHJlZj0iI2luZmxhdGVFbmQiPmluZmxhdGVFbmQ8L2E+IHRvIGRlYWxsb2NhdGUgdGhlIGRlY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4uIFRoZSB1c2Ugb2YgPGEgaHJlZj0iI1pfRklOSVNIIj5aX0ZJTklTSDwvYT4KKyAgaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBpbmZvcm0gPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+IHRoYXQgYSBmYXN0ZXIgcm91dGluZQorICBtYXkgYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKSBjYWxsLgorICA8cD4KKworICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHBvaW50IChzZWUgPGEgaHJlZj0iI2luZmxhdGVTZXREaWN0aW9uYXJ5Ij5pbmZsYXRlU2V0RGljdGlvbmFyeTwvYT4KKyAgYmVsb3cpLCA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4gc2V0cyBzdHJtLTxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+IHRvIHRoZSA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gY2hlY2tzdW0gb2YgdGhlCisgIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIDxhIGhyZWY9IiNaX05FRURfRElDVCI+Wl9ORUVEX0RJQ1Q8L2E+IDsgb3RoZXJ3aXNlIAorICBpdCBzZXRzIHN0cm0tJmd0IDxhIGhyZWY9IiNhZGxlciI+YWRsZXI8L2E+IHRvIHRoZSA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZAorICBzbyBmYXIgKHRoYXQgaXMsIDxhIGhyZWY9IiN0b3RhbF9vdXQiPnRvdGFsX291dDwvYT4gYnl0ZXMpIGFuZCByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiwgPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiBvcgorICBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZCBiZWxvdy4gQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCA8YSBocmVmPSIjaW5mbGF0ZSI+aW5mbGF0ZTwvYT4oKQorICBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgPGEgaHJlZj0iI2FkbGVyMzIiPmFkbGVyMzI8L2E+IGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlCisgIGNvbXByZXNzb3IgYW5kIHJldHVybnMgPGEgaHJlZj0iI1pfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiBvbmx5IGlmIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LgorICA8cD4KKworICAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpIHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dCBwcm9jZXNzZWQKKyAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCA8YSBocmVmPSIjWl9TVFJFQU1fRU5EIj5aX1NUUkVBTV9FTkQ8L2E+IGlmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKKyAgYmVlbiByZWFjaGVkIGFuZCBhbGwgdW5jb21wcmVzc2VkIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCwgPGEgaHJlZj0iI1pfTkVFRF9ESUNUIj5aX05FRURfRElDVDwvYT4gaWYgYQorICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgPGEgaHJlZj0iI1pfREFUQV9FUlJPUiI+Wl9EQVRBX0VSUk9SPC9hPiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMKKyAgY29ycnVwdGVkIChpbnB1dCBzdHJlYW0gbm90IGNvbmZvcm1pbmcgdG8gdGhlIHpsaWIgZm9ybWF0IG9yIGluY29ycmVjdAorICA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4gY2hlY2tzdW0pLCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50CisgIChmb3IgZXhhbXBsZSBpZiA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gb3IgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gd2FzIE5VTEwpLCA8YSBocmVmPSIjWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiBpZiB0aGVyZSB3YXMgbm90CisgIGVub3VnaCBtZW1vcnksIDxhIGhyZWY9IiNaX0JVRl9FUlJPUiI+Wl9CVUZfRVJST1I8L2E+IGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlIG9yIGlmIHRoZXJlIHdhcyBub3QKKyAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIgd2hlbiA8YSBocmVmPSIjWl9GSU5JU0giPlpfRklOSVNIPC9hPiBpcyB1c2VkLiBJbiB0aGUgPGEgaHJlZj0iI1pfREFUQV9FUlJPUiI+Wl9EQVRBX0VSUk9SPC9hPgorICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHRoZW4gY2FsbCA8YSBocmVmPSIjaW5mbGF0ZVN5bmMiPmluZmxhdGVTeW5jPC9hPiB0byBsb29rIGZvciBhIGdvb2QKKyAgY29tcHJlc3Npb24gYmxvY2suCisgIDxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiAgaW50ICA8YSBuYW1lPSJpbmZsYXRlRW5kIj5pbmZsYXRlRW5kPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCisgICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55CisgICBwZW5kaW5nIG91dHB1dC4KKyAgIDxwPgorCisgICAgIDxhIGhyZWY9IiNpbmZsYXRlRW5kIj5pbmZsYXRlRW5kPC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+CisgICB3YXMgaW5jb25zaXN0ZW50LiBJbiB0aGUgZXJyb3IgY2FzZSwgPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhCisgICBzdGF0aWMgc3RyaW5nICh3aGljaCBtdXN0IG5vdCBiZSBkZWFsbG9jYXRlZCkuCis8L2RsPgorPGhyPgorPGEgbmFtZT0iQWR2YW5jZWQgZnVuY3Rpb25zIj48aDI+IEFkdmFuY2VkIGZ1bmN0aW9ucyA8L2gyPgorICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQgb25seSBpbiBzb21lIHNwZWNpYWwgYXBwbGljYXRpb25zLgorPGgzPiBGdW5jdGlvbiBsaXN0IDwvaDM+Cis8dWw+Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSwKKzxsaT4gaW50ICA8YSBocmVmPSIjZGVmbGF0ZVNldERpY3Rpb25hcnkiPmRlZmxhdGVTZXREaWN0aW9uYXJ5PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBjb25zdCBCeXRlZiAqZGljdGlvbmFyeSwgdUludCAgZGljdExlbmd0aCk7Cis8bGk+IGludCAgPGEgaHJlZj0iI2RlZmxhdGVDb3B5Ij5kZWZsYXRlQ29weTwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gZGVzdCwgPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzb3VyY2UpOworPGxpPiBpbnQgIDxhIGhyZWY9IiNkZWZsYXRlUmVzZXQiPmRlZmxhdGVSZXNldDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7Cis8bGk+IGludCAgPGEgaHJlZj0iI2RlZmxhdGVQYXJhbXMiPmRlZmxhdGVQYXJhbXM8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCBsZXZlbCwgaW50IHN0cmF0ZWd5KTsKKzxsaT4gaW50ICA8YSBocmVmPSIjaW5mbGF0ZUluaXQyIj5pbmZsYXRlSW5pdDI8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCAgd2luZG93Qml0cyk7Cis8bGk+ICBpbnQgIDxhIGhyZWY9IiNpbmZsYXRlU2V0RGljdGlvbmFyeSI+aW5mbGF0ZVNldERpY3Rpb25hcnk8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LCB1SW50ICBkaWN0TGVuZ3RoKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjaW5mbGF0ZVN5bmMiPmluZmxhdGVTeW5jPC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtKTsKKzxsaT4gaW50ICA8YSBocmVmPSIjaW5mbGF0ZVJlc2V0Ij5pbmZsYXRlUmVzZXQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0pOworCis8L3VsPgorPGgzPiBGdW5jdGlvbiBkZXNjcmlwdGlvbiA8L2gzPgorPGRsPgorPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGludCAgPGEgbmFtZT0iZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCAgbGV2ZWwsIGludCAgbWV0aG9kLCBpbnQgIHdpbmRvd0JpdHMsIGludCAgbWVtTGV2ZWwsIGludCAgc3RyYXRlZ3kpOzwvZm9udD4KKworPGRkPiBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiB3aXRoIG1vcmUgY29tcHJlc3Npb24gb3B0aW9ucy4gVGhlCisgICBmaWVsZHMgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+LCA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+LCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBhbmQgPGEgaHJlZj0iI29wYXF1ZSI+b3BhcXVlPC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQorICAgdGhlIGNhbGxlci48cD4KKworICAgICBUaGUgbWV0aG9kIHBhcmFtZXRlciBpcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kLiBJdCBtdXN0IGJlIDxhIGhyZWY9IiNaX0RFRkxBVEVEIj5aX0RFRkxBVEVEPC9hPiBpbgorICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LjxwPgorCisgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZQorICAgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvciB0aGlzCisgICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBMYXJnZXIgdmFsdWVzIG9mIHRoaXMgcGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKKyAgIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKKyAgIDxhIGhyZWY9IiNkZWZsYXRlSW5pdCI+ZGVmbGF0ZUluaXQ8L2E+IGlzIHVzZWQgaW5zdGVhZC48cD4KKworICAgICBUaGUgbWVtTGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZAorICAgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPi4gbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dAorICAgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbyA7IG1lbUxldmVsPTkgdXNlcyBtYXhpbXVtIG1lbW9yeQorICAgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguIFNlZSB6Y29uZi5oIGZvciB0b3RhbCBtZW1vcnkKKyAgIHVzYWdlIGFzIGEgZnVuY3Rpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2ZWwuPHA+CisKKyAgICAgVGhlIHN0cmF0ZWd5IHBhcmFtZXRlciBpcyB1c2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVXNlIHRoZQorICAgdmFsdWUgPGEgaHJlZj0iI1pfREVGQVVMVF9TVFJBVEVHWSI+Wl9ERUZBVUxUX1NUUkFURUdZPC9hPiBmb3Igbm9ybWFsIGRhdGEsIDxhIGhyZWY9IiNaX0ZJTFRFUkVEIj5aX0ZJTFRFUkVEPC9hPiBmb3IgZGF0YSBwcm9kdWNlZCBieSBhCisgICBmaWx0ZXIgKG9yIHByZWRpY3RvciksIG9yIDxhIGhyZWY9IiNaX0hVRkZNQU5fT05MWSI+Wl9IVUZGTUFOX09OTFk8L2E+IHRvIGZvcmNlIEh1ZmZtYW4gZW5jb2Rpbmcgb25seSAobm8KKyAgIHN0cmluZyBtYXRjaCkuICBGaWx0ZXJlZCBkYXRhIGNvbnNpc3RzIG1vc3RseSBvZiBzbWFsbCB2YWx1ZXMgd2l0aCBhCisgICBzb21ld2hhdCByYW5kb20gZGlzdHJpYnV0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMKKyAgIHR1bmVkIHRvIDxhIGhyZWY9IiNjb21wcmVzcyI+Y29tcHJlc3M8L2E+IHRoZW0gYmV0dGVyLiBUaGUgZWZmZWN0IG9mIDxhIGhyZWY9IiNaX0ZJTFRFUkVEIj5aX0ZJTFRFUkVEPC9hPiBpcyB0byBmb3JjZSBtb3JlCisgICBIdWZmbWFuIGNvZGluZyBhbmQgbGVzcyBzdHJpbmcgbWF0Y2hpbmcgOyBpdCBpcyBzb21ld2hhdCBpbnRlcm1lZGlhdGUKKyAgIGJldHdlZW4gWl9ERUZBVUxUIGFuZCA8YSBocmVmPSIjWl9IVUZGTUFOX09OTFkiPlpfSFVGRk1BTl9PTkxZPC9hPi4gVGhlIHN0cmF0ZWd5IHBhcmFtZXRlciBvbmx5IGFmZmVjdHMKKyAgIHRoZSBjb21wcmVzc2lvbiByYXRpbyBidXQgbm90IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY29tcHJlc3NlZCBvdXRwdXQgZXZlbgorICAgaWYgaXQgaXMgbm90IHNldCBhcHByb3ByaWF0ZWx5LjxwPgorCisgICAgICA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIGEgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgYW4gaW52YWxpZAorICAgbWV0aG9kKS4gPGEgaHJlZj0iI21zZyI+bXNnPC9hPiBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPiBkb2VzCisgICBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLjxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJkZWZsYXRlU2V0RGljdGlvbmFyeSI+ZGVmbGF0ZVNldERpY3Rpb25hcnk8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LCB1SW50ICBkaWN0TGVuZ3RoKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgPGEgaHJlZj0iI2RlZmxhdGVJbml0Ij5kZWZsYXRlSW5pdDwvYT4sIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4gb3IgPGEgaHJlZj0iI2RlZmxhdGVSZXNldCI+ZGVmbGF0ZVJlc2V0PC9hPiwgYmVmb3JlIGFueQorICAgY2FsbCBvZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4uIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQorICAgZGljdGlvbmFyeSAoc2VlIDxhIGhyZWY9IiNpbmZsYXRlU2V0RGljdGlvbmFyeSI+aW5mbGF0ZVNldERpY3Rpb25hcnk8L2E+KS48cD4KKworICAgICBUaGUgZGljdGlvbmFyeSBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5CisgICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5CisgICB1c2VkIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCisgICBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuIGJlCisgICBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5IDsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIgdGhhbgorICAgd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LjxwPgorCisgICAgIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3Npb24gZGF0YSBzdHJ1Y3R1cmVzIHNlbGVjdGVkIGJ5CisgICA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiBvciA8YSBocmVmPSIjZGVmbGF0ZUluaXQyIj5kZWZsYXRlSW5pdDI8L2E+LCBhIHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkgbWF5IGluIGVmZmVjdCBiZQorICAgZGlzY2FyZGVkLCBmb3IgZXhhbXBsZSBpZiB0aGUgZGljdGlvbmFyeSBpcyBsYXJnZXIgdGhhbiB0aGUgd2luZG93IHNpemUgaW4KKyAgIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPiBvciBkZWZsYXRlMi4gVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZSB1c2VmdWwgc2hvdWxkIGJlCisgICBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeSwgbm90IGF0IHRoZSBmcm9udC48cD4KKworICAgICBVcG9uIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLCBzdHJtLSZndCA8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiBpcyBzZXQgdG8gdGhlIEFkbGVyMzIgdmFsdWUKKyAgIG9mIHRoZSBkaWN0aW9uYXJ5IDsgdGhlIGRlY29tcHJlc3NvciBtYXkgbGF0ZXIgdXNlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lCisgICB3aGljaCBkaWN0aW9uYXJ5IGhhcyBiZWVuIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuIChUaGUgQWRsZXIzMiB2YWx1ZQorICAgYXBwbGllcyB0byB0aGUgd2hvbGUgZGljdGlvbmFyeSBldmVuIGlmIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGRpY3Rpb25hcnkgaXMKKyAgIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuKTxwPgorCisgICAgIDxhIGhyZWY9IiNkZWZsYXRlU2V0RGljdGlvbmFyeSI+ZGVmbGF0ZVNldERpY3Rpb25hcnk8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIG9yIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlvbmFyeSkgb3IgdGhlIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiBpcworICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgc3RyZWFtCisgICBvciBpZiB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGlzIGJzb3J0KS4gPGEgaHJlZj0iI2RlZmxhdGVTZXREaWN0aW9uYXJ5Ij5kZWZsYXRlU2V0RGljdGlvbmFyeTwvYT4gZG9lcyBub3QKKyAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKS48cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJkZWZsYXRlQ29weSI+ZGVmbGF0ZUNvcHk8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IGRlc3QsIDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc291cmNlKTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIFNldHMgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSBhcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJlYW0uPHA+CisKKyAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gc2V2ZXJhbCBjb21wcmVzc2lvbiBzdHJhdGVnaWVzIHdpbGwgYmUKKyAgIHRyaWVkLCBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHdheXMgb2YgcHJlLXByb2Nlc3NpbmcgdGhlIGlucHV0CisgICBkYXRhIHdpdGggYSBmaWx0ZXIuIFRoZSBzdHJlYW1zIHRoYXQgd2lsbCBiZSBkaXNjYXJkZWQgc2hvdWxkIHRoZW4gYmUgZnJlZWQKKyAgIGJ5IGNhbGxpbmcgPGEgaHJlZj0iI2RlZmxhdGVFbmQiPmRlZmxhdGVFbmQ8L2E+LiAgTm90ZSB0aGF0IDxhIGhyZWY9IiNkZWZsYXRlQ29weSI+ZGVmbGF0ZUNvcHk8L2E+IGR1cGxpY2F0ZXMgdGhlIGludGVybmFsCisgICBjb21wcmVzc2lvbiA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3RyYXRlZ3kgaXMgc2xvdyBhbmQKKyAgIGNhbiBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LjxwPgorCisgICAgIDxhIGhyZWY9IiNkZWZsYXRlQ29weSI+ZGVmbGF0ZUNvcHk8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX01FTV9FUlJPUiI+Wl9NRU1fRVJST1I8L2E+IGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzb3VyY2Ugc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IHdhcyBpbmNvbnNpc3RlbnQKKyAgIChzdWNoIGFzIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gYmVpbmcgTlVMTCkuIDxhIGhyZWY9IiNtc2ciPm1zZzwvYT4gaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCisgICBkZXN0aW5hdGlvbi48cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJkZWZsYXRlUmVzZXQiPmRlZmxhdGVSZXNldDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7PC9mb250PgorPGRkPiAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIDxhIGhyZWY9IiNkZWZsYXRlRW5kIj5kZWZsYXRlRW5kPC9hPiBmb2xsb3dlZCBieSA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiwKKyAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4uCisgICBUaGUgc3RyZWFtIHdpbGwga2VlcCB0aGUgc2FtZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgYW55IG90aGVyIGF0dHJpYnV0ZXMKKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPi48cD4KKworICAgICAgPGEgaHJlZj0iI2RlZmxhdGVSZXNldCI+ZGVmbGF0ZVJlc2V0PC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCBvciA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IG9yIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGJlaW5nIE5VTEwpLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImRlZmxhdGVQYXJhbXMiPmRlZmxhdGVQYXJhbXM8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCBsZXZlbCwgaW50IHN0cmF0ZWd5KTs8L2ZvbnQ+Cis8ZGQ+CisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5LiAgVGhlCisgICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gPGEgaHJlZj0iI2RlZmxhdGVJbml0MiI+ZGVmbGF0ZUluaXQyPC9hPi4gIFRoaXMgY2FuIGJlCisgICB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbXByZXNzaW9uIGFuZCBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dCBkYXRhLCBvcgorICAgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgaW5wdXQgZGF0YSByZXF1aXJpbmcgYSBkaWZmZXJlbnQKKyAgIHN0cmF0ZWd5LiBJZiB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgY2hhbmdlZCwgdGhlIGlucHV0IGF2YWlsYWJsZSBzbyBmYXIKKyAgIGlzIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkIGxldmVsIChhbmQgbWF5IGJlIGZsdXNoZWQpOyB0aGUgbmV3IGxldmVsIHdpbGwKKyAgIHRha2UgZWZmZWN0IG9ubHkgYXQgdGhlIG5leHQgY2FsbCBvZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4oKS48cD4KKworICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgPGEgaHJlZj0iI2RlZmxhdGVQYXJhbXMiPmRlZmxhdGVQYXJhbXM8L2E+LCB0aGUgc3RyZWFtIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IG11c3QgYmUgc2V0IGFzIGZvcgorICAgYSBjYWxsIG9mIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpLCBzaW5jZSB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBpbnB1dCBtYXkgaGF2ZSB0bworICAgYmUgY29tcHJlc3NlZCBhbmQgZmx1c2hlZC4gSW4gcGFydGljdWxhciwgc3RybS0mZ3QgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiBtdXN0IGJlIAorICAgbm9uLXplcm8uPHA+CisKKyAgICAgPGEgaHJlZj0iI2RlZmxhdGVQYXJhbXMiPmRlZmxhdGVQYXJhbXM8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiB3YXMgaW5jb25zaXN0ZW50IG9yIGlmIGEgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLCA8YSBocmVmPSIjWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPgorICAgaWYgc3RybS0mZ3RhdmFpbF9vdXQgd2FzIHplcm8uPHA+CisKKzxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGludCAgPGEgbmFtZT0iaW5mbGF0ZUluaXQyIj5pbmZsYXRlSW5pdDI8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHN0cm0sIGludCAgd2luZG93Qml0cyk7PC9mb250PgorCis8ZGQ+ICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiA8YSBocmVmPSIjaW5mbGF0ZUluaXQiPmluZmxhdGVJbml0PC9hPiB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlci4gVGhlCisgICBmaWVsZHMgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+LCA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiwgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiwgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gYW5kIDxhIGhyZWY9IiNvcGFxdWUiPm9wYXF1ZTwvYT4gbXVzdCBiZSBpbml0aWFsaXplZAorICAgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuPHA+CisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIG1heGltdW0gd2luZG93CisgICBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiAgSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNSBmb3IKKyAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4gaXMgdXNlZAorICAgaW5zdGVhZC4gSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRoIGEgbGFyZ2VyIHdpbmRvdyBzaXplIGlzIGdpdmVuIGFzCisgICBpbnB1dCwgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkgd2lsbCByZXR1cm4gd2l0aCB0aGUgZXJyb3IgY29kZSA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGluc3RlYWQgb2YKKyAgIHRyeWluZyB0byBhbGxvY2F0ZSBhIGxhcmdlciB3aW5kb3cuPHA+CisKKyAgICAgIDxhIGhyZWY9IiNpbmZsYXRlSW5pdDIiPmluZmxhdGVJbml0MjwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgc3VjY2VzcywgPGEgaHJlZj0iI1pfTUVNX0VSUk9SIj5aX01FTV9FUlJPUjwvYT4gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhIG5lZ2F0aXZlCisgICBtZW1MZXZlbCkuIDxhIGhyZWY9IiNtc2ciPm1zZzwvYT4gaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIDxhIGhyZWY9IiNpbmZsYXRlSW5pdDIiPmluZmxhdGVJbml0MjwvYT4KKyAgIGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24gYXBhcnQgZnJvbSByZWFkaW5nIHRoZSB6bGliIGhlYWRlciBpZgorICAgcHJlc2VudDogdGhpcyB3aWxsIGJlIGRvbmUgYnkgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+KCkuIChTbyA8YSBocmVmPSIjbmV4dF9pbiI+bmV4dF9pbjwvYT4gYW5kIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IG1heSBiZQorICAgbW9kaWZpZWQsIGJ1dCA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiBhcmUgdW5jaGFuZ2VkLik8cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gIGludCAgPGEgbmFtZT0iaW5mbGF0ZVNldERpY3Rpb25hcnkiPmluZmxhdGVTZXREaWN0aW9uYXJ5PC9hPiAoPGEgaHJlZj0iI3pfc3RyZWFtcCI+el9zdHJlYW1wPC9hPiBzdHJtLCBjb25zdCBCeXRlZiAqZGljdGlvbmFyeSwgdUludCAgZGljdExlbmd0aCk7PC9mb250PgorPGRkPgorICAgICBJbml0aWFsaXplcyB0aGUgZGVjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIHVuY29tcHJlc3NlZCBieXRlCisgICBzZXF1ZW5jZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGNhbGwgb2YgPGEgaHJlZj0iI2luZmxhdGUiPmluZmxhdGU8L2E+CisgICBpZiB0aGlzIGNhbGwgcmV0dXJuZWQgPGEgaHJlZj0iI1pfTkVFRF9ESUNUIj5aX05FRURfRElDVDwvYT4uIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgorICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgQWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGNhbGwgb2YKKyAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPi4gVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCisgICBkaWN0aW9uYXJ5IChzZWUgPGEgaHJlZj0iI2RlZmxhdGVTZXREaWN0aW9uYXJ5Ij5kZWZsYXRlU2V0RGljdGlvbmFyeTwvYT4pLjxwPgorCisgICAgIDxhIGhyZWY9IiNpbmZsYXRlU2V0RGljdGlvbmFyeSI+aW5mbGF0ZVNldERpY3Rpb25hcnk8L2E+IHJldHVybnMgPGEgaHJlZj0iI1pfT0siPlpfT0s8L2E+IGlmIHN1Y2Nlc3MsIDxhIGhyZWY9IiNaX1NUUkVBTV9FUlJPUiI+Wl9TVFJFQU1fRVJST1I8L2E+IGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlvbmFyeSkgb3IgdGhlIHN0cmVhbSA8YSBocmVmPSIjc3RhdGUiPnN0YXRlPC9hPiBpcworICAgaW5jb25zaXN0ZW50LCA8YSBocmVmPSIjWl9EQVRBX0VSUk9SIj5aX0RBVEFfRVJST1I8L2E+IGlmIHRoZSBnaXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlCisgICBleHBlY3RlZCBvbmUgKGluY29ycmVjdCBBZGxlcjMyIHZhbHVlKS4gPGEgaHJlZj0iI2luZmxhdGVTZXREaWN0aW9uYXJ5Ij5pbmZsYXRlU2V0RGljdGlvbmFyeTwvYT4gZG9lcyBub3QKKyAgIHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IHN1YnNlcXVlbnQgY2FsbHMgb2YKKyAgIDxhIGhyZWY9IiNpbmZsYXRlIj5pbmZsYXRlPC9hPigpLjxwPgorCis8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBpbnQgIDxhIG5hbWU9ImluZmxhdGVTeW5jIj5pbmZsYXRlU3luYzwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7PC9mb250PgorCis8ZGQ+ICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQorICBkZXNjcmlwdGlvbiBvZiA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gd2l0aCA8YSBocmVmPSIjWl9GVUxMX0ZMVVNIIj5aX0ZVTExfRkxVU0g8L2E+KSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAorICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gTm8gb3V0cHV0IGlzIHByb3ZpZGVkLjxwPgorCisgICAgPGEgaHJlZj0iI2luZmxhdGVTeW5jIj5pbmZsYXRlU3luYzwvYT4gcmV0dXJucyA8YSBocmVmPSIjWl9PSyI+Wl9PSzwvYT4gaWYgYSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLCA8YSBocmVmPSIjWl9CVUZfRVJST1IiPlpfQlVGX0VSUk9SPC9hPgorICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgPGEgaHJlZj0iI1pfREFUQV9FUlJPUiI+Wl9EQVRBX0VSUk9SPC9hPiBpZiBubyBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgb3IgPGEgaHJlZj0iI1pfU1RSRUFNX0VSUk9SIj5aX1NUUkVBTV9FUlJPUjwvYT4gaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gSW4gdGhlIHN1Y2Nlc3MKKyAgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YgPGEgaHJlZj0iI3RvdGFsX2luIj50b3RhbF9pbjwvYT4gd2hpY2gKKyAgaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuIEluIHRoZSBlcnJvciBjYXNlLCB0aGUKKyAgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCA8YSBocmVmPSIjaW5mbGF0ZVN5bmMiPmluZmxhdGVTeW5jPC9hPiwgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaCB0aW1lLAorICB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS48cD4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICA8YSBuYW1lPSJpbmZsYXRlUmVzZXQiPmluZmxhdGVSZXNldDwvYT4gKDxhIGhyZWY9IiN6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT4gc3RybSk7PC9mb250PgorPGRkPgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gPGEgaHJlZj0iI2luZmxhdGVFbmQiPmluZmxhdGVFbmQ8L2E+IGZvbGxvd2VkIGJ5IDxhIGhyZWY9IiNpbmZsYXRlSW5pdCI+aW5mbGF0ZUluaXQ8L2E+LAorICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBkZWNvbXByZXNzaW9uIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+LgorICAgVGhlIHN0cmVhbSB3aWxsIGtlZXAgYXR0cmlidXRlcyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IDxhIGhyZWY9IiNpbmZsYXRlSW5pdDIiPmluZmxhdGVJbml0MjwvYT4uCisgICA8cD4KKworICAgICAgPGEgaHJlZj0iI2luZmxhdGVSZXNldCI+aW5mbGF0ZVJlc2V0PC9hPiByZXR1cm5zIDxhIGhyZWY9IiNaX09LIj5aX09LPC9hPiBpZiBzdWNjZXNzLCBvciA8YSBocmVmPSIjWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IG9yIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+IGJlaW5nIE5VTEwpLgorICAgPHA+Cis8L2RsPgorCis8aHI+Cis8YSBuYW1lPSJDaGVja3N1bSBmdW5jdGlvbnMiPjxoMj4gQ2hlY2tzdW0gZnVuY3Rpb25zIDwvaDI+CisgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gY29tcHJlc3Npb24gYnV0IGFyZSBleHBvcnRlZAorICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZQorICAgY29tcHJlc3Npb24gbGlicmFyeS4KKzxoMz4gRnVuY3Rpb24gbGlzdCA8L2gzPgorPHVsPgorPGxpPiB1TG9uZyAgPGEgaHJlZj0iI2FkbGVyMzIiPmFkbGVyMzI8L2E+ICh1TG9uZyA8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pOworPGxpPiB1TG9uZyAgPGEgaHJlZj0iI2NyYzMyIj5jcmMzMjwvYT4gICAodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbik7Cis8L3VsPgorPGgzPiBGdW5jdGlvbiBkZXNjcmlwdGlvbiA8L2gzPgorPGRsPgorPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gdUxvbmcgIDxhIG5hbWU9ImFkbGVyMzIiPmFkbGVyMzI8L2E+ICh1TG9uZyA8YSBocmVmPSIjYWRsZXIiPmFkbGVyPC9hPiwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pOzwvZm9udD4KKzxkZD4KKyAgICAgVXBkYXRlIGEgcnVubmluZyBBZGxlci0zMiBjaGVja3N1bSB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZAorICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3VtLiBJZiBidWYgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLgorICAgPHA+CisgICBBbiBBZGxlci0zMiBjaGVja3N1bSBpcyBhbG1vc3QgYXMgcmVsaWFibGUgYXMgYSBDUkMzMiBidXQgY2FuIGJlIGNvbXB1dGVkCisgICBtdWNoIGZhc3Rlci4gVXNhZ2UgZXhhbXBsZToKKyAgIDxwcmU+CisKKyAgICAgdUxvbmcgPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gPSA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4oMEwsIDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4sIDApOworCisgICAgIHdoaWxlIChyZWFkX2J1ZmZlcihidWZmZXIsIGxlbmd0aCkgIT0gRU9GKSB7CisgICAgICAgPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gPSA8YSBocmVmPSIjYWRsZXIzMiI+YWRsZXIzMjwvYT4oPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4sIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgfQorICAgICBpZiAoPGEgaHJlZj0iI2FkbGVyIj5hZGxlcjwvYT4gIT0gb3JpZ2luYWxfYWRsZXIpIGVycm9yKCk7CisgICA8L3ByZT4KKworPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gdUxvbmcgIDxhIG5hbWU9ImNyYzMyIj5jcmMzMjwvYT4gICAodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbik7PC9mb250PgorPGRkPgorICAgICBVcGRhdGUgYSBydW5uaW5nIGNyYyB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlIHVwZGF0ZWQKKyAgIGNyYy4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZQorICAgZm9yIHRoZSBjcmMuIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQKKyAgIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgIFVzYWdlIGV4YW1wbGU6CisgICA8cHJlPgorCisgICAgIHVMb25nIGNyYyA9IDxhIGhyZWY9IiNjcmMzMiI+Y3JjMzI8L2E+KDBMLCA8YSBocmVmPSIjWl9OVUxMIj5aX05VTEw8L2E+LCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGNyYyA9IDxhIGhyZWY9IiNjcmMzMiI+Y3JjMzI8L2E+KGNyYywgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChjcmMgIT0gb3JpZ2luYWxfY3JjKSBlcnJvcigpOworICAgPC9wcmU+Cis8L2RsPgorPGhyPgorPGEgbmFtZT0ic3RydWN0IHpfc3RyZWFtX3MiPjxoMj4gc3RydWN0IHpfc3RyZWFtX3MgPC9oMj4KKzxmb250IGNvbG9yPSJCbHVlIj4KKzxhIG5hbWU9Inpfc3RyZWFtX3MiPgorPHByZT4KK3R5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgeworICAgIEJ5dGVmICAgICo8YSBuYW1lPSJuZXh0X2luIj5uZXh0X2luPC9hPjsgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLworICAgIHVJbnQgICAgIDxhIG5hbWU9ImF2YWlsX2luIj5hdmFpbF9pbjwvYT47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9IiNuZXh0X2luIj5uZXh0X2luPC9hPiAqLworICAgIHVMb25nICAgIDxhIG5hbWU9InRvdGFsX2luIj50b3RhbF9pbjwvYT47ICAvKiB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworCisgICAgQnl0ZWYgICAgKjxhIG5hbWU9Im5leHRfb3V0Ij5uZXh0X291dDwvYT47IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqLworICAgIHVJbnQgICAgIDxhIG5hbWU9ImF2YWlsX291dCI+YXZhaWxfb3V0PC9hPjsgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgPGEgaHJlZj0iI25leHRfb3V0Ij5uZXh0X291dDwvYT4gKi8KKyAgICB1TG9uZyAgICA8YSBuYW1lPSJ0b3RhbF9vdXQiPnRvdGFsX291dDwvYT47IC8qIHRvdGFsIG5iIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KKworICAgIGNoYXIgICAgICo8YSBuYW1lPSJtc2ciPm1zZzwvYT47ICAgICAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCisgICAgc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqPGEgbmFtZT0ic3RhdGUiPnN0YXRlPC9hPjsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCisKKyAgICBhbGxvY19mdW5jIDxhIG5hbWU9InphbGxvYyI+emFsbG9jPC9hPjsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIDxhIGhyZWY9IiNzdGF0ZSI+c3RhdGU8L2E+ICovCisgICAgZnJlZV9mdW5jICA8YSBuYW1lPSJ6ZnJlZSI+emZyZWU8L2E+OyAgIC8qIHVzZWQgdG8gZnJlZSB0aGUgaW50ZXJuYWwgPGEgaHJlZj0iI3N0YXRlIj5zdGF0ZTwvYT4gKi8KKyAgICB2b2lkcGYgICAgIDxhIG5hbWU9Im9wYXF1ZSI+b3BhcXVlPC9hPjsgIC8qIHByaXZhdGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIDxhIGhyZWY9IiN6YWxsb2MiPnphbGxvYzwvYT4gYW5kIDxhIGhyZWY9IiN6ZnJlZSI+emZyZWU8L2E+ICovCisKKyAgICBpbnQgICAgIDxhIG5hbWU9ImRhdGFfdHlwZSI+ZGF0YV90eXBlPC9hPjsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYXNjaWkgb3IgYmluYXJ5ICovCisgICAgdUxvbmcgICA8YSBuYW1lPSJhZGxlciI+YWRsZXI8L2E+OyAgICAgIC8qIDxhIGhyZWY9IiNhZGxlcjMyIj5hZGxlcjMyPC9hPiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICB1TG9uZyAgIDxhIG5hbWU9InJlc2VydmVkIj5yZXNlcnZlZDwvYT47ICAgLyogPGEgaHJlZj0iI3Jlc2VydmVkIj5yZXNlcnZlZDwvYT4gZm9yIGZ1dHVyZSB1c2UgKi8KK30gPGEgaHJlZj0iI3pfc3RyZWFtX3MiPnpfc3RyZWFtPC9hPiA7CisKK3R5cGVkZWYgPGEgaHJlZj0iI3pfc3RyZWFtX3MiPnpfc3RyZWFtPC9hPiBGQVIgKiA8YSBuYW1lPSJ6X3N0cmVhbXAiPnpfc3RyZWFtcDwvYT47ICD/IAorPC9wcmU+Cis8L2ZvbnQ+CisgICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgPGEgaHJlZj0iI25leHRfaW4iPm5leHRfaW48L2E+IGFuZCA8YSBocmVmPSIjYXZhaWxfaW4iPmF2YWlsX2luPC9hPiB3aGVuIDxhIGhyZWY9IiNhdmFpbF9pbiI+YXZhaWxfaW48L2E+IGhhcworICAgZHJvcHBlZCB0byB6ZXJvLiBJdCBtdXN0IHVwZGF0ZSA8YSBocmVmPSIjbmV4dF9vdXQiPm5leHRfb3V0PC9hPiBhbmQgPGEgaHJlZj0iI2F2YWlsX291dCI+YXZhaWxfb3V0PC9hPiB3aGVuIDxhIGhyZWY9IiNhdmFpbF9vdXQiPmF2YWlsX291dDwvYT4KKyAgIGhhcyBkcm9wcGVkIHRvIHplcm8uIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluaXRpYWxpemUgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiwgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gYW5kCisgICA8YSBocmVmPSIjb3BhcXVlIj5vcGFxdWU8L2E+IGJlZm9yZSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLiBBbGwgb3RoZXIgZmllbGRzIGFyZSBzZXQgYnkgdGhlCisgICBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBtdXN0IG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gPHA+CisKKyAgIFRoZSA8YSBocmVmPSIjb3BhcXVlIj5vcGFxdWU8L2E+IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKKyAgIHBhcmFtZXRlciBmb3IgY2FsbHMgb2YgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBhbmQgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4uIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3VzdG9tCisgICBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXR0YWNoZXMgbm8gbWVhbmluZyB0byB0aGUKKyAgIDxhIGhyZWY9IiNvcGFxdWUiPm9wYXF1ZTwvYT4gdmFsdWUuIDxwPgorCisgICA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IG11c3QgcmV0dXJuIDxhIGhyZWY9IiNaX05VTEwiPlpfTlVMTDwvYT4gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuCisgICBJZiB6bGliIGlzIHVzZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiwgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiBhbmQgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4gbXVzdCBiZQorICAgdGhyZWFkIHNhZmUuIDxwPgorCisgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IGFuZCA8YSBocmVmPSIjemZyZWUiPnpmcmVlPC9hPiBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUKKyAgIGV4YWN0bHkgNjU1MzYgYnl0ZXMsIGJ1dCB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gdGhpcworICAgaWYgdGhlIHN5bWJvbCBNQVhTRUdfNjRLIGlzIGRlZmluZWQgKHNlZSB6Y29uZi5oKS4gV0FSTklORzogT24gTVNET1MsCisgICBwb2ludGVycyByZXR1cm5lZCBieSA8YSBocmVmPSIjemFsbG9jIj56YWxsb2M8L2E+IGZvciBvYmplY3RzIG9mIGV4YWN0bHkgNjU1MzYgYnl0ZXMgKm11c3QqCisgICBoYXZlIHRoZWlyIG9mZnNldCBub3JtYWxpemVkIHRvIHplcm8uIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24KKyAgIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gVG8gcmVkdWNlIG1lbW9yeQorICAgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZCBhbnkgYWxsb2NhdGlvbiBvZiA2NEsgb2JqZWN0cywgYXQgdGhlIGV4cGVuc2Ugb2YKKyAgIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggLURNQVhfV0JJVFM9MTQgKHNlZSB6Y29uZi5oKS4KKyAgIDxwPgorCisgICBUaGUgZmllbGRzIDxhIGhyZWY9IiN0b3RhbF9pbiI+dG90YWxfaW48L2E+IGFuZCA8YSBocmVmPSIjdG90YWxfb3V0Ij50b3RhbF9vdXQ8L2E+IGNhbiBiZSB1c2VkIGZvciBzdGF0aXN0aWNzIG9yCisgICBwcm9ncmVzcyByZXBvcnRzLiBBZnRlciBjb21wcmVzc2lvbiwgPGEgaHJlZj0iI3RvdGFsX2luIj50b3RhbF9pbjwvYT4gaG9sZHMgdGhlIHRvdGFsIHNpemUgb2YKKyAgIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBhbmQgbWF5IGJlIHNhdmVkIGZvciB1c2UgaW4gdGhlIGRlY29tcHJlc3NvcgorICAgKHBhcnRpY3VsYXJseSBpZiB0aGUgZGVjb21wcmVzc29yIHdhbnRzIHRvIGRlY29tcHJlc3MgZXZlcnl0aGluZyBpbgorICAgYSBzaW5nbGUgc3RlcCkuIDxwPgorCis8aHI+Cis8YSBuYW1lPSJDb25zdGFudHMiPjxoMj4gQ29uc3RhbnRzIDwvaDI+Cis8Zm9udCBjb2xvcj0iQmx1ZSI+Cis8cHJlPgorI2RlZmluZSA8YSBuYW1lPSJaX05PX0ZMVVNIIj5aX05PX0ZMVVNIPC9hPiAgICAgIDAKKyNkZWZpbmUgPGEgbmFtZT0iWl9QQVJUSUFMX0ZMVVNIIj5aX1BBUlRJQUxfRkxVU0g8L2E+IDEgCisJLyogd2lsbCBiZSByZW1vdmVkLCB1c2UgPGEgaHJlZj0iI1pfU1lOQ19GTFVTSCI+Wl9TWU5DX0ZMVVNIPC9hPiBpbnN0ZWFkICovCisjZGVmaW5lIDxhIG5hbWU9IlpfU1lOQ19GTFVTSCI+Wl9TWU5DX0ZMVVNIPC9hPiAgICAyCisjZGVmaW5lIDxhIG5hbWU9IlpfRlVMTF9GTFVTSCI+Wl9GVUxMX0ZMVVNIPC9hPiAgICAzCisjZGVmaW5lIDxhIG5hbWU9IlpfRklOSVNIIj5aX0ZJTklTSDwvYT4gICAgICAgIDQKKy8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzIDsgc2VlIDxhIGhyZWY9IiNkZWZsYXRlIj5kZWZsYXRlPC9hPigpIGJlbG93IGZvciBkZXRhaWxzICovCisKKyNkZWZpbmUgPGEgbmFtZT0iWl9PSyI+Wl9PSzwvYT4gICAgICAgICAgICAwCisjZGVmaW5lIDxhIG5hbWU9IlpfU1RSRUFNX0VORCI+Wl9TVFJFQU1fRU5EPC9hPiAgICAxCisjZGVmaW5lIDxhIG5hbWU9IlpfTkVFRF9ESUNUIj5aX05FRURfRElDVDwvYT4gICAgIDIKKyNkZWZpbmUgPGEgbmFtZT0iWl9FUlJOTyI+Wl9FUlJOTzwvYT4gICAgICAgICgtMSkKKyNkZWZpbmUgPGEgbmFtZT0iWl9TVFJFQU1fRVJST1IiPlpfU1RSRUFNX0VSUk9SPC9hPiAoLTIpCisjZGVmaW5lIDxhIG5hbWU9IlpfREFUQV9FUlJPUiI+Wl9EQVRBX0VSUk9SPC9hPiAgICgtMykKKyNkZWZpbmUgPGEgbmFtZT0iWl9NRU1fRVJST1IiPlpfTUVNX0VSUk9SPC9hPiAgICAoLTQpCisjZGVmaW5lIDxhIG5hbWU9IlpfQlVGX0VSUk9SIj5aX0JVRl9FUlJPUjwvYT4gICAgKC01KQorI2RlZmluZSA8YSBuYW1lPSJaX1ZFUlNJT05fRVJST1IiPlpfVkVSU0lPTl9FUlJPUjwvYT4gKC02KQorLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlCisgKiB2YWx1ZXMgYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLgorICovCisKKyNkZWZpbmUgPGEgbmFtZT0iWl9OT19DT01QUkVTU0lPTiI+Wl9OT19DT01QUkVTU0lPTjwvYT4gICAgICAgICAwCisjZGVmaW5lIDxhIG5hbWU9IlpfQkVTVF9TUEVFRCI+Wl9CRVNUX1NQRUVEPC9hPiAgICAgICAgICAgICAxCisjZGVmaW5lIDxhIG5hbWU9IlpfQkVTVF9DT01QUkVTU0lPTiI+Wl9CRVNUX0NPTVBSRVNTSU9OPC9hPiAgICAgICA5CisjZGVmaW5lIDxhIG5hbWU9IlpfREVGQVVMVF9DT01QUkVTU0lPTiI+Wl9ERUZBVUxUX0NPTVBSRVNTSU9OPC9hPiAgKC0xKQorLyogY29tcHJlc3Npb24gbGV2ZWxzICovCisKKyNkZWZpbmUgPGEgbmFtZT0iWl9GSUxURVJFRCI+Wl9GSUxURVJFRDwvYT4gICAgICAgICAgICAxCisjZGVmaW5lIDxhIG5hbWU9IlpfSFVGRk1BTl9PTkxZIj5aX0hVRkZNQU5fT05MWTwvYT4gICAgICAgIDIKKyNkZWZpbmUgPGEgbmFtZT0iWl9ERUZBVUxUX1NUUkFURUdZIj5aX0RFRkFVTFRfU1RSQVRFR1k8L2E+ICAgIDAKKy8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5IDsgc2VlIDxhIGhyZWY9IiNkZWZsYXRlSW5pdDIiPmRlZmxhdGVJbml0MjwvYT4oKSBiZWxvdyBmb3IgZGV0YWlscyAqLworCisjZGVmaW5lIDxhIG5hbWU9IlpfQklOQVJZIj5aX0JJTkFSWTwvYT4gICAwCisjZGVmaW5lIDxhIG5hbWU9IlpfQVNDSUkiPlpfQVNDSUk8L2E+ICAgIDEKKyNkZWZpbmUgPGEgbmFtZT0iWl9VTktOT1dOIj5aX1VOS05PV048L2E+ICAyCisvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIDxhIGhyZWY9IiNkYXRhX3R5cGUiPmRhdGFfdHlwZTwvYT4gZmllbGQgKi8KKworI2RlZmluZSA8YSBuYW1lPSJaX0RFRkxBVEVEIj5aX0RFRkxBVEVEPC9hPiAgIDgKKy8qIFRoZSA8YSBocmVmPSIjZGVmbGF0ZSI+ZGVmbGF0ZTwvYT4gY29tcHJlc3Npb24gbWV0aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbikgKi8KKworI2RlZmluZSA8YSBuYW1lPSJaX05VTEwiPlpfTlVMTDwvYT4gIDAgIC8qIGZvciBpbml0aWFsaXppbmcgPGEgaHJlZj0iI3phbGxvYyI+emFsbG9jPC9hPiwgPGEgaHJlZj0iI3pmcmVlIj56ZnJlZTwvYT4sIDxhIGhyZWY9IiNvcGFxdWUiPm9wYXF1ZTwvYT4gKi8KKworI2RlZmluZSA8YSBuYW1lPSJ6bGliX3ZlcnNpb24iPnpsaWJfdmVyc2lvbjwvYT4gPGEgaHJlZj0iI3psaWJWZXJzaW9uIj56bGliVmVyc2lvbjwvYT4oKQorLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBsZXNzIHRoYW4gMS4wLjIgKi8KKzwvcHJlPgorPC9mb250PgorCis8aHI+Cis8YSBuYW1lPSJNaXNjIj48aDI+IE1pc2MgPC9oMj4KKyA8YSBocmVmPSIjZGVmbGF0ZUluaXQiPmRlZmxhdGVJbml0PC9hPiBhbmQgPGEgaHJlZj0iI2luZmxhdGVJbml0Ij5pbmZsYXRlSW5pdDwvYT4gYXJlIG1hY3JvcyB0byBhbGxvdyBjaGVja2luZyB0aGUgemxpYiB2ZXJzaW9uCisgYW5kIHRoZSBjb21waWxlcidzIHZpZXcgb2YgPGEgaHJlZj0iI3pfc3RyZWFtX3MiPnpfc3RyZWFtPC9hPi4KKyA8cD4KKyBPdGhlciBmdW5jdGlvbnM6CisgPGRsPgorIDxmb250IGNvbG9yPSJCbHVlIj48ZHQ+IGNvbnN0IGNoYXIgICAqICA8YSBuYW1lPSJ6RXJyb3IiPnpFcnJvcjwvYT4gICAgICAgICAgIChpbnQgZXJyKTs8L2ZvbnQ+CisgPGZvbnQgY29sb3I9IkJsdWUiPjxkdD4gaW50ICAgICAgICAgICAgIDxhIG5hbWU9ImluZmxhdGVTeW5jUG9pbnQiPmluZmxhdGVTeW5jUG9pbnQ8L2E+ICg8YSBocmVmPSIjel9zdHJlYW1wIj56X3N0cmVhbXA8L2E+IHopOzwvZm9udD4KKyA8Zm9udCBjb2xvcj0iQmx1ZSI+PGR0PiBjb25zdCB1TG9uZ2YgKiAgPGEgbmFtZT0iZ2V0X2NyY190YWJsZSI+Z2V0X2NyY190YWJsZTwvYT4gICAgKHZvaWQpOzwvZm9udD4KKyA8L2RsPgorIDxocj4KKyA8Zm9udCBzaXplPSItMSI+CisgTGFzdCB1cGRhdGU6IFdlZCBPY3QgMTMgMjA6NDI6MzQgMTk5OTxicj4KKyBwaWFwaUBjc2llLm50dS5lZHUudHcKKyA8L2ZvbnQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3p1dGlsLmMgYi96dXRpbC5jCmluZGV4IGIzZGU0ZTguLmRmYzM4ZWMgMTAwNjQ0Ci0tLSBhL3p1dGlsLmMKKysrIGIvenV0aWwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaCAKICAqLwogCmRpZmYgLS1naXQgYS96dXRpbC5oIGIvenV0aWwuaAppbmRleCA2ZjJjYjk3Li43MThlYmMxIDEwMDY0NAotLS0gYS96dXRpbC5oCisrKyBiL3p1dGlsLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFjZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAo=