LyoKICogIE5vdGVwYWQgKEVzcGVyYW50byBMYW5ndWFnZSBSZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMjAwNiBBbnRvbmlvIENvZGF6emkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX0VTUEVSQU5UTywgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiRG9zaWVybyIgewogIE1FTlVJVEVNICImTm92YVx0Q3RybCtOIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiTWFsZmVybXVcdEN0cmwrTyIsICAgICBDTURfT1BFTgogIE1FTlVJVEVNICJLb24mc2VydnVcdEN0cmwrUyIsICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJLb25zZXJ2dSAma2llbCIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlByZXN1XHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJJbXBvenUgcGH4b24iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJJbXBvenUgUHJpbnRpbG9uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiRmludSIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImUmVkYWt0byIgewogIE1FTlVJVEVNICJOdWxpZ3VcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJUb25kdVx0Q3RybCtYIiwgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIktvcGl1XHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiRW5tZXR1XHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiRm9yaWd1XHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiRWxlayZ0dSDmaW9uXHRDdHJsK0EiLCAgICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICJIb3JvL0RhdG9cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWxpbmV1IGH9dG9tYXRlIiwgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZJbXBvenUgdGlwYXJvbi4uLiIsICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImU2Vy5nUiIHsKICBNRU5VSVRFTSAiU2Vy5nVcdEN0cmwrRiIsICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJTZXLmdSBzZWt2YW50YVx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZSZXBsYWNlLi4uXHRDdHJsK0giLCBDTURfUkVQTEFDRQogfQpQT1BVUCAiJkhlbHBvIiB7CiAgTUVOVUlURU0gIkVuaGF2byIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiU2Vy5nUuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIlByaSBIZWxwYW50byIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlByaSBOb3RlcGFkIiwgIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJJbXBvenUgbGEgcGH4b24iCnsKTFRFWFQgICAgIkthcG5vdG9qOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJQaWVkbm90b2o6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFy+GVub2o6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImTWFsZGVrc3RyYToiLCAgICAgICAgMHgxNDUsICAgMTMsIDU1LCAzNywgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlN1cHJhOiIsICAgICAgICAgMHgxNDgsICAgIDEzLCA3MywgMzcsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEZWtzdHJhOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiU3UmYmE6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiQm9uZSIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIlJlemlnbmkiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkhlbHBvIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiUGH4byAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3RibG9rbyIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVST1JPIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVRFTlRVIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtbyBwcmkiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNlbi1ub21vKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUdXRhaiBkb3NpZXJvaiAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJUZWtzdGRvc2llcm9qICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGEgZG9zaWVybyAnJXMnIGVzdGFzIHRybyBncmFuZGEgcG9yIE5vdGVwYWQuXG4gXApPbmkga29uc2lsYXMgdXppIGFsaWFuIHJlZGFrdGlsb24uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmUgZXN0YXMgZW5tZXRpdGEgdGVrc3RvLiBcClxuT25pIGtvbnNpbGFzIHNrcmliaSBkZXZvdmUga2FqIHJlcHJvdmkiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYSBkb3NpZXJvICclcydcbm5lIGVrc2lzdGFzXG5cbiBcCsZ1IG1pIGRldmFzIGtyZWkgbm92YW4gZG9zaWVyb24/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGEgZG9zaWVybyclcydcbiBlc3RpcyD+YW74aXRhXG5cbiBcCsZ1IHZpIHZvbGFzIGtvbnNlcnZpIGxhIP5hbvhvam4/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaSBuZSB0cm92aXMgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTGEgbWVtb3JvIGVzdGFzIG5lc3VmaeZhIHBvciBrb21wbGV0aWdvIGplIGxhIHRhc2tvIFwKXG5Pbmkga29uc2lsYXMgZmVybWkgdW51IG8gcGx1cmFqIHByb2dyYW1vaiBwb3JcbmxpYmVyaWdpIG1lbW9yb24uIgoKfQo=