ICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuMTIuMAogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4xMi4wIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkgCkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuOSBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDgsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA4LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gICAgICAgICAgICBBZGQgQm9vbGVhblV0aWxzLmJvb2xlYW5WYWx1ZXMoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBCb29sZWFuVXRpbHMucHJpbWl0aXZlVmFsdWVzKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTM1OiBBZGQgU3RyaW5nVXRpbHMuY29udGFpbnNBbnlJZ25vcmVDYXNlKENoYXJTZXF1ZW5jZSwgQ2hhclNlcXVlbmNlLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeSwgSXNpcmEgU2VuZXZpcmF0bmUuCm8gTEFORy0xMzU5OiBBZGQgU3RvcFdhdGNoLmdldFN0b3BUaW1lKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIEtlZWdhbiBXaXR0LgpvICAgICAgICAgICAgTW9yZSB0ZXN0IGNvdmVyYWdlIGZvciBDaGFyU2VxdWVuY2VVdGlscy4gIzYzMS4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLgpvICAgICAgICAgICAgQWRkIGZsdWVudC1zdHlsZSBBcnJheVNvcnRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIExvY2FsZVV0aWxzLnRvTG9jYWxlKExvY2FsZSkgdG8gYXZvaWQgTlBFcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBGYWlsYWJsZVNob3J0U3VwcGxpZXIsIGhhbmR5IGZvciBKREJDIEFQSXMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgSmF2YVZlcnNpb24uSkFWQV8xNy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2MzY6IEFkZCBtaXNzaW5nIGJvb2xlYW5bXSBqb2luIG1ldGhvZCAjNjg2LiBUaGFua3MgdG8gLgpvICAgICAgICAgICAgQWRkIFN0cmluZ1V0aWxzLnN1YnN0cmluZ0JlZm9yZShTdHJpbmcsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgUmFuZ2UuSU5URUdFUi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBEdXJhdGlvblV0aWxzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgSW50cm9kdWNlIHRoZSB1c2Ugb2YgQE5vbm51bGwsIGFuZCBATnVsbGFibGUsIGFuZCB0aGUgT2JqZWN0cyBjbGFzcyBhcyBhIGhlbHBlciB0b29sLgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgdHJ1ZSBhbmQgZmFsc2UgU3RyaW5nIGNvbnN0YW50cyAjNzE0LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgT2JqZWN0VXRpbHMucmVxdWlyZU5vbkVtcHR5KCkgIzcxNi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xNTkyOiBDb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIFJhbmRvbVV0aWxzLm5leHRMb25nKGxvbmcsIGxvbmcpIFRoYW5rcyB0byBIdWFuZyBQaW5nY2FpLCBBbGV4IEhlcmJlcnQuCm8gTEFORy0xNjAwOiBSZXN0b3JlIGhhbmRsaW5nIG9mIGNvbGxlY3Rpb25zIGZvciBub24tSlNPTiBUb1N0cmluZ1N0eWxlICM2MTAuIFRoYW5rcyB0byBNaWNoYWVsIEYuCm8gICAgICAgICAgICBDb250ZXh0ZWRFeGNlcHRpb24gSmF2YWRvYyBhZGQgbWlzc2luZyBzZW1pY29sb24gIzU4MS4gVGhhbmtzIHRvIGlhbWNoYW8xMTI5LgpvIExBTkctMTYwODogUmVzb2x2ZSBKVW5pdCBwaW9uZWVyIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIHVzaW5nIEpVbml0IEJPTS4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLgpvICAgICAgICAgICAgTnVtYmVyVXRpbHNUZXN0IC0gaW5jb3JyZWN0IHR5cGVzIGluIG1pbi9tYXggdGVzdHMgIzYzNC4gVGhhbmtzIHRvIEh1YmVydFdvLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTc5OiBJbXByb3ZlIFN0cmluZ1V0aWxzLnN0cmlwQWNjZW50cyBjb252ZXJzaW9uIG9mIHJlbWFpbmluZyBhY2NlbnRzLiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTYwNjogU3RyaW5nVXRpbHMuY291bnRNYXRjaGVzIC0gY2xhcmlmeSBKYXZhZG9jLiBUaGFua3MgdG8gUnVzdGVtIEdhbGlldi4KbyBMQU5HLTE1OTE6IFJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnQgZnJvbSBzdWJzdHJpbmcgY2FsbC4gVGhhbmtzIHRvIGJoYXduYTk0LgpvIExBTkctMTYxMzogQmlnRGVjaW1hbCBpcyBjcmVhdGVkIHdoZW4geW91IHBhc3MgaXQgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcywgIzY0Mi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1NDE6IEFycmF5VXRpbHMuY29udGFpbnMoKSBhbmQgaW5kZXhPZigpIGZhaWwgdG8gaGFuZGxlIERvdWJsZS5OYU4gIzY0Ny4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2MTU6IEFycmF5VXRpbHMgY29udGFpbnMoKSBhbmQgaW5kZXhPZigpIGZhaWwgdG8gaGFuZGxlIEZsb2F0Lk5hTiAjICM1NjEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBGaXggcG90ZW50aWFsIE5QRSBpbiBUeXBlVXRpbHMuaXNBc3NpZ25hYmxlKFR5cGUsIFBhcmFtZXRlcml6ZWRUeXBlLCBNYXAsIFR5cGU+KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE0MjA6IFR5cGVVdGlscy5pc0Fzc2lnbmFibGUgcmV0dXJucyB3cm9uZyByZXN1bHQgZm9yIEdlbmVyaWNBcnJheVR5cGUgYW5kIFBhcmFtZXRlcml6ZWRUeXBlLCAjNjQzLiBUaGFua3MgdG8gR29yZG9uIEZyYXNlciwgUm9zdGlzbGF2IEtyYXNueSwgQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTYxMjogdGVzdEdldEFsbEZpZWxkcyBhbmQgdGVzdEdldEZpZWxkc1dpdGhBbm5vdGF0aW9uIHNvbWV0aW1lcyBmYWlsLiBUaGFua3MgdG8gWGluVCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgRml4IEphdmFkb2MgZm9yIFN5c3RlbVV0aWxzLmlzSmF2YVZlcnNpb25BdE1vc3QoKSAjNjM4LiBUaGFua3MgdG8gSm9obiBSLiBEJ09yYXppby4KbyBMQU5HLTE2MTA6IEZpeCBTdHJpbmdVdGlscy51bndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gIzYzNi4gVGhhbmtzIHRvIFRvbnkgTGlhbmcuCm8gICAgICAgICAgICBGaXggZm9ybWF0dGluZyBvZiBpc0FueUJsYW5rKCkgYW5kIGlzQW55RW1wdHkoKS4gIzUxMy4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLgpvIExBTkctMTYxODogVHlwZVV0aWxzLiBjb250YWluc1R5cGVWYXJpYWJsZXMgZG9lcyBub3Qgc3VwcG9ydCBHZW5lcmljQXJyYXlUeXBlICM2NjEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIExBTkctMTYyMjogSmF2YWRvYyBvZiBzb21lIG1ldGhvZHMgaW5jb3JyZWN0bHkgcmVmZXJzIHRvIGFub3RoZXIgbWV0aG9kLCAjNjY3LCAjNjY4LiAjNjcwLiBUaGFua3MgdG8gS2FuYWsgU29ueSwgYW5vbWVuLXMuCm8gTEFORy0xNjIwOiBSZWZpbmUgU3RyaW5nVXRpbHMubGFzdEluZGV4T2ZJZ25vcmVDYXNlICM2NjQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIExBTkctMTYxOTogUmVmaW5lIFN0cmluZ1V0aWxzLmFiYnJldmlhdGUgIzY2My4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gTEFORy0xNTg0OiBSZWZpbmUgU3RyaW5nVXRpbHMuaXNOdW1lcmljU3BhY2UgIzU3My4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gTEFORy0xNTgwOiBSZWZpbmUgU3RyaW5nVXRpbHMuZGVsZXRlV2hpdGVzcGFjZSAjNTY5LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyBMQU5HLTE2MjY6IENvcnJlY3Rpb24gaW4gSmF2YWRvYyBvZiBzb21lIG1ldGhvZHMuICM2NzMgVGhhbmtzIHRvIEthbmFrIFNvbnkuCm8gTEFORy0xNjI4OiBKYXZhZG9jIGZvciBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20oKSBsZXR0ZXJzLCBudW1iZXJzIHBhcmFtZXRlcnMgaXMgd3JvbmcuIFRoYW5rcyB0byBKYXJra28gUmFudGF2dW9yaS4KbyAgICAgICAgICAgIENvcnJlY3QgbWFya3VwIGluIEphdmFkb2MgZm9yIHVuYmFsYW5jZWQgYnJhY2VzICM2NzkuIFRoYW5rcyB0byBGZWxpeCBTY2h1bWFjaGVyLgpvIExBTkctMTU0NDogTWV0aG9kVXRpbHMuaW52b2tlTWV0aG9kIE51bGxQb2ludGVyRXhjZXB0aW9uIGluIGNhc2Ugb2YgbnVsbCBpbiBhcmdzIGxpc3QgIzY4MC4gVGhhbmtzIHRvIFBldGVyIE5hZ3ksIE1pY2hhZWwgQnVjaywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTYzNzogRml4IDIgZGlnaXQgd2VlayB5ZWFyIGZvcm1hdHRpbmcgIzY4OC4gVGhhbmtzIHRvIFVyaSBHb25lbiwgR2FyeSBHcmVnb3J5LCBNaWNoYWVsIE9zaXBvdi4KbyAgICAgICAgICAgIEZpeCBicm9rZW4gSmF2YWRvYyBsaW5rcyB0byBjb21tb25zLXRleHQgIzcxMi4gVGhhbmtzIHRvIENocmlzIFNtb3d0b24uCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBUaHJlYWRVdGlscy5zbGVlcChEdXJhdGlvbikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBUaHJlYWRVdGlscy5qb2luKFRocmVhZCwgRHVyYXRpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIE9iamVjdFV0aWxzLndhaXQoRHVyYXRpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKQ2hhbmdlczoKbyBMQU5HLTE1OTY6IEFycmF5VXRpbHMudG9QcmltaXRpdmUoT2JqZWN0KSBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW4gYW5kIG90aGVyIHR5cGVzICM2MDcuIFRoYW5rcyB0byBSaWNoYXJkIEVja2FydCBkZSBDYXN0aWxoby4KbyAgICAgICAgICAgIEVuYWJsZSBEZXBlbmRhYm90ICM1ODcuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGp1bml0LWp1cGl0ZXIgZnJvbSA1LjYuMiB0byA1LjcuMC4KbyAgICAgICAgICAgIEJ1bXAgc3BvdGJ1Z3MgZnJvbSA0LjEuMiB0byA0LjIuMSwgIzYyNywgIzY3MSwgIzcwOC4gVGhhbmtzIHRvIGNodG9tcGtpLCBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBzcG90YnVncy1tYXZlbi1wbHVnaW4gZnJvbSA0LjAuMCB0byA0LjIuMCwgIzU5MywgIzU5NiwgIzYwOSwgIzYyMywgIzYzMiwgIzY5Mi4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGJpei5hUXV0ZS5ibmRsaWIgZnJvbSA1LjEuMSB0byA1LjMuMCAjNTkyLCAjNjI4LCAjNzE1LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAganVuaXQtcGlvbmVlciBmcm9tIDAuNi4wIHRvIDEuMS4wLCAjNTg5LCAjNTk3LCAjNjAwLCAjNjI0LCAjNjI1LCAjNjYyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgY2hlY2tzdHlsZSBmcm9tIDguMzQgdG8gOC40MCwgIzU5NCwgIzYxNCwgIzYzNywgIzY2NSwgIzcwNi4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGFjdGlvbnMvY2hlY2tvdXQgZnJvbSB2Mi4zLjEgdG8gdjIuMy40ICM2MDEsICM2MzkuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBhY3Rpb25zL3NldHVwLWphdmEgZnJvbSB2MS40LjAgdG8gdjEuNC4yICM2MTIuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgVXBkYXRlIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjUgdG8gMC44LjYgKEZpeGVzIEphdmEgMTUgYnVpbGRzKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSBtYXZlbi1zdXJlZmlyZS1wbHVnaW4gMi4yMi4yIC0+IDMuMC4wLU01LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBtYXZlbi1wbWQtcGx1Z2luIGZyb20gMy4xMy4wIHRvIDMuMTQuMCAjNjYwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjIxIHRvIDEuMjcgIzY3NC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBVcGRhdGUgY29tbW9ucy5qYXBpY21wLnZlcnNpb24gMC4xNC4zIC0+IDAuMTUuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFByb2Nlc3Nvci5qYXZhOiBjaGVjayBlbnVtIGVxdWFsaXR5IHdpdGggPT0gaW5zdGVhZCBvZiAuZXF1YWxzKCkgbWV0aG9kICM2OTAuIFRoYW5rcyB0byBBbGkgSy4gTm91cmkuCm8gICAgICAgICAgICBCdW1wIGp1bml0LXBpb25lZXIgZnJvbSAxLjEuMCB0byAxLjMuMCAjNzAyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gZnJvbSAzLjEuMSB0byAzLjEuMiAjNzA1LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgYWN0aW9ucy9jYWNoZSBmcm9tIHYyIHRvIHYyLjEuNCAjNzEwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAganVuaXQtYm9tIGZyb20gNS43LjAgdG8gNS43LjEgIzcwNy4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBNaW5vciBJbXByb3ZlbWVudHMgIzcwMS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gICAgICAgICAgICBNaW5vciBJbXByb3ZlbWVudDogQWRkIGZpbmFsIHZhcmlhYmxlLnRyeSB0byBtYWtlIHRoZSBjb2RlIHJlYWQtb25seSAjNzAwLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIE1pbm9yIEltcHJvdmVtZW50OiBSZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemVyICM2OTkuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgVXNlIG93biB2YWxpZGF0b3IgT2JqZWN0VXRpbHMuYW55TnVsbCB0byBjaGVjayBudWxsIFN0cmluZyBpbnB1dCAjNzE4LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvCgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2Rvd25sb2FkX2xhbmcuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy4xMQogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuMTEgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDguCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOiAKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyAgICAgICAgICAgIEFkZCBBcnJheVV0aWxzLmlzU2FtZUxlbmd0aCgpIHRvIGNvbXBhcmUgbW9yZSBhcnJheSB0eXBlcyAjNDMwLiBUaGFua3MgdG8gWGVub0FtZXNzLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGRlZCB0aGUgTG9ja3MgY2xhc3MgYXMgYSBjb252ZW5pZW50IHBvc3NpYmlsaXR5IHRvIGRlYWwgd2l0aCBsb2NrZWQgb2JqZWN0cy4KbyBMQU5HLTE1Njg6IEFkZCB0byBGdW5jdGlvbnM6IEZhaWxhYmxlQm9vbGVhblN1cHBsaWVyLCBGYWlsYWJsZUludFN1cHBsaWVyLCBGYWlsYWJsZUxvbmdTdXBwbGllciwgRmFpbGFibGVEb3VibGVTdXBwbGllciwgYW5kIHNvIG9uLgpvIExBTkctMTU2OTogQWRkIEFycmF5VXRpbHMuZ2V0KFRbXSwgaW5kZXgsIFQpIHRvIHByb3ZpZGUgYW4gb3V0LW9mLWJvdW5kcyBkZWZhdWx0IHZhbHVlLgpvIExBTkctMTU3MDogQWRkIEphdmFWZXJzaW9uIGVudW0gY29uc3RhbnRzIGZvciBKYXZhIDE0IGFuZCAxNS4gIzU1My4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLgpvICAgICAgICAgICAgQWRkIEphdmFWZXJzaW9uIGVudW0gY29uc3RhbnRzIGZvciBKYXZhIDE2LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTU1NjogVXNlIEphdmEgOCBsYW1iZGFzIGFuZCBNYXAgb3BlcmF0aW9ucy4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1NjU6IENoYW5nZSByZW1vdmVMYXN0RmllbGRTZXBhcmF0b3IgdG8gdXNlIGVuZHNXaXRoICM1NTAuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTU3OiBDaGFuZ2UgYSBQYXR0ZXJuIHRvIGEgc3RhdGljIGZpbmFsIGZpZWxkLCBmb3Igbm90IGxldHRpbmcgaXQgY29tcGlsZSBlYWNoIHRpbWUgdGhlIGZ1bmN0aW9uIGludm9rZWQuICM1NDIuIFRoYW5rcyB0byBYZW5vQW1lc3MsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBJbW11dGFibGVQYWlyIGZhY3RvcnkgbWV0aG9kcyBsZWZ0KCkgYW5kIHJpZ2h0KCkuCm8gICAgICAgICAgICBBZGQgT2JqZWN0VXRpbHMudG9TdHJpbmcoT2JqZWN0LCBTdXBwbGllcjxTdHJpbmc+KS4KbyAgICAgICAgICAgIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMuc3Vic3RyaW5nQWZ0ZXIoU3RyaW5nLCBpbnQpLgpvICAgICAgICAgICAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscy5zdWJzdHJpbmdBZnRlckxhc3QoU3RyaW5nLCBpbnQpLgoKRml4ZWQgQnVnczoKbyAgICAgICAgICAgIEZpeCBKYXZhZG9jIGZvciBTdHJpbmdVdGlscy5hcHBlbmRJZk1pc3NpbmdJZ25vcmVDYXNlKCkgIzUwNy4gVGhhbmtzIHRvIGNvbnRleHRzaHVmZmxpbmcuCm8gTEFORy0xNTYwOiBSZWZpbmUgSmF2YWRvYyAjNTQ1LiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTU1NDogRml4IHR5cG9zICM1MzkuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTU1OiBJZ25vcmVkIGV4Y2VwdGlvbiBgaWdub3JlZGAsIHNob3VsZCBub3QgYmUgY2FsbGVkIHNvICM1NDAuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTI4OiBTdHJpbmdVdGlscy5yZXBsYWNlRWFjaFJlcGVhdGVkbHkgZ2l2ZXMgSWxsZWdhbFN0YXRlRXhjZXB0aW9uICM1MDUuIFRoYW5rcyB0byBFZHdpbiBEZWxnYWRvIEguCm8gTEFORy0xNTQzOiBbSlNPTiBzdHJpbmcgZm9yIG1hcHNdIFRvU3RyaW5nQnVpbGRlci5yZWZsZWN0aW9uVG9TdHJpbmcgZG9lc250IHJlbmRlciBuZXN0ZWQgbWFwcyBjb3JyZWN0bHkuIFRoYW5rcyB0byBTd2FyYWogUGFsLCBXYW5kZXIgQ29zdGEsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIENvcnJlY3QgSmF2YWRvY3Mgb2YgbWV0aG9kcyB0aGF0IHVzZSBWYWxpZGF0ZS5ub3ROdWxsKCkgYW5kIHJlcGxhY2Ugc29tZSB1c2VzIG9mIFZhbGlkYXRlLmlzVHJ1ZSgpIHdpdGggVmFsaWRhdGUubm90TnVsbCgpLiAjNTI1LiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUuCm8gTEFORy0xNTM5OiBBZGQgYWxsTnVsbCgpIGFuZCBhbnlOdWxsKCkgbWV0aG9kcyB0byBPYmplY3RVdGlscy4gIzUyMi4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLgoKQ2hhbmdlczoKbyAgICAgICAgICAgIFJlZmluZSB0ZXN0IG91dHB1dCBmb3IgRmFzdERhdGVQYXJzZXJUZXN0IFRoYW5rcyB0byBKaW4gWHUuCm8gTEFORy0xNTQ5OiBDaGFyU2VxdWVuY2VVdGlscy5sYXN0SW5kZXhPZiA6IHJlbWFrZSBpdCBUaGFua3MgdG8gSmluIFh1LgpvICAgICAgICAgICAgcmVtb3ZlIGVuY29kaW5nIGFuZCBkb2NFbmNvZGluZyBhbmQgdXNlIGluaGVyaXRlZCB2YWx1ZXMgZnJvbSBjb21tb25zLXBhcmVudCBUaGFua3MgdG8gWGVub0FtZXNzLgpvICAgICAgICAgICAgU2ltcGxpZnkgbnVsbCBjaGVja3MgaW4gUGFpci5oYXNoQ29kZSgpIHVzaW5nIE9iamVjdHMuaGFzaENvZGUoKS4gIzUxNy4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLCBCcnVubyBQLiBLaW5vc2hpdGEuCm8gICAgICAgICAgICBTaW1wbGlmeSBudWxsIGNoZWNrcyBpbiBUcmlwbGUuaGFzaENvZGUoKSB1c2luZyBPYmplY3RzLmhhc2hDb2RlKCkuICM1MTYuIFRoYW5rcyB0byBJc2lyYSBTZW5ldmlyYXRuZSwgQnJ1bm8gUC4gS2lub3NoaXRhLgpvICAgICAgICAgICAgU2ltcGxpZnkgc29tZSBpZiBzdGF0ZW1lbnRzIGluIFN0cmluZ1V0aWxzLiAjNTIxLiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUsIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTE1Mzc6IFNpbXBsaWZ5IGEgbnVsbCBjaGVjayBpbiB0aGUgcHJpdmF0ZSByZXBsYWNlRWFjaCgpIG1ldGhvZCBvZiBTdHJpbmdVdGlscy4gIzUxNC4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLCBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xNTM0OiBSZXBsYWNlIHNvbWUgdXNhZ2VzIG9mIHRoZSB0ZXJuYXJ5IG9wZXJhdG9yIHdpdGggY2FsbHMgdG8gTWF0aC5tYXgoKSBhbmQgTWF0aC5taW4oKSAjNTEyLiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUsIEJydW5vIFAuIEtpbm9zaGl0YS4KbyAgICAgICAgICAgIChKYXZhZG9jKSBGaXggcmV0dXJuIHRhZyBmb3IgdGhyb3dhYmxlT2YqKCkgbWV0aG9kcyAjNTE4LiBUaGFua3MgdG8gQXJlbmQgdi4gUmVpbmVyc2RvcmZmLCBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xNTQ1OiBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzIGlzIHdyb25nIGRlYWxpbmcgd2l0aCBHZW9yZ2lhbi4gVGhhbmtzIHRvIFhlbm9BbWVzcywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTU1MDogT3B0aW1pemUgQXJyYXlVdGlsczo6aXNBcnJheUluZGV4VmFsaWQgbWV0aG9kLiAjNTUxLiBUaGFua3MgdG8gRWRnYXIgQXNhdHJ5YW4uCm8gTEFORy0xNTYxOiBVc2UgTGlzdC5zb3J0IGluc3RlYWQgb2YgQ29sbGVjdGlvbi5zb3J0ICM1NDYuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTYzOiBVc2UgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCAjNTQ4LiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTU2NDogVXNlIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QgaW5zdGVhZG9mIEFycmF5cy5hc0xpc3Qgd2hlbiB0aGVyZSBiZSBvbmx5IG9uZSBlbGVtZW50LiAjNTQ5LiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTU1MzogQ2hhbmdlIGFycmF5IHN0eWxlIGZyb20gYGludCBhW11gIHRvIGBpbnRbXSBhYCAjNTM3LiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTU1MjogQ2hhbmdlIGZyb20gYWRkQWxsIHRvIGNvbnN0cnVjdG9ycyBmb3Igc29tZSBMaXN0ICM1MzYuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTU4OiBTaW1wbGlmeSBpZiBhcyBzb21lIGNvbmRpdGlvbnMgYXJlIGNvdmVyZWQgYnkgb3RoZXJzICM1NDMuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTY3OiBGaXhlZCBKYXZhZG9jcyBmb3Igc2V0VGVzdFJlY3Vyc2l2ZSgpICM1NTYuIFRoYW5rcyB0byBNaWd1ZWwgTXXxb3osIEJydW5vIFAuIEtpbm9zaGl0YSwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTU0MjogVG9TdHJpbmdCdWlsZGVyLnJlZmxlY3Rpb25Ub1N0cmluZyAtIFdyb25nIEpTT04gZm9ybWF0IHdoZW4gb2JqZWN0IGhhcyBhIExpc3Qgb2YgRW51bS4gVGhhbmtzIHRvIFRyP24gTmc/YyBLaG9hLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBNYWtlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5DaGFyU2VxdWVuY2VVdGlscy50b0NoYXJBcnJheShDaGFyU2VxdWVuY2UpIHB1YmxpYy4KbyAgICAgICAgICAgIG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLXBhcmVudCA1MCAtPiA1MS4KbyAgICAgICAgICAgIG9yZy5qdW5pdC1waW9uZWVyOmp1bml0LXBpb25lZXIgMC41LjQgLT4gMC42LjAuCm8gICAgICAgICAgICBvcmcuanVuaXQuanVwaXRlcjpqdW5pdC1qdXBpdGVyIDUuNi4wIC0+IDUuNi4yLgpvICAgICAgICAgICAgY29tLmdpdGh1Yi5zcG90YnVnczpzcG90YnVncyA0LjAuMCAtPiA0LjAuNi4KbyAgICAgICAgICAgIGNvbS5wdXBweWNyYXdsLnRvb2xzOmNoZWNrc3R5bGUgOC4yOSAtPiA4LjM0LgpvICAgICAgICAgICAgY29tbW9ucy5zdXJlZmlyZS52ZXJzaW9uIDMuMC4wLU00IC0+IDMuMC4wLU01Li4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvCgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2Rvd25sb2FkX2Nzdi5jZ2kKCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgVGVhbQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjEwCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4xMCB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IApKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjkgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA4LCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6IAoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgOCwgc3VwcG9ydHMgSmF2YSA5LCAxMCwgMTEuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTQ1NzogQWRkIEV4Y2VwdGlvblV0aWxzLnRocm93YWJsZU9mVHlwZShUaHJvd2FibGUsIENsYXNzKSBhbmQgZnJpZW5kcy4KbyBMQU5HLTE0NTg6IEFkZCBFTVBUWV9BUlJBWSBjb25zdGFudHMgdG8gY2xhc3NlcyBpbiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudHVwbGUuCm8gTEFORy0xNDYxOiBBZGQgbnVsbC1zYWZlIFN0cmluZ1V0aWxzIEFQSXMgdG8gd3JhcCBTdHJpbmcjZ2V0Qnl0ZXMoW0NoYXJzZXR8U3RyaW5nXSkuCm8gTEFORy0xNDY3OiBBZGQgemVybyBhcmcgY29uc3RydWN0b3IgZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5Ob3RJbXBsZW1lbnRlZEV4Y2VwdGlvbi4KbyBMQU5HLTE0NzA6IEFkZCBBcnJheVV0aWxzLmFkZEZpcnN0KCkgbWV0aG9kcy4KbyBMQU5HLTE0Nzk6IEFkZCBSYW5nZS5maXQoVCkgdG8gZml0IGEgdmFsdWUgaW50byBhIHJhbmdlLgpvIExBTkctMTQ3NzogQWRkZWQgRnVuY3Rpb25zLmFzKiwgYW5kIHRlc3RzIHRoZXJlb2YsIGFzIHN1Z2dlc3RlZCBieSBQZXRlciBWZXJoYXMKbyBMQU5HLTE0ODU6IEFkZCBnZXR0ZXJzIGZvciBsaHMgYW5kIHJocyBvYmplY3RzIGluIERpZmZSZXN1bHQgIzQ1MS4gVGhhbmtzIHRvIG5pY29sYXNiZC4KbyBMQU5HLTE0ODY6IEdlbmVyaWZ5IGJ1aWxkZXIgY2xhc3NlcyBEaWZmYWJsZSwgRGlmZkJ1aWxkZXIsIGFuZCBEaWZmUmVzdWx0ICM0NTIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNDg3OiBBZGQgQ2xhc3NMb2FkZXJVdGlscyB3aXRoIHRvU3RyaW5nKCkgaW1wbGVtZW50YXRpb25zICM0NTMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNDg5OiBBZGQgbnVsbC1zYWZlIEFQSXMgYXMgU3RyaW5nVXRpbHMudG9Sb290TG93ZXJDYXNlKFN0cmluZykgYW5kIFN0cmluZ1V0aWxzLnRvUm9vdFVwcGVyQ2FzZShTdHJpbmcpICM0NTYuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNDk0OiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuQ2FsZW5kYXJzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQ5NTogQWRkIEVudW1VdGlscyBnZXRFbnVtKCkgbWV0aG9kcyB3aXRoIGRlZmF1bHQgdmFsdWVzICM0NzUuIFRoYW5rcyB0byBDaGVvbmcgVm9vbiBMZW9uZy4KbyBMQU5HLTExNzc6IEFkZGVkIGluZGV4ZXNPZiBtZXRob2RzIGFuZCBzaW1wbGlmaWVkIHJlbW92ZUFsbE9jY3VyZW5jZXMgIzQ3MS4gVGhhbmtzIHRvIExpZWwgRnJpZG1hbi4KbyBMQU5HLTE0OTg6IEFkZCBzdXBwb3J0IG9mIGxhbWJkYSB2YWx1ZSBldmFsdWF0aW9uIGZvciBkZWZhdWx0aW5nIG1ldGhvZHMgIzQxNi4gVGhhbmtzIHRvIEx5c2VyZ2lkLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTAzOiBBZGQgZmFjdG9yeSBtZXRob2RzIHRvIFBhaXIgY2xhc3NlcyB3aXRoIE1hcC5FbnRyeSBpbnB1dC4gIzQ1NC4gVGhhbmtzIHRvIFhlbm9BbWVzcywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwNTogQWRkIFN0b3BXYXRjaCBjb252ZW5pZW5jZSBBUElzIHRvIGZvcm1hdCB0aW1lcyBhbmQgY3JlYXRlIGEgc2ltcGxlIGluc3RhbmNlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwNjogQWxsb3cgYSBTdG9wV2F0Y2ggdG8gY2FycnkgYW4gb3B0aW9uYWwgbWVzc2FnZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1MDc6IEFkZCBDb21wYXJhYmxlVXRpbHMgIzM5OC4gVGhhbmtzIHRvIFNhbSBLcnVnbG92LCBNYXJrIERhY2VrLCBNYXJjIE1hZ29uLCBQYXNjYWwgU2NodW1hY2hlciwgUm9iIFRvbXBraW5zLCBCcnVubyBQLiBLaW5vc2hpdGEsIEFtZXkgSmFkaXllLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTA4OiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLmdldFVzZXJOYW1lKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTA5OiBBZGQgT2JqZWN0VG9TdHJpbmdDb21wYXJhdG9yLiAjNDgzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTUxMDogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5hcmNoLlByb2Nlc3Nvci5BcmNoLmdldExhYmVsKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTEyOiBBZGQgSVNfSkFWQV8xNCBhbmQgSVNfSkFWQV8xNSB0byBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTEzOiBPYmplY3RVdGlsczogR2V0IGZpcnN0IG5vbi1udWxsIHN1cHBsaWVyIHZhbHVlLiBUaGFua3MgdG8gQmVybmhhcmQgQm9uaWdsLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGRlZCB0aGUgU3RyZWFtcyBjbGFzcywgYW5kIEZ1bmN0aW9ucy5zdHJlYW0oKSBhcyBhbiBhY2Nlc3NvciB0aGVyZW9mLgoKRml4ZWQgQnVnczoKbyBMQU5HLTE1MTQ6IE1ha2UgdGVzdCBtb3JlIHN0YWJsZSBieSB3cmFwcGluZyBhc3NlcnRpb25zIGluIGhhc2hzZXQuIFRoYW5rcyB0byBjb250ZXh0c2h1ZmZsaW5nLgpvIExBTkctMTQ1MDogR2VuZXJhdGUgSmF2YWRvYyBqYXIgb24gYnVpbGQuCm8gTEFORy0xNDYwOiBUcml2aWFsOiB5ZWFyIG9mIHJlbGVhc2UgZm9yIDMuOSBzYXlzIDIwMTgsIHNob3VsZCBiZSAyMDE5IFRoYW5rcyB0byBMYXJyeSBXZXN0LgpvIExBTkctMTQ3NjogVXNlIHN5bmNocm9uaXplIG9uIGEgc2V0IGNyZWF0ZWQgd2l0aCBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRTZXQgYmVmb3JlIGl0ZXJhdGluZyBUaGFua3MgdG8gZW1vcGVycy4KbyBMQU5HLTE0NzU6IFN0cmluZ1V0aWxzLnVud3JhcCBpbmNvcnJlY3QgdGhyb3cgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4gVGhhbmtzIHRvIHN0enguCm8gTEFORy0xNDA2OiBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIFN0cmluZ1V0aWxzLnJlcGxhY2VJZ25vcmVDYXNlICM0MjMuIFRoYW5rcyB0byBnZXJhdG9ycmVzLgpvIExBTkctMTQ1MzogU3RyaW5nVXRpbHMucmVtb3ZlSWdub3JlQ2FzZSgiP2EiLCAiYSIpIHRocm93cyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uICM0MjMuIFRoYW5rcyB0byBnZXJhdG9ycmVzLgpvIExBTkctMTQyNjogQ29ycmVjdGVkIHVzYWdlIGV4YW1wbGVzIGluIEphdmFkb2NzICM0NTguIFRoYW5rcyB0byBCcm93ZXIsIE1pa2tvIE1hdW51LCBTdXJhaiBHYXV0YW0uCm8gTEFORy0xNDYzOiBTdHJpbmdVdGlscyBhYmJyZXZpYXRlIHJldHVybnMgU3RyaW5nIG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gbWF4V2lkdGggIzQ3Ny4gVGhhbmtzIHRvIGJiZWNrZXJjc2NjLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTAwOiBUZXN0IG1heSBmYWlsIGR1ZSB0byBhIGRpZmZlcmVudCBvcmRlciBvZiBmaWVsZHMgcmV0dXJuZWQgYnkgcmVmbGVjdGlvbiBhcGkgIzQ4MC4gVGhhbmtzIHRvIGNvbnRleHRzaHVmZmxpbmcuCm8gTEFORy0xNTAxOiBTb3J0IGZpZWxkcyBpbiBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyIGZvciBkZXRlcm1pbmlzdGljIG9yZGVyICM0ODEuIFRoYW5rcyB0byBjb250ZXh0c2h1ZmZsaW5nLgpvIExBTkctMTQzMzogTWV0aG9kVXRpbHMgd2lsbCB0aHJvdyBhIE5QRSBpZiBpbnZva2VNZXRob2QoKSBpcyBjYWxsZWQgZm9yIGEgdmFyLWFyZ3MgbWV0aG9kICM0MDcuIFRoYW5rcyB0byBDaHJpc3RpYW4gRnJhbnplbi4KbyBMQU5HLTE1MTg6IE1ldGhvZFV0aWxzLmdldEFubm90YXRpb24oKSB3aXRoIHNlYXJjaFN1cGVycyA9IHRydWUgZG9lcyBub3Qgd29yayBpZiBzdXBlciBpcyBnZW5lcmljICM0OTQuIFRoYW5rcyB0byBNaWNoZWxlIFByZXRpLCBCcnVubyBQLiBLaW5vc2hpdGEsIEdhcnkgR3JlZ29yeS4KCkNoYW5nZXM6Cm8gTEFORy0xNDM3OiBSZW1vdmUgcmVkdW5kYW50IGlmIHN0YXRlbWVudHMgaW4gam9pbiBtZXRob2RzICM0MTEuIFRoYW5rcyB0byBBbmRyZWkgVHJvaWUuCm8gICAgICAgICAgICBjb21tb25zLmphcGljbXAudmVyc2lvbiAwLjEzLjEgLT4gMC4xNC4xLgpvICAgICAgICAgICAganVuaXQtanVwaXRlciA1LjUuMCAtPiA1LjUuMS4KbyAgICAgICAgICAgIGp1bml0LWp1cGl0ZXIgNS41LjEgLT4gNS41LjIuCm8gICAgICAgICAgICBJbXByb3ZlIEphdmFkb2MgYmFzZWQgb24gdGhlIGRpc2N1c3Npb24gb2YgdGhlIEdpdEh1YiBQUiAjNDU5LiBUaGFua3MgdG8gSm9uYXRoYW4gTGVpdHNjaHVoLCBCcnVubyBQLiBLaW5vc2hpdGEsIFJvYiBUb21wa2lucywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gMy4wLjAgLT4gMy4xLjAuCm8gTEFORy02OTY6ICBVcGRhdGUgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIHRoZSBpc3N1ZSBMQU5HLTY5NiAjNDQ5LiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvICAgICAgICAgICAgQW5ub3RhdGlvblV0aWxzIGxpdHRsZSBjbGVhbnVwICM0NjcuIFRoYW5rcyB0byBQZXRlciBWZXJoYXMuCm8gICAgICAgICAgICBVcGRhdGUgdGVzdCBkZXBlbmRlbmN5OiBvcmcuZWFzeW1vY2s6ZWFzeW1vY2sgNC4wLjIgLT4gNC4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIHRlc3QgZGVwZW5kZW5jeTogb3JnLmhhbWNyZXN0OmhhbWNyZXN0IDIuMSAtPiAyLjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBVcGRhdGUgdGVzdCBkZXBlbmRlbmN5OiBvcmcuanVuaXQtcGlvbmVlcjpqdW5pdC1waW9uZWVyIDAuMy4wIC0+IDAuNC4yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIGJ1aWxkIGRlcGVuZGVuY3k6IGNvbS5wdXBweWNyYXdsLnRvb2xzOmNoZWNrc3R5bGUgOC4xOCAtPiA4LjI3LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIFBPTSBwYXJlbnQ6IG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLXBhcmVudCA0OCAtPiA1MC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJvb2xlYW5VdGlscyBKYXZhZG9jICM0NjkuIFRoYW5rcyB0byBQZXRlciBWZXJoYXMuCm8gICAgICAgICAgICBGdW5jdGlvbnMgSmF2YWRvYyAjNDY2LiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvICAgICAgICAgICAgb3JnLmVhc3ltb2NrOmVhc3ltb2NrIDQuMSAtPiA0LjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBvcmcuanVuaXQtcGlvbmVlcjpqdW5pdC1waW9uZWVyIDAuNC4yIC0+IDAuNS40LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgb3JnLmp1bml0Lmp1cGl0ZXI6anVuaXQtanVwaXRlciA1LjUuMiAtPiA1LjYuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVzZSBKYXZhZG9jIHtAY29kZX0gaW5zdGVhZCBvZiBwcmUgdGFncy4gIzQ5MC4gVGhhbmtzIHRvIFBldGVyIFZlcmhhcy4KbyAgICAgICAgICAgIEV4Y2VwdGlvblV0aWxzVGVzdCB0byAxMDAlICM0ODYuIFRoYW5rcyB0byBQZXRlciBWZXJoYXMuCm8gICAgICAgICAgICBSZXVzZSBvd24gY29kZSBpbiBGdW5jdGlvbnMuamF2YSAjNDkzLiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvIExBTkctMTUyMzogQXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBpbiBTdHJpbmdVdGlscy53cmFwSWZNaXNzaW5nLiAjNDk2LiBUaGFua3MgdG8gRWRnYXIgQXNhdHJ5YW4sIEJydW5vIFAuIEtpbm9zaGl0YSwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUyNTogSW50ZXJuYWxseSB1c2UgVmFsaWRhdGUubm90TnVsbChmb28sIC4uLikgaW5zdGVhZCBvZiBWYWxpZGF0ZS5pc1RydWUoZm9vICE9IG51bGwsIC4uLikuIFRoYW5rcyB0byBFZGdhciBBc2F0cnlhbiwgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTI2OiBBZGQgMSBhbmQgMCBpbiB0b0Jvb2xlYW5PYmplY3QoZmluYWwgU3RyaW5nIHN0cikgIzUwMi4gVGhhbmtzIHRvIERvbWluaWsgU2NocmFtbS4KbyBMQU5HLTE1Mjc6IFJlbW92ZSBhbiByZWR1bmRhbnQgYXJndW1lbnQgY2hlY2sgaW4gTnVtYmVyVXRpbHMgIzUwNC4gVGhhbmtzIHRvIFBlbmd5dSBOaWUuCm8gTEFORy0xNTI5OiBEZXByZWNhdGUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMucmVtb3ZlQWxsT2NjdXJlbmNlcygqKSBmb3Igb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMucmVtb3ZlQWxsT2NjdXJyZW5jZXMoKikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIEJpbGxDaW5keSwgQnJ1bm8gUC4gS2lub3NoaXRhLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvZG93bmxvYWRfbGFuZy5jZ2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuOQogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuOSB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IApKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjkgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA4LCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6IAoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgOCwgc3VwcG9ydHMgSmF2YSA5LCAxMCwgMTEKCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xNDQyOiBKYXZhZG9jIHBvaW50aW5nIHRvIENvbW1vbnMgUk5HLgpvICAgICAgICAgICAgQWRkaW5nIHRoZSBGdW5jdGlvbnMgY2xhc3MuCm8gTEFORy0xNDExOiBBZGQgaXNFbXB0eSBtZXRob2QgdG8gT2JqZWN0VXRpbHMgVGhhbmtzIHRvIEFsZXhhbmRlciBUc3ZldGtvdi4KbyBMQU5HLTE0MjI6IEFkZCBudWxsLXNhZmUgU3RyaW5nVXRpbHMudmFsdWVPZihjaGFyW10pIHRvIGRlbGVnYXRlIHRvIFN0cmluZy52YWx1ZU9mKGNoYXJbXSkKbyBMQU5HLTE0Mjc6IEFkZCBBUEkgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLmlzSmF2YVZlcnNpb25BdE1vc3QoSmF2YVZlcnNpb24pCgoKQ2hhbmdlczoKbyBMQU5HLTE0MTY6IEFkZCBtb3JlIFN5c3RlbVV0aWxzLklTX0pBVkFfWFggdmFyaWFudHMuCm8gTEFORy0xNDE2OiBVcGRhdGUgdG8gSlVuaXQgNQpvIExBTkctMTQxNzogQWRkIEBGdW5jdGlvbmFsSW50ZXJmYWNlIHRvIFRocmVhZFByZWRpY2F0ZSBhbmQgVGhyZWFkR3JvdXBQcmVkaWNhdGUKbyBMQU5HLTE0MTU6IFVwZGF0ZSBKYXZhIExhbmd1YWdlIHJlcXVpcmVtZW50IHRvIDEuOApvIExBTkctMTQzNjogQ29uc29saWRhdGUgdGhlIFN0cmluZ1V0aWxzIGVxdWFscyBhbmQgZXF1YWxzSWdub3JlQ2FzZSBKYXZhZG9jIGFuZCBpbXBsZW1lbnRhdGlvbgpvICAgICAgICAgICAgKGRvYykgRml4IGphdmFkb2MgZm9yICdzdGFydEluZGV4JyBwYXJhbWV0ZXIgb2YgU3RyaW5nVXRpbHMuam9pbigpIG1ldGhvZHMuIEdpdEh1YiBQUiAjNDEyLiBUaGFua3MgdG8gQW5kcmVpIFRyb2llIGFmdDkwLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy8KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuOC4xCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy44LjEgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueQpKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjAgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA3LjAsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA3LjAuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKVGhpcyByZWxlYXNlIGlzIGEgYnVnZml4IGZvciBSZXN0b3JpbmcgQnVuZGxlLVN5bWJvbGljTmFtZSBpbiB0aGUgTUFOSUZFU1QubWYgZmlsZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgoKRml4ZWQgQnVnczoKbyBMQU5HLTE0MTk6IFJlc3RvcmUgQnVuZGxlU3ltYm9saWNOYW1lIGZvciBPU0dpCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjgKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjggdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueQpKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjAgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA3LjAsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA3LjAuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgNywgc3VwcG9ydHMgSmF2YSA4LCA5LCAxMC4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xMzUyOiBFbnVtVXRpbHMuZ2V0RW51bUlnbm9yZUNhc2UgYW5kIGlzVmFsaWRFbnVtSWdub3JlQ2FzZSBtZXRob2RzIGFkZGVkIFRoYW5rcyB0byBSdXNsYW4gU2liZ2F0dWxsaW4uCm8gTEFORy0xMzcyOiBBZGQgVG9TdHJpbmdTdW1tYXJ5IGFubm90YXRpb24gVGhhbmtzIHRvIFPpcmdpbyBPemFraS4KbyBMQU5HLTEzNTY6IEFkZCBieXBhc3Mgb3B0aW9uIGZvciBjbGFzc2VzIHRvIHJlY3Vyc2l2ZSBhbmQgcmVmbGVjdGl2ZSBFcXVhbHNCdWlsZGVyIFRoYW5rcyB0byBZYXRob3MgVUcuCm8gTEFORy0xMzkxOiBJbXByb3ZlIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzLmlzQW55RW1wdHkobnVsbCkgVGhhbmtzIHRvIFNhdXJvIE1hdHVsbGksIE9sZWcgQ2h1YmFyeW92LgpvIExBTkctMTM5MzogQWRkIEFQSSBTeXN0ZW1VdGlscy5TdHJpbmcgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEzOTQ6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscyBzaG91bGQgbm90IHdyaXRlIHRvIFN5c3RlbS5lcnIuIFRoYW5rcyB0byBTZWJiLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMjM4OiBBZGQgUmVnZXhVdGlscyBjbGFzcyBpbnN0ZWFkIG9mIG92ZXJsb2FkaW5nIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMgdGhhdCB0YWtlIGEgcmVnZXggdG8gdGFrZSBwcmVjb21waWxlZCBQYXR0ZXJuLiBUaGFua3MgdG8gQ2hyaXN0b3BoZXIgQ29yZGVpcm8sIEdhcnkgR3JlZ29yeSwgQnJ1bm8gUC4gS2lub3NoaXRhLCBPbGVnIENodWJhcnlvdi4KbyBMQU5HLTEzOTA6IFN0cmluZ1V0aWxzLmpvaW4oKSB3aXRoIHN1cHBvcnQgZm9yIExpc3Q8Pz4gd2l0aCBjb25maWd1cmFibGUgc3RhcnQvZW5kIGluZGljZXMuIFRoYW5rcyB0byBKb2NoZW4gU2NoYWxhbmRhLgpvIExBTkctMTM5MjogTWV0aG9kcyBmb3IgZ2V0dGluZyBmaXJzdCBub24gZW1wdHkgb3Igbm9uIGJsYW5rIHZhbHVlIFRoYW5rcyB0byBKZWZmIE5lbHNvbi4KbyBMQU5HLTE0MDg6IFJvdW5kaW5nIHV0aWxpdGllcyBmb3IgY29udmVydGluZyB0byBCaWdEZWNpbWFsCgpGaXhlZCBCdWdzOgpvIExBTkctMTM4MDogRmFzdERhdGVQYXJzZXIgdG9vIHN0cmljdCBvbiBhYmJyZXZpYXRlZCBzaG9ydCBtb250aCBzeW1ib2xzIFRoYW5rcyB0byBNYXJrdXMgSmVsc21hLgpvIExBTkctMTM5NjogSnNvblRvU3RyaW5nU3R5bGUgZG9lcyBub3QgZXNjYXBlIHN0cmluZyBuYW1lcwpvIExBTkctMTM5NTogSnNvblRvU3RyaW5nU3R5bGUgZG9lcyBub3QgZXNjYXBlIGRvdWJsZSBxdW90ZSBpbiBhIHN0cmluZyB2YWx1ZSBUaGFua3MgdG8gSmltIEdhbi4KbyBMQU5HLTEzODQ6IE5ldyBKYXZhIHZlcnNpb24gKCIxMSIpIG11c3QgYmUgaGFuZGxlZCBUaGFua3MgdG8gSWFuIFlvdW5nLgpvIExBTkctMTM2NDogRXhjZXB0aW9uVXRpbHMjZ2V0Um9vdENhdXNlKFRocm93YWJsZSB0KSBzaG91bGQgcmV0dXJuIHQgaWYgbm8gbG93ZXIgbGV2ZWwgY2F1c2UgZXhpc3RzIFRoYW5rcyB0byBaaGVuZyBYaWUuCm8gTEFORy0xMDYwOiBOdW1iZXJVdGlscy5pc051bWJlciBhc3N1bWVzIG51bWJlciBzdGFydGluZyB3aXRoIFplcm8gVGhhbmtzIHRvIFBpb3RyIEtvc21hbGEuCm8gTEFORy0xMzc1OiBkZWZhdWx0U3RyaW5nKGZpbmFsIFN0cmluZyBzdHIpIGluIFN0cmluZ1V0aWxzIHRvIHJldXNlIGRlZmF1bHRTdHJpbmcoZmluYWwgU3RyaW5nIHN0ciwgZmluYWwgU3RyaW5nIGRlZmF1bHRTdHIpIFRoYW5rcyB0byBKZXJyeSBaaGFvLgpvIExBTkctMTM3NDogUGFyc2luZyBKc29uIEFycmF5IGZhaWxlZCBUaGFua3MgdG8gSmFzd2FudGggQmFsYS4KbyBMQU5HLTEzNzE6IEZpeCBUeXBlVXRpbHMjcGFyYW1ldGVyaXplIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggbmFycm93ZXItdHlwZWQgYXJyYXkgVGhhbmtzIHRvIERtaXRyeSBPdmNoaW5uaWtvdi4KbyBMQU5HLTEzNzA6IEZpeCBFdmVudENvdW50Q2lyY3VpdEJyZWFrZXIgaW5jcmVtZW50IGJhdGNoIFRoYW5rcyB0byBBbmRyZSBEaWViLgpvIExBTkctMTM4NTogTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXRFeGNlcHRpb24gVGhhbmtzIHRvIFJvaGFuIFBhZGh5ZS4KbyBMQU5HLTEzOTc6IFdvcmRVdGlscy53cmFwIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gd3JhcExlbmd0aCBpcyBJbnRlZ2VyLk1BWF9WQUxVRS4gVGhhbmtzIHRvIFRha2Fub2J1IEFzYW51bWEuCm8gTEFORy0xNDAxOiBUeXBvIGluIEphdmFEb2MgZm9yIGxhc3RJbmRleE9mIFRoYW5rcyB0byBSb21hbiBHb2x5c2hldiwgQWxleCBNYW1lZG92LgoKQ2hhbmdlczoKbyBMQU5HLTEzNjc6IE9iamVjdFV0aWxzLmlkZW50aXR5VG9TdHJpbmcoT2JqZWN0KSBhbmQgZnJpZW5kcyBzaG91bGQgYWxsb2NhdGUgYnVpbGRlcnMgYW5kIGJ1ZmZlcnMgd2l0aCBhIHNpemUgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE0MDU6IFJlbW92ZSBjaGVja3MgZm9yIGphdmEgdmVyc2lvbnMgYmVsb3cgdGhlIG1pbmltdW0gc3VwcG9ydGVkIG9uZSBUaGFua3MgdG8gTGFycyBHcmVmZXIuCm8gTEFORy0xNDAyOiBOdWxsL2luZGV4IHNhZmUgZ2V0IG1ldGhvZHMgZm9yIEFycmF5VXRpbHMgVGhhbmtzIHRvIE1hcmsgRGFjZWsuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjcgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueQpKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjAgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA1LjAsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA1LjAgc3VjaCBhcyBnZW5lcmljcywKdmFyaWFibGUgYXJndW1lbnRzLCBhdXRvYm94aW5nLCBjb25jdXJyZW5jeSBhbmQgZm9ybWF0dGVkIG91dHB1dC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4gUmVxdWlyZXMgSmF2YSA3LCBzdXBwb3J0cyBKYXZhIDgsIDksIDEwLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBMQU5HLTEzNTU6IFRpbWVab25lLmdldFRpbWVab25lKCkgaW4gRmFzdERhdGVQYXJzZXIgY2F1c2VzIHJlc291cmNlIGNvbnRlbnRpb24gKFBSICMyOTYuKSBUaGFua3MgdG8gQ2hhcyBIb250b24uCm8gTEFORy0xMzYwOiBBZGQgbWV0aG9kcyB0byBPYmplY3RVdGlscyB0byBnZXQgdmFyaW91cyBmb3JtcyBvZiBjbGFzcyBuYW1lcyBpbiBhIG51bGwtc2FmZSBtYW5uZXIgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xMzYyOiBGaXggdGVzdHMgRGF0ZVV0aWxzVGVzdCBmb3IgSmF2YSA5IHdpdGggZW5fR0IgbG9jYWxlIFRoYW5rcyB0byBTdGVwaGVuIENvbGVib3VybmUuCm8gTEFORy0xMzY1OiBGaXggTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4gaXNKYXZhVmVyc2lvbkF0TGVhc3Qgb24gSmF2YSAxMCwgYWRkIFN5c3RlbVV0aWxzLklTX0pBVkFfMTAsIGFkZCBKYXZhVmVyc2lvbi5KQVZBXzEwIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMzQ4OiBTdGFja092ZXJmbG93RXJyb3Igb24gVHlwZVV0aWxzLnRvU3RyaW5nKC4uLikgZm9yIGEgZ2VuZXJpYyByZXR1cm4gdHlwZSBvZiBFbnVtLnZhbHVlT2YgVGhhbmtzIHRvIG1idXNzby4KbyBMQU5HLTEzNTA6IENvbnN0cnVjdG9yVXRpbHMuaW52b2tlQ29uc3RydWN0b3IoQ2xhc3MsIE9iamVjdC4uLikgcmVncmVzc2lvbiBUaGFua3MgdG8gQnJldHQgS2FpbC4KbyBMQU5HLTEzNDk6IEVxdWFsc0J1aWxkZXIjaXNSZWdpc3RlcmVkOiBzd2FwcGVkUGFpciBjb25zdHJ1Y3Rpb24gYnVnIFRoYW5rcyB0byBOYW1hbiBOaWdhbS4KbyBMQU5HLTEzNTc6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkZhc3REYXRlUGFyc2VyIHNob3VsZCB1c2UgdG9VcHBlckNhc2UoTG9jYWxlKSBUaGFua3MgdG8gQnJ1Y2VLdWlMaXUuCgpDaGFuZ2VzOgpvIExBTkctMTM1ODogSW1wcm92ZSBTdHJpbmdVdGlscyNyZXBsYWNlIHRocm91Z2hwdXQgVGhhbmtzIHRvIFN0ZXBoYW5lIExhbmRlbGxlLgpvIExBTkctMTM0NjogUmVtb3ZlIGRlcHJlY2F0aW9uIGZyb20gUmFuZG9tU3RyaW5nVXRpbHMKbyBMQU5HLTEzNjE6IEV4Y2VwdGlvblV0aWxzLmdldFRocm93YWJsZUxpc3QoKSBpcyB1c2luZyBkZXByZWNhdGVkIEV4Y2VwdGlvblV0aWxzLmdldENhdXNlKCkgVGhhbmtzIHRvIEFuYS4KCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjYgdmVyc2lvbiBvZgpBcGFjaGUgQ29tbW9ucyBMYW5nIGFzIHdlbGwgYXMgYSBoaXN0b3J5IGFsbCBjaGFuZ2VzIGluIHRoZSBDb21tb25zIExhbmcgMy54CnJlbGVhc2UgbGluZS4gQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZQpjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkgSmF2YSBlbnZpcm9ubWVudC4gQ29tbW9ucyBMYW5nIDMuNiBhdApsZWFzdCByZXF1aXJlcyBKYXZhIDcuMC4gTm90ZSB0aGF0IHRoaXMgaGFzIGNoYW5nZWQgZnJvbSBDb21tb25zIExhbmcgMy41LCB3aGljaApvbmx5IHJlcXVpcmVkIEphdmEgMS42LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKSElHSExJR0hUUwo9PT09PT09PT09CgpTb21lIG9mIHRoZSBoaWdobGlnaHRzIGluIHRoaXMgcmVsZWFzZSBpbmNsdWRlOgoKbyBUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmNvbmN1cnJlbnQuTWVtb2l6ZXIgaXMgYW4gaW1wbGVtZW50YXRpb24KICAgIG9mIHRoZSBNZW1vaXplciBwYXR0ZXJuIGFzIHNob3duIGluCiAgICBHb2V0eiwgQnJpYW4gZXQgYWwuICgyMDA2KSAtIEphdmEgQ29uY3VycmVuY3kgaW4gUHJhY3RpY2UsIHAuIDEwOC4KbyBUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFyY2hVdGlscyBoYXMgYmVlbiBhZGRlZC4gQXJjaFV0aWxzIGlzCiAgICBhIHV0aWxpdHkgY2xhc3MgZm9yIHRoZSAib3MuYXJjaCIgc3lzdGVtIHByb3BlcnR5LgoKREVQUkVDQVRJT05TCj09PT09PT09PT09PQoKVGhlIEFwYWNoZSBDb21tb25zIENvbW11bml0eSBoYXMgcmVjZW50bHkgc2V0IHVwIHRoZSBDb21tb25zIFRleHQgY29tcG9uZW50CmFzIGEgaG9tZSBmb3IgYWxnb3JpdGhtcyB3b3JraW5nIG9uIHN0cmluZ3MuIEZvciB0aGlzIHJlYXNvbiBtb3N0IG9mIHRoZSBzdHJpbmcKZm9jdXNlZCBmdW5jdGlvbmFsaXR5IGluIENvbW1vbnMgTGFuZyBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtb3ZlZCB0bwpDb21tb25zIFRleHQuIFRoaXMgaW5jbHVkZXM6CgpvIEFsbCBjbGFzc2VzIGluIHRoZSBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGV4dCBhbmQgdGhlCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGV4dC50cmFuc2xhdGUgcGFja2FnZXMKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nRXNjYXBlVXRpbHMKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHMKbyBUaGUgbWV0aG9kcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMuZ2V0SmFyb1dpbmtsZXJEaXN0YW5jZSBhbmQKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIENvbW1vbnMgVGV4dCB3ZWJzaXRlOgoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3RleHQKClRoZSBjbGFzcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQ2hhckVuY29kaW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLgoKVGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGluCm9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzIGluIGZhdm9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc2VydAptZXRob2RzLiBOb3RlIHRoYXQgdGhlIGhhbmRsaW5nIGZvciBudWxsIGlucHV0cyBkaWZmZXJzIGJldHdlZW4gYWRkIGFuZCBpbnNlcnQuCgpvIGFkZChib29sZWFuW10sIGludCwgYm9vbGVhbikgLT4gaW5zZXJ0KGludCwgYm9vbGVhbltdLCBib29sZWFuLi4uKQpvIGFkZChieXRlW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgYnl0ZVtdLCBieXRlLi4uKQpvIGFkZChjaGFyW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgY2hhcltdLCBjaGFyLi4uKQpvIGFkZChkb3VibGVbXSwgaW50LCBib29sZWFuKSAgLT4gaW5zZXJ0KGludCwgZG91YmxlW10sIGRvdWJsZS4uLikKbyBhZGQoZmxvYXRbXSwgaW50LCBib29sZWFuKSAgIC0+IGluc2VydChpbnQsIGZsb2F0W10sIGZsb2F0Li4uKQpvIGFkZChpbnRbXSwgaW50LCBib29sZWFuKSAgICAgLT4gaW5zZXJ0KGludCwgaW50W10sIGludC4uLikKbyBhZGQobG9uZ1tdLCBpbnQsIGJvb2xlYW4pICAgIC0+IGluc2VydChpbnQsIGxvbmdbXSwgbG9uZy4uLikKbyBhZGQoc2hvcnRbXSwgaW50LCBib29sZWFuKSAgIC0+IGluc2VydChpbnQsIHNob3J0W10sIHNob3J0Li4uKQpvIGFkZChUW10sIGludCwgYm9vbGVhbikgICAgICAgLT4gaW5zZXJ0KGludCwgVFtdLCBULi4uKQoKCkNPTVBBVElCSUxJVFkgV0lUSCBKQVZBIDkKPT09PT09PT09PT09PT09PT09CgpUaGUgTUFOSUZFU1QuTUYgbm93IGNvbnRhaW5zIGFuIGFkZGl0aW9uYWwgZW50cnk6CgogIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczCgpUaGlzIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBDb21tb25zIExhbmcgMy42IGFzIGEgbW9kdWxlIGluIHRoZSBKYXZhIDkKbW9kdWxlIHN5c3RlbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBjb3JyZXNwb25kaW5nIGlzc3VlIGFuZCB0aGUKcmVmZXJlbmNlZCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnM6CgogICAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTEzMzgKClRoZSBidWlsZCBwcm9ibGVtcyBwcmVzZW50IGluIHRoZSAzLjUgcmVsZWFzZSBoYXZlIGJlZW4gcmVzb2x2ZWQuIEJ1aWxkaW5nCkNvbW1vbnMgTGFuZyAzLjYgc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUgbGF0ZXN0IEphdmEgOSBFQSBidWlsZC4KUGxlYXNlIHJlcG9ydCBhbnkgSmF2YSA5IHJlbGF0ZWQgaXNzdWVzIGF0OgoKICAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORwoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PQoKbyBMQU5HLTEzMzY6IEFkZCBOVUwgQnl0ZSBUbyBDaGFyVXRpbHMuIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4KbyBMQU5HLTEzMDQ6IEFkZCBtZXRob2QgaW4gU3RyaW5nVXRpbHMgdG8gZGV0ZXJtaW5lIGlmIHN0cmluZyBjb250YWlucyBib3RoCiAgICAgICAgICAgICBtaXhlZCBjYXNlZCBjaGFyYWN0ZXJzLiBUaGFua3MgdG8gQW5keSBLbGltY3phay4KbyBMQU5HLTEzMjU6IEluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgVG9TdHJpbmdCdWlsZGVyIGNsYXNzIHRvIDEwMCUuCiAgICAgICAgICAgICBUaGFua3MgdG8gQXJzaGFkIEJhc2hhLgpvIExBTkctMTMwNzogQWRkIGEgbWV0aG9kIGluIFN0cmluZ1V0aWxzIHRvIGV4dHJhY3Qgb25seSBkaWdpdHMgb3V0IG9mIGlucHV0CiAgICAgICAgICAgICBzdHJpbmcuIFRoYW5rcyB0byBBcnNoYWQgQmFzaGEuCm8gTEFORy0xMjU2OiBBZGQgSk1IIG1hdmVuIGRlcGVuZGVuY2llcy4gVGhhbmtzIHRvIEMwcldpbi4KbyBMQU5HLTExNjc6IEFkZCBudWxsIGZpbHRlciB0byBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hcmsgRGFjZWsuCm8gTEFORy0xMjk5OiBBZGQgbWV0aG9kIGZvciBjb252ZXJ0aW5nIHN0cmluZyB0byBhbiBhcnJheSBvZiBjb2RlIHBvaW50cy4KbyBMQU5HLTY2MDogIEFkZCBtZXRob2RzIHRvIGluc2VydCBhcnJheXMgaW50byBhcnJheXMgYXQgYW4gaW5kZXguCm8gTEFORy0xMDM0OiBBZGQgc3VwcG9ydCBmb3IgcmVjdXJzaXZlIGNvbXBhcmlzb24gdG8KICAgICAgICAgICAgIEVxdWFsc0J1aWxkZXIjcmVmbGVjdGlvbkVxdWFscy4gVGhhbmtzIHRvIFlhdGhvcyBVRy4KbyBMQU5HLTEwNjc6IEFkZCBhIHJlZmxlY3Rpb24tYmFzZWQgdmFyaWFudCBvZiBEaWZmQnVpbGRlci4KbyBMQU5HLTc0MDogIEltcGxlbWVudGF0aW9uIG9mIGEgTWVtb21pemVyLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMjU4OiBBZGQgQXJyYXlVdGlscyN0b1N0cmluZ0FycmF5IG1ldGhvZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBJRywgR3J6ZWdvcnogUm8/bmllY2tpLgpvIExBTkctMTE2MDogU3RyaW5nVXRpbHMjYWJicmV2aWF0ZSBzaG91bGQgc3VwcG9ydCAnY3VzdG9tIGVsbGlwc2VzJyBwYXJhbWV0ZXIuCm8gTEFORy0xMjkzOiBBZGQgU3RyaW5nVXRpbHMjaXNBbGxFbXB0eSBhbmQgI2lzQWxsQmxhbmsgbWV0aG9kcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBQaWVycmUgVGVtcGxpZXIsIE1hcnRpbiBUYXJqYW55aS4KbyBMQU5HLTEzMTM6IEFkZCBBcmNoVXRpbHMgLSBBbiB1dGlsaXR5IGNsYXNzIGZvciB0aGUgIm9zLmFyY2giIHN5c3RlbSBwcm9wZXJ0eS4KICAgICAgICAgICAgIFRoYW5rcyB0byBUb21zY2hpLgpvIExBTkctMTI3MjogQWRkIHNodWZmbGUgbWV0aG9kcyB0byBBcnJheVV0aWxzLgpvIExBTkctMTMxNzogQWRkIE1ldGhvZFV0aWxzI2ZpbmRBbm5vdGF0aW9uIGFuZCBleHRlbmQKICAgICAgICAgICAgIE1ldGhvZFV0aWxzI2dldE1ldGhvZHNXaXRoQW5ub3RhdGlvbiBmb3Igbm9uLXB1YmxpYywgc3VwZXItY2xhc3MKICAgICAgICAgICAgIGFuZCBpbnRlcmZhY2UgbWV0aG9kcy4gVGhhbmtzIHRvIFlhc3NlciBaYW1hbmkuCm8gTEFORy0xMzMxOiBBZGQgSW1tdXRhYmxlUGFpci5udWxsUGFpcigpLgpvIExBTkctMTMzMjogQWRkIEltbXV0YWJsZVRyaXBsZS5udWxsVHJpcGxlKCkuCgpGSVhFRCBCVUdTCj09PT09PT09PT0KCm8gTEFORy0xMzM3OiBGaXggdGVzdCBmYWlsdXJlcyBpbiBJQk0gSkRLIDggZm9yIFRvU3RyaW5nQnVpbGRlclRlc3QuCm8gTEFORy0xMzE5OiBNdWx0aWxpbmVSZWN1cnNpdmVUb1N0cmluZ1N0eWxlIFN0YWNrT3ZlcmZsb3dFcnJvciB3aGVuIG9iamVjdCBpcwogICAgICAgICAgICAgYW4gYXJyYXkuCm8gTEFORy0xMzIwOiBMb2NhbGVVdGlscyN0b0xvY2FsZSBkb2VzIG5vdCBzdXBwb3J0IGxhbmd1YWdlIGZvbGxvd2VkIGJ5IFVOIE0uNDkKICAgICAgICAgICAgIG51bWVyaWMtMyBhcmVhIGNvZGUgZm9sbG93ZWQgYnkgdmFyaWFudC4KbyBMQU5HLTEzMDA6IENsYXJpZnkgb3IgaW1wcm92ZSBiZWhhdmlvciBvZiBpbnQtYmFzZWQgaW5kZXhPZiBtZXRob2RzIGluCiAgICAgICAgICAgICBTdHJpbmdVdGlscy4gVGhhbmtzIHRvIE1hcmsgRGFjZWsuCm8gTEFORy0xMjg2OiBSYW5kb21TdHJpbmdVdGlscyByYW5kb20gbWV0aG9kIGNhbiBvdmVyZmxvdyBhbmQgcmV0dXJuIGNoYXJhY3RlcnMKICAgICAgICAgICAgIG91dHNpZGUgb2Ygc3BlY2lmaWVkIHJhbmdlLgpvIExBTkctMTI5MjogV29yZFV0aWxzLndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCm8gTEFORy0xMjg3OiBSYW5kb21TdHJpbmdVdGlscyNyYW5kb20gY2FuIGVudGVyIGluZmluaXRlIGxvb3AgaWYgZW5kIHBhcmFtZXRlcgogICAgICAgICAgICAgaXMgdG8gc21hbGwuIFRoYW5rcyB0byBJdmFuIE1vcm96b3YuCm8gTEFORy0xMjg1OiBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBGYXN0RGF0ZVBhcnNlciRUaW1lWm9uZVN0cmF0ZWd5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEZyYW5jZXNjbyBDaGljY2hpcmljY/IuCm8gTEFORy0xMjgxOiBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLm9yZGluYWxJbmRleE9mIGlzIGNvbnRyYWRpY3RvcnkuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBMdW5kYmxhZC4KbyBMQU5HLTExODg6IFN0cmluZ1V0aWxzI2pvaW4oVC4uLik6IHdhcm5pbmc6IFt1bmNoZWNrZWRdIFBvc3NpYmxlIGhlYXAKICAgICAgICAgICAgIHBvbGx1dGlvbiBmcm9tIHBhcmFtZXRlcml6ZWQgdmFyYXJnIHR5cGUgVC4KbyBMQU5HLTExNDQ6IE11bHRpcGxlIGNhbGxzIG9mCiAgICAgICAgICAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5MYXp5SW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBhcmUgcG9zc2libGUuIFRoYW5rcyB0byBXYWxkZW1hciBNYWllciwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTI3NjogU3RyQnVpbGRlciNyZXBsYWNlQWxsIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmR5IEtsaW1jemFrLgpvIExBTkctMTI3ODogQm9vbGVhblV0aWxzIGphdmFkb2MgaXNzdWVzLiBUaGFua3MgdG8gRHVrZSBZaW4uCm8gTEFORy0xMDcwOiBBcnJheVV0aWxzI2FkZCBjb25mdXNpbmcgZXhhbXBsZSBpbiBqYXZhZG9jLgogICAgICAgICAgICAgVGhhbmtzIHRvIFBhdWwgUG9nb255c2hldi4KbyBMQU5HLTEyNzE6IFN0cmluZ1V0aWxzI2lzQW55RW1wdHkgYW5kICNpc0FueUJsYW5rIHNob3VsZCByZXR1cm4gZmFsc2UgZm9yIGFuCiAgICAgICAgICAgICBlbXB0eSBhcnJheS4gVGhhbmtzIHRvIFBpZXJyZSBUZW1wbGllci4KbyBMQU5HLTExNTU6IEFkZCBTdHJpbmdVdGlscyN1bndyYXAuIFRoYW5rcyB0byBTYWlmIEFzaWYsIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTMxMTogVHlwZVV0aWxzLnRvU3RyaW5nKCkgZG9lc24ndCBoYW5kbGUgcHJpbWl0aXZlIGFuZCBPYmplY3QgYXJyYXlzCiAgICAgICAgICAgICBjb3JyZWN0bHkuIFRoYW5rcyB0byBBYXJvbiBEaWd1bGxhLgpvIExBTkctMTMxMjogTG9jYWxlVXRpbHMjdG9Mb2NhbGUgZG9lcyBub3Qgc3VwcG9ydCBsYW5ndWFnZSBmb2xsb3dlZCBieSBVTiBNLjQ5CiAgICAgICAgICAgICBudW1lcmljLTMgYXJlYSBjb2RlLgpvIExBTkctMTI2NTogQnVpbGQgZmFpbHVyZXMgd2hlbiBidWlsZGluZyB3aXRoIEphdmEgOSBFQS4KbyBMQU5HLTEzMTQ6IGphdmFkb2MgY3JlYXRpb24gYnJva2VuIHdpdGggSmF2YSA4LiBUaGFua3MgdG8gQWxsb24gTXVyaWVuaWsuCm8gTEFORy0xMzEwOiBNZXRob2RVdGlscy5pbnZva2VNZXRob2QgdGhyb3dzIEFycmF5U3RvcmVFeGNlcHRpb24gaWYgdXNpbmcKICAgICAgICAgICAgIHZhcmFyZ3MgYXJndW1lbnRzIGFuZCBzbWFsbGVyIHR5cGVzIHRoYW4gdGhlIG1ldGhvZCBkZWZpbmVzLgogICAgICAgICAgICAgVGhhbmtzIHRvIERvbiBKZWJhLgoKQ0hBTkdFUwo9PT09PT09CgpvIExBTkctMTMzODogQWRkIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZSBNQU5JRkVTVCBlbnRyeSBmb3IgSmF2YSA5CiAgICAgICAgICAgICBjb21wYXRpYmlsaXR5LgpvIExBTkctMTMzNDogRGVwcmVjYXRlIENoYXJFbmNvZGluZyBpbiBmYXZvdXIgb2YKICAgICAgICAgICAgIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy4KbyBMQU5HLTExMTA6IEltcGxlbWVudCBIYXNoU2V0dkJpdFNldFRlc3QgdXNpbmcgSk1ILgogICAgICAgICAgICAgVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTEyOTA6IEluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2Ygb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmlpIEFicmFtb3YuCm8gTEFORy0xMjc0OiBTdHJTdWJzdGl0dXRvciBzaG91bGQgc3RhdGUgaXRzIHRocmVhZCBzYWZldHkuCm8gTEFORy0xMjc3OiBTdHJpbmdVdGlscyNnZXRMZXZlbnNodGVpbkRpc3RhbmNlIHJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24uCiAgICAgICAgICAgICBUaGFua3MgdG8geXVmY3V5LgpvIExBTkctMTI3OTogVXBkYXRlIEphdmEgcmVxdWlyZW1lbnQgZnJvbSBKYXZhIDYgdG8gNy4KbyBMQU5HLTExNDM6IFN0cmluZ1V0aWxzIHNob3VsZCB1c2UgdG9YeHh4Q2FzZShpbnQpIHJhdGhlciB0aGFuCiAgICAgICAgICAgICB0b1h4eHhDYXNlKGNoYXIpLiBUaGFua3MgdG8gc2ViYi4KbyBMQU5HLTEyOTc6IEFkZCBTeXN0ZW1VdGlscy5nZXRIb3N0TmFtZSgpIEFQSS4KbyBMQU5HLTEzMDE6IE1vdmluZyBhcGFjaGUtcmF0LXBsdWdpbiBjb25maWd1cmF0aW9uIGludG8gcGx1Z2luTWFuYWdlbWVudC4KICAgICAgICAgICAgIFRoYW5rcyB0byBLYXJsIEhlaW56IE1hcmJhaXNlLgpvIExBTkctMTMxNjogRGVwcmVjYXRlIGNsYXNzZXMvbWV0aG9kcyBtb3ZlZCB0byBjb21tb25zLXRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjUKCgpISUdITElHSFRTCj09PT09PT09PT0KClNvbWUgb2YgdGhlIGhpZ2hsaWdodHMgaW4gdGhpcyByZWxlYXNlIGluY2x1ZGU6CgpvIEFkZGVkIEphdmEgOSBkZXRlY3Rpb24gdG8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLgpvIFN1cHBvcnQgZm9yIHNoaWZ0aW5nIGFuZCBzd2FwcGluZyBlbGVtZW50cyBpbgogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMuCm8gTmV3IG1ldGhvZHMgZm9yIGdlbmVyYXRpbmcgcmFuZG9tIHN0cmluZ3MgZnJvbSBkaWZmZXJlbnQgY2hhcmFjdGVyIGNsYXNzZXMKICAgIGluY2x1ZGluZyBhbHBoYWJldGljLCBhbHBoYS1udW1lcmljIGFuZCBBU0NJSSBhZGRlZCB0bwogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzLgpvIE51bWVyb3VzIGV4dGVuc2lvbnMgdG8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzIGluY2x1ZGluZwogICAgbnVsbCBzYWZlIGNvbXBhcmUgdmFyaWFudHMsIG1vcmUgcmVtb3ZlIGFuZCByZXBsYWNlIHZhcmlhbnRzLCByb3RhdGlvbiBhbmQKICAgIHRydW5jYXRpb24uCm8gQWRkZWQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlRocmVhZFV0aWxzIC0gYSB1dGlsaXR5IGNsYXNzIHRvIHdvcmsgd2l0aAogICAgaW5zdGFuY2VzIG9mIGphdmEubGFuZy5UaHJlYWQgYW5kIGphdmEubGFuZy5UaHJlYWRHcm91cC4KbyBBZGRlZCBhbm5vdGF0aW9ucyBARXF1YWxzRXhjbHVkZSwgQEhhc2hDb2RlRXhjbHVkZSBhbmQgQFRvU3RyaW5nRWNsdWRlIHRvCiAgICBtYXJrIGZpZWxkcyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgcmVmbGVjdGl2ZSBidWlsZGVycyBpbiB0aGUKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5idWlsZGVyIHBhY2thZ2UuCm8gU3VwcG9ydCBmb3IgdmFyaW91cyBtb2RpZnkgYW5kIHJldHJpZXZlIHZhbHVlIHVzZSBjYXNlcyBhZGRlZCB0byB0aGUgY2xhc3NlcwogICAgaW4gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm11dGFibGUuCgpDT01QQVRJQklMSVRZCj09PT09PT09PT09PT0KCkFwYWNoZSBDb21tb25zIExhbmcgMy41IGlzIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdGhlIDMuNCByZWxlYXNlLiBVc2VycwpzaG91bGQgbm90IGV4cGVyaWVuY2UgYW55IHByb2JsZW1zIHdoZW4gdXBncmFkaW5nIGZyb20gMy40IHRvIDMuNS4KClRoZXJlIGhhcyBiZWVuIGFuIGFkZGl0aW9uIHRvIHRoZSBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5EYXRlUHJpbnRlcgppbnRlcmZhY2U6CgpvIEFkZGVkIG1ldGhvZCAncHVibGljIGJvb2xlYW4gcGFyc2UoamF2YS5sYW5nLlN0cmluZywgamF2YS50ZXh0LlBhcnNlUG9zaXRpb24sCiAgICBqYXZhLnV0aWwuQ2FsZW5kYXIpJwpvIEFkZGVkIG1ldGhvZCAncHVibGljIGphdmEubGFuZy5BcHBlbmRhYmxlIGZvcm1hdChsb25nLCBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGphdmEudXRpbC5EYXRlLAogICAgamF2YS5sYW5nLkFwcGVuZGFibGUpJwpvIEFkZGVkIG1ldGhvZCAncHVibGljIGphdmEubGFuZy5BcHBlbmRhYmxlIGZvcm1hdChqYXZhLnV0aWwuQ2FsZW5kYXIsCiAgICBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCgpGb3IgdGhpcyByZWFzb24gMy41IGlzIG5vdCBzdHJpY3RseSBzb3VyY2UgY29tcGF0aWJsZSB0byAzLjQuIFNpbmNlIHRoZQpEYXRlUHJpbnRlciBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMsIHRoaXMKY2hhbmdlIGl0IG5vdCBjb25zaWRlcmVkIHRvIGNhdXNlIGFueSBwcm9ibGVtcy4KCkpBVkEgOSBTVVBQT1JUCj09PT09PT09PT09PT09CgpKYXZhIDkgaW50cm9kdWNlcyBhIG5ldyB2ZXJzaW9uLXN0cmluZyBzY2hlbWUuIERldGFpbHMgb2YgdGhpcyBuZXcgc2NoZW1lIGFyZQpkb2N1bWVudGVkIGluIEpFUC0yMjMgKGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMjIzKS4gSW4gb3JkZXIgdG8gc3VwcG9ydApKRVAtMjIzIHR3byBjbGFzc2VzIGhhZCB0byBiZSBjaGFuZ2VkOgoKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuSmF2YVZlcnNpb24KICAgIGRlcHJlY2F0ZWQgZW51bSBjb25zdGFudCBKQVZBXzFfOQogICAgaW50cm9kdWNlZCBlbnVtIGNvbnN0YW50IEpBVkFfOQoKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMKICAgIGRlcHJlY2F0ZWQgY29uc3RhbnQgSVNfSkFWQV8xXzkKICAgIGludHJvZHVjZWQgY29uc3RhbnQgSVNfSkFWQV85CgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgTEFORy0xMTk3CihodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTE5NykuIEFsbCBvdGhlciBBUElzIGFyZSBleHBlY3RlZAp0byB3b3JrIHdpdGggSmF2YSA5LgoKQlVJTERJTkcgT04gSkFWQSA5Cj09PT09PT09PT09PT09PT09PQoKSmF2YSA4IGludHJvZHVjZWQgdGhlIFVuaWNvZGUgQ29uc29ydGl1bSdzIENvbW1vbiBMb2NhbGUgRGF0YSBSZXBvc2l0b3J5IGFzCmFsdGVybmF0aXZlIHNvdXJjZSBmb3IgbG9jYWxlIGRhdGEuIEphdmEgOSB3aWxsIHVzZSB0aGUgQ0xEUiBwcm92aWRlciBhcwpkZWZhdWx0IHByb3ZpZGVyIGZvciBsb2NhbGUgZGF0YSAoc2VlIGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMjUyKS4gVGhpcwpjYXVzZXMgYW4gbnVtYmVyIG9mIGxvY2FsZS1zZW5zaXRpdmUgdGVzdCBpbiBDb21tb25zIExhbmcgdG8gZmFpbC4gSW4gb3JkZXIKdG8gYnVpbGQgQ29tbW9ucyBMYW5nIDMuNSBvbiBKYXZhIDksIHRoZSBsb2NhbGUgcHJvdmlkZXIgaGFzIHRvIGJlIHNldCB0bwonSlJFJzoKCiAgICBtdm4gLURqYXZhLmxvY2FsZS5wcm92aWRlcnM9SlJFIGNsZWFuIGluc3RhbGwKCldlIGFyZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZyB3YXlzIHRvIHN1cHBvcnQgYnVpbGRpbmcgb24gSmF2YSA5IHdpdGhvdXQKZnVydGhlciBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6Cmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMjY1CgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctMTI3NTogQWRkZWQgYSB0cnlBY3F1aXJlKCkgbWV0aG9kIHRvIFRpbWVkU2VtYXBob3JlLgpvIExBTkctMTI1NTogQWRkIERhdGVVdGlscy50b0NhbGVuZGFyKERhdGUsIFRpbWVab25lKS4gVGhhbmtzIHRvIEthaXl1YW4gV2FuZy4KbyBMQU5HLTEwMjM6IEFkZCBXb3JkVXRpbHMud3JhcCBvdmVybG9hZCB3aXRoIGN1c3RvbWl6YWJsZSBicmVha2FibGUgY2hhcmFjdGVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hcmtvIEJla2h0YS4KbyBMQU5HLTc4NzogIEFkZCBtZXRob2QgcmVtb3ZlSWdub3JlQ2FzZShTdHJpbmcsIFN0cmluZykgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gR29rdWwgTmFudGhha3VtYXIgQy4KbyBMQU5HLTEyMjQ6IEV4dGVuZCBSYW5kb21TdHJpbmdVdGlscyB3aXRoIG1ldGhvZHMgdGhhdCBnZW5lcmF0ZSBzdHJpbmdzCiAgICAgICAgICAgICBiZXR3ZWVuIGEgbWluIGFuZCBtYXggbGVuZ3RoLiBUaGFua3MgdG8gQ2FsZWIgQ3VzaGluZy4KbyBMQU5HLTEyNTc6IEFkZCBBUElzIFN0cmluZ1V0aWxzLndyYXBJZk1pc3NpbmcoU3RyaW5nLCBjaGFyfFN0cmluZykuIFRoYW5rcyB0bwogICAgICAgICAgICAgR2FyeSBHcmVnb3J5LgpvIExBTkctMTI1MzogQWRkIFJhbmRvbVV0aWxzI25leHRCb29sZWFuKCkgbWV0aG9kLiBUaGFua3MgdG8gYWRpbGVrLgpvIExBTkctMTA4NTogQWRkIGEgY2lyY3VpdCBicmVha2VyIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gT2xpdmVyIEhlZ2VyIGFuZAogICAgICAgICAgICAgQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTAxMzogQWRkIFN0cmluZ1V0aWxzLnRydW5jYXRlKCkuIFRoYW5rcyB0byBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTExOTU6IEVuaGFuY2UgTWV0aG9kVXRpbHMgdG8gYWxsb3cgaW52b2NhdGlvbiBvZiBwcml2YXRlIG1ldGhvZHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gRGVyZWsgQy4gQXNobW9yZS4KbyBMQU5HLTExODk6IEFkZCBnZXRBbmRJbmNyZW1lbnQvZ2V0QW5kRGVjcmVtZW50L2dldEFuZEFkZC9pbmNyZW1lbnRBbmRHZXQvCiAgICAgICAgICAgICBkZWNyZW1lbnRBbmRHZXQvYWRkQW5kR2V0IGluIE11dGFibGUqIGNsYXNzZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgSGFpeWFuZyBMaSBhbmQgTWF0dGhldyBCYXJ0ZW5zY2hsYWcuCm8gTEFORy0xMjI1OiBBZGQgUmFuZG9tU3RyaW5nVXRpbHMjcmFuZG9tR3JhcGggYW5kICNyYW5kb21QcmludCB3aGljaCBtYXRjaAogICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWd1bGFyIGV4cHJlc3Npb24gY2xhc3MuIFRoYW5rcyB0byBDYWxlYiBDdXNoaW5nLgpvIExBTkctMTIyMzogQWRkIFN0b3BXYXRjaCNnZXRUaW1lKFRpbWVVbml0KS4gVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctNzgxOiAgQWRkIG1ldGhvZHMgdG8gT2JqZWN0VXRpbHMgY2xhc3MgdG8gY2hlY2sgZm9yIG51bGwgZWxlbWVudHMgaW4gdGhlCiAgICAgICAgICAgICBhcnJheS4gVGhhbmtzIHRvIEtyenlzenRvZiBXb2xueS4KbyBMQU5HLTEyMjg6IFByZWZlciBUaHJvd2FibGUuZ2V0Q2F1c2UoKSBpbiBFeGNlcHRpb25VdGlscy5nZXRDYXVzZSgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIEJyYWQgSGVzcy4KbyBMQU5HLTEyMzM6IERpZmZCdWlsZGVyIGFkZCBtZXRob2QgdG8gYWxsb3cgYXBwZW5kaW5nIGZyb20gYSBEaWZmUmVzdWx0LgogICAgICAgICAgICAgVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctMTE2ODogQWRkIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMTAgcHJvcGVydHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTE1OiBBZGQgc3VwcG9ydCBmb3IgdmFyYXJncyBpbiBDb25zdHJ1Y3RvclV0aWxzLCBNZW1iZXJVdGlscywgYW5kCiAgICAgICAgICAgICBNZXRob2RVdGlscy4gVGhhbmtzIHRvIEppbSBMbG95ZCBhbmQgSm9lIEZlcm5lci4KbyBMQU5HLTExMzQ6IEFkZCBtZXRob2RzIHRvIGNoZWNrIG51bWJlcnMgYWdhaW5zdCBOYU4gYW5kIGluaWZpbml0ZSB0bwogICAgICAgICAgICAgVmFsaWRhdGUuIFRoYW5rcyB0byBBbGFuIFNtaXRoZWUuCm8gTEFORy0xMjIwOiBBZGQgdGVzdHMgZm9yIG1pc3NlZCBicmFuY2hlcyBpbiBEYXRlVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQ2FzZXkgU2NhcmJvcm91Z2guCm8gTEFORy0xMTQ2OiB6L09TIGlkZW50aWZpY2F0aW9uIGluIFN5c3RlbVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEdhYm9yIExpcHRhay4KbyBMQU5HLTExOTI6IEZhc3REYXRlRm9ybWF0IHN1cHBvcnQgb2YgdGhlIHdlZWsteWVhciBjb21wb25lbnQgKHVwcGVyY2FzZSAnWScpLgogICAgICAgICAgICAgVGhhbmtzIHRvIERvbWluaWsgU3RhZGxlci4KbyBMQU5HLTExNjk6IEFkZCBTdHJpbmdVdGlscyBtZXRob2RzIHRvIGNvbXBhcmUgYSBzdHJpbmcgdG8gbXVsdGlwbGUgc3RyaW5ncy4KICAgICAgICAgICAgIFRoYW5rcyB0byBSYWZhbCBHbG93aW5za2ksIFJvYmVydCBQYXJyIGFuZCBBcm1hbiBTaGFyaWYuCm8gTEFORy0xMTg1OiBBZGQgcmVtb3ZlIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiBtZXRob2RzIGluIFN0cmluZ1V0aWxzLgpvIExBTkctMTEzOTogQWRkIHJlcGxhY2UgYnkgcmVndWxhciBleHByZXNzaW9uIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTcxOiBBZGQgY29tcGFyZSBtZXRob2RzIGluIFN0cmluZ1V0aWxzLgpvIExBTkctMTE3NDogQWRkIHN1Z2FyIHRvIFJhbmRvbVV0aWxzLiBUaGFua3MgdG8gUHVua3JhdHozMTIuCm8gTEFORy0xMTU0OiBGYXN0RGF0ZUZvcm1hdCBBUElzIHRoYXQgdXNlIGEgU3RyaW5nQnVpbGRlci4gVGhhbmtzIHRvCiAgICAgICAgICAgICBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMTQ5OiBBYmlsaXR5IHRvIHRocm93IGNoZWNrZWQgZXhjZXB0aW9ucyB3aXRob3V0IGRlY2xhcmluZyB0aGVtLiBUaGFua3MKICAgICAgICAgICAgIHRvIEdyZWdvcnkgWmFrLgpvIExBTkctMTE1MzogSW1wbGVtZW50IFBhcnNlUG9zaXRpb24gYXBpIGZvciBGYXN0RGF0ZVBhcnNlci4KbyBMQU5HLTExMzc6IEFkZCBjaGVjayBmb3IgZHVwbGljYXRlIGV2ZW50IGxpc3RlbmVyIGluIEV2ZW50TGlzdGVuZXJTdXBwb3J0LgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hdHRoZXcgQWd1aXJyZS4KbyBMQU5HLTExMzU6IEFkZCBtZXRob2QgY29udGFpbnNBbGxXb3JkcyB0byBXb3JkVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgRWR1YXJkbyBNYXJ0aW5zLgpvIExBTkctMTEzMjogUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlciBkb2Vzbid0IHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogICAgICAgICAgICAgd2hlbiB0aGUgY29uc3RydWN0b3IncyBvYmplY3QgcGFyYW0gaXMgbnVsbC4gVGhhbmtzIHRvIEphY2sgVGFuLgpvIExBTkctNzAxOiAgU3RyaW5nVXRpbHMgam9pbiB3aXRoIHZhciBhcmdzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMTA1OiBBZGQgVGhyZWFkVXRpbHMgLSBBIHV0aWxpdHkgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgaGVscGVyIG1ldGhvZHMKICAgICAgICAgICAgIHJlbGF0ZWQgdG8gamF2YS5sYW5nLlRocmVhZCAgSXNzdWU6IExBTkctMTEwNS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBIZW5kcmlrIFNhbHkuCm8gTEFORy0xMDMxOiBBZGQgYW5ub3RhdGlvbnMgdG8gZXhjbHVkZSBmaWVsZHMgZnJvbSBSZWZsZWN0aW9uRXF1YWxzQnVpbGRlciwKICAgICAgICAgICAgIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIgYW5kIFJlZmxlY3Rpb25IYXNoQ29kZUJ1aWxkZXIuIFRoYW5rcwogICAgICAgICAgICAgdG8gRmVsaXBlIEFkb3Juby4KbyBMQU5HLTExMjc6IFVzZSBKVW5pdCBydWxlcyB0byBzZXQgYW5kIHJlc2V0IHRoZSBkZWZhdWx0IExvY2FsZSBhbmQgVGltZVpvbmUuCm8gTEFORy0xMTE5OiBBZGQgcm90YXRlKHN0cmluZywgaW50KSBtZXRob2QgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgTG9pYyBHdWliZXJ0LgpvIExBTkctMTA5OTogQWRkIHN3YXAgYW5kIHNoaWZ0IG9wZXJhdGlvbnMgZm9yIGFycmF5cyB0byBBcnJheVV0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFkcmlhbiBCZXIuCm8gTEFORy0xMDUwOiBDaGFuZ2UgbnVsbFRvRW1wdHkgbWV0aG9kcyB0byBnZW5lcmljcy4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTA3NDogQWRkIGEgbWV0aG9kIHRvIEFycmF5VXRpbHMgZm9yIHJlbW92aW5nIGFsbCBvY2N1cnJlbmNlcyBvZiBhIGdpdmVuCiAgICAgICAgICAgICBlbGVtZW50ICBJc3N1ZTogTEFORy0xMDc0LiBUaGFua3MgdG8gSGFpeWFuZyBMaS4KCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctMTI2MTogQXJyYXlVdGlscy5jb250YWlucyByZXR1cm5zIGZhbHNlIGZvciBpbnN0YW5jZXMgb2Ygc3VidHlwZXMuCm8gTEFORy0xMjUyOiBSZW5hbWUgTnVtYmVyVXRpbHMuaXNOdW1iZXIsIGlzQ3JlYXRhYmxlIHRvIGJldHRlciByZWZsZWN0CiAgICAgICAgICAgICBjcmVhdGVOdW1iZXIuIEFsc28sIGFjY29tbW9kYXRlZCBmb3IgIisiIHN5bWJvbCBhcyBwcmVmaXggaW4KICAgICAgICAgICAgIGlzQ3JlYXRhYmxlIGFuZCBpc051bWJlci4gVGhhbmtzIHRvIFJvYiBUb21wa2lucy4KbyBMQU5HLTEyMzA6IFJlbW92ZSB1bm5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24gZnJvbSByZWdpc3RyeSBsb29rdXAgaW4KICAgICAgICAgICAgIEVxdWFsc0J1aWxkZXIgYW5kIEhhc2hDb2RlQnVpbGRlci4gVGhhbmtzIHRvIFBoaWxpcHBlIE1hcnNjaGFsbC4KbyBMQU5HLTEyMTQ6IEhhbmRsZSAidm9pZCIgaW4gQ2xhc3NVdGlscy5nZXRDbGFzcygpLiBUaGFua3MgdG8gSGVucnkgVHVuZy4KbyBMQU5HLTEyNTA6IFNlcmlhbGl6YXRpb25VdGlscyNkZXNlcmlhbGl6ZSBoYXMgdW5uZWNlc3NhcnkgY29kZSBhbmQgYSBjb21tZW50CiAgICAgICAgICAgICBmb3IgdGhhdC4gVGhhbmtzIHRvIEdsZWFzZSBXYW5nLgpvIExBTkctMTE5MDogVHlwZVV0aWxzLmlzQXNzaWduYWJsZSB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiBmcm9tVHlwZQogICAgICAgICAgICAgaGFzIHR5cGUgdmFyaWFibGVzIGFuZCB0b1R5cGUgZ2VuZXJpYyBzdXBlcmNsYXNzIHNwZWNpZmllcyB0eXBlCiAgICAgICAgICAgICB2YXJpYWJsZS4gVGhhbmtzIHRvIFBhc2NhbCBTY2h1bWFjaGVyLgpvIExBTkctMTIyNjogU3RyaW5nVXRpbHMjbm9ybWFsaXplU3BhY2UgZG9lcyBub3QgdHJpbSB0aGUgc3RyaW5nIGFueW1vcmUuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMjUxOiBTZXJpYWxpemF0aW9uVXRpbHMuQ2xhc3NMb2FkZXJBd2FyZU9iamVjdElucHV0U3RyZWFtIHNob3VsZCB1c2UKICAgICAgICAgICAgIHN0YXRpYyBpbml0aWFsaXplciB0byBpbml0aWFsaXplIHByaW1pdGl2ZVR5cGVzIG1hcC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUYWt1eWEgVWVzaGluLgpvIExBTkctMTI0ODogRmFzdERhdGVQcmludGVyIE1lbW9yeSBhbGxvY2F0aW9uIHJlZ3Jlc3Npb24uIFRoYW5rcyB0bwogICAgICAgICAgICAgQmVub2l0IFdpYXJ0LgpvIExBTkctMTAxODogRml4IHByZWNpc2lvbiBsb3NzIG9uIE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcihTdHJpbmcpLiBUaGFua3MgdG8KICAgICAgICAgICAgIE5pY2sgTWFubGV5LgpvIExBTkctMTE5OTogRml4IGltcGxlbWVudGF0aW9uIG9mIFN0cmluZ1V0aWxzLmdldEphcm9XaW5rbGVyRGlzdGFuY2UoKS4gVGhhbmtzCiAgICAgICAgICAgICB0byBNLiBTdGVpZ2VyLgpvIExBTkctMTI0NDogRml4IGRlYWQgbGlua3MgaW4gU3RyaW5nVXRpbHMuZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSgpIGphdmFkb2MuCiAgICAgICAgICAgICBUaGFua3MgdG8gampiYW5rZXJ0LgpvIExBTkctMTI0MjogIlx1MjI4NCI6Ij8iIG1hcHBpbmcgbWlzc2luZyBmcm9tCiAgICAgICAgICAgICBFbnRpdHlBcnJheXMjSFRNTDQwX0VYVEVOREVEX0VTQ0FQRS4gVGhhbmtzIHRvIE5lYWwgU3Rld2FydC4KbyBMQU5HLTkwMTogIFN0cmluZ1V0aWxzI3N0YXJ0c1dpdGhBbnkvZW5kc1dpdGhBbnkgaXMgY2FzZSBzZW5zaXRpdmUgLQogICAgICAgICAgICAgZG9jdW1lbnRlZCBhcyBjYXNlIGluc2Vuc2l0aXZlLiBUaGFua3MgdG8gTWF0dGhldyBCYXJ0ZW5zY2hsYWcuCm8gTEFORy0xMjMyOiBEaWZmQnVpbGRlcjogQWRkIG51bGwgY2hlY2sgb24gZmllbGROYW1lIHdoZW4gYXBwZW5kaW5nIE9iamVjdCBvcgogICAgICAgICAgICAgT2JqZWN0W10uIFRoYW5rcyB0byBOaWNrIE1hbmxleS4KbyBMQU5HLTExNzg6IEFycmF5VXRpbHMucmVtb3ZlQWxsKE9iamVjdCBhcnJheSwgaW50Li4uIGluZGljZXMpIHNob3VsZCBkbyB0aGUKICAgICAgICAgICAgIGNsb25lLCBub3QgaXRzIGNhbGxlcnMuIFRoYW5rcyB0byBIZW5yaSBZYW5kZWxsLgpvIExBTkctMTEyMDogU3RyaW5nVXRpbHMuc3RyaXBBY2NlbnRzIHNob3VsZCByZW1vdmUgYWNjZW50cyBmcm9tICI/IiBhbmQgIj8iLgogICAgICAgICAgICAgVGhhbmtzIHRvIGthY2hpbmc4OC4KbyBMQU5HLTEyMDU6IE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcigpIGJlaGF2ZXMgaW5jb25zaXN0ZW50bHkgd2l0aAogICAgICAgICAgICAgTnVtYmVyVXRpbHMuaXNOdW1iZXIoKS4gVGhhbmtzIHRvIHBicm9zZS4KbyBMQU5HLTEyMjI6IEZpeCBmb3IgaW5jb3JyZWN0IGNvbW1lbnQgb24gU3RyaW5nVXRpbHMuY29udGFpbnNJZ25vcmVDYXNlCiAgICAgICAgICAgICBtZXRob2QuIFRoYW5rcyB0byBBZGFtIEouCm8gTEFORy0xMjIxOiBGaXggdHlwbyBvbiBhcHBlbmRJZk1pc3NpbmcgamF2YWRvYy4gVGhhbmtzIHRvIFBpZXJyZSBUZW1wbGllci4KbyBMQU5HLTEyMDI6IHBhcnNlRGF0ZVN0cmljdGx5IGRvZXMndCBwYXNzIHNwZWNpZmllZCBsb2NhbGUuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWFya3VzIEplbHNtYS4KbyBMQU5HLTEyMTk6IEZhc3REYXRlRm9ybWF0IGRvZXNuJ3QgcmVzcGVjdCBzdW1tZXIgZGF5bGlnaHQgaW4gc29tZSBsb2NhbGl6ZWQKICAgICAgICAgICAgIHN0cmluZ3MuIFRoYW5rcyB0byBKYXJlay4KbyBMQU5HLTExNzU6IFJlbW92ZSBBbnQtYmFzZWQgYnVpbGQuCm8gTEFORy0xMTk0OiBMaW1pdCBtYXggaGVhcCBtZW1vcnkgZm9yIGNvbnNpc3RlbnQgVHJhdmlzIENJIGJ1aWxkLgpvIExBTkctMTE4NjogRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIEZhc3REYXRlUGFyc2VyJFRpbWVab25lU3RyYXRlZ3kuCiAgICAgICAgICAgICBUaGFua3MgdG8gTmlja01hbmxleS4KbyBMQU5HLTExOTM6IG9yZGluYWxJbmRleE9mKCJhYmMiLCAiYWIiLCAxKSBnaXZlcyBpbmNvcnJlY3QgYW5zd2VyIG9mIC0xCiAgICAgICAgICAgICAoY29ycmVjdCBhbnN3ZXIgc2hvdWxkIGJlIDApOyByZXZlcnQgZml4IGZvciBMQU5HLTEwNzcuIFRoYW5rcyB0bwogICAgICAgICAgICAgUWluIExpLgpvIExBTkctMTAwMjogU2V2ZXJhbCBwcmVkZWZpbmVkIElTTyBGYXN0RGF0ZUZvcm1hdHMgaW4gRGF0ZUZvcm1hdFV0aWxzIGFyZQogICAgICAgICAgICAgaW5jb3JyZWN0LiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMTUyOiBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIG9yIGZpZWxkIG92ZXItd3JpdGUgZm9yIGxhcmdlIHllYXIKICAgICAgICAgICAgIGZpZWxkcyBpbiBGYXN0RGF0ZVBhcnNlci4gVGhhbmtzIHRvIFBhcyBGaWxpcC4KbyBMQU5HLTExNDE6IFN0ckxvb2t1cC5zeXN0ZW1Qcm9wZXJ0aWVzTG9va3VwKCkgbm8gbG9uZ2VyIHJlYWN0cyBvbiBjaGFuZ2VzIG9uCiAgICAgICAgICAgICBzeXN0ZW0gcHJvcGVydGllcy4KbyBMQU5HLTExNDc6IEVudW1VdGlscyAqQml0VmVjdG9yIGlzc3VlIHdpdGggbW9yZSB0aGFuIDMyIHZhbHVlcyBFbnVtLiBUaGFua3MKICAgICAgICAgICAgIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTEwNTk6IENhcGl0YWxpemUgamF2YWRvYyBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBDb2xpbiBDYXNleS4KbyBMQU5HLTExMjI6IEluY29uc2lzdGVudCBiZWhhdmlvciBvZiBzd2FwIGZvciBtYWxmb3JtZWQgaW5wdXRzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFkcmlhbiBCZXIuCm8gTEFORy0xMTMwOiBGaXggY3JpdGljYWwgaXNzdWVzIHJlcG9ydGVkIGJ5IFNvbmFyUXViZS4KbyBMQU5HLTExMzE6IFN0ckJ1aWxkZXIuZXF1YWxzKFN0ckJ1aWxkZXIpIGRvZXNuJ3QgY2hlY2sgZm9yIG51bGwgaW5wdXRzLgpvIExBTkctMTEyODogSnNvblRvU3RyaW5nU3R5bGUgZG9lc24ndCBoYW5kbGUgY2hhcnMgYW5kIG9iamVjdHMgY29ycmVjdGx5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEphY2sgVGFuLgpvIExBTkctMTEyNjogRGF0ZUZvcm1hdFV0aWxzVGVzdC50ZXN0U01UUCBkZXBlbmRzIG9uIHRoZSBkZWZhdWx0IExvY2FsZS4KbyBMQU5HLTExMjM6IFVuaXQgdGVzdCBGYXN0RGF0ZVByaW50ZXJUaW1lWm9uZXNUZXN0IG5lZWRzIGEgdGltZXpvbmUgc2V0LgogICAgICAgICAgICAgVGhhbmtzIHRvIENocmlzdGlhbiBQLiBNb21vbi4KbyBMQU5HLTkxNjogIERhdGVGb3JtYXRVdGlscy5mb3JtYXQgZG9lcyBub3QgY29ycmVjdGx5IGNoYW5nZSBDYWxlbmRhcgogICAgICAgICAgICAgVGltZVpvbmUgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBUaGFua3MgdG8gQ2hyaXN0aWFuIFAuIE1vbW9uLgpvIExBTkctMTExNjogRGF0ZVV0aWxzVGVzdC50ZXN0TGFuZzUzMCBmYWlscyBmb3Igc29tZSB0aW1lem9uZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWFyb24gU2hlbGRvbi4KbyBMQU5HLTExMTQ6IFR5cGVVdGlscy5QYXJhbWV0ZXJpemVkVHlwZSNlcXVhbHMgZG9lc24ndCB3b3JrIHdpdGggd2lsZGNhcmQKICAgICAgICAgICAgIHR5cGVzLiBUaGFua3MgdG8gQW5keSBDb2F0ZXMuCm8gTEFORy0xMTE4OiBTdHJpbmdVdGlscy5yZXBlYXQoJ3onLCAtMSkgdGhyb3dzIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTExMTE6IEZpeCBGaW5kQnVncyB3YXJuaW5ncyBpbiBEdXJhdGlvbkZvcm1hdFV0aWxzLgpvIExBTkctMTE2MjogU3RyaW5nVXRpbHMjZXF1YWxzIGZhaWxzIHdpdGggSW5kZXggT09CRSBvbiBub24tU3RyaW5ncyB3aXRoCiAgICAgICAgICAgICBpZGVudGljYWwgbGVhZGluZyBwcmVmaXguLgpvIExBTkctMTE2MzogVGhlcmUgYXJlIG5vIHRlc3RzIGZvciBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzLgpvIExBTkctMTIwMDogRml4IEphdmFkb2Mgb2YgU3RyaW5nVXRpbHMub3JkaW5hbEluZGV4T2YuIFRoYW5rcyB0byBCYXJrWmhhbmcuCm8gTEFORy0xMTkxOiBJbmNvcnJlY3QgSmF2YWRvYwogICAgICAgICAgICAgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pLiBUaGFua3MgdG8KICAgICAgICAgICAgIHFlZCwgQnJlbnQgV29yZGVuIGFuZCBHYXJ5IEdyZWdvcnkuCgpDSEFOR0VTCj09PT09PT09PQpvIExBTkctMTE5NzogUHJlcGFyZSBKYXZhIDkgZGV0ZWN0aW9uLgpvIExBTkctMTI2MjogQ29tcGFyZVRvQnVpbGRlci5hcHBlbmQoT2JqZWN0LCBPYmplY3QsIENvbXBhcmF0b3IpIG1ldGhvZCBpcyB0b28KICAgICAgICAgICAgIGJpZyB0byBiZSBpbmxpbmVkLiBUaGFua3MgdG8gUnVzbGFuIENoZXJlbWluLgpvIExBTkctMTI1OTogSmF2YWRvYyBmb3IgQXJyYXlVdGlscy5pc05vdEVtcHR5KCkgaXMgc2xpZ2h0bHkgbWlzbGVhZGluZy4gVGhhbmtzCiAgICAgICAgICAgICB0byBEb21pbmlrIFN0YWRsZXIuCm8gTEFORy0xMjQ3OiBGYXN0RGF0ZVByaW50ZXIgZ2VuZXJhdGVzIGV4dHJhIERhdGUgb2JqZWN0cy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW5vaXQgV2lhcnQuCm8gTEFORy0xMjI5OiBIYXNoQ29kZUJ1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjQzOiBTaW1wbGlmeSBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIGJ5IHVzaW5nIG5ldyBkZWNyZW1lbnRBbmRHZXQoKQogICAgICAgICAgICAgbWV0aG9kLgpvIExBTkctMTI0MDogT3B0aW1pemUgQml0RmllbGQgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byB6aGFuaGIuCm8gTEFORy0xMjA2OiBJbXByb3ZlIENoYXJTZXRVdGlscy5zcXVlZXplKCkgcGVyZm9ybWFuY2UuIFRoYW5rcyB0bwogICAgICAgICAgICAgTW9oYW1tZWQgQWxmYWxsYWouCm8gTEFORy0xMTc2OiBJbXByb3ZlIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgdGltZSBjb21wbGV4aXR5IHRvIE8obikuIFRoYW5rcwogICAgICAgICAgICAgdG8gSmVmZmVyeSBZdWFuLgpvIExBTkctMTIzNDogZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSB3aXRoIGEgdGhyZXNob2xkOiBvcHRpbWl6ZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgdGhlIHN0cmluZ3MgbGVuZ3RocyBkaWZmZXIgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQuIFRoYW5rcyB0bwogICAgICAgICAgICAgSm9uYXRhbiBK9m5zc29uLgpvIExBTkctMTE1MTogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGZvciBOdW1iZXJVdGlscy5pc1BhcnNhYmxlLiBUaGFua3MgdG8KICAgICAgICAgICAgIEp1YW4gUGFibG8gU2FudG9zIFJvZHLtZ3Vlei4KbyBMQU5HLTEyMTg6IEVxdWFsc0J1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjEwOiBTdHJpbmdVdGlscyNzdGFydHNXaXRoQW55IGhhcyBlcnJvciBpbiBKYXZhZG9jLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1hdHRoaWFzIE5pZWhvZmYuCm8gTEFORy0xMjA4OiBTdHJTdWJzdGl0dXRvciBjYW4gcHJlc2VydmUgZXNjYXBlcy4gVGhhbmtzIHRvIFNhbXVlbCBLYXJwLgpvIExBTkctMTE4MjogQ2xhcmlmeSBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLmNvbnRhaW5zQW55KCkuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGFycnkgV2VzdCBhbmQgUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTgzOiBNYWtpbmcgcmVwbGFjZVBhdHRlcm4vcmVtb3ZlUGF0dGVybiBtZXRob2RzIG51bGwgc2FmZSBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuCm8gTEFORy0xMDU3OiBSZXBsYWNlIFN0cmluZ0J1aWxkZXIgd2l0aCBTdHJpbmcgY29uY2F0ZW5hdGlvbiBmb3IgYmV0dGVyCiAgICAgICAgICAgICBvcHRpbWl6YXRpb24uIFRoYW5rcyB0byBPdOF2aW8gU2FudGFuYS4KbyBMQU5HLTEwNzU6IERlcHJlY2F0ZSBTeXN0ZW1VdGlscy5GSUxFX1NFUEFSQVRPUiBhbmQKICAgICAgICAgICAgIFN5c3RlbVV0aWxzLlBBVEhfU0VQQVJBVE9SLgpvIExBTkctOTc5OiAgVHlwZVV0aWxzLnBhcmFtZXRlcml6ZVdpdGhPd25lciAtIHdyb25nIGZvcm1hdCBkZXNjcmlwdG9yIGZvcgogICAgICAgICAgICAgImludmFsaWQgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyIuIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMTEyOiBNdWx0aWxpbmVSZWN1cnNpdmVUb1N0cmluZ1N0eWxlIGxhcmdlbHkgdW51c2FibGUgZHVlIHRvIGJlaW5nCiAgICAgICAgICAgICBwYWNrYWdlLXByaXZhdGUuCm8gTEFORy0xMDU4OiBTdHJpbmdVdGlscy51bmNhcGl0YWxpemUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGVvIFdhbmcuCm8gTEFORy0xMDY5OiBDaGFyU2V0LmdldEluc3RhbmNlIGRvY3VtZW50YXRpb24gZG9lcyBub3QgY2xlYXJseSBleHBsYWluIGhvdwogICAgICAgICAgICAgdG8gaW5jbHVkZSBuZWdhdGlvbiBjaGFyYWN0ZXIgaW4gc2V0LiBUaGFua3MgdG8gQXJubyBOb29yZG92ZXIuCm8gTEFORy0xMTA3OiBGaXggcGFyc2luZyBlZGdlIGNhc2VzIGluIEZhc3REYXRlUGFyc2VyLgpvIExBTkctMTI3MzogQWRkZWQgbmV3IHByb3BlcnR5IElTX09TX01BQ19PU1hfRUxfQ0FQSVRBTiBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBKYWtlIFdhbmcuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjQKCgpDT01QQVRJQklMSVRZCj09PT09PT09PT09PT0KCkNvbW1vbnMgTGFuZyAzLjQgaXMgZnVsbHkgYmluYXJ5IGNvbXBhdGlibGUgdG8gdGhlIGxhc3QgcmVsZWFzZSBhbmQgY2FuCnRoZXJlZm9yZSBiZSB1c2VkIGFzIGEgZHJvcCBpbiByZXBsYWNlbWVudCBmb3IgMy4zLjIuIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YKb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRHVyYXRpb25Gb3JtYXRVdGlscy5JU09fRVhURU5ERURfRk9STUFUX1BBVFRFUk4KaGFzIGNoYW5nZWQsIHdoaWNoIG1heSBhZmZlY3QgY2xpZW50cyB1c2luZyB0aGUgY29uc3RhbnQuIEZ1cnRoZXJtb3JlIHRoZQpjb25zdGFudCBpcyB1c2VkIGludGVybmFsbHkgaW4KbyBEdXJhdGlvbkZvcm1hdFV0aWxzLmZvcm1hdER1cmF0aW9uSVNPKGxvbmcpCm8gRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXRQZXJpb2RJU08obG9uZywgbG9uZykKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTAwMC4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTgyMTogIFN1cHBvcnQgT1MgWCB2ZXJzaW9ucyBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzIHRvIFRpbW8gS29ja2VydC4KbyBMQU5HLTExMDM6IEFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzFfOQpvIExBTkctMTA5MzogQWRkIENsYXNzVXRpbHMuZ2V0QWJicmV2aWF0ZWROYW1lKCkuIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMDgyOiBBZGQgb3B0aW9uIHRvIGRpc2FibGUgdGhlICJvYmplY3RzVHJpdmlhbGx5RXF1YWwiIHRlc3QgaW4KICAgICAgICAgICAgIERpZmZCdWlsZGVyLiBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDE1OiBBZGQgSnNvblRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gdG8gVG9TdHJpbmdTdHlsZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEwODA6IEFkZCBOb0NsYXNzTmFtZVRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gb2YgVG9TdHJpbmdTdHlsZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBJbm5va2VudHkgU2h1dmFsb3YuCm8gTEFORy04ODM6ICBBZGQgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pIG1ldGhvZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBEYW5pZWwgU3Rld2FydC4KbyBMQU5HLTEwNTI6IE11bHRpbGluZSByZWN1cnNpdmUgdG8gc3RyaW5nIHN0eWxlLiBUaGFua3MgdG8gSmFuIE1hdOhybmUuCm8gTEFORy01MzY6ICBBZGQgaXNTb3J0ZWQoKSB0byBBcnJheVV0aWxzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMDMzOiBBZGQgU3RyaW5nVXRpbHMuY291bnRNYXRjaGVzKENoYXJTZXF1ZW5jZSwgY2hhcikKbyBMQU5HLTEwMjE6IFByb3ZpZGUgbWV0aG9kcyB0byByZXRyaWV2ZSBhbGwgZmllbGRzL21ldGhvZHMgYW5ub3RhdGVkIHdpdGggYQogICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4gVGhhbmtzIHRvIEFsZXhhbmRlciBN/GxsZXIuCm8gTEFORy0xMDE2OiBOdW1iZXJVdGlscyNpc1BhcnNhYmxlIG1ldGhvZChzKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKdWFuIFBhYmxvIFNhbnRvcyBSb2Ry7Wd1ZXouCm8gTEFORy05OTk6ICBBZGQgZnV6enkgU3RyaW5nIG1hdGNoaW5nIGxvZ2ljIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEJlbiBSaXBrZW5zLgpvIExBTkctOTk0OiAgQWRkIHplcm8gY29weSByZWFkIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy05OTM6ICBBZGQgemVybyBjb3B5IHdyaXRlIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy0xMDQ0OiBBZGQgbWV0aG9kIE1ldGhvZFV0aWxzLmludm9rZUV4YWN0TWV0aG9kKE9iamVjdCwgU3RyaW5nKQpvIExBTkctMTA0NTogQWRkIG1ldGhvZCBNZXRob2RVdGlscy5pbnZva2VNZXRob2QoT2JqZWN0LCBTdHJpbmcpCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTc5NDogIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMjAwOCwgVklTVEEgYXJlIGluY29ycmVjdC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaW1vIEtvY2tlcnQuCm8gTEFORy0xMTA0OiBQYXJzZSB0ZXN0IGZhaWxzIGZvciBUaW1lWm9uZSBBbWVyaWNhL1Nhb19QYXVsbwpvIExBTkctOTQ4OiAgRXhjZXB0aW9uIHdoaWxlIHVzaW5nIEV4dGVuZGVkTWVzc2FnZUZvcm1hdCBhbmQgZXNjYXBpbmcgYnJhY2VzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJleSBLaG9ibnlhLgpvIExBTkctMTA5MjogV3JvbmcgZm9ybWF0aW5nIG9mIHRpbWUgem9uZXMgd2l0aCBkYXlsaWdodCBzYXZpbmcgdGltZSBpbgogICAgICAgICAgICAgRmFzdERhdGVQcmludGVyCm8gTEFORy0xMDkwOiBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBzZXQgZXJyb3IgaW5kaWNhdGlvbiBpbiBQYXJzZVBvc2l0aW9uCm8gTEFORy0xMDg5OiBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgZXhjZXNzIGhvdXJzIGFzIHBlcgogICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdApvIExBTkctMTA2MTogRmFzdERhdGVQYXJzZXIgZXJyb3IgLSB0aW1lem9uZXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGFua3MgdG8KICAgICAgICAgICAgIGRtZW5lc2VzLgpvIExBTkctMTA4NzogTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyKCkgcmV0dXJucyBwb3NpdGl2ZSBCaWdEZWNpbWFsIHdoZW4KICAgICAgICAgICAgIG5lZ2F0aXZlIEZsb2F0IGlzIGV4cGVjdGVkLiBUaGFua3MgdG8gUmVuYXQgWmhpbGtpYmFldi4KbyBMQU5HLTEwODE6IERpZmZCdWlsZGVyLmFwcGVuZChTdHJpbmcsIE9iamVjdCBsZWZ0LCBPYmplY3QgcmlnaHQpIGRvZXMgbm90IGRvCiAgICAgICAgICAgICBhIGxlZnQuZXF1YWxzKHJpZ2h0KSBjaGVjay4gVGhhbmtzIHRvIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTA1NTogU3RyU3Vic3RpdHV0b3IucmVwbGFjZVN5c3RlbVByb3BlcnRpZXMgZG9lcyBub3Qgd29yayBjb25zaXN0ZW50bHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDgzOiBBZGQgKFQpIGNhc3RzIHRvIGdldCB1bml0IHRlc3RzIHRvIHBhc3MgaW4gb2xkIEpESy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwNzM6IFJlYWQgd3JvbmcgY29tcG9uZW50IHR5cGUgb2YgYXJyYXkgaW4gYWRkIGluIEFycmF5VXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gaGFpeWFuZyBsaS4KbyBMQU5HLTEwNzc6IFN0cmluZ1V0aWxzLm9yZGluYWxJbmRleE9mKCJhYWFhYWEiLCAiYWEiLCAyKSAhPSAzIGluIFN0cmluZ1V0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIGhhaXlhbmcgbGkuCm8gTEFORy0xMDcyOiBEdXBsaWNhdGVkICIweCIgY2hlY2sgaW4gY3JlYXRlQmlnSW50ZWdlciBpbiBOdW1iZXJVdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBoYWl5YW5nIGxpLgpvIExBTkctMTA2NDogU3RyaW5nVXRpbHMuYWJicmV2aWF0ZSBkZXNjcmlwdGlvbiBkb2Vzbid0IGFncmVlIHdpdGggdGhlCiAgICAgICAgICAgICBleGFtcGxlcy4gVGhhbmtzIHRvIEIuSi4gSGVyYmlzb24uCm8gTEFORy0xMDQxOiBGaXggTWV0aG9kVXRpbHNUZXN0IHNvIGl0IGRvZXMgbm90IGRlcGVuZCBvbiBKREsgbWV0aG9kIG9yZGVyaW5nLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXhhbmRyZSBCYXJ0ZWwuCm8gTEFORy0xMDAwOiBQYXJzZUV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwYXJzZSBVVEMgZGF0ZXMgd2l0aCBaIGFzIHpvbmUKICAgICAgICAgICAgIGRlc2lnbmF0b3IgdXNpbmcgRGF0ZUZvcm1hdFV0aWxzLklTT19EQVRFVElNRV9USU1FX1pPTkVfRk9STUFUCm8gTEFORy0xMDM1OiBKYXZhZG9jIGZvciBFcXVhbHNCdWlsZGVyLnJlZmxlY3Rpb25FcXVhbHMoKSBpcyB1bmNsZWFyCm8gTEFORy0xMDAxOiBJU08gODYwMSBtaXNzcGVsbGVkIHRocm91Z2hvdXQgdGhlIEphdmFkb2NzLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTA4ODogRmFzdERhdGVQYXJzZXIgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUKbyBMQU5HLTk5NTogIEZpeCBidWcgd2l0aCBzdHJpcHBpbmcgc3BhY2VzIG9uIGxhc3QgbGluZSBpbiBXb3JkVXRpbHMud3JhcCgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJleSBLaG9ibnlhLgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy0xMTAyOiBNYWtlIGxvZ2ljIGZvciBjb21wYXJpbmcgT1MgdmVyc2lvbnMgaW4gU3lzdGVtVXRpbHMgc21hcnRlcgpvIExBTkctMTA5MTogU2h1dGRvd24gdGhyZWFkIHBvb2xzIGluIHRlc3QgY2FzZXMuIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMTAxOiBGYXN0RGF0ZVBhcnNlciBhbmQgRmFzdERhdGVQcmludGVyIHN1cHBvcnQgJ1gnIGZvcm1hdApvIExBTkctMTEwMDogQXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB1c2luZyBkYXRlIGZvcm1hdGluZyB0byBTdHJpbmdCdWZmZXIuCiAgICAgICAgICAgICBUaGFua3MgdG8gbWJyYWNoZXIuCm8gTEFORy05MzU6ICBQb3NzaWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiBzdHJpbmcgZXNjYXBlIGZ1bmN0aW9ucy4KICAgICAgICAgICAgIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UsIFRob21hcyBOZWlkaGFydC4KbyBMQU5HLTEwOTg6IEF2b2lkIFN0cmluZyBhbGxvY2F0aW9uIGluIFN0ckJ1aWxkZXIuYXBwZW5kKENoYXJTZXF1ZW5jZSkuIFRoYW5rcwogICAgICAgICAgICAgdG8gTWlraGFpbCBNYXp1cnNraXksIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTEwOTg6IFVwZGF0ZSBtYXZlbi1jaGVja3N0eWxlLXBsdWdpbiB0byAyLjE0LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTEwOTc6IFVwZGF0ZSBvcmcuZWFzeW1vY2s6ZWFzeW1vY2sgdG8gMy4zLjEuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NjogVXBkYXRlIG1hdmVuLXBtZC1wbHVnaW4gdG8gMy40LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTEwOTU6IFVwZGF0ZSBtYXZlbi1hbnRydW4tcGx1Z2luIHRvIDEuOC4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy04Nzc6ICBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIFN0cmluZ0VzY2FwZVV0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTEwNzE6IEZpeCB3cm9uZyBleGFtcGxlcyBpbiBKYXZhZG9jIG9mCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5yZXBsYWNlRWFjaFJlcGVhdGVkbHkoLi4uKSwKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnJlcGxhY2VFYWNoKC4uLikgVGhhbmtzIHRvIEFybm8gTm9vcmRvdmVyLgpvIExBTkctODI3OiAgQ29tcGFyZVRvQnVpbGRlcidzIGRvYyBkb2Vzbid0IHNwZWNpZnkgcHJlY2VkZW5jZSBvZiBmaWVsZHMgaXQKICAgICAgICAgICAgIHVzZXMgaW4gcGVyZm9ybWluZyBjb21wYXJpc29ucwpvIExBTkctMTAyMDogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBub3JtYWxpemUgc3BhY2UuIFRoYW5rcyB0byBMaWJvciBPbmRydXNlay4KbyBMQU5HLTEwMjc6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscyNpc0phdmFWZXJzaW9uQXRMZWFzdCBzaG91bGQKICAgICAgICAgICAgIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQKbyBMQU5HLTEwMjY6IEJyaW5nIHN0YXRpYyBtZXRob2QgcmVmZXJlbmNlcyBpbiBTdHJpbmdVdGlscyB0byBjb25zaXN0ZW50IHN0eWxlLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXggWXVyc2hhLgpvIExBTkctMTAxNzogVXNlIG5vbi1BU0NJSSBkaWdpdHMgaW4gSmF2YWRvYyBleGFtcGxlcyBmb3IKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzTnVtZXJpYy4gVGhhbmtzIHRvIENocmlzdG9waCBTY2huZWVnYW5zLgpvIExBTkctMTAwODogQ2hhbmdlIG1pbi9tYXggbWV0aG9kcyBpbiBOdW1iZXJVdGlscy9JRUVFNzU0clV0aWxzIGZyb20gYXJyYXkKICAgICAgICAgICAgIGlucHV0IHBhcmFtZXRlcnMgdG8gdmFyYXJncy4gVGhhbmtzIHRvIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTAwNjogQWRkIHdyYXAgKHdpdGggU3RyaW5nIG9yIGNoYXIpIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTAwNTogRXh0ZW5kIER1cmF0aW9uRm9ybWF0VXRpbHMjZm9ybWF0RHVyYXRpb25JU08gZGVmYXVsdCBwYXR0ZXJuIHRvCiAgICAgICAgICAgICBtYXRjaCAjZm9ybWF0RHVyYXRpb25ITVMuIFRoYW5rcyB0byBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwMDc6IEZpeGluZyBOdW1iZXJVdGlscyBKQVZBRG9jIGNvbW1lbnRzIGZvciBtYXggbWV0aG9kcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTczMTogIEJldHRlciBKYXZhZG9jIGZvciBCaXRGaWVsZCBjbGFzcwpvIExBTkctMTAwNDogRHVyYXRpb25Gb3JtYXRVdGlscyNmb3JtYXREdXJhdGlvbkhNUyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAogICAgICAgICAgICAgY29ycmVzcG9uZCB0byBKYXZhZG9jIGFuZCB2aWNlIHZlcnNhLiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMDAzOiBEdXJhdGlvbkZvcm1hdFV0aWxzIGFyZSBub3QgYWJsZSB0byBoYW5kbGUgbmVnYXRpdmUKICAgICAgICAgICAgIGR1cmF0aW9ucy9wZXJpb2RzCm8gTEFORy05OTg6ICBKYXZhZG9jIGlzIG5vdCBjbGVhciBvbiBwcmVmZXJyZWQgcGF0dGVybiB0byBpbnN0YW50aWF0ZQogICAgICAgICAgICAgRmFzdERhdGVQYXJzZXIgLyBGYXN0RGF0ZVByaW50ZXIKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMy4yCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy05ODk6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLklTX0pBVkFfMV84CgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTk5MjogIE51bWJlclV0aWxzI2lzTnVtYmVyKCkgcmV0dXJucyBmYWxzZSBmb3IgIjAuMCIsICIwLjQ3OTAiLCBldCBhbAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4zLjEKCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctOTg3OiAgRGF0ZVV0aWxzLmdldEZyYWdtZW50SW5EYXlzKERhdGUsIENhbGVuZGFyLk1PTlRIKSByZXR1cm5zIHdyb25nCiAgICAgICAgICAgICBkYXlzCm8gTEFORy05ODM6ICBEdXJhdGlvbkZvcm1hdFV0aWxzIGRvZXMgbm90IGRlc2NyaWJlIGZvcm1hdCBzdHJpbmcgZnVsbHkKbyBMQU5HLTk4MTogIER1cmF0aW9uRm9ybWF0VXRpbHMjbGV4eCBkb2VzIG5vdCBkZXRlY3QgdW5tYXRjaGVkIHF1b3RlIGNoYXIKbyBMQU5HLTk4NDogIER1cmF0aW9uRm9ybWF0VXRpbHMgZG9lcyBub3QgaGFuZGxlIGxhcmdlIGR1cmF0aW9ucyBjb3JyZWN0bHkKbyBMQU5HLTk4MjogIER1cmF0aW9uRm9ybWF0VXRpbHMuZm9ybWF0RHVyYXRpb24oNjE5OTksICJzLlNTU1MiKSAtIG1zIGZpZWxkCiAgICAgICAgICAgICBzaXplIHNob3VsZCBiZSA0IGRpZ2l0cwpvIExBTkctOTc4OiAgRmFpbGluZyB0ZXN0cyB3aXRoIEphdmEgOCBiMTI4Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjMKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTk1NTogIEFkZCBtZXRob2RzIGZvciByZW1vdmluZyBhbGwgaW52YWxpZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0bwogICAgICAgICAgICAgWE1MIDEuMCBhbmQgWE1MIDEuMSBpbiBhbiBpbnB1dCBzdHJpbmcgdG8gU3RyaW5nRXNjYXBlVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWRhbSBIb29wZXIuCm8gTEFORy05NzA6ICBBZGQgQVBJcyBNdXRhYmxlQm9vbGVhbiBzZXRUcnVlKCkgYW5kIHNldEZhbHNlKCkKbyBMQU5HLTk2MjogIEFkZCBTZXJpYWxpemF0aW9uVXRpbHMucm91bmR0cmlwKFQgZXh0ZW5kcyBTZXJpYWxpemFibGUpIHRvCiAgICAgICAgICAgICBzZXJpYWxpemUgdGhlbiBkZXNlcmlhbGl6ZQpvIExBTkctNjM3OiAgVGhlcmUgc2hvdWxkIGJlIGEgRGlmZmVyZW5jZUJ1aWxkZXIgd2l0aCBhCiAgICAgICAgICAgICBSZWZsZWN0aW9uRGlmZmVyZW5jZUJ1aWxkZXIgaW1wbGVtZW50YXRpb24KbyBMQU5HLTk0NDogIEFkZCB0aGUgSmFyby1XaW5rbGVyIHN0cmluZyBkaXN0YW5jZSBhbGdvcml0aG0gdG8gU3RyaW5nVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gUmVraGEgSm9zaGkuCm8gTEFORy00MTc6ICBOZXcgY2xhc3MgQ2xhc3NQYXRoVXRpbHMgd2l0aCBtZXRob2RzIGZvciB0dXJuaW5nIEZRTiBpbnRvCiAgICAgICAgICAgICByZXNvdXJjZSBwYXRoCm8gTEFORy04MzQ6ICBWYWxpZGF0ZTogYWRkIGluY2x1c2l2ZUJldHdlZW4gYW5kIGV4Y2x1c2l2ZUJldHdlZW4gb3ZlcmxvYWRzCiAgICAgICAgICAgICBmb3IgcHJpbWl0aXZlIHR5cGVzCm8gTEFORy05MDA6ICBOZXcgUmFuZG9tVXRpbHMgY2xhc3MuIFRoYW5rcyB0byBEdW5jYW4gSm9uZXMuCm8gTEFORy05NjY6ICBBZGQgSUJNIE9TLzQwMCBkZXRlY3Rpb24KCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctNjIxOiAgUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlci50b1N0cmluZyBkb2VzIG5vdCBkZWJ1ZyAzcmQgcGFydHkgb2JqZWN0CiAgICAgICAgICAgICBmaWVsZHMgd2l0aGluIDNyZCBwYXJ0eSBvYmplY3QuIFRoYW5rcyB0byBQaGlsaXAgSG9kZ2VzLAogICAgICAgICAgICAgVGhvbWFzIE5laWRoYXJ0LgpvIExBTkctOTc3OiAgTnVtZXJpY0VudGl0eUVzY2FwZXIgaW5jb3JyZWN0bHkgZW5jb2RlcyBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQ2hyaXMgS2FyY2hlci4KbyBMQU5HLTk3MzogIE1ha2Ugc29tZSBwcml2YXRlIGZpZWxkcyBmaW5hbApvIExBTkctOTcxOiAgTnVtYmVyVXRpbHMjaXNOdW1iZXIoU3RyaW5nKSBmYWlscyB0byByZWplY3QgaW52YWxpZCBPY3RhbCBudW1iZXJzCm8gTEFORy05NzI6ICBOdW1iZXJVdGlscyNpc051bWJlciBkb2VzIG5vdCBhbGxvdyBmb3IgaGV4IDBYQUJDRApvIExBTkctOTY5OiAgU3RyaW5nVXRpbHMudG9FbmNvZGVkU3RyaW5nKGJ5dGVbXSwgQ2hhcnNldCkgbmVlZGxlc3NseSB0aHJvd3MKICAgICAgICAgICAgIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uIFRoYW5rcyB0byBNYXR0IEJpc2hvcC4KbyBMQU5HLTk0NjogIENvbnN0YW50SW5pdGlhbGl6ZXJUZXN0IGZhaWxzIHdoZW4gYnVpbGRpbmcgd2l0aCBJQk0gSkRLIDcKbyBMQU5HLTk1NDogIHVuY2F1Z2h0IFBhdHRlcm5TeW50YXhFeGNlcHRpb24gaW4gRmFzdERhdGVGb3JtYXQgb24gQW5kcm9pZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIEtlcHBsZXIuCm8gTEFORy05MzY6ICBTdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlIHdpdGggdG9vIGJpZyBvZiBhIHRocmVzaG9sZAogICAgICAgICAgICAgcmV0dXJucyB3cm9uZyByZXN1bHQuIFRoYW5rcyB0byBZYW5pdiBLdW5kYSwgRWxpIExpbmRzZXkuCm8gTEFORy05NDM6ICBUZXN0IER1cmF0aW9uRm9ybWF0VXRpbHNUZXN0LnRlc3RFZGdlRHVyYXRpb24gZmFpbHMgaW4KICAgICAgICAgICAgIEpESyAxLjYsIDEuNyBhbmQgMS44LCBCUlNUIHRpbWUgem9uZQpvIExBTkctNjEzOiAgQ29uc3RydWN0b3JVdGlscy5nZXRBY2Nlc3NpYmxlQ29uc3RydWN0b3IoKSBEb2VzIE5vdCBDaGVjayB0aGUKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHkgb2YgRW5jbG9zaW5nIENsYXNzZXMKbyBMQU5HLTk1MTogIEZyYWdtZW50cyBhcmUgd3JvbmcgYnkgMSBkYXkgd2hlbiB1c2luZyBmcmFnbWVudCBZRUFSIG9yIE1PTlRILgogICAgICAgICAgICAgVGhhbmtzIHRvIFNlYmFzdGlhbiBH9nR6LgpvIExBTkctOTUwOiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIHR3byBkaWdpdCB5ZWFyIHBhcnNpbmcgbGlrZQogICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdApvIExBTkctOTQ5OiAgRmFzdERhdGVQYXJzZXJUZXN0LnRlc3RQYXJzZXMgZG9lcyBub3QgdGVzdCBGYXN0RGF0ZVBhcnNlcgpvIExBTkctOTE1OiAgV3JvbmcgbG9jYWxlIGhhbmRsaW5nIGluIExvY2FsZVV0aWxzLnRvTG9jYWxlKCkuCiAgICAgICAgICAgICBUaGFua3MgdG8gU2VyZ2lvIEZlcm7hbmRlei4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctOTYxOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnJlZmxlY3QuRmllbGRVdGlscy5yZW1vdmVGaW5hbE1vZGlmaWVyKEZpZWxkKQogICAgICAgICAgICAgZG9lcyBub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmCm8gTEFORy05NTg6ICBGYXN0RGF0ZVBhcnNlciBqYXZhZG9jIGluY29ycmVjdGx5IHN0YXRlcyB0aGF0IFNpbXBsZURhdGVGb3JtYXQKICAgICAgICAgICAgIGlzIHVzZWQgaW50ZXJuYWxseQpvIExBTkctOTU2OiAgSW1wcm92ZSBKYXZhZG9jIG9mIFdvcmRVdGlscy53cmFwIG1ldGhvZHMKbyBMQU5HLTkzOTogIE1vdmUgRG9jdW1lbnRhdGlvbiBmcm9tIHVzZXIgZ3VpZGUgdG8gcGFja2FnZS1pbmZvIGZpbGVzCm8gTEFORy05NTM6ICBDb252ZXJ0IHBhY2thZ2UuaHRtbCBmaWxlcyB0byBwYWNrYWdlLWluZm8uamF2YSBmaWxlcwpvIExBTkctOTQwOiAgRml4IGRlcHJlY2F0aW9uIHdhcm5pbmdzCm8gTEFORy04MTk6ICBFbnVtVXRpbHMuZ2VuZXJhdGVCaXRWZWN0b3IgbmVlZHMgYSAiPyBleHRlbmRzIgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yLjEKCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzNzogIEZpeCBtaXNzaW5nIEhhbWNyZXN0IGRlcGVuZGVuY3kgaW4gQW50IEJ1aWxkCm8gTEFORy05NDE6ICBUZXN0IGZhaWx1cmUgaW4gTG9jYWxlVXRpbHNUZXN0IHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOApvIExBTkctOTQyOiAgVGVzdCBmYWlsdXJlIGluIEZhc3REYXRlUGFyc2VyVGVzdCBhbmQgRmFzdERhdGVGb3JtYXRfUGFyc2VyVGVzdAogICAgICAgICAgICAgd2hlbiBidWlsZGluZyB3aXRoIEpESzguIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEsCiAgICAgICAgICAgICBIZW5yaSBZYW5kZWxsLgpvIExBTkctOTM4OiAgQnVpbGQgZmFpbHMgd2l0aCB0ZXN0IGZhaWx1cmVzIHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yCgpDT01QQVRJQklMSVRZIFdJVEggMy4xCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZWxlYXNlIGludHJvZHVjZXMgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluCm9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkZhc3REYXRlRm9ybWF0OgpvIE1ldGhvZCAncHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IHBhcnNlUGF0dGVybigpJyBoYXMgYmVlbiByZW1vdmVkCm8gTWV0aG9kICdwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBwYXJzZVRva2VuKGphdmEubGFuZy5TdHJpbmcsIGludFtdKScgaGFzCiAgYmVlbiByZW1vdmVkCm8gTWV0aG9kICdwcm90ZWN0ZWQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVGb3JtYXQkTnVtYmVyUnVsZQogIHNlbGVjdE51bWJlclJ1bGUoaW50LCBpbnQpJyBoYXMgYmVlbiByZW1vdmVkCgpUaGVzZSBjaGFuZ2VzIHdlcmUgdGhlIHJlc3VsdCBvZiBbTEFORy00NjJdLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBjaGFuZ2UKd2lsbCBub3QgYnJlYWsgY2xpZW50cyBhcyBDaGFybGVzIEhvbnRvbiBwb2ludGVkIG91dCBvbiAyNS9KYW4vMTI6CiIKIDEuIE1ldGhvZHMgIkZhc3REYXRlRm9ybWF0JE51bWJlclJ1bGUgc2VsZWN0TnVtYmVyUnVsZShpbnQsIGludCkiIGFuZAogICAgIkxpc3Q8UnVsZT4gcGFyc2VQYXR0ZXJuKCkiIGNvdWxkbid0IGhhdmUgYmVlbiBvdmVycmlkZGVuIGJlY2F1c2UKICAgIE51bWJlclJ1bGUgYW5kIFJ1bGUgd2VyZSBwcml2YXRlIHRvIEZhc3REYXRlRm9ybWF0LgogMi4gRHVlIHRvIHRoZSBmYWN0b3J5IHBhdHRlcm4gdXNlZCwgaXQncyB1bmxpa2VseSBvdGhlciB0d28gbWV0aG9kcyB3b3VsZCBoYXZlCiAgICBiZWVuIG92ZXJyaWRkZW4uCiAzLiBUaGUgZm91ciBtZXRob2RzIGFyZSBoaWdobHkgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuIEkgY29uc2lkZXIgaXQgYQogICAgbWlzdGFrZSB0aGF0IHRoZSBtZXRob2RzIHdlcmUgZXhwb3NlZC4KIgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTQ2Mi4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTkzNDogIEFkZCByZW1vdmVGaW5hbE1vZGlmaWVyIHRvIEZpZWxkVXRpbHMKbyBMQU5HLTg2MzogIE1ldGhvZCByZXR1cm5zIG51bWJlciBvZiBpbmhlcml0YW5jZSBob3BzIGJldHdlZW4gcGFyZW50IGFuZAogICAgICAgICAgICAgc3ViY2xhc3MuIFRoYW5rcyB0byBEYW5lZWwgUy4gWWFpdHNrb3YuCm8gTEFORy03NzQ6ICBBZGRlZCBpc1N0YXJ0ZWQsIGlzU3VzcGVuZGVkIGFuZCBpc1N0b3BwZWQgdG8gU3RvcFdhdGNoLgogICAgICAgICAgICAgVGhhbmtzIHRvIEVyaGFuIEJhZ2RlbWlyLgpvIExBTkctODQ4OiAgQWRkZWQgU3RyaW5nVXRpbHMuaXNCbGFuay9pc0VtcHR5IENoYXJTZXF1ZW5jZS4uLiBtZXRob2RzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXhhbmRlciBNdXRobWFubi4KbyBMQU5HLTkyNjogIEFkZGVkIEFycmF5VXRpbHMucmV2ZXJzZShhcnJheSwgZnJvbSwgdG8pIG1ldGhvZHMuCm8gTEFORy03OTU6ICBTdHJpbmdVdGlscy50b1N0cmluZyhieXRlW10sIFN0cmluZykgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYSBuZXcKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSwgQ2hhclNldCkuIFRoYW5rcyB0byBBYXJvbiBEaWd1bGxhLgpvIExBTkctODkzOiAgU3RyU3Vic3RpdHV0b3Igbm93IHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMuCiAgICAgICAgICAgICBUaGFua3MgdG8gV29vbnNhbiBLby4KbyBMQU5HLTkxMzogIEFkZGluZyAuZ2l0aWdub3JlIHRvIGNvbW1vbnMtbGFuZy4gVGhhbmtzIHRvIEFsbG9uIE11cmVpbmlrLgpvIExBTkctODM3OiAgQWRkIE9iamVjdFV0aWxzLnRvSWRlbnRpdHlTdHJpbmcgbWV0aG9kcyB0aGF0IHN1cHBvcnQKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIsIFN0ckJ1aWxkZXIsIGFuZCBBcHBlbmRhYmxlLgpvIExBTkctODg2OiAgQWRkZWQgQ2hhclNldFV0aWxzLmNvbnRhaW5zQW55KFN0cmluZywgU3RyaW5nKS4KbyBMQU5HLTc5NzogIEFkZGVkIGVzY2FwZS91bmVzY2FwZUpzb24gdG8gU3RyaW5nRXNjYXBlVXRpbHMuCm8gTEFORy04NzU6ICBBZGRlZCBhcHBlbmRJZk1pc3NpbmcgYW5kIHByZXBlbmRJZk1pc3NpbmcgbWV0aG9kcyB0byBTdHJpbmdVdGlscy4KbyBMQU5HLTg3MDogIEFkZCBTdHJpbmdVdGlscy5MRiBhbmQgU3RyaW5nVXRpbHMuQ1IgdmFsdWVzLgpvIExBTkctODczOiAgQWRkIEZpZWxkVXRpbHMgZ2V0QWxsRmllbGRzKCkgdG8gcmV0dXJuIGFsbCB0aGUgZmllbGRzIGRlZmluZWQgaW4KICAgICAgICAgICAgIHRoZSBnaXZlbiBjbGFzcyBhbmQgc3VwZXIgY2xhc3Nlcy4KbyBMQU5HLTgzNTogIFN0ckJ1aWxkZXIgc2hvdWxkIHN1cHBvcnQgU3RyaW5nQnVpbGRlciBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIuCm8gTEFORy04NTc6ICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIENoYXJTZXF1ZW5jZVRyYW5zbGF0b3IuCm8gTEFORy04NTY6ICBDb2RlIHJlZmFjdG9yaW5nIGluIE51bWJlclV0aWxzLgpvIExBTkctODU1OiAgTnVtYmVyVXRpbHMjY3JlYXRlQmlnSW50ZWdlciBkb2VzIG5vdCBhbGxvdyBmb3IgaGV4IGFuZCBvY3RhbAogICAgICAgICAgICAgbnVtYmVycy4KbyBMQU5HLTg1NDogIE51bWJlclV0aWxzI2NyZWF0ZU51bWJlciAtIGRvZXMgbm90IGFsbG93IGZvciBoZXggbnVtYmVycyB0byBiZQogICAgICAgICAgICAgbGFyZ2VyIHRoYW4gTG9uZy4KbyBMQU5HLTg1MzogIFN0cmluZ1V0aWxzIGpvaW4gQVBJcyBmb3IgcHJpbWl0aXZlcy4KbyBMQU5HLTg0MTogIEFkZCBTdHJpbmdVdGlscyBBUEkgdG8gY2FsbCBTdHJpbmcucmVwbGFjZUFsbCBpbiBET1RBTEwgYS5rLmEuCiAgICAgICAgICAgICBzaW5nbGUtbGluZSBtb2RlLgpvIExBTkctODI1OiAgQ3JlYXRlIFN0ckJ1aWxkZXIgQVBJcyBzaW1pbGFyIHRvCiAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KFN0cmluZywgT2JqZWN0Li4uKS4KbyBMQU5HLTY3NTogIEFkZCBUcmlwbGUgY2xhc3MgKHRlcm5hcnkgdmVyc2lvbiBvZiBQYWlyKS4KbyBMQU5HLTQ2MjogIEZhc3REYXRlRm9ybWF0IHN1cHBvcnRzIHBhcnNlIG1ldGhvZHMuCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy05MzI6ICBTcGVsbGluZyBmaXhlcy4gVGhhbmtzIHRvIFZpbGxlIFNreXR05C4KbyBMQU5HLTkyOTogIE9jdGFsVW5lc2NhcGVyIHRyaWVkIHRvIHBhcnNlIGFsbCBvZiBcMjc5LgpvIExBTkctOTI4OiAgT2N0YWxVbmVzY2FwZXIgaGFkIGJ1Z3Mgd2hlbiBwYXJzaW5nIG9jdGFscyBzdGFydGluZyB3aXRoIGEgemVyby4KbyBMQU5HLTkwNTogIEVxdWFsc0J1aWxkZXIgcmV0dXJuZWQgdHJ1ZSB3aGVuIGNvbXBhcmluZyBhcnJheXMsIGV2ZW4gd2hlbiB0aGUKICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSBkaWZmZXJlbnQuCm8gTEFORy05MTc6ICBGaXhlZCBleGNlcHRpb24gd2hlbiBjb21iaW5pbmcgY3VzdG9tIGFuZCBjaG9pY2UgZm9ybWF0IGluCiAgICAgICAgICAgICBFeHRlbmRlZE1lc3NhZ2VGb3JtYXQuIFRoYW5rcyB0byBBcm5lIEJ1cm1laXN0ZXIuCm8gTEFORy05MDI6ICBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20gamF2YWRvYyB3YXMgaW5jb3JyZWN0bHkgcHJvbWlzaW5nIGxldHRlcnMKICAgICAgICAgICAgIGFuZCBudW1iZXJzIHdvdWxkLCBhcyBvcHBvc2VkIHRvIG1heSwgYXBwZWFyICBJc3N1ZTouIFRoYW5rcyB0bwogICAgICAgICAgICAgQW5kcnplaiBXaW5uaWNraS4KbyBMQU5HLTkyMTogIEJvb2xlYW5VdGlscy54b3IoYm9vbGVhbi4uLikgcHJvZHVjZXMgd3JvbmcgcmVzdWx0cy4KbyBMQU5HLTg5NjogIEJvb2xlYW5VdGlscy50b0Jvb2xlYW4oU3RyaW5nIHN0cikgamF2YWRvYyBpcyBub3QgdXBkYXRlZC4gVGhhbmtzCiAgICAgICAgICAgICB0byBNYXJrIEJyeWFuIFl1LgpvIExBTkctODc5OiAgTG9jYWxlVXRpbHMgdGVzdCBmYWlscyB3aXRoIG5ldyBMb2NhbGUgImphX0pQX0pQXyN1LWNhLWphcGFuZXNlIgogICAgICAgICAgICAgb2YgSkRLNy4KbyBMQU5HLTgzNjogIFN0clN1YnN0aXR1dG9yIGRvZXMgbm90IHN1cHBvcnQgU3RyaW5nQnVpbGRlciBvciBDaGFyU2VxdWVuY2UuCiAgICAgICAgICAgICBUaGFua3MgdG8gQXJuYXVkIEJydW5ldC4KbyBMQU5HLTY5MzogIE1ldGhvZCBjcmVhdGVOdW1iZXIgZnJvbSBOdW1iZXJVdGlscyBkb2Vzbid0IHdvcmsgZm9yIGZsb2F0aW5nCiAgICAgICAgICAgICBwb2ludCBudW1iZXJzIG90aGVyIHRoYW4gRmxvYXQgIElzc3VlOiBMQU5HLTY5My4gVGhhbmtzIHRvCiAgICAgICAgICAgICBDYWx2aW4gRWNob2xzLgpvIExBTkctODg3OiAgRmFzdERhdGVGb3JtYXQgZG9lcyBub3QgdXNlIHRoZSBsb2NhbGUgc3BlY2lmaWMgY2FjaGUgY29ycmVjdGx5LgpvIExBTkctNzU0OiAgQ2xhc3NVdGlscy5nZXRTaG9ydE5hbWUoU3RyaW5nKSB3aWxsIG5vdyBvbmx5IGRvIGEgcmV2ZXJzZSBsb29rdXAKICAgICAgICAgICAgIGZvciBhcnJheSB0eXBlcy4KbyBMQU5HLTg4MTogIE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcigpIEphdmFkb2Mgc2F5cyBpdCBkb2VzIG5vdCB3b3JrIGZvciBvY3RhbAogICAgICAgICAgICAgbnVtYmVycy4KbyBMQU5HLTg2NTogIExvY2FsZVV0aWxzLnRvTG9jYWxlIGRvZXMgbm90IHBhcnNlIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCBhbgogICAgICAgICAgICAgdW5kZXJzY29yZS4KbyBMQU5HLTg1ODogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEoKSBhbmQgZXNjYXBlRWNtYVNjcmlwdCgpIGRvIG5vdAogICAgICAgICAgICAgb3V0cHV0IHRoZSBlc2NhcGVkIHN1cnJvZ2F0ZSBwYWlycyB0aGF0IGFyZSBKYXZhIHBhcnNhYmxlLgpvIExBTkctODQ5OiAgRmFzdERhdGVGb3JtYXQgYW5kIEZhc3REYXRlUHJpbnRlciBnZW5lcmF0ZXMgRGF0ZSBvYmplY3RzCiAgICAgICAgICAgICB3YXN0ZWZ1bGx5LgpvIExBTkctODQ1OiAgU3BlbGxpbmcgZml4ZXMuCm8gTEFORy04NDQ6ICBGaXggZXhhbXBsZXMgY29udGFpbmVkIGluIGphdmFkb2Mgb2YgU3RyaW5nVXRpbHMuY2VudGVyIG1ldGhvZHMuCm8gTEFORy04MzI6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdW50ZXJtaW5hdGVkIHF1b3RlcyBjb3JyZWN0bHkuCm8gTEFORy04MzE6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgd2hpdGUtc3BhY2UgcHJvcGVybHkuCm8gTEFORy04MzA6ICBGYXN0RGF0ZVBhcnNlciBjb3VsZCB1c2UgXFEgXEUgdG8gcXVvdGUgcmVnZXhlcy4KbyBMQU5HLTgyODogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tR3JlZ29yaWFuIGNhbGVuZGFycyBwcm9wZXJseS4KbyBMQU5HLTgyNjogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgZGlnaXRzIGNvcnJlY3RseS4KbyBMQU5HLTgyMjogIE51bWJlclV0aWxzI2NyZWF0ZU51bWJlciAtIGJhZCBiZWhhdmlvciBmb3IgbGVhZGluZyAiLS0iLgpvIExBTkctODE4OiAgRmFzdERhdGVGb3JtYXQncyAieiIgcGF0dGVybiBkb2VzIG5vdCByZXNwZWN0IHRpbWV6b25lIG9mIENhbGVuZGFyCiAgICAgICAgICAgICBpbnN0YW5jZXMgcGFzc2VkIHRvIGZvcm1hdCgpLgpvIExBTkctODE3OiAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5JU19PU19XSU5ET1dTXzguCm8gTEFORy04MTM6ICBTdHJpbmdVdGlscy5lcXVhbHNJZ25vcmVDYXNlIGRvZXNuJ3QgY2hlY2sgc3RyaW5nIHJlZmVyZW5jZQogICAgICAgICAgICAgZXF1YWxpdHkuCm8gTEFORy04MTA6ICBTdHJpbmdVdGlscy5qb2luKCkgZW5kSW5kZXgsIGJ1Z2dlZCBmb3IgbG9vcC4KbyBMQU5HLTgwNzogIFJhbmRvbVN0cmluZ1V0aWxzIHRocm93cyBjb25mdXNpbmcgSUFFIHdoZW4gZW5kIDw9IHN0YXJ0LgpvIExBTkctODA1OiAgUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tKGNvdW50LCAwLCAwLCBmYWxzZSwgZmFsc2UsIHVuaXZlcnNlLAogICAgICAgICAgICAgcmFuZG9tKSBhbHdheXMgdGhyb3dzIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCm8gTEFORy04MDI6ICBMb2NhbGVVdGlscyAtIHVubmVjZXNzYXJ5IHJlY3Vyc2l2ZSBjYWxsIGluIFN5bmNBdm9pZCBjbGFzcy4KbyBMQU5HLTgwMDogIEphdmFkb2MgYnVnIGluIERhdGVVdGlscyNjZWlsaW5nIGZvciBDYWxlbmRhciBhbmQgT2JqZWN0IHZlcnNpb25zLgpvIExBTkctNzg4OiAgU2VyaWFsaXphdGlvblV0aWxzIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHdoZW4gY2xvbmluZwogICAgICAgICAgICAgcHJpbWl0aXZlIGNsYXNzZXMuCm8gTEFORy03ODY6ICBTdHJpbmdVdGlscyBlcXVhbHMoKSByZWxpZXMgb24gdW5kZWZpbmVkIGJlaGF2aW9yLgpvIExBTkctNzgzOiAgRG9jdW1lbnRhdGlvbiBidWc6IFN0cmluZ1V0aWxzLnNwbGl0LgpvIExBTkctNzc3OiAgamFyIGNvbnRhaW5zIHZlbG9jaXR5IHRlbXBsYXRlIG9mIHJlbGVhc2Ugbm90ZXMuCm8gTEFORy03NzY6ICBUeXBlVXRpbHNUZXN0IGNvbnRhaW5zIGluY29ycmVjdCB0eXBlIGFzc2lnbmFiaWxpdHkgYXNzZXJ0aW9uLgpvIExBTkctNzc1OiAgVHlwZVV0aWxzLmdldFR5cGVBcmd1bWVudHMoKSBtaXNzZXMgdHlwZSBhcmd1bWVudHMgZm9yCiAgICAgICAgICAgICBwYXJ0aWFsbHktYXNzaWduZWQgY2xhc3Nlcy4KbyBMQU5HLTc3MzogIEltbXV0YWJsZVBhaXIgZG9jIGNvbnRhaW5zIG5vbnNlbnNlIHRleHQuCm8gTEFORy03NzI6ICBDbGFzc1V0aWxzLlBBQ0tBR0VfU0VQQVJBVE9SIEphdmFkb2MgY29udGFpbnMgZ2FyYmFnZSB0ZXh0LgpvIExBTkctNzY1OiAgRXZlbnRMaXN0ZW5lclN1cHBvcnQuUHJveHlJbnZvY2F0aW9uSGFuZGxlciBubyBsb25nZXIgZGVmaW5lcwogICAgICAgICAgICAgc2VyaWFsVmVyc2lvblVJRC4KbyBMQU5HLTc2NDogIFN0ckJ1aWxkZXIgaXMgbm93IHNlcmlhbGl6YWJsZS4KbyBMQU5HLTc2MTogIEZpeCBKYXZhZG9jIEFudCB3YXJuaW5ncy4KbyBMQU5HLTc0NzogIE51bWJlclV0aWxzIGRvZXMgbm90IGhhbmRsZSBMb25nIEhleCBudW1iZXJzLgpvIExBTkctNzQzOiAgSmF2YWRvYyBidWcgaW4gc3RhdGljIGlubmVyIGNsYXNzIERhdGVJdGVyYXRvci4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctOTMxOiAgTWlzbGVhZGluZyBKYXZhZG9jIGNvbW1lbnQgaW4gU3RyQnVpbGRlclJlYWRlciBjbGFzcy4gVGhhbmtzCiAgICAgICAgICAgICB0byBDaHJpc3RvcGggU2NobmVlZ2Fucy4KbyBMQU5HLTkxMDogIFN0cmluZ1V0aWxzLm5vcm1hbGl6ZVNwYWNlIG5vdyBoYW5kbGVzIG5vbi1icmVha2luZyBzcGFjZXMKICAgICAgICAgICAgIChVbmljb2RlIDAwQTApLiBUaGFua3MgdG8gVGltdXIgWWFyb3NoLgpvIExBTkctODA0OiAgUmVkdW5kYW50IGNoZWNrIGZvciB6ZXJvIGluIEhhc2hDb2RlQnVpbGRlciBjdG9yLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFsbG9uIE11cmVpbmlrLgpvIExBTkctODg0OiAgU2ltcGxpZnkgRmFzdERhdGVGb3JtYXQ7IGVsaW1pbmF0ZSBib3hpbmcuCm8gTEFORy04ODI6ICBMb29rdXBUcmFuc2xhdG9yIG5vdyB3b3JrcyB3aXRoIGltcGxlbWVudGF0aW9ucyBvZiBDaGFyU2VxdWVuY2UKICAgICAgICAgICAgIG90aGVyIHRoYW4gU3RyaW5nLgpvIExBTkctODQ2OiAgUHJvdmlkZSBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzIHdpdGggYSBwcm9wZXIgZ3JlZW4KICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgaW5lZmZpY2llbnRseSBjb252ZXJ0aW5nIHRvIFN0cmluZ3MuCm8gTEFORy04Mzk6ICBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIG1ldGhvZHMgdXNlIHVubmVjZXNzYXJ5IEhhc2hTZXQuCm8gTEFORy04Mzg6ICBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIG1ldGhvZHMgY2xvbmUgdGVtcG9yYXJ5IGluZGV4IGFycmF5cwogICAgICAgICAgICAgdW5uZWNlc3NhcmlseS4KbyBMQU5HLTc5OTogIERhdGVVdGlscyNwYXJzZURhdGUgdXNlcyBkZWZhdWx0IGxvY2FsZTsgYWRkIExvY2FsZSBzdXBwb3J0LgpvIExBTkctNzk4OiAgVXNlIGdlbmVyaWNzIGluIFNlcmlhbGl6YXRpb25VdGlscy4KCkNIQU5HRVMgV0lUSE9VVCBUSUNLRVQKPT09PT09PT09PT09PT09PT09PT09PT09CgpvIEZpeGVkIFVSTHMgaW4gamF2YWRvYyB0byBwb2ludCB0byBuZXcgb3JhY2xlLmNvbSBwYWdlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4xCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy04MDE6ICBBZGQgQ29udmVyc2lvbiB1dGlsaXR5IHRvIGNvbnZlcnQgYmV0d2VlbiBkYXRhIHR5cGVzIG9uIGJ5dGUgbGV2ZWwKbyBMQU5HLTc2MDogIEFkZCBBUEkgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdIGludHB1dCwgU3RyaW5nIGNoYXJzZXROYW1lKQpvIExBTkctNzU2OiAgQWRkIEFQSXMgQ2xhc3NVdGlscy5pc1ByaW1pdGl2ZVdyYXBwZXIoQ2xhc3M8Pz4pIGFuZAogICAgICAgICAgICAgaXNQcmltaXRpdmVPcldyYXBwZXIoQ2xhc3M8Pz4pCm8gTEFORy02OTU6ICBTeXN0ZW1VdGlscy5JU19PU19VTklYIGRvZXNuJ3QgcmVjb2duaXplIEZyZWVCU0QgYXMgYSBVbml4IHN5c3RlbQoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctNzQ5OiAgSW5jb3JyZWN0IEJ1bmRsZS1TeW1ib2xpY05hbWUgaW4gTWFuaWZlc3QKbyBMQU5HLTc0NjogIE51bWJlclV0aWxzIGRvZXMgbm90IGhhbmRsZSB1cHBlci1jYXNlIGhleDogMFggYW5kIC0wWApvIExBTkctNzQ0OiAgU3RyaW5nVXRpbHMgdGhyb3dzIGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbEV4Y2VwdGlvbiBvbiBHb29nbGUKICAgICAgICAgICAgIEFwcCBFbmdpbmUKbyBMQU5HLTc0MTogIEFudCBidWlsZCBoYXMgd3JvbmcgY29tcG9uZW50Lm5hbWUKbyBMQU5HLTY5ODogIERvY3VtZW50IHRoYXQgdGhlIE11dGFibGUgbnVtYmVycyBkb24ndCB3b3JrIGFzIGV4cGVjdGVkIHdpdGgKICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQKCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctNzU4OiAgQWRkIGFuIGV4YW1wbGUgd2l0aCB3aGl0ZXNwYWNlIGluIFN0cmluZ1V0aWxzLmRlZmF1bHRJZkVtcHR5Cm8gTEFORy03NTI6ICBGaXggY3JlYXRlTG9uZygpIHNvIGl0IGJlaGF2ZXMgbGlrZSBjcmVhdGVJbnRlZ2VyKCkKbyBMQU5HLTc1MTogIEluY2x1ZGUgdGhlIGFjdHVhbCB0eXBlIGluIHRoZSBWYWxpZGF0ZS5pc0luc3RhbmNlIGFuZAogICAgICAgICAgICAgaXNBc3NpZ25hYmxlRnJvbSBleGNlcHRpb24gbWVzc2FnZXMKbyBMQU5HLTc0ODogIERlcHJlY2F0aW5nIGNob21wKFN0cmluZywgU3RyaW5nKQpvIExBTkctNzM2OiAgQ2hhclV0aWxzIHN0YXRpYyBmaW5hbCBhcnJheSBDSEFSX1NUUklORyBpcyBub3QgbmVlZGVkIHRvIGNvbXB1dGUKICAgICAgICAgICAgIENIQVJfU1RSSU5HX0FSUkFZCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjAKCkFERElUSU9OUwo9PT09PT09PT09PQoKbyBMQU5HLTI3NjogIE11dGFibGVCaWdEZWNpbWFsIGFuZCBNdXRhYmxlQmlnSW50ZWdlci4KbyBMQU5HLTI4NTogIFdpc2ggOiBtZXRob2QgdW5hY2NlbnQuCm8gTEFORy0zNTg6ICBPYmplY3RVdGlscy5jb2FsZXNjZS4KbyBMQU5HLTM4NjogIExlZnRPZi9SaWdodE9mTnVtYmVyIGluIFJhbmdlIGNvbnZlbmllbmNlIG1ldGhvZHMgbmVjZXNzYXJ5LgpvIExBTkctNDM1OiAgQWRkIENsYXNzVXRpbHMuaXNBc3NpZ25hYmxlKCkgdmFyaWFudHMgd2l0aCBhdXRvYm94aW5nLgpvIExBTkctNDQ0OiAgU3RyaW5nVXRpbHMuZW1wdHlUb051bGwuCm8gTEFORy00ODI6ICBFbmhhbmNlIFN0clN1YnN0aXR1dG9yIHRvIHN1cHBvcnQgbmVzdGVkICR7dmFyLSR7c3VidnJ9fSBleHBhbnNpb24KbyBMQU5HLTQ4MjogIFN0clN1YnN0aXR1dG9yIG5vdyBzdXBwb3J0cyBzdWJzdGl0dXRpb24gaW4gdmFyaWFibGUgbmFtZXMuCm8gTEFORy00OTY6ICBBIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIExhenkgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KbyBMQU5HLTQ5NzogIEFkZGl0aW9uIG9mIENvbnRleHRlZEV4Y2VwdGlvbiBhbmQgQ29udGV4dGVkUnVudGltZUV4Y2VwdGlvbi4KbyBMQU5HLTQ5ODogIEFkZCBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVUZXh0KCkgbWV0aG9kcy4KbyBMQU5HLTQ5OTogIEFkZCBzdXBwb3J0IGZvciB0aGUgaGFuZGxpbmcgb2YgRXhlY3V0aW9uRXhjZXB0aW9ucy4KbyBMQU5HLTUwMTogIEFkZCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kIGluaXRpYWxpemF0aW9uLgpvIExBTkctNTI5OiAgQWRkIGEgY29uY3VycmVudCBwYWNrYWdlLgpvIExBTkctNTMzOiAgVmFsaWRhdGU6IHN1cHBvcnQgZm9yIHZhbGlkYXRpbmcgYmxhbmsgc3RyaW5ncy4KbyBMQU5HLTUzNzogIEFkZCBBcnJheVV0aWxzLnRvQXJyYXkgdG8gY3JlYXRlIGdlbmVyaWMgYXJyYXlzLgpvIExBTkctNTQ1OiAgQWRkIGFiaWxpdHkgdG8gY3JlYXRlIGEgRnV0dXJlIGZvciBhIGNvbnN0YW50LgpvIExBTkctNTQ2OiAgQWRkIG1ldGhvZHMgdG8gVmFsaWRhdGUgdG8gY2hlY2sgd2hldGhlciB0aGUgaW5kZXggaXMgdmFsaWQgZm9yCiAgICAgICAgICAgICB0aGUgYXJyYXkvbGlzdC9zdHJpbmcuCm8gTEFORy01NTM6ICBBZGQgVHlwZVV0aWxzIGNsYXNzIHRvIHByb3ZpZGUgdXRpbGl0eSBjb2RlIGZvciB3b3JraW5nIHdpdGggZ2VuZXJpYwogICAgICAgICAgICAgdHlwZXMuCm8gTEFORy01NTk6ICBBZGRlZCBpc0Fzc2lnbmFibGVGcm9tIGFuZCBpc0luc3RhbmNlT2YgdmFsaWRhdGlvbiBtZXRob2RzLgpvIExBTkctNTU5OiAgQWRkZWQgdmFsaWRTdGF0ZSB2YWxpZGF0aW9uIG1ldGhvZC4KbyBMQU5HLTU2MDogIE5ldyBUaW1lZFNlbWFwaG9yZSBjbGFzcy4KbyBMQU5HLTU4MjogIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRocmVhZEZhY3RvcnkgaW50ZXJmYWNlLgpvIExBTkctNTg4OiAgQ3JlYXRlIGEgYmFzaWMgUGFpcjxMLCBSPiBjbGFzcy4KbyBMQU5HLTU5NDogIERhdGVVdGlscyBlcXVhbCAmIGNvbXBhcmUgZnVuY3Rpb25zIHVwIHRvIG1vc3Qgc2lnbmlmaWNhbnQgZmllbGQuCm8gTEFORy02MDE6ICBBZGQgQnVpbGRlciBJbnRlcmZhY2UgLyBVcGRhdGUgQnVpbGRlcnMgdG8gSW1wbGVtZW50IEl0LgpvIExBTkctNjA5OiAgU3VwcG9ydCBsYXp5IGluaXRpYWxpemF0aW9uIHVzaW5nIGF0b21pYyB2YXJpYWJsZXMKbyBMQU5HLTYxMDogIEV4dGVuZCBleGNlcHRpb24gaGFuZGxpbmcgaW4gQ29uY3VycmVudFV0aWxzIHRvIHJ1bnRpbWUgZXhjZXB0aW9ucy4KbyBMQU5HLTYxNDogIFN0cmluZ1V0aWxzLmVuZHNXaXRoQW55IG1ldGhvZApvIExBTkctNjQwOiAgQWRkIG5vcm1hbGl6ZVNwYWNlIHRvIFN0cmluZ1V0aWxzCm8gTEFORy02NDQ6ICBQcm92aWRlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIG5ldyBjb25jdXJyZW50IHBhY2thZ2UKbyBMQU5HLTY0OTogIEJvb2xlYW5VdGlscy50b0Jvb2xlYW5PYmplY3QgdG8gc3VwcG9ydCBzaW5nbGUgY2hhcmFjdGVyIGlucHV0Cm8gTEFORy02NTE6ICBBZGQgQW5ub3RhdGlvblV0aWxzCm8gTEFORy02NTM6ICBQcm92aWRlIGEgdmVyeSBiYXNpYyBDb25jdXJyZW50SW5pdGlhbGl6ZXIgaW1wbGVtZW50YXRpb24KbyBMQU5HLTY1NTogIEFkZCBTdHJpbmdVdGlscy5kZWZhdWx0SWZCbGFuaygpCm8gTEFORy02Njc6ICBBZGQgYSBOdWxsLXNhZmUgY29tcGFyZSgpIG1ldGhvZCB0byBPYmplY3RVdGlscwpvIExBTkctNjc2OiAgRG9jdW1lbnRlZCBwb3RlbnRpYWwgTlBFIGlmIGF1dG8tYm94aW5nIG9jY3VycyBmb3Igc29tZSBCb29sZWFuVXRpbHMKICAgICAgICAgICAgIG1ldGhvZHMKbyBMQU5HLTY3ODogIEFkZCBzdXBwb3J0IGZvciBDb25jdXJyZW50TWFwLnB1dElmQWJzZW50KCkKbyBMQU5HLTY5MjogIEFkZCBoYXNoQ29kZU11bHRpIHZhcmFyZ3MgbWV0aG9kCm8gTEFORy02OTc6ICBBZGQgRm9ybWF0dGFibGVVdGlscyBjbGFzcwpvIExBTkctNjg0OiAgTGV2ZW5zaHRlaW4gRGlzdGFuY2UgV2l0aGluIGEgR2l2ZW4gVGhyZXNob2xkCgpSRU1PVkFMUwo9PT09PT09PT09CgpvIExBTkctNDM4OiAgUmVtb3ZlIEBkZXByZWNhdGVkcy4KbyBMQU5HLTQ5MjogIFJlbW92ZSBjb2RlIGhhbmRsZWQgbm93IGJ5IHRoZSBKREsuCm8gTEFORy00OTM6ICBSZW1vdmUgY29kZSB0aGF0IGRvZXMgbm90IGhvbGQgZW5vdWdoIHZhbHVlIHRvIHJlbWFpbi4KbyBMQU5HLTU5MDogIFJlbW92ZSBKREsgMS4yLzEuMyBidWcgaGFuZGxpbmcgaW4KICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmluZGV4T2YoU3RyaW5nLCBTdHJpbmcsIGludCkuCm8gTEFORy02NzM6ICBXb3JkVXRpbHMuYWJicmV2aWF0ZSgpIHJlbW92ZWQKbyBMQU5HLTY5MTogIFJlbW92ZWQgRGF0ZVV0aWxzLlVUQ19USU1FX1pPTkUKCklNUFJPVkVNRU5UUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTI5MDogIEVudW1VdGlscyBmb3IgSkRLIDUuMC4KbyBMQU5HLTMzNjogIEZpbmFsbHkgc3RhcnQgdXNpbmcgZ2VuZXJpY3MuCm8gTEFORy0zNTU6ICBTdHJCdWlsZGVyIHNob3VsZCBpbXBsZW1lbnQgQ2hhclNlcXVlbmNlIGFuZCBBcHBlbmRhYmxlLgpvIExBTkctMzk2OiAgSW52ZXN0aWdhdGUgZm9yIHZhcmFyZyB1c2FnZXMuCm8gTEFORy00MjQ6ICBJbXByb3ZlIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzIGNsYXNzLgpvIExBTkctNDU4OiAgUmVmYWN0b3IgVmFsaWRhdGUuamF2YSB0byBlbGltaW5hdGUgY29kZSByZWR1bmRhbmN5LgpvIExBTkctNDc5OiAgRG9jdW1lbnQgd2hlcmUgaW4gU1ZOIHRydW5rIGlzLgpvIExBTkctNTA0OiAgYnJpbmcgQXJyYXlVdGlscy5pc0VtcHR5IHRvIHRoZSBnZW5lcmljcyB3b3JsZC4KbyBMQU5HLTUwNTogIFJld3JpdGUgU3RyaW5nRXNjYXBlVXRpbHMuCm8gTEFORy01MDc6ICBTdHJpbmdFc2NhcGVVdGlscy51bmVzY2FwZUphdmEgc2hvdWxkIHN1cHBvcnQgXHUrIG5vdGF0aW9uLgpvIExBTkctNTEwOiAgQ29udmVydCBTdHJpbmdVdGlscyBBUEkgdG8gdGFrZSBDaGFyU2VxdWVuY2UuCm8gTEFORy01MTM6ICBCZXR0ZXIgRW51bVV0aWxzLgpvIExBTkctNTI4OiAgTXV0YWJsZSBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYW4gYXBwcm9wcmlhdGVseSB0eXBlZCBNdXRhYmxlCiAgICAgICAgICAgICBpbnRlcmZhY2UuCm8gTEFORy01Mzk6ICBDb21waWxlIGNvbW1vbnMubGFuZyBmb3IgQ0RDIDEuMS9Gb3VuZGF0aW9uIDEuMS4KbyBMQU5HLTU0MDogIE1ha2UgTnVtZXJpY0VudGl0eUVzY2FwZXIgaW1tdXRhYmxlLgpvIExBTkctNTQxOiAgUmVwbGFjZSBTdHJpbmdCdWZmZXIgd2l0aCBTdHJpbmdCdWlsZGVyLgpvIExBTkctNTQ4OiAgVXNlIEl0ZXJhYmxlIG9uIEFQSSBpbnN0ZWFkIG9mIENvbGxlY3Rpb24uCm8gTEFORy01NTE6ICBSZXBsYWNlIFJhbmdlIGNsYXNzZXMgd2l0aCBnZW5lcmljIHZlcnNpb24uCm8gTEFORy01NjI6ICBDaGFuZ2UgTWF2ZW4gZ3JvdXBJZC4KbyBMQU5HLTU2MzogIENoYW5nZSBKYXZhIHBhY2thZ2UgbmFtZS4KbyBMQU5HLTU3MDogIERvIHRoZSB0ZXN0IGNhc2VzIHJlYWxseSBzdGlsbCByZXF1aXJlIG1haW4oKSBhbmQgc3VpdGUoKSBtZXRob2RzPwpvIExBTkctNTc5OiAgQWRkIG5ldyBWYWxpZGF0ZSBtZXRob2RzLgpvIExBTkctNTk5OiAgQ2xhc3NVdGlscy5nZXRDbGFzcygpOiBBbGxvdyBEb3RzIGFzIElubmVyIENsYXNzIFNlcGFyYXRvcnMuCm8gTEFORy02MDU6ICBEZWZhdWx0RXhjZXB0aW9uQ29udGV4dCBvdmVyd3JpdGVzIHZhbHVlcyBpbiByZWN1cnNpdmUgc2l0dWF0aW9ucy4KbyBMQU5HLTY2ODogIENoYW5nZSBPYmplY3RVdGlscyBtaW4oKSAmIG1heCgpIGZ1bmN0aW9ucyB0byB1c2UgdmFyYXJncyByYXRoZXIKICAgICAgICAgICAgIHRoYW4ganVzdCB0d28gcGFyYW1ldGVycwpvIExBTkctNjgxOiAgUHVzaCBkb3duIFdvcmRVdGlscyB0byAidGV4dCIgc3ViLXBhY2thZ2UuCm8gTEFORy03MTE6ICBBZGQgaW5jbHVkZWFudHJ1bnRpbWU9ZmFsc2UgdG8gamF2YWMgdGFyZ2V0cyB0byBxdWVsbCB3YXJuaW5ncyBpbgogICAgICAgICAgICAgYW50IDEuOC4xIGFuZCBiZXR0ZXIgKGFuZCBtb2Rlc3QgcGVyZm9ybWFuY2UgZ2FpbikuCm8gTEFORy03MTM6ICBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIEZpZWxkVXRpbHMgcmVhZCBtZXRob2RzIGFuZCB0d2VhawogICAgICAgICAgICAgamF2YWRvYy4KbyBMQU5HLTcxODogIGJ1aWxkLnhtbCBKYXZhIDEuNSsgdXBkYXRlcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTExOiAgIERlcGVuZCBvbiBKREsgMS41Ky4KbyBMQU5HLTMwMjogIFN0ckJ1aWxkZXIgZG9lcyBub3QgaW1wbGVtZW50IGNsb25lKCkuCm8gTEFORy0zMzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sKCkgZXNjYXBlcyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBsaWtlCiAgICAgICAgICAgICBDaGluZXNlLCBKYXBhbmVzZSwgZXRjLgpvIExBTkctMzY5OiAgRXhjZXB0aW9uVXRpbHMgbm90IHRocmVhZC1zYWZlLgpvIExBTkctNDE4OiAgSmF2YWRvYyBpbmNvcnJlY3QgZm9yIFN0cmluZ1V0aWxzLmVuZHNXaXRoSWdub3JlQ2FzZS4KbyBMQU5HLTQyODogIFN0cmluZ1V0aWxzLmlzQWxwaGEsIGlzQWxwaGFudW1lcmljIGFuZCBpc051bWVyaWMgbm93IHJldHVybiBmYWxzZQogICAgICAgICAgICAgZm9yICIiCm8gTEFORy00Mzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIVE1MKCkgZG9lcyBub3QgZXNjYXBlIGNoYXJzICgweDAwLTB4MjApLgpvIExBTkctNDQ4OiAgTG93ZXIgQXNjaWkgQ2hhcmFjdGVycyBkb24ndCBnZXQgZW5jb2RlZCBieSBFbnRpdGllcy5qYXZhLgpvIExBTkctNDY4OiAgSkRLIDEuNSBidWlsZC9ydW50aW1lIGZhaWx1cmUgb24gTEFORy0zOTMgKEVxdWFsc0J1aWxkZXIpLgpvIExBTkctNDc0OiAgRml4ZXMgZm9yIHRocmVhZCBzYWZldHkuCm8gTEFORy00Nzg6ICBTdG9wV2F0Y2ggZG9lcyBub3QgcmVzaXN0IHRvIHN5c3RlbSB0aW1lIGNoYW5nZXMuCm8gTEFORy00ODA6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sIGluY29ycmVjdGx5IGNvbnZlcnRzIHVuaWNvZGUKICAgICAgICAgICAgIGNoYXJhY3RlcnMgYWJvdmUgVSswMEZGRkYgaW50byAyIGNoYXJhY3RlcnMuCm8gTEFORy00ODE6ICBQb3NzaWJsZSByYWNlLWNvbmRpdGlvbnMgaW4gaGFzaENvZGUgb2YgdGhlIHJhbmdlIGNsYXNzZXMuCm8gTEFORy01NjQ6ICBJbXByb3ZlIFN0ckxvb2t1cCBBUEkgZG9jdW1lbnRhdGlvbi4KbyBMQU5HLTU2ODogIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSBpcyB1c2VkIHRvbyBnZW5lcmFsbHkuCm8gTEFORy01NzE6ICBBcnJheVV0aWxzLmFkZChUWzogIGFycmF5LCBUIGVsZW1lbnQpIGNhbiBjcmVhdGUgdW5leHBlY3RlZAogICAgICAgICAgICAgQ2xhc3NDYXN0RXhjZXB0aW9uLgpvIExBTkctNTg1OiAgZXhjZXB0aW9uLkRlZmF1bHRFeGNlcHRpb25Db250ZXh0LmdldEZvcm1hdHRlZEV4Y2VwdGlvbk1lc3NhZ2UKICAgICAgICAgICAgIGNhdGNoZXMgVGhyb3dhYmxlLgpvIExBTkctNTk2OiAgU3RyU3Vic3RpdHV0b3Igc2hvdWxkIGFsc28gaGFuZGxlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgb2YgYQogICAgICAgICAgICAgamF2YS51dGlsLlByb3BlcnRpZXMgY2xhc3MKbyBMQU5HLTYwMDogIEphdmFkb2MgaXMgaW5jb3JyZWN0IGZvciBwdWJsaWMgc3RhdGljIGludAogICAgICAgICAgICAgbGFzdEluZGV4T2YoU3RyaW5nIHN0ciwgU3RyaW5nIHNlYXJjaFN0cikuCm8gTEFORy02MDI6ICBDb250ZXh0ZWRSdW50aW1lRXhjZXB0aW9uIG5vIGxvbmdlciBhbiAndW5jaGVja2VkJyBleGNlcHRpb24uCm8gTEFORy02MDY6ICBFcXVhbHNCdWlsZGVyIGNhdXNlcyBTdGFja092ZXJmbG93RXhjZXB0aW9uLgpvIExBTkctNjA4OiAgU29tZSBTdHJpbmdVdGlscyBtZXRob2RzIHNob3VsZCB0YWtlIGFuIGludCBjaGFyYWN0ZXIgaW5zdGVhZCBvZgogICAgICAgICAgICAgY2hhciB0byB1c2UgU3RyaW5nIEFQSSBmZWF0dXJlcy4KbyBMQU5HLTYxNzogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZVhNTCgpIGNhbid0IHByb2Nlc3MgVVRGLTE2IHN1cHBsZW1lbnRhcnkKICAgICAgICAgICAgIGNoYXJhY3RlcnMKbyBMQU5HLTYyNDogIFN5c3RlbVV0aWxzLmdldEphdmFWZXJzaW9uQXNGbG9hdCB0aHJvd3MKICAgICAgICAgICAgIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gb24gQW5kcm9pZCBydW50aW1lL0RhbHZpayBWTQpvIExBTkctNjI5OiAgQ2hhcnNldCBtYXkgbm90IGJlIHRocmVhZHNhZmUsIGJlY2F1c2UgdGhlIEhhc2hTZXQgaXMgbm90IHN5bmNoLgpvIExBTkctNjM4OiAgTnVtYmVyVXRpbHMgY3JlYXRlTnVtYmVyIHRocm93cyBhIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KICAgICAgICAgICAgIHdoZW4gYXJndW1lbnQgY29udGFpbmluZyAiZSIgYW5kICJFIiBpcyBwYXNzZWQgaW4KbyBMQU5HLTY0MzogIEphdmFkb2MgU3RyaW5nVXRpbHMubGVmdCgpIGNsYWltcyB0byB0aHJvdyBvbiBuZWdhdGl2ZSBsZW4sIGJ1dAogICAgICAgICAgICAgZG9lc24ndApvIExBTkctNjQ1OiAgRmFzdERhdGVGb3JtYXQuZm9ybWF0KCkgb3V0cHV0cyBpbmNvcnJlY3Qgd2VlayBvZiB5ZWFyIGJlY2F1c2UKICAgICAgICAgICAgIGxvY2FsZSBpc24ndCByZXNwZWN0ZWQKbyBMQU5HLTY0NjogIFN0cmluZ0VzY2FwZVV0aWxzLnVuZXNjYXBlSmF2YSBkb2Vzbid0IGhhbmRsZSBvY3RhbCBlc2NhcGVzIGFuZAogICAgICAgICAgICAgVW5pY29kZSB3aXRoIGV4dHJhIHUKbyBMQU5HLTY1NjogIEV4YW1wbGUgU3RyaW5nVXRpbHMuaW5kZXhPZkFueUJ1dCgienphYnl5Y2R4eCIsICcnKSA9IDAgaW5jb3JyZWN0Cm8gTEFORy02NTg6ICBTb21lIEVudGl0eXMgbGlrZSAmT3VtbDsgYXJlIG5vdCBtYXRjaGVkIHByb3Blcmx5IGFnYWluc3QgaXRzCiAgICAgICAgICAgICBJU084ODU5LTEgcmVwcmVzZW50YXRpb24KbyBMQU5HLTY1OTogIEVudGl0eUFycmF5cyB0eXBvOiB7Ilx1MjEyMiIsICImbWludXM7In0sIC8vIG1pbnVzIHNpZ24sIFUrMjIxMgogICAgICAgICAgICAgSVNPdGVjaApvIExBTkctNjY6ICAgU3RyaW5nRXNjYXBlci5lc2NhcGVYbWwoKSBlc2NhcGVzIGNoYXJhY3RlcnMgPiAweDdmLgpvIExBTkctNjYyOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm1hdGguRnJhY3Rpb24gZG9lcyBub3QgcmVkdWNlCiAgICAgICAgICAgICAoSW50ZWdlci5NSU5fVkFMVUUsIDJeaykKbyBMQU5HLTY2MzogIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5tYXRoLkZyYWN0aW9uIGRvZXMgbm90IGFsd2F5cyBzdWNjZWVkIGluCiAgICAgICAgICAgICBtdWx0aXBseUJ5IGFuZCBkaXZpZGVCeQpvIExBTkctNjY0OiAgTnVtYmVyVXRpbHMuaXNOdW1iZXIoU3RyaW5nKSBpcyBub3QgcmlnaHQgd2hlbiB0aGUgU3RyaW5nIGlzCiAgICAgICAgICAgICAiMS4xTCIKbyBMQU5HLTY3MjogIERvYyBidWcgaW4gRGF0ZVV0aWxzI2NlaWxpbmcKbyBMQU5HLTY3NzogIERhdGVVdGlscy5pc1NhbWVMb2NhbFRpbWUgY29tcGFyZXMgdXNpbmcgMTIgaG91ciBjbG9jayBhbmQgbm90CiAgICAgICAgICAgICAyNCBob3VyCm8gTEFORy02ODU6ICBFcXVhbHNCdWlsZGVyIHN5bmNocm9uaXplcyBvbiBIYXNoQ29kZUJ1aWxkZXIuCm8gTEFORy03MDM6ICBTdHJpbmdVdGlscy5qb2luIHRocm93cyBOUEUgd2hlbiB0b1N0cmluZyByZXR1cm5zIG51bGwgZm9yIG9uZSBvZgogICAgICAgICAgICAgb2JqZWN0cyBpbiBjb2xsZWN0aW9uCm8gTEFORy03MTA6ICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gY2FsbGluZyB1bmVzY2FwZUh0bWw0KCImIzAzIikKbyBMQU5HLTcxNDogIFN0cmluZ1V0aWxzIGRvYy9jb21tZW50IHNwZWxsaW5nIGZpeGVzLgpvIExBTkctNzE1OiAgQ2hhclNldFV0aWxzLnNxdWVlemUoKSBzcGVlZHVwLgpvIExBTkctNzE2OiAgc3dhcENhc2UgYW5kICpjYXBpdGFsaXplIHNwZWVkdXBzLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBDb21tb25zIExhbmcsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvCnN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlCkFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIExhbmcgdGVhbQoK